Come salvare un dato decimale in eeprom? ed il mantenimento nel tempo ?

9 Anni 5 Mesi fa #1 da Elby
Ho scritto questa funzione per salvare un dato decimale nell'allocazione 0x00h della EEprom di un pic12f1840 ma quando vado a leggerla pare non vi sia stata alcuna scrittura. Mi è venuto il dubbio che il problema possa essere dovuto alla natura decimale del dato. Ho fatto un collage delle funzioni e di come vengono usate nel programma.

void EEPROM_WriteWord(unsigned char EepromAddress, unsigned char word)
{unsigned char GIEBitValue = INTCONbits.GIE; // salva la condizione degli interrupt generali
EEADRL = EepromAddress;
EEDATL = word ;
EECON1bits.CFGS=0; //Accesses data EEprom Memory
EECON1bits.EEPGD=0; //Accesses data EEprom Memory
EECON1bits.WREN = 1; // abilita la scrittura
INTCONbits.GIE = 0; // disabilita gli interrupt
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1; //scrivi il dat
INTCONbits.GIE = GIEBitValue; // ripristina la condizione degli interrupt
EECON1bits.WREN = 0; // disabilita la scrittura
}

unsigned char EEPROM_ReadWord(unsigned char EepromAddr)
{unsigned char GIEbitsValue=INTCONbits.GIE; //salva la condizione degli interrupt generali
INTCONbits.GIE=0; //disabilita gli interrupt generali
EEADRL= EepromAddr ; // estrai il blocco indirizzo basso
EECON1bits.CFGS=0; //Accesses data EEprom Memory
EECON1bits.EEPGD=0; //Accesses data EEPROM memory
EECON1bits.RD=1; //Inizializza la lettura
INTCONbits.GIE=GIEbitsValue; //ripristina la condizione di interrupt presente
Word_memoria=(EEDATL);
return (Word_memoria); // ricongiungi il dato di 16 bit e restituiscilo
}

unsigned char num_over_TMR0_riab=31;
EEPROM_WriteWord(0x00,num_over_TMR0_riab);

Word_memoria=EEPROM_ReadWord(0x00); //leggi l'allocazione di memoria 0x00h
if ((Word_memoria)==0xFF)
{numero_overflow_TMR0=23;
}
else {numero_overflow_TMR0=Word_memoria;}


In pratica in fase di lettura mi definisce numero_overflow=23 invece che 31 come doveva essere scritto, di conseguenza la cella di memoria era ancora integra ad FF.

Altra domanda, ma il dato se non viene più modificato è considerabile eterno? sul datasheet del pic in questione consiglia di salvare nella Flash i dati fissi o poco trattati perchè la eeprom pare necessiti di continui refrash

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Elby
  • Senior Member
  • Senior Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login