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

[ATmega8][Bascom] nRF24L01 2.4G Wireless - jak uruchamiać ?

Krzysztof_lolek 06 Cze 2013 08:10 8931 11
REKLAMA
  • #1 12387721
    Krzysztof_lolek
    Poziom 11  
    Posty: 70
    Ocena: 1
    Witam!
    Na początek przepraszam, ale ten post najpierw umieściłem w strefie dla początkujących, ale nikt nie odpowiedział tak więc pozwalam sobie na zamieszczenie tego tutaj z nadzieją, że ktoś pomoże mi przejść przez ten opis opatrując kilkoma komentarzami, co pozwoli mi to pukładać w głowie i oprogramowanie tego urządzenia.
    ////
    Czy ktoś programował atmegę 8 i 2.4G Wireless nRF24L01+ Module dla nadajnika i odbiornika. Chcę zrobić pilot do bramy na początek i trudno mi jest to wszystko ogarnąć. Znalazłem ten opis do Bascom-a bo w tym programuje i chciałbym usłyszeć jakieś wskazówki. Opis na tej stronie jest obszerny czy mógłby mi ktoś skomentować? Podaje link:
    http://www.bascom.info/index.php?option=com_content&task=view&id=212&Itemid=57.
  • REKLAMA
  • #2 12387874
    bdoych
    Poziom 1  
    Posty: 1
    Ja też szukałem (atmegę 8 i 2.4G Wireless nRF24L01) i znalazłem ten temat: 'avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92'
    Ale nie udało mi się spróbować jeszcze
  • #3 12443653
    rysiek82
    Poziom 2  
    Posty: 4
    Udało się komuś to uruchomić w tej konfiguracji?

    Ja próbowałem zrobić to z ATMEGA8A przy zasilaniu 5V oraz 3.3V i niestety nie udaje mi się nawiązać komunikacji miedzy modułami.

    Komunikacja (SPI) między mikrokontrolerem a modułem WiFI jest poprawna, bo wyniki są w pełni zgodne z tym co mówi specyfikacja (robię sobie zrzut rejestrów przez USART).

    Próbowałem wielu wersji kodu (około 4 w tym z SPI z ATMELA i programowym), który znajduje się w internecie, niestety dla żadnego nie uzyskałem poprawnego wyniku.

    Jakieś pomysły?

    Dla serwera (nadajnika) mam takie dane:

    Kod: Text
    Zaloguj się, aby zobaczyć kod

    (wszystkie dane są w HEX)
    Jak widać dla klienta kolejki są puste (FIFO 0x11 - 1 i 4 bit).
    Status jest poprawny.

    Natomiast serwer po wysłaniu zgłasza błąd (OB=0x0a), czyli że przekroczył maksymalną ilość prób wysyłania.

    Mogę też przesłać kod mojego programu (AVR GCC).
    Proszę używać dostępnych narzędzi, ułatwiających czytanie innym. LordBlick.
  • #4 12446371
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    Typowy zonk z serii 'nadajnik nie nadaje czy odbiornik nie odbiera'. Trzeba sie upewnić, że nadajnik nadaje. W szczególności, jego konfiguracja kanału (częstotliwości), modulacji i bitrate. Podłącz masę modułu nadającego przez rezystor ok. 10R do masy, zamiast bezpośrednio, i oscylem mierz spadek napięcia na tym rezystorze. Jeśli w momentach nadawania, spadek napięcia jest 'sporo większy' niz w bezczynności, to masz pewność, że nadajnik nadaje.

    Wtedy katujesz konfigurację radia - nadajnik i odbiornik ma mieć identyczną. Tą samą częstotliwość nośną, ten sam bitrate, tą samą modulację, i ogólnie wszystkie parametry PHY i MAC (jesli uzywany) powinny być identyczne.

    Sprawdz czy odbiornik odbiera, tak samo rezystorem w zasilanie, jak opisałem powyzej. Jeśli po włączeniu nasłuchu pobierany przez moduł prąd gwałtownie rośnie, i utrzymuje się na tym poziomie cały czas, to odbiornik nasłuchuje.

    Wtedy pozostaje tylko przeczytanie pareset razy datasheeta ze zrozumieniem...

    Mam spore doświadczenie z układami Nordica - powiem tylko, że w swojej prostocie układy te są po prostu czasami wredne ;] Ale po opanowaniu ich działają bardzo stabilnie i w przewidywalny sposób.

    BTW, od kiedy to serwer inicjuje transakcje? ;] Przeciez to zadanie klienta, aby połączyć się z serwerem, więc klient winien inicjować transakcję. Serwer tylko nasłuchuje...
  • REKLAMA
  • #5 12446533
    rysiek82
    Poziom 2  
    Posty: 4
    Konfiguracja wg. rejestrów jest zgodna. Datasheet czytałem od deski do deski po 3 dniu porażek i myślałem, że już wszystko wiem.
    Kod testowałem z kilku gotowców dostępnych w sieci oraz nawet mam wersje napisaną przeze mnie. Wszystkie dają dokładnie ten sam efekt. Poprawne wartości w rejestrach, ale zero komunikacji i informacja o nieudanym wysyłaniu (OBSERVE_TX).

    Sprawdzę to wg. instrukcji, którą opisałeś - na pewno będzie to dodatkowa istotna wiedza. Poza tym w poniedziałek zakupie jeszcze 2 komplety, żeby mieć pewność, że nie mam uszkodzonych (lub sam ich nie uszkodziłem).

    Zależy od definicji. W przypadku moich potrzeb mam jeden serwer, który odpytuje serię urządzeń (20-50). Moduł nRF24L01 w trybie TX może obsługiwać tylko 6 urządzeń równolegle, a to jest za mało.

    Dzięki za podpowiedź.
  • REKLAMA
  • #6 12446671
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    A jak z zasilaniem?
    Pokaż schemat jaki masz osobiście połączony.
  • REKLAMA
  • #7 12452019
    rysiek82
    Poziom 2  
    Posty: 4
    piotrva napisał:
    A jak z zasilaniem?
    Pokaż schemat jaki masz osobiście połączony.

    Schematu nie robię, bo to nie za bardzo ma sens - jest to zbyt proste.
    Moderowany przez LordBlick:

    3.1.17. Zabronione jest publikowanie wpisów obniżających ogólny poziom dyskusji, wynikających z lenistwa lub zawierających roszczeniowy charakter wypowiedzi.
    Sposób realizacji podłączeń oraz zapewnienie właściwych warunków zasilania są bardzo istotne przy tych modułach.



    Mam dwa ATMEGA8A podłączone do płytki stykowej.
    Zasilane są one przez "moduł zasilający 3,3V 5V do Arduino MB102 USB" ustawiony w tryb 3.3V. Do tego modułu zasilania podłączone są także dwa układy nRF24L01+.
    Widoczne jest to na zdjęciu:
    https://www.dropbox.com/sh/6rol6ezc26cst1h/fH73DFQTa8#f:plytka.jpg
    Sprawdziłem miernikiem wyjście z modułu zasilania i wskazuje dokładnie 3.3V.

    Podłączenie modułów do mikrokontrolerów jest następujące:
    PB1 = CE
    PB2 (SS) = CSN
    PB3 (MOSI) = MOSI
    PB4 (MISO) = MISO
    PB5 (SCK) = SCK
    IRQ - na razie nie używam.

    Testerem logicznym sprawdzałem sygnał na złączu PB0 (CE) i jest on właściwy dla nadajnika (wysoki cały czas poza momentem transmisji, gdy są ustawiane rejestry) i odbiornika (cały czas wysoki).

    nsvinc napisał:
    Podłącz masę modułu nadającego przez rezystor ok. 10R do masy, zamiast bezpośrednio, i oscylem mierz spadek napięcia na tym rezystorze. Jeśli w momentach nadawania, spadek napięcia jest 'sporo większy' niz w bezczynności, to masz pewność, że nadajnik nadaje.

    Podłączyłem także analogowy amperomierz pod linie zasilania do modułu nRF24L01+ ustawionego w tryb TX i co polecenie "Transmit" widoczny jest gołym okiem zwiększony pobór (zgodnie ze specyfikacją nRF24L01+).

    Wszystkie pliki są tutaj (program, logi klienta i serwera):
    https://www.dropbox.com/sh/6rol6ezc26cst1h/fH73DFQTa8

    Zamówiłem też kilka nowych modułów na w razie czego. Może, któryś jest po prostu uszkodzony (może go uszkodziłem lub taki dostałem) i niepotrzebnie się z tym męczę już drugi tydzień. Myślę, że najpóźniej w środę je będę miał.

    nsvinc napisał:
    Nie zależy ;] serwer to jednostka udostępniająca usługę, z której korzystają klienty (czyli oprogramowanie łączące się z serwerem i uzywające danej usługi).

    W Twoim przypadku to jest hub, nie serwer ;]

    Dla mojego rozwiązania serwer (wg. mojej definicji) zajmuje się:
    - odpytaniem wszystkich czujników (bo one same nie mają możliwości połączenia się z nim ze względu na ograniczenia modułu nRF24L01+),
    - zapisaniem wszystkich odczytów z czujników w bazie (rejestrowanie historii),
    - wysłaniem na podstawie odczytów poleceniem do modułów sterujących (np. włączenie przekaźnika).
    Więc łączy on wszystkie moduły oraz posiada logikę. Jedyna różnica od klasycznego klient-serwer polega na tym, że jest odpytywanie wynikające z ograniczeń nRF24L01+, które polega na tym, że może on odbierać dane równolegle jedynie od 6 klientów. Jakby tego ograniczenia nie było, to wówczas klienci mogliby sami dane wysyłać lub odpytywać o zadania...
    Z resztą podobna logika jest w I2C - Master-Slave. Komunikacje zawsze inicjuje Master.

    Jakby ktoś znalazł jakieś błędy w tym co dostarczyłem (kod, podłączenie, inne) to byłbym bardzo wdzięczny.
  • #8 12452819
    rysiek82
    Poziom 2  
    Posty: 4
    OK, zrobiłem schemat podłączenia tych 7 PINów.
    [ATmega8][Bascom] nRF24L01 2.4G Wireless - jak uruchamiać ?

    Jest także w postaci pliku PS i SCH (kicad):
    https://www.dropbox.com/sh/6rol6ezc26cst1h/LmAXguZs1o/schemat.ps
    https://www.dropbox.com/sh/6rol6ezc26cst1h/eItN-AbYOI/schemat.sch

    Także załączyłem schemat modułu zasilającego, którego używam:
    https://www.dropbox.com/sh/6rol6ezc26cst1h/I3Y0OMRoLG/mod_zasilanie_stykowych.pdf
  • #9 12457448
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    rysiek82 napisał:
    OK, zrobiłem schemat podłączenia tych 7 PINów.
    A gdzie zblokowanie zasilania bezpośrednio przy układzie ? Zdjęcie zrealizowanego układu ?
  • #10 12460086
    Krzysztof_lolek
    Poziom 11  
    Posty: 70
    Ocena: 1
    Chciałbym zapytać jak przesyłać dane tzn. przez polecenie: "Print" i odebranie przez "Input". Chodzi mi o to żeby np. przesyłać dane dotycząc czasu. NA jednym układzie atmega spięta jest przez I2C z zegarem PCF. I chcę to przesłać na drugą atmegę. Czy będzie to wyglądało tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod
    (nadajnik)
    , natomiast odbiornik ->
    Kod: text
    Zaloguj się, aby zobaczyć kod
    ?
  • #11 12497367
    Danonek51
    Poziom 10  
    Posty: 14
    Udało mi się uruchomić te moduły na podstawie projektu avrproject.ru/publ/kak_podkljuchit/radiomoduli_nrf24l01/2-1-0-92 (termometr bezprzewodowy). Zaznaczam, że nie jestem programistą i uruchomiłem te moduły na podstawie prób i błędów z wprowadzeniem niewielkich zmian, ale nie w programie.
  • #12 12526370
    Krzysztof_lolek
    Poziom 11  
    Posty: 70
    Ocena: 1
    Witam!
    Mnie też się udało uruchomić ten układ według opisku, który jest nastronie wspomnianej przez Danonek51. Zastanawia mnie tylko teraz czy układ może raz nadawać, a po chwili odbierać dane? Czy ktoś coś takiego robił, osobiście wydaje mi się, że trzeba przełączać układ w tryb nadawania i odbierania. Proszę o informację czy to jest możliwe? Dzięki!

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problemy związane z programowaniem mikrokontrolera ATmega8 oraz modułu nRF24L01+ w celu stworzenia systemu bezprzewodowego do sterowania bramą. Użytkownicy dzielili się doświadczeniami w zakresie konfiguracji, zasilania oraz komunikacji między modułami. Wskazówki obejmowały sprawdzenie poprawności połączeń, zasilania oraz synchronizacji parametrów transmisji (częstotliwość, modulacja, bitrate). Niektórzy uczestnicy podzielili się linkami do przydatnych zasobów oraz schematów połączeń. W końcu, kilku użytkowników udało się uruchomić systemy na podstawie dostępnych projektów, a także zadano pytania dotyczące możliwości jednoczesnego nadawania i odbierania danych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA