Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

encoder okuma

Başlatan enigmagazi, 04 Ağustos 2011, 11:59:22

enigmagazi

Arkadaşlar Merhaba ben bi makinanın pozisyonunu okumak istiyorum makina ekseninde şu encoder bulunuyor  http://www.ateksensor.com/PDF/ARS_TR_0309.pdf  bu encoder kullanılıyor doner encoder üzerinde 500 bilgisi var galiba tur başına 500 sinyal üretiyor bunu nasıl okuya bilirim.
https://www.picproje.org/index.php/topic,26084.msg176210.html#msg176210 yazıyı okudum ama anlayamadım  pic18f8520 kullanıyorum amacım keypaddan pozisyon bilgisi girildiğinde o sayıya ugun pozisyona motoru sürmek tabi encoderden gelen bilgilere gore şimdilik sadece okumayı istiyorum bunu nasıl yapa bilirim ccs c kullanıyorum bana yardımcı ola bilirmisiniz. Şimdiden TEŞEKKÜR EDERİM.

enigmagazi

Sorun bunu yapamıyorum ccs c için bir kod vere bilirmisiniz. birde aynı işlemcidemi kontrol etsem yoksa başka bir işlemciylemi yani ana işlemci birde yardımcı sadece okumayı yapan...

enigmagazi

#2
Alıntı yapılan: FxDev - 04 Ağustos 2011, 13:54:49
CCS C'de kesmelerin nasıl yapıldığını bilmiyorum.

Teşekkür ederim Fxdev senin https://www.picproje.org/index.php/topic,26084.msg176210.html#msg176210 linkindeki hangi kodun çalışıyor oanu alıp ccs c yee cevirmeye uğraşsam yada arkadaşalrdan yardım alsam...

enigmagazi

galiba bu kod çalışıyor arkadaşlar bu kodu ccs c ye nasıl çevire bilirim.

#define B   RB1
#define C   RB2

int counter,counter_old;

unsigned char flag,tur;

void main(void){   CMCON=0x07;   PORTA=0x00;   PORTB=0x00;   TRISA=0x00;   TRISB=0x07;      INTEDG=1;      // Yükselen kenar kesme   

INTF=0;         // Bayrak temizleniyor  

 INTE=1;         // Dış kesme aktif   
 GIE=1;         // Genel kesmeler aktif      
 
 DelayMs(250);   
 lcd_init();
 
 for(;;)   {        
 lcd_gotoxy(1,1);      
 lcd_yaz("Aci:");      
 veri_yolla(counter/1000+48);     
 veri_yolla((counter%1000)/100+48);     
 veri_yolla((counter%100)/10+48);     
 veri_yolla('.');     
 veri_yolla(counter%10+48);
 veri_yolla(0xDF);    
 if(counter>3600)      
 counter=0;      
 if(counter<0)       
 counter=3564;     
 if(flag==0)    {            
 lcd_yaz(" Sag");        
 veri_yolla(0x7E);      }    
 else      {            
 
 lcd_yaz(" Sol");
 
 veri_yolla(0x7F);      }    
 
 lcd_gotoxy(2,1);   
 veri_yolla(tur/100+48);  
 veri_yolla((tur%100)/10+48);   
 veri_yolla(tur%10+48);    
 lcd_yaz(" Tur Dondu");   }}
 
 static void interruptrotary_encoder(void){
 
 GIE=0;  
 counter_old=counter;  
 if(B==1)      
 counter=counter-36;  
 else      counter=counter+36;     
 
 
 if((counter_old-counter)>0)   {  
 flag=1;     
 if(C)        
 tur--;   }  
 
 else   {     
 flag=0;      
 if(C)         
 tur++;   }  
 
 INTF=0;   GIE=1;}

fatihinanc

CCS C de output_low(...) gibi garip fonksiyonlar var. Onların nasıl kullanıldığına bakıp oradan da yukarıdaki programda bit atamaları nasıl yapıldıysa bunu o fonksiyonlarda kullanmak gerekiyor. CCS C nin help kısmı iyi diyenler vardı. İncelemenizi öneririm.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

enigmagazi

bilmediğim ifadeler


INTF=0;         bunu bilmiyorum

INTE=1;        bunu bilmiyorum

GIE=1;        bunu bilmiyorum

CMCON=0x07;   bunu bilmiyorum


INTEDG=1;  bunu bilmiyorum


bunları bana ccs c dilinde çevirebilecek arkadaş varmı???

tyildizak

#6
Alıntı yapılan: fatihinanc - 04 Ağustos 2011, 15:16:20
CCS C de output_low(...) gibi garip fonksiyonlar var.

Sonuçta port bitlerine tek tek erişebilmek için bu gibi hazır fonksiyonlar olabilir, siz de benzerlerini yazabilirsiniz ya da port değişkenini istediğiniz sayıyla and'leyerek de aynı işi yapabilirsiniz.
Programlama bilgisi çok iyi olmayan elektronikçileri düşünmüş olmalılar.

tyildizak

#7
Alıntı yapılan: enigmagazi - 04 Ağustos 2011, 16:15:58
bilmediğim ifadeler


INTF=0;         bunu bilmiyorum

INTE=1;        bunu bilmiyorum

GIE=1;        bunu bilmiyorum

CMCON=0x07;   bunu bilmiyorum


INTEDG=1;  bunu bilmiyorum


bunları bana ccs c dilinde çevirebilecek arkadaş varmı???



datasheet'i okuyup önce bu  bitlerin  ne işe yaradıklarını ve hangi  sfr'lerde olduğunu öğrenin.

gie, intcon yazmacının 7. biti -gibi...


sonra bu yazmaçları  byte olarak tanımlayın:

adreslerini biliyorsanız(datasheette bulunur) :

#byte intcon = 0xff2


adresini bilmiyorsanız:

#byte intcon = getenv("sfr:intcon")


sonra gie bitini tanımlayın:
#bit gie = intcon.7


artık programda hem gie biti, hem de intcon yazmacının tamamı üzerinde okuma,-yazma işlemleri yapabilirsiniz.