Ultrasonik sensör ses sinyalini alamadığı zaman donma oluyor

Başlatan mustafabat, 21 Ocak 2015, 15:46:15

mustafabat

Merhaba ben ultrasonik sensör uygulaması yaptim. Devrede sorun yok ölçüm işlemini yapıyorun ancak sensör hareketli olduğunda ses sinyalini alamadığı için beklemede kalıyor ve donuyor. Bu sorunu yaşayan vardır eminim. Nasıl çözebilirim

#include <16f628.h>
#fuses INTRC_IO,NOWDT,NOMCLR 
#use delay (clock=4000000)

#define use_portb_lcd TRUE
#include <lcd.c>

#define trig pin_a0
#define echo pin_a1
#define led pin_a2

float32 uzaklik=0,sure=0;
void main()
{
   set_tris_a(0x04);
   output_a(0x00);
   
   setup_timer_1(0b00000101);          //Timer1 ayarları yapılıyor
   lcd_init();
   delay_ms(100);
   
   enable_interrupts(int_timer1);      //Timer1 kesmesi aktif ediliyor
   enable_interrupts(GLOBAL);
   
   printf(lcd_putc,"\fUZUNLUK HESAP\nUYGULAMASI");
   
   while(true)
   {
         output_high(trig);   //çalıştırmak için 15 us pals gönderiyoruz
         delay_us(10);
         output_low(trig);
     
      while(!input(echo)); //echo pinini bekliyoruz. pin 1 ise saymaya başlıyor
         set_timer1(0);
      while(input(echo));// pini 0 ise timer1 den süre alınıyor
     
         sure=get_timer1();   //uzaklık hesaplanıyor
         uzaklik=sure/58;
         
         if(uzaklik>10)output_high(led);else output_low(led);
         
         printf(lcd_putc,"\fUZUNLUK:%3.1f cm",uzaklik );
         delay_ms(100);   
   }
}

aliveli


mustafabat


samet_ehm

Bende de ölçüm alip donuyordu. Baglanti hatasından kaynaklanmisti.

CLR

Merhaba

Donmaması mümkün değil zaten çünkü donmasını sen istemişsin

aşağıdaki şekilde bir pinin istediğin seviye gelmesini beklersen bazen sonsuza kadar beklemek zorunda kalırsın

while(!input(echo)); 
Knowledge and Experience are Power

mustafabat

Bu programı başka nasıl yazabilirim. Bir tavsiyeniz var mı?

hasankara

İlk while beklemesinde timeout kontrolü yapıp, timeout olursa da başa dönmesini isteyeblrsin. Timer 1 i o ara kullanmıyorsun zaten o aralıkta Timer1 ile timeout kontrolü yaptırabilirsin.