Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przykładowa transmisja przez RS485 z ATtiny2313

07 Lip 2009 22:45 6787 6
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 17  
    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:

    Code:

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

    Code:

    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:

    Code:

    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
  • Poziom 14  
    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.
  • Poziom 14  
    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?
  • Użytkownik usunął konto  
  • Poziom 17  
    Napisz odbiornik w taki sposób i zobacz jaki jest efekt:

    Code:


    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:

    Code:

    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ć :)
  • Poziom 10  
    Witam, mam ten sam problem, połączyłem układ tak jak w pierwszym poście.
    Kod nadajnika:
    Code:

    $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:
    Code:

    $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.