Dans cette partie, nous allons démarrer le TIMER1
et afficher ses valeurs.
Vous pourrez notamment vous aider de la section 15.11 de la
Datasheet de l'ATmega328P.
Paramétrez le timer de manière à ce que sa valeur plafond (TOP) soit de
0xFFFF
. Vous utiliserez le mode de fonctionnement Normal
avec un pescaler à 1024
Quelle est la fréquence de débordement du timer ?
À l'aide de votre implémentation de la communication série, affichez
la valeur du timer TCNT1
. Vérifiez que les valeurs que vous obtenez correspondent
bien à la fréquence de débordement prévue.
system_clock()
Toujours à l'aide du timer TIMER1
, nous allons implémenter une fonction
uint32_t system_clock()
qui retourne le nombre de millisecondes écoulées depuis le
démarrage du microcontrôleur.
L'objectif sera d'atteindre une fréquence de déborde de 1000Hz
, soit une
période de 1ms
. Nous utiliserons le mode CTC
afin de pouvoir régler
la valeur du plafond.
Déterminez le prescaler et la valeur du plafond à utiliser pour obtenir
une fréquence de débordement de 1000Hz
.
Activez une interruption sur le débordement du timer.
Indice: vous utiliserez le vecteur d'interruption TIMER1_COMPA_vect
.
Implémentez la fonction system_clock()
. Vous utiliserez une variable
globale system_clock_ms
qui sera incrémentée à chaque débordement du
timer.
Testez votre implémentation en affichant la valeur de system_clock()
à
l'aide de la communication série.
En suivant le principe de l'ordonancement coopératif, créez un firmware qui réalise simultanément les deux tâches suivantes:
Vous pourrez vous aider de l'exemple donné en cours pour le clignotement
de la LED, et implémenter echo_init()
et echo_tick()
pour réaliser une tâche
d'écho sur le même modèle.