Scrivere dati nella eeprom

Ciao, mi sto cimentando con la scrittura di dati sulla eeprom, per adesso sto facendo delle bozze di codice... poi quando arrivo a casa scarico lo sketch sulla scheda e vedo se funziona.

comunque la domanda è, io ho arduino nano v.3 quindi 32 K di memoria.
per scrivere sulla eeprom ho preso il codice di esempio dal playground

// write a 0 to all 512 bytes of the EEPROM cancello la eeprom se il pulsante rec è premuto

for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);

512 è un limite generico oppure io con il mio chip posso aumentare questo valore?

Grazie a tutti per il supporto

Ciao, anche io sono all'inizio su Arduino ma mi pare di aver capito che sia un limite fisso per tutti gli arduino, ovvero ha solo quello spazio riservato in EEPROM.

Se serve altro spazio mi sa che l'unica sia aggiungere altre EEPROM esterne, ma forse conviene una bella SD così non hai più grossi limiti.

Marco

se il chip è 328 (v3)hai 1 k de eproom
sennò 512b

puoi sostituire 512 con 1024

grazie per la dritta, allora adesso ho caricato il mio sketch e sembra funzionare.

quello che fa è questo:
premo un pulsante (si svuota la eeprom) e dopo un secondo si accende un led, quando questo led è acceso parte la 'registrazione', cambio il valore ad un potenziometro e un secondo led cambia di intensità secondo come manovro il potenziometro.

questi valori vengono memorizzati nella eeprom.

lascio il pulsante e la eeprom viene letta accendendomi il led numero due allo stesso modo della fase di registrazione.

quello che vorrei sapere è: che potenziometro è corretto usare? Io adesso sto provando un 100KB. (se questo va bene perchè?)

seconda cosa, io vorrei variare la velocità di lettura dalla eeprom (rate), come posso fare? (ovviamente devo aggiungere un secondo potenziometro (che tipo e valore?)

ps. ho cambiato in 1024 il valore per la registrazione.

ok ho capito come variare il rate di lettura alla eeprom, semplicemente inserendo un ritardo (delay) che varia in funzione del secondo potenziometro.

mi rimane da capire quale tipo di potenziometro usare per registrare correttamente i miei valori, questo perchè con il 100kb ora la registrazione va a scatti, il led di registrazione non varia la sua luminosità in modo uniforme.

mi sono accorto che alla pressione del tasto non viene cancellata la eeprom... il codice è questo mi potete consigliare?
Grazie

// includo la libreria per la scrittura/lettura della EEPROM

#include <EEPROM.h>

// the current address in the EEPROM (i.e. which byte
// we're going to write to next)
int addr = 0;
int val_rec = 0;      // memorizza lo stato del pulsante REC
int val = 0;      // memorizza i valori dell'analog input
int rate = 0; //memorizzo il valore del secondo potenziometro per il rate

// start reading from the first byte (address 0) of the EEPROM
int address = 0;
byte value;

//definizioni
#define REC 2  // Pulsante per la registrazione sul pin digitale 7
#define REC_LED 13  // Led che si accende quando è abilitata la registrazione
#define PLAY_LED 9  // Led che si accende quando è abilitata la riproduzione

void setup() { 
  pinMode(REC, INPUT); // imposto il pulsante come input
  pinMode(REC_LED, OUTPUT); // imposto l'uscita per il led di registrazione
  pinMode(PLAY_LED, OUTPUT); // imposto l'uscita per il led di riproduzione

  if (digitalRead(REC) == HIGH){
    // cancello la eeprom se il pulsante rec è premuto

    for (int i = 0; i < 1024; i++)
      EEPROM.write(i, 0);

  }
  else
  {

    for (int i = 0; i < 1024; i++)
      EEPROM.write(i, i);
  } 

}


void loop() {

  val_rec = digitalRead(REC); // Leggo il valore del pulsante e lo metto nella variabile
  rate = analogRead(1) / 4; //al pin analogico 1 collego il pot per il rate

  if (val_rec == HIGH)  {
    delay(1000);  //aspetto un secondo prima di far partire la registrazione
    digitalWrite(REC_LED, HIGH);   // accendo il led per la registrazione

    // need to divide by 4 because analog inputs range from
    // 0 to 1023 and each byte of the EEPROM can only hold a
    // value from 0 to 255.
    int val = analogRead(0)/4; //al pin analogico 0 collego il potenziometro per passare i valori
    analogWrite(PLAY_LED, val); //leggo i valori del potenziometro e li applico al play_led 

    // write the value to the appropriate byte of the EEPROM.
    // these values will remain there when the board is
    // turned off.
    EEPROM.write(addr, val);

    // advance to the next address.  there are 512 bytes in 
    // the EEPROM, so go back to 0 when we hit 512.
    addr = addr + 1;
    if (addr == 1024)
      addr = 0;

    delay(5);
  }
  else{

    digitalWrite(REC_LED, LOW);   // spengo il led per la registrazione
    // read a byte from the current address of the EEPROM
    value = EEPROM.read(address);

    // advance to the next address of the EEPROM
    address = address + 1;

    // there are only 512 bytes of EEPROM, from 0 to 511, so if we're
    // on address 512, wrap around to address 0
    if (address == 1024)
      address = 0;

    delay(5);

    analogWrite(PLAY_LED, value/4); //leggo i valori della eeprom e li applico al play_led 
  }
}

Trovato un errore, il delay(1000) va fuori dal loop altrimenti ad ogni giro aspetta un secondo per registrare il byte successivo.

In più ci sono parti di codce che non servono (quelle prese dal playground per scrvere nella eeprom).

Appena torno a casa provo tutte queste 'farneticazioni'. E domani compro una eprom da 32k aggiuntiva per la memorizzazione.