Arduino Due lettura e scrittura EEprom

Ciao a tutti, sto provando a salvare su eeprom di un Arduino due un valore, e poi leggerlo. Il codice l'ho costruito copiando qualche esempio e poi modificandolo. Non riesco a compilarlo, mi da il seguente errore: "fatal error: avr/eeprom.h: no such file or directory". Se modifico il board da Arduino Due a Arduino Mega, la compilazione viene eseguita correttamente. Deduco che la libreria EEprom non sia corretta, (ho già scaricato la versione 1.5.2) ma l'errore persiste. Qualcuno ha avuto e risolto lo stesso problema?
Grazie

#include <EEPROM.h>
 
// Saved by Simulator for Arduino V0.97A (Free Version)

 

 
//Inizializzo variabili
     int _Setting;
     float TempWaterMin;
     float _fvalue;
//Main Program     
void setup() {
  Serial.begin(9600);
  wEEprom();
}

void loop() {
  
  rEEprom();
}

//Sub Program
void wEEprom() {

     _Setting=(1500);
      EEPROM.write(602, highByte(_Setting));
      EEPROM.write(603, lowByte(_Setting));
}

void rEEprom() {
    
     _fvalue=(EEPROM.read(602)<<8)|(EEPROM.read(603));
        Serial.print(_fvalue);
     delay(1000);
}

l'Arduino DUE non ha Eeprom a bordo

l'Arduino DUE non ha Eeprom a bordo

..quindi tra le alternative:

ciao,

io ho usato la libreria suggerita da pitusso senza alcun problema, ecco come fare:

1: includi i file necessari per la gestione della flash

#include <efc.h>
#include <DueFlash.h>
#include <flash_efc.h>

2: inizializzi il tuo oggetto flash

DueFlash flash;

3: definisci la dimensione dei dati (complessivi) da gestire, multiplo di 32bit

//===============================================================
// We'll use three blocks of data
// position_p1, position_p2, current_step.x
//===============================================================
#define DATA_LENGTH   ((IFLASH1_PAGE_SIZE/sizeof(uint32_t)) * 3)

4: definisci del blocco dati

//=============================================
// define data block
//=============================================
uint32_t flashWriteData[DATA_LENGTH];

5: definisci l'indirizzo di start (FLASH)

//=============================================
// define start address
//=============================================
#define  FLASH_START  ((uint32_t *)IFLASH1_ADDR + 4)

in setup() puoi inserire la lettura dei dati all'accensione della DUE, ecco un esempio:

// read data from flash
//=====================
flash_position_p1 = ((int32_t *)FLASH_START)[0];
flash_position_p2 = ((int32_t *)FLASH_START)[1];
flash_current_steps_x = ((int32_t *)FLASH_START)[2];

all'interno del tuo programma, quando vuoi scrivere un dato in flash, lo potrai fare direttamente, esempio:

flashWriteData[0] = int32_t(current_steps.x);
writeData();

dove writedata() conterrà il codice che effettivamente andrà a memorizzare i dati in flash

//======================================================================================================
// write data to flash
//======================================================================================================
void writeData()
{
  flash.write(FLASH_START, flashWriteData, DATA_LENGTH);
  Serial.println("\nFlash data written");
}

è più semplice a farsi che a dirsi :slight_smile:
saluti
kattivik76

@rwhite
Vedo con grande piacere che anche te sei di vicenza :slight_smile:

Eviterei di usare la Flash interna come memoria tampone per scrivere dei dati di configurazione. La Flash ha un ciclo di riscritture ridotto, 10K minimo. Puoi "bruciarla" velocemente. Un chip EEPROM I2C esterno costa una miseria.

Se non ricordo male, ormai ci sono anche in SOT23 e package simili ... chissa' perche' gli sviluppatori non hanno mai previsto uno di questi chippettini onboard, o come minimo i pad per saldarcene uno ... sai quanti problemi di memoria risolverebbero, con pochi centesimi in piu ? :wink:

l'ideale sarebbe vendere x 15€ uno shiel che contenga memoria i2c,termometro,lettore sd,qlk led e pulsanti,e altri componenti a basso costo..sarebbe fattibile,a mio parere,però taglierebbe grossi margini a diversi fornitori,che magari ti vendono x 10 € un SD shield..

Etemenanki:
Se non ricordo male, ormai ci sono anche in SOT23 e package simili ... chissa' perche' gli sviluppatori non hanno mai previsto uno di questi chippettini onboard, o come minimo i pad per saldarcene uno ... sai quanti problemi di memoria risolverebbero, con pochi centesimi in piu ? :wink:

Perché mettere delle cose che il 95% della gente non usa? Se incominci a mettere delle cose perché potrebbero essere utili non finisci piú.
Ciao Uwe

