Witam
Mam bardzo dziwny problem z komunikacją z układem DS1307. Zacznę od początku. Mam zestaw ewaluacyjny z Atmega8 i układem DS1307, jakiś czas temu napisałem sobie pogram do komunikacji poprzez sprzętowy TWI. Wszystko działało aż miło, teraz chciałem znowu skomunikować się z DS'em, ale okazało się, że nie mam żadnej komunikacji. Sprawdziłem 10 razy wszystkie połączenia i jest OK (z resztą tu się nie da pomylić bo to płytka ewaluacyjna), w akcie desperacji przelutowałem DS'a. Bezskutecznie. Jedyne co zmieniłem to procesor z Atmega8 na Atmega8L, ale w nocie katalogowej nie znalazłem nic co by wskazywało na jakieś problemy z TWI. Postanowiłem iść dalej i sprawdzić która instrukcja zwraca błąd. Napisałem prosty programik:
Okazało się, że już pierwsza instrukcja I2Cstart zwraca błąd. Gdzie szukać usterki ?
Mam bardzo dziwny problem z komunikacją z układem DS1307. Zacznę od początku. Mam zestaw ewaluacyjny z Atmega8 i układem DS1307, jakiś czas temu napisałem sobie pogram do komunikacji poprzez sprzętowy TWI. Wszystko działało aż miło, teraz chciałem znowu skomunikować się z DS'em, ale okazało się, że nie mam żadnej komunikacji. Sprawdziłem 10 razy wszystkie połączenia i jest OK (z resztą tu się nie da pomylić bo to płytka ewaluacyjna), w akcie desperacji przelutowałem DS'a. Bezskutecznie. Jedyne co zmieniłem to procesor z Atmega8 na Atmega8L, ale w nocie katalogowej nie znalazłem nic co by wskazywało na jakieś problemy z TWI. Postanowiłem iść dalej i sprawdzić która instrukcja zwraca błąd. Napisałem prosty programik:
$regfile = "m8def.dat" 'Atmega8
$crystal = 8000000 'kwarc 8MHz
$lib "i2c_twi.lbx" 'sprzetowy I2C
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000 'predkosc 100kHz
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.0 , Rs = Portd.7
Cursor Off
Const Adres_w = &B11010000
Const Adres_r = &B11010001
Cls
I2cstart
Gosub Blad
I2cwbyte Adres_w
I2cwbyte &H0 'adres rejestru
I2cwbyte &H0 ' zeruje bit CH
I2cstop
I2cstart
I2cwbyte Adres_w
I2cwbyte &H07 'rejestr kontrolny
I2cwbyte &B00010000 'ustawiam 1Hz na wyjsciu DS1307
I2cstop
End
Blad:
If Err = 1 Then
Lcd "Blad"
Else
Lcd "OK"
End If
Return
Okazało się, że już pierwsza instrukcja I2Cstart zwraca błąd. Gdzie szukać usterki ?
