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

Jak rozwiązać problem przerwania IRQ w module radiowym nRF24L01+?

mateuszpozn 18 Sty 2020 17:11 582 2
  • #1 18411306
    mateuszpozn
    Poziom 8  
    Cześć,
    Mam zapytanie dotyczące przerwania IRQ w module radiowym nRF24L01+. Moduł pracuje jako nadajnik. Wykorzystuję w nim funkcję potwierdzenia odbioru. Pomyślne odebranie danych przez odbiornik powinno skutkować wystawieniem w nadajniku stanu niskiego na IRQ. Ten sygnał chcę podać na wejście przerwania mikrokontrolera ATmega32A. Niestety, nie zawsze tak się dzieje, tzn. zwykle chwilę po nadaniu pakietu IRQ przechodzi w stan niski na ok. 19 ms i powraca do stanu wysokiego, lecz zdarza się, że IRQ pozostaje w stanie niskim, aż do przeprowadzenia ponownej transmisji, co widać na poniższym zrzucie z analizatora stanów logicznych (kanał 0 - pin IRQ). Pakiety są jednak zawsze odbierane poprawnie.
    Jak rozwiązać problem przerwania IRQ w module radiowym nRF24L01+?

    Zauważyłem, że problem występuje rzadziej, gdy pakiety nadawane są w większych odstępach czasu tzn. > 1s. Co może być przyczyną braku powrotu IRQ do stanu wysokiego? Po każdej transmisji następuje reset(), który ustawia rejestr STATUS na wartość 0x70.
    Jak rozwiązać problem przerwania IRQ w module radiowym nRF24L01+?
    Funkcję odpowiedzialną za przeprowadzenie transmisji oraz reset umieszczam poniżej.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


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



    Po stronie odbiornika wykorzystuję IRQ jako przerwanie dla mikrokontrolera, iż są odebrane nowe dane, które musi przesłać po USART do PC. Procedura obsługi przerwania to transmisja po USART odebranego właśnie pakietu danych. Tam działa to bez problemu.

    Dodaje jeszcze zrzut z sygnałem na 2. kanale informującym o fakcie nadania pakietu:
    Jak rozwiązać problem przerwania IRQ w module radiowym nRF24L01+?

    Zdarza się, że IRQ reaguje poprawnie na każdą pomyślną transmisje:
    Jak rozwiązać problem przerwania IRQ w module radiowym nRF24L01+?

    Dziękuję za zainteresowanie moim problemem, liczę na pomoc i pozdrawiam!
  • #2 18411494
    excray
    Poziom 41  
    Nie jest to przypadkiem podróbka tego modułu? Na rynku jest bardzo dużo lepszych bądź gorszych kopii tego układu. Możesz ewentualnie spróbować:
    - zapętlić procedurę kasowania flag w rejestrze STATUS tak długo aż zostanie wyzerowany pin IRQ albo zostanie przekroczona jakaś ilość cykli
    - wyłączyć przerwanie w CONFIG i uruchamiać je ponownie przed nadaniem kolejnej paczki.
  • #3 18412564
    lehastar
    Poziom 16  
    Spróbuj dodać kondensator od 10 do 47 mikrofaradów na nóżkach zasilających.
    Im bliżej, tym lepiej.
REKLAMA