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,7 +9,7 @@ | ||
9 | 9 | ||
10 | ## Entrées | 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 | Le capteur de température est connecté sur le convertisseur analogique-numérique numéro 8 (`ADC8`). | 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,6 +37,16 @@ Voici la hiérarchie du menu qui sera utilisée pour configurer le thermostat : | ||
37 | 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. | 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 | ## Stockage des données | 50 | ## Stockage des données |
41 | 51 | ||
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 : | 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,10 +3,17 @@ | ||
3 | .equ PINA = 0x00 | 3 | .equ PINA = 0x00 |
4 | .equ DDRA = 0x01 | 4 | .equ DDRA = 0x01 |
5 | .equ PORTA = 0x02 | 5 | .equ PORTA = 0x02 |
6 | + | ||
6 | .equ PINB = 0x03 | 7 | .equ PINB = 0x03 |
7 | .equ DDRB = 0x04 | 8 | .equ DDRB = 0x04 |
8 | .equ PORTB = 0x05 | 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 | .equ ADMUX = 0x7C | 17 | .equ ADMUX = 0x7C |
11 | .equ ADCSRB = 0x7B | 18 | .equ ADCSRB = 0x7B |
12 | .equ ADCSRA = 0x7A | 19 | .equ ADCSRA = 0x7A |
@@ -19,6 +26,7 @@ | @@ -19,6 +26,7 @@ | ||
19 | ; Nommage des registres utilisés | 26 | ; Nommage des registres utilisés |
20 | 27 | ||
21 | .def etat = r19 | 28 | .def etat = r19 |
29 | +.def reference = r20 | ||
22 | 30 | ||
23 | ; Vecteurs d'interruptions | 31 | ; Vecteurs d'interruptions |
24 | 32 | ||
@@ -28,6 +36,17 @@ | @@ -28,6 +36,17 @@ | ||
28 | .org 0x003A ; ADC | 36 | .org 0x003A ; ADC |
29 | jmp adc | 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 | ; Tableaux de la mémoire du programme | 51 | ; Tableaux de la mémoire du programme |
33 | 52 | ||
@@ -37,9 +56,18 @@ | @@ -37,9 +56,18 @@ | ||
37 | 56 | ||
38 | debut: | 57 | debut: |
39 | ; Configuration des composants | 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 | ADMUX <- 0b01110000 | 67 | ADMUX <- 0b01110000 |
41 | ADCSRB <- 0b00001011 | 68 | ADCSRB <- 0b00001011 |
42 | ADCSRA <- 0b10011101 ; TODO Auto-trigger ? | 69 | ADCSRA <- 0b10011101 ; TODO Auto-trigger ? |
70 | + sei | ||
43 | ; Initialisation des valeurs | 71 | ; Initialisation des valeurs |
44 | 72 | ||
45 | boucle: | 73 | boucle: |