Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[AVR] [BASCOM] Komunikacja radiowa

n01x 20 Jul 2008 09:13 8579 26
  • #1
    n01x
    Level 12  
    Witam,

    Zrobilem sobie uklady do komunikowania sie droga radiowa - nadajnik, odbiornik (Telecontrolli) oraz koder M45026 i dekoder MC145027P.
    Wszystko mniej wiecej dziala - po podciagnieciu pinu TE (transmit enable) sygnal zostaje wyslany do dekodera (pin VT - valid transmition - przechodzi na chwile w satan wysoki). Problem mam tylko z przesylem konkretnych danych. Probowalem wyslac sprzetowym UART'em (w bascomie instrukcja printbin) jakas cyfre, niestety drugi procesor nic nie odbiera. Pin dataout przechodzi w stan wysoki i tyle. Czy ktos robil cos kiedys na tych kosciach Motoroli? A moze nie da sie przeslac danych UARTem?

    PRosze o pomoc.
    [28-30.06.2022, targi] PowerUP EXPO 2022 - zasilanie w elektronice. Zarejestruj się za darmo
  • #2
    11111olo
    Level 42  
    PRINTBIN? A próbowałeś prościej?
    PRINT CHR(x)
    Gdzie x jest daną typu BYTE.
  • #3
    n01x
    Level 12  
    Probowalem. A jak odbierać znak w takim razie?
  • #4
    ZbeeGin
    Level 39  
    Są odpowiednie pary:
    PRINT - INPUT
    PRINTBIN - INPUTBIN
    PRINTHEX - INPUTHEX
    Jest jeszcze jedna para: SEROUT - SERIN gdzie zawsze określasz format transmisji.
  • #5
    n01x
    Level 12  
    Wszystko probowalem, niestety odbiera tylko 00 (binarnie).

    Może ktos ma jakies doswiadczenia z tym koderem/dekoderem?
  • #6
    wader_669
    Level 28  
    hmm a moze wysylaj po jednym bit'cie tylko rob odstepy czasowe pomiedzy jednym wyslanym bit'em a drugim.
    Moze zadziala :D

    Dodano po 4 [minuty]:

    znalazles jakies datasheet po angielsku bo ja znajduje same po chinsku czy japonsku
  • #7
    11111olo
    Level 42  
    wader_669 wrote:
    hmm a moze wysylaj po jednym bit'cie tylko rob odstepy czasowe pomiedzy jednym wyslanym bit'em a drugim.
    Moze zadziala :D

    Dodano po 4 [minuty]:

    znalazles jakies datasheet po angielsku bo ja znajduje same po chinsku czy japonsku


    Nie dość że Kolega nie zna regulaminu Elektrody to jeszcze do tego bzdury wypisuje. RS232 wysyła bit po bicie!
    Można co najwyżej spróbować wysyłać wolniej ;)
  • #8
    grysek
    Level 19  
    Quote:
    hmm a moze wysylaj po jednym bit'cie tylko rob odstepy czasowe pomiedzy jednym wyslanym bit'em a drugim.
    Moze zadziala :D


    Koledze chyba raczej chodziło o to aby samemu napisac procedure która by wysyłała bit po bicie
    Cos tego typu:

    Quote:
    Set Dta
    Reset Dta
    Set Dta
    Dta = Dane.0
    Reset Dta
    Set Dta
    Dta = Dane.1
    Reset Dta
    Set Dta
    Dta = Dane.2
    Reset Dta
    Set Dta
    Dta = Dane.3
    Reset Dta
    Set Dta
    Dta = Dane.4
    Reset Dta
    Set Dta
    Dta = Dane.5
    Reset Dta
    Set Dta
    Dta = Dane.6
    Reset Dta
    Set Dta
    Dta = Dane.7
    Reset Dta
  • #9
    User removed account
    User removed account  
  • #10
    n01x
    Level 12  
    Quote:
    Koledze chyba raczej chodziło o to aby samemu napisac procedure która by wysyłała bit po bicie
    Cos tego typu:

    Set Dta
    Reset Dta
    Set Dta
    Dta = Dane.0
    Reset Dta
    Set Dta
    Dta = Dane.1
    Reset Dta
    Set Dta
    Dta = Dane.2
    Reset Dta
    Set Dta
    Dta = Dane.3
    Reset Dta
    Set Dta
    Dta = Dane.4
    Reset Dta
    Set Dta
    Dta = Dane.5
    Reset Dta
    Set Dta
    Dta = Dane.6
    Reset Dta
    Set Dta
    Dta = Dane.7
    Reset Dta



    Dokladnie tak to zrobie.

    Jak by ktos mial jakis pomysl jak to uproscic (wysylac dane np po RSie) to bardzo prosze o informacje.

    Pozdrawiam
    n01x

    PS.
    Instrukcje mam po angielsku.
  • #11
    User removed account
    User removed account  
  • #12
    n01x
    Level 12  
    elektronik101 wrote:
    Witam.
    Uart-em poprzez nadajnik FM lub AM bedzie prościej.
    Puszczasz np :
    PRINT 48
    Po drugiej stronie dajesz INKEY():D i lcd chr(zmienna).
    I masz "0" na lcd.
    Pozdrawiam.


    Drukuje 48 a odbieram 0?
    Wolalbym tak: drukuje 48 odbieram 48, albo chociaż 110000.
  • #13
    wader_669
    Level 28  
    juz chyba rozumiem co jest grane po prostu drukuje ci 48 w dziesietnej a odbiera i pokazuje tobie w char bo dziesietnie 48 = char "0"
    w helpie masz jak zamienic char na dec.

    Dodano po 8 [minuty]:

    (c) Zbigniew Gibek, 2002-2005 (c) MCS Electronics, 1999-2005 wrote:

    zmienna = STR( x )

    gdzie:

    zmienna zmienna typu String do której wpisany będzie wynik działania funkcji,
    x dowolna zmienna lub stała, poddana konwersji.

    ____________________________________________________

    zmienna = BIN( liczba )

    gdzie:

    zmienna zmienna tekstowa, w której znajdzie się liczba zapisana w formacie binarnym,
    liczba liczba poddana konwersji, może być stałą lub zmienną typu Integer, Word, Long czy Byte.

    _____________________________________________________

    PRINT CHR( zmienna2 )
    zmienna1 = CHR( zmienna2 )

    gdzie:

    zmienna2 zmienna numeryczna lub stała,
    zmienna1 zmienna tekstowa.



    jest ich tam wiecej poszukaj ktore tobie pasuje
  • #14
    mirekk36
    Level 42  
    Witam,

    jak chcesz sobie zrobić transmisję radiową opartą o RS232 to daj sobie spokój z tymi kocimi koderami/dekoderami , namieszałeś sporo bo próbujesz w tor transmisji RS232 wstawiać koder i enkoder typu Manchester (nie uda ci się tego ożenić niestety)

    więc, lepiej weź się za w 100% sprawdzone rozwiązanie czyli:

    1. Telecontrolli-Nadajnik-RTFQ2-433MHz-R - kup sobie taki nadajnik

    2. Telecontrolli-Odbiornik-RRFQ1-433MHz - kup sobie taki odbiornik

    chyba że właśnie takie posiadasz. Następnie dodaj na wejściu nadajnika jednotranzystorowy inwerter sygnału, natomiast na wyjściu odbiornika też taki jednotranzystorowy inwerter

    następnie możesz sobie spokojnie bez żadnych kocich koderów typu MC podłączyć na wejście nadajnika(przez ten tranzystor) sygnał TxD bezpośrednio z procka z portu UART a do wyjścia odbiornika czyli z tego inwertera możesz podłączyć bezpośrednio sygnał do pinu RxD drugiego procka.

    Dzięki takiej konfiguracji możesz nadawać bezpośrednio i co tylko chcesz za pomocą PRINT bez żadnych kombinacji - z jednym tylko ograniczeniem (mało uciążliwym no chyba że masz bardzo wysokie wymagania) - prędkość transmisji czyli $baud musisz ustawić maksymalnie na 4800bps. To spokojnie wystracza do większości zastosowań a transmisja po doczepieniu krótkich antenek ze zwykłego kabelka ślicznie na tej prędkości śmiga i po zawodach.

    osobiście to testowałem i działałem na tym a uprzednio informacje uzyskałem od kolegi JStan też tu z elektrody

    więc śmiało do roboty ;)
  • #15
    User removed account
    User removed account  
  • #16
    n01x
    Level 12  
    elektronik101 wrote:
    Dałem Ci tylko przykład.
    Oczywiście jak napiszesz lcd zmienna zamiast lcd chr(zmienna) to wyślesz 48 i bedziesz miał 48.Żadna filozofia.Potem daj np:portd = ta zmienna i masz na porcie 00110000.

    Dodano po 10 [minuty]:

    A co da transmisji.
    Mój "system" działał przy baud 9600 i 19200.
    Robiłem to ze 2 lata temu. Wszystko na tranzystorach, prócz max-a oczywiscie.


    Czyli reasunując - da sie przez te kości motoroli wyslać konkretne dane czy trzeba kombinować (nie koniecznie przez URART).

    Mirrek36 - rozwiązanie jest dobre, ale chodzi mi bardziej o cene - ja mam te tansze moduły radiowe po ok 12 zł + koder/dekoder po 4 zł - Twoje moduły kosztuja ok 28 zł/szt (o ile dobrze pamiętam).
  • #18
    mirekk36
    Level 42  
    n01x -> tak masz rację te o których ja pisałem są rzeczywiście droższe tyle tylko, że prosta transmisja bez żadnych po drodze półśrodków jest 100razy lepsza. Zresztą jak się doliczy te enkodery + czas na obrobienie tego i o wiele bardziej mizerne efekty co do możliwości transmisji to wtedy dopiero widać różnicę

    jednak masz rację, że nie zawsze aż taka "szybka" transmisja bywa potrzebna i wystarczy tak jak to można zorganizować z tymi enkoderami.

    ale przy okazji - podaj mi dokładny typ swojej pary nadajnik i odbiornik????

    i może też spróbuj dać te proste inwerterki na jednym tranzystorze - może na twoich to też będzie ładnie śmigać??? ja z chęcią dowiedziałbym się czy ci to wyjdzie bo wtedy też bym kombinował z tymi tańszymi wersjami nadajnik/odbiornik Telecontrolli

    pozdrówka
  • #19
    n01x
    Level 12  
    mirekk36 wrote:
    n01x -> tak masz rację te o których ja pisałem są rzeczywiście droższe tyle tylko, że prosta transmisja bez żadnych po drodze półśrodków jest 100razy lepsza. Zresztą jak się doliczy te enkodery + czas na obrobienie tego i o wiele bardziej mizerne efekty co do możliwości transmisji to wtedy dopiero widać różnicę

    jednak masz rację, że nie zawsze aż taka "szybka" transmisja bywa potrzebna i wystarczy tak jak to można zorganizować z tymi enkoderami.

    ale przy okazji - podaj mi dokładny typ swojej pary nadajnik i odbiornik????

    i może też spróbuj dać te proste inwerterki na jednym tranzystorze - może na twoich to też będzie ładnie śmigać??? ja z chęcią dowiedziałbym się czy ci to wyjdzie bo wtedy też bym kombinował z tymi tańszymi wersjami nadajnik/odbiornik Telecontrolli

    pozdrówka



    To jest dokładnie ta para z rysunku poglądowego seba_x: rt4 i rr3.
    Bez kodera/dekodera- czasami dziala. Ale wystarczy zbliżyć telefon, albo cokolwiek innego (ręke, lutownice itp) - i robi co chce. Czasami łapie tez "z powietrza".
  • #20
    mirekk36
    Level 42  
    n01x wrote:

    Ale wystarczy zbliżyć telefon, albo cokolwiek innego (ręke, lutownice itp) - i robi co chce. Czasami łapie tez "z powietrza".


    no ok rozumiem, tylko czy próbowałeś robić inwersję sygnału pomiędzy prockkowym TxD a nadajnikiem oraz pomiędzy drugim prockiem RxD a odbiornikiem? to wydaje się być bardzo istotne - bo bez tej inwersji nawet te nadajniki droższe, które ja mam zachowują się dziwacznie - więc może spróbuj
  • #21
    n01x
    Level 12  
    mirekk36 wrote:
    n01x wrote:

    Ale wystarczy zbliżyć telefon, albo cokolwiek innego (ręke, lutownice itp) - i robi co chce. Czasami łapie tez "z powietrza".


    no ok rozumiem, tylko czy próbowałeś robić inwersję sygnału pomiędzy prockkowym TxD a nadajnikiem oraz pomiędzy drugim prockiem RxD a odbiornikiem? to wydaje się być bardzo istotne - bo bez tej inwersji nawet te nadajniki droższe, które ja mam zachowują się dziwacznie - więc może spróbuj


    Czym to zrobić?
  • #22
    mirekk36
    Level 42  
    hmm no tak:

    1. NADAJNIK:

    czyli z nóżki TxD (UART) pierwszego procka, który nadaje - podajesz sygnał przez rezystor powiedzmy 2,2K na bazę tranzystorka NPN. Jego emiter podłączasz do GND natomiast z kolektora, który jest podłączony przez rezystor powiedzmyok 4,7K do VCC podajesz sygnał bezpośrednio na wejście swojego nadajnika Telecontrolli (dzięki czemu dokonujesz prostej inwersji sygnału - to chyba zrozumiałe)

    2. ODBIORNIK:

    wyjście z twojego odbiornika robisz analogicznie - czyli podajesz sygnał na rezystorek 2,2K, który dalej idzie do bazy tranzystorka NPN. Jego emiter do GND a kolektor do VCC przez rezystor 4,7K. I też z tego kolektora bezpośrednio dajesz sygnał na wejście RxD (UART) procka (dzięki temu ponownie dokonywana jest inwersja sygnału czyli wszystko wraca do normy - ale dzięki temu nie świrują już nadajniki i odbiorniki)

    aha wtedy w programie zacznij testy od ustawienia sobie prędkości $baud = 4800 (o ile robisz to w Bascomie) a jeśli w czymś innym to inny zapis trza zrobić - wiadomo

    jako antenki dajesz jakieś druciki po ok 10cm i być może u ciebie też zacznie wszystko pięknie śmigać

    robisz wtedy w procku nadajniku PRINT "cos tam cos tam" i powinno to obojętnie co to będzie dolecieć do odbiornika. A w odbiorniku robisz sobie na początku prosty INPUT zmienna - i potem jej zawartość wyświetlasz sobie na jakimś LCD albo nie wiem w zależności od przesłanej danej migasz sobie diodką LED
  • #23
    wader_669
    Level 28  
    A jaki tranzystor polecasz jakis najtanszy i najbradziej pospolity
  • #26
    n01x
    Level 12  
    Zrobiłem to programowo. Wysyłanie jednego bajtu zajmuje ok 1,2 sek ale do prosztego sterowania zupełnie wystarczy (w zasadzie jeden bit wystarczy bez jakichkolwiek programów). Jak ktoś ma pomysł jak to przyspieszyć to czekam na sugestie :)

    Nadajnik:
    Code:
    $regfile "attiny2313.dat"
    
    $crystal = 8000000


    Dim Code As Byte
    Declare Sub Send(dim Code As Byte)


    Portb = &B00001000
    Portd = &B01000000
    Ddrb = &B00001000
    Ddrd = &B01100001


    Do

    If Pind.6 = 0 Then
       Waitus 200
       If Pind.6 = 0 Then
          Code = 127
          Send Code
          While Pind.6 = 0
          Wend
       End If
    End If

    Loop


    End




    Sub Send()
    Dim Position As Byte , Temp_1 As Byte , Bit_value As Bit

    Position = Code

    For Temp_1 = 0 To 7

       Bit_value = Position.7
       Portb.3 = 0
       Waitus 1
       Portd.0 = Bit_value
       Portb.3 = 1
       Shift Position , Left , 1
       Waitms 150

    Next Temp_1

    End Sub



    Odbiornik:
    Code:
    $regfile "attiny2313.dat"
    
    $crystal = 8000000



    Dim Code As Byte , Temp As Byte , Bit_value As Bit
    Temp = 0

    Ddrb.5 = 0

    Do

    While Pind.2 = 0 'czeka na VT
    Wend

    Shift Code , Left , 1
    Bit_value = Pinb.5
    Code.0 = Bit_value
    Waitms 150
    Incr Temp


    If Temp > 7 Then
       Temp = 0
       Writeeeprom Code , 5
    End If

    Loop



    End


    Jak by ktoś sie zainteresował i miał problemy z rozszyfrowaniem kodu to pytać.
    Kod jest testowy dlatego niektóre rzeczy są tam zbędne (nie mam LCD wiec zczytuje z epromu).


    n01x


    Można by to zrobić na przerwaniach w sumie, bo mam ustawiony czas 150ms - w tym czasie procesor wykrywa zmiane stanów portu. Mniejszcze opóźnienie juz nie daje efektu. Może by to zrobić na zbocze opadające i rosnące?
  • #27
    Kubaand
    Level 10  
    Witam mam pytanie czy po dodaniu tych tranzystorków działa dobrze przesył danych?
    Buduję sobie termometr bezprzewodowy na takich modułach jak mowa, ale niestety bez rezultatu czyli jeżeli wyślę cyfrę 263 to odbiornik ją odbierze a nie jakieś bzdury?

    Moderated By And!:

    Post raportowany oraz zmieniony,
    proszę pisać bez błędów i literówek,
    oraz zwracać uwagę na datę ostatniego postu.