Blame view

CR.md 11.7 KB
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
1
2
3
  # Tutorat de microprocesseurs - Sujet 8 - Thermostat
  ## DJERABA Taky - HUBERT Thomas - PREUD'HOMME Geoffrey
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
4
  # Sujet
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
5
  
68c01904   Geoffrey PREUD'HOMME   Avancement rédaction
6
7
8
9
10
11
  Le projet consiste à réaliser un thermostat pour la commande du chauffage d'une maison individuelle. Le dispositif devra d'abord afficher alternativement la température et l'heure chaque 10s, sur des afficheurs 7-segments. Notre thermostat devra aussi permettre le réglage de la température pour chaque heure de la journée, selon deux modes : jour et nuit, dont les températures seront réglé par l'utilisateur. Enfin, la commande permettant l'allumage de la chaudière se fera en fonction de la température mesurée. Si celle-ci est 0.5°C inférieure à la consigne fixée, la chaudière s'allume. Si la température mesurée dépasse la consigne de 0.5°C, la chaudière s'eteint.
  
  De plus nous nous sommes fixés un objectif supplémentaire afin de faire programme qui consomme un minimum d'énergie. Bien que ce genre de système est branché en permanence au secteur et la consommation du micro-contrôleur est négligeable par rapport à celle de la chaudière, on considère que programmer de manière optimisée est une bonne pratique à adopter.
  
  Enfin, afin de vérifier la validité de notre algorithme et de nos configurations, nous avons recréé une simulation du système avec une Arduino Mega 2560, qui est la carte que nous avons utilisé pour les TP de microprocesseurs, et que nous avons programmé en utilisant les mêmes outils utilisés pendant lesdits TP.
  
39080e62   Taky Djeraba   Petites Modifs du...
12
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
13
  # Architecture matérielle
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
14
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
15
  ## Entrées
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
16
  
733c078a   Geoffrey PREUD'HOMME   Configuration des...
17
  On utilisera 4 boutons : pour valider, revenir en arrière, incrémenter et décrémenter. Ils sont branchés sur les ports d'interruption INT0 à INT3 respectivement pour éviter une scrutation afin d'économiser de l'énergie.
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
18
  
6244f6c8   Geoffrey PREUD'HOMME   Initialisation ADC
19
  Le capteur de température est connecté sur le convertisseur analogique-numérique numéro 8 (`ADC8`).
cec88a2e   Taky Djeraba   Modifs CR.
20
21
22
23
24
  Concernant la réalisation de notre composant, nous avons prévu d'utiliser un potentiomètre afin de régler la température d'entrée du thermostat. 
  
  ## Sorties
  
  En sortie, nous avons prévu 4 afficheurs 7-segments, lesquels permetront l'affichage de l'heure, de la température, et du mode de fonctionnement. Les afficheurs devront aussi permettre à l'utilisateur de régler le thermostat en faisant défiler les options de réglages (heure, date, réglage de la température en fonction de l'heure de la journée).
c79ef7bb   Geoffrey PREUD'HOMME   Instructions outi...
25
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
26
  # Étude du fonctionnement
c79ef7bb   Geoffrey PREUD'HOMME   Instructions outi...
27
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
28
  ## Menu
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
29
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
30
  Voici la hiérarchie du menu qui sera utilisée pour configurer le thermostat :
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
31
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
32
33
34
35
36
37
38
39
40
41
42
43
  - Veille
      - Association mode ↔ heure de la semaine
          - Lundi
          - Mardi
          - Mercredi
          - Jeudi
          - Vendredi
          - Samedi
          - Dimanche
      - Température du mode jour
      - Témpérature du mode nuit
      - Réglage de la date et heure
aadee417   Geoffrey PREUD'HOMME   Définition des états
44
          - Jour de la semaine
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
45
46
          - Heures
          - Minutes
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
47
  
e18f6847   Geoffrey PREUD'HOMME   Définition de com...
48
49
  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. Même si ce menu peut sembler simple à en voir sa vue d'ensemble, il est beaucoup plus difficile à comprendre lorsqu'il est réduit à 4 afficheurs 7 segments. On oubliera pas de mettre ce genre d'information dans un guide si jamais ce système doit être utilisé par quelqu'un d'autre.
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
50
  
39080e62   Taky Djeraba   Petites Modifs du...
51
52
  ## Contrôle de la température
  
e18f6847   Geoffrey PREUD'HOMME   Définition de com...
53
  Concernant la régulation de la température, il a été prévu que celle-ci se fasse chaque 10 secondes. Puisque l'allumage de la chaudière est asservit en température, notre dispositif utilise un capteur de température, lequel fournit une tension variant de 0 à 5V, pour une plage de température allant de 5 à 30.6°C. Pour une précision de 0.1°C, cette plage peut se coder sur 8bits car elle contient 256 valeurs. 
f629950c   Geoffrey PREUD'HOMME   Réorganisation de...
54
  
39080e62   Taky Djeraba   Petites Modifs du...
55
  La température mesurée (et convertie via le convertisseur ADC), ne doit pas dépasser un intervalle de plus ou moins 0.5°C par rapport à la température de référence. Il s'agit donc d'incémenter et de décrémenter de 5 octets la valeur de référence pour la comparer à la température mesurée. Pour éviter un dépassement lors de l'incrémentation ou de la décrémentation, on oblige l'utilisateur à choisir une température entre 5.5°C et 30.1°C.
aadee417   Geoffrey PREUD'HOMME   Définition des états
56
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
57
58
59
60
61
  ## Stockage des données
  
  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 :
  
  - **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.
