Pic ile encoder sinyallerini saydırmak

quadrature rotary encoder ...anahtar kelimeler


Kod:
BASLA:           
 
  ESKI=PORTD & %00000011  
SAYICI: 
  YENI=PORTD & %00000011  

 IF ESKI=YENI then SAYICI 

  YON=A^B 
  SAY=SAY+(2*yon)-1      

    LCDOUT $FE,$80," SAYI : ",DEC5 SAY 
      
 GOTO BASLA
 
arkadaşlar elinizde bizimle paylaşabileceğiniz basic te yazılmış encoder okuma programı varmı TMR0 ın kullanıldığı veya farklı bir yöntemle yapılmış. musallim arkadaş örnek bir program yazıvermiş allah razı olsun ama ben bu prog dan pek bişi anlayamadm en azından fikir yürütmemize yardımcı olabilecek bişiler
 
Anahtar kelimeleri gugulda arat,gelen linkleri sabırla incele,bazıları pbp bazıları microbasic bazıları ccs dir.
Hepsininde yaptığı kesme kullanmaktır.Genelde RB4-7 kesmesi kullanılır.Kesme oluştuğunda yukarıda yazdığımın benzeri mantık işletilir.
Portlardaki değişiklik takip edilir ve değişiklik anında değişikliğin niteliğine göre sayıcı arttırılır ve ya eksiltilir.
Bazıları sadece B0 ile yapar , ileri geri içinde logic elemanlar kullanırlar , pic varken gerek varmı ?

Yukarıdaki codlar pbp da üstad , @ETE hocamıza aittir.Açıklamaları ve gerisini , konuyu iyice araştırmanız için vermedim.Aslında gerisinde, lcd ve değişken tanımlamalarından başka da bir şey yok. ;)
Yüksek hız gerekli ise lcd yazdırma başka bölüm de ele alınmalı.
 
bu iş için en uygun kesme TMR0 kesmesi bence arkadaşlar. Çünkü TMR0... harici pals girişi kullanabilir ve donanımsal olarak ayrı bir sayıcıdır. Pic ile yapılabilecek en hızlı sayıcı için TMR0 kullanılması bence daha uygun olur. Fakat basic kullanmadığım için bunun kod örneğini malesef veremiyorum.

Bilginize
 
Quadrature enkoderlerde ya da rotary enkoderlerde A-B-Z uçları var.
A-B uçları 90 derece faz farklı uçlar.Z ucu her bir turda bir puls.
A-B uçları ile quadrature denilen daha hassas konum değişimlerini yakalamak mümkündür.Oran 4/1 dir.
Pulslerin düşen çıkan her bir kenarında bir sayarsınız.Ayrıca yön bilgisi her konum değişiminde yenilenir.

http://www.emesystems.com/BS2fsm.htm#twobit encoder

http://www.geosim.engr.mun.ca/~dpeters/6806/postings/RotaryEncoder.pdf

Bunu sadece B0 ile ya da TMR0 ile nasıl yapabilirsiniz ? Harici eleman kullanmadan...

Pbp ya da ccs ya da cc5x ya da asm, farketmez , akışın pice anlatılmasında her biri aracıdır.

Mesela :

Kod:
#include <D:\CC5\16F877.H>
#include <D:\CC5\int16CXX.H>
#pragma config |= 0b.11.111101.11.00.10
#pragma bit En1 @ PORTB.7
#pragma bit En2 @ PORTB.6

#pragma origin 4
bit n1,n2;
int16 Enkoder;

interrupt int_server( void)
{
  int_save_registers     
  if ( RBIF)         
  {
    if (En1!=n1)          
 {
      if (En2==n1)    
      {
        Enkoder--;   
      }
      else       
      {
        Enkoder++;
      }
      n1=En1;      
      n2=En2;
    }
    W = PORTB;          
    RBIF = 0;       
  }
  int_restore_registers   
 }
void main(void)
{
  TRISB=0b.1100.0000;  
  TRISC=0b.0000.0000;  
  PORTC=0;
  TRISD=0b.0000.0000;  
  PORTD=0;
 Enkoder=50; 
  GIE=1;   
  RBIE=1;   

while(1)
 { 
  PORTC=Enkoder.high8;
  PORTD=Enkoder.low8;
 }
}
 
Sn.musallim

daha hassas konum değişimlerini yakalamak mümkündür.Oran 4/1 dir.

Burada basettiğiniz nedir anlamadım?

encoder palslerini 2 ye ya da 4 e katlamaktan basediyorsanız. asıl konumuz bu olmadığı için önemi yok gibi görünüyor. (O zaman iki palsinde düşen ve yükselen kenarlarını algılamak gerekir)

Saygılarımla
 
Sadece basitce dönen bir şeyin devrini ölçmek olsa idi takometre - devir ölçer gibi şeyler denebilirdi.
Enkoder denince sadece dönüş hızı değil dönüş yönü ve konumu da algılanır.
4/1 ile frekansı 4 e katlamak değil , encoderlerdeki A-B uçlarının biribirine göre 90 derece kayık sinyallerinin konum değişimleri izlenerek : Örneğin her turda A dan ve ya B den 100 puls alınıyorsa inen ve çıkan kenarlar izlenerek tur başına 400 puls alınır .Bu enkoderin hassasiyetini arttırır.
Yok sadece sayacağım derseniz basitce bir çizik atarsınız ve opto ile izlersiniz ya da magnetik bir sensör kullanırsınız , encoder değil.

Yukarıda verdiğim linklerde resimler ve çizimler var.Daha açıklayıcı olacağı kanaatindeyim.

Verdiğim örneklerdeki kodlar dönüş yönünü ve 4/1 olarak anılan quadrature modunu temel alır.
 
Sn.musallim verdiğiniz likler encoderlerin standart kullanım şekilleri değildir. örneğin 100 pals bir encoderi max 400 pals çözünürlüğe çıkarmanın yollarıdır. Tamam faydalı bilgiler ama burda bahsi geçen konuya temel değil sadece yardımcı ek bilgi niteliğindedir.

oysa arkadaşımızın asıl sorunu bu sinyalleri pic ile nasıl işyeyip değerlendireceğidir. bunu yaptıktan ya da yapabildikten sonra bu ilaveler düşünülebilinir ve geliştirilebilinir.

saygılar
 
tyildizak ' Alıntı:
Basit bir açıklama olacak fakat sanırım böylesi daha anlaşılır olur:
a=1 olduğu anda b=1 ise , bir yöne
a =1 olduğu anda b=0 ise, diğer yöne dönüyor demektir.
evet abuzittin arkadaşın dediğine katılıyorum benm tek öğrenmek istediğim nasıl bi mantıkla çalıştığıydı ve tyildizdak arkadaş burada çok açıklayıcı bi şekilde anlatmış teşekürler. Ve musallim arkadaşın dediğne göre de anlaşılan tyildizdak arkadaşın yazdığını kapılara uygulamak kalıyor heralde bize.

şimdi şöyle bişi yapmak istiyorum. encoder in A ve B uçlarını pic e giricem ve yazılımda kapıları oluşturucam 3 çıkışı olacak kendi prog içerisinde biri sağa dönüşünü biri sola dönüşünü sayıcak biride durduğunu bildirecek. bu yoldan gitmem sizce mantıklı olurmu arkadaşlar
 
:'( :'( ama olmuyor durduğunu nasıl bildiricem pic e :'( :'(

tyildizdak arkadaşın örneğinden yola çıkaraktan bişiler çizdim.

mesela

A ile B yi VE kapısına verdim
A ile B den ek aldım "ÖZEL VEYA" Kapısına verdim.

ama encoderin sabit kaldığını nasıl bildirebilirim pic e????? :-\
 

Forum istatistikleri

Konular
128,840
Mesajlar
920,907
Kullanıcılar
450,935
Son üye
oqzknt

Yeni konular

Geri
Üst