TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: jesus flores en 05 de Febrero de 2017, 20:22:40
-
buenas tardes, he estado trabajando con el sensor ultrasonico HC_SR04 y un pic 16F877A, el punto es que he buscado y, al pareser entiendo el funcionamiento del este, pero no me responde el programa,la LCD enciende, y digitaliza todo bien, pero la distancia no la marca, esta queda siempre en 0, me pueden ayudar?
uso microcode,y ya intente con pulsout y nada,mes de mucha utilidad expertos :? :(
define osc 4
define LCD_DREG PORTD
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
SYMBOL TRIG=PORTA.5
SYMBOL ECHO=PORTE.0
distancia var word
tiempo var word
TRISD=0
TRISA=0
TRISE=%111
LCDOUT $FE,1
INICIO:
LOW trig
pauseus 2
high trig
pauseus 10
low trig
pauseus 2
pulsin echo, 1, tiempo
pause 1
LCDOUT $FE,$80,"DISTANCIA: ",DEC tiempo," "
GOTO INICIO
END
-
Estas usando puertos que usan comparadores y módulos analógicos, necesitas desactivar esta función porque estás usando entradas digitales. O solo cambia de puerto.
-
O solo agrega cmcon=7 y adcon1=6 al inicio del programa
-
O solo agrega cmcon=7 y adcon1=6 al inicio del programa
gracias, lo hare, pero como va, lo pongo despues de los define?
algo asi?
muchas gracias por tu ayuda
define osc 4
define LCD_DREG PORTD
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
cmcon=7
adcon1=6
SYMBOL TRIG=PORTA.5
SYMBOL ECHO=PORTE.0
distancia var word
tiempo var word
TRISD=0
TRISA=0
TRISE=%111
LCDOUT $FE,1
INICIO:
-
Ahi está bien, otra observación, el dato leido no es la distancia, necesitas hacer una conversión para obtener la distancia real, el cálculo viene en el datasheet del dispositivo.
-
muchas gracias,saludos
-
muchas gracias por tu aporte,me es de mucha ayuda, igual soy nuevo,estudiante de 2do semerstres de la carrera de electronica, pero me gusta mucho practicar,he estado estudian tus aportes y logre esto:
a pesar de todo sigue sin medirme nada,tenia otra formula que yo habia despejado,(D=tiempo/58) ya que el tiempo medido es el doble, de ahi se dividia entre la vel. del sonido.en que estoy mal, me podrian mandar un pequeño ejemplo? me seria de mucha ayuda, ya lo realize en arduino, pero le veo mas utilida a un pic.saludos
define osc 4
define LCD_DREG PORTD
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
SYMBOL TRIG=PORTA.5
SYMBOL ECHO=PORTE.0
distancia var word
tiempo var word
TRISD=0
TRISA=0
TRISE=%111
cmcon=7
adcon1=6
LCDOUT $FE,1
INICIO:
LOW trig
pauseus 2
high trig
pauseus 10
low trig
pauseus 2
pulsin echo,1,tiempo
pause 1
distancia=((tiempo)*(1/29))/2
LCDOUT $FE,$80,"DISTANCIA: ",DEC distancia," "
GOTO INICIO
END
-
Aquí tienes un ejemplo:
http://www.todopic.com.ar/foros/index.php?topic=14917.msg347062#msg347062
-
Prueba este código espero que funcione:
define osc 4
define LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTD
DEFINE LCD_RSBIT 2
DEFINE LCD_EREG PORTD
DEFINE LCD_EBIT 3
DEFINE LCD_BITS 4
CMCON = 7
ADCON1 = 6
TRISA.5 = 0
TRISD = 0
TRISE.0 = 1
SYMBOL TRIG = PORTA.5
SYMBOL ECHO = PORTE.0
distancia var word
tiempo var word
RES con 10 'constante resolución pulsin 4 MHz = 10 us
LCDOUT $FE, 1 :
INICIO:
LOW trig
Pulsout trig, 1
PULSin echo, 1, tiempo
distancia = (tiempo * RES) / 58 'en cm
LCDOUT $FE, $80, "DISTANCIA: ", DEC distancia, " "
LCDOUT $FE, $c0, "echo: ", DEC tiempo, " "
pause 100
GOTO INICIO
END
-
Prueba este código espero que funcione:
muchas gracias, la verdad no entiendo donde estaba mi error, por que la constante que veo en el codigo, yo lo hice hace penas una minutos pero asi:
d=(tiempo*10)/58
me podrias explicar, quiero aprender, y muchas gracias por tu tiempo