• Viernes 19 de Abril de 2024, 07:49

Autor Tema:  Realizacion De Un Frecuencimetro  (Leído 9577 veces)

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Realizacion De Un Frecuencimetro
« en: Viernes 16 de Abril de 2004, 18:54 »
0
Hola a todos necesito una pequeña ayuda sobre un trabajo que estoy realizando en un pic 16f84,estoy haciendo un frecuencimetro siendo el rango a medir de 0 a 255 Hz. que tiene que primero contrar un segundo eventos externos por la patilla RA0 y almacenar una vez ranscurrido ese segundo el valor en binario en el TMR0que es el valor de la frecuencia.
Una vez tenemos ese numero tenemos que mostrarlo en un displayde forma que cuando se produce un nivel alto en RA0 se muestren las centenas , en RA1 las decenas y en RA2 las unidades.El valor fijo se  mantiene hasta que se produce un.
valor alto en RA3 momento en que tengo que borrar el display y se prduce una nueva medida.Eso es lo que hace el trabajo y tengo todo hecho menos la conversión de binario a numeros digitales que no se como realiza por eso agradeceria cualquier ayuda.
Gracias.

lmarte

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #1 en: Sábado 17 de Abril de 2004, 01:08 »
0
No tengo un código, pero la idea seria algo asi:
Utilizas tres registros, centenas, decenas y unidades (tu solo llegas hasta 255).
- restas tu numero (en binario) con 100 (en binario), si el resultado es negativo entonces cargas centenas con cero y pasas a analizar las decenas.
- si es positivo el resultado lo cargas en tu número e incrementas centenas en 1, asi hasta que la resta te dé negativo. Centenas podrá cargarse máx con 2(0010).
- Cuando llegues a las decenas haces lo mismo pero esta vez restas con 10. Decenas se te podrá cargar máximo con 9 (1001).
- Luego unidades, mismo procedimiento.

Cuando tengas las tres variables las puedes enviar convirtiendolas en ASCII sumandole 30H (!creo¡ revisa este valor). :comp:

Espero haber sido claro y ayudarte.

Por cierto revisa bien la instrucción subwf y sublw haciendo un programita y lo simulas que te reste dos datos y revisas el carry, creo q algo aparece mal en el datasheet.
Cuentas como te va

Un saludo
Si no se intenta, ... no se hace

Setha

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #2 en: Sábado 17 de Abril de 2004, 08:24 »
0
Tengo un libro con un programa muy parecido. Te lo paso.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #3 en: Sábado 17 de Abril de 2004, 18:29 »
0
Gracias por vuestras respuestas, lo probare y ya os contare, aunque tardaré un poco porque estoy liado con otro proyecto.
Vuestra pagina es muy buena y espero ayudar yo tambien a los demas en lo que pueda.

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #4 en: Martes 20 de Abril de 2004, 03:06 »
0
Imarte todavia no he probado el codigo pero he podido hacer esa parte y quiero darte las gracias porque esa era la ayuda que me faltaba.
Gracias y ya pondre el programa entero cuando lo complete.
Un saludo

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #5 en: Viernes 21 de Mayo de 2004, 12:24 »
0
Imarte he escrito el codigo pero no me funciona, teoricamente el codigo esta bien , pero en la practica cuando lo simulo no me va.
A ver si puedes echarle un vistazo y decirme si hay algun fallo.
Aqui te envio el codigo.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

rastrojero

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
    • http://no tengo
Re: Realizacion De Un Frecuencimetro
« Respuesta #6 en: Viernes 28 de Mayo de 2004, 04:03 »
0
Hola esta  buscando otra cosa y no entiendo eso del display. que tipo de display pensas usar? por favor si todavia estas avisame.
Una vez hice algo parecido es un dispenser donde tenia anidado 5 digitos y usaba un display de dos LINEAS (alfa numerico)
Bue! por favor si la siguen.

Desde argentina, un gran saludo diesel! :o

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #7 en: Sábado 29 de Mayo de 2004, 17:53 »
0
Es un display de 7 segmentos, de los normales.

J1M

  • Miembro activo
  • **
  • Mensajes: 58
    • Ver Perfil
    • http://www.hobbypic.com
Re: Realizacion De Un Frecuencimetro
« Respuesta #8 en: Sábado 5 de Junio de 2004, 13:29 »
0
jr. eres de la politécnica de cartagena?? pq la practica final es la misma. te dejo aki la mia, sirvió para un 10 asiq estará bien :P

te adjunto tb el .asm que he visto que esto sale deformado, para q lo abras con el mplab

Salu2!

