Commit af2c171d422fd8c792ecae4913d16bdfeb889805

Authored by Geoffrey PREUD'HOMME
1 parent b469a253

Rédaction du matin

Showing 2 changed files with 106 additions and 3 deletions   Show diff stats
... ... @@ -15,12 +15,37 @@ Le capteur de température est connecté sur le convertisseur analogique-numéri
15 15  
16 16 # Étude du fonctionnement
17 17  
18   -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. De toutes manières, 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, donc il n'y a que des avantages à utiliser cette technique.
  18 +## Menu
19 19  
  20 +Voici la hiérarchie du menu qui sera utilisée pour configurer le thermostat :
20 21  
21   -## Menu
  22 +- Veille
  23 + - Association mode ↔ heure de la semaine
  24 + - Lundi
  25 + - Mardi
  26 + - Mercredi
  27 + - Jeudi
  28 + - Vendredi
  29 + - Samedi
  30 + - Dimanche
  31 + - Température du mode jour
  32 + - Témpérature du mode nuit
  33 + - Réglage de la date et heure
  34 + - Heures
  35 + - Minutes
  36 + - Jour de la semaine
  37 +
  38 +On peut passer d'un menu à son menu hiérarchiquement supérieur (parent) avec le bouton retour. On passe d'un menu à un autre de niveau identique mais de même parent (frère) avec les boutons Incrémenter et Décrémenter. Lorsque l'on appuie sur le bouton valider, deux choses peuvent se produire : si le menu possède des sous-menus (enfants), il passe au premier enfant, sinon, il permettra l'édition d'une valeur que l'on poura incrémenter ou décrémenter avec les boutons du même nom, et qui seront sauvegardées à l'aide du bouton retour.
  39 +
  40 +## Stockage des données
  41 +
  42 +Les accès à la RAM nécessitant plus d'instructions et donc étant plus gourmands en énergie, on stockera le maximum d'informations dans les registres, de préférences les données étant lues/écrites les plus fréquemment. On y stockera donc :
  43 +
  44 +- **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.
  45 +- **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 -->
  46 +- **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.
22 47  
23   -Voici la hiérarchie du menu qui sera utilisé pour
  48 +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.
24 49  
25 50 # Configuration des interfaces
26 51  
... ... @@ -32,3 +57,5 @@ Il sera de plus configuré pour s&#39;activer sur demande et activera une interrupti
32 57  
33 58 # Algorithme
34 59  
  60 +## Pseudo-code
  61 +!include(principal.txt lang=avrpseudo)
... ...
principal.txt 0 → 100644
... ... @@ -0,0 +1,76 @@
  1 +; Équivalences
  2 +
  3 +.equ PINA = 0x00
  4 +.equ DDRA = 0x01
  5 +.equ PORTA = 0x02
  6 +.equ PINB = 0x03
  7 +.equ DDRB = 0x04
  8 +.equ PORTB = 0x05
  9 +
  10 +.equ RAMEND = 0x21FF
  11 +.equ SPH = 0x3E
  12 +.equ SPL = 0x3D
  13 +
  14 +; Nommage des registres utilisés
  15 +
  16 +.def etat = r19
  17 +
  18 +; Vecteurs d'interruptions
  19 +
  20 +.org 0x000 ; Vecteur RESET
  21 + jmp debut
  22 +
  23 +
  24 +; Tableaux de la mémoire du programme
  25 +
  26 +.org 0x0080
  27 +
  28 +; Programme
  29 +
  30 +debut:
  31 +; Configuration des composants
  32 +; Initialisation des valeurs
  33 +
  34 +boucle:
  35 + sleep
  36 + jmp boucle
  37 +
  38 +; Fonctions
  39 +agir10s:
  40 + ; Initialise une lecture ADC
  41 + ; Met à jour l'état de veille (si on est en état veille)
  42 + ret
  43 +
  44 +agirHeure:
  45 + ; Recharge la température de référence
  46 + ret
  47 +
  48 +; Interruption boutons
  49 +
  50 +incrementer:
  51 + reti
  52 +
  53 +decrementer:
  54 + reti
  55 +
  56 +valider:
  57 + reti
  58 +
  59 +retour:
  60 + reti
  61 +
  62 +; Interruption Watchdog
  63 +watchdog:
  64 + ; Met à jour les registres de temps, active agir10s ou agirHeure si nécessaire
  65 + reti
  66 +
  67 +; Interruption ADC
  68 +adc:
  69 + ; Active ou désactive la chaudière selon la température lue et celle de référence
  70 + reti
  71 +
  72 +; Interruption timer
  73 +timer:
  74 + ; Affiche le digit suivant sur l'afficheur 7seg
  75 + reti
  76 +
... ...