J'ai récemment découvert les horloges de surveillance, et j'essaie d'en implémenter une pour mon circuit dans le but de réinitialiser mon microcontrôleur (AVR) s'il se bloque (c'est-à-dire qu'il ne répond pas au chien de garde).
D'après certaines recherches, il me semble qu'il existe environ quatre options:
- Connecter mon microcontrôleur à un circuit intégré dédié spécifique au chien de garde .
- Connecter mon microcontrôleur à un microcontrôleur supplémentaire (certains très basiques et peu coûteux), ce dernier étant codé dans le seul but spécifique de la synchronisation du chien de garde.
- Disposez mon propre circuit de surveillance basé sur une minuterie 555 et connectez-le à mon microcontrôleur.
- Utilisez la fonction de minuterie de surveillance interne sur mon microcontrôleur.
.
Laquelle des approches ci-dessus classeriez-vous plus haut et pourquoi?
Je voudrais définir un temps de surveillance d'environ 6 secondes, en fonction de certains critères pour la façon dont je fais le reste de ma conception et de mon code (l'appareil sera un enregistreur de température périodique alimenté par batterie).
Une petite note : Ma préférence serait l'option 1, pour plus de simplicité, cependant, sur la base du couple que j'ai trouvé, ces pièces semblent être chères (j'aimerais une solution inférieure à 1,25 USD au maximum), ou ne permettent que moins de 2 secondes pour la période de synchronisation du chien de garde.
la source
Réponses:
Comme pjc50dit que 6 secondes, c'est long. Un microcontrôleur typique exécutera des dizaines de millions d'instructions pendant cette période, et alors beaucoup de choses peuvent mal se passer. Supposons que vous contrôliez une certaine charge avec PWM, et un faible rapport cyclique de 10% maintient la dissipation faible. Le microcontrôleur passe à la banane et la sortie est bloquée à un niveau de service élevé de 100%. La charge ne l'aime pas et meurt. Vous ne voulez pas attendre 6 secondes pour que cela se produise. Il devrait y avoir une partie de votre code où vous passez beaucoup plus de fréquences. Une boucle principale peut être aussi courte que 10 ms, alors vous pouvez définir le timeout du chien de garde à 100 ms, par exemple. Si vous donnez un coup de pied au chien toutes les 10 ms, un temps mort signifie que vous l'avez manqué 10 fois! Une fois, OK, mais dix fois c'est un désastre, et vous devez agir. La charge sera coupée après 100 ms au lieu de 6 secondes,
la source
la source
Si votre circuit / appareil ne contrôle pas le matériel vital, vous pouvez probablement vous en sortir en utilisant le chien de garde interne. Sinon (ou en fait, en tout cas) consultez ces deux excellents articles de Jack Ganssle:
http://www.ganssle.com/watchdogs.htm
http://www.ganssle.com/articles/watchdogsredux.htm
Soit dit en passant, si vous ne pouvez pas définir le chien de garde à un intervalle long, vous pouvez essayer l'approche de se réveiller assez souvent pour donner un coup de pied au chien de garde, mais en ne faisant que la mesure complète / l'écriture des journaux de temps en temps.
la source