Autor Tema: Duda en codigo para usar un sensor hc-sr04  (Leído 1998 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Duda en codigo para usar un sensor hc-sr04
« en: 09 de Agosto de 2015, 08:17:02 »
Buen dia! queria preguntar que ecuacion tendria que usar para obtener una distancia correcta si tengo este codigo que no es mio pero yo tengo un cristal de 16Mhz y otro de 20Mhz

Código: [Seleccionar]
#include <18f2450.h>
#FUSES XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP   
#use delay(clock=4000000)
                         
#include <lcd.c>


int16 distancia, tiempo;
#define trig pin_A1
#define echo pin_A0
#USE standard_io(b)

void main()
{
lcd_init();
delay_ms(250);
printf(LCD_PUTC, "\f Iniciando");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando .");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ..");
delay_ms(500);
printf(LCD_PUTC, "\f Iniciando ...");
delay_ms(500);

setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

while(true)
{
output_high(trig);                 
delay_us(20);                     
output_low(trig);
while(!input(echo))                   
{
}
set_timer1(0);                       
while(input(echo))                   
{
}

tiempo=get_timer1();
distancia=(tiempo*10)/(58.0);
printf(LCD_PUTC, "\fTiempo :%Lu \nDistancia = %Lu",tiempo,distancia);
delay_ms(500);
}
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #1 en: 09 de Agosto de 2015, 12:27:58 »
Vos decis para cambiar el programa por uno con un cristal de 16Mhz o uno de 20Mhz? y ese programa solo esta realizado para 4Mhz.


Cambia:

#use delay(clock=4000000)

por su correspondiente frecuencia.

Y como no podes aumentar mas el preescaler por que el maximo es 8 del TMR1, vas a tener que dividir el valor de lo que sale del timer 1

HS 16Mhz = 16Mhz/4Mhz = 4
HS 20Mhz = 20Mhz/4Mhz = 5


Y cambias
tiempo=get_timer1();

por

tiempo=get_timer1() / 4;
tiempo=get_timer1() / 5;

Segun el cristal que tengas, esto asumiendo que no va a desbordar el timer. Si desborda vas a tener que hacer un "arreglo" para que el programa cambie lo menos posible.
Lo maximo que pueden contar es de 131ms ( 16Mhz ) y 104ms (20Mhz)

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #2 en: 09 de Agosto de 2015, 12:56:58 »
Gracias por responder! tú respuesta es justo lo que pregunte!
Buscando encontre el cristal de 4000000 ahora el otro problema es que los capacitores con los que cuento son de 150p son los más cercanos a los 15p que necesito pero se pasa en 10 veces lo necesario!!  :( hay forma de arreglar los datos a obtener por codigo?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #3 en: 09 de Agosto de 2015, 13:14:19 »
Entonces no vas a poder usar esos cristales, con esas capacidades no.


Siguiendo con el programa, esto seria lo mas aproximado a lo que tenes con 4Mhz
La otra es que contes la cantidad de veces que se produce el overflow,

Supongo de 16Mhz el cristal. Si fuera de 20Mhz solo tendria que cambiar la formula por : (get_timer1() / 5) + (contador*16384);

Código: C
  1. set_timer1(0);
  2. clear_interrupt(INT_TIMER1); // No se como es lo que va dentro, la idea es limpiar el flag
  3. contador=0;
  4. while(input(echo))                    
  5. {
  6.    if(interrupt_active(INT_TIMER1))
  7.    {
  8.       contador++;                              //Cuento cuantas veces se produjo el overflow
  9.       clear_interrupt(INT_TIMER1);       // Limpio la bandera para asi espero la proxima
  10.     }
  11. }
  12.  
  13. if (contador <=4 ) // Si se paso de 4, es decir 5 significa que se paso en tiempo incluso de lo que habria sido con 4Mhz, por eso si se paso de ese tiempo directamente pongo la distancia a 0
  14. {
  15.    tiempo= (get_timer1() >> 2) + (contador << 14);  // O lo mismo que (get_timer1() / 4) + (contador*16384);
  16.    distancia=(tiempo*10)/(58.0);
  17. }
  18. else
  19. {
  20.     distancia =0;
  21. }

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #4 en: 09 de Agosto de 2015, 13:44:39 »
Gracias voy a tener todo en cuenta! ahora estoy montando todo, lastima los capacitores  :( :( voy a tener que esperar como un mes por mi trabajo ya que estoy trabajando entre 10 y 11 horas a partir de las 8am hasta los sabados y mi trabajo queda a 20km de la ciudad asi que se me complica un poquito conseguir esos capacitores

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #5 en: 09 de Agosto de 2015, 15:08:01 »
Gracias voy a tener todo en cuenta! ahora estoy montando todo, lastima los capacitores  :( :( voy a tener que esperar como un mes por mi trabajo ya que estoy trabajando entre 10 y 11 horas a partir de las 8am hasta los sabados y mi trabajo queda a 20km de la ciudad asi que se me complica un poquito conseguir esos capacitores

proba con esos capacitores muchas veces funciona hasta sin capacitores....
-
Leonardo Garberoglio

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #6 en: 09 de Agosto de 2015, 17:47:54 »
si es verdad! yo e usado valores peores y aveces a funcionado! ahora voy a seguir con el proyecto despues de una merecida ciesta!  :mrgreen:

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #7 en: 14 de Agosto de 2015, 22:13:53 »
Asi sucede en ocaciones, despues de un descanso lo ve uno mejor!
« Última modificación: 14 de Agosto de 2015, 22:15:57 por RALF2 »

Desconectado MINDFIELD

  • PIC16
  • ***
  • Mensajes: 139
Re: Duda en codigo para usar un sensor hc-sr04
« Respuesta #8 en: 15 de Agosto de 2015, 17:34:34 »
 Si RALF2 es verdad! gracias por alentarme a descansar tambien  :D