Go Down

Topic: Utilizzare una EEPROM 24WC16P con Arduino (Read 3632 times) previous topic - next topic

83darking83

#30
Jun 27, 2010, 12:21 pm Last Edit: Jun 27, 2010, 12:56 pm by 83darking83 Reason: 1
Ciao uwefed,
ho provato con 2047 e mi ha dato 2047 errori!
La cosa strana è che una volta fatto l'upload del codice, cliccando su SerialMonitor una volta mi da:

Code: [Select]
E24C1024 Library Benchmark Sketch

--------------------------------
Write By Byte Test:

Writing data:.

bloccandosi così! Chiudendo e riaprendo lo stesso SerialMonitor, parte dando questo otput:

Code: [Select]
E24C1024 Library Benchmark Sketch

--------------------------------
Write By Byte Test:

Writing data:.DONE
Total Time (seconds): 0
Write operations per second: 4294967295
--------------------------------

--------------------------------
Read By Byte Test:

Reading data:.
Address: 1 Should be: 1 Read val: 0

Address: 2 Should be: 2 Read val: 0

Address: 3 Should be: 3 Read val: 0

Address: 4 Should be: 4 Read val: 0

Address: 5 Should be: 5 Read val: 0

Address: 6 Should be: 6 Read val: 0

Address: 7 Should be: 7 Read val: 0

Address: 8 Should be: 8 Read val: 0

Address: 9 Should be: 9 Read val: 0

Address: 10 Should be: 10 Read val: 0

Address: 11 Should be: 11 Read val: 0

Address: 12 Should be: 12 Read val: 0

Address: 13 Should be: 13 Read val: 0

Address: 14 Should be: 14 Read val: 0

Address: 15 Should be: 15 Read val: 0

Address: 16 Should be: 16 Read val: 0

Address: 17 Should be: 17 Read val: 0

Address: 18 Should be: 18 Read val: 0

Address: 19 Should be: 19 Read val: 0
DONE

Total Test Time (secs): 0
Read operations per second: 4294967295
Total errors: 19
--------------------------------


[test eseguito su MAX_ADDRESS=20]

La cosa strana è che la maggior parte delle volte si blocca su "Writing data:.", mentre riesce a completare la procedura solo una volta ogni 2/3 circa.

EDIT: Aumentando MAX_ADDRESS a 50, si blocca anche su valori casuali tipo 18 o 24...  :o

EDIT2: Aprendo il SerialMonitor, subito dopo aver caricato il codice, alcune volte funziona, ritornando 0 errori in lettura e 0 errori in scrittura

uwefed

Ho un sospetto che c'é un errore ci collegamento con l'arduino.

Quello che scrivi nel Replay 3
"Ho connesso la EEPROM secondo il seguente schema:

Pin 1 -> GND  (Arduino)
Pin 2 -> GND  (Arduino)
Pin 3 -> GND  (Arduino)
Pin 4 -> GND  (Arduino)
Pin 8 -> 5 V    (Arduino)
Pin 7 -> GND  (Arduino)
Pin 6 -> Analog Pin 5  (Arduino)
Pin 5 -> Analog Pin 4  (Arduino)"


È giusto.
Domanda cretina: hai contato bene i piedini, nel senso giusto?

Ciao Uwe


83darking83

Ho controllato e ricontrollato, addirittura seguendo le "colonne" della breadboard con un dito, da contatto a contatto!



Comunque su una ventina di prove consecutive con SerialMonitor, in un paio ha completato i cicli di lettura e scrittura apparentemente senza errori, ma per pura (e apparente) casualità!

uwefed

#33
Jun 27, 2010, 11:14 pm Last Edit: Jun 27, 2010, 11:24 pm by uwefed Reason: 1
ancora io ripensando:
Il fatto che ognitanto funzione e altre no é strano.
Puoi fare una foto piú grande che comprende tutto L'arduino per vedere meglio i collegamenti?

Come collegamenti da quel poco che vedo non vedo errori.

Vedo che usi un Arduino Mega. Io per le prove ho usato un 2009. Non dovrebbe essere quello il problema.

Ciao Uwe

83darking83

#34
Jun 27, 2010, 11:57 pm Last Edit: Jun 28, 2010, 11:41 am by 83darking83 Reason: 1
Ecco la stessa foto con i dettagli (si ingrandisce...):



(Al momento non posso farne delle altre...)

la EEPROM è quindi così collegata:

Pin 1 -> GND  (Arduino)
Pin 2 -> GND  (Arduino)
Pin 3 -> GND  (Arduino)
Pin 4 -> GND  (Arduino)
Pin 8 -> 5 V    (Arduino)
Pin 7 -> GND  (Arduino)
Pin 6 -> Digital Pin SDC 21  (Arduino)
Pin 5 -> Digital Pin SDA 20  (Arduino)

whole

Ciao Ragazzi
forse non c'entra niente o forse si, ad ogni modo un comportamento analogo a quello citato nei vari interventi nel quale si diceva una volta legge e una volta no..cioè random è capitato anche a me con alcuni dispositivi sull'i2c..nel mio caso i2ckeypad.
Ho risolto con le pullup di 4,7k con altre resistenze il bus ogni tanto impazziva.
Ok ho detto la mia..trucidatemi :D
ciao
Whole

83darking83

