Temporisations et compteurs sont donc essentiels que vous verrez de nombreux exemples impliquant tout au long de cette série. Comme son nom l’indique, minuteries sont utilisés pour le temps et le comptage. Comptage et le calendrier vous permet de faire des choses très soignés comme contrôle LED brights, degrés de l’angle du puits de servo, recevoir des données de capteur qui transmettent au PWM, en créant une minuterie ou simplement ajouter une variable de temps à votre projet de microcontrôleur.
Tout d’abord, il est important de comprendre qu’il existe une horloge à l’intérieur (ou extérieur) les microcontrôleurs AVR. Tous les microcontrôleurs ont des horloges en eux, ou utilisent une horloge externe. Microcontrôleurs nécessitent des horloges pour les programmes peuvent être exécutés en rythme avec l’horloge. Comme les programmes nous vous écrivons, car chaque battement d’horloge passe, les instructions sont traitées en temps avec les tiques de l’horloge.
Les fonctions timer et compteur dans le dénombrement de microcontrôleur en synchronisation avec l’horloge du microcontrôleur. Toutefois, le compteur ne compte jusqu'à 65535 (compteur 16 bits) ou 256 (compteur 8 bits). C’est bien loin des tiques 1 000 000 par seconde qui fournit le Microcontrôleur AVR standard. Le microcontrôleur offre une fonctionnalité très utile nommée prescaling. Prescaling est une manière simpliste pour le compteur d’ignorer un certain nombre de graduations. Les microcontrôleurs AVR permettent prescaling nombres de: 8, 64, 256 et 1024. Par exemple, si la valeur 64 sur le prescaler, le compteur comptera seulement chaque fois l’horloge tiques 64 fois. Cela signifie en une seconde (où le microcontrôleur clique sur 1 000 000 fois) le compteur compterait seulement jusqu'à 15 625. Si le compteur décompte progressif à ce nombre, alors vous seriez en mesure à clignoter une LED chaque une seconde.
Principalement, les minuteries ont un registre de contrôle et un registre qui contient le nombre. Le registre de contrôle contient certains commutateurs pour activer ou désactiver des fonctionnalités. Et vous l’aurez deviné... l’une des caractéristiques est que prescaling pour sélectionner. Le registre de contrôle est appelé TCCR0 ou TCCR1 (registre de contrôle Timer/compteur). Le TCCR0 est le registre de 8 bits de contrôle et seulement a un registre de contrôle de 8 bits, donc il n’y a seulement 8 interrupteurs pour allumer et éteindre. TCCR1 est de 16-bit, donc il a 16 commutateurs pour allumer et éteindre, mais il s’agit dans les deux registres de 8 bits marqués A et B (TCCR1A et TCCR1B). Les commutateurs sont comme suit : FOC (force sortie comparer), WGM (Mode de génération de forme d’onde), COM (comparer le Mode de sortie Match) et CS (sélectionnez horloge).
Le Registre qui contient le nombre est appelé le registre TCNT. Et il y a une version 8 bits (TCNT0) et une version 16 bits (TCNT1). Le TCNT1 Registre obtient en fait son numéro de deux autres registres de 8 bits pour créer un numéro complet de 16 bits, mais c’est tout fait dans les coulisses (abstraites), donc vous n’avez pas à vous soucier de comment le TCNT1 obtient cette capacité d’avoir 16-bit, il suffit de penser c’est magique.
Dans la vidéo, les deux programmes se sont révélés : celui qui montre juste un seul voyant clignotant à environ 1 seconde et un autre programme qui possède une rangée de 7 LEDs chassant chaque seconde et une autre rangée de 7 LEDs chassant chacune à 1 seconde. Ce dernier programme est montré ici car il a le plus de fonctionnalités utilisées avec la minuterie de 16 bits.
Sans être répétitif de messages précédents, le programme initialise les ports pour les LEDs et affecte au timer/compteur #1 (le temporisateur de 16 bits). Le registre de contrôle TCCR1B est utilisé pour définir le facteur prescaling 64 avec le CS10 et CS11 bascule.
Puisque nous voulons une des 7 LED pour chasser 1/7ème de seconde chacune, nous prenons le nombre 15 625 (1000000/64 - n’oubliez pas les 1000000 est l’horloge à 1 mhz du microcontrôleur) et le diviser par 7 pour obtenir ~ 2,232.143. Maintenant, vous dites, mais vous utilisez seulement 2232 dans le pogram!! C’est parce que TCNT1 n’acceptera que les entiers (pas de nombres décimaux). Maintenant que tu le dis, le timing sera inactif le montant après la virgule ! Vrai, mais l’horloge interne de l’AVR est +/-10 % inexacte de toute façon. Si un cristal externe est utilisé, vous pouvez utiliser un nombre parfait qui représente le nombre approprié.
Vous remarquerez que le TCNT1 est également remis à zéro manuellement. C’est passé le 2232 condition que va garder comptage en nécessaire dans le cas contraire le TCNT1 a été mis. Il y a les autres caractéristiques de contrôle qui a une mise à zéro automatique de ce nombre, mais nous aurons à celle dans un autre tutoriel. Les parties restantes du programme utilise des choses que nous avons appris dans les tutoriels précédents (pour allumer et éteindre LED et tableaux).