m_ri:
l'ideale sarebbe vendere x 15€ uno shiel che contenga memoria i2c,termometro,lettore sd,qlk led e pulsanti,e altri componenti a basso costo..sarebbe fattibile,a mio parere,però taglierebbe grossi margini a diversi fornitori,che magari ti vendono x 10 € un SD shield..

A parte il termometro che messo sulla shield credo serva a poco e che sostituirei invece con un RTC, si potrebbe anche fare.

Memoria, SD, RTC, ... poi cosa mettere? Naturalmente tre morsetti I2C (SDA, SCL, GND) e le resistenze, in modo da poter direttamente estendere con altri componenti I2C, un connettore per l'alimentazione... qualche altra cosa I2C che ci starebbe su questa scheda? SuperArduI2C ...

uwefed:

Etemenanki:
Se non ricordo male, ormai ci sono anche in SOT23 e package simili ... chissa' perche' gli sviluppatori non hanno mai previsto uno di questi chippettini onboard, o come minimo i pad per saldarcene uno ... sai quanti problemi di memoria risolverebbero, con pochi centesimi in piu ? :wink:

Perché mettere delle cose che il 95% della gente non usa? Se incominci a mettere delle cose perché potrebbero essere utili non finisci piú.
Ciao Uwe

Vero, ma almeno i pad sullo stampato :sweat_smile: ... cosi il 5% della gente a cui serve, invece di doversi costruire uno shield, la salda li e via :wink: XD

dicevo termometro perchè costa poco..anche un port extender ci starebbe..con magari un po' di output più generosi come corrente(e magari qualche diodo in polarizzazione inversa per chi collega relè)..e l'RTC dovrebbe anche avere un porta-batteria tampone

leo72:
Eviterei di usare la Flash interna come memoria tampone per scrivere dei dati di configurazione. La Flash ha un ciclo di riscritture ridotto, 10K minimo. Puoi "bruciarla" velocemente. Un chip EEPROM I2C esterno costa una miseria.

Stiamo andando un po' fuori tema, per rientrare un attimo rispondo a leo72:

La gestione della flash che ho realizzato è del tipo ad evento (pressione di un pulsante), è vero che ho a disposizione cicli di scrittura limitati, ma non sono incontrollati :slight_smile: ovvio che se avrei avuto una EEPROM a bordo sarebbe stato meglio, ma questo riguarda la mia applicazione nello specifico.

@rwhite Ho visto che ci sono svariati moduli EEPROM sia I2C che 1Wire, sono sicuramente più versatili della flash interna ad arduinodue e sono semplici da interfacciare... Ma tutto dipende dalla tua applicazione :slight_smile:

Saluti
Kattivik76

kattivik76:
La gestione della flash che ho realizzato è del tipo ad evento (pressione di un pulsante), è vero che ho a disposizione cicli di scrittura limitati, ma non sono incontrollati :slight_smile: ovvio che se avrei avuto una EEPROM a bordo sarebbe stato meglio, ma questo riguarda la mia applicazione nello specifico.

Sì ma devi anche pensare che il tuo codice potrebbe finire nelle mani di qualcuno che lo modifica e sbaglia a farlo per cui potrebbe creare un codice che scrive continuamente in un indirizzo di memoria, bruciando quella cella specifica. Sono avvertimenti da dare, secondo me :wink:

leo72:

kattivik76:
La gestione della flash che ho realizzato è del tipo ad evento (pressione di un pulsante), è vero che ho a disposizione cicli di scrittura limitati, ma non sono incontrollati :slight_smile: ovvio che se avrei avuto una EEPROM a bordo sarebbe stato meglio, ma questo riguarda la mia applicazione nello specifico.

Sì ma devi anche pensare che il tuo codice potrebbe finire nelle mani di qualcuno che lo modifica e sbaglia a farlo per cui potrebbe creare un codice che scrive continuamente in un indirizzo di memoria, bruciando quella cella specifica. Sono avvertimenti da dare, secondo me :wink:

Pienamente d'accordo :wink: :wink: :wink:

Saluti
Kattivik76

c'e' un RTC cinese in giro da tempo, che su un misero schedino da pochi eruo ingloba RTC-Eprom-Sensore temperatura (a volte il sensore non e' montato altre volte si, un 18B20)
In piu' l'rtc stesso ha ulteriori 56Byte di RAM (non eprom) quindi scritture infinite e sono tamponati

Ciao a tutti,
ieri ho avuto problemi di collegamento quindi mi collego solo ora.
Grazie a tutti per le risposte e i chiarimenti, precisi e dettagliati. Alla luce di ciò, per la mia applicazione penso di applicare una SD, dovrei risolvere tutti i problemi, magari avesse anche RTC.

Grazie a tutti
rwhite