Strona 2 z 4
: piątek 06 lis 2009, 16:13
autor: Slawek75
Wielkie dzięki za info o Driverze. Już zamówiłem sobie 2 szt.
Teraz tylko napisać oprogramowanie i można poszaleć
Muszę się teraz zastanowić nad jakimś body.
: niedziela 08 lis 2009, 08:31
autor: ElSor
Analizujac sobie ten powyzszy kod doszedlem do wniosku ze wpis
Kod: Zaznacz cały
If T <> L Then Goto Pamiec 'zapis trybu do eprom jeśli się zmienił
powoduje ciagle odczyty zawartosci eepromu (chyba ze sie myle) ale jesli mam racje to zbyt zdrowe nie jest to dla pamieci i nalezaloby wprowadzic dodatkowa zmienna.
Mam tez pytanie dlaczego tryb L1 przypisuje tylko wartosc 253 do zmiennej A a nie max czyli 255 ?
: niedziela 08 lis 2009, 12:16
autor: Slawek75
Witam
Wczoraj przetestowałem idee obsługi sterownika jednym przyciskiem na podstawie programu Pyra 2.1. Cały program przeniosłem do ATmega8 z drobnymi modyfikacjami. Po pierwsze usunąłem wpisy dotyczące obsługi pamięci, oraz poprawiłem wpisy ustalenia wartości PWM dla trybu, bo program nie zawsze poprawnie przechodził z trybu do trybu. Ponadto dodałem obsługę drugiego kanału PWM, bo w założeniach będę miał 2 drivery i 2 emitery. Zmieniłem także logikę wejścia sterującego, o ile w pierwotnych założeniach program reagował na zanik napięcia na bazie tranzystora sterującego, czyli reagował na logiczńą 1 na wejściu kontrolera, to po programowych modyfikacjach reaguje na dowarcie tego wejścia do masy. Ułatwi to sterowanie osobnym przyciskiem (można powiedzieć, że zrobiłem z pozytywu-negatyw logiczny). Całość sprawuje się dobrze, chociaż jak to mówił mi pewien wykładowca jeszcze nie jest debiloodporne. Czasami po przejściu do najniższego lub najwyższgo trybu - czyli najbardziej skrajnych i wciśnięciu dłużej przycisku sterującego zaczynają się dziwne żeczy dziać z wyjściami sterowania PWM - muszę to jeszcze przejżeć. Poza tym chciałbym jeszcze dorobić na jednym z trybów Power-Down (co dla Atmegi8L taktowanego 4Mhz i zasilanego ok 3V daje prąd pobierany poniżej 0,5uA) celem uzyskania elektronicznego wyłacznika, tyklo nie wiem jeszcze jaki prąd będą pobierać same driwery w tym trybie, czyli kontroler power-down, drivery logiczne 0 na wejsciu sterowania PWM.
A teraz co do obsługi samej obsługi klawiatury jednoprzyciskowej to muszą powidzieć, że jest bardzo intuicyjna, pod warunkiem, że wcześniej się nauczymy dobierać czasy reakcji wciśnięcia przycisku - długość i czas kliku. Ogólnie jestem zadowolony, chociaż jeszcze nie podpiąłem driverów z emiterami, tylko testowałem z podłączonymi diodami Led na wyjściach obu kanałów PWM.
Pozdrawiam
: niedziela 08 lis 2009, 13:07
autor: jezjacek
To może dołącz kod źródłowy.
: niedziela 08 lis 2009, 15:42
autor: Pyra
ElSor pisze: Analizujac sobie ten powyzszy kod doszedlem do wniosku ze wpis
Kod: Zaznacz cały
If T <> L Then Goto Pamiec 'zapis trybu do eprom jeśli się zmienił
powoduje ciagle odczyty zawartosci eepromu (chyba ze sie myle) ale jesli mam racje to zbyt zdrowe nie jest to dla pamieci i nalezaloby wprowadzic dodatkowa zmienna.
Wnioski są poprawne do pewnego momentu. Odczyt EEpromu nie powoduje jego "zużycia" tylko zapis. Dlatego zapis dokonywany jest tylko w momencie wykrycia rozbieżności pomiędzy trybem pamiętanym a aktualnie ustalonym.
Można by wprowadzić dodatkowy podprogram realizujący jednorazowo porównanie po zmianie trybu, lecz rozbudowało by to program i nie jest to konieczne ze względów, które podałem wyżej.
ElSor pisze:
Mam tez pytanie dlaczego tryb L1 przypisuje tylko wartosc 253 do zmiennej A a nie max czyli 255 ?
No cóż, organoleptycznie stwierdziłem, że taka wartość minimalnej jasności mi odpowiada najbardziej.
Tu wartości są odwrotnie proporcjonalne. Tak jakoś kiedy zacząłem pisać program umieściłem "clear up" i tak już zostało
w momencie kiedy zamiast diodą podłączoną do plusa i portu zacząłem starować MOSfetem odwróciły się proporcje....
umieszczony kod źródłowy jest w zasadzie sprawdzeniem idei sterowania i nie jest dopracowany do końca, dlatego umieściłem kod źródłowy.
Slawek75 pisze: Po pierwsze usunąłem wpisy dotyczące obsługi pamięci, oraz poprawiłem wpisy ustalenia wartości PWM dla trybu, bo program nie zawsze poprawnie przechodził z trybu do trybu.
Możesz wyjaśnić, nie za bardzo wiem co masz na myśli?
Wykrywanie klików jeszcze nie jest doskonałe, lecz u mnie działało poprawnie.
Pozdrawiam
: niedziela 08 lis 2009, 19:12
autor: Slawek75
Chodzi mi o to, że po dojściu do któregokolwiek ograniczenia program przestawał reagować, tzn można było dalej klikać i nic się nie działo. Np przechodząc do trybu High i klikając dalej czasami program przeskakiwał do najniższego trybu, a czasami się blokował. Być może że związane jest to z samym kontrolerem. Dopiero po dokonaniu wpisu:
Plus: 'tryb w górę
Incr L
If L > 6 Then L = 6
Goto Wlacz
Minus: 'tryb w dół
Decr L
If L < 1 Then L = 1
program poprawnie zaczął się przełączać (przynajmniej u mnie na ATmega8) i działa stabilnie.
: niedziela 08 lis 2009, 19:28
autor: Pyra
Witam
Troche to dziwne, bo mój fragment:
If L > 5 Then L = 1
If L < 1 Then L = 5
Znakomicie sobie radził ze sprawdzaniem krańców zakresu i po dojściu do końca przeskakiwał na początek i odwrotnie, nie mam z tym problemów.
A dlaczego 1 i 6 czyżbyś dodał jakiś tryb?
Wrzuć może listing to przeanalizujemy.
Pozdrawiam
: niedziela 08 lis 2009, 21:03
autor: Slawek75
Tak dodałem jesden tryb migacza. Oto i listing
$regfile = "m8def.dat"
Dim A As Byte 'wartość PWM
Dim B As Byte 'licznik klików
Dim C As Byte 'zmienna pomocnicza
Dim L As Byte 'wskaźnik trybu
Config Pinb.1 = Output 'wy PWM1
Config Pinb.2 = Output 'wy Pwm2
Config Pind.2 = Input 'we sterujące
'A = 0
'B = 0
'L = 0
'C = 0
Set Portd.2 'podciągnięcie wejscia
Goto Wlacz 'ustalenie wartości PWM
Pwm:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 'konfig TIMERA 1 jako PWM
Do
Pwm1a = A 'ustawienie wartości komparatora PWM
Pwm1b = A 'ustawienie wartości komparatora PWM
For C = 1 To 50 'pętla odczekująca na zapis trybu po zmianie
If Pind.2 = 0 Then Goto Zmiana 'sprawdzenie stanu pinb3
Waitms 4
Next C
Loop
Zmiana: 'rozpoznanie klików
B = 0 'zerowanie licznika klików
Zegar: 'pomiar czasu klika
For C = 1 To 50
If Pind.2 = 1 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
If L > 6 Then L = 6
Goto Wlacz
Minus: 'tryb w dół
Decr L
If L < 1 Then L = 1
Wlacz: 'ustalenie wartości pwm dla trybu
If L < 1 Then L = 6
If L > 5 Then L = 6
If L = 1 Then Goto Migacz1
If L = 2 Then A = 127
If L = 3 Then A = 30
If L = 4 Then A = 5
If L = 5 Then Goto Migacz0
If L = 6 Then Goto Wylacz
Goto Pwm
Wylacz:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Disconnect , Compare B Pwm = Disconnect , Prescale = 1
Do
For C = 1 To 50
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
For C = 1 To 50
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Loop
Migacz0:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Do
Pwm1a = 5
Pwm1b = 5
For C = 1 To 5 'czas ząłączenia
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Pwm1a = 0
Pwm1b = 0
For C = 1 To 250 'czas przerwy
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Loop
Migacz1:
Config Timer1 = Timer
Do
Set Portb.1
Set Portb.2
Waitms 10
Reset Portb.1
Reset Portb.2
Waitms 10
Set Portb.1
Set Portb.2
Waitms 10
Reset Portb.1
Reset Portb.2
Waitms 10
Set Portb.1
Set Portb.2
For C = 1 To 20 'czas załączenia
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Reset Portb.1
Reset Portb.2
For C = 1 To 250 'czas przerwy
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Loop
Pomiar:
If C < 10 Then Goto Pwm
B = B + 1
Waitms 5
For C = 1 To 50
If Pind.2 = 0 Then Goto Zegar
Waitms 1
Next C
Goto Kierunek
End
Wiele nie dodałem. Muszę tylko przerobić jescze procedurę wyłącz i doprowadzić do trybu power-down.
: poniedziałek 09 lis 2009, 07:33
autor: Pyra
Slawek75 pisze: Wiele nie dodałem. Muszę tylko przerobić jescze procedurę wyłącz i doprowadzić do trybu power-down.
Ja oraz
kurczak mieliśmy problemy przy wejściu w power down.
Po uśpieniu na wyjściowym porcie procka utrzymywało się napięcie zasilania (stan wysoki), ja konfigurowałem Timer jako Timer i dopiero Power down. Na ATTiny się sprawdziło.
Pozdrawiam
PS: chyba już wiem o co chodziło z rozpoznaniem klika, ATtiny ma ustawiony preskaler zegara systemowego 8, (CKDIV8) przez co wszystkie instrukcje "wait" działają dłużej, co w moim programie wziąłem pod uwagę, z tego względu powinieneś wszystkie instrukcje "waitms" powiększyć o stosunek różnicy zegarów w ATtiny (około 1,2mHz) i ATmega8 (to juz Ty będziesz wiedział ile ustawiłeś)
: poniedziałek 09 lis 2009, 09:21
autor: Slawek75
Kontroler był taktowany na poziomie 1Mhz z wewnętrznego RC oscylatora, więc czasy były porównywalne. Dopiero dodanie ograniczeń w obrębie naliczania wartości L "Plus" i "Minus" pomogly.
Co do trybu power-down to jeszcze nie próbowałem. Zacznę w momencie, gdy będę miał pomierzone wartości prądów przetwornic (dopiero czekam na przesyłkę). Być może szkoda będzie czasu na tworzenie takiego trybu, jak się okaże , że same drivery biorą kilka rzędów większy I w trybie PWM=0.
Teraz zerknąłem do fusebitów dla ATTiny13 i faktycznie przy taktowaniu 1.2Mhz i podziale systemowym przez 8 u Ciebie działało dużo (tak z 8 razy) wolniej.
: czwartek 10 gru 2009, 22:45
autor: Pyra
Witam
W związku z tym, że idą święta, soft dostał ciało
Bazą stał się projekt płytki jaki wykonałem modyfikując RC-G2, jednak tam był użyty ATtiny 13V w obudowie SSU (dzięki Calineczka), a ja mam kilka sztuk w obudowie SU (większa) więc trochę pokombinowałem. Mc Gyver był by ze mnie dumny
Po przylutowaniu elementów i opiłowaniu PCB do wymaganych 14mm, gdyż tyle miejsca jest wewnątrz piguły Small Sun C-61, przyszła pora na połączenie tego w całość.
Przy okazji wyszło, że oryginalna przetwornica posiada ograniczenie prądu, które było fabrycznie ominięte podczas montażu....
Podczas montażu dokonałem przeróbki, lutując przewód ujemny do punktu "OUT-" zamiast do minusa baterii.
Po dolutowaniu jeszcze kabelka pomiędzy + zasilania a bazę tranzystora sterującego zmianą trybów, złożyłem wszystko razem i..... żadnych niespodzianek, oprogramowanie chodzi poprawnie, tzn zgodnie z założeniami
Jedynym minusem, jest zmiana trybu po upływie pół sekundy od kliknięcia, gdyż tyle czasu program odczekuje na następny klik, w przypadku jego braku, zmienia tryb w górę, dwa kliki tryb w dół.
Darek doradzał, że jego rozwiązanie najpierw zmienia tryb, a potem czeka na kolejny klik, czyli zmiana trybu jest natychmiastowa, ewentualnie potem następuje zmiana grupy, lecz u mnie to by było trochę mniej praktyczne, gdyby po pierwszym kliku tryb wskoczył na wyższy, a przy drugim skoczył dwa tryby w dół
Teraz wystarczy tylko podłączyć pomiar napięcia przez wewnętrzny ADC i można w łatwy sposób zrealizować "oszczędzanie" baterii przy zbliżaniu się do wyczerpania, przez obniżanie trybu. Ale to już będzie następny projekt
Pozdrawiam
: piątek 11 gru 2009, 19:05
autor: Slawek75
Witam
Ja niestety jeszcze nie wykonałem obudowy, ale już testowałem razem z przetwornicami. Dodałem jeszczd tryb power-down. Wartości PWM oczywiście tylko do testów poniżej zamieszczam listing:
'Program sterujący PWM w 2 kanalach
'Oscillator RC=1MHz
'hfuse=9D
'lfuse=E1
$regfile = "m8def.dat"
Dim A As Byte 'wartość PWM
Dim B As Byte 'licznik klików
Dim C As Word 'zmienna pomocnicza
Dim L As Byte 'wskaźnik trybu
Config Pinb.1 = Output 'wy PWM1
Config Pinb.2 = Output 'wy Pwm2
Config Pind.2 = Input 'we sterujące
Enable Interrupts
Config Int0 = Low Level
Set Portd.2
Goto Wlacz
Pwm:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Do
Pwm1a = A
Pwm1b = A
For C = 1 To 50
If Pind.2 = 0 Then Goto Zmiana
Waitms 5
Next C
Loop
Zmiana:
B = 0
Zegar:
For C = 1 To 50
If Pind.2 = 1 Then Goto Pomiar
Waitms 1
Next C
Kierunek:
If B = 1 Then Goto Plus
If B = 2 Then Goto Minus
Goto Pwm
Plus:
Incr L
If L > 6 Then L = 6
Goto Wlacz
Minus:
Decr L
If L < 1 Then L = 1
Wlacz:
If L < 1 Then L = 6
If L > 5 Then L = 6
If L = 1 Then Goto Strobo
If L = 2 Then A = 255
If L = 3 Then A = 50
If L = 4 Then A = 10
If L = 5 Then Goto Migacz0
If L = 6 Then Goto Wylacz
Goto Pwm
Wylacz:
Config Int0 = Low Level
Enable Int0
Reset Portb.1
Reset Portb.2
Powerdown
Disable Int0
Do
A = 0
Reset Portb.1
Reset Portb.2
For C = 1 To 200
If Pind.2 = 0 Then Goto Zmiana
Waitms 25
Next C
A = 0
Reset Portb.1
Reset Portb.2
For C = 1 To 200
If Pind.2 = 0 Then Goto Zmiana
Waitms 25
Next C
Loop
Migacz0:
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Do
Pwm1a = 5
Pwm1b = 5
For C = 1 To 10
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
For C = 1 To 400
If Pind.2 = 0 Then Goto Zmiana
Pwm1a = 0
Pwm1b = 0
Waitms 1
Next C
Loop
Strobo:
Config Timer1 = Timer
Do
For C = 1 To 5
Set Portb.1
Set Portb.2
Waitms 10
Reset Portb.1
Reset Portb.2
Waitms 10
Next C
For C = 1 To 10
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
For C = 1 To 250
If Pind.2 = 0 Then Goto Zmiana
Waitms 1
Next C
Loop
Pomiar:
If C < 10 Then Goto Pwm
B = B + 1
Waitms 5
For C = 1 To 50
If Pind.2 = 0 Then Goto Zegar
Waitms 1
Next C
Goto Kierunek
End
Pozdrawiam
: piątek 11 gru 2009, 21:22
autor: Pyra
Wylacz:
Config Int0 = Low Level
Enable Int0
Reset Portb.1
Reset Portb.2
Powerdown
Disable Int0
Wyłącza Ci LEDy? bo mi za Chiny Ludowe nie chciało, port zostawał z wysokim poziomem...
Chyba, że to zależy od procka
Mam małą propozycję, wydaje mi się, że praktyczniej będzie wyłączać trzema klikami, bo wtedy będziesz miał możliwość wyłączenia latarki z każdego trybu i nie będziesz musiał przelatywać wszystkich. Wystarczy przy liniach plus i minus dołożyć :
If B = 3 Then Goto Wylacz
W końcu po to jest licznik klików
Pozdrawiam
: środa 16 gru 2009, 12:43
autor: Marcio
Witam szanownych specjalistow!
Jestem zachwycony mozliwoscia programowania driwerkow. Nie wychodze z fascynacji!
Szukam driverka dla mojej XP-G R5:
- 3 tryby: LOW (0,01A) MID (0,7A) HIGH (1,5A) (albo mozliwosc ustawic tryby jak w Akoray??)
- pamiec na ostatni tryb
- przelaczanie do innego trybu przez szybki dwuklik
- zasilanie 1x18650
- dobra regulacja
- sygnalizacja rozladowanego akusa
Jakby kto dla mnie cos takiego wyprodukowal, to sie chetnie odwdziecze.
: środa 16 gru 2009, 12:57
autor: Calineczka