Pagina 1 di 2

EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 2:27
da daniele1996
Ciao a tutti, avrei la necessità di scrivere alcuni valori sull'eeprom. Sul datasheet è riportato il seguente codice:
Codice: Seleziona tutto
void EEPROM_write(uint16_t ucAddress, unsigned char ucData)
{
   /* Wait for completion of previous write */
   while(EECR & (1<<EEPE));
   /* Set Programming mode */
   EECR = (0<<EEPM1)|(0<<EEPM0);
   /* Set up address and data registers */
   EEAR = ucAddress;
   EEDR = ucData;
   /* Write logical one to EEMPE */
   EECR |= (1<<EEMPE);
   /* Start eeprom write by setting EEPE */
   EECR |= (1<<EEPE);
}

Ho provato ad eseguirlo, ma non funziona. C'è qualcosa che manca?

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 7:39
da EcoTan
Faccio riferimento al Basic. Secondo me, quando definisci la variabile, devi scrivere per esempio:
Dim Prova As Eram Integer
con la parola chiave Eram e poi tutto resta uguale come se fosse in Ram.

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 13:28
da daniele1996
sinceramente non ho capito cosa vuoi dire...

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 14:04
da daniele1996
Con la combinazione 0 0 sarebbe erase & write, ho provato ad impostare la configurazione only write ma ugualmente non funziona...

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 14:52
da gvee
Ciao,

Hai seguito tutti i passi di configurazione del datasheet ?

PS: quando apri un thread spiega sempre punto per punto il procedimento e riporta i link al datasheet e/o AN que stai seguendo...

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 19:44
da EcoTan
daniele1996 ha scritto:cosa vuoi dire

Niente, che col Basic è più facile.
In che senso non funziona, provi a rileggere quello che hai scritto?

Re: EEPROM Attiny24

MessaggioInviato: 29 ago 2022, 23:04
da daniele1996
Con l'ISP scrivo e leggo correttamente, dal programma eseguito dal micro quando provo a leggere i dati che dovrebbero risultare nella memoria non ci sono...

Re: EEPROM Attiny24

MessaggioInviato: 30 ago 2022, 0:41
da PietroBaima
Ero curioso e mi sono messo a replicarlo (un po' alla cavolo, ma spero si capisca. Poi te lo sistemi tu) e ho capito perché non funziona :mrgreen:

Invece di usare OR e AND scrivi i registri direttamente oppure compila senza alcun livello di ottimizzazione del codice (sconsigliato).

Codice: Seleziona tutto
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
   while(EECR & (1<<EEWE));
   EEAR = uiAddress;
   EEDR = ucData;

   EECR =0b00000100;
   EECR =0b00000110;

}

unsigned char EEPROM_read(unsigned int uiAddress)
{
   /* Wait for completion of previous write */
   while(EECR & (1<<EEWE));
   /* Set up address register */
   EEAR = uiAddress;
   /* Start eeprom read by writing EERE */
   EECR |= (1<<EERE);
   /* Return data from data register */
   return EEDR;
}


EDIT: per fare la prova ho utilizzato un ATMEGA8 con gli anni di Mara Venier, ma non dovrebbe fare differenza.

Re: EEPROM Attiny24

MessaggioInviato: 30 ago 2022, 1:48
da daniele1996
Può essere un problema di fuse? ho provato a rimuovre le operazioni logiche ma non cambia nulla...

Re: EEPROM Attiny24

MessaggioInviato: 30 ago 2022, 2:26
da EcoTan
Ci capisco quasi nulla ma dico la mia, non ti fidare del debug ed accendi il solito led o fai qualcosa di tangibile.
Inoltre puoi provare quello che ti è stato proposto da Foto UtentePietroBaima?