Stránka 1 z 1
Picaxe a PWM
Napsal: čtv 01.12.2022 9:45
od blesk
Ahoj,
jsem takový programátor na baterky a většinou končím rozblikáním ledky
Dělám na model osvětlení na způsob kolegů
http://rcmodely.cevaro.sk/index.php?id= ... osvetlenienicméně na PICe nejsem vybavený, tak to bastlím z Picaxe 08m2. Řízení z RX nepožaduju.
Program je velmi jednoduchý:
init:
pwmout C.2,150,100 ; inicializuj modul pwm
main:
pwmduty C.2,1023 ; nastav činitel plnění
pause 50 ; čekej 0,05 s
pwmduty C.2,100 ; změň činitel plnění
pause 100 ; čekej 0,1 s
pwmduty C.2,1023 ; nastav činitel plnění
pause 50 ; čekej 0,05 s
pwmduty C.2,100 ; nastav činitel plnění
pause 1000 ; čekej 1,0 s
goto main ; zpět na „main"
Jen mi není úplně jasná hodnota z inicializace PWM (tu jsem opsal z příručky). Programovací editor má na nastavení PWM průvodce, ten ale dává jiné čísla.
Úkolem je vytvořit PWM tak aby ledka byla "podsvětlená" třeba na 25% výkonu (doladím až s konkrétní led a dle toho jak se mi to bude líbit) a do toho byly krátké záblesky "naplno".
u inicializace PWM vychází první číslo z periody procesoru vzorkovací frekence PWM, (u mě například pro 4MHz u MCU a 10kHz u PWM) vychází hodnota 99 s tím že aby to svítilo naplno tak je hodnota plnění 400. U toho inicializačního řádku
init:
pwmout C.2,150,100 ; inicializuj modul pwm ta 150 je tedy vypočtená hodnota pro frekvenci MCU a PWM (mě tedy vyšlo těch 99) a ta 100? je to jen prvotní nastavení než ho změním příkazem
pwmduty?
Díky

Re: Picaxe a PWM
Napsal: čtv 01.12.2022 14:20
od ellet
Sice s tím nedělám ale podle manuálu, z kterého jsi čerpal vidím, že 150 z příkladu je frekvence opakování periody (viz obr. period) a odpovídá to cca 6.5kHz.
Pwmduty tento parametr (150) nemění. Jak dlouho během každé periody bude dioda svítit („činitel plnění křivky“)je poslední číslo jak u pwmout, tak u pwmduty a maximální „užitečná“ hodnota tohoto čísla bude závislá na použité frekvenci. Možnost nastavení rozlišení jasu bude tím větší, čím nižší frekvenci použiješ.
Prakticky bych se s tím nepáral a nastavil nejnižší frekvenci (cca 250 – odpovídá cca 1kHz, to by snad mělo stačit) a jas potom bude možné řídit cca od 1 (možná od 0) do cca 1000 (při frekvenci 2x větší bude plný jas kolem čísla 500).
Tak tomu aspoň rozumím a snad jsem to moc nezašmodrchal

Re: Picaxe a PWM
Napsal: čtv 01.12.2022 14:30
od blesk
Jo, tak jsem to pochopil stejně

Re: Picaxe a PWM
Napsal: čtv 01.12.2022 14:37
od ellet
blesk píše:...Jen mi není úplně jasná hodnota z inicializace PWM (tu jsem opsal z příručky). Programovací editor má na nastavení PWM průvodce, ten ale dává jiné čísla.
Proto jsem to trochu rozvedl, ten editor dává "rozumný" čísla a hodnota inicializace je snad už taky jasná.
Jen pro úplnost - snadno se dá tímto způsobem realizovat ESC regulátor pro ss motor.

