Étape 6: Le code
Télécharger le fichier ci-joint .ino et utilisez votre méthode préférée pour compiler et télécharger à votre ATtiny85. Ma méthode préférée consiste à utiliser un Arduino UNO en tant que programmeur comme décrit ici. Définissez votre ATtiny de fonctionner à 1MHz avant de télécharger si possible. Si vous voulez juste faire avec elle, puis vous avez ma permission pour passer à l’étape suivante, mais j’espère que vous trouverez le bit suivant instructif.
Ce code tire parti de veille de la ATtiny85 afin d’économiser les piles. Il passe quelque chose comme ceci :
Réveille >> circuit de commutation souricière sur >> vérifier si le circuit de la souricière est ouvert >> s’il est ouvert, passer sur le circuit d’émetteur pour 250 millisecondes >> circuit souricière Switch off >> aller dormir pendant 10 minutes... etc.
En mode "veille", le microcontrôleur utilise une minuscule petite quantité de puissance. En théorie la petite batterie cr2032 pourrait maintenir pendant mois, voire des années. Puisqu’il se réveille seulement pour une fraction de seconde que toutes les dix minutes ou exigence tant, puissance est maintenue basse. Si vous êtes vraiment folle de tirer le meilleur parti de votre batterie, je vois au moins un endroit où vous pourriez peut-être ajouter une résistance dans le circuit et il y a quelques réglages, que vous pourriez faire au code - mais je vous laisse découvrir. S’il vous plaît commentaire si vous le faites !
Alors, comment le ATtiny ne sait pas quand il est temps de se réveiller ? Le code met en place ce qu’on appelle un « Watchdog Timer » (WDT) pour déclencher une interruption lorsqu’il expire (ou déborde). Par défaut, un débordement de WDT entraîne le ATtiny pour remettre à zéro si le programme est bloqué pour une raison quelconque, mais nous ne voulons pas le faire ici. Heureusement, cette fonctionnalité peut être désactivée et la WDT peut être mis en place juste au feu une interruption.
Le code ci-joint est principalement un sketch Arduino assez standard. Si vous êtes un Arduinohead comme je suis, certaines parties de ce code peuvent frontière sur un territoire inconnu. Il s’agit d’un peu de maths peu (voir cette introduction fantastique) avec référence à la feuille de données ATtinyx5. Le programme manipule le Watchdog Timer Control Register de la ATtiny85 - voyez la Section 8.5.2 de la feuille de données pour plus de détails. Ce registre est un morceau de huit bits de mémoire dans la puce qui contrôle ce que fait le temporisateur. Chaque bit de ce registre a une certaine importance pour le microcontrôleur - ils activer certaines fonctionnalités ou désactiver selon que le bit est un 1 ou un 0. Ces bits sont gérées dans le code par un peu de magie de mathématiques pour le bit C !
par exemple
WDTCR | = (1 << WDCE | 1 << WDE)
WDTCR se réfère au livre de contrôle Timer chien de garde, disons que pour des raisons de cet exemple c’est d’abord 00000001.
Le | = est le composé au niveau du bit ou opérateur dans C - c’est juste une façon abrégée de désigner une opération OR sur un groupe de bits (8 bits dans le cas de WDTCR).
<< est un opérateur de décalage vers la gauche au niveau du bit. Un coup de œil à la Section 8.5.2 de la fiche technique indique que le bit WDCE (chien de garde changement active) du Registre WDTCR est le cinquième de la droite. WDCE est défini en tant que 4, donc 1 << 4 déplacerait une 1 valeur de droite à gauche (commençant à la position 0) afin de donner 00010000. WDE correspond à 3 qui donne 00001000. | est la notation C opération de bits OR. Donc (1 << WDCE | 1 << WDE) est (00010000 | 00001000) qui donne 00011000.
C’est pourquoi 00000001 | = 00011000 donnera 00011001. Ouf !
La fonction ISR(WDT_vect) est l’Interrupt Service Routine qui est appelée chaque fois que le temporisateur provoque une interruption. Le WDT_vect identifie le vecteur d’interruption de la minuterie chien de garde. Le délai d’attente maximal à que la WDT pouvait être fixée est d’environ 8 secondes. Pour cette raison, l’ISR incrémente un compteur et le microcontrôleur vérifiera seulement le circuit de la souricière, lorsque le compteur atteint 75, ce qui serait une dizaine de minutes.