Stránka 1 z 1

RC spínač s PIC

Napsal: 24 lis 2010, 20:57
od budsky
Dobrý den,
stavím spínač pro rc modely s PIC16F84A.Pracovat to má tak,že je bud sepnut jeden výstup v jedný poloze přepínače,v další poloze další výstup a v poslední poloze nejde žádný výstup.Část programu mám převzatou,a část vlastní ale problém mám takový,že na jedné rc soupravy se mi to chová tak jak má a na jiné mi chodí jen tak že,že je buď sepnut jen jeden výstup anebo žádný,program je v příloze.
Nevíte jak tento problém vyřešit?

Napsal: 25 lis 2010, 05:57
od eljaro
v zásadě tvuj kod je asi dobře tak jak zamýšlíš , ale ty rc nemusí uplně řesně dodržovat ty časy ! jedině ten program dovybavit kalibrací - a nastavit pomněrově ! zapíchout do rc nastavit min uložit nastavit max uložit a přepnout do normálního modu , jinak je to ztráta času .

Napsal: 25 lis 2010, 06:12
od budsky
eljaro píše:v zásadě tvuj kod je asi dobře tak jak zamýšlíš , ale ty rc nemusí uplně řesně dodržovat ty časy ! jedině ten program dovybavit kalibrací - a nastavit pomněrově ! zapíchout do rc nastavit min uložit nastavit max uložit a přepnout do normálního modu , jinak je to ztráta času .
A to se udělá jak?

Napsal: 25 lis 2010, 07:23
od Galileo
Je možné že souprava ze kterou to nefunguje nedosáhne celého rozsahu šířky imulsu, v praxi se tomu říká omezení výchylek serva,
změň krajní komparační hodnoty 2 ms na 1.8ms , 1 ms na 1,2 ms a uvidíš

Napsal: 29 lis 2010, 20:13
od budsky
Galileo píše:Je možné že souprava ze kterou to nefunguje nedosáhne celého rozsahu šířky imulsu, v praxi se tomu říká omezení výchylek serva,
změň krajní komparační hodnoty 2 ms na 1.8ms , 1 ms na 1,2 ms a uvidíš
A co bych měl změnit v programu,nějak nevim kde se to změní.

Napsal: 01 pro 2010, 07:32
od AB1
Měř délku pulsu hustěji, třeba po 100 mikrosekundách.
A porovnávej dvě čísla tak, že je odečteš a podle bitu STATUS.C zjistíš které je větší.

Já jsem s picem už dlouho nedělal, ale mohlo by to být asi takto:

Kód: Vybrat vše

Start:
                        clrf    IMPwidth

;--------Test vstupu----------

tstin:
                        btfsc   ovlRA0          ; čekej až vstup bude 0
                        goto    tstin
tstin1:
                        btfss   ovlRA0          ; čekej až vstup bude 1
                        goto    tstin1

;--------změř šířku pulsu--------

sirka_pulsu:
                        incf    IMPwidth,f
                        call    wait_100us      ; čekej 100 us
                        btfsc   ovlRA0          ; skončil puls?
                        goto    sirka_pulsu     ; ne

;--------komparace pulzu----------

                        movf    IMPwidth,0
                        sublw   13
                        btfsc   status,C        ; if (C=1) then (impwidth<13)
                        goto    kratky          ; puls je kratší než 1300 ms

                        movf    IMPwidth,0
                        sublw   17
                        btfsc   status,C
                        goto    stredni         ; puls je 1300-1700 us
                        goto    dlouhy          ; puls je delší než 1700 us

kratky:
                        ;kód
                        goto    start
stredni:
                        ;kód
                        goto    start
dlouhy:
                        ;kód
                        goto    start