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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 16 lip 2025, o 09:29


    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 ] [ Zaznacz wszystko ]
    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ł: Google [Bot] i 3 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