Witam.
Od jakiegoś czasu próbuję zastosować ten przetwornik, niestety bez rezultatu. Po wysyłaniu bitów odpowiada on bitem ACK na adres oraz na kolejne bajty, niestety podczas odczytu widać, że nie wszystkie bity są poprawnie zapisane. Przykładem jest komenda ustawienia Configuration Bits (strona 53 w datasheet). Wysłanie bajtu 10000000 sprawi, że odczytany bit będzie miał wartość 11000000, co daje poprawy wynik. Również dla wartości 10000001 otrzymamy bit 11000001, również dobrą wartość. Niestety, dla wysłania na przykład wartości 10000011, otrzymamy zły wynik (11001011). Układ lutowany był dwukrotnie, więc nie wydaje mi się żeby była to wina złego podłączenia. Piny SCL i SDA podpinam na PC0 i PC1 ( na zestawie uruchomieniowym ATB) i używam programowej wersji I2C z książki Pana Mirka. Nie wiem też czy możliwe jest, że jakiś wpływ na to ma podłączony na tych portach standardowo RTC i EEPROM. Dodam także, że zapisywanie za pomocą TWI zmienia wartość tak samo jak zapis za pomocą programowej implementacji, jednak odczyt przez TWI sprawia, że procesor się zawiesza ( czyli tak, jakby układ nie był nawet podłączony). Układ taktowany jest 1 MHz. Proszę bardzo o pomoc i porady, ewentualnie, jeśli ktoś używał tego przetwornika o działający kod lub porady. Poniżej przedstawiam swój kod:
Kod:
i2c_init();
lcd_init();
sei();
uint8_t tmp=0, test=0, b1=0, b2=0;
I2C_START();
tmp = i2cPutbyte(11000000);
if (tmp==0) test++;
tmp = i2cPutbyte(10000111);
if (tmp==0) test++;
I2C_STOP();
I2C_START();
i2cPutbyte(11000000);
I2C_REP_START();
i2cPutbyte(11000001);
b1=i2cGetbyte(1);
I2C_STOP();
lcd_int(b1);
Z góry dziękuję za pomoc.
Pozdrawiam,
Witnes