lo_sty
October 23, 2015, 2:09pm
1
Sto provando questo scatch per scrivere e leggere una eeprom 24lc65 ma come risultato ottengo tutti 255 al posto del valore che vorrei scrivere ( mi sto fermando ai primi 100 blocchi per ora )
#include <Wire.h>
void setup() {
Serial.begin ( 9600 ) ;
Wire.begin () ;
int indirizzo = 0 ;
Serial.println ( " INIZIO SCRITTURA " ) ;
delay ( 500 ) ;
for ( int c = 0 ; c <=100 ; c ++ ) {
Wire.beginTransmission ( 0xA0 ) ;
Wire.write ( highByte ( indirizzo )) ;
Wire.write ( lowByte ( indirizzo )) ;
int data = 0 ;
//
Wire.write (byte ( data )) ;
Wire.endTransmission () ;
data++ ;
indirizzo ++ ;
delay (5) ;
}
Serial.println ( " FINE SCRITTURA " ) ;
delay ( 500 ) ;
indirizzo = 0 ;
Serial.println ( " INIZIO LETTURA " ) ;
delay ( 500 ) ;
for ( int d = 0 ; d <= 100 ; d++ ) {
Wire.beginTransmission ( 0x50 ) ;
Wire.write ( highByte ( indirizzo )) ;
Wire.write ( lowByte ( indirizzo )) ;
Wire.requestFrom ( 0x50 , 1 ) ;
while ( Wire.available () ) {
byte c = Wire.read () ;
Serial.println ( c ) ;
indirizzo++;
}
}
Serial.println ( " FINE LETTURA " ) ;
delay ( 2000 ) ;
}
void loop() {
}
Perchè non funziona secondo voi ?
lo_sty
October 23, 2015, 2:26pm
2
Rileggendo ho notato che la variabile c viene ripetuta , anche se non da errore perchè una si trova dentro il for l'ho rinominata . Poi ho notato che nella lettura manca la chiusura della trasmissione di scrittura nella richiesta dell'indirizzo .
Ho riprovato e leggo solo 0 ora
lo_sty
October 23, 2015, 3:49pm
3
Ho risolto sistemando il codice così
#include <Wire.h>
void setup() {
Serial.begin ( 9600 ) ;
Wire.begin () ;
int indirizzo = 0 ;
Serial.println ( " INIZIO SCRITTURA " ) ;
delay ( 500 ) ;
int data = 0;
for ( int c = 0 ; c <= 200 ; c ++ ) {
Wire.beginTransmission ( 0x50 ) ;
Wire.write ( highByte ( indirizzo )) ;
Wire.write ( lowByte ( indirizzo )) ;
Wire.write (data) ;
Wire.endTransmission () ;
Serial.print ( indirizzo ) ;
Serial.print (" : " );
Serial.println (data ) ;
data++ ;
indirizzo ++ ;
delay (5) ;
}
Serial.println ( " FINE SCRITTURA " ) ;
delay ( 500 ) ;
indirizzo = 0 ;
Serial.println ( " INIZIO LETTURA " ) ;
delay ( 500 ) ;
for ( int d = 0 ; d <= 200 ; d++ ) {
Wire.beginTransmission ( 0x50 ) ;
Wire.write ( highByte ( indirizzo )) ;
Wire.write ( lowByte ( indirizzo )) ;
//Wire.endTransmission () ;
Wire.requestFrom ( 0x50 , 1 ) ;
while ( Wire.available () ) {
byte e = Wire.read () ;
Serial.print ( indirizzo ) ;
Serial.print (" : " ) ;
Serial.println ( e ) ;
}
Wire.endTransmission () ;
indirizzo++ ;
}
Serial.println ( " FINE LETTURA " ) ;
delay ( 2000 ) ;
}
void loop() {
}
Solo che in lettura esce che nel blocco 0 mi ritrivo 255 al posto di 0
198 : 198
199 : 199
200 : 200
FINE SCRITTURA
INIZIO LETTURA
0 : 255
1 : 0
2 : 1
3 : 2
4 : 3
5 : 4