Autor Tema: Precisión de un reloj  (Leído 6557 veces)

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

JoseV

  • Visitante
Precisión de un reloj
« en: 19 de Enero de 2008, 19:56:43 »
Saludos a todo el foro
Estoy tratando de incluir un reloj en un programa utilizando el desbordamiento de TMR0. El micro es un PIC16f876.
Pregunto si se puede hacer con precisión el reloj a partir del clock de 4 Mhz.
Con ayuda del programita de generador de delays, pienso que se podría utilizar un reg. con .248, otro con .72 y otro con 14.
Pero segun mis cuentas sería

248*72*14=249.984

como se divide el clock por 4 tendríamos
 
249.984*4=999.936

por tanto ¿el reloj adelantaría? ¿Es esto así?
¿Se puede lograr mejor precisión, sin tener en cuenta el error que pudiera tener el cuarzo?
Alguna vez he visto algunos osciladores con Xtal que tenian un pequeño condensador ajustable. ¿Mueve esto la frecuencia
del clock suficientemente?
Gracias por la atención.
JoseV

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Precisión de un reloj
« Respuesta #1 en: 19 de Enero de 2008, 21:24:43 »
JoseV, antes que nada si trabajas a 4Mhz, cada ciclo de instrucción seria de 1useg.  Según tus números estarías cerca de los 250mseg, y no del segundo.

En cuanto a la precisón, hay formas de ir ajustando el valor pero no es una ciencia exacta, un cristal con un pequeño corrimiento hará que corra más rápido o más lento.  Si ajustas con los capacitores la frecuencia si, la puedes mover un poquito pero piensa que la frecuencia de oscilación también es función de la tensión y de la temperatura.  Si algunas de estas variables cambian a lo largo de la ejecución de tu software, también lo hará tu reloj.

Te invito a que leas estos hilso donde también se trató el tema y/o cuestiones relacionadas.

http://www.todopic.com.ar/foros/index.php?topic=11448.0

http://www.todopic.com.ar/foros/index.php?topic=16334.0

http://www.todopic.com.ar/foros/index.php?topic=16334.0

http://www.todopic.com.ar/foros/index.php?topic=8272.0

http://www.todopic.com.ar/foros/index.php?topic=14206.0

http://www.todopic.com.ar/foros/index.php?topic=12092.0

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

JoseV

  • Visitante
Re: Precisión de un reloj
« Respuesta #2 en: 19 de Enero de 2008, 22:43:17 »
Maunix, ante todo muchas gracias por tu atención y por la rapidez en la respuesta. De nuevo vienes a echar un poco de luz sobre mis dudas y falta de conocimierto. A pesar de que participo poco en el foro, lo sigo de continuo y tu eres uno de los que más admiro por tus conocimientos y sensatez. Bueno, basta de cepillo...

A ver si me puedo explicar. Para decrementar los mencionados registros y llevarlos a cero, entiendo que necesitaría 249.984  ciclos de clock interno o sea cerca de 250 ms.
Como cada ciclo es igual Fosc/4, ¿no sería aproximadamente 1 segundo real lo que hemos tardado en ejecutarlo?

De todas formas, veo que parece que no se puede ajustar exactamente para que el TMR0 desborde cada segundo (por las cuentas).

Probaré a ver que tal de precisión conseguiría solo por soft y si no vale pensaría en un RTC (DS 12xxx)

Gracias de nuevo. Saludos al foro
JoseV



Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Precisión de un reloj
« Respuesta #3 en: 21 de Enero de 2008, 12:38:48 »
Maunix, ante todo muchas gracias por tu atención y por la rapidez en la respuesta. De nuevo vienes a echar un poco de luz sobre mis dudas y falta de conocimierto. A pesar de que participo poco en el foro, lo sigo de continuo y tu eres uno de los que más admiro por tus conocimientos y sensatez. Bueno, basta de cepillo...

A ver si me puedo explicar. Para decrementar los mencionados registros y llevarlos a cero, entiendo que necesitaría 249.984  ciclos de clock interno o sea cerca de 250 ms.
Como cada ciclo es igual Fosc/4, ¿no sería aproximadamente 1 segundo real lo que hemos tardado en ejecutarlo?


JoseV gracias por tus comentarios.

