Commit 0f97c98015c8638baba072d8638ddda428053456

Authored by Geoffrey PREUD'HOMME
1 parent aa2eef0b

Bouton valider

Par Taky
Showing 2 changed files with 66 additions and 4 deletions   Show diff stats
... ... @@ -42,8 +42,8 @@ On peut passer d'un menu à son menu hiérarchiquement supérieur (parent) avec
42 42 ## États
43 43 - 0→1 : Veille (Heure, Température)
44 44 - 2 : Menu Association mode ↔ Heure de la semaine
45   -- 3→9 : Menu jours (Lundi - Vendredi)
46   -- 10→16 : Paramétrage des jours (Lundi - Vendredi)
  45 +- 3→9 : Menu jours (Lundi - Dimanche)
  46 +- 10→16 : Paramétrage des jours (Lundi - Dimanche)
47 47 - 17 : Menu température du mode jour
48 48 - 18 : Paramétrage température du mode jour
49 49 - 19 : Menu température du mode nuit
... ... @@ -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.
  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 -->
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
... ... @@ -32,6 +32,8 @@
32 32 .def d2 = r20 ; Digit 2
33 33 .def d1 = r20 ; Digit 1
34 34 .def d0 = r20 ; Digit 0 (tout à droite)
  35 +.def compteur = r20 ; Utilisé pour différentes choses
  36 +.def tempo = r20 ; Utilisé pour différentes choses mais très brièvement
35 37  
36 38 ; Vecteurs d'interruptions
37 39  
... ... @@ -62,7 +64,7 @@
62 64 ; Tableaux de la mémoire du programme
63 65  
64 66 afficheurNombres:
65   - .DB 0x7E, 0x0C, 0x37, 0x9F, 0x4D, 0xDB, 0xFB, 0x0E, 0xFF, 0xDF ; TODO Ce sont pas les bonnes valeurs
  67 + .DB 0x3F, 0x30, 0x6D, 0x79, 0x72, 0x5B, 0x5F, 0x31, 0x7F, 0x7B
66 68 ; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
67 69  
68 70 ;afficheurLettres:
... ... @@ -96,6 +98,21 @@ boucle:
96 98 jmp boucle
97 99  
98 100 ; Fonctions
  101 +afficherHeure:
  102 + ; Affiche l'heure actuelle
  103 + temp <-
  104 + ret
  105 +
  106 +
  107 +afficherTemperature:
  108 + ; Considère le registre compteur comme une température et l'affiche
  109 + d0 <- 0x63 ; Sigle °
  110 + d1 <- afficheur[compteur%10]
  111 + temp <- compteur + 50
  112 + d2 <- afficheur[(temp/10)%10]
  113 + d3 <- afficheur[temp/100]
  114 + ret
  115 +
99 116 agir10s:
100 117 ; Initialise une lecture ADC
101 118 ; Met à jour l'état de veille (si on est en état veille)
... ... @@ -114,6 +131,51 @@ decrementer:
114 131 reti
115 132  
116 133 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
  145 + reti
  146 + ; TODO Affichages
  147 +validerVeille:
  148 + mode <- 2
  149 +validerAssoc:
  150 + mode <- 3
  151 +validerAJour:
  152 + mode <- mode + 7
  153 + reti
  154 +validerParaAJour:
  155 + ; TODO
  156 + reti
  157 +validerTJour:
  158 + mode <- 18
  159 + reti
  160 +validerParaTJour:
  161 + ; TODO
  162 + mode <- 17
  163 + reti
  164 +validerTNuit:
  165 + mode <- 20
  166 + reti
  167 +validerParaTNuit:
  168 + ; TODO
  169 + mode <- 19
  170 + reti
  171 +validerHorloge:
  172 + mode <- 22
  173 + reti
  174 +validerMenuHorloge:
  175 + mode <- mode + 3
  176 + reti
  177 +validerParaHorloge:
  178 + mode <- mode - 3
117 179 reti
118 180  
119 181 retour:
... ...