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

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

gray77 11 Sie 2013 18:28 6135 18
  • #1 12618062
    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ł?
  • #2 12618088
    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.
    Pomogłem? Kup mi kawę.
  • #3 12618150
    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.
  • #4 12619564
    2rs232
    Poziom 18  
    Możesz też użyć kodowania sprzętowego za pomocą np. MC145026,MC145027.
  • #5 12619637
    Piotr Piechota
    Poziom 22  
    Spróbuj co drugi bajt wysyłać 0x55 (binarne 01010101), może to wystarczy, żeby układ regulacji wzmocnienia lepiej działał.
  • #6 12619744
    dondu
    Moderator na urlopie...
    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
  • #7 12640522
    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
  • #8 12641535
    Konto nie istnieje
    Poziom 1  
  • #9 12642190
    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.
  • #11 12799394
    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.
  • #12 12799487
    Konto nie istnieje
    Poziom 1  
  • #13 12799514
    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)
  • #14 12800179
    Konto nie istnieje
    Poziom 1  
  • #15 12801711
    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.
  • Pomocny post
    #16 12802099
    Konto nie istnieje
    Poziom 1  
  • #17 12806683
    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
  • #18 12895067
    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
  • #19 12896301
    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
REKLAMA