Dubbio su I2C

Mar 06, 2011 17 Replies

Ciao,



ho una scheda con un ATmega88 e un potenziometro digitale I2C (AD5161). Uso il CodeVision AVR e il bus I2C funziona perfettamente (si, le resistenze di pull-up ci sono). La frequenza del clock è attorno ai 40 kHz (e non ho capito come cambiarla...)



Sullo stesso bus ho aggiunto un sensore di temperatura TC74, che ha ovviamente un indirizzo I2C differente.



Il pot digitale continua a funzionare, mentre non riesco a leggere correttamente i dati dal TC74. In particolare vedo che dopo i primi 8 bit trasmessi, anziché leggere l'ACK dallo slave vedo uno "spike". E ce ne sono un altro paio negli altri byte scambiati.



Questo il codice:



#include #include



#asm .equ __i2c_port = 0x08 ;PORTC .equ __sda_bit = 4 .equ __scl_bit = 5 #endasm #include



i2c_start(); i2c_write(0x9A); i2c_write(0x00); i2c_start(); i2c_write(0x9B); data = i2c_read(0); i2c_stop();


Non credo proprio che il problema sia l'altro slave I2C. Ho provato ad inserire dei ritardi tra le varie scritture ma il problema persiste. Cambiando indirizzo non mi risponde, quindi non è lì il problema. Con questo codice leggo si qualcosa ma è come se la temperatura andasse a spasso di 7-8 gradi. Ma ovviamente avendo quegli spike al posto dei bit non so cosa diavolo stia leggendo.



Come procedereste per individuare il problema?



Marco


Il 06/03/2011 20.59, Marco Trapanese ha scritto: [...]

riguardo al codice lascio la palla alle persone che ne sanno più di me. Unico consiglio, banale, che mi viene in mente è quello di togliere il potenziometro digitale e vedere di riuscire a leggere il sensore di temperatura.

Ciao Ste

Ogni problema complicato ha una soluzione semplice...per lo piu` sbagliata [cit. Franco, i.h.e. 20.01.2007]

"Marco Trapanese" ha scritto nel messaggio news:il0p2q$f9p$ snipped-for-privacy@tdi.cu.mi.it...

si,prova solo ilTC74,magari avvicinalo al master,se è distante decine di cm o metri Se vedi uno spike e non un livello alto viene da pensare che ilTC74 cerchi di dare un ack ma per un attimo il bus viene rilasciato e vada alto prova anche a chiamare l'indirizzo del TC74 senza che questo sia collegato e vedi se hai un nack (cosa che dovresti avere perchè nessuno tirerà giù il bus) o qualche fantasma strano Il clock come squadratura e ampiezza cambia se il TC74 è presente o meno?

"Marco Trapanese" ha scritto nel messaggio news:il0p2q$f9p$ snipped-for-privacy@tdi.cu.mi.it...

Il 07/03/2011 07:23, PeSte ha scritto:

Sgrunt non lo volevo togliere visto che è un MSOP-10... Però ora con la stazione ad aria calda è un giochetto! ;)

Idem, le letture continuano a oscillare di diversi gradi sopra e sotto il "target".

Nell'altro post inserisco alcune immagini dei segnali.

Marco

Il 07/03/2011 10:50, blisca ha scritto:

E' a meno di 50 mm dal micro, sulla stessa scheda. E il clock è lentissimo, una 40ina di kHz.

Questa l'immagine dei primi due byte:

formatting link

Quindi,

START

10011010 -> address + write

a cui seguirebbe l'ACK che non ho capito se è lo spike o l'impulso stretto dopo.

Segue il secondo byte tutto zero, e idem ancora lo spike.

Poi di nuovo,

START

10011011 -> address + read

e seguono i dati letti.

Ho anche aggiunto dei ritardi ma non cambia nulla. Ora mi viene un dubbio: guardando il clock non mi sembra perfettamente regolare. Non vorrei che quel birbante di Pavel non abbia fatto il CodeVision abbastanza furbo da utilizzare l'I2C hardware nel caso il micro ne sia dotato. Penso invece che faccia del bit-banging.

Teoricamente non dovrebbero esserci problemi visto che la comunicazione è sincrona. Ma dalle vostre esperienze può dare problemi con slave rognosi?

Eppure il registro di configurazione (64) lo leggo perfettamente anche

100 volte di seguito, quindi escluderei un problema di comunicazione. Mah.

Con le immagini prese dal PicoScope non si apprezza. Ma con l'oscilloscopio serio non ho notato differenze: i fronti sono sempre belli squadrati.

Marco

Il 07/03/2011 17.27, Marco Trapanese ha scritto: [...]

non ho esperienza diretta di debug di una I2C, ma è corretto avere i fronti così stondati?

I pullup sono di valore giusto? Troppo alti? Saldati male?

Ste

Ogni problema complicato ha una soluzione semplice...per lo piu` sbagliata [cit. Franco, i.h.e. 20.01.2007]

