Cześć wszystkim
Obsługuję czujnik temperatury i wilgotności HTU21D, magistrala I2C, procesor XMega 128A3. Do obsługi samego I2C wykorzystuję bibliotekę Atmela udostępnioną w internecie. Transmisja przebiega dobrze, o ile nic nie zakłóci linii SDA/SCL i zasilania czujnika. Zauważyłem jednak, że jak wyjmę przewód którejś z linii, czyli SDA lub SCL to program permanentnie się zawiesza. Próbowałem temu zaradzić software'owo i oto, co wypociłem.
W bibliotece Atmela dodałem linijkę włączającą timeout, co wyczytałem w DS do procesora:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie spełniło to jednak moich oczekiwań, gdyż po wyjęciu SDA lub SCL dalej się zawieszał.
Dodałem więc takie coś w pliku main.c, na przykładzie wysyłki komendy soft-resetu do czujnika:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Po osiągnięciu zera przez licznik timeout'u chcę wymusić stan IDLE na linii I2C.
Teraz, po wyjęciu przewodu SDA program jest wykonywany dalej. Jednak jak wyjmę przewód SCL to dalej jest zawieszony. Nie mam pomysłu jak temu zaradzić, dlatego proszę uprzejmie o wskazówki i pozdrawiam
PS: I2C sprzętowy, na przerwaniach. W załączniku biblioteka Atmela.