Oggi leggi dell’I2C EEPROM AT24C02 usato con Arduino per leggere e scrivere dati in questa memoria esterna.
Sono alcuni giorni che non pubblico articoli tecnici in quanto impegnato con alcuni progetti di cui leggerai a breve e che mi hanno impegnato nelle scorse settimane.
Ho deciso di utilizzare la I2C EEPROM AT24C02 acquistata quasi un mese fa con l’idea di testare questo tipo di componente per usarlo nei progetti in cui la sola EEPROM interna Arduino può non bastarti.
Inoltre la scelta di una EEPPROM I2C ha due vantaggi per i tuoi progetti:
le limitate scritture possibili non saranno più un problema perché potrai semplicemente sostituire il modulo con pochi euro;
l’utilizzo della comunicazione i2C ti permette di utilizzare soli due pin arduino per connetterla, continuando ad utilizzare gli stessi anche per altri device connessi.
Schema di collegamento del I2C EEPROM AT24C02
La connessione della memoria EEPROM AT24C02 ad arduini è davvero semplice, come puoi vedere in questa figura:
in cui il pin A5 di arduino è connesso al pin SCL ( cavo bianco ) ed il pin A4 al pin SDA ( cavo verde ) gli altri due pin connessi sono Gnd e 5v.
L’indirizzo I2C
L’indirizzo I2C che ti serve per comunicare con il modulo EEPROM AT24C02 è definito di default a 0x50 e può essere impostato mediante i pin AD0,AD1 ed AD2 dell’AT24C02 stesso:
anche se spesso nei moduli che trovi on-line non ci sono i jumper per gestire il cambio di indirizzo e quindi devi utilizzare il default o quello impostato dal costruttore della breakout.
Poiché la basetta che ho acquistato io non possiede alcuna documentazione che attesti su quale indirizzo è stato configurato ho provveduto ad utilizzare lo sketch: I2c Scanner di Arduino ed ho ottenuto come risposta sul monitor seriale:
che pone come primo indirizzo quello di default ed è quello che utilizzerai.
Lo sketch di controllo AT24C02
Per controllare e testare il modulo in questione puoi leggere, come ho fatto io la documentazione o datasheet, in cui ti viene descritto il modo con cui puoi inidirizzare una data area di memoria e scriverci l’informazione che desideri conservare.
Inoltre sul web ci sono numerosi esempi ed uno di questi l’ho utilizzato per questo esempio, si tratta dello sketch scritto da Paul Gallagher e condiviso sul suo gitHub:
/* EEPROM/AT24C02/BasicReadWrite Basic read/write operations to external EEPROM (AT24C02) with the Wire library Note: the addressing protocol used here is specific to AT24 models under 16k For info and circuit diagrams see https://github.com/tardate/LittleArduinoProjects/tree/master/playground/EEPROM/AT24C02/BasicReadWrite */ #include <Wire.h> #define DEVICE_ADDRESS 0x50 // must match AT24C02(A0,A1,A2) wiring #define MEMORY_ADDRESS 0 byte data; void setup() { Serial.begin(115200); Wire.begin(); data = load_or_init_byte(MEMORY_ADDRESS); Serial.print("Memory on startup: "); Serial.println(data, DEC); } void loop() { data++; store_byte(MEMORY_ADDRESS, data); Serial.print("Storing: "); Serial.println(data, DEC); Serial.print("*Stored: "); Serial.println(load_byte(MEMORY_ADDRESS), DEC); delay(1000); } byte load_or_init_byte(uint8_t eeaddress) { byte data = load_byte(eeaddress); if(data==0xFF) { data = 0; store_byte(eeaddress, data); } return data; } // store +data+ byte at +eeaddress+ void store_byte(uint8_t eeaddress, byte data) { Wire.beginTransmission(DEVICE_ADDRESS); Wire.write(eeaddress); Wire.write(data); Wire.endTransmission(); delay(20); } byte load_byte(uint8_t eeaddress) { byte data = 0xFF; Wire.beginTransmission(DEVICE_ADDRESS); Wire.write(eeaddress); Wire.endTransmission(); Wire.requestFrom(DEVICE_ADDRESS,1); if (Wire.available()) data = Wire.read(); return data; }
Tale esempio è semplice e funzionale, ti permette, inoltre, di verificare lo stato della memoria ed il corretto funzionamento di tutte le aree.
Il modulo che ho acqistato è l’AT24C02B come puoi vedere da una foto ingrandita:
e leggendo nel datasheet, il cui link è sopra, puoi cogliere che si tratta di:
un modulo che dispone di 256 aree, o world, da 8 bit ciascuna ( vedi evidenze in giallo ) mentre nelle note a margine, evidenza fucsia, si tratta proprio del modello AT24C02B.
Dopo aver caricato lo sketch puoi aprire il monitor seriale e dovresti veder qualcosa di simile alla seguente immagine:
che ti indica l’operazione di scrittura e lettura di ciascuna delle 256 aree disponibili nella EEPROM.
Il modulo I2C EEPROM AT24C02 puoi quindi adoperarlo in tutte quelle situazioni in cui hai, ad esempio, necessità di salvare dei parametri di configurazione del progetto e sapere che tale informazione sarà disponibile in caso di riavvio.
2 commenti
Buon giorno Mauro
Grazie infinite per la tua disponibilità come posso contattarti ?
Avrei bisogno di alcune delucidazioni pratiche.
Autore
Ciao Antonio,
sono onorato di leggere quello che mi scrivi.
ho rimosso il tuo numero di cellulare dai commenti perché riceveresti migliaia di telefonate pubblicitarie e non solo, i blog funzionano meglio delle toilette degli autogrill per i numeri di cellulare.
Il mio miglior aiuto è in questo blog con centinaia di articoli su Arduino e non solo.
Nei prossimi giorni partiranno due webinar, tenuti da me, di cui ti riporto i link:
https://futura.academy/corsi/webinar-arduino/
http://wemake.cc/event/webinarduino-1-arduino-e-il-blink/
Il secondo sarà presentato durante la serata dell’AUG ( https://www.eventbrite.it/e/biglietti-arduino-user-group-wearables-milano-21-aprile-2020-online-94365607071 ) domani sera.