Problema con el Timer 0

2018-05-22 00.25.17.jpgHola!

estoy con un sencillo diseño PIC para obtener un impulso por minuto. He probado con cristal de cuarzo de 3,2768 MHz, tengo tres unidades, y también con cristales de 32.768 Hz que he sacado de relojes 'de cocina'. He probado dos modos de dividir, con interrupción y por desbordamiento de TMR0.

Lo que yo pensaba que iba a ser un reloj más o menos preciso, resulta que, en todos los casos, me adelanta como un segundo en 24H. Por mucho que he revisado y simulado el programa -bastante trivial- no observo ningún fallo.

Resuelvo el asunto con unas correcciones, unos decimales digamos por ahí metidos, pero no es lo que me hubiera gustado.

Tengo otro, con cristal de 1MHz y contadores TTL que va perfecto desde hace más de 30 años.

Saludos
G.

P.S. Si alguien quiere ver el código, se lo puedo enviar aparte.

2018-05-24 12.08.29.jpg
 
Indícanos qué PIC y qué factores de división utilizas con cada uno de los cristales. Mejor dicho: por cada cristal, indícanos los parámetros y modos de funcionamiento para el Timer0.
 
He probado con cristal de cuarzo de 3,2768 MHz, tengo tres unidades, y también con cristales de 32.768 Hz que he sacado de relojes 'de cocina'. He probado dos modos de dividir, con interrupción y por desbordamiento de TMR0.
Los PIC que tienen Timer1 cuentan con un oscilador en los pines (T1OSI y T1OSO) en el que puedes usar el cristal de 32768 Hz para obtener 1 Hz.
Así que contando 60 desbordes ya tienes el minuto.
 
Bueno, te cuento lo que hago, uso un PIC 16F84A que sólamente tiene TRM0. El cristal va en sus patillas y con los condensadores que toca.

Con 32768

Cristal 32768 Hz
Frec interna 8192 Hz
preescalador x2 4192 Hz
divisor TRM0 1/256 16 Hz

cuento 16 desbordes o 16 interrupciones para sumar un segundo y 60 segundos para el minuto.


Con 3.276.800

Cristal 3.276.800 Hz
Frec interna 819200 Hz
preescalador x16 51.200 Hz
divisor TRM0 1/256 200 Hz
cuento 200 ciclos o interrupciones


SIN EMBARGO el reloj adelanta 1 seg en 24 H aproximadamente en ambos casos. No he medido con precisión ni tengo contador de frecuencia a mano, así que me tiene intrigado que cristales tan distintos me den, más o menos, el mismo adelanto.

G.
 
...SIN EMBARGO el reloj adelanta 1 seg en 24 H aproximadamente en ambos casos. No he medido con precisión ni tengo contador de frecuencia a mano, así que me tiene intrigado que cristales tan distintos me den, más o menos, el mismo adelanto.

No tiene nada de raro.

Una cosa son los valores de capacidad recomendada en los condensadores del cristal para un arranque y oscilación estables y otra para el ajuste fino de frecuencia. Si tus condensadores no son los mismos y las capacidades parásitas de la entrada las mismas que tenía el reloj vas a tener un ligero corrimiento en la frecuencia. En tu caso de 1/86400 ( ~ 0.01%)


Los primeros relojes digitales traían un mini-mini-trimmer para el ajuste en fábrica de frecuencia. Después se pasó por una inundación de relojes chinos con condensador fijos y la precisión era cuestión de suerte. Finalmente el proceso de fabricación se mejoró lo suficiente para que con condensadores fijos salieran de fábrica con la exactitud necesaria.
 
OK, ahora uso dos de 27 pF que recomienda el fabricante. Pero me parece buena idea probar con diferentes capacidades y tomar medidas. También probaré el modo HS. Si distintos condensadores dan distintas frecuencias también puedo hacer el ajuste por software.

Gracias por la sugerencia!
Gaspar

1531163028528.png
1531163109469.png
 
Última edición:
Hola a todos , voi poner aca mi cuchara mismo ese tema no sener mi playa (tecnicas digitales).
En realidad NO se lo porque , pero se que relogios basados en PICs o Microprocesadores NO tienem buena precisión en la dibisión de la frequenzia mismo esa sendo generada por un bueno oscilador pilotado por cristal piezoelectrico.
Ya con uso de los viejos dibisores tecnologia TLL o mismo CMOS ese problema ya NO existe.
Att,
Daniel Lopes.
 
Puede que tengas razón. A mí me hace falta un medidor de frecuencias preciso para ajustar la frecuencia. Incluso en los osciladores TTL y CMOS existen esos condensadores, que modifican ligeramente la frecuencia del cristal. Tampoco tengo mucha información de los cristales que compré, no se si son serie o paralelo ni marca ni modelo …

En teoría estos cristales son de 30 ppm y mi error, como ha señalado Eduardo, está en 1/86400 que viene a ser 11 ppm.

Por lo tanto creo que la mejor solución es la corrección por programa. Pienso en unos DIP que se leen al principio del programa o bien van modificando unos números mágicos en la memoria EEPROM.

G.
Mensaje automáticamente combinado:

No tiene nada de raro.

Una cosa son los valores de capacidad recomendada en los condensadores del cristal para un arranque y oscilación estables y otra para el ajuste fino de frecuencia. Si tus condensadores no son los mismos y las capacidades parásitas de la entrada las mismas que tenía el reloj vas a tener un ligero corrimiento en la frecuencia. En tu caso de 1/86400 ( ~ 0.01%)

