Witam
Wiem, że temat przycisku jest mocno nadwyrężony, ale ...
Program ma jednym przyciskiem przy dłuższym przytrzymaniu zwiększać i zmniejszać wartość wyjścia PWM ( na zmianę ) lub przy krótszym włączyć/wyłączyć, czyli pwm1a = 0 lub pwm1a = 255.
Każda z tych funkcji osobno działa ok, ale razem działa tylko włącz/wyłącz przy krótszym przytrzymaniu W1, dłuższe powoduje powolne ( nawet bardzo ) zwiększanie PWM, a po puszczeniu gaśnie.
Wiem, że temat przycisku jest mocno nadwyrężony, ale ...
Program ma jednym przyciskiem przy dłuższym przytrzymaniu zwiększać i zmniejszać wartość wyjścia PWM ( na zmianę ) lub przy krótszym włączyć/wyłączyć, czyli pwm1a = 0 lub pwm1a = 255.
Każda z tych funkcji osobno działa ok, ale razem działa tylko włącz/wyłącz przy krótszym przytrzymaniu W1, dłuższe powoduje powolne ( nawet bardzo ) zwiększanie PWM, a po puszczeniu gaśnie.
$regfile = "m32def.dat"
$crystal = 8000000
$hwstack = 8 ' rozmiar stosu sprzętowego
$swstack = 8 ' rozmiar stosu
$framesize = 10
'********************* Konfiguracja wejść i wyjść
Config Portb.6 = Input
Set Portd.6
Config Portd.7 = Input
Set Portd.7
Config Portd.5 = Output
Reset Portd.5
Config Portd.4 = Output
Reset Portd.4
'********************* Konfiguracja Timer0
Config Timer0 = Timer , Prescale = 256
Enable Timer0
On Timer0 Czas0
Timer0 = 6 'Timer0 8 BIT - 250 x 16us = 0,008 s , 256 - 6 = 250
'********************* Konfiguracja Timer1
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 64
Enable Interrupts
Enable Timer1
'********************* Deklaracje zmiennych
Dim A As Bit
Dim B As Bit
Dim C As Byte
Dim D As Byte
Dim Licznik1 As Integer
Dim Licznik2 As Integer
Dim O1 As Bit
Dim Flaga1 As Bit
Dim Flaga2 As Bit
'********************* Deklaracje podprogramów
Declare Sub S1
Declare Sub Up1
Declare Sub Dn1
Declare Sub Scm1
'********************* Deklaracje wejść i wyjść
W1 Alias Pind.6
W2 Alias Pind.7
St1 Alias Portd.5
St2 Alias Portd.4
A = 1
B = 1
C = 5
Flaga1 = 0
Flaga2 = 0
Cls
Cursor Off
'********************* Program główny
Do
If W1 = 0 Then ' jeśli przycisk W1 wciśnięty
Waitms 700
If W1 = 0 Then
Set Flaga1
Gosub Scm1
Else
Gosub S1
End If
End If
Loop
End
'********************* Podprogramy
Up1:
If Pwm1a < 255 Then
Pwm1a = Pwm1a + C
Waitms 5
End If
Return
Dn1:
If Pwm1a > 0 Then
Pwm1a = Pwm1a - C
Waitms 5
End If
Return
Scm1:
If A = 1 Then ' jeśli zmienna A = 1
Gosub Up1 ' idź do podprogramu Up1
Waitms 3
If W1 = 1 Then 'jesli przycisk W1 rozłączony
A = 0
If A = 0 Then ' jeśli zmienna A = 0
Gosub Dn1 ' idź do podprogramu Dn1
Waitms 3
If W1 = 1 Then 'jesli przycisk W1 rozłączony
A = 1
End If
End If
End If
End If
Return
S1:
If Pwm1a <> 0 Then
Pwm1a = 0
Else
Pwm1a = 255 ' Przełączanie wyjścia 1 - Portd.5
End If
Return