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

[Mega32][Bascom] Opóźnienie zmiany stanu wyjścia PWM

Elektronik_Kraków 27 Mar 2011 19:03 1353 1
  • #1 9330028
    Elektronik_Kraków
    Poziom 13  
    Witam
    Założenie jest takie.
    Czujnik ruchu wyzwala przerwanie INT0 = Falling, powoduje stopniowe zwiększanie PWM1A ( i to działa ). Następnie Timer2 ma odmierzyć czas i uruchomić stopniowe zmniejszanie PWM1A - i z tym jest problem.
    Tzn. wartość PWM1A się zmniejsza, ale nie tak szybko jak przy zwiększaniu, tylko co zadany czas timer2/Licznik2, czyli 5 sekund.

    Nie wiem, czy dobrze zrobiłem pętlę dla zmniejszania wartości PWM1A - w helpie jest, że powinien być minus przy odliczaniu w dół
    Sprawdziłem jest dobrze zrobiona pętla - zamieniłem UP1 z DN1 i po wyzwoleniu przez INT0 ładnie się zmniejsza.


    
    Dim D as Byte
    Dim Licznik2 as Integer
    
    If Flaga_int0 = 1 Then
       Flaga_pwm1 = 1
       Licznik2 = 0
       Gosub Up1
       Flaga_int0 = 0
    End If
    
    If Flaga_pwm2 = 1 Then
     Gosub Dn1
     Flaga_pwm2 = 0
    End If
    
    End
    Loop
    
    '*********************** Rozjaśnianie wyjścia 1
    Up1:
       If Flaga_pwm1 = 1 Then
       For D = 0 To 50 Step 5
       If Pwm1a < 255 Then
       Incr Pwm1a
       Next D
      End If
     End If
      Flaga_pwm1 = 0
      Licznik2 = 0
    Return
    '*********************** Ściemnianie wyjścia 1
    Dn1:
      'If Flaga_pwm2 = 1 Then
       For D = 50 To 0 Step -5
       If Pwm1a > 0 Then
       Decr Pwm1a
       Next D
      End If
     'End If
    
    Flaga_pwm2 = 0
    Return
    
    '*********************** Podprogram Timer2  2 ms
    
    Czas:
    Timer2 = Timer2 + 6
    Incr Licznik2
    
    If Licznik2 = 2500 Then         ' 5 sekund
      Flaga_pwm2 = 1
      Licznik2 = 0
    End If
    Return
    
    '**************** Podprogram Przerwanie INT0 **********
    
    Przerwanie0:
    Flaga_int0 = 1
    
    Return
    
  • #2 9335937
    SylwekK
    Poziom 32  
    Trochę dziwnie te pętle zrobiłeś... a nie wystarczyło zrobić For...Next od 0 do 255 i odwrotnie po czym przypisywać wartość bezpośrednio zmiennej Pwm1a.
REKLAMA