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 ---
- 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 ---
Modérateur : Jérémy
EEPROM
A mon avis, l'usure de l'eeprom et le temps de recherche sont les mêmes que tu utilises 1 bloc ou 2. Chaque fois que tu fais une écriture d'1 octet ou plusieurs, c'est toute la page qui est écrite, et quelque soit le bloc. Je ne connais pas la fréquence d'écriture des enregistrements, c'est sans doute le stockage eeprom de currentAddress qui pose problème car très souvent écrit et toujours au même endroit.
EEPROM_RESERVED_START n'intervient pas dans le contenu du for, le for écrit systématiquement 128 fois 0 à partir de l'adresse addr, qui fait des grands sauts de 128.
Pourquoi ce SaveSetPointHeater() répété 128 fois ?
Si tu ne peux utiliser l'uart, affiche chaque seconde sur le lcd l'octet de l'eeprom que tu veux surveiller, en le lisant à chaque fois. J'ai du mal à croire que lorsque tu vas éteindre le montage, la dernière valeur affichée ne sera pas réaffichée au démarrage.
EEPROM_RESERVED_START n'intervient pas dans le contenu du for, le for écrit systématiquement 128 fois 0 à partir de l'adresse addr, qui fait des grands sauts de 128.
Pourquoi ce SaveSetPointHeater() répété 128 fois ?
Code : Tout sélectionner
for (uint16_t addr = 0; addr < EEPROM_RESERVED_START; addr += PAGE_SIZE) {
I2C2_Start();
I2C2_WriteAddr(SLAVE_EE_BANK0_ADDR);
I2C2_WriteData((addr >> 8) & 0xFF);
I2C2_WriteData(addr & 0xFF);
for (uint8_t i = 0; i < PAGE_SIZE; i++) {
I2C2_WriteData(0x00);
}
I2C2_Stop();
__delay_ms(10);
SaveSetPointHeater(MemSPTemp);
__delay_ms(10);
} Si tu ne peux utiliser l'uart, affiche chaque seconde sur le lcd l'octet de l'eeprom que tu veux surveiller, en le lisant à chaque fois. J'ai du mal à croire que lorsque tu vas éteindre le montage, la dernière valeur affichée ne sera pas réaffichée au démarrage.
EEPROM
Donc tu ferais banque 1 pour les codes avec les dates banque 2 pour les adresses reservé ?
SaveSetPointHeater(MemSPTemp); n'a pas d'interet d'être fait 128 fois, c'est une erreur, je viens de le déplacer.
Si je met une valeur dans SP Temp, (18 imaginons), si je veux aller la régler, je repasse donc via mon menu et je récupère bien 18. Si je coupe l'alimentation et la remet et écrit sur le lcd la valeur du SP Temp avant de rentrer dans le while du main, je recupère bel et bien 138. L'écriture a peu être un souci, mais je ne comprend pas pourquoi SP Brightness n'est pas impacté et les codes avec les dates non plus.
SaveSetPointHeater(MemSPTemp); n'a pas d'interet d'être fait 128 fois, c'est une erreur, je viens de le déplacer.
Si je met une valeur dans SP Temp, (18 imaginons), si je veux aller la régler, je repasse donc via mon menu et je récupère bien 18. Si je coupe l'alimentation et la remet et écrit sur le lcd la valeur du SP Temp avant de rentrer dans le while du main, je recupère bel et bien 138. L'écriture a peu être un souci, mais je ne comprend pas pourquoi SP Brightness n'est pas impacté et les codes avec les dates non plus.
EEPROM
Tu repasses, tu récupères, tu remets, tu rentres, moi ce qui m'intéresse c'est ce qu'il y a dans l'eeprom 
Si tu stockes un pointeur, pas besoin d'effacer l'eeprom.
On peut se passer de pointeur, on part d'une eeprom effacée, et on scrute l'eeprom pour chercher le premier emplacement vide, là c'est plus long lors de l'écriture.
Si tu stockes un pointeur, pas besoin d'effacer l'eeprom.
On peut se passer de pointeur, on part d'une eeprom effacée, et on scrute l'eeprom pour chercher le premier emplacement vide, là c'est plus long lors de l'écriture.
EEPROM
Ok donc je fais ceci a la ligne 295 juste avant le while du main :
Lcd_Clear();
SetPoint_Temp = RestoreSetPointHeater();
Lcd_Set_Cursor(1, 1);
sprintf(buffer,"%d", SetPoint_Temp);
Lcd_Write_String(buffer);
__delay_ms(3000);
Je lance le programme j'obtiens 138.
Je déplace ce morceau en ligne 147 juste après le delay 10ms de I2C2_Init(); et j'obtiens aussi 138.
j'ai ensuite fait ceci juste après le bout de code que j'ai écrit ci dessus : SaveSetPointHeater(test); avec test initalisé a 19, j'ai chargé le programme puis j'ai supprimé la déclaration de variable et cette fonction save du main et re-charger le programme et j'obtiens 19 donc la ça a l'air d'aller, si je remet le bout de code que j'ai écrit au dessus en ligne 295, j'obtiens bien 19 aussi
Lcd_Clear();
SetPoint_Temp = RestoreSetPointHeater();
Lcd_Set_Cursor(1, 1);
sprintf(buffer,"%d", SetPoint_Temp);
Lcd_Write_String(buffer);
__delay_ms(3000);
Je lance le programme j'obtiens 138.
Je déplace ce morceau en ligne 147 juste après le delay 10ms de I2C2_Init(); et j'obtiens aussi 138.
j'ai ensuite fait ceci juste après le bout de code que j'ai écrit ci dessus : SaveSetPointHeater(test); avec test initalisé a 19, j'ai chargé le programme puis j'ai supprimé la déclaration de variable et cette fonction save du main et re-charger le programme et j'obtiens 19 donc la ça a l'air d'aller, si je remet le bout de code que j'ai écrit au dessus en ligne 295, j'obtiens bien 19 aussi
EEPROM
EEPROM
Ok ok donc alors je met :
Lcd_Clear();
SetPoint_Temp = RestoreSetPointHeater();
Lcd_Set_Cursor(1, 1);
sprintf(buffer,"%d", SetPoint_Temp);
Lcd_Write_String(buffer);
Dans le while en ligne 319 et je met en commentaire l'affichage de la température, date et heure
Au démarrage, j'ai 19 et elle reste a 19. Si je la change via le menu, elle ne varie pas du tout une fois de retour dans le main (J'ai aussi 19 en revenant dans le menu du réglage après l'avoir modifié)
Lcd_Clear();
SetPoint_Temp = RestoreSetPointHeater();
Lcd_Set_Cursor(1, 1);
sprintf(buffer,"%d", SetPoint_Temp);
Lcd_Write_String(buffer);
Dans le while en ligne 319 et je met en commentaire l'affichage de la température, date et heure
Au démarrage, j'ai 19 et elle reste a 19. Si je la change via le menu, elle ne varie pas du tout une fois de retour dans le main (J'ai aussi 19 en revenant dans le menu du réglage après l'avoir modifié)
EEPROM
Je pense avoir compris, dis moi ce que tu en penses :
Dans settings.c j'ai la fct : bool SetPointTemperature(void) en ligne 760
je met if (OK_BUTTON == 0) dans le while, mais OK_BUTTON == 0 est aussi une condition de sortie de la boucle while
j'ai déplacé le if en dehors du while et mnt ça marche on dirait, je récupère bien la modif meme après coupure
Dans settings.c j'ai la fct : bool SetPointTemperature(void) en ligne 760
je met if (OK_BUTTON == 0) dans le while, mais OK_BUTTON == 0 est aussi une condition de sortie de la boucle while
j'ai déplacé le if en dehors du while et mnt ça marche on dirait, je récupère bien la modif meme après coupure
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 17 invités


