logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] [ATtiny24][C] - odbiór z RFM22B daje te same wartości

Futrzaczek 05 Lut 2021 19:01 480 3
  • #1 19236106
    Futrzaczek
    VIP Zasłużony dla elektroda
    Witajcie,
    mam taki problem, który zapewne jest jakąś głupotą, na którą nie potrafię wpaść.

    Mam zestawiony układ (a właściwie dwa - jeden nadawczy i jeden odbiorczy) z ATtiny24 i RFM22-868S2. W trybie nadajnika udało mi się coś już z niego wydusić (pobiera spory prąd, bo ma ustawioną maksymalną moc wyjściową), o tyle z odbiornikiem "zawisłem".
    W trybie FIFO, odczyt z rejestru 0x7F (służącego do odbioru z FIFO) daje stale te same wartości. Najczęściej 0x40 (sprawdzone oscyloskopem na linii SDO), ale czasem inne, na przykład 0x42 po ponownym włączeniu zasilania. I tak można sobie z niego odczytywać ile się chce, w nieskończność wypluwa to samo. Nawet dodanie komendy Clear FIFO (0x03 i potem 0x00 wpisane do rejestru 0x08) niczego nie zmienia. Próbowałem odczytu w trybie normalnym (po jednym bajcie), próbowałem w trybie burst - to samo. Nawet wtedy, kiedy nadajnik jest wyłączony.

    W ogóle, coś jest nie tak z jego trybem odczytu, bo nie wykrywa preambuły ani napełnienia bufora (rejestry 0x03 i 0x04), za to obecność sygnału radiowego wykrywa (zawartość rejestru 0x26 silnie rośnie po włączeniu nadajnika).

    Komunikacja z nim raczej jest poprawna, bo wszystkie inne rejestry mogę zapisywać - odczytane wartości pokrywają się z wpisanymi.
    Wejścia TX_ANT i RX_ANT modułu RFM22 mam na sztywno spolaryzowane - inaczej w nadajniku, inaczej w odbiorniku.

    Inicjalizację i odczyt wzorowałem na dokumentacji HopeRF:
    http://www.hoperf.com/data/upload/back/20181204/RFDK_RFM22B_V2.1.zip
    która jest prostsza (przez co wydaje mi się pewniejsza) niż wynalazki z internetu, np.
    https://github.com/sparkfun/RF_Transceiver_Breakout-RFM22B/tree/master/Firmware
    chociaż tego próbowałem najpierw.

    Generalnie, zależy mi na tym, aby udało się przesłać jakiekolwiek bajty z nadajnika do odbiornika. Szybkość, CRC itd. nie mają znaczenia - z tym sobie później poradzę. Na razie chcę jakkolwiek się porozumieć, bo bez tego nie ruszę dalej.

    Obstawiam, że to jest jakaś głupotka, w stylu niewłaściwa kolejność komend, bo same zawartości rejestrów mam już przepatrzone na wylot. Pamiętam, jak uruchamiałem RFM12B i męczyłem się z nim długimi godzinami. Powodem była właśnie nieodpowiednia kolejność komend w inicjalizacji.

    Link do używanej przeze mnie noty katalogowej:
    https://www.sparkfun.com/datasheets/Wireless/General/RFM22B.pdf

    Program odbiornika:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Program nadajnika: (chwilowo nieistotny, ale może tam też siedzi jakiś babol)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 19237331
    StaryVirus_e_Wiarus
    Poziom 21  
    Cześć
    Odbiornik nic innego nie robi, tylko się inicjalizuje.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Powinno chyba być:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #3 19237821
    Futrzaczek
    VIP Zasłużony dla elektroda
    To nie to, nawet cykliczny odbiór daje stale te same wartości:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodane:
    Wejście tryb odbioru jakieś jest, bo zmienia się stan wyjścia GPIO1, które podłączyłem do RX_ANT, a GPIO0 do TX_ANT. Nadajnik ruszył ładnie, działają też przerwania po nadaniu pakietu.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ale wykryłem problem: moduł odbiorczy nie wystawia przerwania na linię nIRQ, niezależnie od konfiguracji. Nawet coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    stale daje stan wysoki na tym wyjściu, mimo, że w rejestrach przerwań siedzą jakieś wartości (sprawdzone oscyloskopem).
    Sam moduł jest sprawny - po wgraniu programu nadajnika, stan wyjścia nIRQ zmienia się.
    Rejestr liczby odebranych bajtów (0x26) nadal jest pełny.

    Kopię dalej, będę wdzięczny za sugestie.
  • #4 19238780
    Futrzaczek
    VIP Zasłużony dla elektroda
    To nie to, nawet cykliczny odbiór daje stale te same wartości:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Dodane:
    Wejście tryb odbioru jakieś jest, bo zmienia się stan wyjścia GPIO1, które podłączyłem do RX_ANT, a GPIO0 do TX_ANT. Nadajnik ruszył ładnie, działają też przerwania po nadaniu pakietu.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Ale wykryłem problem: moduł odbiorczy nie wystawia przerwania na linię nIRQ, niezależnie od konfiguracji. Nawet coś takiego:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    stale daje stan wysoki na tym wyjściu, mimo, że w rejestrach przerwań siedzą jakieś wartości (sprawdzone oscyloskopem).
    Sam moduł jest sprawny - po wgraniu programu nadajnika, stan wyjścia nIRQ zmienia się.
    Rejestr liczby odebranych bajtów (0x26) nadal jest pełny.

    Kopię dalej, będę wdzięczny za sugestie.

    Dodano po 10 [godziny] 28 [minuty]:

    Komunikacja działa.
    Główny problem: brak uwzględnienia poprawek widocznych w erratach na końcu tej noty katalogowej: https://www.sparkfun.com/datasheets/Wireless/General/RFM22.PDF
    W żadnym z internetowych przykładów, jakie znalazłem, nikt nie zmieniał nagle częstotliwości na mniejszą ;)
REKLAMA