Witam,
Mam problem z obsługą tego czujnika. Udało mi się uzyskać pomiar używając wbudowanego TWI, jednak chciałbym obsługiwać go w programowej implementacji. Używam ATB rev1.03 oraz korzystam z książki Pana Mirosława, tam też znajduje się programowa implementacja I2C ( działa RTC i EEPROM). Funkcja wysyłająca bit nie zwraca ack, śledząc notę wydaje mi się że wszystkie stany HI i LO w tej implementacji są dobre, jednak coś nie działa. Poniżej przedstawiam kod:
Działająca obługa TWI
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Implementacja programowa, w której zapisuje adres 0x80 do bitu rejestru, mające na celu sprawdzenie komunikacji. Niestety, adres w rejestrze nawet po wywołaniu funkcji nadal wskazuje 0x40. Oznacza to, że któraś z funkcji ( lub wszystkie) start, putbyte lub stop działa nieprawidłowo. Wydaje mi się, że problem polega na złym wysyłaniu odpowiednich stanów wysokich i niskich, jednak nie mam pojęcia w którym miejscu może się on różnić od pozostałych, działających urządzeń. Nie wiem także czy możliwe jest, że gdzieś występuje za krótki/długi delay. Próbowałem także zastosować pętlę while, która wykonywałaby data=i2cPutbyte(TP_ADR) do czasu aż zgłosi ack, jednak powoduje to zawieszenie się procesora, więc prawdopodobnie już w tym miejscu kodu coś jest źle.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Czy ktoś miał kiedykolwiek podobny problem, ewentualnie wie jak sobie poradzić w tym przypadku? Z góry dziękuję za pomoc.
Pozdrawiam,
Witnes