TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jo.an. en 05 de Mayo de 2010, 17:39:26
-
Saludos a todos:Estoy con un srf05 modulo ultrasonido,lo estoy trabajando para que cuente mm con 16f84.El programa hace un bucle hasta que se pone a 0 la entrada ra4,va cargando en reg1,dig1,dig2 y dig3.El problema es que cuando incrementa en reg1,el tiempo de la onda recibida por el srf05 es muy corta como para decirme en mm la distancia(aproximadamente la mitad)¿como ampliaria la longitud de onda al srf05 o como arreglaria este programa para que sirviese?att jose
empe bsf 0x05,3
movlw .22
movwf reg
des decfsz reg,1 ;manda el pulso
goto des ;salida pulso por ra3
bcf 0x05,3
;--------------------------------------------------------------------
aqui btfss 0x05,4 ;entrada ra4
goto aqui ;espera a que se ponga en 1 la entrada
;-----------------------------------------------------------------------
tre incf reg1,0
movwf reg1
xorlw .1 ;incrementa en reg1
btfss 3,2
goto va
clrf reg1
incf dig1,0 ;cuando llega a 1 incrementa en unidades
movwf dig1
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,0 ;cuando es 10 incrementa en decenas
movwf dig2
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,0 ;cuando es 10 incrementa en centenas
movwf dig3
va btfsc 0x05,4 ;si pulso es alto
goto tre ;sigue incrementando dig1
call tabla
clrf reg1
clrf dig1
clrf dig2
clrf dig3
goto empe ;vuelve y empieza
-
Puedes cambiar a un valor mayor el cristal del pic.
Tambien puedes configurar el Timer0 para que se incrementa con cada ciclo de reloj, si usas cristal de 4Mhz el Timer0 puede incrementarse de 1uS en 1uS y habilitas la interrupción por desborde del Timer0 entonces cuando se produzca la interrupción sabras que han pasado 256uS mas, en este instante incrementas en 1 un contador ubicado en el RSI por cada desborde, luego en tu programa principal solo esperas que cambie de estado la linea que viene del sensor en cuyo caso detienes la interrupción y lees el ultimo valor del timer0.
El tiempo final medido será (en uS): contador x 256uS + (ultimo valor del timer0)
Puedes cambiar el prescaler si deseas que el Timer0 incremento de 2 en 2 o de 4 en 4, depende de ti.
Javicho.
-
Gracias javincho:Mas o menos le pude solucionar lo de la distancia,pero la lectura no es estable,si lo dejas en un sitio fijo( ejem 240 )varia entre 240 y 260 aproximadamente.¿que me falta?.att jose
-
Yo creo que te falta precisión en la lectura, si quieres ser mas exacto seria mejor que uses por lo menos un pic16F628A con un XT=20Mhz y una buena estrategia de programación a fin de que leas de forma mas exacta el pulso enviado por el sensor.
Javicho.
-
http://www.msebilbao.com/notas/downloads/Medidor%20Ultrasonico%20SRF05.pdf
Esta pagina es sobre el SRF05, es posible que ya la hayas visto, pero por si acaso.
El 16f84A puede trabajar a 20Mh, es de las pocas cosas que sabe hacer igual que el resto de los 16f modernos, en lo que dice Javicho del TIMER se le escapo un detalle importante, y es que el TIMER cuenta de 2 en 2 en la escala mas baja del preescaler, es decir el resultado lo tienes que dividir entre 2, esto lo haces facil haciendo una "rrf" que es lo mismo que dividir entre 2.
Pon el programa entero y lo pasamos por el MPLAB, si quieres. Deberias llamarle a los registros por su nombre, asi como lo tienes es muy dificil de entender, ya que hay que estar mirando el datasheet continuamente.
Haces una cosa sin mucha logica:
incf dig1,0 ;cuando llega a 1 incrementa en unidades
movwf dig1
si haces esto es lo mismo
incf dig1,1
Saludos
-
Saludos tapi8:Agradezco tu ayuda.Aunque no te lo creas:
incf dig1,0
movwf dig1 ;funciona pero varian mucho los valores
incf dig1,1 ;se queda en 000
Tampoco se por que,tampoco se por que es tan inestable.No uso el timer,simplemente incremento en los registros hasta que el pulso recibido se ponga a cero,luego salta a la tabla para visualizarlo.Lo mando completo(creo que te liaras mas).Posiblemente la tabla se pueda hacer de otra forma mas sencilla,pero es una que hice hace años y solo copiar y pegar(me volvi comodo):att jose
-
Saludos tapi8:Agradezco tu ayuda.Aunque no te lo creas:
incf dig1,0
movwf dig1 ;funciona pero varian mucho los valores
incf dig1,1 ;se queda en 000
Tampoco se por que,tampoco se por que es tan inestable.No uso el timer,simplemente incremento en los registros hasta que el pulso recibido se ponga a cero,luego salta a la tabla para visualizarlo.Lo mando completo(creo que te liaras mas).Posiblemente la tabla se pueda hacer de otra forma mas sencilla,pero es una que hice hace años y solo copiar y pegar(me volvi comodo):att jose
list p=16f84
reg1 equ 20
reg2 equ 21
dig1 equ 22
dig2 equ 23
dig3 equ 24;
reset org 00
goto inicio
org 05
inicio bsf 3,5
movlw b'10000'
movwf 0x05 ;cofiguracion de puertos
movlw b'00000000'
movwf 0x06
bcf 3,5
clrf 0x05
clrf 0x06
clrf reg1
clrf reg2
clrf dig1
clrf dig2
clrf dig3
movlw .255
movwf reg1
fv7 movlw .255 ;retardo de inicio
movwf reg2
fv1 decfsz reg2,1
goto fv1
decfsz reg1,1
goto fv7
empe bsf 0x05,3
movlw .100
movwf reg1
des decfsz reg1,1 ;manda el pulso salida de eco
goto des
bcf 0x05,3
;--------------------------------------------------------------------
aqui btfss 0x05,4
goto aqui ;espera a que se ponga en 1 la entrada eco
;-----------------------------------------------------------------------
tre incf dig1,1
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,1
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,1
va btfsc 0x05,4 ;si pulso de eco no es bajo sigue incrementando
goto tre
call tabla
clrf dig1
clrf dig2
clrf dig3
goto empe ;vuelve y empieza
;------------------------------------------------------------------------
tabla bsf 0x05,2 ;prende transistor de unidades
movf dig1,1
xorlw .9 ;si el valor del registro dig1 es 9
btfss 3,2
goto si1 ;si no salta
movlw b'00010000' ;prenden los bit correspondientes
movwf 0x06 ;en puerto b
goto pil
si1 movf dig1,1 ;tabla para unidades
xorlw .8
btfss 3,2
goto si2
movlw b'00000000'
movwf 0x06
goto pil
si2 movf dig1,1
xorlw .7
btfss 3,2
goto si3
movlw b'01110100'
movwf 0x06
goto pil
si3 movf dig1,1
xorlw .6
btfss 3,2
goto si4
movlw b'00000010'
movwf 0x06
goto pil
si4 movf dig1,1
xorlw .5
btfss 3,2
goto si5
movlw b'00010010'
movwf 0x06
goto pil
si5 movf dig1,1
xorlw .4
btfss 3,2
goto si6
movlw b'10110000'
movwf 0x06
goto pil
si6 movf dig1,1
xorlw .3
btfss 3,2
goto si7
movlw b'01010000'
movwf 0x06
goto pil
si7 movf dig1,1
xorlw .2
btfss 3,2
goto si8
movlw b'01001000'
movwf 0x06
goto pil
si8 movf dig1,1
xorlw .1
btfss 3,2
goto si9
movlw b'11110100'
movwf 0x06
goto pil
si9 movf dig1,1
xorlw .0
btfss 3,2
goto pil
movlw b'00000100'
movwf 0x06
pil call retardo
bcf 0x05,2 ;apaga transistor de unidades
call retardo
;-------------------------------------------------------------------
tabla1 bsf 0x05,1 ;prende transistor de decenas
movf dig2,1
xorlw .9
btfss 3,2
goto si1a
movlw b'00010000'
movwf 0x06
goto pol
si1a movf dig2,1 ;tabla para decenas
xorlw .8
btfss 3,2
goto si2a
movlw b'00000000'
movwf 0x06
goto pol
si2a movf dig2,1
xorlw .7
btfss 3,2
goto si3a
movlw b'01110100'
movwf 0x06
goto pol
si3a movf dig2,1
xorlw .6
btfss 3,2
goto si4a
movlw b'00000010'
movwf 0x06
goto pol
si4a movf dig2,1
xorlw .5
btfss 3,2
goto si5a
movlw b'00010010'
movwf 0x06
goto pol
si5a movf dig2,1
xorlw .4
btfss 3,2
goto si6a
movlw b'10110000'
movwf 0x06
goto pol
si6a movf dig2,1
xorlw .3
btfss 3,2
goto si7a
movlw b'01010000'
movwf 0x06
goto pol
si7a movf dig2,1
xorlw .2
btfss 3,2
goto si8a
movlw b'01001000'
movwf 0x06
goto pol
si8a movf dig2,1
xorlw .1
btfss 3,2
goto si9a
movlw b'11110100'
movwf 0x06
goto pol
si9a movf dig2,1
xorlw .0
btfss 3,2
goto pol
movlw b'00000100'
movwf 0x06
pol call retardo
bcf 0x05,1 ;apaga transistor de decenas
call retardo
;--------------------------------------------------------------------------
tabla2 bsf 0x05,0 ;prende transistor de centenas
movf dig3,1
xorlw .9
btfss 3,2
goto si1b
movlw b'00010000'
movwf 0x06
call pul
si1b movf dig3,1 ;tabla para centenas
xorlw .8
btfss 3,2
goto si2b
movlw b'00000000'
movwf 0x06
call pul
si2b movf dig3,1
xorlw .7
btfss 3,2
goto si3b
movlw b'01110100'
movwf 0x06
call pul
si3b movf dig3,1
xorlw .6
btfss 3,2
goto si4b
movlw b'00000010'
movwf 0x06
call pul
si4b movf dig3,1
xorlw .5
btfss 3,2
goto si5b
movlw b'00010010'
movwf 0x06
call pul
si5b movf dig3,1
xorlw .4
btfss 3,2
goto si6b
movlw b'10110000'
movwf 0x06
call pul
si6b movf dig3,1
xorlw .3
btfss 3,2
goto si7b
movlw b'01010000'
movwf 0x06
call pul
si7b movf dig3,1
xorlw .2
btfss 3,2
goto si8b
movlw b'01001000'
movwf 0x06
call pul
si8b movf dig3,1
xorlw .1
btfss 3,2
goto si9b
movlw b'11110100'
movwf 0x06
call pul
si9b movf dig3,1
xorlw .0
btfss 3,2
call pul
movlw b'00000100'
movwf 0x06
pul call retardo
bcf 0x05,0 ;apaga transistor centenas
call retardo
return
;-------------------------------------------------------------------------
retardo movlw .25
movwf reg1
fro movlw .25
movwf reg2 ;retardo de displays
fre decfsz reg2,1
goto fre
decfsz reg1,1
goto fro
return
end
-
Esto lo pone en la pag. que te puse arriba, si es verdad no se pueden medir m/m o por lo menos no con precision, ya que de esto deduzco que el srf05 por debajo de 100us no da esa precision. Seguramente su circuiteria tambien necesita de un cierto tiempo para hacer los cambios de estado, sensado de señal, etc.
Si esa inestabilidad viene por esto no se si se podra hacer mucho....
La duración del pulso eco de salida varía entre 100μS y 25mS, en función de la distancia entre las cápsulas del módulo y el objeto. La velocidad del sonido es de 29.15 μS/cm que, como realiza un recorrido de ida y vuelta, queda establecida en 58.30μS/cm. Así pues el rango mínimo que se puede medir es de 1.7 cm (100μS/58) y el máximo de 431 cm (25mS/58).
De todos modos le echare un vistazo en el MPLAB, dame algo de tiempo que ando muy liado.
Saludos
-
Por otra parte, fijate lo que haces aqui, vas incrementando dig1 hasta que llega a 10, no? pero no estas haciendo eso, de hecho cuenta hasta 255, dig2 y dig3 nunca se mueven, ahi no llega el programa.
tre incf dig1,1
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,1
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,1
va btfsc 0x05,4 ;si pulso de eco no es bajo sigue incrementando
goto tre
para saber si un reg llega a 10 se hace asi:
tre
incf dig1,1
movlw .10
xorwf dig1,0 o tambien subwf dig1,0
btfss STATUS,Z ;STATUS,Z=3,2
goto no es 0
goto es 0
fijate que le llamo STATUS,Z Y NO 3,2 SON LO MISMO PERO ES MAS ENTENDIBLE.Para eso en el encabezado debes de poner esto:
; **** Encabezado ****
list p=16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
saludos
-
Saludos tapi8.Gracias por tomarte tantas molestias. De esta forma si cuenta (probando con con el sim84)(simulador viejito),tambien corren los displays
Tomate el tiempo que necesites,pero si no se puede sacar precision,habra que buscar otra forma de contar mm¿se te ocurre alguna otra forma?.El la red vi unos videos uno con lcd y otro con displays y tenian mucha precision ¿como lo haran? :att jose
tre incf dig1,0
movwf dig1
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,0
movwf dig2
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,1 ;este si se va hasta 255
va btfsc 0x05,4 ;si pulso de eco no es bajo sigue incrementando
goto tre
-
Primero vamos a poner bien el programa, o al menos intentarlo, y haber que hace, despues ya nos pondremos con el srf05.
Una pregunta, este es un trabajo urgente para la universidad, y solo quieres presentarlo aprobar y ya esta, o tienes tiempo y ganas para aprender y saber hacerlo :lol: :lol: lo digo porque empieza la epoca de los trabajos de la universidad y bueno...
Claro que se va a 255 porquq no le dices que pare en un numero determinado como en los otros, prueba este que te pongo corregido, porque lo vuelves a tener mal.
este es el tuyo:
tre incf dig1,0
movwf dig1
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,0
movwf dig2
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,1 ;este si se va hasta 255
Este deberia funcionar, no lo simule pero deberia ir:
tre incf dig1,1
movf dig1,0
xorlw .10
btfss 3,2
goto va
clrf dig1
incf dig2,1
movf dig2,0
xorlw .10
btfss 3,2
goto va
clrf dig2
incf dig3,1
movf dig3,0
xorlw .10
btfss 3,2
goto va
clrf dig3
Esta es una tabla para 7 segmentos, en el programa principal tienes que hacer "movf reg,0" a continuacion "call BCD7SEG" y te volvera al programa principal con el codigo para mostrar el numero.
Fijate "movf reg,0" esto es mover un reg a W y el valor queda en W, en esta instruccion igual que en "incf" y otras muchas ese "0" indica que el resultado se queda en W si pones un 1 el resultado se va al reg y la tabla te dara un resultado erroneo, incluso se desbordara, cuando haces "incf reg1,1" incrementas el valor del reg. y lo guardas en ese reg. porque si aqui le pones 0 el reg queda como estaba y no se incrementa. Te explico esto porque lo has vuelto a hacer mal. En tu tabla tambien lo haces mal.
movf dig3,1 ;tabla para centenas
xorlw .8
btfss 3,2
Aqui es movf dig3,0. Y es ",0" porque el valor del reg tiene que quedarse en W para despues hacer la "xor" con el 8 que le pones , y btfss 3,2=STATUS,Z este flag se pondra a 1 si el resultado es 0
BCD7SEG:
addwf PCL,1
retlw 0x3F
retlw 0x06
retlw 0x5B
retlw 0x4F
retlw 0x66
retlw 0x6D
retlw 0x7D
retlw 0x07
retlw 0xFF
retlw 0x6F
clrf contador
retlw 0x3F
Tambien se puede poner asi:
BCD7SEG ; para display catodo comun
addwf PCL,1 ; Se incrementa el contador del programa.-
DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
esto es un multiplexado de tres displays, gentileza de Suki
;**** Se multiplexan los Display ****
Actualizo_Display
movlw d'10' ; Cargo Contador = 10
movwf Contador ; Para repeticiones de visualizacion del mismo valor
; durante 150 ms.-
Refresco
movfw Unidad ; Obtengo codigo de 7 Segmentos para Unidad.-
call BCD7SEG ;
bcf PORTA,MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.-
movwf PORTB ; Cargo unidad en PORTB .-
bsf PORTA,MuestroU ; Enciendo Display de Unidad.-
call Demora_5ms
movfw Decena ; Obtengo codigo 7 Segmentos para Decena.-
call BCD7SEG
bcf PORTA,MuestroU ; Apago Display de Unidad.-
movwf PORTB ; Cargo PORTB con Decena.-
bsf PORTA,MuestroD ; Enciendo Display de Decena.-
call Demora_5ms
movfw Centena ; Obtengo codigo de 7 Segmentos para Centena.-
call BCD7SEG
bcf PORTA,MuestroD ; Apago Display de Decena.-
movwf PORTB ; Cargo PORTB con Centena.-
bsf PORTA,MuestroC ; Enciendo Display Centena.-
call Demora_5ms
decfsz Contador,1 ; Pregunto si ya se ha repetido 10 veces el ciclo?
goto Refresco ; No, repito.-
goto Bucle ; Si, actualizo cuenta.-
;**** Demora ****
Demora_5ms
movlw 0xFF ;
movwf Contador1 ; Iniciamos contador1.-
Repeticion1
movlw 0x05 ;
movwf Contador2 ; Iniciamos contador2
Repeticion2
decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.-
goto Repeticion2 ; Si no es 0 repetimos ciclo.-
decfsz Contador1,1 ; Decrementa Contador1.-
goto Repeticion1 ; Si no es cero repetimos ciclo.-
return ; Regresa de la subrutina.-
end
-
Saludos tapi8:Llevo muchos años en la eletronica como hobby,algunas veces le he sacado algun provecho.Esta vez se le ocurrio a un amigo(siempre son ellos los que siembran inquietudes),que trabaja con una maquina de cortar laminas de hierro,poder medir la distancia ha cortar en display(con un metro bastaria,pero hay que complicarse).No tiene que ser ya,es cuando puedas,pues me lo tome como hobby.Me pongo en la tarea que me has mandado y te contare como me va:att jose
-
Saludos tapi8:Ya lo hice como me dijiste,con esa tabla para display no pude,entonces puse la mia(mas larga).Pero sigo con el mismo problema.Le pongo algo para que rebote la señal,pasa de 39 a 40,lo alejo un poco mas 55,otro poco mas 43,otro poco mas lo que le da la gana.No puedo que aumente proporcional a la distancia:gracias por tu tiempo:att jose
-
Pon el programa otra vez y lo miramos, he estado mirando sensores ultrasonicos y no veo ninguno que de precision de milimetros, ni el srf08 ni el srf10 ni tampoco de otros modelos, esa parte esta dificil por lo que parece.
La tabla que te puse va perfecta, pero para catodo comun, y ahora mirando tu programa la tuya esta para anodo comun, creo que tienes el mismo conexionado, deberia ir bien haciendo "comf W,0" antes de hacer el "movwf 0x06" o hacerlo despues sobre el PORTB como pongo abajo, esto del comf se me ocurrio ahora y nunca lo probe pero creo que funciona, ya que al hacer el complemento conviertes el codigo del catodo comun a anodo comun, no olvides al llamar la tabla poner en W el valor del numero asi:
movf dig1,0 ; fijate que es ",0" si pones ",1" te pondra cualquier numero o se desbordara.
call BCD7SEG
movwf 0x06 ; aqui ya tienes el codigo a mostrar para catodo comun
comf 0x06,1 ; y aqui lo tienes para anodo comun que es el tuyo
En la tuya te da mal los valores porque vas haciendo comparaciones con los distintos numeros, pero no lo haces bien, por lo menos en la que has posteado aqui al principio, "movf dig1,1" aqui mueves el contenido de dig1 a W pero en vez de dejarlo en W para hacer la "xorlw .8" lo devuelves al registro por tanto en W hay cualquier valor, por eso te salen numeros de manera aleatoria y sin ningun sentido, si pones "movf dig1,0" es posible que te de numeros coherentes
Asi es como la tienes para todos los numeros en el primer post:
si1 movf dig1,1 ;tabla para unidades
xorlw .8
btfss 3,2 ; si aqui pones STATUS,Z, es mas facil de entender.
goto si2
movlw b'00000000'
movwf 0x06 ; y aqui PORTB
goto pil
Para poner STATUS,Z y PORTB debes poner el encabezado que te puse arriba
-
Saludos tapi8:Echale un vistazo en esta direccion.aat jose http://tech-freaks.net/?p=35
-
La pagina esa debe ser de alguien de este foro porque ademas hace referencia a dos paginas de amigos de esta foro, Redpic y Nocturno, dos paginas muy buenas ademas, pero no veo que midan m/m con el SRF. En cuanto al sistema del modulo CCP si se puede usar al igual que el TIMER pero no nos dara mas precision si el SRF05 no es capaz de darla
-
Saludos tapi8:En las fotos de la izquierda esta midiendo 0.16.7 cm.No las pude enviar por que ocupan mas de 500 Mb.Si no las puedes ver te las mando a tu correo.Se puede bajar el codigo esta en c (ni idea)y esta con lcd y lo necesito en display.att jose
-
No esta midiendo 0.16.7cm, esta midiendo 16.7cm el 0 de la izquierda es para cuando mide mas de 100cm, lo pone asi 016.7. Es una pena pero es asi. Las fotos las veo perfectas, gracias.
Tambien he mirado los modelos supreriores SRF08 y SRF10 dan mas alcance y otras cosas pero no mas precision, aunque es raro que no haya alguno que de mas precision.
saludos tapi
-
Saludos tapi8:Tienes razon puse un punto donde no era:Seria lo mismo 16.7 cm que 167 mm,por eso creo que esta midiendo mm.El asunto seria aprender c, o como pasarlo a asembler.att jose
-
No se consigue mayor precision en C que en asembler, al contrario el asembler seguramente sea mas preciso, el C tiene muchas ventajas pero en este caso no es esa la solucion, la solucion seria encontrar un sensor que sustituyera al SRF05 y diera precision de m/m, pero no lo veo facil.
-
Saludos tapi8:la instruccion xorwf,se queda en 000,con comf 6,1 prenden los numeros al reves,si el 1 es segmento b y c ,estos se apagan y prenden el resto,osea que la tabla esta bien.Sigo pensando que 016.7 cm es igual que 0167 mm,y ¿si esta echo porque no se puede volver a hacer en asembler?.Tranquilo que esto no me puede ganar.Cuando lo tenga solucionado te lo hare saber.att jose
-
Yo deduje de esto que lo tenias en anodo comun. Pones todos a 0 para el 8, es posible que el conexionado tuyo no este igual, y entonces no funcione, si quieres pon el programa y lo miramos.
si1 movf dig1,1 ;tabla para unidades
xorlw .8
btfss 3,2
goto si2
movlw b'00000000'
movwf 0x06
goto pil
En cuanto al SRF mide m/m pero no con precision inferior a 17m/m=1.7cm. Busque por google un par de veces y no encontre ninguno con precision de 1m/m, seguramente los haya pero yo no los encontre.
Se puede haccer en asembler, basic, c o en cualquier otro pero si el sensor da esa precision.
Saludos Tapi
-
Saludos tapi8:Si no se puede conseguir un sensor para milimetros¿se podria hacer que segun la distancia nos subiese el voltaje de cc y utilizar el conversor AD del 16f877?.Creo que seria otra manera.¿Que opinas?att jose
-
He vuelto a leer la hoja tecnica que te puse anteriormente y creo que no se puede, hay sensores de presion, temperatura, caudales etc, que dan unas tensiones proporcionales a la magnitud que estan midiendo, pero el SRF05 da un valor en tiempo, posiblemente ya sea el mismo el que haga esa conversion, y posiblemente por eso demora ese tiempo.
En la hoja tecnica que te puse dice que retarda un cierto tiempo (ese que nos esta jodiendo) para darles tiempo a los micricontroladores lentos, pero no creo que esto se pueda suprimir, no lo se.
Saludos .
-
http://www.tilab.tuwien.ac.at/pa/doku/PA-Datenblaetter/Sonar.pdf
Vuelvo otra vez con este tema, no se si ya lo solucionaste, esta semana he heco unas pruebas con una sonda de SIEMENS de la que te pongo arriba una hoja tecnica que encontre, mide mm con bastante precision, comprobado por mi con un metro, tambien lo pone en esa informacion.
Hay un par de problemas:
Precio, ronda segun me ha dicho la persona que ma la presto los 90€.
Esta preparada para trabajar con los automatas de SIEMENS trabaja a traves de las entradas analogicas de los S7-300 y 400 ( yo lo comprobe con un PLC 312 ), de estos ya no te digo los precios jeje. Es posible que se pueda adaptar para trabajarla con un PIC, debe de dar un nivel de tension dependiendo de la distancia, trabaja a 24V. No mide por debajo de 15cm.
Bueno ehale un ojo si quieres, y todavia estas interesado.
-
Gracias tapi8:El asunto lo deje,pues no pude hacer lo que queria.Cuando tenga tiempo libre y no tenga mas que hacer,volvere a intentarlo.Gracias de nuevo:att jose
-
Guardate la hoja tecnica que te envie, para cuando lo retomes, te aseguro que esta sonda si es fiable para m/m. Como todo lo que se usa en industria es caro, y mas si es de SIEMENS, el PLC que use para la prueba, y no es nada del otro mundo, pasa de los 2000€.