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

Jak zacząć przesyłanie danych przez RS485 w Bascom? Konfiguracja i instrukcje

marusss 27 Kwi 2005 20:39 10374 26
REKLAMA
  • #1 1443130
    marusss
    Poziom 11  
    Posty: 24
    witam
    chce przesylac dane przez RS485. program pisze pod bascom
    przegladalem pomoc ale jakos niezabardzo wiem od czego zaczac :/ jak napisac program zeby wysylal i odbieral??? jak to wszystko skonfigurowac jakich instrukcji uzywac??? prosze pomocy!!!!!!!!!
    pozdrawiam Marek
  • REKLAMA
  • #2 1443151
    Karollo_82
    Poziom 15  
    Posty: 181
    Pomógł: 4
    Ocena: 7
    Dokładnie nie wiem, ale wydaje mi się że RS485 to tosamo co RS232 tylko ma inne poziomy napięć (jeżeli się mylę to niech ktoś mnie poprawi). Jeżeli tak jest, to do wysyłania danych zastosuj instrukcję (w Bascomie) Print, a do odebrania danych instrukcję Input. Musisz jeszcze oczywiście zastosować konwerter napięć UART na RS485 za pomocą np układu Max485.
  • #3 1443247
    yarpen2
    Poziom 22  
    Posty: 549
    Pomógł: 39
    Ocena: 39
    tańszy jest chyba układ 75175...
    masz dane wychodzące i dane przychodzące a dodatkowo masz kierunek transmisji i to tyle.
    od strony kompa potrzebujesz konwertera. np. http://www.mikster.pl/index.php?option=content&task=view&id=96&Itemid=2
    albo sam coś zrób ale pamiętaj że lepszy jest taki z automatycznym przełączaniem kierunku bo pod windą to z czasami różnie bywa...
    no i trzeba jeszcze mieć protokół transmisji np. modbus (niedawno ktoś wrzucił https://www.elektroda.pl/rtvforum/topic285461.html)
    w sumie sam sie tym jeszcze nie bawiłem ale zapowiada się że zacznę to możemy wymieniać doświadczenia

    pozdrawiam wszystkich !

    Marek
  • REKLAMA
  • #4 1443298
    marusss
    Poziom 11  
    Posty: 24
    ale ja potrzebuje komunikowac sie pomiedzy 3 uP :) nie musze tego do kompa podlanczac:) wybralem RS485 bo jest najlepszy jesli chodiz o mozliwosc laczenia ukladow, odleglosci przesylania danych i cena tez jest nie wygorowana:0 dlatego juz zakupilem MAX485 a wlasciwie to moje kosci sa ST485 (inny producent w srodku to samo:P)
    pozdrawiam
    marek
  • #5 1443346
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    No to nie pozostaje nic innego niż wizyta na stronie www.st.com i wciągnięcie pdf-a od ST485...
  • #6 1443380
    marusss
    Poziom 11  
    Posty: 24
    :/ ale w nocie katalogowej to pisze tylko jak go podlaczyc jak dzia i co wytrzymuje :D a ja chce wiedzec jak go obslugiwac pod bascom :) te komendy print i input.. i co wiecej?? co tam mam dokladnie wpisac? jak odbiore jakas dana to skad uP ma wiedziec co dostał?? przeciez to trzeba jakos adresowac chyba... pomozcie prosze!!!!!
    pozdrawiam
    Marek
  • #7 1443424
    Karollo_82
    Poziom 15  
    Posty: 181
    Pomógł: 4
    Ocena: 7
    Składnia:
    Input zmienna;


    gdzie: zmienna to nazwa zmiennej do której zostanie wpisana odebrana wartość

    Print zmienna;


    gdzie: zmienna to wartość którą chcesz wysłać przez UART

    Polecam help do Bascoma po polsku autorstwa p. Zbigniewa Gibka. Można znaleźć w necie.
  • REKLAMA
  • #8 1443437
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    RS485 to magistrala, gdzie nadawanie i odbiór odbywa się ta samą linią (halfduplex), cała reszta ze strony oprogramowania wygląda identycznie jak w RS232 na poziomie nadawania i odbioru. Na wyższym poziomie wybiera się rodzaj protokołu, zawierający sposób porozumiewania się urzadzeń, sposób obsługi kolizji, adresowanie, itd. Możesz napisać własny protokól, możesz wykorzystać istniejace. Mam jednak wrażenie, że opracowanie tego w Bascom będzie wysoce nieefektywne, gdyż moga się przy >2 liczbie urządzeń nawarstwiać problemy kolizji, które trzeba będzie jakoś rozwiązać, a procesor pewnie jeszcze bedzie miał inne zadania, niż obsługę UART. Ewentualnie trzeba będzie spowolnić transmisję.
  • #9 1443476
    marusss
    Poziom 11  
    Posty: 24
    i nie musze na samym pocztku kodu pisac jakiegos configu??? a mozna wysyłac 2 zmienne 1 instrukcja ??? chodzi o to zeby ustalic co w tej chwili wysyłamy i kazda zmienna miala by swoj odpoweidnik liczbowy w celu jej zidentyfikowania po odebraniu

    Light'­­­­I a dlaczego nie bascom??? to jaki protokol mam dac??? czy moj tok myslenia z tym identyfikowaneim jest poprawny??? mozna tak zrobic???
    pozdro
    marek
  • #10 1443534
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    marusss napisał:
    i nie musze na samym pocztku kodu pisac jakiegos configu???
    Trzeba skonfigurować peryferia I/O RS232 (baud, crystal...)
    marusss napisał:
    a mozna wysyłac 2 zmienne 1 instrukcja ??? chodzi o to zeby ustalic co w tej chwili wysyłamy i kazda zmienna miala by swoj odpoweidnik liczbowy w celu jej zidentyfikowania po odebraniu
    No to bym nazwał już zalążkiem protokołu, czyli opisu sposobu porozumiewania się urządzeń... ;)
    marusss napisał:
    Light'­­­­I a dlaczego nie bascom???
    Nie stwierdziłem tego kategorycznie, po prostu może się nie obejść bez wstawek asemblerowych
    marusss napisał:
    to jaki protokol mam dac???
    No już wyżej padło kilka propozycji.
    marusss napisał:
    czy moj tok myslenia z tym identyfikowaneim jest poprawny??? mozna tak zrobic???
    Nie przejmuj się za dużo, wszystko wyjdzie w praniu... ;)
  • REKLAMA
  • #11 1443685
    Hubert Kasiński
    Poziom 12  
    Posty: 18
    Ocena: 1
    Odsyłam do lektury "Elektroniki Praktycznej" nr 9 i 10/2004.
    Przykładowy system składa się z mastera i dwóch slave'ów na Mega8 + MAX485.
    Pozdrawiam, Hubert Kasiński
  • #12 1444069
    McRancor
    VIP Zasłużony dla elektroda
    Posty: 5326
    Pomógł: 479
    Ocena: 124
    Ja robiłem w bascomie RS485 na 32 urządzeniach. Jedyne problemy jakie napotkałem, to jeżeli program jest bardzo duży i skomplikowany, to bascom nie daje sobie z nim rady :)

    Musisz jedynie pamiętać o sterowaniu kierunkiem transmisji, cała reszta jest jak w zwykłym RSsie, możesz nawet użyć MPCM, ale bascom tego nie obsługuje. Wygląda to tak że jak chcesz coś wysłać, to ustawiasz pin podłączony do maxa, a jak nie to go zerujesz i wsio. Tylko jeden max może nadawać, przemyśl procedury arbitrażu, bo w momencie kiedy dwa maxy mają włączone transmitery, transmisja siada.

    PS. Pod pojęciem maxa mam na myśli transceiver 485
  • #14 1449159
    xPatryk
    Poziom 15  
    Posty: 208
    Ocena: 7
    chwilowo z fotek nici, bo nie mam kabla do cyfraka (piesek ;( ), ale dostalem od Huberta artykul (część pierwszą o Obsłudze RS485 w Bascomie)...
    Załączniki:
    • obs_uga_rs485_w_bascomie_cz____1_151.pdf (395.28 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #15 1457920
    marusss
    Poziom 11  
    Posty: 24
    cos mi to nie chodzi;/
    niewiem dlaczego probowalem zasilac na 6v na 12v ale nic
    jakies 3 razy cos wyslalo a tak to nic.
    niemam pojecia dlaczego.
    jak dam rowne 5v to mi sie zawiesza odbiornik
    sadze ze chodzi tu o rezystor ktorym sie laczy obie linie trnansmisji ja dalem 100R pozniej 220R ale to nic nie zmieniło
    pozdrawiam
    Marek
  • #16 3315468
    cukras
    Poziom 17  
    Posty: 295
    Pomógł: 14
    Ocena: 28
    Istotnie ,rezystor o którym piszesz słyży do dopasowania impedancji falowej lini.Przesłuch i odbicia mają wpływ na jakość transmicji.Jeżeli używasz kabki połączeniiowych podobnych do skrętki to impedancja falowa takiej lini jest około 120 Ohm , więc proponuje rezystor 120 Ohm
    pozdr
  • #17 3575009
    dj_volt
    Poziom 26  
    Posty: 847
    Pomógł: 77
    Ocena: 171
    W wersjo Bscom-AVR 1.11.8.3 dodano obsługę MAX485.
    Wystarczy
    CONFIG PRINT0 = pin
    CONFIG PRINT1 = pin
    Pytanie tylko jak dopiąć MAX'a do uP? (mam zamiar dopiąć kilka ATMega8 do PCta po RS485)

    W katalogu Samples/serial jest plik rs485.bas a w nim przykład programu.
  • #18 3783141
    MarasTej
    Poziom 12  
    Posty: 28
    przeczytałem artykuły w "Elektroniki Praktycznej" nr 9 i 10/2004 i polutowałem sobie 2 płyteczki z atmega8 z max485 tak jak to jest w tym artykule jednak jak przesyłam coś to niestety drugi mikrokontroler odbiera zawsze tyko pierwszy znak :| drugiego już nie chce tylko jakieś śmieci potem lecą. W jednym mikrokontrolerze korzystam z wewnętrznego kwarca w drugim mam zewnętrzny czy to może być przyczyną?
  • #19 3786445
    cukras
    Poziom 17  
    Posty: 295
    Pomógł: 14
    Ocena: 28
    Tak to może być przyczyna gdyż wewnętrzny RC nie jest zbyt dokładny,proponuje wymienić na kwarc najlepiej jak taki sam będzie co w tym drugim procu.Pamiętaj że prędkości transmisji muszą być takie same w obu procach
    pzdr
  • #20 3788589
    dj_volt
    Poziom 26  
    Posty: 847
    Pomógł: 77
    Ocena: 171
    Ja testowalem RS485 w układzie ATmega8 + peryferia + MAX485 + kwarc 4MHz (z kondziorami 2x27p do masy) oraz przy wykorzystaniu wewnetrznego RC. Przy predkosci 9600bps transmisja z PC poprzez fabryczny konwerter byla OK!
    Sprawdz, czy masz terminatory na lini. Z kazdej strony na zakonczeniu magistrali musza byc oporniki 120 Ohm zwierajace koncowki A i B.
    Poza tym powinno dzialac.
    Wrzuc kawalek kodu, zobaczymy co i jak.
  • #21 3791624
    MarasTej
    Poziom 12  
    Posty: 28
    oki taki mam kod może coś tu mi nie gra :)

    nadajnik
    
    ' rs485 dla atmega8 - testowy nadajnik
    
    $regfile = "m8def.dat"
    
    $crystal = 1000000
    $baud = 9600
    
    Config Portd.2 = Output
    
    Config Serialin = Buffered , Size = 15
    
    Declare Sub Odbior
    
    Dim Lok As Bit
    Dim Test As Bit
    Dim Zn As String * 1
    Dim I As Integer
    Dim Adr_s As String * 5
    Dim Adres As Byte
    Dim Il_zn As Byte
    
    Kierunek Alias Portd.2
    Enable Interrupts
    Reset Kierunek
    Test = 1
    
    Do
             Wait 2
             Gosub Nadaj
    Loop
    End                                                         'end program
    
    Nadaj:
          Set Kierunek
          Waitms 1
          Print "{010}d"
          Waitms 1
          Reset Kierunek
    Return


    i odbiornik
    
    ' rs485 dla atmega8 - testowy odbiornik
    
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    $baud = 9600
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
    
    Config Pind.2 = Output
    Config Portc.5 = Output                               ' diodki
    Config Portc.4 = Output
          Portc.5 = 0
          Portc.4 = 0
    Config Serialin = Buffered , Size = 15
    
    Declare Sub Odbior
    
    Dim Zn As String * 1
    Dim I As Integer
    Dim Adr_s As String * 5
    Dim Text As String * 4
    Dim Adres As Byte
    Dim Il_zn As Byte
    
    
    Kierunek Alias Portd.2                                      'zmienia kierunek transmisji
    
    Enable Interrupts
    
    
    Cls
    Reset Kierunek
    Lcd "komunikacja"
    Lowerline : Lcd "rs485 czekam..."
    
    Do
       Wait 1
       Call Odbior
       Waitms 500
       Reset Portc.5
    Loop
    End                                                         'end program
    
    Sub Odbior:
       Cls
       Zn = Inkey()
       If Zn = Chr(10) Then
          Zn = Inkey()
          If Zn = "d" Then
             Lcd "doszlo d :)"
             Set Portc.4
          Else
             Lcd "doszedl 1 znak"
          End If
          Set Portc.5
       Else
          Lcd "nie doszlo"
       End If
    End Sub
  • #22 3799901
    maniio
    Poziom 14  
    Posty: 149
    Pomógł: 3
    Ocena: 9
    marusss napisał:
    cos mi to nie chodzi;/
    niewiem dlaczego probowalem zasilac na 6v na 12v ale nic
    jakies 3 razy cos wyslalo a tak to nic.
    niemam pojecia dlaczego.
    jak dam rowne 5v to mi sie zawiesza odbiornik
    sadze ze chodzi tu o rezystor ktorym sie laczy obie linie trnansmisji ja dalem 100R pozniej 220R ale to nic nie zmieniło
    pozdrawiam
    Marek


    dobrze by bylo jakbys tez podciagi zrobil na A i B, czyli rezystor ok. 2k2 do Vcc i GND no i pomiedzy A i B daj tak jak ktos wspomnial 120.

    pozdrawiam
  • #23 3800555
    MarasTej
    Poziom 12  
    Posty: 28
    U mnie w końcu wszystko śmiga, :) i właściwie to za dużo nie zrobiłem bo po prostu wyłączyłem w tym jednym ten zewnętrzny kwarc i włączyłem wewnętrzny RC i wszystko piknie działa. Wniosek z tego taki ze najlepiej jak uP są tak samo taktowane
  • #24 3803862
    MarasTej
    Poziom 12  
    Posty: 28
    kurcze jednak mi nie działa przesyła maksymalnie 5 znaków potem śmieci lecą :| może coś nie tak połączyłem. Mam teraz 3 uP atmega8 z kwarcami 8MHz i MAX485 w masterze wpiąłem między A B MAX'a485 R120ohm i do linii B +5V przez R560ohm i GND przez R560ohm do A. Max485 w środkowym uP normalnie jest podpięty A do A B do B i końcowy ma pomiędzy A B opornik 120ohm. Pomóżcie bo nie mam pojęcia czemu mi to nie działa dobrze :(. Zasilanie MAX485 starczy 5V? Czy zasilanie do wszystkich max485 musi być to samo?? czyli oprócz A B trzeba też łączyć +5V i GND?

    Dodano po 2 [godziny] 9 [minuty]:

    Hehe chyba sam ze sobą pisze :) ale udało mi się podpięcie wspólnej masy do wszystkich max485 i dokładne polutowanie pomogło thx :D DZIAŁA !!! :D
  • #25 4027653
    KaJakKrzysztof
    Poziom 14  
    Posty: 143
    Ocena: 5
    a jaki polecacie fabryczny konwerter 232/485 do PC? taki zebym nie zbankrutowal ;)
  • #26 4028103
    dj_volt
    Poziom 26  
    Posty: 847
    Pomógł: 77
    Ocena: 171
    Jak do PC to polecam GV-NET w wersji wewnętrznej do nabycia w gvpolska.com.pl
    Wystarczy dopiac zasilanie (zlacze jak POWER dla FDD :-) i (na zewnatrz obudowy) kabelef do RS232C. Postaram sie wrzucic fotki jak to wyglada. Jutro poszukam - gdzies sie w firmie wala taki :-)
  • #27 4028298
    KaJakKrzysztof
    Poziom 14  
    Posty: 143
    Ocena: 5
    super! a jaka jest jego cena? rozumiem że ma automatyczne przełączanie kierunku? czekam na haslo bo zarejestrowalem sie w tym sklepie...

Podsumowanie tematu

✨ Dyskusja dotyczy rozpoczęcia przesyłania danych przez interfejs RS485 w środowisku Bascom dla mikrokontrolerów AVR, głównie ATmega8. RS485 jest magistralą half-duplex, gdzie nadawanie i odbiór odbywa się tą samą linią, różniącą się od RS232 poziomami napięć. Do konwersji sygnałów UART na RS485 zaleca się użycie układów MAX485 lub tańszego 75175, z automatycznym przełączaniem kierunku transmisji, co ułatwia obsługę. Konfiguracja w Bascom obejmuje ustawienie prędkości transmisji (baud rate), częstotliwości kwarcu oraz sterowanie kierunkiem transmisji poprzez dedykowany pin mikrokontrolera. Do wysyłania danych stosuje się instrukcję Print, a do odbioru Input. Wskazane jest stosowanie protokołu komunikacyjnego (np. Modbus lub własny) z adresowaniem i obsługą kolizji, zwłaszcza przy większej liczbie urządzeń. Problemy z transmisją mogą wynikać z niezgodności taktowania (np. różne kwarce lub wewnętrzne RC), braku terminatorów (rezystory 120 Ω na końcach linii A i B), złego uziemienia lub niewłaściwego zasilania układów MAX485 (zwykle 5 V). Zaleca się stosowanie rezystorów dopasowujących impedancję linii (około 120 Ω) oraz rezystorów podciągających (np. 2,2 kΩ do Vcc i GND). W Bascomie od wersji 1.11.8.3 dodano wsparcie dla MAX485 z konfiguracją pinów PRINT0 i PRINT1. Przykładowe kody nadajnika i odbiornika zostały udostępnione, jednak wymagają dopracowania i synchronizacji parametrów. Do testów i nauki polecane są artykuły z "Elektroniki Praktycznej" nr 9 i 10/2004. W przypadku podłączenia do komputera PC, rekomendowane są gotowe konwertery RS232/RS485, np. GV-NET, z automatycznym przełączaniem kierunku transmisji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA