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 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:
... ...