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 zrealizować transmisję RS485 między dwoma ATtiny2313 w BASCOM-AVR?

07 Lip 2009 22:45 7216 6
REKLAMA
  • #1 6750898
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #2 6756550
    mirley
    Poziom 17  
    Posty: 392
    Pomógł: 13
    Ocena: 1067
    Nie pisałem nic na Rs485 ale mam kilka uwag do programu. Zacznij najpierw od poczytania w helpie bascoma, co robi dokładnie instrukcja Inkey() a dowiesz się że odbiera 1 bajt (jeden znak) z bufora. Sprawdzanie więc warunku B = "zaswiec" nie ma najmniejszego sensu. Nie wiem też po co przełączasz tyle razy układ w nadajnik <>odbiornik:

    
    ......
    Reset Re_de                                                 'przelaczenie konwertera rs485 na odbiornik
    Set Re_de                                                   'przelaczenie konwertera rs485 na nadajnik
    
    Do
    
    Reset Re_de                                                 'przelaczenie konwertera rs485 na odbiornik
    
    
    Set Re_de       
    .....
    



    Zostaw na początku tylko Set Re_de w nadajniku a Reset Re_de i to przed pętlą do loop. W pętli głównej nadajnika napisz:

    
    wait 1
    a = 1
    printbin a 
    wait 1
    a = 2
    printbin a
    

    Co sekundę wysyła raz 1 a raz 0, binarnie.

    W odbiorniku napisz w pętli głównej:

    
    B = Inkey()
    If B <>0 Then
     if B = 1 then Pind.5 = 0  else Pind.5 = 1
    End If 
    


    od takiego programu ja bym rozpoczął zabawę, oczywiście konfiguracja portów na początku programu i zmienna a w nadajniku typu byte
  • REKLAMA
  • #3 6756650
    papikus
    Poziom 15  
    Posty: 42
    Pomógł: 13
    Stosowanie konwerterów rs485 w tym przypadku nie ma najmniejszego sensu, ćwiczenia z tym protokołem to zaimplementowanie interfejsu komunikacji, a nie konwersja poziomu sygnałów.
    Poczytaj o komunikacji pod Bascomem skoro od niego zaczynasz. A potem dokładaj kolejne klocki.
  • REKLAMA
  • #4 6760951
    papikus
    Poziom 15  
    Posty: 42
    Pomógł: 13
    Cytat:
    Uwaga! Na wyżej zamieszczonym schemacie znajduje się błąd polegający na niepoprawnym połączeniu lini transmisyjnych oznaczonych literami "A" oraz "B". Obie linie należy skrosować.


    przepraszam że tak zapytam, ale od kiedy linie z RS485 się krosuje?
  • #5 6762770
    Konto nie istnieje
    Konto nie istnieje  
  • #6 6763133
    mirley
    Poziom 17  
    Posty: 392
    Pomógł: 13
    Ocena: 1067
    Napisz odbiornik w taki sposób i zobacz jaki jest efekt:

    
    
    Re_de Alias Pind.2         'przypisanie aliasu linii pd.2, re_de steruje kierunkiem transmisji konwertera
    Dim B As Byte
    
    Reset Re_de            'przelaczenie konwertera rs485 na odbiornik
    Config Pind.5 = Output         'konfiguracja pinu 5 portu D jako wyjście - dioda D1
    Config Pind.6 = Output         'konfiguracja pinu 6 portu D jako wyjście - dioda D2
    
    Set Pind.5            'ustawienie stanu początkowego PD.5
    Set Pind.6            'ustawienie stanu początkowego PD.5
    
    Do
    
    B = Inkey()            'obsługa diody pierwszej
    If B <> 0 Then
     If B = 1 Then Pind.5 = 0 
     If B = 2 Then Pind.5 = 1 
     If B = 3 Then Pind.6 = 0 
     If B = 4 Then Pind.6 = 1 
    End If
    
    Loop
    End
    


    Teraz taki odbiornik po odebraniu 1 właczy diodę a po odebraniu 2 ją wyłaczy, tak samo 3 i 4 dla drugiego kanału

    Układ nadawczy:

    
    Re_de Alias Pind.2         'przypisanie aliasu linii pd.2, re_de steruje kierunkiem transmisji konwertera
    Dim A As Byte
    Dim Stan1 as bit, Stan2 as bit
    
    
    Set Re_de            'przelaczenie konwertera rs485 na nadajnik
    
    Config Pind.4 = Input         'konfiguracja pinu 4 portu D jako wyjście - przycisk pierwszy
    Config Pind.5 = Input         'konfiguracja pinu 5 portu D jako wyjście - przycisk drugi
    
    Do
    
    
    If Pind.4 = 0 Then         'obsługa przycisku pierwszego
    toggle Stan1
    if Stan1 = 0 then A = 1 else  A=2
    Printbin A
    Wait 1
    End If
    
    If Pind.5 = 0 Then         'obsługa przycisku drugiego
    toggle Stan2
    if Stan2 = 0 then A = 3 else  A=4
    Printbin A
    Wait 1
    End If
    
    Loop
    End 
    


    Wydaje mi się że teraz powinno działać :)
  • REKLAMA
  • #7 7291282
    kubusek32
    Poziom 11  
    Posty: 34
    Ocena: 2
    Witam, mam ten sam problem, połączyłem układ tak jak w pierwszym poście.
    Kod nadajnika:
    
    $regfile "attiny2313.dat"
    $crystal = 4000000
    Dim A As Byte
    A = 0
    
    Config Portd.2 = Output
    Re_de Alias Portd.2
    Set Re_de
    Do
       Toggle A
       Printbin A
       Wait 1
    Loop
    End
    

    Kod odbiornika:
    
    $regfile "attiny2313.dat"
    $crystal = 4000000
    Dim A As Byte
    A = 0
    
    Re_de Alias Portd.2
    Config Portd.2 = Output
    Config Portb = Output
    Portb = 0
    
    Reset Re_de
    Do
       A = Inkey()
       Portb = A
    Loop
    End
    


    Próbowałem też dać rezystor 120 om między A i B (wtedy stabilizator strasznie się grzeje) ale dalej dioda nie mruga (podłączona pod nóżkę z portu B). Dodam, że nie mam kwarcu tylko taktuję wewnętrznym RC.

