hc-sr04 ultrasonik sensör kullanımı

Başlatan tesla23, 24 Kasım 2013, 17:12:53

tesla23

s.a arkadaşlar. bende ultrasonic sensör uygulaması yapayım dedim bir türlü sonuç alamadım.proogramı aşağıdaki gibi yazıp çalıştırdım,proteusta echo ucunu buton bağladım belli bir süre lojik bir yapıp timer1 sayıcısı ile zamanı sayıp mesafeyi ölçtüm. Ama uygulamaya geçtiğimde aynı şekilde bir sonuç alamıyorum programda bi hata mı var anlamadım gitti. yardımcı olursanız sevinirim...


#include <16F877A.h>
#fuses XT
#fuses NOWDT
#fuses NOPROTECT
#fuses NOBROWNOUT
#fuses NOLVP
#fuses NOPUT
#fuses NOWRT
#fuses NODEBUG
#fuses NOCPD 
#use delay(clock=4000000)
#include<lcd.c>
long int sure=0,i;
int k;
float yol;

#int_timer1    //timer1 kesmesini kütüphanesi aktif
void timer1_kesme(){     //timer1 kesme lat programı
set_timer1(65535);       
sure++;                //timer 1 kesmesi aktif olunca sure değişkeni bir artsın
printf(lcd_putc,"\f%Ldus",sure); //
i=sure;
   yol=i*0.017;
   printf(lcd_putc,"\n%fcm",yol);
}
void main()
{
   set_tris_d(0x00);
   set_tris_c(0b00000010);
   set_tris_c(0b00000000);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   output_c(0);       
   lcd_init();           //lcd ayarları yapılıyor.
   lcd_send_byte(0,0x0d);
   set_timer1(65535);
   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
   enable_interrupts(INT_timer1);
   
   for(;;){
   output_c(1);            //15us dalga üret
   delay_us(15);
   output_c(0);
   k=input(pin_c1);       //c1 pini oku ve k değişkenine ata
   if(k==1){           //echo pini 1 ise kesmelere izin ver
   enable_interrupts(GLOBAL);
   }
   

ziyaretci

Merhaba,

T1 kesmesi ile işin bittiğinde bayrağı sıfırlaman gerekli. Genelde kesmeye girildiğinde sıfırlanır.

Senin verdiğin kod üzerinden ele alacak olursak,

#int_timer1    //timer1 kesmesini kütüphanesi aktif
void timer1_kesme(){     //timer1 kesme lat programı
disable_interrupts(INT_Timer1);  //Kesme bayrağı kaldırıldı
//Bu yapılmaz ise program sürekli kesmeye döner veya 
// diğer kesmeleri algılamaz.
set_timer1(65535);       
sure++;                //timer 1 kesmesi aktif olunca sure değişkeni bir artsın
printf(lcd_putc,"\f%Ldus",sure); //
i=sure;
   yol=i*0.017;
   printf(lcd_putc,"\n%fcm",yol);
}


Diğer kodları incelemedim, zaten yaptığımda bir uygulama değil şimdiye kadar. Tecrübem olmadığı içinde kafa karıştırmak istemem.

Temel sorun kesme bayrağının kaldırılması olarak düşünüyorum. Denedikden sonra geri bildirim yaparsanız iyi olur.
İyi çalışmalar diliyorum.

Kürşat C.

merhaba bende bu konu üzerine proje yapıyorum ve programınızda düzeltme yapabildiyseniz banada yardımcı olabilirmisiniz

selimkoc

Blogumda ve forumda bu konuda çalışmalarım mevcut.

Kürşat C.

uygulamalar için teşekkür ederim fakat ccs c ile mi değilmi birde pic olrak 16f877A  MI KULLANILDI PEK ANLAYAMADIM