Picaxe a PWM

Dneska se procesory objevují všude, pokud máte nějaký nápad, či udělát, tak se neváhejte pochlubit.
Odpovědět
Zpráva
Autor
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Picaxe a PWM

#1 Příspěvek od blesk »

Ahoj,

jsem takový programátor na baterky a většinou končím rozblikáním ledky :D

Dělám na model osvětlení na způsob kolegů http://rcmodely.cevaro.sk/index.php?id= ... osvetlenie

nicmé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 :)
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#2 Příspěvek 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 :)
Naposledy upravil(a) ellet dne pát 02.12.2022 12:46, celkem upraveno 1 x.
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#3 Příspěvek od blesk »

Jo, tak jsem to pochopil stejně ;-)
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#4 Příspěvek 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. :)
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#5 Příspěvek 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?
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#6 Příspěvek 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?
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#7 Příspěvek 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.
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#8 Příspěvek 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í).
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#9 Příspěvek 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.
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#10 Příspěvek 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).
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#11 Příspěvek 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
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#12 Příspěvek 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“
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#13 Příspěvek 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…
Naposledy upravil(a) ellet dne stř 07.12.2022 19:46, celkem upraveno 3 x.
blesk
Příspěvky: 7391
Registrován: úte 22.11.2005 0:00
Bydliště: Vsetín
Kontaktovat uživatele:

Re: Picaxe a PWM

#14 Příspěvek 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...
Uživatelský avatar
ellet
Příspěvky: 2401
Registrován: pát 12.02.2016 11:37
Bydliště: Vysočina, ČR

Re: Picaxe a PWM

#15 Příspěvek 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.
Odpovědět

Zpět na „Procesory a jiné vychytávky“