#36
Jul 01, 2010, 05:51 pm Last Edit: Jul 01, 2010, 05:51 pm by 83darking83 Reason: 1
ma quale "trucidatemi"?! Grazie mille per il consiglio!  ;D

Ho provato anche con le resistenze di pull-up da 4.7 KOHM (in passato avevo già provato con delle 10K), ma purtroppo non va:
Una volta caricato il codice (con max_address = 50)
si blocca su:

Code: [Select]
E24C1024 Library Benchmark Sketch

--------------------------------
Write By Byte Test:

Writing data:.


oppure completa il tutto:

Code: [Select]
E24C1024 Library Benchmark Sketch

--------------------------------
Write By Byte Test:

Writing data:.DONE
Total Time (seconds): 0
Write operations per second: 4294967295
--------------------------------

--------------------------------
Read By Byte Test:

Reading data:.
Address: 1 Should be: 1 Read val: 0

Address: 2 Should be: 2 Read val: 0

Address: 3 Should be: 3 Read val: 0

Address: 4 Should be: 4 Read val: 0

Address: 5 Should be: 5 Read val: 0

Address: 6 Should be: 6 Read val: 0

Address: 7 Should be: 7 Read val: 0

Address: 8 Should be: 8 Read val: 0

Address: 9 Should be: 9 Read val: 0

Address: 10 Should be: 10 Read val: 0

Address: 11 Should be: 11 Read val: 0

Address: 12 Should be: 12 Read val: 0

Address: 13 Should be: 13 Read val: 0

Address: 14 Should be: 14 Read val: 0

Address: 16 Should be: 1 Read val: 0

Address: 17 Should be: 2 Read val: 0

Address: 18 Should be: 3 Read val: 0

Address: 19 Should be: 4 Read val: 0

Address: 20 Should be: 5 Read val: 0

Address: 21 Should be: 6 Read val: 0

Address: 22 Should be: 7 Read val: 0

Address: 23 Should be: 8 Read val: 0

Address: 24 Should be: 9 Read val: 0

Address: 25 Should be: 10 Read val: 0

Address: 26 Should be: 11 Read val: 0

Address: 27 Should be: 12 Read val: 0

Address: 28 Should be: 13 Read val: 0

Address: 29 Should be: 14 Read val: 0

Address: 31 Should be: 1 Read val: 0

Address: 32 Should be: 2 Read val: 0

Address: 33 Should be: 3 Read val: 0

Address: 34 Should be: 4 Read val: 0

Address: 35 Should be: 5 Read val: 0

Address: 36 Should be: 6 Read val: 0

Address: 37 Should be: 7 Read val: 0

Address: 38 Should be: 8 Read val: 0

Address: 39 Should be: 9 Read val: 0

Address: 40 Should be: 10 Read val: 0

Address: 41 Should be: 11 Read val: 0

Address: 42 Should be: 12 Read val: 0

Address: 43 Should be: 13 Read val: 0

Address: 44 Should be: 14 Read val: 0

Address: 46 Should be: 1 Read val: 0

Address: 47 Should be: 2 Read val: 0

Address: 48 Should be: 3 Read val: 0

Address: 49 Should be: 4 Read val: 0
DONE

Total Test Time (secs): 1
Read operations per second: 50
Total errors: 46
--------------------------------


restituendo 46 errori su 50, quando poi guardando l'output dovrebbero essere 50/50. Come mai??  :(

83darking83

Ho acquistato una 24C512 e funziona perfettamente.....

Capitolo chiuso!  :)

uwefed

#38
Jul 14, 2010, 12:13 pm Last Edit: Jul 14, 2010, 12:15 pm by uwefed Reason: 1
ciao 83darking83

Penso di aver capito il "trucco" (purtroppo solo adesso).

Il 24WC16 usa i pin di indirizzo A0, A1 e A2 non per avere 8 numeri diversi per identificare il dispositivo sul bus I2C, ma per indirizzare i blocchi di memoria. Per questo se vuoi usare tutti i 2048 Byte di memoria devi cambiare i livelli logici sui pin A0, A1 e A2. La libreria Wire non lo prevede ma indirizza la memoria attraverso dei comandi inviati sul bus.

Se vuoi fare una prova per verificare la mia teoria, fai un test eeprom della memoria da 0 a 255 dovrebbe non darti errori.

IL 25c512 ha solo 2 Bit per il numero identificativo che sono sui pin A0 e A1 (non chiedetemi il perché hanno risparmiato.), ma li usa come normalmente vengono usati sui dipositivi I2C.

Ecco la spiegazione: Il 24WC16 si comporta diversamente come altri EEprom e dispositivi I2C.

Ciao Uwe

83darking83

Ciao uwefed,
purtroppo sembra che la tua teoria non sia esatta:
ho provato da 0 a 50 e da 0 a 150: con la 24WC16P e con la SLA24C14D danno il 100% di errori, mentre quando sostituisco (lasciando il circuito inalterato) una delle due con una EEPROM da 512Kb, il test termina con 0 errori!

Da questo ne deduco le due possibili ipotesi:
- Entrambe le due EEPROM (da 14 e 16 Kb) sono guaste
- Per EEPROM più piccole di 256 Kb tutte le librerie/esempi che si trovano in rete, per Arduino, sono errati

Go Up