Autor Tema: Ultrasonido Hc-SR04 por usb.  (Leído 2623 veces)

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

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Ultrasonido Hc-SR04 por usb.
« en: 22 de Febrero de 2019, 01:30:08 »
Hola... Creo que aun que ya es un poco pasado este medidor de distancia (hc-sr04), para mi es novedad, pues apenas lo estoy implementando  :lol:

Bueno pues resulta que por viendo algunos formas de como implementarlo, llegue a lo siguiente:


Código: C++
  1. #include <18F2550.h>
  2.          #device *=16
  3.          #FUSES XT,NOPROTECT,BROWNOUT,PUT,NOCPD,STVREN,NODEBUG,NOLVP,NOWRT,NOWRTD,IESO,FCMEN,NOPBADEN,NOWRTC,NOWRTB,NOEBTR,NOEBTRB,NOCPB,MCLR
  4.          #use delay(clock=4000000, crystal=4000000)                
  5.          #include<lcd.c>
  6.                                        
  7.          int16 time_eco_Us  = 0;                                    
  8.          float time_eco_ms  = 0.0;                              
  9.          float temperature    = 25.0;                                                                                                      
  10.          //int16 bitsADC        = 0;
  11. float distancia      = 0.0;    
  12.  
  13. void main (void){  
  14.          porta=0x00; portb=0x00; portc=0x00;
  15.          set_tris_a(0x10);                                                          
  16.          set_tris_b(0b00000000);                                                          // 1 = entrada, 2 = salida Ra7-Ra6-Ra5-Ra4-Ra3-Ra2-Ra1-Ra0
  17.          set_tris_c(0b00000000);
  18.          //SETUP_ADC_PORTS(AN0);  // determina que el puerto RA0/AN0 será analógico
  19.          //SET_ADC_CHANNEL(0);
  20.          //setup_adc(ADC_CLOCK_DIV_32); //desactivamos comparadores del puerto A
  21.          lcd_init();                                                                
  22.          trigger_off;
  23.          setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);    
  24.          set_timer1(0);
  25.          enable_interrupts(GLOBAL);      
  26.  
  27. while(true){
  28.  demora_pulso_trigger;                                                      // Le damos tiempo de 10 mS al primer pulso
  29.          trigger_on; delay_us(20); trigger_off;                                    
  30.          for (;!input(pin_echo););                                                  
  31.          set_timer1(0);                                                            
  32.          for (;input(pin_echo););                                                  
  33.          
  34.          time_eco_Us = get_timer1();                                              
  35.                                                                                     //  distancia = tiempo * velocidad
  36.          distancia = ((((time_eco_Us * 0.000001)*(331.4 + (0.61 * temperatura)))*0.5)*100);      
  37.  
  38. lcd_gotoxy(1,3); printf(lcd_putc," Dist: %3.2f cm  ",distancia ;

Pues el code funciona, peroaqui va el pero....

Lo quiero pasar a 48Mhz con un cristal externo de 4 Mhz para verlo en un programita que java. Pero resulta que todos los valores se me han movido al quererlo hacer los usb.

Asi estoy configurando  los fuses y el cristal:
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,NOPROTECT,NOSTVREN,NOCPB,NOWRT,NOWRTC

#use delay(clock=48000000)
« Última modificación: 24 de Febrero de 2019, 10:48:37 por mariacontenis »

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #1 en: 22 de Febrero de 2019, 13:37:18 »
Hola

el problema debe estar en setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);   ya que al trabajar a 4Mhz cada tick del timer ocurre cada 1uS
y al trabajar a 48Mhz ocurre cada 0.0833uS y desborda cada 5.46mS

Te recomendaría trabajar con timer 1     T1_DIV_BY_16  cada tick incrementa cada 1.3333uS

entonces tu formula quedaría...
distancia = ((((time_eco_Us * 0.000001333)*(331.4 + (0.61 * temperatura)))*0.5)*100);

espero sea la solución.

Saludos.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #2 en: 22 de Febrero de 2019, 19:30:01 »
Gracias Rulo.  No estoy seguro si el timer1 permite T1_DIV_BY_16 o 8 es lo máximo a dividir. Pero creo que por ahí va el asunto de ajustar el tiempo.

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #3 en: 22 de Febrero de 2019, 20:16:43 »

   Cierto. Prueba entonces con     setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

y con:

distancia = ((((time_eco_Us * 0.0000006666)*(331.4 + (0.61 * temperatura)))*0.5)*100);


Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #4 en: 22 de Febrero de 2019, 22:05:41 »
Rulo, creo que no me resulto cambiando el timer. De echo veo que aun asi, los incrementos de distancia son muy grandes en elm hc-sr04.

Algo mas debe de estar pasando y es que desde que trato de hacer el pulso de 10 microsegundos (dejando un poco lo del timer1), el proteus me muestra un tiempo mas corto.

Código: C
  1. trigger_on; delay_us(10); trigger_off;

Se supone que aquí enviaría un pulso de 10Us y el pulso es diferente cuando lo emigro a 48Mhz.

Adjunto imagen...

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #5 en: 23 de Febrero de 2019, 05:14:04 »


Lo anterior a 4Mhz lo has hecho en físico?
no te fíes de la simulación.
Yo tengo estos fuses en una comunicación USB HID
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
a 48Mhz y me funciona, perdón, no eh tenido tiempo de comparar los tuyos, ni se que comunicación estés implementando.
esperamos mas detalles.
saludos.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #6 en: 23 de Febrero de 2019, 10:51:23 »
Voy a ver resultados con un osciloscopio y adjunto imágenes. Gracias :-/.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #7 en: 23 de Febrero de 2019, 23:31:36 »
Ya quedó!!!. Cambie el cristal a 20 mhz y los fuses. Y también setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); dividido en 8 y no en 1.

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re:Ultrasonido Hc-SR04 por usb.
« Respuesta #8 en: 24 de Febrero de 2019, 00:37:56 »
Que bien, me alegra   :) :)

    Saludos...