Description pour MENU Ver1.5 - MICRO-INFO du 23/03/2011. ------------------------------------------------------- Description des tâches pour le "MENU" suite à la réunion du 26/01/2011 Modifications suite à la réunion du 09/02/2011. Modifications J-P du 28/02/2011, 02/03/2011, 09/03/2011 Modifications suite à la réunion du 09/03/2011. Note: La vidéo inverse n'existant pas sur LCD Texte, nous ferons clignoter le premier caractère de l'option sélectionnée, quant au changement de valeurs, nous mettrons le curseur sous le digit le plus à droite de la valeur à modifier. Construction et explication du "Menu". -------------------------------------- Le "MENU" est composé de "Codes Actions", de "Tableaux" et d'un fichier chargé en EEprom. - Les "Codes Action" vont de 128 à 144 ( Voir ci-dessous ). - Les Tableaux sont: "Indice(18)", "LimitBas(18)", "LimitHaut(18)", " Divise(18)", "Form(16)". - Le fichier comprend un nombre de variables équivalent au nombre de fenêtres à afficher sur le LCD, chaque variable comprend 37 octets. Chaque variable ici appelée "Ligne du Menu" ou "fenêtre" comprend: le texte à afficher sur les lignes du LCD ( Ligne1$ et Ligne2$ ), l'emplacement du caractère à faire clignoter ( MnuPosCur ) ou la position du curseur. Si la "Molette" de l'encodeur est tournée vers la droite ( Suite+ ) et que le nombre indiqué dans la colonne du tableau est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute l'action 128 ( incrémente la valeur se trouvant sous le curseur ), par contre si la "Molette de l'encodeur est tournée vers la gauche ( Suite- ) et que le nombre indiqué dans la colonne du tableau est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute l'action 129, c'est-à-dire ( décrémente la valeur se trouvant sous le curseur ), enfin si le "Bouton" est appuyé ( Return ) et que le nombre indiqué est plus petit que 128, on se déplace au numéro de ligne dans le "Menu" correspondant à ce nombre. Sinon, on exécute le "Code action" qui correspond au tableau de 18 éléments "Indice()", lequel est lié aux tableaux "LimitBas(18)", "LimitHaut(18)", " Divise(18)" et "Form(16)". -------------------- Liste des variables: -------------------- MnuNum ' Numéro de la ligne dans "Menu" Ligne1 ' Texte à afficher sur la ligne 1 du LCD Ligne2 ' Texte à afficher sur la ligne 2 du LCD MnuPosCur ' Position du Curseur sur le LCD (Clignote ou fixe) MnuActHorlo ' Action à réaliser lorsque Molette tourne dans le sens horloger MnuActAntiH ' Action à réaliser lorsque Molette tourne dans le sens antihorlo MnuActRet ' Action à réaliser lorsque Bouton est appuyé MnuIndiVar ' Variable contenant la valeur de la cellule dans "Indice()" MnuAdres ' Adresse calculée dans la mémoire EEprom du micro-contrôleur BaseAdres ' Première adresse des Data "MENU" dans la mémoire EEprom TempoEnco ' Durée d'inaction dans le Menu, si dépassement = sortie du Menu JourPlage ' Jour de 1 à 7 correspondant au jour programmé (Lundi = 1) NumPlage ' Numéro de plage sera calculé dans le programme. HDebutPlage ' Heure de début de chauffage (hh:mm) par 1/4 heure DureePlage ' Durée de chauffage (hh:mm) par 1/4 heure JourSemaine ' Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche NumCycle(4) ' Numéro de Cycle de 1 à 4 TCycleJour(4) ' Température pour le cycle de Jour x 4 TCycleNuit(4) ' Température pour le cycle de nuit x 4 TypRegulation ' 0 = Chaudière, 1 = Vanne à 3 voies TypVanne ' 0 = vanne à positionement, 1 = vanne analogique Annee ' RTC + Affichage + Menu Mois ' RTC + Affichage + Menu JourDate ' RTC + Affichage + Menu Jour ' RTC + Affichage + Menu (Lundi = 1, Mardi = 2, ..., Dimanche = 7) Heure ' RTC + Affichage + Menu Minute ' RTC + Affichage + Menu Seconde ' RTC TempConsECS ' Température ECS TempMiniExt ' Température minimum extérieure (Voir table par régions) TempMaxiEau ' Température maximum eau ( Voir Constructeur de la chaudière) HysTempHab ' Hystérésis de la température de l'habitation HysTempEau ' Hystérésis de la température de l'eau des radiateurs HysTempECS ' Hystérésis de la température de l'ECS Valeur ' Variable de travail Indice() ' Tableau des 18 indices du "Menu" LimitBas() ' Tableau des Valeurs minimums autorisées LimitHaut() ' Tableau des Valeurs maximums autorisées Divise() ' Tableau des diviseurs (pour faciliter l'échelle des grandeurs) Form() ' Tableau du format des variables. Le chiffre de gauche représente ' le nombre de chiffres, l'autre représente le nombre de décimale ' Form()=99 si affichage hh:mm Indice() " LimitBas() " LimitHaut() " Divise() " Form() " -----------------------+----------------+-----------------+-------------+----------+ Indice(1) = NumCycle LimitBas(1) = 1 LimitHaut(1) = 4 Divise(1) = 1 Form(1) =10 Indice(2) = JourPlage LimitBas(2) = 1 LimitHaut(2) = 7 Divise(2) = 1 Form(2) =10 Indice(3) = HysTempHab LimitBas(3) = 1 LimitHaut(3) = 10 Divise(3) =10 Form(3) =11 Indice(4) = HysTempEau LimitBas(4) = 1 LimitHaut(4) = 10 Divise(4) = 2 Form(4) =11 Indice(5) = HysTempECS LimitBas(5) = 1 LimitHaut(5) = 10 Divise(5) = 2 Form(5) =11 Indice(6) = Annee LimitBas(6) = 0 LimitHaut(6) = 99 Divise(6) = 1 Form(6) =20 Indice(7) = Mois LimitBas(7) = 1 LimitHaut(7) = 12 Divise(7) = 1 Form(7) =20 Indice(8) = JourDate LimitBas(8) = 1 LimitHaut(8) = 31 Divise(8) = 1 Form(8) =20 Indice(9) = Heure LimitBas(9) = 0 LimitHaut(9) = 23 Divise(9) = 1 Form(9) =20 Indice(10)= Minute LimitBas(10)= 0 LimitHaut(10)= 59 Divise(10)= 1 Form(10)=20 Indice(11)= TempECS LimitBas(11)= 60 LimitHaut(11)= 85 Divise(11)= 1 Form(11)=20 Indice(12)= TempMaxEau LimitBas(12)= 50 LimitHaut(12)= 90 Divise(12)= 1 Form(12)=20 Indice(13)= NumPlage LimitBas(13)= 1 LimitHaut(13)= 96 Divise(13)= 1 Form(13)=20 Indice(14)= TempMiniExt LimitBas(14)=-30 LimitHaut(14)= 0 Divise(14)= 2 Form(14)=20 Indice(15)= TCycleJour LimitBas(15)= 20 LimitHaut(15)= 50 Divise(15)= 2 Form(15)=21 Indice(16)= TCycleNuit LimitBas(16)= 20 LimitHaut(16)= 50 Divise(16)= 2 Form(16)=21 Indice(17)= HDebutPlage LimitBas(17)= 1 LimitHaut(17)= 96 Divise(17)= 1 Form(17)=99 Indice(18)= DureePlage LimitBas(18)= 1 LimitHaut(18)= 96 Divise(18)= 1 Form(18)=99 -----------------------+----------------+-----------------+-------------+-----------+ Codes " Action " ------+---------------+ 128 + 129 - 130 1 soit valeur de j = Sortie du Menu 131 1 soit Cycle1 132 2 soit Cycle2 133 3 soit Cycle3 134 4 soit Cycle4 135 1 soit lundi 136 2 soit mardi 137 3 soit mercredi 138 4 soit jeudi 139 5 soit vendredi 140 6 soit samedi 141 7 soit dimanche 142 Suppression de la plage sélectionnée 143 0 soit TypVanne = Digitale 144 1 soit TypVanne = Analogique Routine Principale: ------------------- TempoEnco = 0 ' Temporisation de contrôle d'activité MnuNum = 1 ' Première ligne du "Menu" (11a) Début de BOUCLE infinie Incrémente TempoEnco à chaque seconde Lecture de la mémoire à partir de MnuAdres = BaseAdres + 37 * (MnuNum - 1) Affichage Ligne1 = MnuAdres Affichage Ligne2 = MnuAdres + 16 MnuPosCur = MnuAdres + 32 MnuActHorlo = MnuAdres + 33 MnuActAntiH = MnuAdres + 34 MnuActRet = MnuAdres + 35 MnuIndiVar = MnuAdres + 36 Allumage du Rétro-éclairage Afficher les 2 lignes de 16 caractères sur le LCD Si MnuPosCur > 0 Afficher et positionner le Curseur à MnuPosCur Sinon Faire clignoter le caractère à la position correspondante à MnuPosCur FinSi Si Molette + ' Sens horlogique TempoEnco = 0 ' Réinitialisation du timer Si MnuActHorlo < 128 ' Si MnuActHorlo plus petit que 128 MnuNum = MnuActHorlo ' on va à la ligne du "Menu" = MnuNum Le caractère clignote à la position correspondante à MnuPosCur Sinon Le curseur est à la position correspondante à MnuPosCur Incrémente Indice(MnuIndiVar) Si Indice(MnuIndiVar) > LimitHaut Indice(MnuIndiVar) = LimitBas FinSi Indice(MnuIndiVar) = Indice(MnuIndiVar)/Divise Afficher Indice(MnuIndiVar) ' Afficher valeur sur le LCD On va à la routine "MiseAJourVariable" FinSi Sinon Si Molette - ' Sens anti-horlogique TempoEnco = 0 ' Réinitialisation du timer Si MnuActAntiH < 128 ' Si MnuActAntiH plus petit que 128 MnuNum = MnuActAntiH ' on va à la ligne MnuNum Le caractère clignote à la position correspondante à MnuPosCur Sinon Le curseur est à la position correspondante à MnuPosCur Décrémente Indice(MnuIndiVar) Si Indice(MnuIndiVar) > LimitHaut Indice(MnuIndiVar) = LimitBas FinSi Indice(MnuIndiVar) = Indice(MnuIndiVar)/Divise Afficher Indice(MnuIndiVar) ' Afficher valeur sur le LCD On va à la routine "MiseAJourVariable" FinSi Sinon Si Bouton appuyé ' Bouton au centre de la Molette TempoEnco = 0 ' Réinitialisation du timer Si MnuActRet = 130 SORTIE de la boucle de MENU ' On quitte le Menu, affichage normal Sinon Si MnuActRet < 128 ' Si Bouton appuyé et MnuActRet < 128 MnuNum = MnuActRet ' on se déplace à la ligne du Menu Sinon Si MnuActRet > ou = 131 et < ou = 134 Indice(1) = MnuActRet - 130 ' Sélection du Cycle de 1 à 4 Sinon Si MnuActRet > ou = 135 et < ou = 141 Indice(2) = MnuActRet - 134 ' Sélection du jour de la semaine MnuNum = 54 ' Après, on saute à la ligne 54 Sinon Si MnuActRet = 142 ' On efface les plages affichées (Suppression Plage en cours) MnuNum = 31 ' Après, on retourne à la ligne 31 Sinon Si MnuActRet > ou = 143 et < ou = 144 Vanne_3_voies = MnuActRet - 143 ' Sélection du Type de vanne utilisée, FinSi ' Vanne Ouvert/Fermer ou Analogique Sinon Si TempoEnco > 30 ' 30 secondes (peut être modifié) SORTIE de la boucle infinie ' On quitte le Menu, affichage normal FinSi Retour au début de la BOUCLE infinie Extinction du Rétro-éclairage Sortie et fin de la routine principale ====================================== Routine de "MiseAJourVariable": ------------------------------- Si MnuNum = 8 Annee = valeur ' (0 à 99) Sinon Si MnuNum = 9 Heure = Valeur ' (0 à 23) Sinon Si MnuNum = 18 Mois = Valeur ' (0 à 12) Sinon Si MnuNum = 19 Minute = Valeur ' (0 à 59) Sinon Si MnuNum = 20 TempECS = Valeur ' (60 à 85)/1 Sinon Si MnuNum = 21 HysTempHab = Valeur ' (1 à 10)/10 Sinon Si MnuNum = 32 JourDate = Valeur ' (1 à 31) Sinon Si MnuNum = 33 HysTempEau = Valeur ' (1 à 10)/2 Sinon Si MnuNum = 34 TempMiniExt = Valeur ' (-30 à 0)/2 Sinon Si MnuNum = 35 TempMaxiEau = Valeur ' (50 à 90)/1 Sinon Si MnuNum = 48 Cycle = Valeur ' (1 à 4)/1 ///NumPlage ' (1 à 96) ///JourPlage ' (1 à 7) /// HDebutPlage ' (0 à 96) /// DureePlage ' (1 à 96) Sinon Si MnuNum = 49 Cycle = Valeur ' (1 à 4) /// TCycleJour(Cycle) Sinon Si MnuNum = 50 Cycle = Valeur ' (1 à 4) /// TCycleNuit(Cycle) Sinon Si MnuNum = 51 HysTempECS = Valeur ' (1 à 10)/2 Sinon Si MnuNum = 54 JourSemaine = Valeur (JJJ) /// Début jj:mm calculé par 1/4 heure Sinon Si MnuNum = 55 JourSemaine = Valeur (JJJ) /// Durée / Heure début / Heure de fin Sinon Si MnuNum = 58 Cycle = Valeur (1 à 4) /// Sinon Si MnuNum = 59 Cycle = Valeur (1 à 4) /// FinSi Fin de la routine et retour dans la routine principale -------------------------------------------------------- Fichier Data à charger dans l'EEPROM du Micro-contrôleur. --------------------------------------------------------- Variables de 37 octets de longueur soit: 16 octets pour la Ligne1 LCD 16 octets pour la Ligne2 LCD 1 octet pour la Position Curseur 1 octet pour l'Action --> ( Molette sens horloger = 128) 1 octet pour l'Action <-- ( Molette sens anti-horloger = 129) 1 octet pour l'Action Return ( Bouton ) 1 octet pour l'Indice Variable, ceci nous donne 37 octets X 59 fenêtres = 2183 octets Fichier "MENU": +-+---------------+---------------+-------+------+------+------+------+ N°" ligne1 " Ligne2 "PosCur "Suite+"Suite-"Return"Indice" +-+---------------+---------------+-------+------+------+------+------+ 1PROGRAMME.DATE.H 017 002 005 006 000 2DATE.HEURE.REGLA 017 003 001 008 000 3HEURE.REGLAGES.S 017 004 002 009 000 4REGLAGES.SORTIE. 017 005 003 010 000 5SORTIE.PROGRAMME 017 001 004 130 000 6CHOIX_CYCLE.SORT 017 007 007 014 000 7SORTIE.CHOIX_CYC 017 006 006 005 000 8DATE............jj/mm/aaaa...... 026 128 129 018 006 9HEURE...........HH:MM........... 018 128 129 019 009 10TEMPERATURE_ECS. 017 011 013 020 000 11HYSTERESIS.PARAM 017 012 010 021 000 12PARAMETRES.SORTI 017 013 011 022 000 13SORTIE.TEMPERATU 017 010 012 005 000 14CYCLE1.CYCLE2.CY 017 015 017 131 000 15CYCLE2.CYCLE3.CY 017 016 014 132 000 16CYCLE3.CYCLE4.CY 017 017 015 133 000 17CYCLE4.CYCLE1.CY 017 014 016 134 000 18DATE............jj/mm/aaaa...... 021 128 129 032 007 19HEURE...........HH:MM........... 021 128 129 005 010 20TEMPERATURE_ECS.65°C............ 018 128 129 011 011 21HYSTERESIS_TEMP_AMBIANTE = 0,2°C 030 128 129 033 003 22T_MINI_EXTERIEUR 017 023 025 034 000 23T_MAXI_CHAUDIERE 017 024 022 035 000 24TYPE_REGULATION. 017 025 023 036 000 25SORTIE.T_MINI_EX 017 022 024 013 000 26SELECTION.AJOUT_ 017 027 031 038 000 27AJOUT_PLAGE.EDIT 017 028 026 040 000 28EDITER_CYCLE.TEM 017 029 027 048 000 29TEMP_JOUR.TEMP_N 017 030 028 049 000 30TEMP_NUIT.SORTIE 017 031 029 050 000 31SORTIE.SELECTION 017 026 030 007 000 32DATE............jj/mm/aaaa...... 018 128 129 003 008 33HYSTERESIS_TEMP_RADIATEUR= 0,5°C 030 128 129 051 004 34TEMPERATURE_MINIEXTERIEUR= -09°C 030 128 129 023 014 35TEMPERATURE_MAXICHAUDIERE = 80°C 030 128 129 025 012 36TYPE_REGULATION>CHAUDIERE.VANNE_ 017 037 037 025 000 37TYPE_REGULATION>VANNE_3_VOIES.CH 017 036 036 052 000 38SELECTION.CYCLExOUI..........NON 017 039 039 130 001 39SELECTION.CYCLExNON..........OUI 017 038 038 007 000 40LUNDI.MARDI.MERC 017 041 047 135 002 41MARDI.MERCREDI.J 017 042 040 136 002 42MERCREDI.JEUDI.V 017 043 041 137 002 43JEUDI.VENDREDI.S 017 044 042 138 002 44VENDREDI.SAMEDI. 017 045 043 139 002 45SAMEDI.DIMANCHE. 017 046 044 140 002 46DIMANCHE.SORTIE. 017 047 045 141 002 47SORTIE.LUNDI.MAR 017 040 046 031 000 48CYCLEx...PLAGExxJJJ.HH:MM.hh:mm. 016 128 129 056 013 49CYCLEx.TEMP_JOUR20,5°C.......... 020 128 129 031 015 50CYCLEx.TEMP_NUIT17,5°C.......... 020 128 129 031 016 51HYSTERESIS_TEMP_ECS = 0,5°C..... 025 128 129 012 005 52OUVRIR/FERMER.AN 017 053 053 143 000 53ANALOGIQUE.OUVRI 017 052 052 144 000 54JJJ.............DEBUT.A.hh:mm... 029 128 129 055 017 55JJJ........hh:mmDE.hh:mm.A.hh:mm 016 128 129 058 018 56SUPPRIMER.PLAGE.OUI..........NON 017 057 057 031 000 57SUPPRIMER.PLAGE.NON..........OUI 017 056 056 142 000 58CYCLEx..........CONTINUER.SORTIE 017 059 059 027 000 59CYCLEx..........SORTIE.CONTINUER 017 058 058 047 000 -----------------+----------------+-------+------+-------+-----+------+ Note: Les '.' sont à supprimer et remplacer par des espaces et les numéros de lignes sont seulement là à titre indicatif. ***** FIN **********************************************************************