RC spínač s PIC

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
budsky
Příspěvky: 76
Registrován: 06 srp 2007, 02:00
Kontaktovat uživatele:

RC spínač s PIC

#1 Příspěvek 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?
Přílohy
Untitled1.asm
(9 KiB) Staženo 254 x

Uživatelský avatar
eljaro
Příspěvky: 441
Registrován: 03 pro 2004, 01:00
Bydliště: Krnov
Kontaktovat uživatele:

#2 Příspěvek 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 .

Uživatelský avatar
budsky
Příspěvky: 76
Registrován: 06 srp 2007, 02:00
Kontaktovat uživatele:

#3 Příspěvek 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?

Uživatelský avatar
Galileo
Příspěvky: 77
Registrován: 09 lis 2009, 01:00

#4 Příspěvek 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íš

Uživatelský avatar
budsky
Příspěvky: 76
Registrován: 06 srp 2007, 02:00
Kontaktovat uživatele:

#5 Příspěvek 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í.

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#6 Příspěvek 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

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“