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