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