Kesme kullanmadan Encoder girişi okumak

Başlatan gogoce, 14 Ağustos 2016, 21:29:30

gogoce

Merhaba,

Daha önceden hatalı olarak  çizilmiş ve adetli olarak bulunan pcb ye 628 ile encoder okuma işlemi yaptırılmak istenmiş. PCB lerin maliyeti dolayısıyla tekrar pcb yaptırılmak istenmiyor. Ticari bir proje değil, sadece durumu kurtarması için arkadaşıma yardımcı olmaya çalışıyorum. Hatalı pcb çizdiğini henüz patronu bilmiyor . Encoder uçlarını porta.0 ve porta.1 olarak çizmiş. Encoder yerine 2 adet kızılötesi sensör koyup geçen malzemeyi + veya - olarak sayacak . Mesela malzeme sola geçerse a-b sensörü sıralı göreceğinden (encoder mantığı) sayaç+1 , diğer yönde geçerse sayaç=sayaç-1 olacak

Kesme ile bu çok kolay yapılabilirdi. Farkındayım. Sadece sayaç arttırıp azaltmak için if yada farklı metodlar ile böyle bir işlemi yaptırmak mümkün olabilir mi?


Yardımcı olacak herkese şimdiden teşekkür ederim

Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

ete

Encoder okumanın temel prensibi öncelikle dönüp dönmediğini tespit etmektir. Bunun için;
-ESKI:
ILK=PORTA & (%00000011)
-YENI:
IKINCI=PORTA & (%00000011)

Dikkat etti isen iki okuma yaptık. Hemde direk Encoder pinlerini okuduk.
IF ILK=IKINCI THEN YENI
şeklinde bir komut kullanarak ilk okuma ile ikinci okuma arasında fark olup olmadığına bakıyoruz. Fark yoksa encoder dönmüyor var ise dönüyor demektir.
Bu arada unutmadan söyleyeyim. Bu şekilde bağlanmış bir encoder verisi döndüğünde sırası ile;
%00 %01 %11 %10 %00 şeklinde çıkış verir. Bu veri encoderin saat yönünde dönmesi durumunda gelecektir. Ter yönde dönen encoder den ise %00 %10 %11 %01 %00 şeklinde veri gelecektir.
A girişi ile B girişi arasında 90 derecelik faz farkı olmalıdır ki normal bir encoder de bu vardır.
Diyelimki ILK=%00 ve IKINCI=%01 ise encoder döndü kabul edilecektir. Hemen yön tespiti yapılmalıdır.
YON=ILK.0 ^ IKINCI.1=0 (Yani 0 XOR 0 = 0)   şeklinde bize değer verecektir.
Şayet alınan bilgiler ILK=%00 ve IKINCI=%10 ise YON=ILK.0 ^ IKINCI.1=0 ^ 1=1 değerini verecektiir.
Bu aşamadan sonra;
IF YON=0 then
  SAYI=SAYI+1
ELSE
  SAYI=SAYI-1
ENDIF
şeklinde yöne bağlı olarak artırma yada eksiltme yaparız.
Basit değilmi?

Ete
 

gogoce

Çok teşekkür ederim hocam . Yine sayenizde durumu kurtardık...
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal