cancellare 24lc512

Salve! cercavo un programma per cancellare la eeprom 24lc512 in tutti i suoi indirizzi ma in rete non riesco trovare niente, sapete indirizzarmi? Grazie

Datemi una mano per cortesia!

Se sai scrivere una locazione sulla eeprom puoi creare un loop e scrivere 0xFF ( 255 decimale) su ogni locazione presente nella eeprom.

Se non ricordo male quando sono nuove le locazioni hanno valore 0xFF

Tipo cosi!?
#include <Wire.h>

#define disk1 0x50 //Address of 24LC512 eeprom chip

void setup(void)
{
Serial.begin(9600);
Wire.begin();

unsigned int address = 0;

writeEEPROM(disk1, address, 123);
Serial.print(readEEPROM(disk1, address), DEC);
}

void loop(){}

void writeEEPROM(int deviceaddress, unsigned int eeaddress, byte data )
{
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.send(data);
Wire.endTransmission();

delay(5);
}

byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
byte rdata = 0xFF;

Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();

Wire.requestFrom(deviceaddress,1);

if (Wire.available()) rdata = Wire.receive();

return rdata;
}

Victor795:
Se sai scrivere una locazione sulla eeprom puoi creare un loop e scrivere 0xFF ( 255 decimale) su ogni locazione presente nella eeprom.

Se non ricordo male quando sono nuove le locazioni hanno valore 0xFF

un loop è una ripetizione di una porzione di codice non un funzione
EDIT:
void loop(){} ← ho visto ora le parentesi graffe, sry :smiley:

while(1);  // loop infinito
while( contatore < 10) {   //esegue una porzione di codice ( in questo caso contatore++) finchè contatore <10,poi esce

 contatore ++;
}
#Define nLocazioni  64000
while (address++ < nLocazione )  writeEEPROM(disk1, address, 255);

mi potresti dare una mano per il codice non sono molto esperto!
Che io sto scrivendo su una eeprom pero quando va a leggere certi caratteri non li vede bene da monitor seriale!
anche riscrivendogli sopra mi da lo stesso errore, in una precedente programmazione aveva dato errore forse per quello che da monitor scrive male.

Victor795:
un loop è una ripetizione di una porzione di codice non un funzione

while(1);  // loop infinito
while( contatore < 10) {   //esegue una porzione di codice ( in questo caso contatore++) finchè contatore <10,poi esce

contatore ++;
}







#Define nLocazioni  64000
while (address++ < nLocazione )  writeEEPROM(disk1, address, 255);

Assicurati che il monitor sia configurato alla stessa velocità del tuo Serial.begin

#include <Wire.h>
#define disk1 0x50 

unsigned int address = 0,nLocazione;

void setup(void)
{
  Serial.begin(9600);
  Wire.begin();  

  Serial.println("hello !");
  
  
 
  writeEEPROM(disk1, address, 123);
  Serial.print(readEEPROM(disk1, address), DEC);
}
 
void loop(){
 while (Serial.available())
    {
      char cmd = (char)Serial.read();
       
      if (cmd == 'f')
      { 
          while (address++ < nLocazione )  writeEEPROM(disk1, address, 255);  // cancella tutto
          Serial.print("EEPROM cancellata");
      } 
   } 
  }
 
void writeEEPROM( byte deviceaddress, unsigned int eeaddress, byte data ) 
{
  Wire.beginTransmission(deviceaddress);
   Wire.write((int)(eeaddress >> 8));   // MSB
   Wire.write((int)(eeaddress & 0xFF)); // LSB
   Wire.write(data);
   Wire.endTransmission();
 
  delay(10);
}
 
byte readEEPROM(byte deviceaddress, unsigned int eeaddress ) 
{
  byte rdata = 0xFF;
 
  Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.endTransmission();
 
  Wire.requestFrom(deviceaddress,1);
 
  if (Wire.available()) rdata = Wire.read();

  return rdata;
}

Grazie per l’aiuto ma rimane fermo cosi hello !123 non va avanti per niente.
Da anche questo errore in compilazioneIn file included from C:\Users\Galeo\AppData\Local\Temp\arduino_modified_sketch_930508\sketch_aug14a.ino:2:0:

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h: In function ‘byte readEEPROM(byte, unsigned int)’:

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h:64:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)

uint8_t requestFrom(int, int);

^

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h:61:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)

uint8_t requestFrom(uint8_t, uint8_t);

Victor795:
Assicurati che il monitor sia configurato alla stessa velocità del tuo Serial.begin

#include <Wire.h>

#define disk1 0x50

unsigned int address = 0,nLocazione;

