Commit 733c078a55483a3fbaeed4cb90477c5116fc507e
1 parent
6244f6c8
Configuration des interruptions externes
Par Taky et Geoffrey
Showing
2 changed files
with
39 additions
and
1 deletions
Show diff stats
... | ... | @@ -9,7 +9,7 @@ |
9 | 9 | |
10 | 10 | ## Entrées |
11 | 11 | |
12 | -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 <!-- TODO Association bouton-port interruption --> pour éviter une scrutation afin d'économiser de l'énergie. | |
12 | +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. | |
13 | 13 | |
14 | 14 | Le capteur de température est connecté sur le convertisseur analogique-numérique numéro 8 (`ADC8`). |
15 | 15 | |
... | ... | @@ -37,6 +37,16 @@ Voici la hiérarchie du menu qui sera utilisée pour configurer le thermostat : |
37 | 37 | |
38 | 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 | 39 | |
40 | +## États | |
41 | +- 0-1 : Veille (Heure, Température) | |
42 | +- 2 : Menu Association mode ↔ Heure de la semaine | |
43 | +- 3-9 : Menu jours (Lundi - Vendredi) | |
44 | +- 10-16 : Paramétrage des jours (Lundi - Vendredi) | |
45 | +- 17 : Menu température du mode jour | |
46 | +- 18 : Paramétrage température du mode jour | |
47 | +- 19 : Menu température du mode nuit | |
48 | +- 20 : Paramétrage température du mode nuit | |
49 | + | |
40 | 50 | ## Stockage des données |
41 | 51 | |
42 | 52 | 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 : | ... | ... |
principal.txt
... | ... | @@ -3,10 +3,17 @@ |
3 | 3 | .equ PINA = 0x00 |
4 | 4 | .equ DDRA = 0x01 |
5 | 5 | .equ PORTA = 0x02 |
6 | + | |
6 | 7 | .equ PINB = 0x03 |
7 | 8 | .equ DDRB = 0x04 |
8 | 9 | .equ PORTB = 0x05 |
9 | 10 | |
11 | +.equ SREG = 0x3F | |
12 | + | |
13 | +.equ EIMSK = 0x3D | |
14 | +.equ EICRA = 0x69 | |
15 | +.equ EICRB = 0x6A | |
16 | + | |
10 | 17 | .equ ADMUX = 0x7C |
11 | 18 | .equ ADCSRB = 0x7B |
12 | 19 | .equ ADCSRA = 0x7A |
... | ... | @@ -19,6 +26,7 @@ |
19 | 26 | ; Nommage des registres utilisés |
20 | 27 | |
21 | 28 | .def etat = r19 |
29 | +.def reference = r20 | |
22 | 30 | |
23 | 31 | ; Vecteurs d'interruptions |
24 | 32 | |
... | ... | @@ -28,6 +36,17 @@ |
28 | 36 | .org 0x003A ; ADC |
29 | 37 | jmp adc |
30 | 38 | |
39 | +.org 0x0002 ; INT0 | |
40 | + jmp valider | |
41 | + | |
42 | +.org 0x0004 ; INT1 | |
43 | + jmp retour | |
44 | + | |
45 | +.org 0x0006 ; INT2 | |
46 | + jmp incrementer | |
47 | + | |
48 | +.org 0x0008 ; INT3 | |
49 | + jmp decrementer | |
31 | 50 | |
32 | 51 | ; Tableaux de la mémoire du programme |
33 | 52 | |
... | ... | @@ -37,9 +56,18 @@ |
37 | 56 | |
38 | 57 | debut: |
39 | 58 | ; Configuration des composants |
59 | + SREG <- 0b10000000 | |
60 | + | |
61 | + ; Interruptions externes | |
62 | + EIMSK <- 0b00001111 | |
63 | + EICRA <- 0b11111111 ; TODO Oscillations annulables ? | |
64 | + EICRB <- 0b00000000 | |
65 | + | |
66 | + ; ADC | |
40 | 67 | ADMUX <- 0b01110000 |
41 | 68 | ADCSRB <- 0b00001011 |
42 | 69 | ADCSRA <- 0b10011101 ; TODO Auto-trigger ? |
70 | + sei | |
43 | 71 | ; Initialisation des valeurs |
44 | 72 | |
45 | 73 | boucle: | ... | ... |