Autor Tema: Como generar 1 segundo... ENCRUCIJADA  (Leído 3628 veces)

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

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1836
    • IDEAA
Como generar 1 segundo... ENCRUCIJADA
« en: 16 de Octubre de 2010, 10:45:16 »
Hola!
He han pedido un proyecto en el que voy a necesitar un cronometro.
La duda que me asalta es la forma de contar los segundos. Hace tiempo, cuando me hice la insoladora, comprobe que el oscilador interno del 16F648A no era suficientemente preciso, y el temporizador de la insoladora atrasaba o adelantaba hasta 5 segundos de cada 130!!
La recomendacion fue que usara un cristal externo...
Ahora me pregunto... que solucion tomar?
-cristal de 4/8/20mhz
-cristal de 32768hz?
-un ds1302?

Cada uno tiene sus ventajas y desventajas, que a saber para mi son:
-un cristal de 4/8/20mhz puede contar sin problemas con el timer1 y el CCP, pero sera suficientemente exacto?
-un cristal de 32768hz es una potencia exacta de 2... y de que me vale? porque aun configurando el timer1 con prescaler de 1:1, tendria una interrupcion cada 2 segundos... con lo cual estoy en la misma, tengo que usar el modulo CCP o quizas ¿el timer2? (no hice los calculos)
-ds1302 me permite olvidarme de problemas, pero encarece el proyecto.

Que creeis? y que sera mas barato para producciones en serie?
Salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #1 en: 16 de Octubre de 2010, 12:10:26 »
Hola Marttyn, una opción simple y económica es usar un cristal de 32.768 kHz en la entrada externa del Timer1.  Por ejemplo en el caso de un PIC18F2550, se coloca en los pines 11 y 12 (RC0/T1OSO y RC1/T1OSI).  Mira la hoja de datos del PIC que te pongo de ejemplo: PIC18F2550 en la página 34 el parágrafo: 2.4 Clock Sources and Oscillator Switching en la parte de osciladores secundarios y también en la página 135 en el parágrafo: 12.3 Timer1 Oscillator.

No se con que compilador estás trabajando, pero por ejemplo en mi caso (CCS C), el Timer1 se configura asi:
Código: [Seleccionar]
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1|T1_CLK_OUT|T1_EXTERNAL_SYNC); y luego simplemente inicias el Timer1 en la configuración del programa y dentro de la interrupción de Timer1 asi:
Código: [Seleccionar]
set_timer1(0x8000); // Fijar el Timer1 a 32768 ticks para el overflow (1 segundo)

Después puedes manejar el tiempo con una función como esta:
Código: [Seleccionar]
struct TM
{
byte hr;
byte mi;
byte se;
};

void incrementa_tiempo(struct TM *t)
{
   ++t -> se;
   if (t -> se > 59)
   {
      t -> se = 0;
      ++t -> mi;
      if (t -> mi > 59)
      {
           t -> mi = 0;
          ++t -> hr;
          if (t -> hr > 23)
          {
              t -> hr = 0;
          }
      }
   }
}

La precisión depende en mucha parte de la calidad del cristal que uses.

Saludos!
« Última modificación: 16 de Octubre de 2010, 13:52:43 por bmb »

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #2 en: 16 de Octubre de 2010, 14:25:44 »
Hola a todos!

Como curiosidad les dejo una foto que acabo de tomar de un par de "cristales" (en realidad son osciladores) que tengo, que según la inscripción que tienen en la parte superior son de 20.000000 MHz y 10.000000 MHz respectivamente; con la cantidad de cifras significativas que acabo de escribir.

La verdad es que nunca tuve la necesidad de probarlos como para confirmar si estos valores son reflejados en la realidad. Aclaro que no todos los osciladores que tengo de este tipo tienen esa cantidad de cifras significativas y que la mayoría solo tienen 3 ceros después de la coma como la gran parte de los cristales comunes.


                  

Saludos!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #3 en: 16 de Octubre de 2010, 19:33:15 »
Cuidado con las especificaciones de Cristales versus osciladores.
Los primeros llevan mucha ventaja contra los segundos.

Hoy hay micros que tienen un buen cristal interno, que pueden darte esta precision correctamente, eso si, son las ultimas versiones.
Los que aqui se mencionaron no sirven...

El 16f727 con mTouch, tiene un cristal de precision interno, por ejemplo, que permite su utilizacion sin tantos problemas...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1836
    • IDEAA
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #4 en: 18 de Octubre de 2010, 08:59:28 »
En conclusion, usar un cristal (no resonador/oscilador) y el TIMER1 en conjunto con el CCP....
Hare pruebas en mplab con el stop watch para ver que el tiempo sea exacto, y luego a freir churros :D
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado martincnc

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 352
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #5 en: 18 de Octubre de 2010, 17:43:17 »
Hola MGLSOFT.

Cuales son los motivos por lo que los cristales tienen ventaja frente a los osciladores?. Me gustaria saber para futuros proyectos  :mrgreen:

Saludos!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Como generar 1 segundo... ENCRUCIJADA
« Respuesta #6 en: 18 de Octubre de 2010, 22:28:18 »
No lo se.
Solo se que son mas precisos, y que en comunicaciones, donde los tiempos deben ser muy precisos, solo se usan cristales, no hay lugar para las osciladores integrados... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.