Go Down

Topic: EEPROM esterna 24LC256 (Read 177 times) previous topic - next topic

LelloGi

Apr 23, 2019, 03:56 pm Last Edit: Apr 23, 2019, 04:01 pm by LelloGi
Ho la necessità di utilizzare una 24LC256 e cercando in internet ho trovato questo sketch:
Code: [Select]
#include <EEPROM.h>
#include <Wire.h>
 
int indirizzo = 0;
int data = 0;
int ciclo = 0;
void setup()
{
  //init seriale
  Serial.begin(9600);
  //per la Arduino Leonardo devo
  //attendere l'inizializzazione del modulo
  while (!Serial)
  {
    ;
  }
 
  //attendo ulteriori 5 secondi
  //prima di inviare un dato sulla seriale
  delay(5000);
  //invio un messaggio al serial monitor
  Serial.println("Start");
  //inizializzo la porta I2C della Arduino
  Wire.begin();
}
 
void loop()
{
  //avviso dell'inizio della
  //scrittura dei dati sulla seriale
  Serial.println("Inizio Scrittura");
  //init variabile
  indirizzo = 0;
  //eseguo ciclicamente la scrittura di
  //tutte e 32000 locazioni di memoria
  for (ciclo = 0; ciclo & lt; 32000; ciclo++)
  {
    //invio il control byte specificando
    //una richiesta di scrittura
    Wire.beginTransmission(0x50);
    //invio due byte contenenti l'indirizzo della
    //locazione di memoria che voglio scrivere un byte
    Wire.write(highByte(indirizzo));
    Wire.write(lowByte(indirizzo));
    //scrivo un byte nella locazione di memoria
    //precedentemente selezionata
    Wire.write(byte(data));
    //fine trasmissione
    Wire.endTransmission();
    //incrementa il valore di data
    data++;
    //quando la variabile data arriva a 255
    //resetto il suo valore a zero
    if (data == 255)
      data = 0;
 
    //incrementa il valore dell'indirizzo
    indirizzo++;
    //attendi 5ms per poter terminare le operazioni di
    //scrittura sulla memoria
    delay(5);
  }
 
  //avvisami quando la scrittura di 32000 byte
  //è terminata
  Serial.println("Fine Scrittura");
  //attendi 1/2 secondo
  delay(500);
  //avvisami dell'inizio della lettura
  Serial.println("Inizio lettura");
 
  //init variabile
  indirizzo = 0;
  for (ciclo = 0; ciclo & lt; 32000; ciclo++)
  {
    //invio il control byte specificando
    //una richiesta di scrittura
    Wire.beginTransmission(0x50);
    //invio due byte per selezionare la locazione
    //di memoria da leggere
    Wire.write(highByte(indirizzo));
    Wire.write(lowByte(indirizzo));
    Wire.endTransmission();
    //incremento la variabile indirizzo
    indirizzo++;
    //richiedo un byte al 24LC256
    Wire.requestFrom(0x50, 1);
    //attendo la disponibilità di dati sul bus i2c
 
    while (Wire.available())
    {
      Serial.print(ciclo);
      Serial.print(": ");
      //leggo dal bus il dato relativo alla
      //locazione di memoria precedentemente specificata
      byte c = Wire.read();
      //invio il dato al serial monitor
      Serial.println(c);
    }
  }
  delay(1000);
}


Ma quando lo vado a verificare mi da errore nel ciclo di lettura della EEPROM, non nel ciclo di scrittura.
l'errore che mi da è il seguente:
Code: [Select]
Arduino:1.8.9 (Mac OS X), Scheda:"Arduino/Genuino Uno"

/Users/ezio/Desktop/EEPROM_r_w/EEPROM_r_w.ino: In function 'void loop()':
EEPROM_r_w:36:27: error: 'lt' was not declared in this scope
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                           ^
EEPROM_r_w:36:36: error: expected ')' before ';' token
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                                    ^
EEPROM_r_w:36:45: error: expected ';' before ')' token
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                                             ^
EEPROM_r_w:74:27: error: 'lt' was not declared in this scope
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                           ^
EEPROM_r_w:74:36: error: expected ')' before ';' token
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                                    ^
EEPROM_r_w:74:45: error: expected ';' before ')' token
   for (ciclo = 0; ciclo & lt; 32000; ciclo++)
                                             ^
EEPROM_r_w:102:1: error: expected '}' at end of input
 }
 ^
exit status 1
'lt' was not declared in this scope

Questo report potrebbe essere più ricco di informazioni abilitando l'opzione
"Mostra un output dettagliato durante la compilazione"
in "File -> Impostazioni"

La variabile ciclo è inizializzata, mi sembra correttamente, come "int ciclo = 0;".
L'altro problema che non capisco è cosa possa servire "ciclo & lt" con l'operatore bitwise.
Potrebbe essere la variabile "lt" non inizializzata?
Saluti

 LelloGi

gpb01

#1
Apr 23, 2019, 04:14 pm Last Edit: Apr 23, 2019, 04:15 pm by gpb01
Mi sa tanto che hai fatto un copia e incolla da una pagina in HTML e ... quelli sono codici di controllo HTML ...
... &lt; corrisponde al carattere '<'.

Guarda QUI i vari codici possibili.

Quando copy cose da internet devi EVITARE di portarti dietro i codici HTML ... ;)

Guglielmo

Search is Your friend ... or I am Your enemy !

fabpolli

L'errore è abbastanza chiaro:
Code: [Select]

'lt' was not declared in this scope

la variabile lt non è dichiarata, ma in realtà non serve  :)
il problema è che hai fatto copiaincolla di un codice preso dal web
Code: [Select]

for (ciclo = 0; ciclo & lt; 32000; ciclo++)

la sintassi del for prevede:
Inizializzazione variabile (con dichiarazione opzionale); condizione di controllo; incremento
A questo punto dovresti notare l'errore nella seconda parte del for  :smiley-wink:

P.S = Sovrapposto a Guglielmo

LelloGi

A questo non avevo pensato!
Grazie

 LelloGi

Go Up