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(18)".

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

+-+----------------+----------------+------+------+------+------+------+

 1|<MENU..........>|PROGRAMME.DATE.H|  017 |  002 |  005 |  006 |  000 |

 2|<MENU..........>|DATE.HEURE.REGLA|  017 |  003 |  001 |  008 |  000 |

 3|<MENU..........>|HEURE.REGLAGES.S|  017 |  004 |  002 |  009 |  000 |

 4|<MENU..........>|REGLAGES.SORTIE.|  017 |  005 |  003 |  010 |  000 |

 5|<MENU..........>|SORTIE.PROGRAMME|  017 |  001 |  004 |  130 |  000 |

 6|<PROGRAMME.....>|CHOIX_CYCLE.SORT|  017 |  007 |  007 |  014 |  000 |

 7|<PROGRAMME.....>|SORTIE.CHOIX_CYC|  017 |  006 |  006 |  005 |  000 |

 8|DATE............|jj/mm/aaaa......|  026 |  128 |  129 |  018 |  006 |

 9|HEURE...........|HH:MM...........|  018 |  128 |  129 |  019 |  009 |

10|<REGLAGES......>|TEMPERATURE_ECS.|  017 |  011 |  013 |  020 |  000 |

11|<REGLAGES......>|HYSTERESIS.PARAM|  017 |  012 |  010 |  021 |  000 |

12|<REGLAGES......>|PARAMETRES.SORTI|  017 |  013 |  011 |  022 |  000 |

13|<REGLAGES......>|SORTIE.TEMPERATU|  017 |  010 |  012 |  005 |  000 |

14|<CHOIX_CYCLE...>|CYCLE1.CYCLE2.CY|  017 |  015 |  017 |  131 |  000 |

15|<CHOIX_CYCLE...>|CYCLE2.CYCLE3.CY|  017 |  016 |  014 |  132 |  000 |

16|<CHOIX_CYCLE...>|CYCLE3.CYCLE4.CY|  017 |  017 |  015 |  133 |  000 |

17|<CHOIX_CYCLE...>|CYCLE4.CYCLE1.CY|  017 |  014 |  016 |  134 |  000 |

18|DATE............|jj/mm/aaaa......|  021 |  128 |  129 |  032 |  007 |

19|HEURE...........|HH:MM...........|  021 |  128 |  129 |  005 |  010 |

20|TEMPERATURE_ECS.|65°C............|  018 |  128 |  129 |  011 |  011 |

21|HYSTERESIS_TEMP_|AMBIANTE = 0,2°C|  030 |  128 |  129 |  033 |  003 |

22|<PARAMETRES....>|T_MINI_EXTERIEUR|  017 |  023 |  025 |  034 |  000 |

23|<PARAMETRES....>|T_MAXI_CHAUDIERE|  017 |  024 |  022 |  035 |  000 |

24|<PARAMETRES....>|TYPE_REGULATION.|  017 |  025 |  023 |  036 |  000 |

25|<PARAMETRES....>|SORTIE.T_MINI_EX|  017 |  022 |  024 |  013 |  000 |

26|<CYCLEx........>|SELECTION.AJOUT_|  017 |  027 |  031 |  038 |  000 |

27|<CYCLEx........>|AJOUT_PLAGE.EDIT|  017 |  028 |  026 |  040 |  000 |

28|<CYCLEx........>|EDITER_CYCLE.TEM|  017 |  029 |  027 |  048 |  000 |

29|<CYCLEx........>|TEMP_JOUR.TEMP_N|  017 |  030 |  028 |  049 |  000 |

30|<CYCLEx........>|TEMP_NUIT.SORTIE|  017 |  031 |  029 |  050 |  000 |

31|<CYCLEx........>|SORTIE.SELECTION|  017 |  026 |  030 |  007 |  000 |

32|DATE............|jj/mm/aaaa......|  018 |  128 |  129 |  003 |  008 |

33|HYSTERESIS_TEMP_|RADIATEUR= 0,5°C|  030 |  128 |  129 |  051 |  004 |

34|TEMPERATURE_MINI|EXTERIEUR= -09°C|  030 |  128 |  129 |  023 |  014 |

35|TEMPERATURE_MAXI|CHAUDIERE = 80°C|  030 |  128 |  129 |  025 |  012 |

36|TYPE_REGULATION>|CHAUDIERE.VANNE_|  017 |  037 |  037 |  025 |  000 |

37|TYPE_REGULATION>|VANNE_3_VOIES.CH|  017 |  036 |  036 |  052 |  000 |

38|SELECTION.CYCLEx|OUI..........NON|  017 |  039 |  039 |  130 |  001 |

39|SELECTION.CYCLEx|NON..........OUI|  017 |  038 |  038 |  007 |  000 |

40|<AJOUT_DE_PLAGE>|LUNDI.MARDI.MERC|  017 |  041 |  047 |  135 |  002 |

41|<AJOUT_DE_PLAGE>|MARDI.MERCREDI.J|  017 |  042 |  040 |  136 |  002 |

42|<AJOUT_DE_PLAGE>|MERCREDI.JEUDI.V|  017 |  043 |  041 |  137 |  002 |

43|<AJOUT_DE_PLAGE>|JEUDI.VENDREDI.S|  017 |  044 |  042 |  138 |  002 |

44|<AJOUT_DE_PLAGE>|VENDREDI.SAMEDI.|  017 |  045 |  043 |  139 |  002 |

45|<AJOUT_DE_PLAGE>|SAMEDI.DIMANCHE.|  017 |  046 |  044 |  140 |  002 |

46|<AJOUT_DE_PLAGE>|DIMANCHE.SORTIE.|  017 |  047 |  045 |  141 |  002 |

47|<AJOUT_DE_PLAGE>|SORTIE.LUNDI.MAR|  017 |  040 |  046 |  031 |  000 |

48|CYCLEx...PLAGExx|JJJ.HH:MM.hh:mm.|  016 |  128 |  129 |  056 |  013 |

49|CYCLEx.TEMP_JOUR|20,5°C..........|  020 |  128 |  129 |  031 |  015 |

50|CYCLEx.TEMP_NUIT|17,5°C..........|  020 |  128 |  129 |  031 |  016 |

51|HYSTERESIS_TEMP_|ECS = 0,5°C.....|  025 |  128 |  129 |  012 |  005 |

52|<VANNE_3_VOIES.>|OUVRIR/FERMER.AN|  017 |  053 |  053 |  143 |  000 |

53|<VANNE_3_VOIES.>|ANALOGIQUE.OUVRI|  017 |  052 |  052 |  144 |  000 |

54|JJJ.............|DEBUT.A.hh:mm...|  029 |  128 |  129 |  055 |  017 |

55|JJJ........hh:mm|DE.hh:mm.A.hh:mm|  016 |  128 |  129 |  058 |  018 |

56|SUPPRIMER.PLAGE.|OUI..........NON|  017 |  057 |  057 |  031 |  000 |

57|SUPPRIMER.PLAGE.|NON..........OUI|  017 |  056 |  056 |  142 |  000 |

58|CYCLEx..........|CONTINUER.SORTIE|  017 |  059 |  059 |  027 |  000 |

59|CYCLEx..........|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 **********************************************************************