From 733c078a55483a3fbaeed4cb90477c5116fc507e Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Thu, 11 May 2017 09:03:52 +0200 Subject: [PATCH] Configuration des interruptions externes --- CR.md | 12 +++++++++++- principal.txt | 28 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CR.md b/CR.md index 2024d12..a206e4c 100644 --- a/CR.md +++ b/CR.md @@ -9,7 +9,7 @@ ## Entrées -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 pour éviter une scrutation afin d'économiser de l'énergie. +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. Le capteur de température est connecté sur le convertisseur analogique-numérique numéro 8 (`ADC8`). @@ -37,6 +37,16 @@ Voici la hiérarchie du menu qui sera utilisée pour configurer le thermostat : 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. +## États +- 0-1 : Veille (Heure, Température) +- 2 : Menu Association mode ↔ Heure de la semaine +- 3-9 : Menu jours (Lundi - Vendredi) +- 10-16 : Paramétrage des jours (Lundi - Vendredi) +- 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 + ## 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 : diff --git a/principal.txt b/principal.txt index beeac9d..8a3f1e6 100644 --- a/principal.txt +++ b/principal.txt @@ -3,10 +3,17 @@ .equ PINA = 0x00 .equ DDRA = 0x01 .equ PORTA = 0x02 + .equ PINB = 0x03 .equ DDRB = 0x04 .equ PORTB = 0x05 +.equ SREG = 0x3F + +.equ EIMSK = 0x3D +.equ EICRA = 0x69 +.equ EICRB = 0x6A + .equ ADMUX = 0x7C .equ ADCSRB = 0x7B .equ ADCSRA = 0x7A @@ -19,6 +26,7 @@ ; Nommage des registres utilisés .def etat = r19 +.def reference = r20 ; Vecteurs d'interruptions @@ -28,6 +36,17 @@ .org 0x003A ; ADC jmp adc +.org 0x0002 ; INT0 + jmp valider + +.org 0x0004 ; INT1 + jmp retour + +.org 0x0006 ; INT2 + jmp incrementer + +.org 0x0008 ; INT3 + jmp decrementer ; Tableaux de la mémoire du programme @@ -37,9 +56,18 @@ debut: ; Configuration des composants + SREG <- 0b10000000 + + ; Interruptions externes + EIMSK <- 0b00001111 + EICRA <- 0b11111111 ; TODO Oscillations annulables ? + EICRB <- 0b00000000 + + ; ADC ADMUX <- 0b01110000 ADCSRB <- 0b00001011 ADCSRA <- 0b10011101 ; TODO Auto-trigger ? + sei ; Initialisation des valeurs boucle: -- libgit2 0.21.2