Odeslat nové téma Odpovědět na téma  [ Příspěvků: 15 ] 
Autor Zpráva
 Předmět příspěvku: Picaxe a PWM
PříspěvekNapsal: čtv 01.12.2022 9:45 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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 :)


Nahoru
 Profil {RCalbum.cz}  
 
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: čtv 01.12.2022 14:20 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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 ellet dne pát 02.12.2022 12:46, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: čtv 01.12.2022 14:30 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
Jo, tak jsem to pochopil stejně ;-)


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: čtv 01.12.2022 14:37 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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. :)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: ned 04.12.2022 20:32 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
Ještě bych potřeboval vyřešit jednu drobnost, stávající kód vypadá takto:


Kód:
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?


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: pon 05.12.2022 22:00 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 6:43 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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.


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 15:01 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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í).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 19:02 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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.


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 19:27 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 22:58 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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:
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


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: úte 06.12.2022 23:28 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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:
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“


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: stř 07.12.2022 11:14 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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 ellet dne stř 07.12.2022 19:46, celkově upraveno 3

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: stř 07.12.2022 13:30 
Mazák
Mazák
Uživatelský avatar

Registrován: 22.11.2005
Příspěvky: 7119
Bydliště: Vsetín
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...


Nahoru
 Profil {RCalbum.cz}  
 
 Předmět příspěvku: Re: Picaxe a PWM
PříspěvekNapsal: stř 07.12.2022 21:03 
Mazák
Mazák
Uživatelský avatar

Registrován: 12.2.2016
Příspěvky: 1975
Bydliště: Vysočina, ČR
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.


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 15 ] 

 


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  

 

  Powered by phpBB® Forum Software © phpBB Group  Český překlad – phpBB.cz 

 

NAVRCHOLU.cz