Étape 3: Exemple 1: compteur de vitesse à vélo
J’ai mis le minuteur 1 à interrompre toutes ms (fréquence de 1kHz) pour mesurer l’interrupteur magnétique. Si l’aimant est en passant par l’interrupteur, le signal provenant de l’interrupteur est élevé et la variable « temps » obtient la valeur zéro. Si l’aimant n’est pas proche du commutateur « temps » obtient incrémenté de 1. Cette façon de « temps » est en fait qu’une mesure de la quantité de temps en millisecondes écoulé depuis l’aimant dernière adoptée par l’interrupteur magnétique. Cette info est utilisée ultérieurement dans le code pour calculer les tr/min et mi/h de la moto.
Voici le morceau de code qui met en place le timer1 pour les interruptions de 1kHz
() de CLI ; //stop interruptions
interruption de jeu timer1 à 1kHz
TCCR1A = 0; / / set ensemble TCCR1A Registre à 0
TCCR1B = 0; / / Idem pour TCCR1B
TCNT1 = 0; //initialize valeur de compteur à 0
définir nombre de minuteur d’avancements d’échelon 1khz
OCR1A = 1999; / / = (16 * 10 ^ 6) / (1000 * 8) - 1
a dû utiliser 16 bits timer1 ce 1999 en Colombie-Britannique > 255, mais pourrait passer aux minuteries 0 ou 2 avec le plus grand diviseur
activer le mode de la CCT
TCCR1B | = (1 << WGM12) ;
Néc CS11 bit Prédiviseur 8
TCCR1B | = (1 << CS11) ;
activer minuteur comparer interruption
TIMSK1 | = (1 << OCIE1A) ;
SEI (); //allow interruptions
Voici le code complet si vous voulez jeter un coup d’oeil :