Autor Tema: Frecuencimetro con PIC16F84 (Ayuda)  (Leído 6583 veces)

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

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Frecuencimetro con PIC16F84 (Ayuda)
« en: 25 de Octubre de 2009, 16:00:34 »
Un saludo a todos, este es mi primer post aunque tengo tiempo visitando el foro.

Escribo porque necesito una ayuda para realizar un medidor de frecuencias.
Les indico cuales son las especificaciones:
1.- Debe medir desde 1Hz hasta 9999Hz
2.- Se debe mostrar en 4 displays.
3.- Hacer uso de prescaler con razon de 1:32.

Entonces la idea que tengo es meter la señal por el pin PORTA,4 (Donde se encuentra el TMR0) tomar un muestreo duranto 1/4 de seg (250ms), sacar los calculos respectivos
y transformar ese dato a numeros BCD para colocarlos en los 4 disp.

Entonces bueno, ya le he estado echando cabeza al asunto y me surgen varias dudas:
1) Si quiero hacer un muestreo de 1/4 de segundo como lo puedo lograr? 2) suponiendo que la frecuencia sea de 1000hz o mas como hago para mostrarlo? ya que una variable guarda hasta 255
entonces no una idea clara de como no perder mi valor de muestreo.


Espero que me ayuden un poco a resolver esto.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #1 en: 25 de Octubre de 2009, 17:14:21 »
Revisa por aquí, hay información para lograr lo que necesitas  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #2 en: 26 de Octubre de 2009, 20:01:49 »
Gracias Suky me ha servido de ayuda, voy a usar algunas cosas de ahi y cualquier duda posteo a ver   :-/

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #3 en: 26 de Octubre de 2009, 20:46:18 »
Hola, tengo una pregunta. He querido hacer lo del muestreo de la señal a través del Prescaler. Y bueno lo que tengo pensado es hacer un retardo de unos 25 ms y contar el numero de trancisiones en RA4/T0CKl. Usando un prescaler de 1:32, pero mi problema es por ejemplo si ocrruen unas 550 transiciones con prescaler de 32 habrian unos 17 cambios (17*32=544) y me quedaria faltantes otros 6 cambios para llegar a 550.

Entonces mi duda es, en donde se queda guardado ese numero "17" y ese numero "6"?  :shock: Ya que lo necesito para calcular la frecuencia.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #4 en: 26 de Octubre de 2009, 23:24:16 »
Hola, tengo una pregunta. He querido hacer lo del muestreo de la señal a través del Prescaler. Y bueno lo que tengo pensado es hacer un retardo de unos 25 ms y contar el numero de trancisiones en RA4/T0CKl. Usando un prescaler de 1:32, pero mi problema es por ejemplo si ocrruen unas 550 transiciones con prescaler de 32 habrian unos 17 cambios (17*32=544) y me quedaria faltantes otros 6 cambios para llegar a 550.

Entonces mi duda es, en donde se queda guardado ese numero "17" y ese numero "6"?  :shock: Ya que lo necesito para calcular la frecuencia.

La cuenta de los preescaler no es accesible por software, para tener mayor resolución tienes que disminuir el prescaler, lo mejor seria 1:1  :mrgreen:


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #5 en: 27 de Octubre de 2009, 11:30:55 »
El problema es que me mandaron con prescaler 1:32. Pero cada vez que ocurren 32 transiciones ocurre una interrupcion ¿cierto? de ser asi podria hacer una rutina para incrementar un contador cada vez que esto suceda, y luego añadirle lo que quede en el TMR0. ¿Es posible esto?

Gracias por tus respuestas  :mrgreen:

Desconectado KonKong

  • PIC10
  • *
  • Mensajes: 8
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #6 en: 03 de Noviembre de 2009, 15:38:53 »
Bueno sigo con el proyecto!! Y me dijeron que es permitible que el medidor de frecuencia tenga cierto margen de error, que en mi caso es de hasta 128Hz. Entonces lo que estoy haciendo es: contar el numero de pulsos por RA4 con un tiempo de 250ms y prescaler 1:32. Entonces para calcular la frecuencia sera multiplicar el valor de TMR0 x 4 x 32. Con una frecuencia maxima de 9.999 HZ el timer llegara hasta 77.

El problema aqui es que tengo que mostrar la frecuencia en 4 displays, osa que tengo que tener variables de unidades, decenas, centenas y uni. de mil. El problemas es al multiplicar el TMR0 (suponiendo que sea 77) por 4 x 32 (128) el resultado no me cabe en una variable cuyo maximo es de 255. Necesito consejos como hacer para poder hacerlo.

NOTA: Un dato que me dieron, para multiplicar solo basta con rotar a la izquierda. Por ejemplo: si uno quiere multiplicar por 2 se rota una vez a la izq, por 4 se rota 2 veces y asi.

Espero la ayuda de uds  :-/
Abajo adjunto lo que estoy haciendo.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #7 en: 03 de Noviembre de 2009, 15:50:32 »
Bueno si te dijeron que hay que hacerlo con preescaler en 32 hay que hacerlo así, pero yo en un frecuencimetro empece a aplicar escaler para frecuencias mayores a 5MHz para disminuir el error  :?

Ahora para manejar las variables y luego mandar al display (Separan en BCD) revisa por aquí hay varias rutinas que pueden ayudarte:


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado nico

  • PIC16
  • ***
  • Mensajes: 180
Re: Frecuencimetro con PIC16F84 (Ayuda)
« Respuesta #8 en: 03 de Noviembre de 2009, 17:37:06 »
El tmr0 es un contador de 8 bits con un preescaler de tambien 8 bits pero el mismo no se puede leer por software. Sin embargo
hay una manera de leer la cuenta del preescaler, en la AN592 de microchip te muestra como se hace. Basicamente debes usar un puerto mas del micro conectado al pin rA4(supongamos el rA2) que, al inicio lo configuras como entrada mientras dure el ingreso de la señal (durante el delay que has puesto) al porta4, luego, una vez que finalize el tiempo rescatas el valor que tiene el tmr0 y configuras como salida el rA2. Entonces una vez ahi empiezas a dar transiciones en este pin y por cada transicion lees el tmr0 y te fijas si cambio, si no cambio incrementas un contador y vuelves a hacer una transicion y sigues incrementando el contador hasta que el tmr0 se incremente. Una vez esto el preescaler tendra 32 - contador y asi tendras el valor del preescaler.

No se si se entiende, este es el extracto de la AN:


The precise “gate” is implemented in software as an
accurate delay. At the end of the delay, the RA2 pin is
configured as an output going low. This will cause the
input to TMR0 to be “halted” or “stopped”. A 16-bit
value of the input frequency is now saved in TMR0 and
the 8-bit prescaler. The high 8 bits are in TMR0 and can
be easily read. The low 8 bits have to be "shifted out".
The 8 bits in the prescaler are “shifted out” by toggling
RA2 with a “BSF” and a “BCF” instruction. After every
toggle, the value in TMR0 is checked to see if TMR0
has incremented. If the number of toggles required to
cause TMR0 to increment by 1 is N, then the 8-bit value
in the prescaler can be calculated to be = (256 - N). By
concatenating the calculated value and the original
value from TMR0, the 16-bit value for the frequency is
determined.


Hice hace un tiempo un frecuencimetro hasta 50 MHZ(con gate de 1 segundo la resolucion es de +-1hz) listo para extender a 500 mHz con un preescaler utilizando este metodo en asm y funciono de maravilla.

Saludos.
Nico.

P.D. lo tenia listo para publicar pero justito se callo el foro por el cambio de host. Perdon por la demora


 

anything