[elektro] rotary encoder, mit csinálok rosszul?

elight elight at gmail.hu
Mon Jan 2 11:01:28 CET 2017


Szia

Némi (pár nano ) HW. prell mentesítés sem segít?

Üdv István

2017-01-02 10:55 keltezéssel, Gabor Jordan írta:
> Ü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