Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ChiliPepper - 20 Ekim 2020, 15:14:40

Başlık: HC-SR04 mesafeye göre led yakma
Gönderen: ChiliPepper - 20 Ekim 2020, 15:14:40
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);
}
}
}
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: ChiliPepper - 20 Ekim 2020, 16:08:34
#use fast_io(a) kısmını silince düzeldi  :'(
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: erdcan - 20 Ekim 2020, 17:14:33
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
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: fay_elektronik - 20 Ekim 2020, 17:15:05
proje yazılımında timer1 in interrupt service routine bölümünü göremedim burayamı eklemediniz acaba
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: ChiliPepper - 20 Ekim 2020, 23:27:10
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ı
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: ChiliPepper - 21 Ekim 2020, 17:50:37
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ı
Başlık: Ynt: HC-SR04 mesafeye göre led yakma
Gönderen: sifirzero - 23 Ekim 2020, 16:35:54
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.