Podsumowanie tematu

✨ Dyskusja dotyczy realizacji transmisji RS485 między dwoma mikrokontrolerami ATtiny2313 firmy Atmel, programowanymi w języku BASCOM-AVR. Autor przedstawia schemat układu oraz kod źródłowy nadajnika i odbiornika, z problemami w działaniu transmisji. Wskazano, że funkcja Inkey() w BASCOM odbiera pojedynczy bajt, co wymaga odpowiedniego sprawdzania warunków w kodzie. Zalecane jest ustawienie linii Re_de sterującej kierunkiem transmisji na stałe w tryb nadawcy lub odbiorcy, zamiast ciągłego przełączania. Przykładowy kod nadajnika wysyła na przemian wartości binarne 1 i 2 co sekundę, a odbiornik odczytuje je funkcją Inkey() i steruje diodami LED podłączonymi do portu D. W kolejnej części autor opisuje rozbudowę układu o 6 przycisków i 6 diod LED, gdzie naciśnięcie przycisku w nadajniku powoduje zapalenie odpowiedniej diody w odbiorniku. Jeden z użytkowników podkreśla, że stosowanie konwerterów RS485 w ćwiczeniach jest zbędne, gdyż celem jest implementacja protokołu komunikacji, a nie konwersja poziomów sygnałów. Inny użytkownik zgłasza problem z brakiem migania diody przy zastosowaniu wewnętrznego oscylatora RC zamiast kwarcu oraz z przegrzewaniem się stabilizatora przy dodaniu rezystora 120 Ω na liniach A i B. Podsumowując, kluczowe jest prawidłowe sterowanie linią Re_de, odpowiednie wykorzystanie funkcji Inkey() oraz poprawna konfiguracja portów i sprzętu do transmisji RS485 między mikrokontrolerami ATtiny2313 w BASCOM-AVR.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA