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.

[AVR] [BASCOM] Komunikacja radiowa

n01x 20 Lip 2008 09:13 8138 26
  • #1 20 Lip 2008 09:13
    n01x
    Poziom 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.

    0 26
  • #3 20 Lip 2008 09:23
    n01x
    Poziom 12  

    Probowalem. A jak odbierać znak w takim razie?

    0
  • #4 20 Lip 2008 09:36
    ZbeeGin
    Poziom 38  

    Są odpowiednie pary:
    PRINT - INPUT
    PRINTBIN - INPUTBIN
    PRINTHEX - INPUTHEX
    Jest jeszcze jedna para: SEROUT - SERIN gdzie zawsze określasz format transmisji.

    0
  • #5 20 Lip 2008 09:51
    n01x
    Poziom 12  

    Wszystko probowalem, niestety odbiera tylko 00 (binarnie).

    Może ktos ma jakies doswiadczenia z tym koderem/dekoderem?

    0
  • #6 20 Lip 2008 16:54
    wader_669
    Poziom 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

    0
  • #7 20 Lip 2008 17:07
    11111olo
    Poziom 43  

    wader_669 napisał:
    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 ;)

    0
  • #8 20 Lip 2008 19:31
    grysek
    Poziom 19  

    Cytat:
    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:

    Cytat:
    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

    0
  • #9 20 Lip 2008 22:19
    Anonymous
    Użytkownik usunął konto  
  • #10 21 Lip 2008 07:39
    n01x
    Poziom 12  

    Cytat:
    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.

    0
  • #11 22 Lip 2008 00:18
    Anonymous
    Użytkownik usunął konto  
  • #12 22 Lip 2008 07:50
    n01x
    Poziom 12  

    elektronik101 napisał:
    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.

    0
  • #13 22 Lip 2008 12:21
    wader_669
    Poziom 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 napisał:

    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

    0
  • #14 22 Lip 2008 12:53
    mirekk36
    Poziom 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 ;)

    0
  • #15 23 Lip 2008 11:55
    Anonymous
    Użytkownik usunął konto  
  • #16 24 Lip 2008 06:22
    n01x
    Poziom 12  

    elektronik101 napisał:
    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).

    0
  • #18 24 Lip 2008 09:56
    mirekk36
    Poziom 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

    0
  • #19 24 Lip 2008 10:03
    n01x
    Poziom 12  

    mirekk36 napisał:
    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".

    0
  • #20 24 Lip 2008 10:14
    mirekk36
    Poziom 42  

    n01x napisał:

    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

    0
  • #21 24 Lip 2008 10:17
    n01x
    Poziom 12  

    mirekk36 napisał:
    n01x napisał:

    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ć?

    0
  • #22 24 Lip 2008 10:33
    mirekk36
    Poziom 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

    0
  • #23 24 Lip 2008 18:11
    wader_669
    Poziom 28  

    A jaki tranzystor polecasz jakis najtanszy i najbradziej pospolity

    0
  • #24 24 Lip 2008 18:38
    Balu
    Poziom 38  

    Jakikolwiek?:)
    npn w to92 będzie dobry 817 847 (smd) 549 (to)

    0
  • #25 24 Lip 2008 18:56
    mirekk36
    Poziom 42  

    dokładnie jak mówi kolega Balu - jakikolwiek NPN małej mocy. Ja akurat wziąłem pierwszy lepszy jaki mi się nawinął pod rękę BC547

    0
  • #26 24 Lip 2008 22:27
    n01x
    Poziom 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?

    0
  • #27 03 Maj 2010 16:41
    Kubaand
    Poziom 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?

    Moderowany przez And!:

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

    0