Étape 6: Configurer Timer/compteur 0
CTC mode peut être utilisé pour activer/désactiver la sortie OC0A sur la broche 2, Port B (physique broche 14). Pour activer la sortie sur cette broche, DDRB doit être établi en fonction. Le code C pour c’est tout comme la mise en place d’une sortie pour un blinkenlight.DDRB = _BV(PB2) ; Port B2 est une sortie.
La prochaine étape est de fournir un signal d’horloge et de charger le registre de comparer de sortie pour produire une forme d’onde comme une fréquence. L’équation pour la fréquence qui en résulte est donnée dans la feuille de données (page 72). Termes dans l’équation seront décrites ci-dessous. Voici l’équation :
fOC0A = fclk_I/O / 2*N*(1+OCR0A)
Où fOC0A: = fréquence de sortie
fclk_I/O: = fréquence de source d’horloge
N: = facteur de prescale horloge
OCR0A: = valeur sortie comparer Registre pour Timer/compteur 0 a.
Horloge de fréquence de la Source, fclk_I/O
Il s’agit de la fréquence de l’horloge système. La valeur par défaut est de 1 MHz. Bits CS00, CS01, et contrôlent la CS02 de TCCR0B cette sélection. Puisque ces bits également sélectionnent la valeur de N, il est décrit ci-après.
Valeur de diviseur, N
N est la valeur utilisée pour diviser ou prescale, l’horloge système. Bits CS00 CS01 et CS02 de TCCR0B contrôlent cette sélection. Tableau 41 à la page 81 de la fiche de données de ATtiny2313 décrit les combinaisons. Étant donné que vous souhaitez une fréquence près 1kHz, bits CS00 et CS01 de TCCR0B seront définis. Notez qu’affectant tous les trois bits 0, ne sélectionnant ainsi aucune source d’horloge, cesse effectivement de la sortie. Il s’agit de la méthode qui sera utilisée pour démarrer et arrêter le bip.
Valeur, OCR0A
Cette valeur est la valeur du compteur qui est chargé dans la sortie comparer s’inscrire pour Timer/compteur 0 a. Lorsque cette valeur est atteinte, le compteur sera réinitialisé à zéro et décompte recommencera jusqu'à ce que le sommet est atteint et le cycle se répète. TOP est facilement modifiée, donc la fréquence de la balise est facile à changer. Étant donné que vous souhaitez une fréquence près 1kHz, haut est fixé à 7. (Notez le Prédiviseur pourrait ont été définie sur 8 et haut fixé à 63. Même résultat - votre choix.)
Fréquence de sortie, fOC0A
À l’aide de l’équation pour calculer les résultats de fréquence de sortie en :
fOC0A = 1 000 000 / 2 * 64 * (1 + 7)
fOC0A = 977Hz
Assez proche ! Voici le code pour charger le registre de comparer en sortie et le Registre du contrôle Timer compteur 0. Veuillez consulter le code de programme réel pour comprendre comment ils sont utilisés.
OCR0A = 7 ; Valeur de temps
TCCR0B = _BV(CS01) | _BV(CS00) ; Sélectionnez horloge interne & Prédiviseur = 8
TCCR0B = 0 ; aucune source d’horloge ne désactive ton
Réglage du Mode temps/compteur
Comme un dernier détail, nous allons spécifier le mode Timer/compteur que nous désirons en positionnant les bits appropriés dans le registre de contrôle Timer/compteur 0 a. CTC mode est sélectionné en définissant le bit WGM01 tel que décrit dans le tableau 40, page 79 de la feuille de données. Car nous voulons la sortie à activer/désactiver chaque cycle, bit COM0A0 doit également être défini comme indiqué dans le tableau 34 à la page 77. Voici le code :
TCCR0A = _BV(COM0A0) | _BV(WGM01) ; Mode d’alternance CTC