From dbfe8774059c89bc7ba79137975e9e8abf0e018e Mon Sep 17 00:00:00 2001 From: Thomas Hubert Date: Tue, 23 May 2017 12:24:36 +0200 Subject: [PATCH] Fin des TODO --- CR.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/CR.md b/CR.md index 4495ccb..4708292 100644 --- a/CR.md +++ b/CR.md @@ -103,7 +103,7 @@ Pour éviter des scrutations, nos boutons sont branchés sur les ports d'interru ## Ports parallèles -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. +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. 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`). @@ -117,15 +117,13 @@ Il sera configuré pour s'activer sur demande, ici toutes les dix secondes. En e ## Watchdog -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) - -↓↓ à réintégrer - -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. +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. ## Timer -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. + +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. +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. # Algorithme @@ -169,7 +167,7 @@ timer: ### Watchdog -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. +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. 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. -- libgit2 0.21.2