Etape 3: Comment configurer le temporisateur interne Arduino
Résumé : À l’étape 3 de ce Instructable, nous examinons comment configurer le temporisateur interne Arduino. Nous avons également parler de questions avec le temporisateur interne Arduino et expliquer pourquoi un temporisateur externe, est un meilleur choix dans les systèmes de nombreux, mais pas toutes.
Mise en place le temporisateur interne Arduino
L’Arduino est une machine beaucoup plus simple qu’un Pi de framboise. Toutefois, il est effectivement plus facile d’accrocher un Arduino que c’est une Pi framboise parce que tout le code est simple fileté sur l’Arduino. Single threaded signifie qu’il y a un seul programme en cours d’exécution à la fois sur le Arudino (à l’exception des interruptions, d’une manière de penser). Au fait, que si vous n’avez qu’un seul thread en cours d’exécution à la fois, tout raccrocher que le thread s’arrête l’ordinateur. Naturellement, il y a des autres problèmes qui peuvent provoquer votre code d’écrasement et Arduino pour enfermer. Délais d’attente sur les périphériques, puissance questions, RFI, etc, etc. Mauvais code à l’aide de la fonction millis() est un problème classique. Vous devez gérer le renversement à 49,5 jours si vous n’utilisez pas une horloge en temps réel.
Comment utiliser le chien de garde interne Arduino (si vous pouvez le faire fonctionner)
Tout d’abord de tous une définition. L’OMC est définie comme la quantité maximale de temps que le temporisateur peut compter avant il doit être réinitialisé (en d’autres termes, lorsqu’il va redémarrer l’ordinateur si l’ordinateur s’en va).
Il y a beaucoup de choses qui vont empêcher le chien de garde interne de travailler dans l’Arduino, alors méfiez-vous.
Voici une façon de travailler avec le temporisateur interne de Arduino. Tout d’abord, l' OMC de tous les modèles de l’Arduino est un MAXIMUM de 8 secondes. Gardez cela à l’esprit. Ayant une plus longue l’OMC couvre beaucoup plus de péchés à mon avis (l’OMC est de 16 secondes sur le Raspberry Pi chien de garde interne – qui n’est pas encore assez long à notre goût), donc l' Arduino l’OMC est un peu court. Nous avons souvent séries processus qui s’exécutent plus de 8 secondes dans nos conceptions. Oui, vous pouvez incorporer tapoter dans le code, mais lorsque vous utilisez des bibliothèques externes, c’est une douleur.
Pour essayer votre Arduino WDT, construire une nouvelle esquisse dans l’IDE de Arudino. AVERTISSEMENT : Si vous utilisez un ArduinoMega 2560 ou un appareil similaire, vous pouvez « brique molle » votre appareil. Consultez les commentaires figurant dans la section problèmes ci-dessous. Mon Arduino UNO de SainSmart a bien fonctionné avec ce croquis. Commencez par
Exécutez l’esquisse et laisser tourner pendant 30 secondes environ. Vous ne devriez jamais voir le message « Arduino redémarré » à nouveau après le redémarrage. Puis, commentez l’instruction de RESETWATCHDOG comme ceci :
#define RESETWATCHDOG
Maintenant lorsque vous exécutez le croquis, si votre chien de garde fonctionne, alors vous devriez voir le redémarrage de l’Arduino toutes les 8 secondes ou plus dans le moniteur de la série.
Problèmes avec le temporisateur interne de Arduino
Utilisation de la WatchDogTimer interne de l’Arduino est problématique au mieux. Le temporisateur Arduino a une OMC de 8 secondes donc si vous téléchargez une nouvelle esquisse et le vieux croquis a l’organisme de surveillance est activée, vous pouvez obtenir en une séquence de redémarrage infini. Cela s’appelle « briquage de doux ». L’Arduino est alors quasiment sans valeur (sans beaucoup de travail), mais elle est toujours en cours. Expire le chien de garde, bootloader mises en chantier, les travaux de bootload expire pendant un certain temps, le chien de garde, etc, etc, etc. Certains chargeurs de démarrage maintenant désactiver la surveillance appropriée, mais attention il y a beaucoup de Arduinos là-bas (comme le Mega 2560 - dont nous sommes de grands fans) cela ne fonctionne toujours pas. Vous pouvez mettre à jour le bootloader, mais ce n’est pas une tâche facile. Il s’agit d’un problème que nous avons rencontrés plusieurs fois.
- Le chien de garde interne Arduino n’alimente pas le cycle du système. Il recharge l’Arduino via la ligne Reset. Cela signifie qu’il ne redémarre pas dans toutes les conditions. Surtout en faible puissance / conditions de chute de tension est souvent vécue avec Des systèmes solaires alimenté. J’ai vu cela dans Projet Curacao.
- Il y a des problèmes avec le chargeur de démarrage (voir ci-dessus)
- Le temporisateur interne n’est pas complètement indépendant de l’Arduino. Si votre code effectue un saut sur un morceau de code désactive la WDT, vous avez terminé. Essayez de remplacer votre pile pour voir quelles choses intéressantes peuvent arriver au code dans un petit système embarqué comme l’Arduino.
- maximum de l’OMC est 8 secondes. Vous pouvez facilement être en routine, comme la communication série pendant plus de 8 secondes. Toutes les possibilités de trouver et de mettre les appels wdt_reset() au bon endroit sont difficile et avec certaines routines séries, impossibles.