Buonasera a tutti,
la libreria è utilizzabile in un eeprom collegata ad arduino? (non utilizzando quindi l'EEPROM di arduino)
Grazie!
Buonasera a tutti,
la libreria è utilizzabile in un eeprom collegata ad arduino? (non utilizzando quindi l'EEPROM di arduino)
Grazie!
NO, quella libreria è fatta per la EEPROM interna, per quelle esterne devi vedere come sono collegate (I2C, SPI, ecc) e magari trovi qualche specifica libreria.
Guglielmo
Uhmmm... questa cosa potrebbe interessare anche me.. prima pensavo di usare una scheda SD esterna per memorizzare delle variabili che mi serve ritrovare anche dopo una mancanza di alimentazione , però forse potrei effettivamente usare una Eprom. Esistono librerie per collegare memorie esterne ? Grazie
Certo longiarduino, esistono l'EEPROM.h e la SD.h..sinceramente con avr/eeprom.h mi trovavo molto bene e di facilissimo utilizzo.. vedrò come utilizzare i float in eeprom.h
Grazie gpb!
Ciao, per ora ho provato con la Eprom interna su un Mega 2560, al momento ci scrivo/leggo una 50ina di variabili (... o meglio.. per ora ne ho testate una decina ma poi il codice completo me utilizzerà una 50ina). Da come ho capito è sufficiente la Eprom interna, magari più avanti passerò ( se ne sarò in grado ) ad Eprom esterne. Ciao
La EEPROM interna riesce a fare solo 10.000 scritture mentre altre possono arrivare tranquillamente a 4 milioni di cicli scrittura..dipende per l'uso che se ne deve fare!
100000, per ogni cella.
Ciao , diciamo che in media la variabile che avrebbe più riscritture giornaliera è solo una , ne potrebbe fare indicativamente una 20ina al giorno se non ho "sbagliato" troppo i calcoli, arrotondando a circa 7000 scritture all'anno.
Mentre le letture sarebbe molte ma molte di più .. ma penso che il "problema" è solo in scrittura .
Per ora si tratterebbe di dati che non mi interessa portare all'esterno (quindi usare un SD ) . Più avanti invece si ma con altre variabili, non con quelle attualmente in programma. Voi cosa consigliate ?
Grazie e buona giornata a tutti.
... come giustamente ha fatto notare SukkoPera, le scritture garantite nella EEPROM interna sono 100'000 per singola cella, il che significa che, salvo non si debba utilizzare l'intera EEPROM, si possono usare delle tecniche per scrivere mano mano su celle differenti, prolungando enormemente la vita.
Consiglio lo studio dell'allegato documento di Atmel e relativo esempio C.
Guglielmo
AVR101 - High Endurance EEPROM Storage.pdf (47.3 KB)
Atmel - High Endurance EEPROM Storage.c (4.31 KB)
longiarduino:
... ne potrebbe fare indicativamente una 20ina al giorno se non ho "sbagliato" troppo i calcoli, arrotondando a circa 7000 scritture all'anno.
... renditi conto che anche facendo 10'000 scritture l'anno di TUTTA la EEPROM (cosa rara, per cui vedi sopra), comunque sarebbero garantiti almeno 10 anni e ... dubito che un semplice progetto abbia una vita così lunga sempre sulla stessa scheda (... con l'evoluzione che c'è).
Esempio, dovendo salvare 100 byte, con le tecniche di "Endurance" descritte ... arrivi anche a 100 anni
Guglielmo
Ops, ricordavo male perdonatemi..inoltre non sapevo dell'high Endurance..la studierò
Interessante l'High Endurance.... vediamo se riesco ad integrarlo nella ExtEEprom. (GitHub - PaoloP74/extEEPROM: Arduino library to support external I2C EEPROMs.)
PaoloP:
Interessante l'High Endurance.... vediamo se riesco ad integrarlo nella ExtEEprom. (GitHub - PaoloP74/extEEPROM: Arduino library to support external I2C EEPROMs.)
Guglielmo
PaoloP:
Interessante l'High Endurance.... vediamo se riesco ad integrarlo nella ExtEEprom. (GitHub - PaoloP74/extEEPROM: Arduino library to support external I2C EEPROMs.)
+1 karma e a fine lavoro un altro
longiarduino:
Esistono librerie per collegare memorie esterne ?
Tecnicamente quando collegata fisicamente... è collegata.
Bosogna accedere (in lettura o scrittura).
Basta la libreria Wire e il datasheet.
Le pagine 1 e 3 del datasheet contengono le informazioni su come collegarla e a cosa servono i vari pin.
Le pagine da 9 a 12 mostrano lo scambio dati nei diversi casi (che si realizza con la libreria Wire).
Quello che può non essere immediatamente chiaro è quali funzioni di Wire servano per le varie parti della comunicazione, che fondamentalmente può essere solo in scrittura o solo in lettura.
Quella in scrittura si ottiene con Wire.beginTransmission (seguita da diverse Wire.write e la funzione finale Wire.endTransmission), quella in lettura con Wire.requestFrom (seguita da diverse Wire.read).
Ad esempio se voglio leggere il byte all'indirizzo 1000, prima devo far puntare la memoria a quell'indirizzo, quindi devo accedere al chip in scrittura tramite il suo indirizzo su bus i2c (tipicamente da 0x50 a 0x57 per una 24C32 da 4kiB):
unsigned int addr = 1000;
Wire.beginTransmission(0x57);
Wire.write(highByte(addr));
Wire.write(lowByte(addr));
Wire.endTransmission();
E poi riaccedere in lettura:
Wire.requestFrom(0x57, 1);
byte n = Wire.read();
Ovviamente nella funzione setup si sarà predisposta la comunicazione i2c con:
Wire.begin();