Étape 6: minuteries
Une minuterie est un dispositif de comptage simple dans votre micro, il est également connu comme un compteur pour cette raison.
À chaque graduation ils incrémentent eux-mêmes.
Vous pouvez vérifier la valeur lorsque vous avez besoin d’une idée de combien de temps a passé, ou vous pouvez les obtenir pour déclencher une interruption pour vous laisser savoir quand une certaine valeur a été atteint.
Minuteries ne sont pas très précis, si vous avez besoin de précision, vous voudrez une horloge temps réel (RTC).
Ils sont cependant assez bon pour des tâches plus
Donc avant d’entrer en elle, permet d’examiner comment une minuterie fonctionne réellement.
Chaque battement d’horloge du micro est introduit dans le module timer.
Ici, elle peut être divisée en différentes quantités pour produire une tique plus lente (nous aurons à celui plus tard).
Sur la tique qui sortent le diviseur, la minuterie ajoute 1 à la valeur de registre c' est.
Comme les registres que nous avons déjà parcouru, celui-ci peut être lues ou écrite.
Vous pouvez voir ce que le nombre de cycles est à, et basé sur la vitesse d’horloge et le séparateur, vous pouvez déterminer approximativement combien de temps a passé.
Lorsque la minuterie atteint sa limite (255 pour une minuterie de 8 bit, 65535 pour un 16-bit timer) il réinitialise à 0 et commence à compter à nouveau.
Si vous activez des interruptions, il avertira votre code que cela s’est produit.
Vous pouvez également définir une valeur de comparaison qui déclenchera une interruption si vous souhaitez être informé d’un temps la plus courte alors déborder.
Si vous avez besoin mesurer une plus longue période de temps, vous pouvez utiliser un diviseur d’horloge (penser que c’est un diviseur).
Par exemple, un diviseur de 8 enverra seulement une tique au compteur après que elle a reçu 8 tiques de l’horloge système.
Vous perdez la précision, mais vous pouvez mesurer une plus longue période de temps.
Si vous voulez mesurer une très longue période de temps (disons 10 minutes, qui est un temps long pour votre micro rapide!), vous pouvez compter combien de fois l’over flow interruption est déclenchée et agir basé là-dessus.
Un moyen facile de travailler sur les réglages de l’horloge est d’utiliser une calculatrice comme celui-ci :
http://Frank.circleofcurrent.com/cache/avrtimercalc.htm
Ainsi, assez explication, nous allons entrer dans un code !
L’exemple ici va montrer comment utiliser l’interruption de débordement pour de longues périodes de temps, pour voir comment des périodes plus petits (microsecondes & millisecondes par exemple), jetez un oeil sur le code du récepteur IR, qui fait largement appel à la fois les signaux entrants de télécommande.
Mettre en place votre maquette comme dans l’image et télécharger le code ci-joint. (Définir l’horloge de la micro à 1MHz)
Lorsque vous appuyez sur le bouton, le voyant va s’allumer et rester allumé pendant 30 secondes.
Si vous appuyez de nouveau sur le bouton, la minuterie sera réinitialisée.
Nous allons donc examiner le code.
La boucle principale est assez standard, mis en place la LED et le bouton, activer les interruptions (n’oubliez pas cela!).
Lorsque vous appuyez sur le bouton appeler la fonction « start_timer ».
start_timer définit le Prédiviseur à 1024, permettre l’interruption de débordement pour timer0, effacer nos overflow_count et désactivez la minuterie.
Maintenant, chaque fois que l’horloge passe plus de 255, l’interruption est appelée.
L’interruption est la fonction spécialement nommée ISR(TIMER0_OVF_vect)
Ici, nous vérifions si nous avons débordé suffisamment de fois (calculé avec le site calculatrice ci-dessus), et si nous devons nous désactiver l’interruption de la minuterie et éteindre la LED.
Dans le cas contraire nous simplement incrémenter notre compte et laisser la minuterie à recommencer.
Assez simple à droite ?
Cependant, la beauté de celui-ci est que vous pouvez avoir d’autre code exécuté alors que la minuterie atteint.
Lorsqu’elle déborde, il y aura un petit détour à l’Interrupt Service Routine (ISR), et une fois que c’est fait il retournera à votre code en cours d’exécution précédemment comme si de rien était !
Mieux vaut donc un simple retard, que vous pouvez faire plus de travail ou aller pour dormir pour économiser l’énergie !