e18f6847   Geoffrey PREUD'HOMME   Définition de com...
62
63
  - **1 registre (dont 4 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 -->
  - **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 nombres de fois qu'il y a eu 2 secondes dans la minute actuelle. Cela permet de simplifier les calculs et d'éviter de faire des opérations sur des entiers de 24 bits.
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
64
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
65
  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.
73f2ae9d   Geoffrey PREUD'HOMME   Outils de rédaction
66
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
67
  # Configuration des interfaces
98814b45   Geoffrey PREUD'HOMME   Outils pour assem...
68
  
68c01904   Geoffrey PREUD'HOMME   Avancement rédaction
69
70
71
72
73
74
75
  ## Interruptions externes
  
  Nos boutons sont branchés sur les ports d'interruptions `INT0` à `INT3`. On active donc les interruption au niveau du micro-contrôleur avec la directive `SEI` (qui servira aussi pour les autres interfaces mais on ne le rappelera pas). Ensuite, on active les interruptions sur front montant 
  
  TODO Blabla rebond etc.
  
  ## Analogic to Digital Converter (ADC)
98814b45   Geoffrey PREUD'HOMME   Outils pour assem...
76
  
68c01904   Geoffrey PREUD'HOMME   Avancement rédaction
77
78
79
  Le thermostat est branché sur l'entrée analgique `ADC0`. Pour éviter d'utiliser de l'énergie inutilement, on désactivera les autres convertisseur analogique-numérique avec les directives `DIR0` et `DIR2`.
  
  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.
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
80
81
82
  
  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.
  
68c01904   Geoffrey PREUD'HOMME   Avancement rédaction
83
84
85
86
87
88
89
90
  ## Timer
  
  TODO
  
  ## Watchdog
  
  TODO
  
b469a253   Geoffrey PREUD'HOMME   Récupération de c...
91
  # Algorithme
98814b45   Geoffrey PREUD'HOMME   Outils pour assem...
92
  
e18f6847   Geoffrey PREUD'HOMME   Définition de com...
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
  ## Menu
  
  Ce fonctionnement peut être implémenté de deux manières différentes. La première, étant que à chaque élément du menu correspond un emplacement dans le code assembleur, et le programme passe le plus clair de son temps à scruter les boutons. La deuxième, étant que le programme reste sur une instruction sleep, et que les boutons provoquent des interruptions qui gèrent modifient l'affichage et les valeurs nécessaires en fonction du bouton qui a été appuyé et de l'état précédent du menu. D'un point de vue énergétique, la deuxième solution est clairement gagnante. Il faut alors stocker dans quel état est le menu en mémoire. On utilisera pour cela un registre d'état, qui prendra les valeurs suivantes :
  
  - 0→1 : Veille (Heure / Température)
  - 2 : Menu Association mode ↔ Heure de la semaine
  - 3→9 : Menu jours (Lundi - Dimanche)
  - 10→16 : Paramétrage des jours (Lundi - Dimanche)
  - 17 : Menu température du mode jour
  - 18 : Paramétrage température du mode jour
  - 19 : Menu température du mode nuit
  - 20 : Paramétrage température du mode nuit
  - 21 : Menu réglage de la date et heure
  - 22→24 : Menu réglage du jour / heure / minute
  - 25→27 : Paramétrage du jour / heure / minute
  
  On parle de menu quand l'écran affiche le nom de l'élément que l'utilisateur s'apprête à modifier, et de paramétrage lorsque l'utilisateur voit la valeur qu'il est en train de modifier. Pour les paramètrages, un registre nommé `compteur` accompagne le registre `etat`, et permet de stocker la valeur qui est en cours de modification. À chaque appui sur un bouton, une interruption est émise et le code associé effectue une tâche qui varie selon la valeur d'`etat`. L'interruption peut changer certaines variables du système (la température du mode jour par exemple, ou l'heure actuelle), ou bien l'état lui-même.
  
  Pour chaque état on a défini plusieurs fonctions qui sont appelés par les différents boutons. Pour un état donné `Demo`, on aura alors :
  
  - `etatDemoU` qui permet de changer l'affichage pour l'état courant, éventuellement en fonction de la valeur de compteur dans le cas d'un paramètrage. Cette fonction est appelé à la fin de toutes les autres fonctions que l'on définira par la suite.
  - `etatDemo` est l'action éxecutée lorsque l'utilisateur arrive sur l'état : la valeur du registre `etat` est changée, et la valeur de compteur est chargée avec la variable du système correspondante dans le cas d'un paramètrage.
  - `etatDemoC` (paramètrages seulement) est appelé lorsque la valeur de compteur est changée par les boutons Incrementer ou Decrementer. Elle fait appel aux fonctions `boundType` qui permettent de remettre dans les bornes la valeur si elle passe hors de l'intervalle de définition (par exemple si une minute est incrémentée à 60 elle repasse à 0). Ensuite elle sauvegarde dans le bon endroit de la mémoire (registres ou RAM) la valeur de compteur.
  
  Pour certains états, on aura aussi un comportement plus spécifique. Par exemple, lorsqu'on fait Retour depuis les états 10 à 16, la valeur d'`etat` est décrémentée de 7. On créera donc deux fonctions : `etatMenuJours` qui est utilisé quand on arrive d'un niveau parent (on passe donc à l'état 3, Lundi par défaut), et `etatMenuJoursR` qui est utilisé quand on arrive d'un niveau enfant (on passe donc à l'état du menu correspondant au jour que l'on venait de modifier).
  
af2c171d   Geoffrey PREUD'HOMME   Rédaction du matin
119
120
  ## Pseudo-code
  !include(principal.txt lang=avrpseudo)