eeprom esterna 24c32

salve

sono un principiante nel programmare arduino sto cercando dio imparare

ho collegato ad arduino una eeprom 24c32 e viene vista perfettamente con indirizzo I2C 0x50

ho provato a scrivere un numero e me lo salva e riesco anche a leggerlo

non sono riuscito a cancellare completamente la eeprom come posso fare?

grazie

NON esiste il concetto di "cancellare" ...
... se proprio vuoi, ci scrivi detro 0xFF che è il valore che normalemnte hanno di base quando sono nuove.

Tieni però presente che le EEPROM hanno un numero di scritture limitato, es. quella dentro l'ATmega328P di Arduino UNO, è garantita per 100'000 scritture ... che possono essere una quantità enorme come possono essere pochissime, in funzione di ogni quanto ci scrivi.

Guglielmo

ok ma come posso fare per scriverlo tutto in un colpo?

In che senso ? Non puoi scrivere più celle contemporaneamente, devi fare un ciclo che incrementa l'indirizzo e scrive nei vari bytes. Al limite, lavorando in "page mode" puoi scrivere 32 byte di fila senza dover dare ogni volta l'indirizzo.

Studiati bene il datasheet.

Guglielmo

ho fatto questo sembra funzionare

for (int i = 0; i < 4096; i++)
{
eeprom.writeByte(i, 0);
delay (5);
}

cosa vuol dire (page mode)???

gpb01:
In che senso ? Non puoi scrivere più celle contemporaneamente, devi fare un ciclo che incrementa l'indirizzo e scrive nei vari bytes. Al limite, lavorando in "page mode" puoi scrivere 32 byte di fila senza dover dare ogni volta l'indirizzo.

Studiati bene il datasheet.

Guglielmo

Attenzione, il page mode é un po complesso

Per scrivere 1 byte si trasferisce l' indirizzo della cella di memoria e il contenuto e si manda una condizione di stop.

Per scrivere una page ovvero 32 Byte si deve incominciare con l' inizio della page che va a step di 32. Prima pagina da 0 a 31, poi da 32 a 63 ecc.
Si manda l'indirizzo della prima cella e poi 32 bit di dati e si manda una condizione di stop. I dati devono essere tutti all' intero della page. Una scrittura non prosegue nella pagina succesiva ma all inizio di quella pagina.
esempio: se parti da 47 (metá della seconda page) i primi 16 byte andranno nelle celle 47 a 63 e i sucessivi 16 byte nelle celle 32 a 46 e non nelle celle da 64 a 80.

Ciao Uwe

uwefed:
Attenzione, il page mode é un po complesso

In realtà non è così difficile ... :slight_smile:

... il problema è che NON si devono usare librerie già fatte (... che probbailmente non lo prevedono),ma studiare il datasheet, capire come il chip funziona ed usare la Wire standard con cui fai una requestFrom() dicendogli che vuoi 32 bytes da un indirizzo e imponi la condizone di "stop" (terzo parametro) e poi fai le letture :wink:

Guglielmo

io vi ringrazio degli aiuti voi siete molto bravi ma io purtroppo sono alle prime armi mi fate un esempio di come è composto il page mode??

grazie

Emmm ... è che proprio perché sei alle prime armi ti mancano parecchie nozioni ...

Al momneto limitati a fare come fai, usando la libreria che stai usando, intanto STUDIA come funziona il bus I2C, puoi leggere QUI e, più in dettaglio tutto le varie sezioni di quello che trovi QUI.

Assimilato bene questo, ti studi come funziona la libreria Wire e tutti i suoi metodi ... dopo di che ne riparliamo :wink:

Guglielmo

grazie per le info ho letto gli articoli ma non riesco a risolvere il mio problema

io devo leggere e scrivere una struttura di variabili alla eeprom esterna

esempio questa è la mia struttura

struct config_lun
{
byte MaxI_t;
byte MinI_t;
}
lucenotturna;

void Salvare luce notturna_EEPROM()
{
lucenotturna.MinI_t = int(MinI);
lucenotturna.MaxI_t = int(MaxI);
EEPROM_writeAnything(712, lucenotturna);
}

tramite la libreria writeAnything.h di arduino e eerom.h sono riuscito a farlo sulla eeprom interna ma lo forrei fare sulla eeprom esterna 24c32 e non riesco a capire come impostare il tutto

per scrivre sulla eeprom esterna ho usato questa libreria Eeprom24C32_64.h

con il comando

eeprom.writeByte(712, MinI);
eeprom.writeByte(713, MaxI);

ma vorrei usare la struttura per semplificare il tutto

grazie

Scusa ma ... hai studiato i sorgenti della libreria che stai usando ? ... NO ? ... armati di santa pazienza e studiateli, perché ho visto che contengono tutti metodi che a te occorrono, INCLUSE le scritture in "page mode" che cercavi !!!

Studiandoli scoprirai che per scrivere la tua struttura, basta passare al giusto metodo il puntatore e la linghezza di ciò che vuoi scrivere/leggere e la libreria fa il resto !

Guglielmo

si ho guardato la libreria come ti ho detto non sono molto esperto ci sono dei passaggi che non riesco a capire se qualcuno mi spiegasse forse capirei meglio anche con un esempio descritto in modo da capire

grazie

Nel tuo esempio dichiari byte le due variabili della struct, ma poi assegni degli int ad esse.

Inoltre, il nome della void contiene degli spazi.

cyberhs:
Nel tuo esempio dichiari byte le due variabili della struct, ma poi assegni degli int ad esse.

Inoltre, il nome della void contiene degli spazi.

si il nome della void mi sono sbagliato e l'ho corretto

ma per che riguarda la struttura e quella che uso con la eeprom interna con la libreria writeAnything.h e funziona bene

ma io vorrei usare la eeprom esterna 24c32 ma logicamente la libreria writeAnything.h non funziona perché è fatta per la eeprom interna

grazie

Lascia perdere la eepromAnything, che non serve più a niente e non fa nemmeno al caso tuo.

Prova questa piuttosto: GitHub - JChristensen/extEEPROM: Arduino library to support external I2C EEPROMs..

SukkoPera:
Lascia perdere la eepromAnything, che non serve più a niente e non fa nemmeno al caso tuo.

Prova questa piuttosto: GitHub - JChristensen/extEEPROM: Arduino library to support external I2C EEPROMs..

si infatti non devo usare eepromAnything sto usando Eeprom24C32_64.h che funziona bene

il mio problema e far funzione questa libreria con la struttura come ho descritto sopra

un aiutino?????

:frowning: :frowning: :frowning:

Io te l'ho dato, ma tu non mi hai voluto ascoltare...

Teoricamente con la libreria di Christiansen o col mio fork (GitHub - PaoloP74/extEEPROM: Arduino library to support external I2C EEPROMs.) della sua libreria, c'è la funione write dove passi il puntatore ad array. Dovrebbe valere anche per le strutture.
L'importante è passare anche la lunghezza dei dati scritti.

p.s. la funzione Update su array è vuota e non funziona.

SukkoPera:
Io te l'ho dato, ma tu non mi hai voluto ascoltare...

si che ti ho ascoltato ho scaricato la libreria ma non sono molto pratico non riesco a farla funzionare

poi per le strutture non capisco bene come fare

grazie