avatar_ete

Rotary Encoder Okuma

Başlatan ete, 06 Ekim 2014, 12:54:56

ete

#30
Encoder orta ucu GND ye direk bağlı olmalı diğer iki uç 4K7 ile +5V ta bağlı olmalıdır.
CLK ve DTA ucu diye bir şey yok nereden çıkardınız bunları. Rotary Encoder denilen aletin A ve B diye iki ucu vardır. Encoder döndükçe bu uçlardan kare dalga çıkar. Sırf yön bulmayı kolaylaştırmak için çıkan sinyaller arasında 90 derecelik faz farkı vardır.

3 uçlu pot kullandığınıza göre Pot tipi encoder kullanıyorsunuz demektir. Bu potlarda iki tık arasında 4 konum vardır.
%00 - %01 - %11 - %10 şeklinde bir tık da bu 4 konum icra edilir. Bu sizi şaşırtabilir. Yeterince hızlı okursa 4 konumuda okuyabilir encoder.
Ama diyelimki %00 konumunda beklerken siz potu çevirdiniz ve %01 olur olmaz kesme oluşur ama siz döndürmeye devam ettikçe konumlar değişir ve eski yeni bir birine karışabilir. Ne yazıkki her tık da bir konum veren encoder pot henüz göremedim.
Bu nedenle sanal anlamda pota müdahale etmek gerekebilir.
Şöyle bir fikrim var öncelikle eski ve yeniyi aynı yerde okumayı deneyelim.
DISABLE
KESME:
        ESKI=PORTB & %11000000
KESBIR:
        YENI=PORTB & %11000000   
        IF YENI=ESKI THEN KESBIR
              
        YON=A ^ B
        IF YON=1 THEN
           SAYAC=SAYAC+1
           kes=kes+1           
         ELSE
           SAYAC=SAYAC-1
           kes=kes-1
         ENDIF
         TEMP=PORTB
         BAYRAK=0
         RESUME
         ENABLE  

Buradan netice alamaz isek encoder yalnızca bir konumunda sayaç çalıştıralım.

O da şöyle olabilir. (Yeni=%11000000 olduğunda sayaç saydırıyoruz)
DISABLE
KESME:
        ESKI=PORTB & %11000000
KESBIR:
        YENI=PORTB & %11000000   
        IF YENI=ESKI THEN KESBIR
              
        YON=A ^ B
        IF YON=1 THEN
           IF YENI=%11000000 THEN 
             SAYAC=SAYAC+1
             kes=kes+1           
           ENDIF  
         ELSE
           IF YENI=%11000000 THEN
              SAYAC=SAYAC-1
              kes=kes-1
           ENDIF   
         ENDIF
         TEMP=PORTB
         BAYRAK=0
         RESUME
         ENABLE 

ete



canng

#31
Alıntı yapılan: ete - 24 Haziran 2018, 18:42:25Encoder orta ucu GND ye direk bağlı olmalı diğer iki uç 4K7 ile +5V ta bağlı olmalıdır.
CLK ve DTA ucu diye bir şey yok nereden çıkardınız bunları. Rotary Encoder denilen aletin A ve B diye iki ucu vardır. Encoder döndükçe bu uçlardan kare dalga çıkar. Sırf yön bulmayı kolaylaştırmak için çıkan sinyaller arasında 90 derecelik faz farkı vardır.

3 uçlu pot kullandığınıza göre Pot tipi encoder kullanıyorsunuz demektir. Bu potlarda iki tık arasında 4 konum vardır.
%00 - %01 - %11 - %10 şeklinde bir tık da bu 4 konum icra edilir. Bu sizi şaşırtabilir. Yeterince hızlı okursa 4 konumuda okuyabilir encoder.
Ama diyelimki %00 konumunda beklerken siz potu çevirdiniz ve %01 olur olmaz kesme oluşur ama siz döndürmeye devam ettikçe konumlar değişir ve eski yeni bir birine karışabilir. Ne yazıkki her tık da bir konum veren encoder pot henüz göremedim.
Bu nedenle sanal anlamda pota müdahale etmek gerekebilir.
Şöyle bir fikrim var öncelikle eski ve yeniyi aynı yerde okumayı deneyelim.
DISABLE
KESME:
        ESKI=PORTB & %11000000
KESBIR:
        YENI=PORTB & %11000000   
        IF YENI=ESKI THEN KESBIR
              
        YON=A ^ B
        IF YON=1 THEN
           SAYAC=SAYAC+1
           kes=kes+1           
         ELSE
           SAYAC=SAYAC-1
           kes=kes-1
         ENDIF
         TEMP=PORTB
         BAYRAK=0
         RESUME
         ENABLE  

Buradan netice alamaz isek encoder yalnızca bir konumunda sayaç çalıştıralım.

O da şöyle olabilir. (Yeni=%11000000 olduğunda sayaç saydırıyoruz)
DISABLE
KESME:
        ESKI=PORTB & %11000000
KESBIR:
        YENI=PORTB & %11000000   
        IF YENI=ESKI THEN KESBIR
              
        YON=A ^ B
        IF YON=1 THEN
           IF YENI=%11000000 THEN 
             SAYAC=SAYAC+1
             kes=kes+1           
           ENDIF  
         ELSE
           IF YENI=%11000000 THEN
              SAYAC=SAYAC-1
              kes=kes-1
           ENDIF   
         ENDIF
         TEMP=PORTB
         BAYRAK=0
         RESUME
         ENABLE 

ete


Hocam yılmayıp ilgilendiğiniz için teşekkür ederim.
10k ları 4k7 yapıp ve orta ucu gnd ye direk bağlayınca düzeldi.
clk dta dedğim picin pinleri.o kadar enkoder örneğine baktım genelde o pinlere bağlı olduğu için sormuştum.Neyse bi önemi yokmuş şuan sorunsuz çalışıyor.
Tekrar teşekkür ederim hocam

blueboard

Alıntı yapılan: canng - 25 Haziran 2018, 01:06:54Hocam yılmayıp ilgilendiğiniz için teşekkür ederim.
10k ları 4k7 yapıp ve orta ucu gnd ye direk bağlayınca düzeldi.
clk dta dedğim picin pinleri.o kadar enkoder örneğine baktım genelde o pinlere bağlı olduğu için sormuştum.Neyse bi önemi yokmuş şuan sorunsuz çalışıyor.
Tekrar teşekkür ederim hocam
Sayın Canng, ticari bir önemi yoksa kodları buradan paylaşabilir misiniz.

Powered by EzPortal