Proszę o pomoc przy opracowaniu trybów lampki rowerowej
Proszę o pomoc przy opracowaniu trybów lampki rowerowej
Witam serdecznie wszystkich forumowiczów, jestem tu nowy, chociaż podglądam was już jakiś czas
Z tego podglądania wynikło tylko tyle, że zbrzydło mi moje chińskie świecidełko zamontowane na baranku Malwiny. Zdecydowałem się zbudować lampkę, która sprawi, że będę bardziej widoczny. Zakupiłem więc diodę Seul Semicon P4, optykę o kącie wiązki 45 stopni i attiny13 do realizacji trzech prostych trybów: ciągły 30%, ciągły 100% i mrygacz który będzie używany najczęściej.
Całość chciałbym załączać/przełączać jednym microswitchem. Hmm… i tu pojawia się problem. Przechodzenie z jednego trybu do kolejnego odbywa się całkiem normalnie, każde wciśnięcie przycisku powoduje przerwanie (INT0), przy czwartym wciśnięciu przycisku, uC powinien wejść w tryb Powerdown. A przy kolejnym miałby się wybudzić. W trybie uśpienia powinien pobierać z baterii jakieś pojedyncze mikroampery. Nie jestem jednak pewien, czy w ten sposób można zrealizować takie sterowanie. Prosiłbym o wasze rady.
Przetwornicy również jeszcze nie wybrałem, ale na razie chciałbym same tryby opracować. A może ktoś z was mógłby opisać zmianę trybów przez odłączenie minusa? Ja jakoś nie potrafię sobie tego wyobrazić. Pozdrawiam
Z tego podglądania wynikło tylko tyle, że zbrzydło mi moje chińskie świecidełko zamontowane na baranku Malwiny. Zdecydowałem się zbudować lampkę, która sprawi, że będę bardziej widoczny. Zakupiłem więc diodę Seul Semicon P4, optykę o kącie wiązki 45 stopni i attiny13 do realizacji trzech prostych trybów: ciągły 30%, ciągły 100% i mrygacz który będzie używany najczęściej.
Całość chciałbym załączać/przełączać jednym microswitchem. Hmm… i tu pojawia się problem. Przechodzenie z jednego trybu do kolejnego odbywa się całkiem normalnie, każde wciśnięcie przycisku powoduje przerwanie (INT0), przy czwartym wciśnięciu przycisku, uC powinien wejść w tryb Powerdown. A przy kolejnym miałby się wybudzić. W trybie uśpienia powinien pobierać z baterii jakieś pojedyncze mikroampery. Nie jestem jednak pewien, czy w ten sposób można zrealizować takie sterowanie. Prosiłbym o wasze rady.
Przetwornicy również jeszcze nie wybrałem, ale na razie chciałbym same tryby opracować. A może ktoś z was mógłby opisać zmianę trybów przez odłączenie minusa? Ja jakoś nie potrafię sobie tego wyobrazić. Pozdrawiam
Re: Proszę o pomoc przy opracowaniu trybów lampki rowerowej
Można.kurczak pisze:Przechodzenie z jednego trybu do kolejnego odbywa się całkiem normalnie, każde wciśnięcie przycisku powoduje przerwanie (INT0), przy czwartym wciśnięciu przycisku, uC powinien wejść w tryb Powerdown. A przy kolejnym miałby się wybudzić. W trybie uśpienia powinien pobierać z baterii jakieś pojedyncze mikroampery. Nie jestem jednak pewien, czy w ten sposób można zrealizować takie sterowanie. Prosiłbym o wasze rady.
Bardzo dobrze wybrałeś port pod INT0, gdyż można nim cpu z głębokiego stanu uśpienia zbudzić.
Nie wiem w czym piszesz, ale na przykładzie assemblera można zrobić to tak (Temp to rejest z górnej 16-tki):
0. jak złapiesz 4-ty tryb do potrzymaj program np. w pętli aż nie zostanie przycisk zwolniony i dopiero idź dalej w sleep`a (dobrze jest zabezpieczyć się przed odbiciami styków), bo inaczej uśpisz procesor i od razu go wybudzisz
1. musisz włączyć przerwanie generowane stanem na porcie (port oczywiście skonfigurowany jako wejściowy)
ldi Temp, 0b01000000 ; (1<<INT0)
out GIMSK, Temp
2. konfigurujesz procesor w najgłębszy tryb uśpienia (ten, co ma 0,2uA) i wskazujesz jakim stanem na porcie zostanie wygenerowane przerwanie i zbudzony procesor - np. L
ldi Temp,0b00110000 ; power-down - stan L
out mcucr,Temp
3. ja jeszcze dla pewności zeruję przerwanie (gdyby się ktoś w trakcie wstrzelił)
clr Temp
out GIFR,Temp ; erase INT0
4. ważna rzecz - przerwania muszą być odmaskowane
sei
5. no i usypiasz go
sleep; ; set CPU in Power-down mode
a po zbudzeniu musisz poprzywracać jego funkcje życiowe, które być może przed uśpieniem wyłączyłeś, w szczególności jak używasz jeszcze gdzieś sleep`a to zmieniasz poziom uspienia na wyższy itd.
ldi Temp,0b00100000 ; sleep (1<<SE) - idle
out mcucr,Temp
Ważna rzecz - jak używasz ADC z wewnętrznym Vref - to przed uśpieniem wyłączaj ADC, bo będzie Ci ciągnął niecałe 1mA - co dziwne Vref nie jest w power-down z automatu odłączane.
Poszukaj proszę na forum sam kilka razy opisywałem tu różne sposoby realizacji tego.kurczak pisze:Przetwornicy również jeszcze nie wybrałem, ale na razie chciałbym same tryby opracować. A może ktoś z was mógłby opisać zmianę trybów przez odłączenie minusa? Ja jakoś nie potrafię sobie tego wyobrazić. Pozdrawiam
Pozdrawiam,
Flagiusz
Dziękuję za szybką odpowiedź. Programuję w Bascom'ie a właściwie dopiero się uczę (to mój drugi projekt z użyciem uC)
Odkłucanie styków faktycznie warto zrobić, bo widzę jak odbywa się zmiana trybów: czasem przeskoczy o dwa, trzy albo i więcej. Dlatego też myślałem, żeby główna pętla programu zajęła się tylko i wyłącznie odczytem portu i niczym więcej (polecenie "debounce"). W przypadku zwarcia do masy uruchamia się procedura, która wyrzuca na inny pin pwm'a. W ten sposób mam zrealizowane 3 tryby. Przy czwartym uaktywniam int0 i chciałbym usypiać poleceniem "Powerdown" co teoretycznie powinno wyłączyć całego procka oprócz obsługi przerwania.
Z ADC nie korzystam, przynajmniej świadomie
Napisz mi proszę czy ma to jakiś sens i czy warto w to brnąć.
Mógłbym pokazać kod, tylko nie wiem, czy to pomoże...
Odkłucanie styków faktycznie warto zrobić, bo widzę jak odbywa się zmiana trybów: czasem przeskoczy o dwa, trzy albo i więcej. Dlatego też myślałem, żeby główna pętla programu zajęła się tylko i wyłącznie odczytem portu i niczym więcej (polecenie "debounce"). W przypadku zwarcia do masy uruchamia się procedura, która wyrzuca na inny pin pwm'a. W ten sposób mam zrealizowane 3 tryby. Przy czwartym uaktywniam int0 i chciałbym usypiać poleceniem "Powerdown" co teoretycznie powinno wyłączyć całego procka oprócz obsługi przerwania.
Z ADC nie korzystam, przynajmniej świadomie
Napisz mi proszę czy ma to jakiś sens i czy warto w to brnąć.
Mógłbym pokazać kod, tylko nie wiem, czy to pomoże...
Zachęcam do przejrzenia forum i poczytania sobie dyskusji o prototypach różnych powstających na forum driverków - zarówno tych starszych jak i nowych - ot choćby ostatnie bardzo ciekawe prace Pyry, w których poruszane jest wiele ważnych aspektów oraz gotowych rozwiązań odpowiadających na Twoje pytania.
http://www.swiatelka.pl/viewtopic.php?t=147
http://www.swiatelka.pl/viewtopic.php?t=483
http://www.swiatelka.pl/viewtopic.php?p=26588
http://www.swiatelka.pl/viewtopic.php?p=26590
itd.
http://www.swiatelka.pl/viewtopic.php?t=147
http://www.swiatelka.pl/viewtopic.php?t=483
http://www.swiatelka.pl/viewtopic.php?p=26588
http://www.swiatelka.pl/viewtopic.php?p=26590
itd.
Flagiusz
Jest to bardzo ważne, włąśnie ze względu na drgania styków powodujące przeskakiwanie na losowe tryby (po kilka od razu) co w Twoim przypadku może się ko nczyć wyłączeniem latarki.kurczak pisze: Odkłucanie styków faktycznie warto zrobić, bo widzę jak odbywa się zmiana trybów: czasem przeskoczy o dwa, trzy albo i więcej.
Debounce, po początkowych próbach odrzuciłem jako "pamięciożerną"kurczak pisze: Dlatego też myślałem, żeby główna pętla programu zajęła się tylko i wyłącznie odczytem portu i niczym więcej (polecenie "debounce").
Stosuję prosty schemat
;
Pin = 1 skok do procedury
procedura:
waitms 2
pin = 0 powrót
program zmiany kodu
Wykrywa to odpowiednio długie impulsy i zajmuje mało miejsca.
Zmiana trybów odłączaniem zasilania jest naprawdę prosta do realizacji i nie wymaga wprowadzania procesora w tryb uśpienia.
Pozdrawiam
PS: W temacie Tania letarka No Name masz listingi z opisem
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
Dziękuję, zabieram się do lektury.
hmm... bardzo fajne te wasze projekty... ale ja bym chciał po swojemu. Tzn. jeden włącznik przelatujący przez tryby i uśpienie procka a następnie wybudzenie. Napisałem program i ku memu zdziwieniu raz działa raz nie !?!?!?
Po włączeniu zasilania procek powinien mignąć diodą i przejść w tryb uśpienia. Wybudzenie z int0, zablokowanie globalne przerwań, tryby i znów uśpienie, wybudzenie i tak w koło Macieju.
Jest jednak problem, bo powerdown nie działa tak jak tego oczekuję. Spodziewałem się, że stan na wyjściu będzie 0, a jednak nie zawsze i czasami dioda świeci dalej (a własciwie tylko czasami gasnie). Czym to może być spowodowane??
oto kod:
Dim Stan As Byte
Stan = 0
Config Portb.0 = Output
Config Portb.1 = Input
Set Portb.1
Reset Portb.0
enable Int0
Enable Interrupts
Toggle Portb.0
Waitms 100
Toggle Portb.0
Wait 1
Powerdown
Do
Debounce Pinb.1 , 0 , Guzik , Sub
Loop
End
Guzik:
Incr Stan
If Stan = 4 Then Stan = 0
Select Case Stan
Case 0:
Enable Int0
Enable Interrupts
Wait 1
Powerdown
Case 1: '
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1024 , Compare A Pwm = Clear Down
Pwm0a = 100
Case 2:
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Pwm0a = 60
Case 3:
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Pwm0a = 250
End Select
Return
Jako ciekawostkę podam, że po pierwszym "powerdown" układ pobiera z zasilania ok 36uA, wiec nie do konća działa. Wg dokumentacji procka powinien pobierać jakieś 8 razy mniej. Później po wejsciu w tryby od 2 do 5mA. Do scalaka mam podpiętą diodę 5 mm przez rezystor i właściwie microswitcha + programator. Jutro sprawdzę jak będzie to wyglądać przy zasilaniu zewnętrznym.
hmm... bardzo fajne te wasze projekty... ale ja bym chciał po swojemu. Tzn. jeden włącznik przelatujący przez tryby i uśpienie procka a następnie wybudzenie. Napisałem program i ku memu zdziwieniu raz działa raz nie !?!?!?
Po włączeniu zasilania procek powinien mignąć diodą i przejść w tryb uśpienia. Wybudzenie z int0, zablokowanie globalne przerwań, tryby i znów uśpienie, wybudzenie i tak w koło Macieju.
Jest jednak problem, bo powerdown nie działa tak jak tego oczekuję. Spodziewałem się, że stan na wyjściu będzie 0, a jednak nie zawsze i czasami dioda świeci dalej (a własciwie tylko czasami gasnie). Czym to może być spowodowane??
oto kod:
Dim Stan As Byte
Stan = 0
Config Portb.0 = Output
Config Portb.1 = Input
Set Portb.1
Reset Portb.0
enable Int0
Enable Interrupts
Toggle Portb.0
Waitms 100
Toggle Portb.0
Wait 1
Powerdown
Do
Debounce Pinb.1 , 0 , Guzik , Sub
Loop
End
Guzik:
Incr Stan
If Stan = 4 Then Stan = 0
Select Case Stan
Case 0:
Enable Int0
Enable Interrupts
Wait 1
Powerdown
Case 1: '
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1024 , Compare A Pwm = Clear Down
Pwm0a = 100
Case 2:
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Pwm0a = 60
Case 3:
Disable Interrupts
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Pwm0a = 250
End Select
Return
Jako ciekawostkę podam, że po pierwszym "powerdown" układ pobiera z zasilania ok 36uA, wiec nie do konća działa. Wg dokumentacji procka powinien pobierać jakieś 8 razy mniej. Później po wejsciu w tryby od 2 do 5mA. Do scalaka mam podpiętą diodę 5 mm przez rezystor i właściwie microswitcha + programator. Jutro sprawdzę jak będzie to wyglądać przy zasilaniu zewnętrznym.
To też już przerabialiśmykurczak pisze:hmm... bardzo fajne te wasze projekty... ale ja bym chciał po swojemu. Tzn. jeden włącznik przelatujący przez tryby i uśpienie procka a następnie wybudzenie.
http://www.swiatelka.pl/viewtopic.php?t=483
http://flagiusz.republika.pl/flashlight ... ght_5.html
http://flagiusz.republika.pl/flashlight ... oller.html
http://flagiusz.republika.pl/flashlight ... ght_9.html
Przetrace`uj dokładnie program na symulatorze - uwzględniaj odbicia styków i stany nieustalone, które źle badasz.kurczak pisze:Napisałem program i ku memu zdziwieniu raz działa raz nie !?!?!?
Po włączeniu zasilania procek powinien mignąć diodą i przejść w tryb uśpienia. Wybudzenie z int0, zablokowanie globalne przerwań, tryby i znów uśpienie, wybudzenie i tak w koło Macieju.
O ile dobrze pamiętam, to w power-down porty wy. są ustawiane w HZ (do sprawdzenia w spec., bo głowy nie dam). I jeżeli masz sterowany wprost z portu mosfet, to może on łapać ładunek na bramkę i się otwierać - trzeba ją domykać R (1M) do źródła.kurczak pisze:Jest jednak problem, bo powerdown nie działa tak jak tego oczekuję. Spodziewałem się, że stan na wyjściu będzie 0, a jednak nie zawsze i czasami dioda świeci dalej (a własciwie tylko czasami gasnie). Czym to może być spowodowane??
Druga potencjalna przyczyna, to błąd w kodzie - robi coś innego, niż ci się wydaje.
Tu jest pierwszy myk:kurczak pisze: If Stan = 4 Then Stan = 0
Ja bym dał:
If Stan >= 4 Then Stan = 0
Koszt ten sam (brsh zamiast breq) a zabezpieczasz się przed niespodziewanym wyjściem w pole (prawdopodobnie nie używasz BB, więc przy zanikach zasilania możesz się spodziewać niespodzianek).
A dlaczego nie: Pwm0a = 255 ?kurczak pisze: Pwm0a = 250
Albo coś Ci z boku zżera (LED), albo procek nie śpi.kurczak pisze:Jako ciekawostkę podam, że po pierwszym "powerdown" układ pobiera z zasilania ok 36uA, wiec nie do konća działa. Wg dokumentacji procka powinien pobierać jakieś 8 razy mniej. Później po wejsciu w tryby od 2 do 5mA. Do scalaka mam podpiętą diodę 5 mm przez rezystor i właściwie microswitcha + programator. Jutro sprawdzę jak będzie to wyglądać przy zasilaniu zewnętrznym.
Najprawdopodobniej wchodzi w sleep`a i się budzi i tak w kółko.
W powerdown ATtiny13v pobiera 0,2uA (200nA) - sprawdzane wielokrotnie.
Zakładam, że masz microswitch`a zwieranego do masy i na porcie włączony pull-up.
Zrób próbę i wyłącz przerwania i ustaw procek w power-down.
Powinien się zatrzymać na zawsze - i wówczas zmierz prąd.
Flagiusz
Odbicia styków są niwelowane poleceniem "debounce", które sprawdza stan, czeka 25ms i sprawdza ponownie. I z tym już nie mam problemu bo wciskanie przycisku odbywa się precyzyjnie i program reaguje odpowiednio.df pisze: Przetrace`uj dokładnie program na symulatorze - uwzględniaj odbicia styków i stany nieustalone, które źle badasz.
W rzeczy samej, po powerdown port wyjściowy zachowuje swój stan. W związku z tym przed uśpieniem zamieniam wyjście na wejście bez podciągania, a po wybudzeniu z powrotem ustawiam wyjście. Może to nie eleganckie, ale skuteczne.df pisze: O ile dobrze pamiętam, to w power-down porty wy. są ustawiane w HZ (do sprawdzenia w spec., bo głowy nie dam).
Nie mam mosfeta, na razie jest to dioda 5 mm podłączona przez opornik między masą a wyjściem uC.df pisze: I jeżeli masz sterowany wprost z portu mosfet, to może on łapać ładunek na bramkę i się otwierać - trzeba ją domykać R (1M) do źródła.
Nie wiem, tak jakoś Nie chciałem mieć sygnału ciągłego przy użyciu pwm, bo to marnotrawstwo energii. Ten sam efekt będzie, jak się ustawi stan wysoki na wyjściu (chyba).df pisze:A dlaczego nie: Pwm0a = 255 ?kurczak pisze: Pwm0a = 250
I faktycznie, programator mi coś psuł, bo po podłączeniu baterii, wygaszeniu diody i przejściu w tryb powerdown na mierniku uzyskałem 0.2 uA. Wezmę to moje ustrojstwo na polibudę i zmierzę jeszcze porządnym miernikiem, bo ten mój to nie budzi zbyt dużego zaufania.df pisze: Albo coś Ci z boku zżera (LED), albo procek nie śpi.
Najprawdopodobniej wchodzi w sleep`a i się budzi i tak w kółko.
W powerdown ATtiny13v pobiera 0,2uA (200nA) - sprawdzane wielokrotnie.
Takdf pisze: Zakładam, że masz microswitch`a zwieranego do masy i na porcie włączony pull-up.
W chwili obecnej mój attiny działa mniej więcej tak jak tego oczekiwałem. Do poprawienia mam jeszcze tryb migania, nad którym sobie posiedzę. Tzn, nie chcę mieć migania zrealizowanego w tak barbarzyński sposób (tzn przez dzielnik licznika pwm). Będę dążył do uzyskania takiego efektu: 4 mignięcia, dłuższa przerwa i znów 4 mignięcia, znów przerwa itd.
Mam jeszcze pytanko dotyczące kwestii zasilania. Dysponuję pakietem Ni-Cd o znamionowym napięciu 4,8V (szseregowo 4 sztuki po 1,2 każda). Po naładowaniu napięcie dochodzi do prawie 6V. Chciałbym zastosować tu amc7135 w liczbie 2 lub 3 sztuk, jeszcze się nie zdecydowałem. Czy dadzą radę te stabilizatorki, czy może pomyśleć nad jakąś przetwornicą?
pozdrawiam
6V będzie bardzo krótko. Za chwilę spadnie do 4,8V a wtedy tragedii z grzaniem AMC już nie będzie. Oczywiście, przy 4 ogniwach Ni-Cd przetwornica step-down byłaby pewnie lepsza, chociaż na AMC7135 konstrukcja będzie banalna. Z wyjścia procka sterujesz bezpośrednio VDD AMC-ków.
Sterownik extended v3.5 HE <klik>
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Instrukcje sterowników w PDF <klik>
kontakt: info(at)krypton(dot)pl
(podstawić @ i . w stosowne miejsca)
Witam
Musiał byś popytać u Gembary, lub U Edy, powinni coś mieć, ale trudno Ci będzie znaleźć coś w małej obudowie. Bardzo dobry układ to PT4105 (patrz Projekt przetwornicy CC) znakomicie sprawdza się w tej roli i stosunkow łatwo ją sterować przez PWM.
Musiał byś popytać u Gembary, lub U Edy, powinni coś mieć, ale trudno Ci będzie znaleźć coś w małej obudowie. Bardzo dobry układ to PT4105 (patrz Projekt przetwornicy CC) znakomicie sprawdza się w tej roli i stosunkow łatwo ją sterować przez PWM.
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
No muszę Cię rozczarować, ale przy 3,4V w diodę szło jeszcze 200mA, tak że działa poniżej. Na trzeciej stronie datasheet'a masz tabelkę:kurczak pisze: Przejrzałem notę i faktycznie całkiem sympatyczny scalak. teoretycznie działa od 4,5V więc nie musiałbym kombinować z ochroną akumulatora.
Operating Voltage min. 2,5V max. 18V
Mogę Ci jeden podarowaćkurczak pisze:Jest tylko jeden szkopuł, nie widać tego układu w sklepach. Może ktoś z was miałby odsprzedać?
Odezwij się na PW to ustalimy szczegóły dostawy
Tak się zastanawiam, czy nie praktyczniej by było, gdyby tryby zmianiały się w kółko a wyłączenie latarki następowało przy dłuższym przytrzymaniu przycisku, lub "dwukliku". Mógłbyś wtedy zmieniać jasność w zależności od warunków na drodze, bez konieczności wyłączania i włączania ponownie latarki.
Pozdrawiam
Izali miecz godniejszy niżli topór w boju?
Piszmy po polsku, wszak jesteśmy Polakami.
Piszmy po polsku, wszak jesteśmy Polakami.
Też o tym myślałem. Tzn. nie o dwukliku, tylko o długim kliku wyłączającym co było by łatwiej zrealizować bez konieczności używania timera. posiedzę nad tym dzisiaj i to rozpracuję. A tak w ogóle to mi mój pakiet akumulatorów padł. Napięcie zeszło do 2V więc nie nada się do zasilania powerleda. Będę się musiał rozejrzeć za innym. Pewnie znowu zorganizuję sobie moduł zasilania awaryjnego ;P Jest to fajna rzecz, bo z ładowarką w komplecie.
Zamówiłem dzisiaj max1797, jeśli wyślą, to będzie na tył. Myślę o 2x1W w kolorze czerwonym i będzie tylko tryb migający + optyka owalna ułożona względem siebie pod kątem prostym (tzn. mniej więcej tak: -- | ).
Pozdrawiam
Zamówiłem dzisiaj max1797, jeśli wyślą, to będzie na tył. Myślę o 2x1W w kolorze czerwonym i będzie tylko tryb migający + optyka owalna ułożona względem siebie pod kątem prostym (tzn. mniej więcej tak: -- | ).
Pozdrawiam
'W życiu nie liczą się tylko ciało i muskuły - ważny jest jeszcze fryz.' - Johny Bravo