Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 sty 2026, o 08:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 26 gru 2014, o 10:10 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Próbuję właśnie uruchomić nową bibliotekę RFM69 z Green Booka w jednym ze swoich projektów. Z uwagi na specyfikę sprzętu musiałem wprowadzić pewne modyfikacje. Po pierwsze inny jest MCU - Atmega 328P, po drugie zamieniłem programowe SPI na sprzętowe.
Trafiłem jednak na bardzo dziwny problem - kod zawiesza się w bardzo dziwnym miejscu, w którym na pierwszy rzut oka nie ma niczego, na czym mógłby się zawiesić...

Metodą prób i błędów doszedłem do tego, że za zawieszenie odpowiada funkcja rfm69_init(). Żeby ustalić dokładne miejsce, wewnątrz kodu tej funkcji pododawałem wywołania uart_puts(), wysyłające kolejne "znaczniki". Oczywiście zgodnie z przyjętą tutaj zasadą, wrzucam jedynie omawiany fragment kodu:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Układ po zrestartowaniu wysyła jedynie znacznik "A", dalsze już nie docierają. Opcja USE_IRQ jest ustawiona na 1, IRQ_NR to także 1. Dalszy blok kodu, umieszczony wewnątrz instrukcji warunkowej preprocesora powinien się więc wykonać. Nawet gdyby tutaj tkwił jakiś problem, to program powinien zaraz przejść do dalszej części i wysłać literkę "E". Nie ma tutaj przecież żadnej pętli, która mogłaby przejąć wykonywanie programu...

Poniżej zamieszczam inne modyfikacje, które wprowadziłem:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 11:24 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Ja zapytam inaczej - czy próbował kolega najpierw odpalić to tak jak w GB ? czyli na programowym SPI ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2014, o 12:02 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

mirekk36 napisał(a):
Ja zapytam inaczej - czy próbował kolega najpierw odpalić to tak jak w GB ? czyli na programowym SPI ?


Z rozpędu pozmieniałem wszystko pod mój układ, miałem zamiar sprawdzić czy/jak to działa na programowym SPI, jednak najpierw chciałem skonsultować moje modyfikacje. Może jest tam jakiś błąd, którego ja nie mogę się dopatrzeć. Docelowo wolałbym jednak używać sprzętowego SPI.
Swoją drogą program przestał się zacinać, kiedy ustawiłem USE_IRQ na 0...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 15:21 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Mam jeszcze jedno pytanie:
Skąd można by wyłuskać adres modułu, który wysłał nam wiadomość? W przykładzie z książki mamy dwa, ustawione "na sztywno" adresy modułów, które przerzucają między sobą komunikat. Ja chciałbym zrobić coś wedle następującego schematu:

1) Odbieramy komunikat od dowolnego modułu, odczytujemy go do zmiennej tablicowej, a w osobnej zmiennej zapisujemy adres nadawcy.
2) Przekazujemy odebrany komunikat do procedury parsującej, która sprawdza czy mamy do czynienia ze znanym poleceniem. Jeśli tak - jest ono dalej przetwarzane i przygotowywana jest odpowiedź, zapisywana w osobnej tablicy.
3) Jeśli tablica z odpowiedzią zawiera jakąś treść, jest ona wysyłana pod zapisany wcześniej adres naszego "korespondenta".
4) Wszystkie tablice są czyszczone, choćby przez wpisanie 0 do pierwszego elementu.

Można by w ten sposób stworzyć mechanizm pozwalający na automatyczne udostępnianie jakiejś treści (np. czasu) dowolnemu urządzeniu w sieci, które o nią poprosi. Trochę podobnie do komunikacji UDP za pomocą ENC28J60.

BTW czy net_id ma coś wspólnego z opcją sprzętowego szyfrowania komunikacji? Ta opcja jest wykorzystywana w bibliotece z Green Booka, czy ze względu na prostotę nie została w niej zaimplementowana?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 15:34 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

opcja szyfrowania w ogóle nie została zaimplementowana ... ale chyba przy takim omówieniu modułu i tworzenia biblioteki to ... implementacja tego we własnym zakresie chyba nie powinna już nastręczać trudności, gdy ktoś się uprze na to szyfrowanie.

Natomiast adres nadawcy można przecież nadawać w pierwszym bajcie ramki ;) i już ..

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 15:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Te moduły "lubią" zewnętrzny pullup na lini CS...

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 15:49 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

mirekk36 napisał(a):
opcja szyfrowania w ogóle nie została zaimplementowana ... ale chyba przy takim omówieniu modułu i tworzenia biblioteki to ... implementacja tego we własnym zakresie chyba nie powinna już nastręczać trudności, gdy ktoś się uprze na to szyfrowanie.


Rozumiem. Chciałem się tylko upewnić. Może spróbuję je dodać samodzielnie, chociaż nie sądzę, żeby ktoś w mojej okolicy próbował robić spoofing komunikacji za pomocą tych modułów. ;)

Cytuj:
Natomiast adres nadawcy można przecież nadawać w pierwszym bajcie ramki ;) i już ..


