Driver z trybami - nowe spojrzenie
Driver z trybami - nowe spojrzenie
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
- Załączniki
-
- Sterownik Pyra v2_1.rar
- Wsady BIN i HEX dla chętnych
- (1.36 KiB) Pobrany 32 razy
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
Wyglada na to ze gdy juz kupie sobie programator to powyzszy program posluzy mi jako baza do stworzenia sobie niemalze wymazonego sterowniczka - modyfikacji TEGO.
Doloze 1szt AMC7135 i zaprogramuje mu 2-3 tryby stale bez zadnego stroboskopu czy SOSa
Doloze 1szt AMC7135 i zaprogramuje mu 2-3 tryby stale bez zadnego stroboskopu czy SOSa
Może niedługo dostaniesz dodatkowy "bodziec"Calineczka pisze: Dzięki Pyra, za podzielenie się efektami Waszej pracy
A ja ciągle przymierzam się do Bascoma i nic...szkoda
Umieszczam listingi z opisem właśnie do indywidualnych przeróbek, tak więc możesz łatwo dostosować do swoich potrzeb.ElSor pisze:Wyglada na to ze gdy juz kupie sobie programator to powyzszy program posluzy mi jako baza do stworzenia sobie niemalze wymazonego sterowniczka - modyfikacji TEGO.
Doloze 1szt AMC7135 i zaprogramuje mu 2-3 tryby stale bez zadnego stroboskopu czy SOSa
Wystarczy zmienić 5 na 3 lub 4 w sprawdzaniu zakresu trybów, i skasować cały podprogram "Migacz". A w tym SKU AMC są chyba sterowane z portu B1 a nie B0, czyli by trzeba wpisać Pwm0b = A, a config zmienić na "compare b"
Pozdrawiam
PS: A w mej głowie rodzi się pomysł na latarkę rowerową, też nietypowo sterowaną
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
W zasadzie wystarczy zmienić nazwy Timer0 na Timer1, ale problemem może być zasilanie tego układu, bo o ile ATTiny13 radzi sobie z napięciami z zakresu 1,8V do 5,5V to ATmega8 to już tylko 2,7 do 5,5V i to dla wersji L.Slawek75 pisze: Witam
Ja spróbuję przenieść program do ATmega8 (akurat takiego posiadam) celem dalszej przeróbki. Sam jeszcze nie wiem jaka będzie przetwornica, bo muszę zasilić 2XCREE MC-E. Całość ma służyć jako oświetlenie rowerowe.
W tym celu musisz zastosować tryb fastPWM (niestety nigdy nie stosowałem) wyższa częstotliwość = mniejsza indukcyjność.Slawek75 pisze: Możliwe że kontroler będzie robił za przetwornicę z pomiarem prądu.
Pozdrawiam
Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
O ile z samym programowanie nie powinienem mieć problemów, to jednak trochę przerażają mnie prądy jakie będę musiał dostarczyć do emiterów. Tak myślałem o wstawieniu takiego tranzystora kluczującego (STU3055L2). W związku, że całość ma być do roweru - nie jestem ograniczony wielkością jak również ciężarem takiego zestawu (oczywiście w granicach normy-nie chcę przecież wozić akumulatora kwasowego 45Ah na tylnym bagażniku)
Wydaje się być OK, szczególnie, że może być sterowany niskimi napięciami, przy 3V widzę już pełne otwarcie..Slawek75 pisze:O ile z samym programowanie nie powinienem mieć problemów, to jednak trochę przerażają mnie prądy jakie będę musiał dostarczyć do emiterów. Tak myślałem o wstawieniu takiego tranzystora kluczującego (STU3055L2).
Aco gdybyś miał zrobić sterownik do silniczka modelarskiego 50A
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
Jeśli sam nie projektujesz przetwornicy, to polecam to:Slawek75 pisze:Witam
Ja spróbuję przenieść program do ATmega8 (akurat takiego posiadam) celem dalszej przeróbki. Sam jeszcze nie wiem jaka będzie przetwornica, bo muszę zasilić 2XCREE MC-E.[...]
Testuję ten driver od kilku dni i coraz bardziej mi się podoba. Możesz mu podać PWM z procesorka.
-
- Posty: 602
- Rejestracja: wtorek 29 lip 2008, 02:49
- Lokalizacja: podlasie
tutaj:http://www.swiatelka.pl/viewtopic.php?t=2366Slawek75 pisze:A gdzie taki Driver można nabyć
Pozdrawiam