Hej,
Próbuję uruchomić transmisję danych za pomocą modułów RFM12B (wersja SMD).
Jest to moje pierwsze spotkanie z tymi modułami i staram się wykonywać wszystkie polecenia zgodnie z opisem Pana Mirka z zielonej książki. Na razie jestem na etapie trybu wykorzystującego funkcje blokujące.
Przedstawię najważniejsze fragmenty programu:
Inicjalizacja nadajnika (ATmega8, 1 MHz):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nadawanie:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Inicjalizacja odbiornika (ATmega32, 16 MHz):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Odbiór danych:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Niestety nie odbieram żadnych danych. Za pomocą oscyloskopu, załączając diodę w wybranych momentach programu doszedłem do tego, że procedura odbioru danych zatrzymuje się przy pierwszym wywołaniu funkcji rf12_ready(); wewnątrz funkcji rf12_rxdata.
Całość mam złożoną na płytce stykowej. Połączenia sprawdzałem pięć razy i myślę, że wszystko jest w porządku.
Przykładając sondę oscyloskopu do anteny (kawałka kabelka) nadajnika wykrywam nośną, a więc po stronie nadajnika raczej jest wszystko w porządku.
Czy ktoś mógłby wskazać miejsce, w którym popełniłem błąd?
edit:
Spróbowałem nadać coś z ATmegi32, która jak wyżej opisałem ma działać jako odbiornik. Dzieje się to samo - program zatrzymuje się na funkcji rf12_ready(). Nadawanie wykonałem tak samo jak na ATmega8. Jedyną różnicą jest zegar - m8 ma 1MHz, a m32 pracuje na 16 MHz. Spróbuję, czy coś się zmieni jak zmniejszę trochę częstotliwość.
edit2:
Jestem krok dalej. Funkcja rf12_rxdata wykonuje się do końca, ale za każdym razem zwraca 0, czyli nie zgadza się CRC.
edit3:
Niestety nadal nie udało mi się zdiagnozować przyczyny mojego problemu. Próbowałem nadawać dane w jedną i w drugą stronę - bez sukcesu. Czy nikt nie jest w stanie chociaż zasugerować, gdzie mogę robić błąd?