Driver z trybami - nowe spojrzenie
: niedziela 01 lis 2009, 22:40
Witam
Moja mała praktyka z trybami w latarkach skłoniła mnie do przemyśleń odnośnie obsługi trybów, a mianowicie: Jeśli chcę z Lo zrobić na Mid a potem wrócić do Lo, to dlaczego muszę przeskakiwać przez Hi Biorąc pod uwagę, że mój driverek posiada cztery tryby ciągłe plus migacz, miałem do przeskoczenia trzy tryby.
No i w mojej głowie zrodził się pomysł sterowania rewersyjnego:
1 klik tryb w górę
2 kliki tryb w dół.
Dzięki dyskusji z df, który to podsunął mi wiele pomysłów i gotowych rozwiązań (dzięki Darek ) postanowiłem kilka myków zastosować u siebie.
W związku z tym, że jeszcze nie jestem gotowy do pisania w asemblerze, idee podpowiedziane przez Darka przeniosłem do BASCOMa, tak więc jest pomiar minimalnego czasu przerwy (klika) oraz licznik klików, umożliwiający rozpoznawanie dowolnej (no do 255 ) liczby klików, pod warunkiem, że przerwa pomiędzy kolejnymi klikami nie będzie dłuższa niż pół sekundy, co chyba jest łatwe do spełnienia
Schemat driverka już jest znany:
A tak wygląda nowy soft w wersji Pyra 2.1
Dim A As Byte 'wartość PWM
Dim B As Byte 'licznik klików
Dim C As Byte
Dim L As Byte 'wskaźnik trybu
Dim T As Eram Byte 'pamięć trybu
Config Pinb.0 = Output 'wy PWM
Config Pinb.3 = Input 'we sterujące
Set Pinb.3 'podciągnięcie wejścia
L = T 'odczyt trybu startowego
Goto Wlacz 'ustalenie wartości PWM
Pwm: 'sprawdzanie zaniku naięcia
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 1 'konfig PWM 'start pwm
Do
Pwm0a = A ' ustawienie wartości komparatora PWM
For C = 1 To 50 'pętla odczekująca na zapis trybu po zmianie
If Pinb.3 = 1 Then Goto Zmiana 'sprawdzenie stanu pinb3
Waitms 4
Next C
If T <> L Then Goto Pamiec 'zapis trybu do eprom jeśli się zmienił
Loop
Zmiana: 'rozpoznanie klików
B = 0 'zerowanie licznika klików
Zegar: 'pomiar czasu klika
For C = 1 To 50
If Pinb.3 = 0 Then Goto Pomiar
Waitms 1
Next C
Kierunek:
If B = 1 Then Goto Plus
If B = 2 Then Goto Minus
Goto Pwm
Plus: 'tryb w górę
Incr L
Goto Wlacz
Minus: 'tryb w dół
Decr L
Wlacz: 'ustalenie wartości pwm dla trybu
If L > 5 Then L = 1
If L < 1 Then L = 5 'sprawdzanie zakresu trybów
If L = 1 Then A = 253
If L = 2 Then A = 220
If L = 3 Then A = 140
If L = 4 Then A = 1
If L = 5 Then Goto Migacz
Goto Pwm
Migacz:
Config Timer0 = Timer
Do
Set Portb.0
For C = 1 To 8 'czas załączenia
If Pinb.3 = 1 Then Goto Zmiana
Waitms 1
Next C
Reset Portb.0
For C = 1 To 30 'czas przerwy
If Pinb.3 = 1 Then Goto Zmiana
Waitms 1
Next C
Loop
Pamiec:
T = L 'zapamiętywanie aktualnego trybu
Config Timer0 = Timer 'potwierdzenie zapamiętania
Reset Portb.0
Waitms 10
Goto Pwm
Pomiar:
If C < 10 Then Goto Pwm
B = B + 1
Waitms 4
For C = 1 To 50
If Pinb.3 = 1 Then Goto Zegar
Waitms 1
Next C
Goto Kierunek
End
Czerwona 10 - minimalny czas klika (można dobrać indywidualnie)
Niebieska 50 - czas maksymalnej przerwy między klikami (j.w.)
UWAGA
Jako, że nie tylko ja jestem autorem tego programu ale i Darek dołożył do tego swoje pomysły, tak więc proszę o podawanie linka do tematu w razie ewentualnego wykorzystania poza naszym forum. Sam program jest darmowy, jednak nie zezwalam na ewentualne komercyjne użycie.
Pozdrawiam
Moja mała praktyka z trybami w latarkach skłoniła mnie do przemyśleń odnośnie obsługi trybów, a mianowicie: Jeśli chcę z Lo zrobić na Mid a potem wrócić do Lo, to dlaczego muszę przeskakiwać przez Hi Biorąc pod uwagę, że mój driverek posiada cztery tryby ciągłe plus migacz, miałem do przeskoczenia trzy tryby.
No i w mojej głowie zrodził się pomysł sterowania rewersyjnego:
1 klik tryb w górę
2 kliki tryb w dół.
Dzięki dyskusji z df, który to podsunął mi wiele pomysłów i gotowych rozwiązań (dzięki Darek ) postanowiłem kilka myków zastosować u siebie.
W związku z tym, że jeszcze nie jestem gotowy do pisania w asemblerze, idee podpowiedziane przez Darka przeniosłem do BASCOMa, tak więc jest pomiar minimalnego czasu przerwy (klika) oraz licznik klików, umożliwiający rozpoznawanie dowolnej (no do 255 ) liczby klików, pod warunkiem, że przerwa pomiędzy kolejnymi klikami nie będzie dłuższa niż pół sekundy, co chyba jest łatwe do spełnienia
Schemat driverka już jest znany:
A tak wygląda nowy soft w wersji Pyra 2.1
Dim A As Byte 'wartość PWM
Dim B As Byte 'licznik klików
Dim C As Byte
Dim L As Byte 'wskaźnik trybu
Dim T As Eram Byte 'pamięć trybu
Config Pinb.0 = Output 'wy PWM
Config Pinb.3 = Input 'we sterujące
Set Pinb.3 'podciągnięcie wejścia
L = T 'odczyt trybu startowego
Goto Wlacz 'ustalenie wartości PWM
Pwm: 'sprawdzanie zaniku naięcia
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Prescale = 1 'konfig PWM 'start pwm
Do
Pwm0a = A ' ustawienie wartości komparatora PWM
For C = 1 To 50 'pętla odczekująca na zapis trybu po zmianie
If Pinb.3 = 1 Then Goto Zmiana 'sprawdzenie stanu pinb3
Waitms 4
Next C
If T <> L Then Goto Pamiec 'zapis trybu do eprom jeśli się zmienił
Loop
Zmiana: 'rozpoznanie klików
B = 0 'zerowanie licznika klików
Zegar: 'pomiar czasu klika
For C = 1 To 50
If Pinb.3 = 0 Then Goto Pomiar
Waitms 1
Next C
Kierunek:
If B = 1 Then Goto Plus
If B = 2 Then Goto Minus
Goto Pwm
Plus: 'tryb w górę
Incr L
Goto Wlacz
Minus: 'tryb w dół
Decr L
Wlacz: 'ustalenie wartości pwm dla trybu
If L > 5 Then L = 1
If L < 1 Then L = 5 'sprawdzanie zakresu trybów
If L = 1 Then A = 253
If L = 2 Then A = 220
If L = 3 Then A = 140
If L = 4 Then A = 1
If L = 5 Then Goto Migacz
Goto Pwm
Migacz:
Config Timer0 = Timer
Do
Set Portb.0
For C = 1 To 8 'czas załączenia
If Pinb.3 = 1 Then Goto Zmiana
Waitms 1
Next C
Reset Portb.0
For C = 1 To 30 'czas przerwy
If Pinb.3 = 1 Then Goto Zmiana
Waitms 1
Next C
Loop
Pamiec:
T = L 'zapamiętywanie aktualnego trybu
Config Timer0 = Timer 'potwierdzenie zapamiętania
Reset Portb.0
Waitms 10
Goto Pwm
Pomiar:
If C < 10 Then Goto Pwm
B = B + 1
Waitms 4
For C = 1 To 50
If Pinb.3 = 1 Then Goto Zegar
Waitms 1
Next C
Goto Kierunek
End
Czerwona 10 - minimalny czas klika (można dobrać indywidualnie)
Niebieska 50 - czas maksymalnej przerwy między klikami (j.w.)
UWAGA
Jako, że nie tylko ja jestem autorem tego programu ale i Darek dołożył do tego swoje pomysły, tak więc proszę o podawanie linka do tematu w razie ewentualnego wykorzystania poza naszym forum. Sam program jest darmowy, jednak nie zezwalam na ewentualne komercyjne użycie.
Pozdrawiam