Merhaba arkadaşlar buradaki hatam ne olabilir ledin belirlediğim mesafeden bir süre sonra sönmesi lazım ama sürekli yanıyor
#include <12F675.h>
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPROTECT
#FUSES NOMCLR
#FUSES NOPUT
#FUSES NOBROWNOUT
#FUSES NOCPD
#use delay(clock=4000000)
#define trig pin_a5
#define echo pin_a4
#define led pin_a2
#use fast_io(a)
int16 distance, time;
int sayac;
void main()
{
setup_adc( ADC_OFF );
set_tris_a(0b00100000);
delay_ms(1000); // Boot-up delay
setup_timer_1(RTCC_INTERNAL | RTCC_DIV_1); // initiating timer
while(true)
{
output_high(trig); // ping the sonar
delay_us(20); // sending 20us pulse
output_low(trig);
while(!input(echo)) // wait for high state of echo pin
{}
set_timer1(0); // setting timer zero
while(input(ECHO)) // Wait for high state of echo pin
{}
time=get_timer1(); // Getting the time
distance=time/58 ; // Calculating the distance
sayac++;
delay_ms(100);
if(distance<10)
{
sayac = 0;
}
if(sayac<20)
{
output_high(pin_a2);
delay_ms(100);
}
if(sayac>20)
{
output_low(pin_a2);
delay_ms(100);
}
}
}
#use fast_io(a) kısmını silince düzeldi :'(
Alıntı yapılan: ChiliPepper - 20 Ekim 2020, 15:14:40Merhaba arkadaşlar buradaki hatam ne olabilir ledin belirlediğim mesafeden bir süre sonra sönmesi lazım ama sürekli yanıyor
#include <12F675.h>
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPROTECT
#FUSES NOMCLR
#FUSES NOPUT
#FUSES NOBROWNOUT
#FUSES NOCPD
#use delay(clock=4000000)
#define trig pin_a5
#define echo pin_a4
#define led pin_a2
#use fast_io(a)
int16 distance, time;
int sayac;
void main()
{
setup_adc( ADC_OFF );
set_tris_a(0b00100000);
delay_ms(1000); // Boot-up delay
setup_timer_1(RTCC_INTERNAL | RTCC_DIV_1); // initiating timer
while(true)
{
output_high(trig); // ping the sonar
delay_us(20); // sending 20us pulse
output_low(trig);
while(!input(echo)) // wait for high state of echo pin
{}
set_timer1(0); // setting timer zero
while(input(ECHO)) // Wait for high state of echo pin
{}
time=get_timer1(); // Getting the time
distance=time/58 ; // Calculating the distance
sayac++;
delay_ms(100);
if(distance<10)
{
sayac = 0;
}
if(sayac<20)
{
output_high(pin_a2);
delay_ms(100);
}
if(sayac>20)
{
output_low(pin_a2);
delay_ms(100);
}
}
}
Kod içerisinde while döngüsünde; ilk if şartında distance değişkeninizi sorgulamışsınız mesafe 10'dan küçük olursa sayaç değişkenini sıfırlamışsınız. Eğer ki mesafe 10'dan küçük değilse sayaç her 100ms'de 1 birim artacak. Bu da 2 saniye boyunca ultrasonik sensörün önünde en az 11cm mesafe uzaklıkta bir cisim bulunması gerektiği anlamına geliyor. Burada ultrasonik sensörünüzün önündeki engelin sürekli olarak orada durması gerektiğini ve düz bir şekilde görmesi gerektiğini hatırlatmak isterim. Eğer ki sensörün önüne hiç bir engel koymadan test işleminizi yaptıysanız veya 2sn gibi bir süre bekletmediysek ultrasonik sensör anlık olarak 0 cm mesafe ölçebilir. Burdan kaynaklı bir sorun olabilir
proje yazılımında timer1 in interrupt service routine bölümünü göremedim burayamı eklemediniz acaba
Alıntı yapılan: erdcan - 20 Ekim 2020, 17:14:33Kod içerisinde while döngüsünde; ilk if şartında distance değişkeninizi sorgulamışsınız mesafe 10'dan küçük olursa sayaç değişkenini sıfırlamışsınız. Eğer ki mesafe 10'dan küçük değilse sayaç her 100ms'de 1 birim artacak. Bu da 2 saniye boyunca ultrasonik sensörün önünde en az 11cm mesafe uzaklıkta bir cisim bulunması gerektiği anlamına geliyor. Burada ultrasonik sensörünüzün önündeki engelin sürekli olarak orada durması gerektiğini ve düz bir şekilde görmesi gerektiğini hatırlatmak isterim. Eğer ki sensörün önüne hiç bir engel koymadan test işleminizi yaptıysanız veya 2sn gibi bir süre bekletmediysek ultrasonik sensör anlık olarak 0 cm mesafe ölçebilir. Burdan kaynaklı bir sorun olabilir
Herhangi bir sorun oluşmadı. Sonradan düzenlediğim şekliyle amacım 120cm içerisine biri girdiğinde ledi yakmak kimse yoksa 1 dk sonra ledi kapatmak bu şekilde sorunsuz çalıştı
Alıntı yapılan: fay_elektronik - 20 Ekim 2020, 17:15:05proje yazılımında timer1 in interrupt service routine bölümünü göremedim burayamı eklemediniz acaba
#include <12F675.h>
#FUSES NOWDT
#FUSES INTRC_IO
#FUSES NOPROTECT
#FUSES NOMCLR
#FUSES NOPUT
#FUSES NOBROWNOUT
#FUSES NOCPD
#use delay(clock=4000000)
//#use rs232 ( baud=9600, xmit=pin_A1, rcv=pin_A0, parity=N, stop=1 )
#define trig pin_a5
#define echo pin_a4
#define led pin_a2
int16 distance, time;
int16 sayac = 0;
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
set_tris_a(0b00100000);
delay_ms(1000); // Boot-up delay
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); // initiating timer
while(true)
{
output_high(trig); // ping the sonar
delay_us(20); // sending 20us pulse
output_low(trig);
while(!input(echo)) // wait for high state of echo pin
{}
set_timer1(0); // setting timer zero
while(input(echo)) // Wait for high state of echo pin
{}
time=get_timer1(); // Getting the time
distance=time/58 ; // Calculating the distance
sayac++;
if(distance<120)
{
sayac = 0;
}
if(sayac<550)
{
output_high(pin_a2);
delay_ms(100);
}
if(sayac>550)
{
output_low(pin_a2);
delay_ms(100);
}
}
}
bu şekilde kullandım bir sorun çıkarmadı daha yeniyim bu konuda dediğiniz kısım
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL); bu kodlar mı
https://www.sifirzero.com/2020/06/pic-programlama-ccs-c-mesafe-sensor.html?m=0 (https://www.sifirzero.com/2020/06/pic-programlama-ccs-c-mesafe-sensor.html?m=0)
İsine yararsa bir tane örnek veriyorum. Kolay gelsin.fast io veya standart io bazen sorun çıkartiyor.