Il 07/03/2011 18:03, PeSte ha scritto:

Come dicevo è un artefatto del PicoScope. Con il tektronix sono belli squadrati.

4k7 saldati bene.

Marco

Il 07/03/2011 18.06, Marco Trapanese ha scritto:

ti chiedo scusa, non ho letto bene il tuo post

[...]

misurati col tester? scusa la pignoleria...finita questa domanda non ho più idee :-D

Ste

Ogni problema complicato ha una soluzione semplice...per lo piu` sbagliata [cit. Franco, i.h.e. 20.01.2007]

"Marco Trapanese" ha scritto nel messaggio news:il3125$977$ snipped-for-privacy@tdi.cu.mi.it...

cerchi

non riesci a ripostarla con aggiunta la traccia del clock i2C?

Il 07/03/2011 18:20, PeSte ha scritto:

4195 ohm e 4187 ohm, misurati sulla scheda.

Marco

Il 07/03/2011 18:24, blisca ha scritto:

Non con il picoscope: è singola traccia. Ora provo con il tektronix se mi riesce l'acrobazia e fotografo il display.

Ciao Marco

Il 07/03/2011 18.25, Marco Trapanese ha scritto:

direi che ci sono!

Ste

Ogni problema complicato ha una soluzione semplice...per lo piu` sbagliata [cit. Franco, i.h.e. 20.01.2007]

"Marco Trapanese" ha scritto nel messaggio news:il0p2q$f9p$ snipped-for-privacy@tdi.cu.mi.it...

Come è marchiato il TC74 ? All'indrizzo 9A rispondono ovviamente solo i dispositivi marchiati TC74A5.

Roberto P.

Il 07/03/2011 19:01, Roberto P. ha scritto:

E' lui. Altrimenti non mi risponderebbe nemmeno ;)

Marco

Il 07/03/2011 18.25, Marco Trapanese ha scritto:

Dato che usi l'Avr e la relativa periferica hardware, mi sembra che non sia affidabile il timing che rilevi. Oltre ad essere stondate, sono anche molto irregolari e questo, con una periferica hardware "non puo'" succedere, a meno che, a mio parere, non sia un problema di campionamento. Che base dei tempi usi? Per lo spike, come tu lo identifichi, sarei invece dell'idea di identificarlo con l'ack/nack (il livello 1 non e' un nack???); solo che il picoscope non lo campiona nella maniera adeguata. ciao Angelo

Il 07/03/2011 22:05, dalmontealpiano ha scritto:

Come dicevo, non so se il CAVR sfrutta l'hw oppure fa del bit-banging.

Ma dovrebbe durare un bit che io sappia.

Negativo, lo vedo così anche con il tektronix.

Marco

Il 07/03/2011 18:35, PeSte ha scritto:

Epilogo. La comunicazione non è la responsabile, nel senso che le letture sono corrette. Mi sono messo di santa pazienza a leggerle con l'oscilloscopio e in effetti è proprio il sensore che scrive quei dati.

Mettendo un condensatore da 1 uF (in parallelo al solito 100 nF già presente) la situazione migliora un filo nel senso che ora le letture sembrano distribuite come una normale con media sul valore "corretto" e tipicamente sbandano di un grado sopra e uno sotto. A volte però ci le code di mettono lo zampino e ho letture fuori di diversi gradi.

Nulla che un filtro mediano non possa migliorare, però non mi sarei certo aspettato un comportamento del genere! Vabbè che costa poco però...

L'alimentazione è stabile, ho provato anche con un alimentatore di lusso e non cambia nulla. Sembra proprio una patacca il sensore.

Marco

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required