Park Yeri Ölçme Projesi TIMER0 Sorunu

Başlatan Denizccan, 04 Aralık 2014, 18:56:58

Denizccan

Merhaba

Arkadaşlar yazım biraz uzun olacak projeyi tam olarak anlamanızı sağlayıp bana daha kolay yadım edebilmeniz açısından.Üzerinde çalıştığım konu iki araç arasındaki park mesafesini ultrasonic sensör yardımı ile ölçmek. Şu şekilde düşünerek yazdım bu kodu elimdeki araca 1 adet hc-sr04 taktım ve motora pwm vererek iki aracın yanından sn'de 4.57 cm lik sabit hız ile geçmekte.Aracı ilk arabanın yanına paralel olarak koyarak işleme başlıyorum sensör araç hareket ederken ilk olarak küçük değerler ölçüyor. Park edilecek boşluğun yanından geçerken büyük değerler okumaya başlıyor. Büyük değer olarak ben 15cm seçtim. 15 cm yi ilk okuduğu zaman TIMER0 ı başlattım. TIMER0 da sayaç değişkeni 0.065536 sn'de 1 artmakta. Sonra benim aracım park yerini geçip ikinci aracın yanına geldiğinde yine 15'cm den küçük değer okuduğu anda TIMER0 ı durdurdum ve sayac değişkeninden aldığım değerle TIMER0'a gitme süresini(0.065536sn) çarparak kaç sn 15'cm den büyük değer ölçtüğünü buldum.Bulduğum zaman ile aracın hızını çarparak X=V*T den park edilecek konumun uzunluğunu ölçmek istedim fakat TIMER0 dan veri alamıyorum parkyeri hep 0 olarak çıkıyor.Kullandığım TIMER0  şeklini buton kullanarak denedim butona basma süresini kaç sn basıldığını sorunsuz şekilde ölçüyordu ama burada işe yaramadı.  Sorunun nerede olduğunu bulamadım yardımlarınızı bekliyorum.

kodları ve isis şemasını ekledim. Ben hc-sr04 u isis üzerine ekledim. Sizdede çalışması için kullandığım sensörün LIBRARY dosyasını ve hc-sr04 ün içine atılacak .HEX uzantısınıda ekledim.

http://dosya.co/7f6539393f46d77f/mesafe.rar

OLAY BU ŞEKİLDE GERÇEKLEŞMEKTE






#FUSES NOWDT, XT, NOPUT, PROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG   
 #use delay(clock=4000000)   
 #define use_portb_lcd true  
 #include <lcd.c>  
 #define trig pin_A0      
 #define echo pin_A1    
 #use fast_io(c)
 
 int i=40;        // pwm sınyalı duty buyuklugu
 int16 mesafe=0 ; //  park edilecek mesafe
 int16 sayac=0 ;  // timer 0 sayacı
 int16 zaman;     // tımer 1 den okunan değer
 float sure=0;    // kısa aalıkta gecen sure
 float hiz=4.57;  // arabanın hızı
 float parkyeri=0; // arabanın park edecegı yerın uzunlugu
 
 #int_timer0
 void timer0_kesme ()
 { 
 set_timer0(0);
 sayac++;
 }
 
 void olcum() //  mesafe  ölçülüyor ve mesafe değişkeni yeni değer atanıyor
 {
 output_high(trig);            
 delay_us(15);              
 output_low(trig);   
 while(!input(ECHO))           
 {}   
 set_timer1(0);             
 while(input(ECHO))           
 {} 
 zaman=get_timer1();           
 mesafe=(zaman*10)/(58) ;        
 } 
 void main()   
 {  
 set_tris_c(0x00);
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);       //tımer1 ayarı
 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);  //tımer0 ayarı
 setup_timer_2(T2_DIV_BY_16,170,1);  //tımer2 ayarı
 enable_interrupts(GLOBAL);
 set_timer0(0);
 lcd_init();                // LCD temizle  
 delay_ms(50);  
 printf(LCD_PUTC, "\f DCI");// LCD DCI yazdır   
 delay_ms(2000);    
 while(1)
 {
 setup_ccp1(CCP_PWM);
 set_pwm1_duty(i);  // araba harekete basladı
 
 olcum();         // mesafe okundu
 
 lcd_gotoxy(1,1);                         //  ekrana yazdırıldı
 printf(lcd_putc, "\fMesafe :%Lu  cm",mesafe);
 delay_ms(10);
 if(mesafe>=15)     // park edilecek yere geçildi timer 0 başlatıldı     
 {
 enable_interrupts(INT_timer0);   //Tımer 0 başlatıldı
 while(1)
 {            
 olcum(); // mesafe ölçüldü 
 lcd_gotoxy(1,1);                                //measafe ölçülüp ekrana yazdırıldı
 printf(lcd_putc, "\fMesafe : %Lu cm",mesafe);
 delay_ms(10);
 if(mesafe<15)
 {
 disable_interrupts(INT_timer0); // tımer 0 durduruldu
 delay_ms(10);      
 sure=sayac*0.065536;  // uzun ölçümlerde geçirilen süre hesaplandı
 parkyeri=sure*hiz;    // X=V*T denklemınden park yeri hesaplandı
 delay_ms(200);
 i=0;
 set_pwm1_duty(i);    //pwm durduruldu
 while(1)
 {
 lcd_gotoxy(1,1);  //park yeri  ekrana yazdırıldı
 printf(lcd_putc, "\fPark yeri : %f cm",parkyeri);
 delay_ms(10);
 }
 }
 }
 }
 }
 }

Ymn

Hocam sorunun cozumunu buldun mu?Ben de buna benzer bisey yapiyorum ve ayni sorunu yasiyorum yardimci olursan sevinirim.