Commit 1d126a931e0855e31fb5bfe8e866895dec4b4b26

Authored by Geoffrey PREUD'HOMME
1 parent c2a24067

Commencé l'interruption incrementer

Par Taky
Mais on se rend compte que c'est vachement verbeux comme façon de
fonctionner, on verra à tête reposée si il y a pas meilleure méthode.
Showing 2 changed files with 71 additions and 35 deletions   Show diff stats
... ... @@ -58,7 +58,7 @@ Les accès à la RAM nécessitant plus d'instructions et donc étant plus gourma
58 58  
59 59 - **4 registres** : les 4 digits de l'afficheur 7 segments en cours d'affichage. Ces informations devant être récupérées 4 fois toutes les quelques millisecondes, on ne calculera leur représentation que lors de leur changement et on les stockera dans ces registres.
60 60 - **1 registre (dont 6 bits inutilisés)** : afficheur 7 segment actuellement en cours d'affichage. Cela permet d'alterner les 4 dans l'ordre. <!-- TODO Voir si c'est pas possible d'utiliser le timer pour stocker ces infos -->
61   -- **3 registres** : Stockage du temps. Le compteur de temps le plus grand mais à la fois diviseur de la période de changement de mode veille et d'une heure sur l'Atmega 2560 est deux secondes. On comptera le temps de la semaine avec cette période de deux secondes. Il y a alors $\frac{7 \times 24 \times 60 \times 60 }{ 2 }$ $=302400$ valeurs possibles pour ce compteur de temps. On a donc besoin de 3 registres $\left( 2^{8 \times 2} = 65536 < 302400 < 16777216 = 2^{8 \times 3} \right)$ pour stocker cette valeur. On utilisera le <!-- TODO Geoffrey -->
  61 +- **3 registres** : Stockage du temps. Le compteur de temps le plus grand mais à la fois diviseur de la période de changement de mode veille et d'une heure sur l'Atmega 2560 est deux secondes. On comptera le temps de la semaine avec cette période de deux secondes. Il y a alors $\frac{7 \times 24 \times 60 \times 60 }{ 2 }$ $=302400$ valeurs possibles pour ce compteur de temps. On a donc besoin de 3 registres $\left( 2^{8 \times 2} = 65536 < 302400 < 16777216 = 2^{8 \times 3} \right)$ pour stocker cette valeur. Afin de simplifier, sur le premier registre on utilisera 3 bits pour stocker le jour de la semaine, 5 bits pour l'heure du jour, on utilisera le deuxième registre pour stocker la minute de l'heure, et le troisième registre pour stocker le
62 62  
63 63 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.
64 64  
... ...
principal.txt
... ... @@ -125,86 +125,122 @@ agirHeure:
125 125 ; Interruption boutons
126 126  
127 127 incrementer:
  128 + si etat <= 1 saut reti
  129 + si etat = 2 saut etatMenuJour
  130 + si etat < 9 saut etatPlusUn
  131 + si etat = 9 saut etatLundi
  132 + si etat = 17 saut etatMenuNuit
  133 + si etat = 18 saut TODO
  134 + si etat = 19 saut etatMenuHorloge
  135 + si etat = 20 saut TODO
  136 + si etat = 21 saut etatMenuAssoc
  137 + si etat < 24 saut etatPlusUn
  138 + si etat = 24 saut etatMenuHorlogeJour
128 139 reti
129 140  
130 141 decrementer:
  142 + si etat <= 1 saut reti
  143 + reti
  144 +
  145 +etatMenuAssoc:
  146 + etat <- 2
  147 + reti
  148 +etatMenuJour:
  149 + etat <- 17
  150 + reti
  151 +etatMenuNuit:
  152 + etat <- 19
  153 + reti
  154 +etatMenuHorloge
  155 + etat <- 21
  156 + reti
  157 +etatPlusUn:
  158 + etat <- etat + 1
  159 + reti
  160 +etatLundi:
  161 + etat <- 3
  162 + reti
  163 +etatMenuHorlogeJour:
  164 + etat <- 22
  165 + reti
  166 +reti:
