Skocz do zawartości

Połączenie RF433 do atmega8a-pu


bladatwarz6

Pomocna odpowiedź

Witam

Powoli buduję swojego pierwszego "robota" a w zasadzie pojazd gąsienicowy.

Projekt miał być na atmedze 328p-pu ale mam problem z fusebitami więc na razie wszystko opieram o atmege8a-pu.

I tu pojawia się mój problem, chcę podłączyć moduł odbiornika rf433 z ebaya:

Są tam standardowe piny:

GND

VCC

DATA

I mam problem do którego pinu podłączyć DATA.

Gdzieś usłyszałem że powinno się do RX lub któregoś z PWM i tu zrobił mi się mętlik w głowie.

2 kanały PWM już mam zajęte do sterowania silnikami i jeszcze ten 3 chciał bym zarezerwować dla sterowania kamerą (projekt będzie rozbudowywany) a złącze RX przyda mi się do GPS który też chcę kiedyś zaadoptować.

Przechodząc do sedna, czy pin DATA można wpiąć do dowolnego pinu analogowego/cyfrowego i będzie prawidłowo działać?

Chciał bym zastosować pin PD4

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Zależy do czego chcesz wykorzystywać moduł. Jeżeli tylko do przesyłania nie za szybkich ciągów 0 i 1 to może to być dowolny wolny pin. Z tego co się orientuję takimi modułami tylko takie pojedyncze sygnały prześlesz bo nie mają żadnego sposobu do przesyłania większych informacji.

Link do komentarza
Share on other sites

Takie moduły obsługuje się tylko cyfrowo, analogowe wejście nie nadaje się do odczytu szybko zmiennych sygnałów cyfrowych. W niektórych przypadkach można obslugiwac te nadajniki/odbiorniki sprzętowym UART ale nie jest to zalecane przy ciagach jedynek lub zer rozsynchronizowuja sie. Najlepiej komunikować się z modulacja Manchester.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dlaczego? Podajesz wypełnienie PWM jak zmienną, zazwyczaj 8 lub 10 bitową, trzeba by to rozbić na pojedyncze bity i można wysłać. O ile nie pogubisz tych bitów (a przy takich modułach to bardzo prawdopodobne), to odebrany ciąg znowu zamieniasz na zmienną i przypisujesz do wypełnienia PWM dla silników. Musiałbyś jeszcze dodać jakąś weryfikację otrzymanych ciągów, czy nie odebrałeś jakichś bzdur. Nie jest to bardzo proste, ale jak najbardziej wykonalne.

Link do komentarza
Share on other sites

Te moduły są jakby radiowym przedłużeniem drutu, ale wyłącznie drutu "cyfrowego". W nadajniku masz wejście DATA będące "początkiem" wirtualnego kabelka a w odbiorniku masz wyjście DATA będące jego "końcem". To co wpuścisz do wejścia pojawi się z pewnym opóźnieniem na wyjściu. Ponieważ możesz przesyłać tylko stany 0 i 1 a Twoje wymagania są większe niż zapalanie diodki LED po drugiej stronie, musisz wymyślić metodę zakodowania informacji tak, by dało się ją wyrazić za pomocą strumienia jedynek i zer. Wszystko jedno do którego pinu podłączysz nadajnik i do którego odbiornik. Jeżeli UART czyli interfejs szeregowy procesora dedykowany do takich transmisji chcesz zarezerwować dla odbiornika GPS (i słusznie), to zostaje całe mnóstwo innych, "normalnych" pinów I/O. To teraz usiądź spokojnie i pomyśl jak to zrobić. Co chcesz przesłać? Prędkość obrotową silnika? Tylko jedną czy może coś więcej? Dwie prędkości dwóch silników? A może w przyszłości coś jeszcze innego? Od tego zależy jak do tego trzeba podejść. Na razie nie martw się tym kodowaniem Manchester - o tym pogadamy później, bo to wiąże się z kolejnym wymaganiem tych modułów. Ludzie nauczyli się przesyłać po jednym drucie wiele rzeczy na raz, więc i Ty na pewno wpadniesz na jakiś sposób 🙂 Zaproponuj coś - podyskutujemy. Masz jakieś pojęcie o programowaniu czy jesteś totalnym świeżakiem?

Link do komentarza
Share on other sites

Pojęcie o języku C mam niewielkie, parę projektów na arduino. Wcześniej programowałem tylko w PHP, HTML itd (języki webowe)

Ten projekt ma być moim "ciężkim" wejściem w świat avr. Na tym projekcie chce się nauczyć programowania C dla avr, wiem że nie będzie łatwo.

Dzięki marek1707 za podpowiedź, mam plan wysyłania 2 sygnałów PWM dla silników (lewy i prawy) oraz sterowanie oświetleniem, i teraz mam wątpliwości co do mojego wyboru na ten moduł (to miałem pod ręką) może ktoś z was ma jakiś lepszy pomysł na sterowanie radiowe za niewielką cenę albo zaproponuję jak wysyłać te na razie 2 sygnały w miarę szybko.

Sterowanie będzie za pomocą tego joystick'a:

http://botland.com.pl/joystick/1942-thumb-joystick.html

Wychylenie w przód/tył <-- pojazd jedzie prosto/w tył

Wychylenie w lewo/prawo <-- pojazd obraca się wokół własnej osi

Wychylenie w przód i w prawo/lewo <-- pojazd przyhamowuje jedną gąsienice (nie całkiem) by delikatnie skręcić w ruchu

Link do komentarza
Share on other sites

Nie ma co wybrzydzać i szukać innych modułów. Te z jakiegoś powodu wybrałeś (cena?) a że z pewnością można przez nie przesyłać informację, trzeba to zrobić. Bierz problem na klatę i do roboty.

Przede wszystkim musisz wiedzieć co chcesz przesłać. Dobrze, że to wymieniłeś bo już obaj wiemy czego oczekujesz. Jak rozumiem w jednym komputerku będziesz miał program, który obsługując (odczytując) joystick oraz kilka przycisków lub wyłączników będzie wysyłał informację o wysterowaniu dwóch silników oraz kilka bitów załączających różne rzeczy, np oświetlenie. Druga płytka jeżdżąca na robocie będzie miała odbiornik i z niego powinna wyciągać to jak wysterować oba swoje silniki oraz załączać jakieś wyjścia on-off. No to teraz masz pole do popisu. Informacje można zakodować na miliony sposobów. Podpowiem Ci dwa a Ty to rozwiń albo zaproponuj coś ciekawszego:

1. Modulacja długości impulsu. Wartość ciągłą w postaci wychylenia joysticka możesz wysłać w postaci impulsu o pewnej długości, np. jedno skrajne położenie to czas 1ms a przeciwne to 2ms. Dwa takie impulsy jeden po drugim, oddzielone krótką przerwą mogą być łatwo wygenerowane w nadajniku i łatwo zmierzone w odbiorniku. Kolejne impulsy mogą być już kodowane dwustanowo: 1ms to stan logiczny 0, 2ms to stan 1. Mniej więcej w taki sposób działają od 50 lat aparatury do zdalnego sterowania modeli.

2. Kodowanie cyfrowe. Położenie joysticka przód-tył kodujesz w postaci liczby np. 8-bitowej, wychylenie prawo-lewo tak samo i dostajesz 16 bitów. Uzupełniając to np. o 8 bitów dodatkowych do sterowania wyjściami dwustanowymi masz do przesłania 24 bity. Układasz je po kolei i wysyłasz jeden po drugim. W odbiorniku wciągasz szeregowo i po skompletowaniu wszystkich dzielisz na liczbę, drugą liczbę i 8 swobodnych "bitów" które wysyłasz do portu I/O. Liczbami - po prostym przetworzeniu, karmisz dwa generatory PWM napędzające dwa mostki H sterujące silnikami lewej i prawej strony.

