[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