V.O 07/04/2023
rev 04/10/2024
Realisation Pilotage Chaudiere
( avec PIC 18F27K42 et
MPLABX XC8)
1 __CONSIGNES 2_ _COMPENSATION 3__ LIMITES Chaudiere 4___HYSTERESIS |
Consignes
Confort , Eco et Hors gel INTcorrection,NRGIndice,NRG CHD maxi, CHD mini,EXT mini sur mesures INT, EXT,EAU |
.rev 16/04/2024 |
===============================================
Partie détails du Développement :
Schéma provisoire et prototype Hardware pour
les tests
Affichage principal sur LCD 4x20 ... et .. caracteres spéciaux
Tests Hardware sur Carte (PCB) Chaudiere(28/07/2023)
Tests divers parties de Software (19/05/2024)
===============================================
Bugs et problemes rencontrés....
* Affichage LCD avec caracteres speciaux bigorné
* Comptage Timer2
*Attention à l'usage de parenthèses
* Bug Menu10.2
.....................à suivre........
Liens:
Présentation du PIC 18F27K42
et Base Hardware utilisée
Real Time Clock RTC DS3231 (avec MikroC)
Timer0 utilisé en mode pooling
Eeprom
24LC256
But : Remplacement d'une
commande de chaudiere
Projet initialisé sur Fantaspic.fr par Babard64:
[PROJET]Régulateur Climatique pour "vieille"
chaudière à Gaz
Projet
de régulation climatique (V13.0.5).docx
Implantation 3 capteurs DS18B20
Liaison UART
Liaison ICSP vers Pickit4
nota : montage provisoire Pile CR2032
au lieu de accu LIR 2032 sur module RTC !
SOFTWARE :
GESTION DES
MENUS...SW0
reference
: document : Menu 10.x (SW0).xls
Menus appelés depuis l'appui sur BP SW0 pendant < 1
sec ,
Appel détecté par une interuption INT0 sur pin MCU RB0 (SW1..SW5)
Choix en fonction de la valeur de MPas
Ordinogramme détaillé :
Version 2024 en cours de rafraichissement
Nombre de menus 7 ..passé à 4, par regroupement de 3 vartiables
par menu
Libelles des Menus accessible via SW0 :
// ----
MENUS via acces SW0 < 1 sec ---------
const char
Libelles_Menus_10[7] [13] = {
{" "},
//menu
10.1
{"CFTcsg"},
{"ECOcsg"},
{"HGLcsg"},
//menu
10.2
{"INTcor"},
{"NRGcor"},
{"NRGind"},
//menu
10.3
{"CHDmax"},
{"CHDmin"},
{"EXTmin"},
//menu
10.4
{"INThys"},
{"EXThys"},
{"EAUhys"}
};
le # represente un appui de
touche détecté via Interruption INT0 (RB0).
Remarque :
Vu la possibilité de ce MCU avec 128K programme, j'ai
privilégier l'étalement et la simplicité du code , pour en
faciliter la lecture , au detriment de la longueur de celui ci ..
Dans de multiples cas de figure on pourrait utiliser des
pointeurs sur variables et sur le pas de modfification
comme arguments , pour avoir des subroutines communes ...
C'est donc PERFECTIBLE .. ne vous géner pas pour faire
des propositions en ce sens
.. mais sans tout chambouler le programme principal et EN
RESPECTANT le cahier des charges ...
rajout sortie commune aux appels des Menus via SW0
Menu 10.1
(2024)
pour regrouper 3 consignes !
au detriment du conversationnel (réduit ) ,mais moins de Pas
dans les Menus.
Organigramme :
Chaudiere_New_Menu_CONSIGNES_10.1_2024-0411.drawio
Chaudiere_New_Menu_CONSIGNES_10.1_2024-0411_drawio.pdf
Usage de variables intermediares, de travail, Fm1,Fm2,Fm3
pour les 3 mesures affichées
Usage de SPas : contient la position de la ligne LCD (2 à 4)
Choix, associé à SPas, détermine la progression du State
Machine de 10 en 10
En position x=7 du LCD, affichage d'un pointeur > , face à la
variable en cours de choix
En position x=12 du LC , affichage > de l'action demandée (choix,incr/decr
ou valid)
Tantque non validé ouTimeout 10sec :
clignotement de la variable pointée dans le menu
Choix via SW1 (<1sec) ,
si SW0 ..sortie du Menu ! passe au Menu10.2
validation par SW1L (>1sec)
Le pointeur x=7 ...> devient *
Le pointeur x=12 descent face au choix +- S2/S3
Tantque non validé par SW1 ou Timeout
.... reglage de la valeur ,qui est modifiee en temsp réel
si SW0L >1sec sortie du Menu10.1, retour à boucle
principale
pas de modifications appliquées..
Validation par SW1L
La variable pointée est MODIFiée
Le pointeur x=12 descent face au choix save S4L
validation par SW4L (ou timeout ou sortie SW0L)
la valeur est sauvegardée en Eeprom.
Message LCD -->EEPROM
en face de la variable concernée
retour à boucle principale
modif du 04/04/2024
Rajout clignotement de la variable pointée dans
le menu
Suppression validation modif par SW1L, stockage direct en Eeprom
via SW4L
modif du 11/04/2024
Rajout reactualisation affichage LCD à l'interieur de
chacun des tests Step et valeur
plutot qu'un affichage apres test Step seulement
voir Rafraichit_Ligne_Menu_LCD(0);
voir code XC8 de MENU10_1234_2024-0419.inc
YAT terminal :
00118
00119
# 00120
Duree = 191 mS , BP=0X01, Menu= 10 SW0
Menu= 10 MPas= 1
MENU10.1 CONSIGNES
CFTcsg>19.0 Sel S1
ECOcsg 15.0 +- S2/S3
HGLcsg 10.0 save S4L
###
Step =14
#HGLcsg*11.0
HGLcsg*11 0
#HGLcsg*12.0
HGLcsg*12 0
#HGL_csg =>12.0 en Eeprom Travail +28 .. @0006C
goto Debut_1
MENU10.1 CONSIGNES
CFTcsg>19.0 Sel S1
ECOcsg 15.0 +- S2/S3
HGLcsg 12.0 save S4L
#####
Step =13
#ECOcsg*14.5
ECOcsg*14 5
#ECOcsg*14.0
ECOcsg*14 0
#ECO_csg =>14.0 en Eeprom Travail +24 .. @00068
goto Debut_1
MENU10.1 CONSIGNES
CFTcsg>19.0 Sel S1
ECOcsg 14.0 +- S2/S3
HGLcsg 12.0 save S4L
#
Step =12
#CFTcsg*19.5
CFTcsg*19 5
#CFTcsg*20.0
CFTcsg*20 0
#CFTcsg*20.5
CFTcsg*20 5
#CFT_csg =>20.5 en Eeprom Travail ..@00064
goto Debut_1
MENU10.1 CONSIGNES
CFTcsg>20.5 Sel S1
ECOcsg 14.0 +- S2/S3
HGLcsg 12.0 save S4L
#
Step =0
Sortie Menu sur SW0 ou TimeOut
Boucle sur Menu10.2
Menu= 10 MPas= 2
MENU10.2 COMPENSATION
INTcor>0.0 Sel. S1
NRGcor 0.5 +- S2/S3
NRGind H save S4L
Step =0
11/04/2024
Deroulé du programme sur terminal YAT
avec horodatage sur certains pas.
nota # = appui sur un Switch !
00048
(09:33:00.339)
## 00049
Duree = 0 mS , BP=0X01, Menu= 10 SW0
Menu= 10 MPas= 1
MENU10.1 CONSIGNES Menu= 10 MPas= 1
(09:33:01.021)
101Consigne exit S0L
CFTcsg>19.5 Sel S1
ECOcsg 15.0 +- S2/S3
HGLcsg 10.0 save S4L
(09:33:03.868)
#
Step =0
Sortie Menu sur SW0 ou TimeOut
Boucle sur Menu10.2
Menu= 10 MPas= 2
(09:33:05.133)
MENU10.2 COMPENSATION
INTcor> 0.0 Sel.S1
NRGcor 0.5 +- S2/S3
NRGind H save S4L
#
(09:33:10.573)
selected Step =12
#INTcor* 0.5
#INTcor* 1.0
#Valid. modif
INT_cor =>1.0 en Eeprom Travail ..@0005C
MENU10.2 COMPENSATION
INTcor> 1.0 Sel.S1
NRGcor 0.5 +- S2/S3
NRGind H save S4L
###
(09:33:32.170)
selected Step =14
###NRGind* G
#NRGind* F
#NRGind* E
#Valid. modif
(09:33:47.685)
NRG_ind =>E en Eeprom Travail +56 .. @00088
(09:33:50.881)
MENU10.2 COMPENSATION
INTcor> 1.0 Sel.S1
NRGcor 0.5 +- S2/S3
NRGind E save S4L
###
(09:34:00.169)
selected Step =13
#NRGcor* 0.0
#NRGcor* 0.5
#NRGcor* 1.0
#Valid. modif
(09:34:11.870)
NRG_cor =>1.0 en Eeprom Travail +16 .. @00060
(09:34:15.092)
MENU10.2 COMPENSATION
INTcor> 1.0 Sel.S1
NRGcor 1.0 +- S2/S3
NRGind E save S4L
(09:34:16.558)
#
selected Step =0
(09:34:18.138)
Sortie Menu sur SW0 ou TimeOut
Boucle sur Menu10.3
Menu= 10 MPas= 3
Menu10.3 Chaudiere
Video : Test_Menu101_102_103_104_2024-0416.webm
voir code XC8 de MENU10_1234_2024-0419.inc
Modification Menu 10.2
01/08/2024
1) Reprise affichage du caractere special ° sur LCD
modif extension du parametrage 0, 1
par 0, 1, 2
2 pas de modif de Ram_Menus10
=> pas de caractere special Temperature rajouté
void Rafraichit_Ligne_Menu_LCD(char D)
{
Print(Ram_Menus10);
CRLF1();
if (D<2) *(Ram_Menus10+8+D)=7;
LCD_Write_Text_At(SPas,1,Ram_Menus10);
}
2) mode Roll-Over au lieu de test
prealable des butees maxi ou mini
le code devient
if (Etats_BP==SW3
&& Duree_Appui<1000) // SW3 decremente
{
U1TXB ='-'; // pour faciliter la lecture des actions BP via YAT
// if ( (Step==12) && (Fm1 > Min_INT_cor) ) //mode
butées
if (Step==12)
{
Fm1 =Fm1 - 0.500;
if (Fm1< Min_INT_cor) Fm1=Max_INT_cor;
sprintf(Ram_Menus10,"INTcor* %3.1f",Fm1);
Rafraichit_Ligne_Menu_LCD(1); // parametre 1 => rajoute Degré
°
}
/ /if ( (Step==13) && ( Fm2> Min_NRG_cor) ) //avec #define
Min_NRG_cor 0.0
if (Step==13) // roll over mode
{
Fm2= Fm2 - 0.50;
if (Fm2<0.00) Fm2=Max_NRG_cor;
sprintf(Ram_Menus10,"NRGcor* %3.1f",Fm2);
Rafraichit_Ligne_Menu_LCD(2);
}
//if ( (Step==14) && (cx > 'A') )
if (Step==14) // roll over mode
{
cx=cx-1;
if(cx<'A') cx='H';
sprintf(Ram_Menus10,"NRGind* %c",cx);
Rafraichit_Ligne_Menu_LCD(2);
}
...Modif Semblables pour la partie Increment
voir : TEST_MENU10_2_2024-0801.docx
MENU 10.3
T°C LIMITES (CHD's , EXT)
16/04/2024
Même canevas de programmation que pour le Menu10.1
* Galère sur ce menu , because a Gros bug introduit en rajoutant
une variable locale SPas dans Menu10.3 .......résolu
Sauf valeur négative pour la 3em variable en ligne 4 LCD.
* Cas particulier pour l'affichage de EXT_min, variable flottante
Negative !
traitement Incrém. / décrem. sur la valeur absolue ...puis
rajout du signe -
voir code XC8 de MENU10_1234_2024-0419.inc
Modif :
Usage d'une zone RAM dédiée aux Menu10x : Ram_Menus10
... plutot que la zone CRam1 ,
déja utilisée à foison dans la boucle principale.
Application d ema devise : diviser pour mieux regner .. d'autant
qu'on a beaucoup de RAM dispo.sur ce PIC ( 8ko de RAM)
voir code XC8 de MENU10_1234_2024-0419.inc
Partie Commune Menus 10.x
Cette fonction permet l'aiguillage vers un menu suivant ou un
retour au programme principal
suivant la duree d'appui sur SW0 et le Menu10x en cours .
MENUS DIRECTS
Les menus directs SW1 à SW5 , sont appelés par un appui
sur les touches 1 ..à ...5 pendant 1 seconde..
Touche et durée de touche sélectionnée dans le traitement
interruption INT0 RB0.
Ensuite les Menus sont traités en mode Pooling SANS INTERUPTION
Menus
Directs
if ((Menu<10) && ( Duree_Appui>1000) &&(
Duree_Appui<4000) )
{
if (Etats_BP==SW0) Menu=0; // sortie Menus directs
if (Etats_BP==SW1) Menu=1;
// SW1=2 forçage mode chauffage Cf ou EC (Confort ou Economique)
if (Etats_BP==SW2) Menu=2; // SW2=4 incr
consigne (Modif consigne en cours temporaire)
if (Etats_BP==SW3) Menu=3; // SW3=8 dec
consigne (Modif consigne en cours temporaire)
if (Etats_BP==SW4) Menu=4; // SW4=16 Affectation
plages semi-horaires préprogrammées ET
modif.programmes Horaires
if (Etats_BP==SW5) Menu=5; // SW5=32 MAJ
RTC
.....à suivre ..
if (Etats_BP==SW12) Menu=6 ;// SW1+SW2=2+4=6 Arret
Total
if (Etats_BP==SW31) Menu=7; // SW1+SW3 =2+8=10 bascule consigne
Hors gel ou Normal
if (Etats_BP==SW32) Menu=8; // SW2+SW3 =4+8=12 RAZ alarmes
}
Menu direct SW1
20/05/2024
Action directe : Forçage du Mode CFT au mode ECO, en mode
alternance ( toggle bit)
si le mode en cours dans le programme horaire est celui forcé
sigle = affiché sur ligne 2 col 13
si le mode en cours est ECO et que l'on Force à CONFORT :
....fleche Haut affichée en L2C13 , +
led bleue ON, Led Verte ON ..Etat Forcé=1
si le mode en cours est CONFORT et que l'on Force à ECO :
, fleche BAS affichée en L2C13 , Led Bleue OFF+
led Verte ON ..Etat Forcé=1
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Software : Menu_1_Direct_Forcage_mode_2024-05.inc
nota :
Char12 : variable pour l'affichage en position 12 du LCD ,
0x04 = code caractere special LCD pour "Fleche Haut"
0x020 ou 32 = code ascii pour espace
00799
Duree = 1173 mS , BP=0X02, Menu= 1 SW1
SW1 Toogle Change Mode actuel 1 soit Cf
Forcage CFT -> ECO
Nouveau mode :0 soit Ec et Char12= 0X20 Valeur_En_Cours programme=
0
Sortie Menu 1
00800
...
00807
#
00808
Duree = 1605 mS , BP=0X02, Menu= 1 SW1
SW1 Toogle Change Mode actuel 0 soit Ec
Forcage ECO -> CFT
Nouveau mode :1 soit Cf et Char12= 0X04 Valeur_En_Cours
programme= 0
Sortie Menu 1
00809
Menus directs SW2 et SW3
Menu 2 : SW2 Increment consigne en cours
Menu 3 :SW3 Decremente consigne en cours
Sofware : Menu_2_3_Direct_Forcage_consigne_2024-05.inc
concerne la consigne temperature du Mode en cours .
Evolution possibles entres des bornes (Max et Min) et un pas de
progression , pré-définies en dur dans le programme.
la programmation horaire reprend le controle de la consigne au
pas horaire suivant.
Menu direct SW4
choix entre :
*Affectation d'un Programme à un Jour de semaine
*Modification d'un programme selectionné
Avril 2024
Menu direct appelé via Appui su BP SW4 , pendant > 1sec
Ce menu comporte un aiguillage vers 2
options
option 1 : Modif. Program
option 2; Affectation au jour de semaine
gestion des BP ....via interruptions !
Code de la partie Aiguillage
![]() |
|
choix parmi les 2 sous menus |
code associé |
modif : SW1L pour validation ( au
lieu de SW2)
exemple d'execution ( ... sur YAT terminal)
SW4 a) Affectation d'un Programme à un
Jour de semaine
voir :
document excel : Menu_SW4_2024-0516.xls
software : MENU4_SW4_2024-0518.inc
1ere partie .
void Affectation_Programme_au_Jour_Semaine(void)
SW4 b) Modification d'un programme
selectionné
voir : Test_modif_programation_Horaire_2024-0518.htm
* log terminal YAT
* capture ecran LCD
software : MENU4_SW4_2024-0518.inc
2em partie :
void Modification_Programmation_Horaire(void)
Menu direct SW5
:
MAJ RTC (Real Time Clock)
( LCD et BP en mode pooling)
Menu appelé via appui sur BP SW5 pendant > 1 sec
Une fois entré dans le Menu SW5, ................les BP sont
traités en mode pooling
Le Test consite à imposer une Date , Heure et jour de la semaine
correcte dans la RTC
afin de pouvoir modifer les parametres via un menu affiché sur
le LCD 4x20
Nota :
Avec une RTC neuve sans pile
A la toute premiere mise sous tension tous les registres sont à
0
soit year=00 month=00 day=00 js=01=mardi, 00H00M00SS.
Elle doit, ensuite, toujours etre
initialisée avec des données vraissemblable ( data en BCD !)
Rappel ( issu de la datasheet RTC3231)
--------------------------------------------------------------------------
The RTC maintains seconds, minutes, hours, day, date,month,
and year information. (calendrier
perpetuel inclus )
The date at the end of the month is automatically adjusted for
months with fewer than 31 days, including corrections for leap
year.
The clock operates in either the 24-hour or 12-hour format with
an AM/PM indicator. (On utilise ici, le
format 24H00)
Two programmable time-of-day alarms (
Non utilisées ! )
and a programmable square-wave output are provided. ( sortie 1Hz utilisée pour Led et Alarme)
Address (0x68)
and data are transferred serially through an I2C bidirectional
bus. (I2C1 Hardware)
The day-of-week register increments at midnight. (variable jS)
Values that correspond to the day of week are user-defined
but must be sequential (i.e., if 1 equals Sunday, then 2 equals
Monday, and so on).
Illogical time and date entries result in undefined operation
------------------------------------------------------------------------------
il faut donc initialiser
manuellement jS : (aux USA jS=1=Dimanche , en France jS=1=Lundi)
que si on change la date , pas besoin si on ne modifie que l'heure
et mn ( en supposant qu'elle soit déja correcte)
mais à eviter si c'est 23H59MN59S !
En ligne #2 du LCD ,
affichage modele de représentation des 6 registres RTC
Chaque registre 8 bits avec 2 caracteres ascii , represente
Dizaine et unité
LCD_Write_CText_At(2,l,"modele AAMMJJxSHHMN
");
en correspondance directe de l'init forcée RTC :
tmp[0]=0x00; //start Oscillateur
tmp[1]=0x01; //second
tmp[2]=0x58; //write min MN
tmp[3]=0x11; //write hour HH;
tmp[4]=0x05; ///write day of week jS
tmp[5]=0x14; // write date JJ
tmp[6]=0x09; // write month MM
tmp[7]=0x23; // write year AA
tmp[8]=0x00;
p1=&tmp[0];
I2C1_WriteNBytes(DS3231_ADDR,p1,8);
En ligne #3 du LCD,
Affiche la date et heure des registres RTC ( mais Non réactualisée!) ,puisqu'on veut
la modifier
On entre dans un menu direct via une interruption , mais ensuite
,
à l'interieur du menu l'interrupt INT0 est desactivée.
if (Menu==5)
// SW5
{
IOCBF=0;
PIR1bits.INT0IF=0;
PIE1bits.INT0IE=0;
sprintf(CRam1," SW5 Menu=%2d MAJ horloge RTC \r\n",Menu);
Print(CRam1);
MAJ_RTC_Manuelle();
// Print(CRam1);
Menu=0;
Etats_BP=0;
Drapeaux.Key_ON=0;
PIR1bits.INT0IF=0;
PIE1bits.INT0IE=1;
}
les switches sont scrutés en mode pooling !
Le timer0 est utilisé pour sortir sur timeout 10 sec ,si aucun
appui sur BP ( BP=switch)
chaque appui sur un switch SWx relance le TimeOut
Déplacement transversal
sur la ligne 3 du LCD,
limites : Mini =position colonne=8 ..jusqu'à la position maxi =colonne
19 ...
Deplacement à gauche via SW0
arrivé en bout (position mini=8) ...si on continue, retour en
Position finale 19 .
Deplacement à droite via SW1
arrivé en bout (position maxi=19) ...si on continue,
retour en Position debut=8 .
le digit concerné clignote avec le caractere Noir
On peut alors modifier la valeur (ascii)
ciblée:
Increment via SW3
Decrement via SW4
La ligne #3 est donc modifiée en temps reel ..
limites imposées sur chaque valeur ASCII , mais pas d'interaction
de verrouillage entre les digits .
c'est à l'operateur de ne pas mettre n'importe quoi ..
* exception pour le jour de la semaine .jS
.pas de dizaine => pas de modif possible sur la dizaine
jS est limité entre 1 et 7
le 1 correpond à Lundi ... le 7=dimanche
Si on rencontre un TimeOut
, on sort et tout est annulé !
message "sortie sur timeout "
Apres toutes les modifs requises,
Validation par SW5 appuyé pendant > 2 sec
le contenu de la ligne #3 , sert de buffer pour recuperer les
valeurs à transmettre à la RTC
mais il faut transcoder l' affiche de couple de caractere Ascii ,en
un Byte au format BCD
pour cela, la fonction qui va bien:
unsigned char Ascii_Paire_To_BCD(
unsigned char *px)
{ unsigned char cd, cu,cx;
cd=*(px)-48;
cx=cd<<4;
cu=*(px+1)-48;
cx=cx+cu ;
return (cx);
}
le LCD en ligne 3 affiche le contenu de la table : Contenu_Ligne_LCD_En_Cours,
un pointeur sur cette table est transmis à la fonction Ascii_Paire_To_BCD
qui évolue de paire en paire , tout au long de cette table ...qui
contient 12 caracteres -> representant les 6 registres RTC
la table tmp[] se remplit donc avec les nouvelles valeurs de
registres
qu'on envoie suite dans la RTC en I2C, si validation par SW5 >2sec
Le LCD affiche alors Sauvegarde
dans RTC
Run sur terminal YAT :
Init RTC Forcee pour ce test a Vendr 14/09/2023
11:58:01
14/09/23 11H58M01S
Test mode Pooling des 6 BP sur PORTB , de gauche à droite
Etat initial : k= 127 soit 0x007F m= 127 soit 0x007F
Sorti de test par validation par SW5>2 sec ou Timeout de 10sec
Bp= 0x02, Duree = 147
Bp= 0x02, Duree = 6
Bp= 0x02, Duree = 89
.. etc ......
Bp= 0x08, Duree = 128
Bp= 0x08, Duree = 103
Bp= 0x20, Duree = 2199......................................................
SW5> 2sec = Validation !
Contenu Ligne #3 LCD :modify 230918011058
px : 23 i= 7 offset j= 0 tmp[ 7]=23
px : 09 i= 6 offset j= 2 tmp[ 6]=09
px : 18 i= 5 offset j= 4 tmp[ 5]=18
px : 01 i= 4 offset j= 6 tmp[ 4]=01
px : 10 i= 3 offset j= 8 tmp[ 3]=10
px : 58 i= 2 offset j=10 tmp[ 2]=58
new RTC 230918011058
Memo dans RTC
Verif. Nouvelle Date et Heure RTC
Le Lundi 18/09/23 10H58M01S
Nota : l'application de ce menu a permis de déceler un bug sur l'Affichage
LCD Repos ,
ligne 3 et 4 affichage partie programmation Horaire avec
caracteres speciaux LCD
Modif déplacement horizontal :
-> boucle vers debut si deplacement à droite depuis la
derniere position
<- boucle vers la fin si debut deplacement à gauche depuis la
1ere position
Modif pour Increment/decrement valeur
usage mode Roll-Over pour diminuer le nombre d'appui touche
pour passer de 1 à 9 via 8 appui de touche
+,
on fait touche - => passe de 1 à 9 direct
Exemple d'application :
Ordinogramme détaillé :
Chaudiere_MAJ_RTC_Manuelle_2023-1203_Drawio.pdf
Chaudiere_MAJ_RTC_Manuelle_2023-1203.drawio
Menu Direct 6 : Arret TOTAL
(SW1+SW2)
Software : Menu_Direct_6_Arret_Total_2024-06.inc
Marche_Chaudiere=ARRET
Bruleur=0
Menu Direct 7 : bascule Hors Gel / Normal
(SW1+SW3)
![]() |
![]() |
![]() |
1er appel SW1+SW3 |
2em Appel SW1+SW3 |
puis retour normal |
Consigne = 10°C
Selection Programme Horaire #10 =W
..retour normal Mode ECO , Programme Horaire#9=V
Software : Menu_7_Direct_Bascule_Hors_gel_Normal_2024-06.inc
Menu Direct 8 : RAZ Alarmes
(SW2+SW3)
rappel Hardware :
#define Alarm_Out LATCbits.LATC0
#define Alarm_Inp1 PORTCbits.RC1
#define Alarm_Inp2 PORTCbits.RC2
#define BP_Egalisation PORTCbits.RC5
#define Alarm_Inp1_dir TRISCbits.TRISC1
#define Alarm_Inp2_dir TRISCbits.TRISC2
#define Alarm_Out_dir TRISCbits.TRISC0
#define BP_Egalisation_Dir TRISCbits.TRISC5
dans init Hardware
RC0PPS =0;
RC1PPS =0;
RC2PPS =0;
RC5PPS=0; // SW6 input
Alarm_Inp1_dir=1; //RC1
Alarm_Inp2_dir=1; //RC2
Alarm_Out_dir=0; // RC0
Alarm_Out=1;
BP_Egalisation_Dir=1; //RC5
dans traitement interruption :
// detection Entrees dans Menus directs
if (Etats_BP==SW1) Menu=1; // SW1(2) mode Cf ou EC
if (Etats_BP==SW2) Menu=2; // SW2(4) incr consigne
if (Etats_BP==SW3) Menu=3; // SW3(8) dec consigne
if (Etats_BP==SW4) Menu=4; // SW4(16) Affectation programme ou
modif programme
if (Etats_BP==SW5) Menu=5; // SW5(32)
if (Etats_BP==SW12) Menu=6 ;// SW1+SW2=2+4=6 Arret Total
if (Etats_BP==SW31) Menu=7; // SW1+SW3 =2+8=10 bascule consigne
Hors gel ou Normal
if (Etats_BP==SW32) Menu=8; // SW2+SW3 =4+8=12 RAZ alarmes
dans la boucle principale du main
if(Menu==8) //SW2+SW3
{ //................... pas encore testé !
CPrint("Reset Alarmes \r\n");
LCD_Write_CText_At(1,1," Reset Alarmes ");
sprintf(CRam1," ALarm1=x ALarm2=x", (Alarm_Inp1>>1)+48,(Alarm_Inp2>>2)+48);
LCD_Write_Text_At(2,1,CRam1);
__delay_xSec(3);
Alarm_Out=1; //stop alarme
Terminaison_Menu_Direct();
}
Projet MPLABX rev 04/10/2024
:
directory : C:\MPLABX_Projects\Chaudiere_Controle_18F27K42_2024.X
version XC8 :2360
Projet_Chaudiere_liste_des_fichiers_2024-0924.jpg
Memory Summary:
Program space used 13508h ( 79112) of 20000h bytes ( 60.4%)
Data space used 780h ( 1920) of 2000h bytes ( 23.4%)
Configuration bits used 5h ( 5) of 5h words (100.0%)
EEPROM space used 0h ( 0) of 400h bytes ( 0.0%)
ID Location space used 0h ( 0) of 10h bytes ( 0.0%)
Repartition des datas en Eeeprom PIC
![]() |
extrait table horiaire |
uint8_t Tables_Programmations_Horaires[12][32]
={ // //.... etc .... {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, 'D' ,'o','m','u','s','>','R',0x00}, // {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 0x00,0x00,0x03,0x03,0x03,0x03,0x03,0x03, 0x03,0x03,0x03,0x03,0x03,0x03,0x00,0x00, 'M' ,'a','t','i','n','>','T',0x00}, // {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03, 0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00, 0x00,0x03,0x03,0x03,0x03,0x03,0x00,0x00, 'R' ,'e','p',''a','s','>','T',0x00}, //..etc .... |
Schéma :
Schema_Chaudiere_V21.1.3_VO_HT_2024-0713.pdf
rev: Chaudiere_V20.1.0_2024-0219.jpg
lien
pour chargement du logiciel Terminal PC YAT
Terminal PC YAT configuration :
Terminal_Chaudiere_115200_2024-0813.yat
retour à l'index