Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: enigmagazi - 04 Ağustos 2011, 11:59:22

Başlık: encoder okuma
Gönderen: enigmagazi - 04 Ağustos 2011, 11:59:22
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.
Başlık: Ynt: encoder okuma
Gönderen: enigmagazi - 04 Ağustos 2011, 13:30:32
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...
Başlık: Ynt: encoder okuma
Gönderen: enigmagazi - 04 Ağustos 2011, 14:19:14
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...
Başlık: Ynt: encoder okuma
Gönderen: enigmagazi - 04 Ağustos 2011, 14:52:47
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;}
Başlık: Ynt: encoder okuma
Gönderen: fatihinanc - 04 Ağustos 2011, 15:16:20
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.
Başlık: Ynt: encoder okuma
Gönderen: 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ı???
Başlık: Ynt: encoder okuma
Gönderen: tyildizak - 04 Ağustos 2011, 16:40:18
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.
Başlık: Ynt: encoder okuma
Gönderen: tyildizak - 04 Ağustos 2011, 16:58:27
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.