void setup(void)
{
 Serial.begin(9600);
 Wire.begin();

Serial.println(“hello !”);

writeEEPROM(disk1, address, 123);
 Serial.print(readEEPROM(disk1, address), DEC);
}

void loop(){
while (Serial.available())
   {
     char cmd = (char)Serial.read();
     
     if (cmd == ‘f’)
     {
         while (address++ < nLocazione )  writeEEPROM(disk1, address, 255);  // cancella tutto
         Serial.print(“EEPROM cancellata”);
     }
  }
 }

void writeEEPROM( byte deviceaddress, unsigned int eeaddress, byte data )
{
 Wire.beginTransmission(deviceaddress);
  Wire.write((int)(eeaddress >> 8));   // MSB
  Wire.write((int)(eeaddress & 0xFF)); // LSB
  Wire.write(data);
  Wire.endTransmission();

delay(10);
}

byte readEEPROM(byte deviceaddress, unsigned int eeaddress )
{
 byte rdata = 0xFF;

Wire.beginTransmission(deviceaddress);
 Wire.write((int)(eeaddress >> 8));   // MSB
 Wire.write((int)(eeaddress & 0xFF)); // LSB
 Wire.endTransmission();

Wire.requestFrom(deviceaddress,1);

if (Wire.available()) rdata = Wire.read();

return rdata;
}

Soluziobi!?

Galeots: Grazie per l'aiuto ma rimane fermo cosi hello !123 non va avanti per niente. Da anche questo errore in compilazioneIn file included from C:\Users\Galeo\AppData\Local\Temp\arduino_modified_sketch_930508\sketch_aug14a.ino:2:0:

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h: In function 'byte readEEPROM(byte, unsigned int)':

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h:64:13: note: candidate 1: uint8_t TwoWire::requestFrom(int, int)

uint8_t requestFrom(int, int);

^

C:\Users\Galeo\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.6.12\libraries\Wire\src/Wire.h:61:13: note: candidate 2: uint8_t TwoWire::requestFrom(uint8_t, uint8_t)

uint8_t requestFrom(uint8_t, uint8_t);

Galeots:
Tipo cosi!?
#include <Wire.h>

Hai installato la libreria che avevi già riportato sul forum ?

Uguale non va resta fermo sempre in hello!123 non va avanti e non dice che ha finito di cancellare

quote author=Victor795 link=msg=2881201 date=1471181499]

Hai installato la libreria che avevi già riportato sul forum ? [/quote]

quindi non ti da più errore di compilazione se visualizza la scritta “Hello !”.

Per cancellare hai inviato la lettera ‘f’(minuscola) dal serial monitor di Arduino IDE ?

Ah ok non avevo visto che cera da premere f! Cmq ho provato ma non cancella niente anche se dice che ha finito! Ho provato con il suo programma e mi visualizza ancora tutto il contenuto! Come devo fare!?

Victor795: quindi non ti da più errore di compilazione se visualizza la scritta "Hello !".

Per cancellare hai inviato la lettera 'f'(minuscola) dal serial monitor di Arduino IDE ?

Galeots: Ah ok non avevo visto che cera da premere f! Cmq ho provato ma non cancella niente anche se dice che ha finito! Ho provato con il suo programma e mi visualizza ancora tutto il contenuto! Come devo fare!?

fai uno screen di cosa visualizza dopo aver cancellato

Mi da questo da terminale non sto fare screen lentamente e corto!
Cmq ci mette un secondo a cancellare secondo me ce qualcosa che non va.

hello !
123EEPROM cancellata

Victor795:
fai uno screen di cosa visualizza dopo aver cancellato

Galeots: Mi da questo da terminale non sto fare screen lentamente e corto! Cmq ci mette un secondo a cancellare secondo me ce qualcosa che non va.

hello ! 123EEPROM cancellata

credo di aver dimenticato questo

unsigned int address = 0;
unsigned int nLocazione=64000;

Dovrebbe cancellare una locazione per volta , quindi ci metterà una vita. Prova a cercare una libreria di arduino per cancellare più velocemente (a "blocchi" ?) ciao

Ciao!
Ho provato e adesso ci mette 5 min però riscrivendo il file mi da gli stessi errori sarà quello alla fine altrimenti non arrivo a conclusione della cosa. La prima volta che avevo programmato mi avena dato errore pensavo che il programma ci scrivesse sempre sopra senza cancellare, a sto punto sara il programma compilato male.

Victor795:
credo di aver dimenticato questo

unsigned int address = 0;

unsigned int nLocazione=64000;





Dovrebbe cancellare una locazione per volta , quindi ci metterà una vita.
Prova a cercare una libreria di arduino per cancellare più velocemente (a "blocchi" ?)
ciao