V.O 07/04/2023
rev 04/10/2024

Realisation Pilotage Chaudiere
( avec PIC 18F27K42 et MPLABX XC8)


===============================================

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


Hardware

images/t_Carte_Chaudiere_2023-0729_Front.gif images/t_Chaudiere_3D_7805_Recto_.gif

realité

Kicad 3D


Implantation 3 capteurs DS18B20
Liaison UART
Liaison ICSP vers Pickit4
nota :
montage provisoire Pile CR2032 au lieu de accu LIR 2032 sur module RTC !

images/t_Carte_Chaudiere_2023-0729_back.gif images/t_Chaudiere_3D_7805_Verso_2023-07_.gif

Realité

Kicad 3D





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.

images/t_Menu101_LCD_2024-0409.gif

Organigramme :
images/t_Chaudiere_New_Menu_CONSIGNES_10.1_2024-0411_drawio.gif
Chaudiere_New_Menu_CONSIGNES_10.1_2024-0411.drawio
Chaudiere_New_Menu_CONSIGNES_10.1_2024-0411_drawio.pdf

images/t_Menu101_xls.gif

Affichage Menu10.1

cahier des charges

 

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

images/t_Menu101_xls.gif

Affichage Menu10.1

cahier des charges


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






Menu 10.2 COMPENS

rev 04/2024

images/t_Menu102_COMPENS_xls_2024-0402.gif

Affichage Menu10.2

 


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

images/t_Menu103_Temp_Limites_CHD_EXT_2024-0411.gif

Affichage LCD menu 10.3

 


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




Menu 10.4

images/t_Menu103_Temp_Limites_CHD_EXT_2024-0415.gif

affichage LCD Menu 10.3

cahier des charges

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)


00165
# 00166
Duree = 2114 mS , BP=0X10, Menu= 4 SW4
MENU_SW4
# Modif. Program
# Affectation
# Modif. Program
# Affectation
# Modif. Program
# choix validé

. Modification_Programmation_Horaire. à suivre..non implementé!
Sortie Menu 4
00167
00168


images/t_Menu_direct_SW4_Affectation_Jour_et_Programmation_Horaire_2024-0325.gif
exemple d'execution ( ... sur YAT terminal) Drawio choix SW4



SW4 a) Affectation d'un Programme à un Jour de semaine

images/t_Menu_xls_SW4a.gif images/t_Deroulement_SW4a_YAT.gif images/t_Deroulement_SW4a_Photos_2024-0516.gif

extrait fichier xls

deroulement sur terminal YAT + comments

LCD display


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é

images/t_Menu_xls_SW4_b1.gif images/t_Menu_xls_SW4_b2.gif images/t_Menu_xls_SW4_b3.gif
partie 1/3 partie 2/3 partie 3/3



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

Affichage_LCD_Menu_MAJ_RTC.jpg

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();
}





SOFTWARE ..

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

images/t_Eeprom_repartion_des_datas_2024-0917.gif

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


Pack du Projet (XC8 Chaudiere_Controle_18F27K42_2024-1004.X.zip
Chargeur Chaudiere_Controle_18F27K42_2024-1004.X.hex
Source principale main_chaudiere_2024-1004.X.c
Affichage sur LCD4x20 Affiche_LCD_Repos_2024-0904.inc
Dialogue via UART Dialogue_Operateur_PC_via_UART_2024-0904.inc
Egalisation 3 sondes Equalisation_3_DS18B20.inc
Menus LCD via SW0 . MENU10_1234_2024-08.inc
Menu SW4 Programme MENU4_SW4_2024-0918.inc
Menus SW4 configuration Menu_SW4_2024-0516.xls
Menus LCD MENUS_2024-0321.xls
Usage RTC RTC_DS3231_2024-07.c
  RTC_DS3231_2024-07.h
MAJ RTC via SW5 MAJ_RTC_Manuelle_2024-08.inc
Eeprom PIC 1Ko Eeprom_PIC_2024.c
  Eeprom_PIC_2024.h
  Eeprom_chau0825.mch
Bits Configuration Config.c
resultat compilation Compilation_Chaudiere_Controle_18F27K42_2024-0721.X.log
Lecture DS18B20 header DS18B20_2024-07.h
Lecture DS18B20 DS18B20_2024-07.c
Deroulemnt Application Chaudiere_Log_2024-0918.docx
resultat compilation Compilation_Chaudiere_Controle_18F27K42_2024-0729.X.log
Historique modifications Histo_modifs_Progr_Chaudiere_du_07avril2023_au_20Sept 2024.txt


Schéma :
Schema_Chaudiere_V21.1.3_VO_HT_2024-0713.pdf

rev: Chaudiere_V20.1.0_2024-0219.jpg

images/t_Chaudiere_V20.1.0_2024-0219.gif images/t_Chaudiere_Comparatif_Hardwares_Alarmes.gif

Schema Carte

difference entre nos cartes Paul... Henri





lien pour chargement du logiciel Terminal PC YAT
Terminal PC YAT configuration :
Terminal_Chaudiere_115200_2024-0813.yat





../common/GIF/LTC1286p.jpg

retour à l'index