Contador de frecuencia usando un PIC16F648A

0

Me pregunto si alguien podría ayudarme con algunas sugerencias generales sobre un proyecto de contador de frecuencia.

Estoy tratando de modificar un contador de frecuencia LED de 6 dígitos que utiliza un PIC16F648A integral, un oscilador de 13 Mhz y una pantalla digital acoplada I2C. Este diseño cableado utiliza TMR0. He podido reprogramarlo usando un software modificado que fue escrito para 6 LED discretos que funcionan a 4 o 20 Mhz. He ajustado el código aquí y allá, pero no puedo obtener el tipo de consistencia que necesito: 100 hz, o menos. El problema aparente es el oscilador de 13 MHz.

He buscado en Google la web y he encontrado que 13 Mhz es una frecuencia de cristal muy extraña para un contador. ¿Alguna idea sobre cómo se puede haber utilizado en este diseño?

Me gustaría que funcionara hasta 60 Mhz ya que este es el límite superior de la unidad cuando estaba equipada con su código original (no tiene una copia). No se requiere rango automático.

Cualquier y todas las sugerencias serían las más apreciadas.

    
pregunta Joe Burch

2 respuestas

6

Esta es una precisión / precisión bastante difícil de alcanzar.

En primer lugar, según la hoja de datos, no puede tener un período en ese pin de menos de 20 ns, por lo que es una frecuencia máxima de 50 MHz. Esto es de la tabla 17-8 de la hoja de datos. Entonces, 60 MHz está fuera.

Pero lo que es más importante, está intentando obtener una precisión de tiempo de 100 Hz / 60 MHz, esto es una precisión de 1.7 ppm. O si solo quieres consistencia, es de 1.7 ppm de estabilidad de frecuencia. La mayoría de los cristales tienen una estabilidad de al menos +/- 20 ppm. Lo más pequeño que pude encontrar de inmediato fue un +/- 9. Así que es un control de tiempo ajustado.

Sin embargo, digamos que puedes obtener un cristal y 50 MHz es lo suficientemente bueno. Aquí hay un dibujo de ruta de reloj rápido basado en la hoja de datos Figura 6-1 que muestra cómo configurar el temporizador

Lea6.2.1paraverloslímitesquedebecumplir.Enresumen,simplementedicequedebetenerenelbloquequediga"SYNC 2 ciclos" un tiempo alto de al menos 2 * Tosc + 20ns, y un tiempo bajo de los mismos. Para un reloj de 13 MHz, esto da una frecuencia máxima de aproximadamente 350 kHz. Tenga en cuenta que esto es después del prescaler, por lo que el límite real es cuando utiliza la configuración de prescaler max: 256 * 350 kHz = 89 MHz. Esto es fácilmente por encima del límite de 50 MHz por el pin para que estés bien.

La precisión requerida (dentro de 100 Hz a 50 MHz) sugiere poder diferenciar las diferencias de período de $$ \ frac {1} {50MHz} - \ frac {1} {50MHz + 100 Hz} = 40 femtosegundos! $$

La forma de poder obtener esta diferenciación tan pequeña es medir cuánto tiempo lleva una gran cantidad de conteos. Tal vez esto sea una exageración, pero si esto es todo lo que hace el procesador, me gustaría que 10 como nosotros nos aseguráramos de tener suficiente tiempo para muestrear los datos. Esto permite algún error por el tiempo que toma el código. Podría hacerlo en menos, pero tendría que ser más cuidadoso con el tiempo (cuente los ciclos de instrucción, etc.). Si hiciera unos 0.5 billones de cuentas, entonces un retraso de 10 us solo daría un error de 50 Hz. Esto significa que tendrías que muestrear durante 10 segundos nominalmente. Cuanto más estricto sea el tiempo de su código, más fácilmente podrá reducir el tiempo de muestreo.

    
respondido por el caveman
0

Acabo de cambiar el cristal. 20 MHz en HC49 se puede salvar desde cualquier placa Ethernet antigua. De todos modos, es lo más rápido que puede llegar y puede usar el código que tiene para esta frecuencia.

    
respondido por el Oleg Mazurov

Lea otras preguntas en las etiquetas