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.
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...
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...
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;}
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.
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ı???
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.
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.