En cuanto a lo de los ciclos internos, piensa que las instrucciones avanzan a Fosc/4, con lo cual cada ciclo son 1 instruccion.  Si tu clock es de 4Mhz, las instrucciones se ejecutarán cada 1useg (1 millon de instrucciones por segundo).

Creo que estás dividiendo 2 veces por 4,  Fosc es la frecuencia del oscilador externo.

Volviendo a los números, si tu quieres demorar 1 segundo, deberás realizarlo 1 millón de veces. 


De todas formas, veo que parece que no se puede ajustar exactamente para que el TMR0 desborde cada segundo (por las cuentas).
Siempre se puede ajustar, acercarse, etc, usando nops por ejemplo.  El punto es que por más que logres los 1millon de instrucciones exactos el corrimiento del oscilador hará que cada X horas, no tengas precisión exacta, ese era mi punto.

En el simulador puedes terminar ajustandolo perfectamente pero en la realidad puede que varíe un poco.  Por más que varíe muy muy poquito al cabo del día son unos segundos.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Precisión de un reloj
« Respuesta #4 en: 21 de Enero de 2008, 20:14:17 »
Hola JoseV

hace tiempo monté uno en protoboard, lo dejé dia y medio y al ojo por ciento puedo decir que iba sincronizado con el reloj de un movil.

http://www.todopic.com.ar/foros/index.php?topic=8427.msg54971#msg54971


los retardos lo hice por temporización en software, estos retardos son menores a 1 segundo, el tiempo faltante lo complementa la ejecución de las instrucciones del bucle principal (incluyendo la toma de desiciones y el barrido)

como ya te dijeron es cuestión de tiempo para que se descalabre.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

JoseV

  • Visitante
Re: Precisión de un reloj
« Respuesta #5 en: 21 de Enero de 2008, 22:07:00 »
Hola, gracias por las respuestas.
Maunix, no es que quisiera hacer un rolex, sólo quiero hacer un reloj "decente". Entiendo por lo que me dices que trabajando el software se puede uno aproximar bastante, un par de minutos o tres al mes para mí sería mas que suficiente.
Veré de seguir dandole vueltas al programa a ver como le saco el mejor ajuste. Lo malo que para ir probando ya en realidad cada prueba casi se lleva un día para apreciar las tendencias.
PalitroqueZ, gracias por tu aportación pero no quiero un soft dedicado solo a reloj, sino que es un reloj dentro de un projecto, o
sea el programa tiene que hacer cosas y el reloj es parte de un todo.
Saludos
JoseV
« Última modificación: 21 de Enero de 2008, 23:05:36 por JoseV »

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Precisión de un reloj
« Respuesta #6 en: 22 de Enero de 2008, 07:39:10 »
Maunix, no es que quisiera hacer un rolex, sólo quiero hacer un reloj "decente". Entiendo por lo que me dices que trabajando el software se puede uno aproximar bastante, un par de minutos o tres al mes para mí sería mas que suficiente.

En ese caso tranquilamente el ajuste que hagas en el simulador te servirá para aproximar bien tus resultados.  :)

La aclaración venía porque en algunas aplicaciones se pretende tener una hora precisa y con el corrimiento de algunos segundos por día se termina desfasando lo cual requiere sincronizaciones periódicas.  Si es una aplicación que estará sola al cabo de las semanas el corrimiento puede ser importante, ahora si a tí te interesa solo para tener una base de tiempo descente entonces no es inconveniente.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 823
Re: Precisión de un reloj
« Respuesta #7 en: 22 de Enero de 2008, 08:29:27 »
yo jugue varias veces con esto y la verdad que ni a decente llega, no te engañes con los resultados del simulador, cuando lo montes vas a ver mucha diferencia. La mejor opcion que tenes sin usar un rtc es usar el tmr1 como oscilador con un xtal de 32.768, con eso vas a andar entre 1-4 segundos por dia que es la  misma presicion que un reloj chinoka

aca tenes una hilo con codigo en basic y c

http://www.todopic.com.ar/foros/index.php?topic=19806.msg145448#msg145448
« Última modificación: 22 de Enero de 2008, 08:33:02 por psykhon »
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Precisión de un reloj
« Respuesta #8 en: 22 de Enero de 2008, 16:44:30 »
...PalitroqueZ, gracias por tu aportación pero no quiero un soft dedicado solo a reloj, sino que es un reloj dentro de un projecto, o
sea el programa tiene que hacer cosas y el reloj es parte de un todo.
...

