Witam,
czy ma ktoś z Was doświadczenie w obsłudze układów HM-R i HM-T (433MHz) od HopeRF? Próbuję je zmusić do gadania, ale brak dokumentacji u producenta sprawy nie ułatwia...
W swojej aplikacji wykorzystałem przykład z "Pasji programowania" Mirosława Kardasia (rozdział 2.) jako bazę.
Wykorzystuję 2 płytki ZL8AVR z mikrokontrolerami ATmega128.
Jestem na etapie, w którym transmisja dwóch bajtów (sekwencja startowa i bit znaku) przebiega prawie całkowicie pomyślnie. Prawie, ponieważ pierwszy zarejestrowany bit jest zerem, podczas gdy powinien być jedynką. Od dłuższego czasu próbuję zlokalizować przyczynę tego stanu rzeczy.
Do nadawania wykorzystuję kodowanie Manchester, odbiór realizowany za pomocą przerwań i wyznaczania czasu trwania impulsów. Połówka bitu trwa 104us.
Na początku wysyłane są 64 jedynki dla celów fazowania. Następnie przerwa o długości całego bitu i dopiero potem dane właściwe.
Próbowałem różne warianty jeżeli chodzi o stan nóżki w czasie przerwy po fazowaniu, o długości czasów trwania przerw i bitów itp. i lepszej konfiguracji niż ta co teraz nie trafiłem.
Najpewniej problem jest w samym programie (źródła na końcu posta), ponieważ gdy łączę piny mikrokontrolerów przewodem pomijając moduły transmisji bezprzewodowej rezultat transmisji jest taki sam. Na razie jednak kilka godzin bezskutecznie błądzę w kodzie. Zapewne przez niedostateczną wiedzę i umiejętności z tematu, za jaki się zabrałem; również pierwszy raz korzystam na poważnie z języka C więc kod mógłby być zdecydowanie wyższej jakości, ale na razie skupiam się na samym problemie.
Też na inne dziwne zjawisko trafiłem przy okazji: gdy trzymam przycisk nadawania wciśnięty (powtarzanie transmisji co 100 milisekund), czasem co kilkanaście/kilkadziesiąt ramek odbiornik przestaje funkcjonować prawidłowo (tak, jak bym chciał); program wtedy w ogóle nie wchodzi w obsługę przerwania i dopiero po kilkunastu/kilkudziesięciu ramkach powraca do normalnej pracy (chyba, że wcześniej zwolnię klawisz, wtedy od razu się poprawia). Ten problem jest raczej związany z modułem samym w sobie, gdyż nie zdarzyło mi się tak przy połączeniu mikrokontrolerów samym przewodem.
Jeżeli jest ktoś z Was w stanie pomóc mi zlokalizować przyczynę problemu uprzejmie proszę o wskazówki.
Pozdrawiam serdecznie.
----------------
Kod źródłowy programu obsługującego nadawanie:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Kod źródłowy programu obsługującego odbiór (diody użyte dla debugowania, brak wcięć celowo):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.