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

atmega 128(bascom) - obsluga dwóch uartów

ditomek 17 Gru 2011 11:33 1596 3
  • #1 10269764
    ditomek
    Poziom 22  
    Witam.
    Układ następujący.
    Do portu mastera dołączone są mikroswitch'e (8 szt). ich wciśnięcie powoduje zapalenie sie LEDa podłączonego do odpowiedniego bitu w innym porcie (atmega 16)
    Leci to przez RS do slawe'a (atmega8) i zapala analogiczy bit.
    Układ prosty, działa bez problemu.
    Po przesiadce na 128 (to moja pierwsza przygoda z tą kością) działa idealnie.
    Jako, że urządzenie będzie potrzebowało dwóch portów skonfigurowałem i podłączyłem do PC.
    Teraz wciśniecie przycisku zapala LED na masterze, slave'ie i wysyła odpowiednią komende do PC. Super działa.

    Docelowo do Slavea tez bedą podpięte przyciski więc wcisniecie takowego powoduje wyslanie komunikatu do mastera.

    W tym miejscu działanie drugiego uarta jest bez znaczenia.

    postanowiłem ze komendy od Slavea'a bede odbierał w przerwaniu od Uarta.

    Robiłem to wiele razy i zawsze działało bez problemu.
    enable interrupts
    enable urxc
    ....
    on urxc
    kod odbioru
    return

    Teraz , w atmedze128 komenda enable urxc powoduje ze czas wykonania pętli (tylko obsługa przycisków i print na port RS) znacznie sie wydłuża.
    Zapalam lampkę przed wysłaniem czegokolwiek na port i gaszę po wysłaniu.
    Jest to dosłownie błysk
    zatem wina lezy w pętli.

    Do

    If PinF.7 = 0 Then
    Waitms 50
    If PinF.7 = 0 Then
    Toggle s.5
    Call wyslij(m)
    Waitms 50
    End If
    End If

    Loop

    Sub wyslij
    portg.4 = 1
    Print s.5
    Open "Com2:" For Binary As #1
    Print #1 , s.5
    Close #1
    Waitms 2
    portg.4 = 0
    End Sub

    End

    Pytanie.
    wejscie RXD0 podłaczone do masy uniemożliwia odczyt przez ISP, do plusa jest OK, program wykonuje sie tak szybko jak powinien.
    Odłaczenie od plusa i ponowne przypięcie powoduje zwolnienie działania. Tak samo z minusem zasilania.
    Pin RXD0 pierwszego uarta dzielony jest z PDI.
    Próbowałem wyłączyć programowanie szeregowe w bascomie ale nie przyjmuje tej komendy.

    Prosze o pomoc.
    Być moze winę ponosi moduł z atmegą który nabyłem na naszym portalu aukcyjnym. Ale chciałbym ze była to mój bład w programowaniu.

    Pozdrawiam
  • #2 10272180
    ditomek
    Poziom 22  
    Właśnie wywaliłem obsługę drugiego uarta.
    W tym momencie działa tylko pierwszy
    Dopisałem obsługę od URXC

    on_urxc:
    portg.4 = 1
    waitus 1
    portg.4 = 0
    return

    po pierwszym użyciu uartu - wysyłanie danych - dioda zapala się i nie gaśnie.
    podejrzewam ze przerwanie wykonuje się raz za razem. ale dlaczego?
    pomaga podwieszanie pod plusa lub minusa od chwili resetu do momentu odpięcia od potencjału, ponowne podpięcie do plusa lub minusa już nie pomaga. dopiero pomaga reset

    Dodano po 1 [godziny] 18 [minuty]:

    podpiąłem pod RXD0 podpiąłem LED.
    podczas programowania przez ISP z bascoma (standardowy STK200 na porcie rownoległym) dioda na wejsciu UARTa mruga.
    Nie znam tej kości dobrze ale chyba to żle...
  • #3 10273328
    Mundi1970
    Poziom 24  
    Zbytnio nie rozumiem co ty tam podciągasz? :) Czy master i slave są podłączone w taki sposób?:

    RXD - TXD
    TXD - RXD
    GND - GND
  • #4 10273428
    ditomek
    Poziom 22  
    tak
    komunikacja działa w jedną stronę bez problemu przez RS485
    na razie sterowanie kierunkiem ustawione na stałe zworkami
    Zaczynam podejrzewać modul z atmegą który kupiłem
    chyba to nie jest normalne ze przy programowaniu sygnał przedostaje sie na linię RXDo...
REKLAMA