Rotary encoder'de yön bilgisi okuma

Başlatan blueboard, 12 Ocak 2015, 11:58:57

blueboard

Ete Hocam , elimdeki Rotary Encoder'a ait bilgiler şunlar:
Encoder'in orta pinini şaseye bağladım.  A ve B uçlarını dahili pull up dirençleri ile portb.3 ve portb.4 pinlerine bağladım.Rotary encoder 1 tam turunu tamamladıktan sonra encoder'in yan tarafında bulunan sabitleme çentiğine oturuyor.Yani 1 tam tur tamamlandığında başladığı yere gelmiş oluyor.Bu 1 tam tur esnasında(saat yönünde) lojik değerler şunlar oluyor:  00-11-01-00-11-01-00-11
Encoder'i ters tarafa(saatin ters yönü) döndürdüğümde ise doğal olarak 00-01-11-00-01-11 şeklinde oluyor.Bu duruma ait çizdiğim resmi de ekliyorum.
Ete hocam , bu bilgilere göre Rotary Encoder'in dönüş yönünü pic'e nasıl anlatabilirim?Bir yazınızda şöyle bahsetmişsiniz:
"Yön bilgisi için üst üste iki okuma yapmak ve iki okuma arasında fark yakalamak gerekir.
ESKI=PORTB & %00000011

TEKRAR:
YENI=PORTB & %000000011
IF YENI=ESKI THEN TEKRAR

YON=ESKI.1 XOR  YENI.0  ' birinin sıfırıncı biti ile diğerinin birinci biti XOR yapılır.
Bu durumda Yon bilgisi saat yönünde hareket için 1 tersi yönde ise sıfır olarak oluşur."
Şöyle bir kod yazsan doğruluk derecesi ne olur?
Eski= var byte
yeni= var byte
yon=var byte

DONGU:
ESKI=PORTB & %00011000 :gosub tekrar

tekrar:
YENI=PORTB & %000011000
IF YENI=ESKI THEN TEKRAR
return

YON=ESKI.3 XOR  YENI.4  ' birininüçüncü biti ile diğerinindördüncü biti XOR yapılır.
IF YON=1 THEN PORTC.2=1 
IF YON=0 THEN PORTC.3=1
GOTO DONGU
END

Teşekkür ederim.



ete

Şayet encoder pulsları yolladığın resimdeki gibi ise bu encoder den yön bilgisi alman zor.
Bütün encoderler da, A çıkışı ile B çıkışı arasında 90 derecelik bir faz farkı vardır. Seninkinde faz farkı yokmuş gibi gözüküyor. Böyle encoder olmaz. Bana kalırsa sen yanlış çizdin bu şekli.

Dorğu şekil ilişikteki gibidir.

blueboard

#2
Ete Hocam , okumayı şu şekilde yaptım. İki adet ohmmetre aldım.Ohmetreler buzzer konumunda iken ohmmetrelerin COM uçlarını birleştirerek orta uca bağladım. Ohmetrelerden birincinin ucunu A ucuna . diğer ohmmetrenin ucunu da B ucuna bağladım. Encoder bir tam turunu tamamlayıncaya kadar yavaş yavaş çevirdim. Başlangıç noktasında her iki ohmmetrenin de buzzer'ı ötüyordu. Yavaşça çevirmeye devam ettiğimde her ikisi de sustu. Çevirmeye devam ettim A ucuna bağlı olan yine ötmeye başladı,Bu ucuna bağlı olanda düdük sesi yoktu.Yavaşça çevirmeye devam ettim.Sonunda başlangıç noktasına döndüm ve her iki buzzer yine ötmeye başladı.
Tüm denemelerimde bu sıra düzenli olarak tekrarlandı.Sizce bu durumun çözümü nasıl olur?Teşekkürler.

ete

Bu şekilde doğru ölçüm almak zor bence . En iyisi programa okutturmak.
yazdığın kodlarda tekrar etiketi altında yer alan return komutunu silersen kodlar çalışır.
Ama değişken tanımlamalarında yanlış gözüküyor.

Ete

blueboard


Powered by EzPortal