Go Down

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

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