Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

EEPROM
Stefox
Débutant
Débutant
Messages : 75
Enregistré en : juillet 2025

#11 Message par Stefox » ven. 5 juin 2026 09:49

Il faudrait que je refasse un clear all pour voir si le SP brightness se perds alors, j'ai plus refait de clear all depuis.

Ici dans le code que tu as, je sauvegarde le SP temp puis j'efface la page et puis je réinjecte SP temp. Cette donnée n'est pas censé se perdre si j'ai bien tout compris

EEPROM
satinas
Expert
Expert
Messages : 1527
Enregistré en : novembre 2015

#12 Message par satinas » ven. 5 juin 2026 10:17

L'avantage d'une eeprom est qu'on n'a pas besoin de ces fonctions d'effacement.
Pour le reste, c'est pas compliqué, tu dis que au démarrage le contenu de l'eeprom n'est pas bon. Je repose ma question, lorsque tu mets hors tension, tu connais à peu près son contenu, et bien fais une fonction qui au démarrage affiche toutes les infos stockées, est ce qu'elles sont toutes fausses, ou seulement une partie ?

EEPROM
Stefox
Débutant
Débutant
Messages : 75
Enregistré en : juillet 2025

#13 Message par Stefox » ven. 5 juin 2026 10:20

Le contenu n'est pas bon juste pour SP Temp, il met 26 mais je ne sais pas d'où il trouve 26

Le reste est ok (code et SP brightness

Si je règle ensuite via mon LCD le SP Temp, il semble bien la garder, mais elle revient à 26 lorsque je coupe l'alimentation et la remet

EEPROM
gwion
Expert
Expert
Messages : 1185
Enregistré en : février 2022

#14 Message par gwion » ven. 5 juin 2026 11:31

SI j'étais confronté à ce problème, je ferais un mini programme autonome qui ne fasse que lire et écrire l'EEPROM pour mieux cerner le problème. Le tout piloté par le terminal sur PC.

EEPROM
satinas
Expert
Expert
Messages : 1527
Enregistré en : novembre 2015

#15 Message par satinas » ven. 5 juin 2026 12:39

Sans changer le déroulement du programme.
Toutes les secondes (à peu près ou un peu plus) tu lis dans l'eeprom l'octet à l'adresse 0x3FFF et envoi sur uart (ou sur afficheur), cela doit être possible dans ta boucle main. Tu peux ainsi tester ton programme en surveillant l'uart.
Au démarrage juste après le delay 10 ms, UART_Init() et idem tu lis et envoi uart.

EEPROM
Stefox
Débutant
Débutant
Messages : 75
Enregistré en : juillet 2025

#16 Message par Stefox » ven. 5 juin 2026 15:00

Je test ça ce weekend (samedi soir ou dimanche matin , je suis pas là avant ça..)

Je vous tiens au courant ;)

EEPROM
Stefox
Débutant
Débutant
Messages : 75
Enregistré en : juillet 2025

#17 Message par Stefox » sam. 6 juin 2026 19:40

Bonjour ! :)

Alors voila, j'ai mis a peu près tout tout le main en commentaire hormis les define, initialisation de variables, les ports, ... Et j'ai laissé ceci :

Lcd_Init();
__delay_ms(10);
I2C2_Init();
__delay_ms(10);
SetPoint_Temp = 20;
Lcd_Set_Cursor(1, 1);
sprintf(buffer, "%d ", SetPoint_Temp);
Lcd_Write_String(buffer);
SetPoint_Temp = RestoreSetPointHeater();
__delay_ms(10);
Lcd_Set_Cursor(2, 1);
sprintf(buffer, "%d ", SetPoint_Temp);
Lcd_Write_String(buffer);

De cette façon, sur la ligne 1 j'ai 20, et la ligne 2 j'ai 20 aussi. Si je supprime le "= 20" j'obtiens 0 et 20 (Le 26 a disparu ??). Même après coupure de courant..

J'ai donc remis toute la séquence d'origine au démarrage avec le text "Boot" et tout, et juste avant de rentrer dans le while j'ai remis le morceau "SetPoint_Temp = RestoreSetPointHeater(); + affichage sur le LCD" sans le "= 20" bien entendu et j'ai 20 aussi même après coupure.