Te corrijo la cifra, 1/86400 = 0,00001157 (11,5 ppm)
Mensaje automáticamente combinado:

Indícanos qué PIC y qué factores de división utilizas con cada uno de los cristales. Mejor dicho: por cada cristal, indícanos los parámetros y modos de funcionamiento para el Timer0.

PIC 16F84A
Con 3,2768 MHz modo XT y 27 pF
Con 32.768 Hz modo LP y 27 pF
 
Última edición:
Hola, cómo comentan los compañeros. Aunque se trate de cristal de cuarzo el oscilador, la fcia. NO es exacta.
Una vez armé un reloj calendario, y luego de hacer ajustes por software (modificando el valor de cuenta para el desborde de un TMR)
Logré reducir el error con un retraso de un seg. en dos semanas. Así que, la solución simple es compensar ese error cada dos semanas, y listo.
 
Todo bien pero el fabricante expresa claramente que para 32000Hz o 32KHz el rango de capacidad va desde 68pF a 100pF no 27pF.

Puede ser esa la causa que el reloj te adelantara ya que al disminuir la carga aumenta la frecuencia.

Saludos.

Ric.
cri.JPG
 
....En teoría estos cristales son de 30 ppm y mi error, como ha señalado Eduardo, está en 1/86400 que viene a ser 11 ppm.
Tenés razón, son 11ppm. Malditas teclas y malditos dedos.

Por lo tanto creo que la mejor solución es la corrección por programa. Pienso en unos DIP que se leen al principio del programa o bien van modificando unos números mágicos en la memoria EEPROM.
Con dips no, el ajuste sería demasiado grueso --> Tiene que ser una rutina que incremente/decremente un registro de mas de 8 bits.

Pensá que si querés corregir 1"/dia , con cristal de 3.2768MHz generando 200 interrupciones/seg significa que cada 86400/200= 432 interrupciones hay que saltar un incremento.


Bien calibrado "deberías" quedar en menos de 10"/mes. Al menos en eso me quedó un reloj digital de pared que allá lejos y hace tiempo tuneé paralelizando capacitores :)
 
Mi idea es un DIP pero ponderado en 1, 1/2, 1/4, 1/8 e ir ajustando. Luego puedo fijarlo en el código y afinar más.
G.
Mensaje automáticamente combinado:

Todo bien pero el fabricante expresa claramente que para 32000Hz o 32KHz el rango de capacidad va desde 68pF a 100pF no 27pF.

Puede ser esa la causa que el reloj te adelantara ya que al disminuir la carga aumenta la frecuencia.

Saludos.

Ric.
Ver el archivo adjunto 168641
Sí, voy a experimentar. No queda otra si no dispongo de medidor de frecuencias.
G.
 
Buenas, estoy experimentando, no queda otra opción cuando no dispones de mejores instrumentos de medida que un reloj sincronizado con DCF77 y el paso del tiempo.

El modelo 32.768 Hz LP lo he probado con 100 pF y ahora con 68 pF y en ambos casos, lo que era un retraso con 27pF ha pasado a ser un adelanto. De modo que espero hallar el punto de ajuste óptimo cambiando los condensadores dentro de los valores normalizados. Si con 27 hay retraso y con 68 hay adelanto, espero que con un valor intermedio alcanzaré la máxima precisión. Luego haré una corrección por programa, ajustable con un DIP de 4 polos. Pienso que es mejor, y más económico que usar trimmers. La idea es como si se tratara de ajustar la longitud del péndulo.

Saludos
Gaspar
 
Deja uno fijo en 68pF y varia el otro, no es necesario que sea los dos del mismo valor exactamente.

Trata de que los cerámicos que consigas sean NP0, ya solo tendrás la variación por temperatura sobre el cristal/resonador.

Los trimer si no son cerámicos de buena calidad, te darán problemas a la larga.

Ric.
 
No se en concreto de España pero supongo que harán igual que en Argentina.

La frecuencia instantánea es precisa pero dentro de los límites que se le puede pedir a un sistema mecánico, y esto es a kilómetros de la precisión necesaria para un reloj. Si embargo se controla que a largo plazo sea en promedio 50Hz con gran exactitud.

Usar la línea como referencia se remonta a los primeros relojes eléctricos e incluso los primeros digitales de mesa. Podían tener atrasos/adelantos diarios de segundos , pero a lo largo del año se mantenían por debajo del minuto. El problema era que si se cortaba la luz perdías la hora.

Estás dando vueltas y vueltas para no corregir por software que es lo mas simple, ágil,preciso y barato en cualquier sistema con microcontrolador.
 
Acá los tres que tengo conectados a la red, en el momento de mayor consumo atrasan(pleno Invierno o Verano) en el orden de alguno minuto cada dos o tres días dependiendo.
Mas o menos son exactos en Primavera/Otoño siempre que no haga calor o frió extremos por que cuando aumenta la carga se ve que se cae los 50Hz de la red.

Ric.
 
Espero alguna respuesta desde España, pero creo que ahora la red es europea. Sin embargo, en Mallorca tenemos un enlace por cable DC y no estoy seguro de la estabilidad de la frecuencia de la red.
 
Atrás
Arriba