programa delay komutu işlemiyor yardım lütfen ?

Başlatan Mes_Gut, 18 Mayıs 2013, 03:44:17

Mes_Gut

merhaba arkadaşlar. 2 gündür kafayı yemek üzere olduğum bir problem var lütfen yardım edin  :-X  pacman robot yapmaya çalışıyorum. yani belirli bir haritada kendi kendine giden bir araba. 16f88 kullanıyorum. pıc in içindeki dahili ossilatörü kullanıcam ve pwm ile hız kontrolü yapmak zorundayım. bunun için  #fuses INTRC seçtiğimde,  eğer pwm kullanmadan motorları çalıştırırsam sorun olmuyor. Fakat pwm kullanırsam motorlar çalışmıyor.  #fuses HS seçtiğimde ise herşey tıkır tıkır çalışıyor fakat programda delay_ms()  komutunu girdiğim yere kadar olan yer çalışıyor delay kodundan ilersi çalışmıyor. Kafayı yemek üzereyim :)

mustafacan

programın 7inci 11inci ve 40ıncı satırlarını kontrol et. sonrada robotun tekerleğine bak patlakmı diye. neticeyide bildir.
Keşfedilecek çok teknoloji var. Boş Vaktim Yok!

sadogan

Alıntı yapılan: Mes_Gut - 18 Mayıs 2013, 03:44:17
merhaba arkadaşlar. 2 gündür kafayı yemek üzere olduğum bir problem var lütfen yardım edin  :-X  pacman robot yapmaya çalışıyorum. yani belirli bir haritada kendi kendine giden bir araba. 16f88 kullanıyorum. pıc in içindeki dahili ossilatörü kullanıcam ve pwm ile hız kontrolü yapmak zorundayım. bunun için  #fuses INTRC seçtiğimde,  eğer pwm kullanmadan motorları çalıştırırsam sorun olmuyor. Fakat pwm kullanırsam motorlar çalışmıyor.  #fuses HS seçtiğimde ise herşey tıkır tıkır çalışıyor fakat programda delay_ms()  komutunu girdiğim yere kadar olan yer çalışıyor delay kodundan ilersi çalışmıyor. Kafayı yemek üzereyim :)
Biri size bu şekilde bir soru sorsa nasıl cevap vereceğini çok merak ediyorum.
Burdaki insanlar müneccim deyil .
Pwm i nasıl kullanıyorsun.
Bağlantı şeman nasıl.
Yazdığın program nasıl.
Bunları net şekilde ifade ettikten sonra sorunun çözümüne çözümler gelebilir.


Mes_Gut

#3
Alıntı yapılan: mustafacan - 18 Mayıs 2013, 09:34:57
programın 7inci 11inci ve 40ıncı satırlarını kontrol et. sonrada robotun tekerleğine bak patlakmı diye. neticeyide bildir.




#include <16F88.h>
#device adc=8

#FUSES CCPB3
#FUSES NOWDT                   
#FUSES HS
#FUSES NOBROWNOUT               
#FUSES NOLVP
                 
#use delay(clock=8000000)
#use fast_io(a)
#use fast_io(b)
#define on pin_a2
int x=0;
unsigned int sol;
unsigned int sag;

void main () {

set_timer2(0);
setup_timer_2(T2_DIV_BY_4,160,1);
setup_CCP1(CCP_PWM);

setup_adc(adc_clock_INTERNAL);
setup_adc_ports(0,1);

set_tris_a(0b00000011);
set_tris_b(0b00000000);


output_b(0b00000000);

set_pwm1_duty(0);

output_high(pin_a6);
delay_ms(2000);
output_low(pin_a6);


while(1){
set_adc_channel(1); // sol sensör kontrol
sol=read_adc();

set_adc_channel(0); //sağ sensör kontrol
sag=read_adc();


while((sol>60&&sol<150)&&(sag>60&&sag<150)){  //düz gitmesi gereken aralık
 
   
   output_high(pin_b0);     sag motor
   output_low(pin_b1);
   
   output_high(pin_b5);     sol motor
   output_low(pin_b4);
   
   
   set_pwm1_duty(80);
   
                     set_adc_channel(0); // sag sensör kontrol
                     sag=read_adc();
                   
                     set_adc_channel(1); // sol sensör kontrol
                     sol=read_adc();
           
                   
   }

   while((sag>60&&sol<60)||(sol<150&&sag>150)){    //sola dönmesi için gereken aralık
   
   output_high(pin_b0);
   output_low(pin_b1);
   
   output_low(pin_b5);    //sol motor
   output_high(pin_b4);
 
   
   set_pwm1_duty(80);
   
                     set_adc_channel(0); // sag sensör kontrol
                     sag=read_adc();
                     
                     set_adc_channel(1); // sol sensör kontrol
                     sol=read_adc();
                 
}


   while((sol>60&&sag<60)||(sag<150&&sol>150)){   //saga dönmesi için gereken aralık
   
   output_low(pin_b0);
   output_high(pin_b1);
   
   output_high(pin_b5);
   output_low(pin_b4);
   
   set_pwm1_duty(80);
   
   
                     set_adc_channel(0); // sag sensör kontrol
                     sag=read_adc();
                   
                     set_adc_channel(1); // sol sensör kontrol
                     sol=read_adc();
                   
   }


while(sag<60&&sol<60){        // heryer boşsa
   output_high(pin_b0);
   output_low(pin_b1);
   
   output_high(pin_b5);
   output_low(pin_b4);
   
   
   set_pwm1_duty(80);
   
                     set_adc_channel(0); // sag sensör kontrol
                     sag=read_adc();
                   
                     set_adc_channel(1); // sol sensör kontrol
                     sol=read_adc();
                   
}


while(sol>150&sag>150){     //heryer doluysa
   output_high(pin_b0);
   output_low(pin_b1);
   
   output_high(pin_b5);
   output_low(pin_b4);
   
   
   set_pwm1_duty(80);
   
                     set_adc_channel(0); // sag sensör kontrol
                     sag=read_adc();
                     
   
                     set_adc_channel(1); // sol sensör kontrol
                     sol=read_adc();
                     
   }



}
}


program bu şekilde. Fakat sorunun ossilatör ayarlarıyla ilgili olduğu mechul. Saçmasapan bi yerden açık bulsamda laf soksam diye uğraşan insanlardan cevap beklemiyorum zaten.  Tamam hadi sorunu anlatamadım, yada sen anlamadın diyelim. Güzelce açıkca yaz diyemiyomusun dalga geçmek yerine.