Re: Picaxe a PWM
Napsal: ned 04.12.2022 20:32
od blesk
Ještě bych potřeboval vyřešit jednu drobnost, stávající kód vypadá takto:
Kód: Vybrat vše
start:
pulsin 3,1,w6
if w6<120 then high 1 endif ;zapni přistávací
if w6>121 then low 1 endif ;vypni přistávací
if w6>141 and w6<160 then goto init: ;zapni podsvícení
if w6>161 and w6<220 then goto vypni: ;vypni podsvícení
if w6<140 or w6>220 then goto main: ;zapni záblesky
init:
pwmout C.2,99,40 ; inicializuj modul pwm
goto start ; zpět na „start“
main:
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav zábleks
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 750 ; délka pauzy
goto start ; zpět na „start“
vypni:
pwmout C.2, OFF ;
pause 100
goto start ; zpět na „start“
jasně že to jde udělat kratší, ale takto to jsem schopný napsat, potřeboval bych ošetřit nějak vstup tak, že když není na vstupu servosignálu žádný signál (nepřipojený káblík) aby se to chovalo tak, že se zapnou záblesky s podsvícením
if w6<140 or w6>220
ono to ale podmínka že je servosignál delší jak 2,2ms nesplňuje, tam totiž není žádný, jak se to dá jednoduše docílit?
Re: Picaxe a PWM
Napsal: pon 05.12.2022 22:00
od ellet
Je to popsaný u příkazu. Pulsin, čeká (cca 0,6s) na příchod spouštěcí hrany. Když se nedočká, dál nečeká a vrátí 0. Ale projde to možná i tudy, kudy nechceš (ošetřit). Není mně jasný, proč rozlišuješ na př. 120 a 121, to budeš rozlišovat 10 uS na páce?
Re: Picaxe a PWM
Napsal: úte 06.12.2022 6:43
od blesk
Ten rozdíl a "pásmo nikoho" bylo popisováno jako ochrana proti "překmitu" mezi polohami, kdyby se signál dostal na mez mezi dvěmi stavy. Při ovládání vypínačem to nema vůbec žádný smysl.
Re: Picaxe a PWM
Napsal: úte 06.12.2022 15:01
od ellet
blesk píše:Ten rozdíl a "pásmo nikoho" bylo popisováno jako ochrana proti "překmitu" mezi polohami, kdyby se signál dostal na mez mezi dvěmi stavy. Při ovládání vypínačem to nema vůbec žádný smysl.
Pokud to bude na přepínači, je to opravdu jedno ale ....
Nějak v tom popisu nevidím smysl. Pokud bude signál nestabilní mezi na př. 120 a 121 budou střídavě blikat obě větve. (Stabilní hodnota se získá na př. vyhodnocením po opakovaném čtení, po ustálení).
Re: Picaxe a PWM
Napsal: úte 06.12.2022 19:02
od blesk
Mělo by se to chovat tak, že pokud je signál mezi nastavenými mezemi, tak zůstane předchozí stav. Jen otázka jestli dokáže rozlišit něco mezi 120 a 121, nejspíš by to chtělo to mrtvé pásmo větší, ale opravdu to nemá u této aplikace smysl.
Re: Picaxe a PWM
Napsal: úte 06.12.2022 19:27
od ellet
Signál šířky mezi 120 a 121 může přijít, ale pulsein ho vyhodnotí - buď jako 120, nebo jako 121, nic jiného neumí. Testuje hodnotu po 10 uS, kam se dopočítá, to předá proměnné. Prvně jsem se ale díval blbě. Teď vidím, že 120 a 121 první dva if "nespustí", projde to ale jinde (if w6<140 or w6>220, možná je to záměr).
Re: Picaxe a PWM
Napsal: úte 06.12.2022 22:58
od blesk
No... je to sice takové škrábání levou rukou za pravým uchem a programátoři budou růst do nebe, ale funguje to, jen bude potřeba přidat HW pulldown odpor na vstup C3, jelikož když to visí ve vzduchu, tak to občas skočí kam nemá... předpokládám teda že je to tím.
Kód: Vybrat vše
start:
pulsin 3,0,w6 ; ošetření když není signál
if w6=0 then goto bezsignal: ; spustí sekvenci blikání
if w6>1 then goto signal: ; pokračuje na čtení délky pulzu
signal:
pulsin 3,1,w6 ; čte délku pulzu a spouští
if w6<120 then high 1 endif ;zapni přistávací
if w6>120 then low 1 endif ;vypni přistávací
if w6>140 and w6<160 then goto init: ;zapni podsvícení
if w6>160 then goto vypni: ;vypni podsvícení
if w6<140 then goto main: ;zapni záblesky
init:
pwmout C.2,99,40 ; inicializuj modul pwm
goto start ; zpět na „start“
main:
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav zábleks
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 1000 ; délka pauzy
goto start ; zpět na „start“
vypni:
pwmout C.2, OFF ;
pause 100
goto start ; zpět na „start“
bezsignal:
pwmout C.2,99,40 ; inicializuj modul pwm
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav zábleks
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav zábleks
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 1000 ; délka pauzy
goto start ; zpět na „start“
picaxe má vnitřní zapínatelné pullup odpory, což by mi stačilo, ale nepřišel jsem na to jak ho zapnout na konkrétním pinu, nějak jsem zatím nepobral jak se nastavuje maska %00000000
Re: Picaxe a PWM
Napsal: úte 06.12.2022 23:28
od blesk
tak už je to asi drbání nohou za uchem, ale už jsem to nějak spáchal i s vnitřním pullup odporem a bez použití dvou pulsin
Kód: Vybrat vše
start:
pullup $8 ; zapne pullup na C.3
signal:
pulsin 3,1,w6 ; čte délku pulzu a spouští
if w6=0 then goto bezsignal: ; spustí podsvit+záblesky
if w6<120 and w6>1 then high 1 endif ; zapni přistávací
if w6>120 then low 1 endif ; vypni přistávací
if w6<160 and w6>140 then goto init: ; zapni podsvícení
if w6>160 then goto vypni: ; vypni podsvícení
if w6<140 then goto main: ; zapni záblesky
init:
pwmout C.2,99,40 ; inicializuj modul pwm
goto start ; zpět na „start“
main:
pwmout C.2,99,40 ; inicializuj modul pwm
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 1000 ; délka pauzy
goto start ; zpět na „start“
vypni:
pwmout C.2, OFF ;
goto start ; zpět na „start“
bezsignal:
low 1 ; zhasne přistávací světla
pwmout C.2,99,40 ; inicializuj modul pwm
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 200 ; délka pauzy
pwmduty C.2,400 ; nastav záblesk
pause 50 ; délka záblesku
pwmduty C.2,40 ; nastav podsvit
pause 1000 ; délka pauzy
goto start ; zpět na „start“
Re: Picaxe a PWM
Napsal: stř 07.12.2022 11:14
od ellet
blesk píše:.. a programátoři budou růst do nebe...
Opravdoví programátoři to přejdou s úsměvem, začínali stejně. Hlavní je, že víš co děláš a že to funguje.
Asi ti to blikalo při odpojeném vstupu, ale pullupu na vstupu bych se vyhnul, zatěžuje to zbytečně výstupní pin přijímače. Ten vstup není „ve vzduchu“. Při provozu mu je vnucována 0 nebo 1, ale budiž, když to funguje…
Re: Picaxe a PWM
Napsal: stř 07.12.2022 13:30
od blesk
Ten stav "bez signálu" je myšlený že vodič není připojený nikam, tak aby nebyly dvě verze FW. Tam mi to opravu náhodně spínalo a rozpínalo, někdy po minutě, někdy po 10 minutách. Proto ošetření tím pullup, předpokládal jsem, že hodnota odporu je tam veliká, že to nemůže RX vadit...
Re: Picaxe a PWM
Napsal: stř 07.12.2022 21:03
od ellet
blesk píše:... že to nemůže RX vadit...
Jo, bude to dobrý, neškodilo by ale vsunout 3 řádky, něco jako:
signal:
pulsin 3,1,w6 ; čte délku pulzu a spouští
pulsin 3,1,w7
if w7<>w6 then goto signal
if w6<50 then goto signal
...
...
Jestli teda čtení pulsu neovlivňuje generování pwm signálu. Pokud ho ovlivňuje, chtělo by to celý řešit jinak.