J'ai déplacé le morceau "SetPoint_Temp = RestoreSetPointHeater(); + affichage sur le LCD" dans le while d'origine --> Même chose, meme après coupure

J'ai considéré donc mon main comme ok car tout le code est actif sauf l'affichage de la date, heure et temp sur le LCD (uniquement l'affichage) que j'ai mis en /* */

Je suppose donc que le souci viens du Settings.C.

J'ai déplacé le morceau "SetPoint_Temp = RestoreSetPointHeater(); + affichage sur le LCD" juste après les déclarations de variables dans la fonction bool SetPointTemperature(void) présente dans Settings.c et il m'affiche bien 20, l'affichage d'origine ensuite prend le relai et affiche 20 aussi même après coupure.

Je vais donc régler ce SP Temp a 24 via le menu comme je fais normalement et revient dans la fonction et j'obtiens 20 même sans coupure..

J'ai supprimé donc du code que j'ai donné ci dessus cette ligne "SetPoint_Temp = RestoreSetPointHeater();" et il me met donc bien cette fois 24 dans ce cas et si je coupe l'alim et la remet je revient a 20.

Donc la variable globable semble bien être a 24 mais enregistré a 20 dans l'eeprom..

Mes fonctions save ou restore ne serait pas juste ? Etonnant étant donné que SetPoint Brightness n'a pas ce souci..

EEPROM
satinas
Expert
Expert
Messages : 1527
Enregistré en : novembre 2015

#18 Message par satinas » sam. 6 juin 2026 20:14

Salut,
Difficile de te suivre, on ne connaît pas ton programme.
Je ne connais qu'une seule méthode pour résoudre ce problème, elle est citée plus haut.

Code : Tout sélectionner

void DebugTemp(void)
{
  uint8_t val = EEPROM_Read_Byte(SLAVE_EE_BANK0_ADDR, SETPOINT_HEAT);
  sprintf(buffer, "%03d %03d\n", SetPoint_Temp, val);
  UART_WriteString(buffer);
}

EEPROM
satinas
Expert
Expert
Messages : 1527
Enregistré en : novembre 2015

#19 Message par satinas » sam. 6 juin 2026 20:36

Code : Tout sélectionner

void SaveSetPointHeater(uint8_t SetPoint_Temp) {
    EEPROM_Write_Byte(SLAVE_EE_BANK0_ADDR, SETPOINT_HEAT, SetPoint_Temp);
    __delay_ms(5);
}

Tu choisis le nom d'une variable globale comme paramètre de fonction, c'est un peu téméraire, bien que ça ne devrait pas poser de problème, c'est juste confus.

EEPROM
Stefox
Débutant
Débutant
Messages : 75
Enregistré en : juillet 2025

#20 Message par Stefox » sam. 6 juin 2026 20:48

Si je fais cette commande dans le main avant le while et après toute la séquence d'initialisation (Boot), j'ai : 20 (Si je régle la température a 23 via la fonction "bool SetPointTemperature(void)" du settings.c, j'obtiens bien 23 une fois de retour dans le main, mais si je coupe le courant et le remet je revient a 20).

Si je déplace cette commande a la toute fin du while du main j'obtiens : 20 (Si je régle la température a 23 via la fonction "bool SetPointTemperature(void)" du settings.c, j'obtiens bien 23 une fois de retour dans le main, mais si je coupe le courant et le remet je revient a 20).

Je la déplace dans la fonction "bool SetPointTemperature(void)" et j'obtiens 20 (Si je régle la température a 23, j'obtiens bien 23 une fois de retour dans le main, mais si je coupe le courant et le remet je revient a 20).

main.c

Settings.c

eeprom.c


Si je comprends bien, je ne peux pas mettre une variable globale en argument de fonction alors dans les règles de bonne pratique ? Je devrais faire par exemple plutot "void SaveSetPointHeater(uint8_t newSetPoint_Temp)" ?

J'ai refait les tests avec cette modification quand même mais la valeur de SetPoint_Temp se perds systématiquement a chaque redémarrage et revient a 20 :sad:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 15 invités