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?
RC spínač s PIC
Moderátor: Moderátoři
RC spínač s PIC
- Přílohy
-
- Untitled1.asm
- (9 KiB) Staženo 254 x
A to se udělá jak?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 .
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:
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