Commit dbfe8774059c89bc7ba79137975e9e8abf0e018e

Authored by thubert
1 parent 464d57a0

Fin des TODO

Showing 1 changed file with 6 additions and 8 deletions   Show diff stats
... ... @@ -103,7 +103,7 @@ Pour éviter des scrutations, nos boutons sont branchés sur les ports d'interru
103 103  
104 104 ## Ports parallèles
105 105  
106   -Nos afficheurs 7 segments se contrôlent par 12 pins. 8 servent à choisir les segments à afficher, qui seront branchées en PortA (0:8), et 4 pins commandés en logique inversée servent à choisir l'afficheur à utiliser. Nous brancherons ces derniers en PortC(0:4). Ce système implique de mettre au point un sytème d'affichage qui alterne entre les afficheurs, nous verrons cela juste après.
  106 +Nos afficheurs 7 segments se contrôlent par 12 pins. 8 servent à choisir les segments à afficher, qui seront branchées en PortA (0:7), et 4 pins commandés en logique inversée servent à choisir l'afficheur à utiliser. Nous brancherons ces derniers en PortC(0:3). Ce système implique de mettre au point un sytème d'affichage qui alterne entre les afficheurs, nous verrons cela juste après.
107 107  
108 108 Enfin, le signal de contrôle de la chaudière est branchée sur un port parallèle, un non utilisé par l'afficheur 7 segments pour simplifier éviter de faire des opérations d'entrée/sortie avec des masques. Pour la simulation, nous avons utilisé une LED branchée sur le port G (`PG0`).
109 109  
... ... @@ -117,15 +117,13 @@ Il sera configuré pour s'activer sur demande, ici toutes les dix secondes. En e
117 117  
118 118 ## Watchdog
119 119  
120   -TODO toutes les deux secondes, déclenche une interruption, nécessite d'être un multiple de 10 secondes, au final il marche pas parce qu'on sait pas du coup on utilise le timer (pas trop étaler là dessus, c'est expliqué plus en détails dans algorithme)
121   -
122   -↓↓ à réintégrer
123   -
124   -On s'est rendu compte que la fréquence d'appel était ~100× plus élevé que ce qui devrait être. N'ayant pas réussi à corriger ce comportement (que l'on a pu aussi constater en TP), nous avons dû trouver un autre moyen de procéder.
  120 +Le Watchdog doit être appellé toutes les secondes dans l'idéal. On l'a donc configuré pour avoir un tel résultat. Mais on s'est rendu compte que la fréquence d'appel était ~100× plus élevé que ce qui devrait être. N'ayant pas réussi à corriger ce comportement (que l'on a pu aussi constater en TP), nous avons dû trouver un autre moyen de procéder.
125 121  
126 122 ## Timer
127 123  
128   -TODO 4 ms (détailler le calcul, copier ce qu'il y a dans la partie algo), pas trop long pour que l'oeil puisse distinguer (persistence rétinienne, tout ça) ni trop court pour pas consommer d'énergie.
  124 +
  125 +Pour le timer, nous avons fait le choix de l'utiliser en overflow, ce qui simplifie l'initialisation. Nous avons utilisé un prescaler à 256, ce qui nous permet d'avoir une fréquence égale à $\frac{16 MHz}{256^2}=244.140625Hz$, ce qui correspond à 4.1 ms. Cela nous permet d'avoir un affichage complet tous les 16ms, ce qui est le minimum pour un affichage correct, ce qui permet de faire la plus grande économie d'énergie pour un affichage correct.
  126 +A chaque cycle, on va décaler l'octet envoyé au portC, qui sert à sélectionner l'afficheur, et on enverra en PortA la valeur correspondante.
129 127  
130 128 # Algorithme
131 129  
... ... @@ -169,7 +167,7 @@ timer:
169 167  
170 168 ### Watchdog
171 169  
172   -Le watchdog ne fonctionnant pas, nous avons donc étendu l'interruption du timer pour pouvoir compter les secondes. Pour cela, un utilise un registre supplémentaire, `tt`, qui est incrémenté à chacune des interruptions du timer. Sa fréquence exacte étant de de $\frac{16 MHz}{256^2}=244.140625 Hz$, dès que `tt` a depassé `244` on appelle donc la fonction qui était censée être appelée par le watchdog, `agir1s` qui gère les éxecute les fonctions dépendant du temps.
  170 +Le watchdog ne fonctionnant pas, nous avons donc étendu l'interruption du timer pour pouvoir compter les secondes. Pour cela, un utilise un registre supplémentaire, `tt`, qui est incrémenté à chacune des interruptions du timer. Sa fréquence exacte étant de de $244.140625 Hz$, dès que `tt` a depassé `244` on appelle donc la fonction qui était censée être appelée par le watchdog, `agir1s` qui gère les éxecute les fonctions dépendant du temps.
173 171  
174 172 D'un point de vue énergétique, cette approche est beacoup moins efficace car elle rajoute des instructions supplémentaires à l'interruption du timer, qui est la fonction « critique » du système car appelée 244 fois par seconde.
175 173  
... ...