Commit 733c078a55483a3fbaeed4cb90477c5116fc507e

Authored by Geoffrey PREUD'HOMME
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 :
@@ -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: