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

Mega32 Bascom - UART ( FT232RL ) + przerwania

Elektronik_Kraków 04 Mar 2011 19:51 2641 6
REKLAMA
  • #1 9235297
    Elektronik_Kraków
    Poziom 13  
    Witam
    Zauważyłem, że w momencie wyłączania komputera z podpięty zestawem EVB następuje reset pracującego układu. Używam do zasilania i komunikowania wbudowanego na płycie EVB konwertera RS232/USB na FT232RL.
    Czy jest może wina zastosowania tego układu jako konwertera ? Może braku układu typu MAX232 ( FT232 jest na stałe podpięty bezpośrednio do pinów TxD i RxD procesora )?
    Płytka zasilana z USB.

    Podobnie się dzieje gdy otwieram okno terminala - następuje reset procesora i blokada pinów ustawionych jako wejścia.

    Próbowałem też z Config Serialin = Buffered , Size = 15 , Bytematch = 13, ale efekt resetu również występuje

    Może należałoby w jakiś sposób zapamiętać stany wyjść ?
    Może przez $SERIALINPUT

    Czy da się ustawić inny priorytet dla UART?

    
    $regfile = "m32def.dat"
    $crystal = 8000000
    $baud = 9600                                               
    $hwstack = 40                                             
                                              
    Enable Interrupts
    Enable Urxc
    On Urxc Odbierz_uart
    
    Config Porta.5 = Input
    Set Porta.5
    Config Porta.6 = Input
    Set Porta.6
    
    Config Portd.5 = Output
    Set Portd.5
    Config Portd.4 = Output
    Reset Portd.4
    Config Portd.7 = Output
    Reset Portd.7
    
    'Config Timer1 = Pwm , Prescale = 256 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down
    
    'Enable Timer1
    
    Config Timer2 = Pwm , Prescale = 64 , Compare Pwm = Clear Up
    Enable Timer2
    
    Declare Sub S1
    Declare Sub S2
    
    We1 Alias Pina.5
    We2 Alias Pina.6
    Wy1 Alias Portd.5
    Wy2 Alias Portd.4
    
    Dim Znak As String * 8
    Dim Uart As Byte
    
    
    Do
    
    Ocr2 = 100                               Timer2 - jasność wyświetlacza
    
    Debounce Pina.5 , 0 , S1 , Sub S1
    
    Debounce Pina.6 , 0 , S2 , Sub S2
    
    If Znak = "wlacz1" Then
    Wy1 = 1
    
    End If
    
    If Znak = "wylacz1" Then
    Wy1 = 0
    
    End If
    
    Loop
    End
    
    S1:
    Toggle Portd.5
    Return
    
    S2:
    Toggle Portd.4
    Return
    
    Odbierz_uart:
      Znak = ""
    
      Do
    
        Uart = Inkey()
        Select Case Uart
           Case 0
           Case 10
           Case 13 : If Znak <> "" Then Exit Do               
           Case Else
            Znak = Znak + Chr(uart)                           
        End Select
    
      Loop
    
    Return
    
  • REKLAMA
  • #2 9235411
    piotrva
    VIP Zasłużony dla elektroda
    Masz pewnie płytkę v4. Na tej płytce układ ft232rl jest podłączony jednym z wyprowadzeń (konkretnie DTR) do pinu RESET procesora (przez dodatkowe elementy, nie bezpośrednio). Umożliwia to programowanie układu bez konieczności przyciskania przycisku RESET, co było konieczne w starszych wersjach płytki. Niestety rozwiązanie to ma ten minus, iż podczas podłączania układu ft232rl do komputera na tej linii występują zmiany stanu, które to z kolei powodują kilkukrotny reset procesora w tej sytuacji. Podobny mankament występuje też w przypadku wpinania karty SD przy płytce podłączonej do komputera.

    Nie ma żadnej konieczności stosowania układu max232 między procesorem a ft232rl, gdyż ten używa sygnałów ttl
  • REKLAMA
  • #3 9235913
    Elektronik_Kraków
    Poziom 13  
    Miałeś rację na 1000 %, usunięcie tego połączenia ( połączenie przez kondensator ) spowodowało brak resetu i utrzymanie ustawionego stanu.
    Dzięki Twojej podpowiedzi odpadło moje podejrzenie jeśli chodzi Timer'y, a siedzę już kilka wieczorów sprawdzając różne warianty.

    Czy wiesz może co jest przyczyną blokowania wyprowadzeń procesora ( wejść ) i brak możliwości sterowania na płytce ? Czy to chodzi o priorytet ? Jeśli tak, to w jaki sposób go zmienić ?

    Bo zakładam taki układ, sterowanie halogenami LED lub żarówkami 220V i w sytuacji, gdy ja podepnę się przez UART ( docelowo RS485 ) to ktoś inny straci możliwość kontroli, dopiero po resecie będzie znowu działać lokalnie, nie byłoby to takie złe, gdyby układ odblokowywał wyprowadzenia ustawione jako wejścia po rozłączeniu, ale tak się nie dzieje.
  • REKLAMA
  • #5 9236107
    Elektronik_Kraków
    Poziom 13  
    To może krok po kroku
    1. włączam płytkę EVB
    2. działają dwa przyciski switch jako wejścia, mogę sterować wyjściami
    3. podłączam terminal
    4. zaczynam sterować przez komendy tekstowe co działa OK
    5. próbuję przyciskami zmienić stan wyjść nie działa ( przy włączonym terminalu )
    6. wychodzę z terminala i próbuję ponownie, dalej nie działa sterowanie przyciskami
    7. robię reset całego układu, zaczyna działać sterowanie wejściami-przyciskami

    Co ciekawe, jeśli z terminala steruję tylko jednym wyjściem to tylko to wyjście nie daje się później sterować ręcznie, drugie nie "ruszane' przez terminal działa manualnie, czyli przez switch'a.

    Mam nadzieje, że coś rozjaśniłem.
  • Pomocny post
    #6 9236385
    piotrva
    VIP Zasłużony dla elektroda
    1. jak masz wszystko podłączone, pod jakie piny przyciski, pod jakie wyjścia
    2. może pokaż program - bo jak na razie stawiam 75% na problemy z programem, 25% na problemy ze sprzętem
    Dobrze, ze przynajmniej POMOGŁem z tym resetowaniem się procesora.
    Jak kolega załączy program to tez mu się przyjrzę.
  • REKLAMA
  • #7 9236478
    Elektronik_Kraków
    Poziom 13  
    Dołączam cały plik. Proszę się nie sugerować programami up1, dn1, up2, dn2 oraz wyłączonym Timer1, nie mogłem znaleźć błędu i powyłączałem dodatkowe funkcje.
    Oczywiście wiem, że nie używa się Toggle w przypadku wyjść PWM, ale już nie chcę mieszać z przełączaniem kabli i trzymam się w miarę możliwości jednych ustawień.

    Oczywiście LCD też nie jest obsługiwane, wykorzystywałem je tylko żeby obejrzeć co się dzieje z danymi.
REKLAMA