myurdabak
Üye
- Katılım
- 31 Ocak 2008
- Mesajlar
- 499
- Puanları
- 1
bilgi geldiğinde gelen veriyi kesme ile alabilirsiniz ve aldığınız veriyi bir değişkene atayabilirsiniz. döngü içerisinde iken de o değişkeni sürekli kontrol ettirerek istediğiniz işlemi yapabilirsiniz.
ben de step motorlu uzaktan kumandalı araba yapmıştım ve ileri geri sağ sol işlemlerini sorunsuz yapıyordu. rf ile yapmıştım tabi.
ama ben kesme ile kullanmamıştım. fazladan bir pic kullanmıştım daha kolay olmuştu. sürekli rf i kontrol etmek ve kaçırmamak gerekli çünkü.
siz kesme kullanırsanız ve dediğim gibi yaparsanız bence sorun olmayacaktır ve kolayca yapacaksınız...
kardeş benim yapmak istediğimde rf alıcı verici ile step motor kontrollü araba yapmak bu bahsettiğim sorunu yaşadım dediğin gibi daha birde rf yi kaçırma olayı fln var.Bu fazladan pic kullanma işini ne amaçlı ve nasıl yaptın? yaptığın projenin kodları ve devresi varsa bana yollayabilirmisin?bana çok yardımcı olur.
ben senin dediğinin bir benzerini 877 ile yaptım aşağıda resmi ve kodları var inşallah işini görür denedim çalışıyor oraya sadece fazladan bi kbhit() ekledim kadar
#include "C:\Documents and Settings\akif\Desktop\Yeni Klasör (3)\step.h"
int i=0,hiz=100;
char al;
const int duz[]={0x11,0x33,0x22,0x66,0x44,0xCC,0x88,0x99}; // Step motor yarım adım dönüş adımları
const int sag[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
const int sol[]={0x10,0x30,0x20,0x60,0x40,0xC0,0x80,0x90};
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
// TODO: USER CODE!!
while(1){
while(kbhit())
{
al=getch();
}//kbhit
if(al=='w')
{
for(i=0;i<8;i++)
{
output_d(duz); // Step motor 1 adım ileri
delay_ms(hiz); // Adımlar arası bekleme süresi
}
}//if
if(al=='a'){
for(i=0;i<8;i++)
{
output_d(sol); // Step motor 1 adım ileri
delay_ms(hiz); // Adımlar arası bekleme süresi
}
}//if
if(al=='d'){
for(i=0;i<8;i++)
{
output_d(sag); // Step motor 1 adım ileri
delay_ms(hiz); // Adımlar arası bekleme süresi
}
}//if
}//while(true)
}//main
teşekkürler kardeş uğraşın için.bunu 2 pic arasında deneyeyim umarım aynı sonucu verir.yalnız yazdığın programda for döngüsünün motoru 1 tur döndürmesi gerekir sürekliliği nasıl sağlıyor?süreklilik için sürekli w'ya basmak gerekmezmi?
birde bildiğim kadarıyla kbhit() klavyeden karakter alındığı taktirde 1 bilgisini veriyor.Fakat ben bilgiyi klavyeden değilde diğer picten alıcam o yüzden kbhit() orada kullanılır mıki? mesela for döngüsünden çıkmak için döngünün sonuna if(kbhit()) break; ifadesini koydum yinede çıkmamıştı döngüden. kbhit kullanamayız gibi geliyor iki pic iletişiminde.
Moderatör tarafında düzenlendi: