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.

[atmega][bascom] - Bezprzewodowy przesył danych i kodowanie Manchester

gray77 11 Sie 2013 18:28 5442 18
  • #1 11 Sie 2013 18:28
    gray77
    Poziom 12  

    Witam wszystkich.
    Potrzebuje waszej nieocenionej pomocy.
    Stałem się posiadaczem takiej pary: nadajnik - odbiornik:

    [atmega][bascom] - Bezprzewodowy przesył danych i kodowanie Manchester

    Zabawę swoją rozpocząłem od przesyłania danych "po kablu" - działa jak należy, dzięki nieocenionym zasobom elektrody. Przyszła pora, by zacząć przesyłać dane "bez kabelków", będzie to część większego projektu. No i tutaj pojawiają się problemy. Przewertowałem elektrodę i forum mcselec i nigdzie nie znalazłem zadowalających informacji.

    Jak oczywiście zdaję sobie sprawę, odbiornik łapie mnóstwo śmieci. Wysyłanie pojedynczych znaków jest jeszcze do przełknięcia ale coś dłuższego to już masakra. W docelowym układzie, chciałbym, wysyłać dane w takim formacie:
    adres odbiorcy : polecenie (coś a'la: urz1xxwylacz)
    Wiem, że kodowanie Manchester dużo by pomogło ale nie bardzo wiem jak się do tego zabrać.
    Czy ktoś mnie naprowadzi na właściwą ścieżkę?

    W tej chwili pracuję na Atmega 32 i 16 z kwarcami 16mhz. Jeśli to coś da, załączę mój kod ale z góry zaznaczam, ze to tylko wklejki wielu innych programów znalezionych w sieci.

    BTW: Zauważyłem coś nietypowego, mój nowy programator USBasp, wykrywa na opak uC, zamiast np 16 wykrywa 16a. Dziwne jak dla mnie, ktoś się z takim czymś spotkał?

    0 18
  • #2 11 Sie 2013 18:36
    Kuniarz
    Moderator Projektowanie

    Próbowałeś najprostszego rozwiązania - bajt będący sumą kontrolną ? Dodajesz do siebie wszystkie wartości znaków w przesyłanej sekwencji, wyjdzie z tego jakiś bajt, dołączasz go do wysyłanej ramki. Odbiornik również dodaje wartości i jeśli suma kontrolna się nie zgadza, to nie realizuje komendy.

    0
  • #3 11 Sie 2013 18:52
    gray77
    Poziom 12  

    Tak nie próbowałem, ale z góry mogę założyć ze to nie pójdzie. Za dużo śmieci w eterze (mam podpięty LCD do podglądu co się dzieje), wiec nawet suma kontrolna nie przedrze się przez eter. Z tego co wydedukowałem przeglądając setki postów, potrzebne jest, by zastosować kodowanie transmisji i z tym mam kłopot.

    0
  • #4 12 Sie 2013 07:46
    2rs232
    Poziom 17  

    Możesz też użyć kodowania sprzętowego za pomocą np. MC145026,MC145027.

    0
  • #5 12 Sie 2013 08:55
    Piotr Piechota
    Poziom 21  

    Spróbuj co drugi bajt wysyłać 0x55 (binarne 01010101), może to wystarczy, żeby układ regulacji wzmocnienia lepiej działał.

    0
  • #6 12 Sie 2013 09:50
    dondu
    Moderator Mikrokontrolery Projektowanie

    gray77 napisał:
    Wiem, że kodowanie Manchester dużo by pomogło ale nie bardzo wiem jak się do tego zabrać.
    Czy ktoś mnie naprowadzi na właściwą ścieżkę?

    Oczywiście ... opanuj najpierw podczerwień w formacie RC-5: http://mikrokontrolery.blogspot.com/2011/03/I...dczerwien-transmisja-standard-pilot-kurs.html

    0
  • #7 18 Sie 2013 14:59
    gray77
    Poziom 12  

    Dzięki wielkie za wszelkie sugestie. Przestudiowałem temat z RC5 ale nadal tej teorii nie potrafię przełożyć na realny program. Teraz widzę, ze komunikacja radiowa to nie taka łatwa bajka.

    Próbowałem wysyłać rożne kombinacje danych aby nad-odb się zsynchronizowały, jednak nic to nie daje. Odbiornik łapie co mu się żywnie podoba. Powiedzmy, że przeciętnie na 10 wysłanych paczek, odbiornik poprawnie odczytuje jedną, max dwie. Być może, moja para to najtańsza, która działać mogłaby gdyby eter nie był tak zaśmiecony.

    Jako, że jest to dodatek do reszty, zależy mi na czymś prostym i nie pochłaniającym czasu. Poćwiczę jeszcze z RFM12 (jak dojdzie) ale tu też pojawia się niedogodność komunikacyjna z modułem.

    Przeglądając ebay natrafiłem na coś takiego:
    Have one to sell? Sell it yourself
    Wireless RF Data Transmission Module 10mW RS232 CC1101 with Antenna 256Chanel 5V. Wygląda to jak gotowy, bezprzewodowy rs232 a na tym mi właśnie zależy.
    Z tego co widać na obrazkach i z opisu, na pokładzie jest atmega48, która wg mnie zajmuje się chyba całą komunikacją. Czy możecie mnie poprawić jeśli jestem w błędzie:
    1. Wysyłając UARTem przez ten moduł dane, nie muszę się troszczyć o kodowanie, synchronizację, itp?
    2. Jeśli odpowiedź na powyższe pytanie jest twierdząca, jest to RS tak jak przy połączeniu przewodami, tyle, że bez nich?

    3.1.18. Zabronione jest publikowanie informacji do źródeł, które po pewnym czasie wygasają (publikowanie odnośników do stron o charakterze krótkotrwałym).
    Dar.El

    0
  • #8 18 Sie 2013 19:58
    Marek_Skalski
    Moderator Projektowanie

    1 - Na jaką odległość chcesz przesyłać dane?
    2 - Jak wygląda środowisko pracy w sensie szumu elektromagnetycznego? (Szczere pole, mieszkanie z WiFi, samochód, linia produkcyjna, stacja radarowa...)
    3 - Jaka jest minimalna wymagana prędkość transmisji i opóźnienie czasowe?
    4 - Jakie jest zasilanie urządzeń tworzących sieć? (sieciowe 24h/dobę, akumulatorowe, przypięte do laptopa...)
    5 - Jakie są wymaganie dotyczące niezawodności i tolerowany poziom błędów? 24h/dobę przez 365 dni w roku z błędem 10ppm, czy może 2x dziennie z powtarzaniem do skutku aż zadziała?

    Od tego trzeba zacząć, a nie od przypadkowego nadajnika i odbiornika, z nastawieniem, że kodowanie Manchester rozwiąże wszystkie problemy, nie mając pojęcia o modulacji, kodowaniu, protokołach i przesyłaniu danych drogą radiową.

    Moduł o mocy 10mW to dość typowa pchełka. Jeżeli to chodzi na 2.4GHz (WiFi, Bluetooth,ZigBee, itp.), to może prześle dane na 200m, ale jak po drodze będzie zbrojona ściana/sufit i obok będzie pracował router WiFi, to efektywność spadnie do zera.

    0
  • #9 18 Sie 2013 22:26
    gray77
    Poziom 12  

    Ad. 1 - Wszystko będzie się odbywać w obrębie domu. Powiedzmy max odległość modułów to 10-15m - oczywiście trzeba uwzględnić również przeszkody typu ściana, strop.
    Ad. 2 - Szum jest wielki, to z pewnością. W tej chwili działa mocny router, kilka laptopów przez WiFi, strumieniowe video przez WiFi, etc.
    Ad. 3 - Prędkość nie musi być kosmiczna. Ot 4800 spokojnie wystarczy. Master będzie odpytywał slave'y kilkanaście razy na dobę. Zakładam do max 20 podrzędnych modułów. Co do opóźnień w czasie, jeśli odpowiedź przyjdzie po 2-3sek, nic się nie stanie.
    Ad.4 - Zasilanie sieciowe - każdy moduł będzie wyposażony w zasilacz. Nie przewiduję żadnego odbiornika, zasilanego bateryjnie.
    Ad.5 - Niezawodność, hmm. Dobrze by było, by raz nadane żądanie dotarło do odbiorcy a odbiorca odesłał odpowiedź. Zastanawiałem się też nad nieparzystą ilością powtórzeń (powiedzmy 3x) i jeśli większość pakietów jest zgodna, można przyjąć to za poprawną odpowiedź bądź zapytanie.

    Myślałem nad łącznością bluetooth ale nie da się połączyć kilkanaście układów w jedną sieć. Trzeba by było łączyć się z każdym z osobna. Najlepszą wydaje mi się opcją jest radio. Master nadaje adres i treść a konkretny odbiorca odpowiada.

    Nie szukam gotowego pomysłu ale tak jak pisałem, to jest coś nowego dla mnie i szukam podpowiedzi w co iść aby to spełniło założenia. Opisywany (znaleziony przeze mnie) moduł pracuje na 868MHz. Również chciałbym dobrać medium transmisyjne tak, by było skuteczne i było również w miarę proste do obsłużenia z poziomu Bascoma.

    0
  • #11 01 Paź 2013 22:49
    gray77
    Poziom 12  

    Witam ponownie.
    Po wielu zmaganiach, zmieniłem nad-odb na inne i znów pojawia się następna wątpliwość, którą przy nieocenionej pomocy kolegów z elektrody mam nadzieję rozwiać.
    Otóż zakupiłem taki oto odbiornik:

    [atmega][bascom] - Bezprzewodowy przesył danych i kodowanie Manchester

    i wszystko działa, aż miło. Chciałbym dokupić następne odbiorniki. Znalazłem coś takiego (linku nie podaję, bo moderator usunie, jeśli trzeba wyślę na PW):

    [atmega][bascom] - Bezprzewodowy przesył danych i kodowanie Manchester

    Mam następujące pytanie (jako że się nie znam na tym). Czy te moduły są do siebie podobne (lub takie same)? Oglądając płytki są one identyczne ale są to dwaj różni sprzedawcy i chciałbym mieć prawie 100% pewność że będą pracować jak zakładam.

    Dzięki wielkie za nieocenioną pomoc.

    0
  • #12 01 Paź 2013 23:12
    atom1477
    Poziom 43  

    No niestety musisz podać linki. Bo po samych zdjęciach nie można mieć pewności. Trzeba znać symbole modułów aby to stwierdzić.

    0
  • #13 01 Paź 2013 23:19
    gray77
    Poziom 12  

    Odnośnie modułów które już posiadam, niewiele mogę powiedzieć, oprócz tego, że są na 433MHz.
    Więc link do tego co już mam:
    - nadajnik
    - odbiornik (zdjęcie powyżej z przewodami dolutowanymi)

    Link do modułu, który znalazłem (jeśli się nada, to do zakupienia:
    - odbiornik do zakupienia? (zdjęcie bez przewodów)

    0
  • #14 02 Paź 2013 10:10
    atom1477
    Poziom 43  

    Tutaj wyglądają zupełnie inaczej.
    Ja proponuję użyć RFM12B, albo RFM01/02. Będzie taniej. I łatwiej kupić w Polsce.
    I większy zasięg. I da się ich używać jako "przedłużacz drutu", (czyli bez buforów FIFO). Czyli możesz przez nie puścić UARTa tak jak chcesz. I przy okazji znikają te wszystkie problemy z uruchomieniem tych modułów jakie widać na elektrodzie.
    Być może skomunikowały by się też z tymi modułami które już masz (jeżeli stosują modulację FSK).

    0
  • #15 02 Paź 2013 18:33
    gray77
    Poziom 12  

    atom1477 napisał:
    Ja proponuję użyć RFM12B, albo RFM01/02.

    Posiadam te moduly i spedzilem wiele (naprawde wiele) godzin na probach uruchomienia ich. Niestety bezskutecznie. Byc moze moja wiedza programistyczna nie jest az na tyle zaawansowana. Przegladalem mnostwo materialow, i testowalem wiele softu ale nijak nie moge ich uruchomic. Dlatego przeszedlem na cos prostszego.
    atom1477 napisał:
    I łatwiej kupić w Polsce.

    Z tym nie problem. Mieszkam w UK.
    atom1477 napisał:
    da się ich używać jako "przedłużacz drutu", (czyli bez buforów FIFO). Czyli możesz przez nie puścić UARTa tak jak chcesz. I przy okazji znikają te wszystkie problemy z uruchomieniem tych modułów jakie widać na elektrodzie.

    Czy posiadasz jakies przyklady lub linki jak ich uzyc wlasnie w ten sposob, bo juz naprawde stracilem troche wlosow no i zona tez zaczyna sie juz wsciekac :(
    O co mi chodzi, glownie o to, by wysylac krotkie stringi przez UART tak jak kablem, tyle ze bez niego.

    0
  • Pomocny post
    #16 02 Paź 2013 21:38
    atom1477
    Poziom 43  

    Tutaj masz do RFM01/02:
    Nadajnik RFM02:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Łączysz normalnie całe SPI, plus dodatkowo pin FSK do pinu TXD.

    Odbiornik RFM01:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Łączysz normalnie całe SPI, plus dodatkowo pin DATA do pinu RXD.

    W obu układach jest taka sama funkcja do wysyłania po SPI (oczywiście lepiej użyć sprzętowego SPI).
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Na początek do testów piny FSK i DATA możesz połączyć nie do procka tylko do przycisku i diody.
    A piny CLK możesz zbadać oscyloskopem. Częstotliwość na nich wynosi 1MHz przed inicjalizacją, i 10MHz po inicjalizacji. Pozwoli to sprawdzić czy inicjalizacja się udaje.
    Niestety kody musisz sam przerobić na BASCOMa.

    0
  • #17 04 Paź 2013 07:07
    robiw
    Poziom 26  

    Kup sobie druga książkę Mirka Kardasia i znajdziesz tam wszystko na temat tego typu transmisji i wielu modułów tego typu. Robiw

    0
  • #18 29 Paź 2013 21:34
    alazir
    Poziom 1  

    Witam.
    Posiadam kilka kompletów tego nadajnika i odbiornika (433MHz) i tak jak kolega wspominał w eterze mega dużo śmieci. Ale... znalazłem rozwiązanie tego problemu śmieci! Zmierzyłem miernikiem częstotliwości wyjście odbiornika podłączonego tylko do zasilania i u mnie były takie wyniki: od około 600Hz nawet do 3kHz sygnały śmieci które zmieniały się cyklicznie.

    Rozwiązanie problemu:
    Gdy na wejście nadajnika podasz sygnał jedynek i zer np. więcej niż 10kHz to odbiornika odbierze sygnał 10kHz + śmieci. I z moich obserwacji wynika, że śmieci prawie nie mają wpływu na odebrany sygnał. Do zliczania impulsów sygnału użyłem Atmega 8 i licznika, ustawiasz preskaler np. clk/8 a jakiejś pętli zliczasz impulsy umieszczając w zmiennej (rejestrze) gdy się wykona przerwanie licznika to przerwie zliczanie i zatrzymaj licznik , odczytaj ilość impulsów (bądź wyświetlasz) potem dodajesz jakiś warunek co ma zrobić gdy ma tyle i tyle impulsów a co ma zrobić gdy ich nie ma. Na końcu przerwania zerujesz zmienną (rejestr) zliczającą i odpalasz od nowa licznik i wraca do miejsca gdzie przerwało. U mnie sposób się sprawdza gdy nadaje jakiś sygnał śmieci powodują bardzo nie wielkie zmiany w ilości impulsów. Im wyższa częstotliwość nadawanego sygnału tym większa różnica między śmieciami z eteru a sygnałem nadawania. Kolejnym etapem może być kodowania binarnego typu 10kHz sygnału to "zero" a 20kHz to"jedynka" i tak bit po bicie można przesłać w dość szybkim czasie ( udało mi się uzyskać około 500bajtów / sek. co w zupełności wystarcza do prostych rzeczy np. sterowania czymś). Wszystko pisałem w assemblerze by kod był jak najmniejszy. Połączenia dla testów zrobiłem na płytce stykowej + kabelki :) Pozdrawiam

    0
  • #19 30 Paź 2013 11:05
    robiw
    Poziom 26  

    No proszę Cie. Liczenie impulsów ma być pewną metoda transmisji? Może nie doradzaj w ten sposób? Widziałeś kiedyś dokumentację popularnego kodeka sprzętowego? Mniemam, że raczej nie. Co do istoty problemu, zastosuj kodowanie Manchester i dodatkowe zabezpieczenia ramki i będzie 100% pewnie! robiw

    0