|
Stránka 1 z 1
|
[ Příspěvků: 15 ] |
|
Autor |
Zpráva |
blesk
|
Napsal: čtv 01.12.2022 9:45 |
|
Mazák
|
|
|
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ě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
|
|
Nahoru |
|
|
|
|
|
ellet
|
Napsal: čtv 01.12.2022 14:20 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: čtv 01.12.2022 14:37 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: ned 04.12.2022 20:32 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: pon 05.12.2022 22:00 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: úte 06.12.2022 6:43 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: úte 06.12.2022 15:01 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: úte 06.12.2022 19:02 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: úte 06.12.2022 19:27 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: úte 06.12.2022 22:58 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: úte 06.12.2022 23:28 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: stř 07.12.2022 11:14 |
|
Mazák
|
|
|
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 |
|
|
blesk
|
Napsal: stř 07.12.2022 13:30 |
|
Mazák
|
|
|
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 |
|
|
ellet
|
Napsal: stř 07.12.2022 21:03 |
|
Mazák
|
|
|
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 |
|
|
|
Stránka 1 z 1
|
[ Příspěvků: 15 ] |
|
Kdo je online |
Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 12 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
|
|
|