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

[Atmeg8][bascom] -pwm +rs485

usiex 11 Lut 2010 20:20 1097 0
REKLAMA
  • #1 7679931
    usiex
    Poziom 16  
    Witam
    Mam taki programik opiszę tylko najważniesze elementy
    
    # konfiguracja timerów
    Config Timer0 = Timer , Prescale = 1024
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm Disconnect , Prescale = 8
    Config Serialin = Buffered , Size = 6 
    Enable Interrupts
    Enable Timer0
    Timer0 = 61
    On Timer0 Sekunda
    #główna petla programu
    do 
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm Disconnect , Prescale = 8
    pwm1a=T1
    incr sek
    gosub uart
    if sek >h then
    sek=0
    # tu jeszcze pare skoków do innych procedur bez użycia przerwań i uart
    loop
    
    
    
    
    #odliczanie sekundy
    Sekunda:
    Timer0 = 61
    Incr Licz
    If Licz = 40 Then
    Licz = 0
    End If
    Return
    
    sub uart:
    
      If Sek1 = 0 Then
          Bufor = Ischarwaiting()
          If Bufor = 1 Then
          Znak = Inkey()
          If Znak = "n" Then
          Odbierz = ""
          Do
          Znak = Inkey()
          Odbierz = Odbierz + Znak
          If Znak = "k" Then Goto Lcdd
                Loop
                End If
                End If
     Lcdd:
          T11 = Mid(odbierz , 1 , 1)
          T1 = Val(t11)
           T11 = Mid(odbierz , 2 , 1)
          T2 = Val(t11)
          T11 = Mid(odbierz , 3 , 1)
          T3 = Val(t11)
    End If
    Return
    End Sub
    


    Więc sprawa się ma tak
    Odbieram informacie po rs485 następnie w głównej pętli reguluje wypełnienie Timer Pwm1a
    W tej pętli odliczam też odcinki czasu i steruje jednym pinem załacz wyłacz(niepokazane w kodzie)
    i w tej samej pętli skacze do procedury odczytu znaków z rs 485
    Problem wygląda tak że zupełnie losowo następuje reset zliczania odcinka czasu (jest np 19s i kasuje się na zero a ma trwać 30s)
    Pwm wówczas na ułamek sekundy tak jakby się wyłaczał brak napięcia na wyjściu.
    Niewiem ale podejrzewam że występuje konflikt przerwań ,wydaje mi się jakby jedno przerwanie przerywało drugie.
    Niemogę tego zabardzo zrozumieć którego przerwania używa instrukcja serialin?
    Czy używa tego samego co licznik odliczający sekunde .W jaki sposób mogę to sprawdzić i jak ewentualnie rozwiązać ten problem.
    Dodam że jak wpisze w instrukcji odbierającej dane z Uart wartości t1 t2 t3 na sztywno wówczas niema tego problemu.
    Dziękuje za każdą pomoc.
  • REKLAMA
REKLAMA