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 ![]()
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 funzionewhile(1); // loop infinitowhile( 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 questounsigned 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