TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jo.an. en 05 de Mayo de 2010, 17:39:26

Título: srf05
Publicado 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
Título: Re: srf05
Publicado por: Javicho en 19 de Mayo de 2010, 05:49:37
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.
Título: Re: srf05
Publicado por: jo.an. en 19 de Mayo de 2010, 18:18:00
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
Título: Re: srf05
Publicado por: Javicho en 20 de Mayo de 2010, 01:37:37
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.
Título: Re: srf05
Publicado por: tapi8 en 21 de Mayo de 2010, 15:43:31
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

Título: Re: srf05
Publicado por: jo.an. en 21 de Mayo de 2010, 22:21:53
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
Título: Re: srf05
Publicado por: jo.an. en 21 de Mayo de 2010, 22:28:55
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
Título: Re: srf05
Publicado por: tapi8 en 22 de Mayo de 2010, 13:36:01
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
Título: Re: srf05
Publicado por: tapi8 en 22 de Mayo de 2010, 14:24:44
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




Título: Re: srf05
Publicado por: jo.an. en 22 de Mayo de 2010, 21:47:31
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
 
Título: Re: srf05
Publicado por: tapi8 en 23 de Mayo de 2010, 06:42:34
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





Título: Re: srf05
Publicado por: jo.an. en 24 de Mayo de 2010, 00:28:54
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
Título: Re: srf05
Publicado por: jo.an. en 30 de Mayo de 2010, 18:59:17
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
Título: Re: srf05
Publicado por: tapi8 en 01 de Junio de 2010, 15:25:01
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
Título: Re: srf05
Publicado por: jo.an. en 04 de Junio de 2010, 01:52:08
Saludos tapi8:Echale un vistazo en esta direccion.aat jose   http://tech-freaks.net/?p=35
Título: Re: srf05
Publicado por: tapi8 en 05 de Junio de 2010, 07:55:30
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
Título: Re: srf05
Publicado por: jo.an. en 05 de Junio de 2010, 21:27:46
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
Título: Re: srf05
Publicado por: tapi8 en 06 de Junio de 2010, 05:34:20
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
Título: Re: srf05
Publicado por: jo.an. en 07 de Junio de 2010, 00:16:48
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
Título: Re: srf05
Publicado por: tapi8 en 07 de Junio de 2010, 12:08:16
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.

Título: Re: srf05
Publicado por: jo.an. en 08 de Junio de 2010, 01:27:45
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
Título: Re: srf05
Publicado por: tapi8 en 08 de Junio de 2010, 13:45:41
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
Título: Re: srf05
Publicado por: jo.an. en 11 de Junio de 2010, 18:53:02
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
Título: Re: srf05
Publicado por: tapi8 en 14 de Junio de 2010, 13:55:23
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 .
Título: Re: srf05
Publicado por: tapi8 en 09 de Septiembre de 2010, 15:36:43
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.
Título: Re: srf05
Publicado por: jo.an. en 11 de Septiembre de 2010, 20:30:08
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
Título: Re: srf05
Publicado por: tapi8 en 14 de Septiembre de 2010, 13:04:49
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€.