driverek by Flagiusz-inaczej czyli ciekawy sposob sterowania

co i jak zrobiłem...
Awatar użytkownika
Steff.k
Posty: 401
Rejestracja: niedziela 06 sty 2008, 13:51
Lokalizacja: Kraków

Post autor: Steff.k »

Aktualnie "bawię się softem" na attiny. Prawdę mówiąc to biorę z Was przykład :D . 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 :D, także mam jeszcze chwilę czasu na ukończenie.

Dzięki za pomiary :D
Awatar użytkownika
Calineczka
Posty: 7578
Rejestracja: niedziela 11 lis 2007, 20:19
Lokalizacja: Wejherowo
Kontakt:

Post autor: Calineczka »

W jakim języku piszesz?
Mysle, ze Darek z checia Ci podpowie co i jak ;-)
Darek robi wsio w ...assemblerze :shock:

Wylaczanie dlugoklikiem?osobny wlacznik zasilania czy Attiny non-stop pod pradem?
Awatar użytkownika
Steff.k
Posty: 401
Rejestracja: niedziela 06 sty 2008, 13:51
Lokalizacja: Kraków

Post autor: Steff.k »

Wstyd się przyznać ale w Bascomnie :oops: . 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).
Awatar użytkownika
Calineczka
Posty: 7578
Rejestracja: niedziela 11 lis 2007, 20:19
Lokalizacja: Wejherowo
Kontakt:

Post autor: Calineczka »

Jasne, wlasnie-o to chodzi, jeden mikroswitch zalatwia wszystko.I nie ma problemow z duzymi pradami, niepewwnoscia dzialania......
Mikroswitch jak kazde urzadzonko ma prawo sie zepsuc ale mysle ze liczbe cykli ma stanowczo wieksza od wlacznika....
Awatar użytkownika
df
Posty: 307
Rejestracja: piątek 23 lis 2007, 15:38
Lokalizacja: z nienacka
Kontakt:

Post autor: df »

Steff.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).
Dokładnie tak samo to zrobiłem z pół roku temu w swojej pierwszej wersji sterownika - http://flagiusz.republika.pl/flashlight ... oller.html :-)

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 :grin:. 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
Awatar użytkownika
Steff.k
Posty: 401
Rejestracja: niedziela 06 sty 2008, 13:51
Lokalizacja: Kraków

Post autor: Steff.k »

Dzięki za porady na pewno z nich skorzystam:D. ADC jeszcze nigdy nie używałem, muszę dopiero poczytać to i owo :D.

Z tą samą płytka do ver 3.xx i 4.xx nieźle wykombinowałeś. Szczwane z Ciebie Bestia ;) :D

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ć.
Awatar użytkownika
df
Posty: 307
Rejestracja: piątek 23 lis 2007, 15:38
Lokalizacja: z nienacka
Kontakt:

Post autor: df »

Steff.k pisze:Z tą samą płytka do ver 3.xx i 4.xx nieźle wykombinowałeś. Szczwane z Ciebie Bestia ;) :D
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.
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?
Steff.k pisze:Jeszcze mam pytanie programistyczne ;)
Jeśli to nie jest ściśle strzeżona tajemnica oczywiście .
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ączkami ;-)
Steff.k pisze:W attiny13 jest jeden timer/licznik/pwm. W związku z tym jak rozwiązujesz PWM i zliczanie impulsów?
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.
Czyli u mnie 1 sekunda, to przykładowo 80 tys cykli PWM - podpowiedziałem?
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.
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.
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.
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ć.
Ano właśnie - ja też trochę żałuję, że 13-tka ma tylko jeden timer.
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
Awatar użytkownika
Calineczka
Posty: 7578
Rejestracja: niedziela 11 lis 2007, 20:19
Lokalizacja: Wejherowo
Kontakt:

Post autor: Calineczka »

df pisze:Myślę, że czas poświęcony na v3 można liczyć w setkach godzin na głowę - prawda Arku?
...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...
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 :mrgreen:
Awatar użytkownika
Biszkopt
Posty: 61
Rejestracja: piątek 22 lut 2008, 09:31
Lokalizacja: Łódź

Post autor: Biszkopt »

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).
Awatar użytkownika
df
Posty: 307
Rejestracja: piątek 23 lis 2007, 15:38
Lokalizacja: z nienacka
Kontakt:

Post autor: df »

Biszkopt pisze:... nawet, jeżeli wiąże się to z pewnym spadkiem maksymalnej jasności diody...
Spadek jasności LED`a będzie niezauważalny - sterownik pobiera max. 3mA, co przy prądzie nawet 1W LEDa będzie stanowić zaledwie 1% całkowitego poboru energii i odpowiednio 0,33% dla 3W.
Flagiusz
DeeM

Post autor: DeeM »

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?

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;

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.
Awatar użytkownika
df
Posty: 307
Rejestracja: piątek 23 lis 2007, 15:38
Lokalizacja: z nienacka
Kontakt:

Post autor: df »

DeeM pisze:df - jeśli dobrze rozumiem pwm'a robisz za pomocą zwykłej pętli by otrzymać dużą rozdzielczość?
Nie, robię to na szybkim timerze.
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?
Dokładnie tak to zrobiłem.
DeeM 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.
No ja od razu piszę w asm - tak jest szybciej i dla mnie i dla procesora ;-)
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
Awatar użytkownika
Biszkopt
Posty: 61
Rejestracja: piątek 22 lut 2008, 09:31
Lokalizacja: Łódź

Post autor: Biszkopt »

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.
Awatar użytkownika
Calineczka
Posty: 7578
Rejestracja: niedziela 11 lis 2007, 20:19
Lokalizacja: Wejherowo
Kontakt:

Post autor: Calineczka »

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.
Baaaardzo ciekawy pomysł :!:
Jak znalazł do konstrukcji podwodnych :!:
Nie żartuję, sam nurkuję i mam latarę do 40m zanurzenia.... :mrgreen:
Awatar użytkownika
Calineczka
Posty: 7578
Rejestracja: niedziela 11 lis 2007, 20:19
Lokalizacja: Wejherowo
Kontakt:

Post autor: Calineczka »

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ć... :mrgreen:

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ć... :mrgreen:


no to mała sesyjka:
Obrazek
Obrazek
Obrazek
Obrazek
Obrazek
Obrazek
Obrazek


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:

Obrazek Obrazek Obrazek

z tej strony nic nie musialem zmieniac ;-)
Obrazek

i tak wygląda w zakrętce...
Obrazek
ODPOWIEDZ