Rotary Encoder kullanımı ile ilgili örnek kod?

Başlatan SCHOTTKY, 02 Mayıs 2006, 16:59:33

SCHOTTKY

Arkadaşlar,

Rotary Encoder kullanımı ile ilgili baz kodlar sitemizde var.Ancak PIC C için bulunmamakta ve ben de gerekli uyarlamaları yapamadım.Bu konuda deneyimli olan arkadaşlar PIC C(Hi-Tech) için örnek kod verebilirlerse çok makbule geçecek.

Şimdiden teşekkürler hepinize :)

emrahmrcn

Rotary kullanmanın 2 yolu var,
* Ya kesmeleri kullanarak
* Ya da normal yoldan (kısmen daha karışık)

        Sen hangisini kullanmak istiyorsun
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

SCHOTTKY

Hangisi kolay ve pratikse onu rica edeyim lütfen :)

emrahmrcn

En kolayı kesme ile yapılan(Portb0 ) kodu aşağıda veriyorum
#include <pic.h>
#include "Delay.c"



void interrupt isr(void)
{

if(RB1==0)
RB2=1;
else
RB3=1;
DelayMs(5);
INTF=0;
}




void main(void)
{
	
TRISA=0X00;
TRISB=0b00000011;
INTEDG=1;
INTE=1;
GIE=1;


while(1)
PORTB=0;


}
Benim yaradılışımda bir ayrıcalık varsa o da TÜRK olmamdır. M.K ATATÜRK

vbilici

bu kodların ccs c için olanı var mı acaba
birde işin mantığını anlatırsanız çok sevinirim

Saygılar

SCHOTTKY

Sanırım bunu sormak için biraz geç oldu ama,
bu kodun çalışma mantığını ve encoder ın hangi yöne döndüğünü gösteren biti açıklarsanız minnetar olacağım.

Teşekkür ediyorum.

mech

daha önce mouse tekerleği ile ilgili bir konu açılmıştı. Sanırım aynı mantık. Aratırsan bulabilirsin.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

arslan74

Merhaba,

Rotary encoderde A ve B cıkışları birde sıfır geciş noktası Z var.

Z, 360 derecede bir puls verir. Bunu referans için kullanırsın. Eğer tek yön kullanacaksan o zaman sadece bir ucu kullanman yeterli. Ama ileri geri hareket etmek istiyorsanız o zaman iki ucu kullanmanız gerekmektedir.

Örneğin aşağıdaki şekilde;



A ve B ucları beraber kullanıldığında u tane farklı durumlar oluşuyor.

Eğer kesme kullanmadan girişleri okumak istiyorsanız o zaman yapmanız hereken, iki girişide sürekli okumak ve kayıt etmek. Eğer girişler değişmiş bir önceki konuma göre kıyaslayıb ileri yoksa geri gittiği anlayabilirsiniz. Z'i de RB0 interruptuna bağlarsınız. her interruptunda konum sayacını sıfırlarsınız. Hepsi bu başka bir şey yok.

Burada dikkat etmesi gerek encoderin bir turda kaç puls ürettiğidir. Zaten alırken puls sayısı yazar. Ama o yazılan puls sayısı bir cıkış üretiği pulsdır.
Eğer iki ucu beraber kullanacak olursanız. o zaman cözünürlük 4 kat artar. Örneğin 100pulslik bir encoder ile A ve B beraber kullanıldığında 400 pulslık cözünürlük elde edilir.

bu linkinde inceletin.

http://gathering.tweakers.net/forum/list_messages/1167996

Selamlar

arslan74

Merhaba,

Rotary Encoder uygulamasıyla ilgili önceden yapmış olduğum bir proje. Fikir vermesi acısından incelebilirsin.

http://rapidshare.com/files/83611235/Rotary_Encoder.rar.html

Selamlar

BenC

Alıntı yapılan: "arslan74"Merhaba,

Rotary encoderde A ve B cıkışları birde sıfır geciş noktası Z var.

Z, 360 derecede bir puls verir. Bunu referans için kullanırsın. Eğer tek yön kullanacaksan o zaman sadece bir ucu kullanman yeterli. Ama ileri geri hareket etmek istiyorsanız o zaman iki ucu kullanmanız gerekmektedir.

Örneğin aşağıdaki şekilde;

(Resim gizlendi görmek için tıklayın.)

A ve B ucları beraber kullanıldığında u tane farklı durumlar oluşuyor.

Eğer kesme kullanmadan girişleri okumak istiyorsanız o zaman yapmanız hereken, iki girişide sürekli okumak ve kayıt etmek. Eğer girişler değişmiş bir önceki konuma göre kıyaslayıb ileri yoksa geri gittiği anlayabilirsiniz. Z'i de RB0 interruptuna bağlarsınız. her interruptunda konum sayacını sıfırlarsınız. Hepsi bu başka bir şey yok.

Burada dikkat etmesi gerek encoderin bir turda kaç puls ürettiğidir. Zaten alırken puls sayısı yazar. Ama o yazılan puls sayısı bir cıkış üretiği pulsdır.
Eğer iki ucu beraber kullanacak olursanız. o zaman cözünürlük 4 kat artar. Örneğin 100pulslik bir encoder ile A ve B beraber kullanıldığında 400 pulslık cözünürlük elde edilir.

bu linkinde inceletin.

http://gathering.tweakers.net/forum/list_messages/1167996

Selamlar

arslan74 hocam iki ucu aynı anda kullanmak derken nasıl bir yöntem.  benim 128 puls/tur lu bir rotary enkoderim var bunun 4 kat arttırmak istiyorum. iki ucu hangi mantıkla kullanarak 4 kat arttırabilirim hassasiyeti.
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!