en tal caso la mecánica es la misma, creas un retardo que NO llegue al segundo y luego miras cuanto tarda el conjunto de instrucciones tanto del reloj como de tu programa principal y luego ese será el tiempo que falte para completar el segundo (que es la base de tiempo)


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

JoseV

  • Visitante
Re: Precisión de un reloj
« Respuesta #9 en: 22 de Enero de 2008, 20:24:59 »
Hola.
Bueno, veo que esto es para echarle horas (como va de reloj, pues eso, horas para que aproveche).
Pensé en principio que con la estabilidad del Xtal. y las divisiones que hace el micro se podría estar cerca del microsegundo de precisión pero veo que solo es en teoría.
Haré las pruebas ajustando lo que pueda el soft y si no me convence veré de utiluzar un RTC.
Al fin, con todo esto iré cogiendo práctica para adentrarme mas en programar y conocer mas los micros.
Lo que consiga, lo comunicaré por aquí.
Gracias. Saludos.
JoseV

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Precisión de un reloj
« Respuesta #10 en: 23 de Enero de 2008, 17:01:03 »
Hola.
...Al fin, con todo esto iré cogiendo práctica para adentrarme mas en programar y conocer mas los micros.
Lo que consiga, lo comunicaré por aquí.
Gracias. Saludos.
JoseV

si que te servirá de aprendizaje, si es la base de multiplexar procesos en el tiempo.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

JoseV

  • Visitante
Re: Precisión de un reloj
« Respuesta #11 en: 04 de Febrero de 2008, 17:55:25 »
Hola:
Retomo este pasado tema para tratar de aportar este programilla, que podriamos llamar "Base de Tiempos".
A base de prueba y ensayo, a mi me sale  midiendo con el Stopwatch del Mplab, en la linea INCF    MINU,F una precision de .000002 que en teoría serían 5 segundos al mes.
Lo he probado en protoboard y en día y medio a ojo no observo diferencia, o sea que va bien, y está trabajando junto con un proyecto.
Los muy entendidos que lo refinen, porque yo todavia estoy en básico, muy básico y será mejorable.
Quizás a alguien le venga bien.
Edito para decir como mido los tiempos
Pongo un breakpoint en la linea MOVWF   TMR0
Run
pulso zero en el stopwatch
Pongo un breakpoint en la linea INCF    MINU,F
Run
Se verá el tiempo trancurrido en 1 minuto (60 segundos)
Saludos
JoseV
« Última modificación: 04 de Febrero de 2008, 19:55:24 por JoseV »

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 823
Re: Precisión de un reloj
« Respuesta #12 en: 05 de Febrero de 2008, 12:26:58 »
el simulador no te va a servir mucho para saber los margenes de error ya que el error lo da le xtal y eso no es simulado
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

JoseV

  • Visitante
Re: Precisión de un reloj
« Respuesta #13 en: 05 de Febrero de 2008, 15:34:50 »
Hola.
Psykhon, gracias por tu observación.
Ya sé que el xtal tendrá sus desviaciones y que eso será sobre todo lo que influirá en la precisión,
pero lo que he tratado de hacer es primero practicar con las interrupciones para ver como se sacan tiempos de control
y despues que el programita sirviera para otros que como yo empiezan,  y que tengan una muestra de cómo se podría hacer.
A mi de todas formas, montado y trabajando en real (2 días) hasta ahora va perfecto. Con paciencia, el sotware tambien
tiene algun ajuste.
Saludos
JoseV

Desconectado groundman

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1870
    • www.ingeniopic.com
Re: Precisión de un reloj
« Respuesta #14 en: 05 de Febrero de 2008, 20:43:33 »
hola,yo tambien queria hacer un reloj preciso.y mi intencion hera sincronizarlo de cuando en cuando,mediante las tramas nmea con comandos at de un gps de esos que venden los chinos por 20€.seran tan precisos estos reloges internos de los gps?
es la misma hora de internet?
Montando mi primera impresora 3D (Raprep Prusa i3)