Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

Krzysztof_lolek 06 Cze 2013 08:10 6993 11
  • #1 06 Cze 2013 08:10
    Krzysztof_lolek
    Poziom 11  

    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.

    0 11
  • Megger
  • #2 06 Cze 2013 09:23
    bdoych
    Poziom 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

    0
  • #3 22 Cze 2013 10:23
    rysiek82
    Poziom 2  

    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.

    0
  • Megger
  • #4 23 Cze 2013 00:28
    nsvinc
    Poziom 35  

    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...

    0
  • #5 23 Cze 2013 07:53
    rysiek82
    Poziom 2  

    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ź.

    0
  • #7 24 Cze 2013 20:18
    rysiek82
    Poziom 2  

    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.

    0
  • #9 26 Cze 2013 10:02
    LordBlick
    VIP Zasłużony dla elektroda

    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 ?

    0
  • #10 26 Cze 2013 21:31
    Krzysztof_lolek
    Poziom 11  

    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: jezyk_programowania
    Zaloguj się, aby zobaczyć kod
    (nadajnik)
    , natomiast odbiornik ->
    Kod: jezyk_programowania
    Zaloguj się, aby zobaczyć kod
    ?

    0
  • #11 07 Lip 2013 21:18
    Danonek51
    Poziom 7  

    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.

    0
  • #12 15 Lip 2013 22:01
    Krzysztof_lolek
    Poziom 11  

    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!

    0