131 167 reti
132 168  
133 169 valider:
134   - si mode <= 1 saut validerVeille
135   - si mode = 2 saut validerAssoc
136   - si mode <= 9 saut validerAJour
137   - si mode <= 16 saut validerParaAJour
138   - si mode = 17 saut validerTJour
139   - si mode = 18 saut validerParaTJour
140   - si mode = 19 saut validerTNuit
141   - si mode = 20 saut validerParaTNuit
142   - si mode = 21 saut validerHorloge
143   - si mode <= 24 saut validerMenuHorloge
144   - si mode <= 27 saut validerParaHorloge
  170 + si etat <= 1 saut validerVeille
  171 + si etat = 2 saut validerAssoc
  172 + si etat <= 9 saut validerAJour
  173 + si etat <= 16 saut validerParaAJour
  174 + si etat = 17 saut validerTJour
  175 + si etat = 18 saut validerParaTJour
  176 + si etat = 19 saut validerTNuit
  177 + si etat = 20 saut validerParaTNuit
  178 + si etat = 21 saut validerHorloge
  179 + si etat <= 24 saut validerMenuHorloge
  180 + si etat <= 27 saut validerParaHorloge
145 181 reti
146 182 ; TODO Affichages
147 183 validerVeille:
148   - mode <- 2
  184 + etat <- 2
149 185 validerAssoc:
150   - mode <- 3
  186 + etat <- 3
151 187 validerAJour:
152   - mode <- mode + 7
  188 + etat <- etat + 7
153 189 reti
154 190 validerParaAJour:
155 191 ; TODO
156 192 reti
157 193 validerTJour:
158   - mode <- 18
  194 + etat <- 18
159 195 reti
160 196 validerParaTJour:
161 197 ; TODO
162   - mode <- 17
  198 + etat <- 17
163 199 reti
164 200 validerTNuit:
165   - mode <- 20
  201 + etat <- 20
166 202 reti
167 203 validerParaTNuit:
168 204 ; TODO
169   - mode <- 19
  205 + etat <- 19
170 206 reti
171 207 validerHorloge:
172   - mode <- 22
  208 + etat <- 22
173 209 reti
174 210 validerMenuHorloge:
175   - mode <- mode + 3
  211 + etat <- etat + 3
176 212 reti
177 213 validerParaHorloge:
178   - mode <- mode - 3
  214 + etat <- etat - 3
179 215 reti
180 216  
181 217 retour:
182   - si mode <= 1 saut retourRien
183   - si (mode = 2 ou mode = 17 ou mode = 19 ou mode = 21) saut retourVeille
184   - si mode <= 9 saut retourMenuAssoc
185   - si mode <= 16 saut retourMenuJAssoc
186   - si mode <= 21 saut retourMoinsUn
187   - si mode <= 24 saut retourMenuHorloge
188   - si mode <= 27 saut retourMenuMenuHorloge
  218 + si etat <= 1 saut retourRien
  219 + si (etat = 2 ou etat = 17 ou etat = 19 ou etat = 21) saut retourVeille
  220 + si etat <= 9 saut retourMenuAssoc
  221 + si etat <= 16 saut retourMenuJAssoc
  222 + si etat <= 21 saut retourMoinsUn
  223 + si etat <= 24 saut retourMenuHorloge
  224 + si etat <= 27 saut retourMenuMenuHorloge
189 225 retourRien:
190 226 reti
191 227 retourVeille:
192   - mode <- 0
  228 + etat <- 0
193 229 reti
194 230 retourMenuAssoc:
195   - mode <- 2
  231 + etat <- 2
196 232 reti
197 233 retourMenuJAssoc:
198   - mode <- mode - 7
  234 + etat <- etat - 7
199 235 reti
200 236 retourMoinsUn:
201   - mode <- mode - 1
  237 + etat <- etat - 1
202 238 reti
203 239 retourMenuHorloge:
204   - mode <- 21
  240 + etat <- 21
205 241 reti
206 242 retourMenuMenuHorloge:
207   - mode <- mode - 3
  243 + etat <- etat - 3
208 244 reti
209 245  
210 246 ; Interruption Watchdog
... ...