Pages: 1 2 [3]   Go Down
Author Topic: Utilizzare una EEPROM 24WC16P con Arduino  (Read 2507 times)
0 Members and 1 Guest are viewing this topic.
Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
E24C1024 Library Benchmark Sketch

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

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

Code:
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
« Last Edit: June 27, 2010, 05:56:24 am by 83darking83 » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20181
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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à!
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20181
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: June 27, 2010, 04:24:29 pm by uwefed » Logged

Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
« Last Edit: June 28, 2010, 04:41:50 am by 83darking83 » Logged

Caserta
Offline Offline
Jr. Member
**
Karma: 0
Posts: 75
arduzzone
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin
ciao
Whole
Logged

Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
E24C1024 Library Benchmark Sketch

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

Writing data:.

oppure completa il tutto:

Code:
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??  smiley-sad
« Last Edit: July 01, 2010, 10:51:25 am by 83darking83 » Logged

Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Capitolo chiuso!  smiley
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20181
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: July 14, 2010, 05:15:16 am by uwefed » Logged

Parma/Salento
Offline Offline
Jr. Member
**
Karma: 0
Posts: 83
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: 1 2 [3]   Go Up
Jump to: