Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 15 sty 2025, o 20:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 30 mar 2013, o 20:40 
Offline
Nowy

Dołączył(a): 25 mar 2013
Posty: 7
Pomógł: 0

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

Składnia: [ Pobierz ] [ Ukryj ]
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.

Składnia: [ Pobierz ] [ Ukryj ]
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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2013, o 11:02 
Offline
Nowy

Dołączył(a): 25 mar 2013
Posty: 7
Pomógł: 0

Śledząc notę, chciałem napisać funkcję na podstawie charakterystyki czasowej podanej dla danego urządzenia. Tym razem udało się otrzymać potwierdzenie otrzymania adresu (ack1 = 0), niestety, podczas wysyłania danych dalej jest ten sam błąd brak ack, prowadzący w konsekwencji do zawieszania się programu.

Oto kod, niestety niezbyt estetyczny, dosyć mocno roboczy i niepodzielony na funkcje, jednak wydaje mi się ze łatwiejszy do testowania:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO