[elektro] rotary encoder, mit csinálok rosszul?
Stonie
laca256 at gmail.com
Mon Jan 2 12:09:50 CET 2017
Az algoritmusod kb olyan, mint amikor egy morze kapcsoló van beéépítve
a prell mentesítés céljára, de te azt mondod minek az, elég az egyik
kontaktust bekötni ;) Szerencsés esetben működhet (optikainál meg
szinte mindig), de garancia nincs rá.
Leírják sok helyen pl
<http://makeatronics.blogspot.hu/2013/02/efficiently-reading-quadrature-with.html>
, lényeg hogy mind a 16 esetet kezelni kell.
L
2017-01-02 10:55 GMT+01:00 Gabor Jordan <jordang.elektro at gmail.com>:
> ÜDV,
>
> Rotary encoder, PIC18F67K90 B3 és B4 lábain csücsül, felhúzva 47k-val
> kívülről.
>
> A lenti megszakítás (XC8) kezelné le, de nem jó. Kb. 10ből 8szor jól lép, de
> 2szer vagy rossz irányba, vagy többet. Az ENC1 lefutóél csinál megszakítást
> és nézem az ENC2 láb hogyan áll. Mindig is így csináltam és ment. Optikai
> enkóderrel most is megy. Így is (lassabban) meg úgy is, ha kiveszem a
> késleltetéseket. Hiba nélkül. Gondolom a mechanikusnál a prell-el vagy
> kontakt-al van gond. Szkópon nem is túl szép a kapcsolás, látszik a prell,
> de lemegy még a késleltetések előtt (legalábbis amit látok). Mégsem jó,
> hiába játszom az időzítésekkel.
>
> Más tipusú enkoderrel jó volt (bourns), de amit most használni akarok, nem
> jó. Van több darab, cseréltem is, de nem jó.
>
> Hogy illik megbízhatóan olvasni ezeket?
>
> 1 szintű megszakítást használok, a megszakítás kezelést elvileg nem szakítja
> meg másik megszakítás (legalábbis az XC9 azt mondja ne kapcsolgassam a
> kódban a GIE-t, ő megteszi).
>
> Köszönöm,
>
> ÜDV JG
>
> *****
>
>
> if (INTCON3bits.INT3IF==1) // interrupt from rotary encored
> {
> INTCON3bits.INT3IF=0;
> __delay_us(50);
> if (ENC1_PORT==0)
> {
> __delay_us(50);
> if (ENC1_PORT==0)
> {
> __delay_us(50);
> if (ENC1_PORT==0)
> {
> if (ENC2_PORT)
> {
> //LCDPutCmd(01);
> //LCDPutStr("vissza");
> pwm = pwm - 16;
> }
> else
> {
> //LCDPutCmd(01);
> //LCDPutStr("oda");
> pwm = pwm + 16;
> }
> update = 0x01;
> }
> }
> }
> }
>
> *******
>
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list