Tak, wiem. Zwyczajnie nie chciałem go nadmiarowo przesyłać jeszcze raz, jeśli byłoby to już realizowane sprzętowo i potem ten jeden bajt dałoby się wyciągnąć z jakiegoś rejestru modułu. Rozumiem, że nic takiego nie ma miejsca i mogę jedynie przesyłać adres nadawcy razem z danymi?

szopler napisał(a):
Te moduły "lubią" zewnętrzny pullup na lini CS...


To zawsze robię tak czy inaczej, w każdym układzie wykorzystującym magistralę SPI.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 18:56 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Hmm... Jeszcze jedno pytanie przyszło mi do głowy.
Czy biblioteka jest także kompatybilna z modułem RFM69HCW? Czy też obsługuje jedynie wersję CW?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 19:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Atlantis napisał(a):
Hmm... Jeszcze jedno pytanie przyszło mi do głowy.
Czy biblioteka jest także kompatybilna z modułem RFM69HCW? Czy też obsługuje jedynie wersję CW?

Pewnie że jest kompatybilna - tylko trzeba sobie dodać samemu sterowanie dodatkowymi rejestrami odpowiedzialnymi za zwiększanie mocy nadajnika

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 19:38 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

mirekk36 napisał(a):
Atlantis napisał(a):
Hmm... Jeszcze jedno pytanie przyszło mi do głowy.
Czy biblioteka jest także kompatybilna z modułem RFM69HCW? Czy też obsługuje jedynie wersję CW?

Pewnie że jest kompatybilna - tylko trzeba sobie dodać samemu sterowanie dodatkowymi rejestrami odpowiedzialnymi za zwiększanie mocy nadajnika


A czy moduł w wersji HCW ruszy również z niezmodyfikowaną biblioteką, oczywiście operując z mniejszą mocą?
Pytam, ponieważ właśnie przeprowadzam pierwsze eksperymenty z tym modułem. Jakiś czas temu skleciłem urządzenie, które wyposażyłem w RFM69HCW, ale nie uruchomiłem tej części jego funkcjonalności. Miałem samemu próbować przeportować bibliotekę z Arduino, ale ostatecznie zająłem się innymi projektami i czekałem na nowego Green Booka. ;)
W tej chwili nie mam pod ręką drugiego modułu, żeby sprawdzić komunikację (przyjdzie na dniach), ale zabrałem się za pierwsze testy i prawdę mówiąc nie jestem do końca pewien wyników. Próbowałem zobaczyć, czy jakaś transmisja radiowa będzie widziana przez RTL-SDR, ale niczego nie mogę wychwycić.

W tej chwili przywróciłem programowe SPI.
Czy istnieje jakiś sposób na sprawdzenie, czy w ogóle występuje komunikacja pomiędzy modułem a MCU?

Połączenia na płytce zostały sprawdzone wielokrotnie i wyglądają prawidłowo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 19:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Cytuj:
Czy istnieje jakiś sposób na sprawdzenie, czy w ogóle występuje komunikacja pomiędzy modułem a MCU?

pewnie że jest - przecież masz tam do tego specjalną funkcję i pokazywałem nawet ją w poradniku wideo

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 20:26 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Hmm... O którym wideoporadniku mówimy? Chyba coś mi umknęło. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 20:30 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Nie - przepraszam - jest taka funkcja ale do RFM73 ;) - sorki

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 20:33 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Tak właśnie mi się wydawało, że widziałem to w filmiku dla siedemdziesiątki trójki. ;)
Czy w RFM69 mogę na szybko przeprowadzić jakiś test komunikacji przez SPI?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 20:45 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Atlantis napisał(a):
Czy w RFM69 mogę na szybko przeprowadzić jakiś test komunikacji przez SPI?

Napisz funkcyjkę do dczytu jakichś stałych domyślnych wartości rejestrów ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2014, o 23:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2011
Posty: 401
Lokalizacja: Siedlce
Pomógł: 7

Na przykład taką ;)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


PS.
Pokaż jeszcze jak masz moduł podłączony...
Jeśli masz podłączony pin RST to musi on być w stanie wysokiej impedancji (nie podciągnięty), czyli pin atmegi jako wejście i bez pullupa.

Obsługę załatwiają takie makra:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Czekamy na RedBook'a!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 01:08 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

szopler napisał(a):
Pokaż jeszcze jak masz moduł podłączony...
Jeśli masz podłączony pin RST to musi on być w stanie wysokiej impedancji (nie podciągnięty), czyli pin atmegi jako wejście i bez pullupa.


Hmm... Faktycznie mam pin RST podłączony do linii MCU (ustawionej na wyjście w stanie wysokim) + rezystor podciągający do VCC.
Czyżby w takim układzie moduł znajdował się w stanie ciągłego resetu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2014, o 14:03 
Offline
Użytkownik

Dołączył(a): 05 gru 2013
Posty: 246
Pomógł: 0

Faktycznie, okazuje się, że winę ponosiło nieprawidłowe podłączenie pinu RST.
Tak swoją drogą jak powinien być podłączony pin IRQ? Podciągnięcie go rezystorem do VCC jest prawidłowym rozwiązaniem?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 13 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO