Commit 514fdb6d2ca9dc51914cf982f24f550b51cdd3c1

Authored by Geoffrey PREUD'HOMME
1 parent c7d4e505

Détail des TODO

Showing 1 changed file with 8 additions and 10 deletions   Show diff stats
@@ -69,10 +69,6 @@ Les accès à la RAM nécessitant plus d'instructions et donc étant plus gourma @@ -69,10 +69,6 @@ Les accès à la RAM nécessitant plus d'instructions et donc étant plus gourma
69 - `reference` : contient la température désirée actuelle (c'est à dire pour le mode de l'heure actuelle). Étant comparée toutes les 10 secondes avec la température réelle et le calcul de sa valeur nécessitant de connaître le temps actuel, le mode associé à ce temps et la température associée à ce mode, on a jugé avantageux de le stoceker dans un registre qui sera mis à jour au besoin. 69 - `reference` : contient la température désirée actuelle (c'est à dire pour le mode de l'heure actuelle). Étant comparée toutes les 10 secondes avec la température réelle et le calcul de sa valeur nécessitant de connaître le temps actuel, le mode associé à ce temps et la température associée à ce mode, on a jugé avantageux de le stoceker dans un registre qui sera mis à jour au besoin.
70 - `temp` : registre dédié à certaines opérations temporaires. Il n'a pas de rapport (la plupart du temps) avec la température. 70 - `temp` : registre dédié à certaines opérations temporaires. Il n'a pas de rapport (la plupart du temps) avec la température.
71 71
72 -Notes :  
73 -- Nous aurions pu utiliser un registre distinct pour stocker le jour de la semaine et éviter des opérations, mais on voulait s'amuser avec des masques et des divisions.  
74 -- Nous aurions pu utiliser une période Watchdog plus grande afin de minimiser les opérations. Mais on verra par la suite que nous n'avons pas pu utiliser le Watchdog du tout.  
75 -  
76 Les associations de chaque heure de la semaine à son mode (jour/nuit) seront stockées dans la RAM. Bien qu'en théorie nous n'avons besoin que de $\frac{ \text{nb jours/semaine} \times \text{nb heures/jour} \times \text{nb bits pour stocker le mode} }{ \text{nb bits stockables sur une adresse} }$ $=\frac{7 \times 24 \times 1 }{ 8 }$ $=\frac{168}{8}$ $=21$ adresses pour stocker ces informations, on préfèrera utiliser une adresse par heure de la semaine, soit $168$ adresses. Bien que l'on perd en espace mémoire disponible, on garde en rapidité d'éxecution (et donc en énergie), en effet il n'est pas nécessaire d'utiliser des masques pour récupérer la valeur des bits individuels. Dans notre cas le microprocesseur n'abritera aucun autre programme avec qui il devra partager la RAM, et la consommation énergétique ne change pas selon le nombre d'adresses utilisées, il n'y a donc que des avantages à utiliser cette technique. 72 Les associations de chaque heure de la semaine à son mode (jour/nuit) seront stockées dans la RAM. Bien qu'en théorie nous n'avons besoin que de $\frac{ \text{nb jours/semaine} \times \text{nb heures/jour} \times \text{nb bits pour stocker le mode} }{ \text{nb bits stockables sur une adresse} }$ $=\frac{7 \times 24 \times 1 }{ 8 }$ $=\frac{168}{8}$ $=21$ adresses pour stocker ces informations, on préfèrera utiliser une adresse par heure de la semaine, soit $168$ adresses. Bien que l'on perd en espace mémoire disponible, on garde en rapidité d'éxecution (et donc en énergie), en effet il n'est pas nécessaire d'utiliser des masques pour récupérer la valeur des bits individuels. Dans notre cas le microprocesseur n'abritera aucun autre programme avec qui il devra partager la RAM, et la consommation énergétique ne change pas selon le nombre d'adresses utilisées, il n'y a donc que des avantages à utiliser cette technique.
77 73
78 Enfin, on stockera les températures des deux modes dans la RAM également, car on y accède que toutes les heures (ou lors de leur modification), le registre `reference` agissant comme intermédiaire. 74 Enfin, on stockera les températures des deux modes dans la RAM également, car on y accède que toutes les heures (ou lors de leur modification), le registre `reference` agissant comme intermédiaire.
@@ -91,15 +87,19 @@ Le thermostat est branché sur l'entrée analgique `ADC0`. Pour éviter d'utilis @@ -91,15 +87,19 @@ Le thermostat est branché sur l'entrée analgique `ADC0`. Pour éviter d'utilis
91 87
92 On configurera les registres concernant l'ADC de manière à mettre les 8 bits de points forts sur un seul registre (`ADCH`). En effet, les valeurs de témpératures allant de 5,0° à 30,6°, en choisissant une précision de 0,1° on obient 256 valeurs possibles, ce qui peut se stocker sur un seul régistre. Une précision supplémentaire ne semble pas nécessaire. 88 On configurera les registres concernant l'ADC de manière à mettre les 8 bits de points forts sur un seul registre (`ADCH`). En effet, les valeurs de témpératures allant de 5,0° à 30,6°, en choisissant une précision de 0,1° on obient 256 valeurs possibles, ce qui peut se stocker sur un seul régistre. Une précision supplémentaire ne semble pas nécessaire.
93 89
94 -Il sera de plus configuré pour s'activer sur demande et activera une interruption dès que la conversion est terminée afin d'éviter toute scrutation. 90 +Il sera configuré pour s'activer sur demande, ici toutes les dix secondes. En effet, la température étant un paramètre variant très lentemenent, il n'est pas nécessaire et de plus énergivore de la lire continuellement. Enfin, il sera de plus configuré pour déclencher une interruption dès que la conversion est terminée afin d'éviter toute scrutation.
95 91
96 ## Watchdog 92 ## Watchdog
97 93
98 -TODO 94 +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)
  95 +
  96 +↓↓ à réintégrer
  97 +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.
  98 +
99 99
100 ## Timer 100 ## Timer
101 101
102 -TODO 102 +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.
103 103
104 # Algorithme 104 # Algorithme
105 105
@@ -223,9 +223,7 @@ Déclenchée toutes les ~4 ms, elle change le digit de l'afficheur 4 × 7 segmen @@ -223,9 +223,7 @@ Déclenchée toutes les ~4 ms, elle change le digit de l'afficheur 4 × 7 segmen
223 223
224 ### Watchdog 224 ### Watchdog
225 225
226 -Déclenché toutes les secondes, il se contente d'appeler la fonction `agir1s`. Cependant, 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.  
227 -  
228 -En effet, nous avons utilisé le timer, et un registre supplémentaire, `tt`, qui est incrémenté à chacune de ses interruptions. Le timer ayant une fréquence exacte de $\frac{16 MHz}{256^2}=244.140625 Hz$;, dès que `tt` a depassé `244` on appelle donc `agir1s`. 226 +Le watchdog ne fonctionnant pas, nous avons utilisé le timer, et un registre supplémentaire, `tt`, qui est incrémenté à chacune de ses interruptions. Le timer ayant une fréquence exacte de $\frac{16 MHz}{256^2}=244.140625 Hz$;, dès que `tt` a depassé `244` on appelle donc `agir1s`.
229 227
230 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 secondes. 228 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 secondes.
231 229