Witam, mam sterownik który co kilka minut zapisuje w pamięci AT24c1024 jeden z 4 parametrów, są to 3 wartości typu Byte oraz jedna typu Word. Niestety raz na 1-2 dni występuje problem z zapisem, "zacina" się komunikacja i sterownik najczęściej zostaje zresetowany przez watchdog'a, jeśli wyłączę watchdoga sterownik przestaje reagować. Na magistrali jest jeszcze PCF8583 z którego co 1s odczytuję dane, oraz 3xADS1110 które odczytuję po kolei co 5s. Wszystko robię w pętli głównej, w przerwaniu ustawiam tylko znaczniki.
Korzystam ze sprzętowego TWI, rezystory podciągające mają po 2k2.
Konfiguracja TWI:
W ten sposób wychwycam moment, gdzie występuje błąd.
W momencie wystąpienia błędu, terminal zgłasza:
lub
Rejestr TWSR powinien mieć wartość 28 a ma 38, czyli brak potwierdzenia.
W jaki sposób, po wykryciu tego błędu, mogę przywrócić poprawny stan magistrali TWI, bez resetu sterownika?
Korzystam ze sprzętowego TWI, rezystory podciągające mają po 2k2.
Konfiguracja TWI:
Kod: text
W ten sposób wychwycam moment, gdzie występuje błąd.
Kod: text
W momencie wystąpienia błędu, terminal zgłasza:
i2cwbyte adresl TWSR=38
i2cwbyte T1_eeprom TWSR=F8
8:15:30:Bład zapisu historii T1lub
i2cwbyte Odczyt_sg_l TWSR=38
12:3:40:Bład zapisu historii Sg_l Rejestr TWSR powinien mieć wartość 28 a ma 38, czyli brak potwierdzenia.
W jaki sposób, po wykryciu tego błędu, mogę przywrócić poprawny stan magistrali TWI, bez resetu sterownika?