Código: Text
  1.  
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4. ;;;;;                                            &#59;;;;;
  5. ;;;;;                    FRECUENCÍMETRO                  &#59;;;;;
  6. ;;;;;                       POR                    &#59;;;;;
  7. ;;;;;                JAIME FERNÁNDEZ-CARO BELMONTE              &#59;;;;;
  8. ;;;;;                                            &#59;;;;;
  9. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. ;;;;;;;;;                                        &#59;;;;;;;;;
  12. ;;;;;;;;;  Realizado con MPLAB IDE 6.32                        &#59;;;;;;;;;
  13. ;;;;;;;;;  Simulado con Proteus Pro 6.2 SP5                      &#59;;;;;;;;;
  14. ;;;;;;;;;  Montaje en MicroPicTrainer 1.1                        &#59;;;;;;;;;
  15. ;;;;;;;;;                                        &#59;;;;;;;;;
  16. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  17. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  18.  
  19.         LIST P=16F84    &#59;Tipo de PIC usado
  20.  
  21.     ORG    00      &#59;Directiva inicio de programa en la posición 00
  22.  
  23. INICIO  BSF     0x03,5    &#59;Ponemos a '1' el bit 5(6ª posición) del registro de Estado
  24.         CLRF    0x06    &#59;Ahora estamos en el banco 1, ponemos a '0'(Salida) TrisB
  25.         MOVLW   0xFF    &#59;Copiamos el literal 'FF'H a W, todo 1 (Entrada)
  26.         MOVWF   0x05    &#59;Copiamos de W al registro TrisA, quedando como entrada
  27.     MOVLW   B'11101000'  &#59;Copiamos el literal de configuración del registro Option a W
  28.     MOVWF   0x01    &#59;Copiamos el contenido de W a Option
  29.         BCF     0x03,5    &#59;Ponemos a '0' el bit 5 del registro de Estado,estamos en el Banco 0
  30.     CLRF  0x06    &#59;Borramos el contenido del registro PortB
  31.     CLRF  0x01    &#59;Borramos el contenido del registro TMR0
  32.  
  33. ;Retrasamos acontinuación la ejecución
  34. ;del programa durante 1 segundo
  35.  
  36.     MOVLW  D'40'    &#59;Copiamos el literal (decimal) a W
  37.         MOVWF   0x0C    &#59;Copiamos el contenido de W a la 1ª posición de memoria libre
  38. LOOP1  MOVLW  D'80'    &#59;Copiamos el literal (decimal) a W
  39.         MOVWF   0x0D    &#59;Copiamos el contenido de W a la 2ª posición de memoria libre
  40. LOOP2  MOVLW  D'103'    &#59;Copiamos el literal (decimal) a W
  41.         MOVWF   0x0E    &#59;Copiamos el contenido de W a la 3ª posición de memoria libre
  42. LOOP3  DECFSZ  0x0E,1    &#59;Decrementamos 0x0E,y se almacena en 0x0E,si es 0 brincamos
  43.         GOTO    LOOP3    &#59;Como no es 0,hacemos un salto incondicional a LOOP3
  44.         DECFSZ  0x0D,1    &#59;Decrementamos 0x0D,y se almacena en 0x0D,si es 0 brincamos
  45.         GOTO    LOOP2    &#59;Como no es 0,hacemos un salto incondicional a LOOP2
  46.         DECFSZ  0x0C,1    &#59;Decrementamos 0x0C,y se almacena en 0x0C,si es 0 brincamos
  47.         GOTO    LOOP1    &#59;Como no es 0,hacemos un salto incondicional a LOOP1
  48.  
  49. ;Movemos el valor del registro TMR0 a una variable
  50. ;para poder operar con él
  51.  
  52.     MOVF    0x01,0    &#59;Copiamos el contenido del registro TMR0 en W
  53.         MOVWF   0x0C    &#59;Movemos el valor de W a la posicion 0x0C
  54.  
  55. ;Descomposición de un número en centenas,decenas y unidades
  56. ;Explicación del algoritmo en la memoria de la practica
  57.  
  58. CENTEN  MOVLW  D'100'    &#59;Movemos el literal (decimal) a W
  59.     SUBWF  0x0C,0    &#59;Restamos W a 0x0C y guardamos el resultado en W
  60.     BTFSS  0x03,0    &#59;Miramos el bit 0 del registro de Estado, si es 1 brincamos
  61.     GOTO  DECEN    &#59;Salto incondicional a DECEN, ya que hay acarreo
  62.     MOVWF  0x0C    &#59;Guardamos el resto para seguir restando
  63.     INCF  0x0E,1    &#59;Incrementamos la variable 0x0E,y guardamos el resultado en ella
  64.     GOTO  CENTEN    &#59;Salto incondicional a CENTEN
  65.  
  66. DECEN  MOVLW  D'10'    &#59;Movemos el literal (decimal) a W
  67.     SUBWF  0x0C,0    &#59;Restamos W a 0x0C y guardamos el resultado en W
  68.     BTFSS  0x03,0    &#59;Miramos el bit 0 del registro de Estado, si es 1 brincamos
  69.     GOTO  WAIT    &#59;Salto incondicional a WAIT, ya que hay acarreo
  70.     MOVWF  0x0C    &#59;Guardamos el resto para seguir restando
  71.     INCF  0x0D,1    &#59;Incrementamos la variable 0x0D,y guardamos el resultado en ella
  72.     GOTO  DECEN    &#59;Salto incondicional a DECEN
  73.  
  74. ;Esperamos a que se active cualquiera
  75. ;de los pulsadores
  76.  
  77. WAIT  BTFSC  0x05,0    &#59;Miramos el bit 0 del registro PortA, y si (RA0) es 0 brinca
  78.     CALL  MUE_CEN    &#59;Llamada a Subrutina MUE_CEN ya que RA0 es 1
  79.     BTFSC  0x05,1    &#59;Miramos el bit 1 del registro PortA, y si (RA1) es 0 brinca
  80.     CALL  MUE_DEC    &#59;Llamada a Subrutina MUE_DEC ya que RA1 es 1
  81.     BTFSC  0x05,2    &#59;Miramos el bit 2 del registro PortA, y si (RA2) es 0 brinca
  82.     CALL  MUE_UNI    &#59;Llamada a Subrutina MUE_UNI ya que RA2 es 1
  83.     BTFSC  0x05,3    &#59;Miramos el bit 3 del registro PortA, y si (RA3) es 0 brinca
  84.     GOTO  INICIO    &#59;Salto incondicional a INICIO ya que RA3 es 1
  85.     GOTO  WAIT    &#59;Salto incondicional a WAIT ya que RA3 es 0
  86.    
  87. ;Rutina encargada de mostrar en el display
  88. ;centenas,decenas ó unidades
  89.  
  90. MUE_CEN  MOVF  0x0E,0    &#59;Copio el valor de la posicion de memoria 0x0E en W
  91.     CALL  MUESTRA    &#59;Llamo a la subrutina MUESTRA
  92.     RETURN        &#59;Retorno a WAIT desde esta subrutina
  93.  
  94. MUE_DEC  MOVF  0x0D,0    &#59;Copio el valor de la posicion de memoria 0x0D en W
  95.     CALL  MUESTRA    &#59;Llamo a la subrutina MUESTRA
  96.     RETURN        &#59;Retorno a WAIT desde esta subrutina
  97.  
  98. MUE_UNI  MOVF  0x0C,0    &#59;Copio el valor de la posicion de memoria 0x0C en W
  99.     CALL  MUESTRA    &#59;Llamo a la subrutina MUESTRA
  100.     RETURN        &#59;Retorno a WAIT desde esta subrutina
  101.  
  102. MUESTRA CALL  N_7SEG    &#59;Llamo a la subrutina N_7SEG
  103.     MOVWF  0x06    &#59;Copio el contenido de W en PortB
  104.     RETURN        &#59;Retorno desde subrutina
  105.  
  106. ;Rutina encargada de dar
  107. ;el equivalente en 7 segmentos de un numero
  108.  
  109. N_7SEG  ADDWF  0x02,1    &#59;Sumo el valor de W con el del PCL,y lo almaceno en PCL
  110.     RETLW  B'00111111'  &#59;Retorno desde subrutina y W=Valor del 0 en 7 segmentos
  111.     RETLW  B'00000110'  &#59;Retorno desde subrutina y W=Valor del 1 en 7 segmentos
  112.     RETLW  B'01011011'  &#59;Retorno desde subrutina y W=Valor del 2 en 7 segmentos
  113.     RETLW  B'01001111'  &#59;Retorno desde subrutina y W=Valor del 3 en 7 segmentos
  114.     RETLW  B'01100110'  &#59;Retorno desde subrutina y W=Valor del 4 en 7 segmentos
  115.     RETLW  B'01101101'  &#59;Retorno desde subrutina y W=Valor del 5 en 7 segmentos
  116.     RETLW  B'01111101'  &#59;Retorno desde subrutina y W=Valor del 6 en 7 segmentos
  117.     RETLW  B'00000111'  &#59;Retorno desde subrutina y W=Valor del 7 en 7 segmentos
  118.     RETLW  B'01111111'  &#59;Retorno desde subrutina y W=Valor del 8 en 7 segmentos
  119.     RETLW  B'01100111'  &#59;Retorno desde subrutina y W=Valor del 9 en 7 segmentos
  120.  
  121.         END          &#59;Directiva fin de programa
  122.  
  123. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  124. ;;            &#59;;
  125. ;;  Total: 68 Instrucciones&#59;;
  126. ;;            &#59;;
  127. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  128.  
  129.  
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
..]Hobby[/color]PIC ]
Si puede pensarse, puede hacerse...

jr.

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Realizacion De Un Frecuencimetro
« Respuesta #9 en: Domingo 6 de Junio de 2004, 01:10 »
0
Si, lo soy.Gracias por mandarme tu práctica,le echare un vistazo, pero la verdad es que solo tengo la complicacion en el convertido porque por lo demas está bien.
No me ocupe 68 lineas pero por hay andará(unas 75 mas o menos).
Me está dando un  follon la práctica esta que estoy desesperado, haber si me la quito de enmedio y acabo.
Lo dicho gracias por dejarmela.