W obu przypadkach masz dwa problemy:

1. Błędy transmisji. W każdej chwili odbiornik może dostać zakłócający sygnał radiowy i pokazać na wyjściu przypadkowy impuls. Odbiornik a właściwie jego algorytm trzeba na to uodpornić. Masz jakiś pomysł?

2. Synchronizacja. Odbiornik - zarówno po włączeniu jak i po poważnym błędzie transmisji musi się jakoś wydobyć z dołka i zsynchronizować z tym co wysyła nadajnik. Tak więc w nadawanych danych musi być jakiś znacznik początku umożliwiający jednoznaczny start procedury odbioru. Wymyśl coś 🙂

Link do komentarza
Share on other sites

Podoba mi się sposób nr. 1, wydaje mi się że można by to łatwo wyeliminować, atmega musiała by zebrać np. 3 sygnały takie same i dopiero zrealizować cel. Taki mi się przynajmniej wydaje że to było by dobre rozwiązanie na początek.

Sterowanie wysyłało by 3 sygnały pod rząd o długości np. 2ms i je porównywała, jeżeli by się nie różniły to długością to avr wysyłał by przypisany do tej długości sygnał na wyjście.

Tylko wydaje mi się że strasznie spowalniało by to sam mikro kontroler, więc chyba zastosował bym attiny które by ten sygnał filtrowało i przefiltrowany sygnał wysyłało by już do atmegi8.

Co sądzisz o takim rozwiązaniu?

Link do komentarza
Share on other sites

Nie, masz procesor który potrafi wykonać kilka milionów operacji na sekundę. Nie martw się na zapas o szybkość. CPU klasy AVR może transmitować lub odbierać o wiele więcej.

Dobra, napisałeś o kontroli błędów jako o konieczności powtórzenia się tych samych wartości kilka razy. OK, to jest metoda, można ją przyjąć i oszacować jaki będzie miała wpływ na sterowanie. Nie mamy za to nic o synchronizacji. Może pozwól, że ja coś zaproponuję. Musisz mieć jakiś znacznik początku, coś co pozwoli odbiornikowi zorientować się, że właśnie zaczyna się nowa porcja informacji i że za chwilę przyjdzie impuls pierwszego silnika, potem drugiego a potem kolejne dla wyjść dwustanowych. Po zakończeniu transmisji ostatniego nadajnik powinien znów wysłać znacznik i tak w kółko. Znacznikiem może być impuls np. 3 lub 5ms a wszystkie pozostałe muszą się zawierać w zakresie 1-2ms. Wydaje się proste, prawda?

Moduły radiowe tak surowe jak te mają swoje ograniczenia. Jedno z nich wynika z prostej (i taniej) konstrukcji odbiornika, jego układu automatycznej regulacji wzmocnienia (AGC) i detektora wyjściowego. Otóż najfajniej to działa, gdy nadajemy tyle samo jedynek ile zer, tzn. mierząc za pewien czas powinniśmy średnio przez połowę tego czasu nadawać stan 0 a przez drugą połowę stan 1. Jak to spełnić gdy chcesz nadawać wymyślone już impulsy? To też jest proste. Wystarczy przestać myśleć o stanach 0 i 1 a zacząć myśleć o zboczach sygnału. Czas nadawania każdego bitu dzielisz na dwie równe części. W pierwszej nadajesz 1 a w drugiej 0. Wtedy, ponieważ każdy bit spełnia równowagę czasu nadawania 1 i 0 to i cała transmisja też. Tak więc znacznik początku będzie składał się przykładowo z 1.5ms jedynki i 1.5ms zera a pozostałe bity z odpowiednio krótszych kawałków. Jeżeli w odbiorniku będziesz mierzył odstępy czasu między zboczami narastającymi i odpowiednio go kwantyfikował, masz zrobiony dekoder bitów.

Najlepiej to narysować, choć to tylko przykład. Możesz to zrobić jak chcesz.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.