driverek by Flagiusz-inaczej czyli ciekawy sposob sterowania
Aktualnie "bawię się softem" na attiny. Prawdę mówiąc to biorę z Was przykład . Zaprogramowałem już/dopiero , zmianę trybów krótkoklikiem, zamianę grupy dwuklikiem i wyłączanie długoklikiem. Jeszcze nie naumiałem się sterować ograniczeniem prądu także, przed tiny będzie LAMBDA a na wyjściu mosfet. Ewentualnie zamiast LAMBDY, attiny będzie sterował MAXem 1577.
Jak już pisałem na razie próbuje coś wycisnąć z softu i schemat elektryczny nie jest jeszcze do końca opracowany. Latarkę a nawet 2, muszę mieć na długi łikend majowy , także mam jeszcze chwilę czasu na ukończenie.
Dzięki za pomiary
Jak już pisałem na razie próbuje coś wycisnąć z softu i schemat elektryczny nie jest jeszcze do końca opracowany. Latarkę a nawet 2, muszę mieć na długi łikend majowy , także mam jeszcze chwilę czasu na ukończenie.
Dzięki za pomiary
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
Wstyd się przyznać ale w Bascomnie . W planach mam napisać to ponowie w assemblerze. Kiedyś coś już w nim pisałem, jakieś banalne programy.
Do uP prąd będzie dopływał cały czas. Podczas wyłączenia latary uP będzie w trybie Power-down. Wybudzony zostanie podaniem na INT0 niskiego stanu z przycisku ( ten sam który służy do zmiany trybów).
Do uP prąd będzie dopływał cały czas. Podczas wyłączenia latary uP będzie w trybie Power-down. Wybudzony zostanie podaniem na INT0 niskiego stanu z przycisku ( ten sam który służy do zmiany trybów).
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
Dokładnie tak samo to zrobiłem z pół roku temu w swojej pierwszej wersji sterownika - http://flagiusz.republika.pl/flashlight ... oller.htmlSteff.k pisze:Do uP prąd będzie dopływał cały czas. Podczas wyłączenia latary uP będzie w trybie Power-down. Wybudzony zostanie podaniem na INT0 niskiego stanu z przycisku ( ten sam który służy do zmiany trybów).
Obecnie pracujemy nad wersją 4.0 (właśnie w tym modelu - czyli "zamiast wyłącznika").
Jest już zrobiony prototyp, który łączy wszystko co miała wersja 3.x + sterowanie wyłączaniem wzięte z mojej dawnej pierwszej wersji na switch`u astabilnym.
Piękne jest to, że procesor w trybie głębokiego uśpienia pobiera ~0,5uA, czyli tyle co nic i można go śmiało zostawiać pod napięciem, co ma też swoje zalety (np. utrzymywanie zawartości rejestrów - czyli jakąś tam pamięć bez konieczności korzystania z EEPROMu).
Tylko uważaj na jedną rzecz. Gdy będziesz korzystał z ADC z wewnętrznym napięciem referencyjnym, to jak będziesz ustawiał procesor w power-down to przed tym wyłączaj ADC lub przynajmniej wyłączaj napięcie Vref, bo pomimo głęboko śpiącego procesora ciągnie ono ok. 0,5mA. A to już w prądzie różnica 3 rzędów wielkości...
[ Dodano: Pon Kwi 14, 2008 12:38 am ]
Wracając do idei sterownika "z tyłu" to ma to naprawdę sporo zalet, np.:
- możliwość elastyczniejszego sterowania (można zrobić "doświetlanie", można migać sobie morse`m, itd.)
- bardziej odporny "elektroniczny" włącznik - wyłączniki mechaniczne przy większych prądach miewają problemy kontaktem, głównie przez wzrastającą w czasie rezystancję styków (utlenianie się / nagar), co szczególnie dokuczliwie objawia się przy sterowaniu impulsowym, czyli z wszelkiego rodzaju przetwornic step-up/step-down/PWM.
- możliwość realizacji funkcji specjalnych, w których latarka logicznie będzie wyłączona (zgaszona) a procesor od czasu do czasu coś zrobi "na boku" - np. mignie z tyłu diodką, policzy RC5-des (żartowałem
- będzie możliwość prawdziwego auto power-off`a - obecnie w wersji 3.x latarka w tym trybie jedynie oszczędza energię gasząc LED`a i tylko sporadycznie sygnalizując swoje położenie. W tym układzie procesor po zadanym czasie braku aktywności może po prostu się wyłączyć, tak jakbyśmy odcięli zasilanie.
Na koniec mały smaczek - mamy już taki układ gotowy i działający!
I ma on wszystko to, co miała wersja 3.x - czyli wszystkie tryby pracy, konfigurowanie itp.
Co więcej, płytki drukowane do wersji 3.x będą mogły być zastosowane także w tym układzie . Obecne PCB po dolutowaniu micro-switch`a i zwarciu jednego elementów bez żadnych innych zmian mogą być montowane w miejsce mechanicznego wyłącznika.
Osobiście uważam, że wersja 4 (czyli ze sterownikiem "zamiast wyłącznika") to bardzo dobry pomysł dający dużo większe możliwości sterowania i wzrost funkcjonalności niż wersje 3.x (sterowane zanikami zasilania), a przy okazji rozwiązuje dość upierdliwe kłopoty z niezawsze dobrze kontaktującym wyłącznikiem mechanicznym.
A puki co obie te wersje są dalej rozwijane równolegle.
Flagiusz
Dzięki za porady na pewno z nich skorzystam:D. ADC jeszcze nigdy nie używałem, muszę dopiero poczytać to i owo .
Z tą samą płytka do ver 3.xx i 4.xx nieźle wykombinowałeś. Szczwane z Ciebie Bestia
Jeszcze mam pytanie programistyczne . Jeśli to nie jest ściśle strzeżona tajemnica oczywiście .
W attiny13 jest jeden timer/licznik/pwm. W związku z tym jak rozwiązujesz PWM i zliczanie impulsów?
1. Przy dwu/trój kliku liczysz wystąpienia INT0, a PWM'a używasz hardwarowego, czy
2. Przy dwu/trój kliku liczysz impulsy timerem, a PWM'a sam napisałeś??, czy może jeszcze inaczej.
Aktualnie soft testuję na attiny2313 tam są 2 liczniki i nie ma problemu, ale docelowo uP w latarce to będzie attiny13, także muszę jakoś to rozwiązać.
Z tą samą płytka do ver 3.xx i 4.xx nieźle wykombinowałeś. Szczwane z Ciebie Bestia
Jeszcze mam pytanie programistyczne . Jeśli to nie jest ściśle strzeżona tajemnica oczywiście .
W attiny13 jest jeden timer/licznik/pwm. W związku z tym jak rozwiązujesz PWM i zliczanie impulsów?
1. Przy dwu/trój kliku liczysz wystąpienia INT0, a PWM'a używasz hardwarowego, czy
2. Przy dwu/trój kliku liczysz impulsy timerem, a PWM'a sam napisałeś??, czy może jeszcze inaczej.
Aktualnie soft testuję na attiny2313 tam są 2 liczniki i nie ma problemu, ale docelowo uP w latarce to będzie attiny13, także muszę jakoś to rozwiązać.
W sumie, to nie planowaliśmy takiego jej zastosowania (była projektowania do wersji 3), ale po małej analizie wyszło, że prawie idealnie nada się do 4-ki.Steff.k pisze:Z tą samą płytka do ver 3.xx i 4.xx nieźle wykombinowałeś. Szczwane z Ciebie Bestia
Wyszło to w sumie przypadkiem, a tym elementem, który trzeba zewrzeć, to kondensator wyjściowy no i oczywiście dostawiony microswitch
W gwoli ścisłości, to płytki projektował Arek i to przede wszystkim on cierpliwie testował różne wypracowywane wspólne te lepsze i gorsze pomysły - a trochę ich było... Myślę, że czas poświęcony na v3 można liczyć w setkach godzin na głowę - prawda Arku?
Zakładam, że masz czyste intencje i nie zamierzasz po prostu skopiować naszego rozwiązania, a następnie za bezcent sprzedać ludzikom z małymi żółtymi rączkamiSteff.k pisze:Jeszcze mam pytanie programistyczne
Jeśli to nie jest ściśle strzeżona tajemnica oczywiście .
Robię to wszystko na jednym timerze stosując implementacje kaskadowych liczników, na których wyliczam sobie podziały częstotliwości i czasu używane do innych celów - np. jako podstawa czasu do sterowania sekwencjami.Steff.k pisze:W attiny13 jest jeden timer/licznik/pwm. W związku z tym jak rozwiązujesz PWM i zliczanie impulsów?
Czyli u mnie 1 sekunda, to przykładowo 80 tys cykli PWM - podpowiedziałem?
To drugie - liczę odstępy czasu na cyklach timera, PWM to własna (niestandardowa) implementacja - inaczej nie uzyskałbym tak szerokiej rozpiętości i tak niskiego low`a.Steff.k pisze:1. Przy dwu/trój kliku liczysz wystąpienia INT0, a PWM'a używasz hardwarowego, czy
2. Przy dwu/trój kliku liczysz impulsy timerem, a PWM'a sam napisałeś??, czy może jeszcze inaczej.
Co więcej nie tylko liczę w ten sposób czas minimalnej przerwy, która rozróżnia dwa pojedyncze kliknięcia od jednego podwójnego, ale i czas przyciśnięcia przycisku.
W ten sposób zabezpieczam się przed odbiciami styków / iskrzeniem / niestabilnym kontaktem wyłącznika. Zauważ, że wejścia ze switch`a nie blokujemy żadnym kondensatorkiem - filtrowane jest to programowo.
Ano właśnie - ja też trochę żałuję, że 13-tka ma tylko jeden timer.Steff.k pisze:Aktualnie soft testuję na attiny2313 tam są 2 liczniki i nie ma problemu, ale docelowo uP w latarce to będzie attiny13, także muszę jakoś to rozwiązać.
Zastanawialiśmy się z Arkiem, czy nie przejść na 15-tkę, głównie z powodu dodatkowego timera. Wówczas jeden by robił PWM, a drugi z większym preskalerem robił za sequencer dla zdarzeń wolnozmiennych (sekwencje) i zegar czasu rzeczywistego.
2313 jest ciekawym układem z rodziny ATtiny - w sumie to tiny, a jednak ma i więcej portów (nóżek) i w środku trochę więcej pamięci i peryferiów.
Ale do zastosowania w układzie z jednym we. i jednym wy. (+ew. 2-gie wejście do pomiaru prądu) to trochę profanacja, no i rozmiarowo jest trochę jednak przyduży. Dlatego też zdecydowaliśmy się na 13-tki z myślą na przejście w przyszłości na 15-tki (25/45/85), bo są one małe i wystarczające (no i kompatybilne pod względem pinout`ów z 13-tkami, więc PCB zostaje bez zmian).
Widziałem, że piszesz w Bascomie - w 1kB flasha nie zmieścisz kodu sterownika z tyloma funkcjami - ja piszę w assemblerze i jest to nie lada wyzwanie. Walka o każdy bajt kodu i o niemalże każdy cykl procesora. Mógłbym oczywiście pójść po najniższej linii oporu, ale wówczas nie zmieściłbym tam aż tylu funkcji. To dobra szkoła optymalizacji i efektywnego tworzenia kodu - w projektach o mniejszej skali lub wymagających max. efektywności pisanie kodu w asm bardzo się opłaca. Natomiast jakbym miał programować kontroler robiący dużo operacji zmiennoprzecinkowych lub operujący masowo np. na Stringach, to pwenie usiadłbym do C, bo będzie łatwiej.
Dziś wielu programistów nie zwraca uwagi na optymalizacje (a wiem co mówię) i często idzie na łatwiznę - pamięci są tanie, procesory coraz szybsze... i pewnie mają rację - tak jest taniej, co nie znaczy, że lepiej.
Wystarczy skompilować sobie głupie okienkowe "Hello world." - wszystko jedno, czy w Delphi, Visual C/C++, C#, dotNet, czy Javie - zobaczysz ile na start zajmuje (nie liczę grubych MB kodu i bibliotek maszyn wirtualnych JVM i .Net itp.).
A z drugiej strony są ludzie, którzy w 4kB kodu są w stanie zrobić naprawdę wypasione trójwymiarowe demo z renderowaniem animacji w locie, muzyką i innymi efektami - ot, choćby takie: http://www.joemonster.org/filmy/8176/4kB-demo-na-PC
No i offtopowo się trochę rozpisałem... sorry.
Flagiusz
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
...ja z matmy zawsze byłem słaby, hehe, zegara szachowego na stole nie mam...ale faktem jest że tyle czasu to może przy pracy dyplomowej przesiedziałem...df pisze:Myślę, że czas poświęcony na v3 można liczyć w setkach godzin na głowę - prawda Arku?
Myślę, że Darku najwięcej spędziłes go Ty, kladziesz sie spac z problemem a wstajesz z rozwiazaniem-twój mózg światełkowy nie śpi
Pomysł z driverem w wyłączniku, jak dla mnie jest ciekawy. Często w momencie przerabiania jakiejś zwykłej latarki (przeznaczonej na koszyczek) występuje wielki problem braku miejsca. Już samo włożenie Li-ion (18650) graniczy z cudem, a wygospodarowanie dodatkowego, nawet tylko 0,5 cm na driver staje się niemożliwe. Już w tej chwili chętnie bym zamontował taki sterowniczek w latarce ( nawet, jeżeli wiąże się to z pewnym spadkiem maksymalnej jasności diody). Wydłużenie czasu pracy i możliwość regulacji jasności jest nie do pogardzenia. Nie zawsze wyduszanie maksymalnych osiągów jest jedyną słuszną drogą ( dotyczy to również innych dziedzin życia, nie tylko światełek).
df - jeśli dobrze rozumiem pwm'a robisz za pomocą zwykłej pętli by otrzymać dużą rozdzielczość?
Filtrowanie przycisków można zrobić za pomocą timera mierząc czasy puszczenia i wciśnięcia przycisku i uwzględniania tylko tych "przyciśnięć" które trwają odpowiednio długo - podszedłeś do tego w ten sposób?
.....
później w pętli głównej
itd.
Ja dziobię w C bo jestem zbyt leniwy - w większych i średnich projektach optymalne podejście jest takie że wszystko robi się w C i potem optymalizuje wybrane fragmenty kodu w asemblerze (tzw. wstawki asemblerowe) pozwala szybko stworzyć program który można potem optymalizować w asemblerze.
Filtrowanie przycisków można zrobić za pomocą timera mierząc czasy puszczenia i wciśnięcia przycisku i uwzględniania tylko tych "przyciśnięć" które trwają odpowiednio długo - podszedłeś do tego w ten sposób?
Kod: Zaznacz cały
TIMER0_OVERFLOW {
JESLI( BUTTON_ON ) { // button on
button_off_counter = 0;
button_on_counter = button_on_counter + 1;
}
JESLI( BUTTON_OFF ) { // button off
button_on_counter = 0;
button_off_counter = button_off_counter + 1;
}
TCNT0 = TIMER0_INITVAL; // (255 - 185) = 70 ticks to next overflow
}
później w pętli głównej
Kod: Zaznacz cały
if(button_on_counter > 500) p_state = STATE_EXTRA_MODE;
Ja dziobię w C bo jestem zbyt leniwy - w większych i średnich projektach optymalne podejście jest takie że wszystko robi się w C i potem optymalizuje wybrane fragmenty kodu w asemblerze (tzw. wstawki asemblerowe) pozwala szybko stworzyć program który można potem optymalizować w asemblerze.
Nie, robię to na szybkim timerze.DeeM pisze:df - jeśli dobrze rozumiem pwm'a robisz za pomocą zwykłej pętli by otrzymać dużą rozdzielczość?
Dokładnie tak to zrobiłem.DeeM pisze:Filtrowanie przycisków można zrobić za pomocą timera mierząc czasy puszczenia i wciśnięcia przycisku i uwzględniania tylko tych "przyciśnięć" które trwają odpowiednio długo - podszedłeś do tego w ten sposób?
No ja od razu piszę w asm - tak jest szybciej i dla mnie i dla procesoraDeeM pisze:Ja dziobię w C bo jestem zbyt leniwy - w większych i średnich projektach optymalne podejście jest takie że wszystko robi się w C i potem optymalizuje wybrane fragmenty kodu w asemblerze (tzw. wstawki asemblerowe) pozwala szybko stworzyć program który można potem optymalizować w asemblerze.
Lubię mieć pewność co procesor zrobi w każdym cyklu i panować nad tym - można naprawdę sporo wycisnąć i pod względem szybkości kodu i jego wielkości - co w przypadku ATtiny13 i mocno rozbudowanej funkcjonalności staje się bardzo istotne.
Flagiusz
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
Baaaardzo ciekawy pomysłBiszkopt pisze:Jeszcze jeden plus sterowania mikrowyłącznikiem. Przy wykonywaniu własnego body, można zrezygnować ze switcha i gumki na nim. Jednej dziury wpuszczającej wodę mniej. Wystarczy kontaktron na płytce i magnesik neodymowy na zewnątrz, to tylko kwestia przemyślenia konstrukcji mechanicznej.
Jak znalazł do konstrukcji podwodnych
Nie żartuję, sam nurkuję i mam latarę do 40m zanurzenia....
- Calineczka
- Posty: 7578
- Rejestracja: niedziela 11 lis 2007, 20:19
- Lokalizacja: Wejherowo
- Kontakt:
Panowie, latareczkę zmodowałem.
Oryginalny driver zastąpiony SKU7882, w zakrętce na oryginalnej płytce wstawiony inny Attiny+mały pajączek, z prototypową wersją softu by Df.Oj, podoba mi się latareczka!!!
SKU7882 trochę "śpiewa" przy kluczowaniu zasilania, każdy tryb ma własny ton....stety/niestety, jak kto woli...ma to swój klimacik...cichutko ale słychac teraz ten mieczyk świetlny
Jak wyszło?
SKU trzeba było mooocno dociąć, zeszlifowac boki, ciut poprzestawiać elementy i na drucikach lutować...ale weszło.nawet nieźle...oryginalny driver był do kitu (może 0,35A w diodę)...teraz w diodkę idzie koło 1A i można kręcić sobie potencjometrem i regulować...
A wyniki...?
Mierzone Sonopanem około 1400lux/1m
Mierzone chińskim, skalibrowanym Sonopanem około 1200lux/1m
Ciekawe, światło dzienne pokazuja równo...widać czujniki mają inne charakterystyki widmowe...no i chińczyk chyba o tym nie wie
Chyba nabede dla siebie takie światełko, będzie na czym wersję w zakrętce trenować...
no to mała sesyjka:
zrobiłem ref na różne sposoby żebyście mogli dobrze go zobaczyć...chyba widać?
...i jeszcze dorzucam zdjęcia bohatera naszego serialu czyli driverka, wersja w zakrętce:
z tej strony nic nie musialem zmieniac
i tak wygląda w zakrętce...
Oryginalny driver zastąpiony SKU7882, w zakrętce na oryginalnej płytce wstawiony inny Attiny+mały pajączek, z prototypową wersją softu by Df.Oj, podoba mi się latareczka!!!
SKU7882 trochę "śpiewa" przy kluczowaniu zasilania, każdy tryb ma własny ton....stety/niestety, jak kto woli...ma to swój klimacik...cichutko ale słychac teraz ten mieczyk świetlny
Jak wyszło?
SKU trzeba było mooocno dociąć, zeszlifowac boki, ciut poprzestawiać elementy i na drucikach lutować...ale weszło.nawet nieźle...oryginalny driver był do kitu (może 0,35A w diodę)...teraz w diodkę idzie koło 1A i można kręcić sobie potencjometrem i regulować...
A wyniki...?
Mierzone Sonopanem około 1400lux/1m
Mierzone chińskim, skalibrowanym Sonopanem około 1200lux/1m
Ciekawe, światło dzienne pokazuja równo...widać czujniki mają inne charakterystyki widmowe...no i chińczyk chyba o tym nie wie
Chyba nabede dla siebie takie światełko, będzie na czym wersję w zakrętce trenować...
no to mała sesyjka:
zrobiłem ref na różne sposoby żebyście mogli dobrze go zobaczyć...chyba widać?
...i jeszcze dorzucam zdjęcia bohatera naszego serialu czyli driverka, wersja w zakrętce:
z tej strony nic nie musialem zmieniac
i tak wygląda w zakrętce...