Autor Tema: base de tiempo de un minuto  (Leído 1926 veces)

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

Desconectado wickeny

  • PIC10
  • *
  • Mensajes: 2
base de tiempo de un minuto
« en: 30 de Julio de 2005, 17:05:00 »
Hola a todos ... Como puedo generar una base de tiempo de un minuto con el pic 16f84 para inccrementar un contador de 4 digitos ??? Es decir por cada minuto que pase el pic tiene que incrementar el contador; sin producir ningún retraso
muchas gracias !!!!!

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: base de tiempo de un minuto
« Respuesta #1 en: 30 de Julio de 2005, 17:44:00 »
Si necesitas muuuucha precision usa un RTC (real time clock), los hay que tiene una salida que genera un pulso de 1hz exacto y podrias conectarlo a la interrupcion externa del pic. O usar un cuarzo de 4,096Mhz con el que se consiguen segundos clavados con el timer. Suerte!
Si juegas contra el mejor, pierdes como los demás.

Desconectado vszener

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2395
RE: base de tiempo de un minuto
« Respuesta #2 en: 31 de Julio de 2005, 16:43:00 »
Segun se visualicen los digitos puedes programarlo de una manera o de otra, supongo que se incrementa de 1 en 1 hasta llegar a 9999 por lo tanto la forma mejor que veo es mediante interrupciones, yo hice algo igual con interrupciones. La formula de desbordamiento del timer0 para er 16F84 es:

Temporizacion = Tcm · Prescaler · (256-Carga TMR0)

Tcm= 4 · 1/f ; f=frecuencia del oscilador

.
.
.
declaracion constante_minuto=160  ;en caso que desbordemos el tmr0 cada 0.5s
declaracion contador_minuto=0

funcion interrupcion
if(contador_minuto=constante_minuto)
    ->Si, actualiza indices, contador_minuto=0
    ->No, contador_minuto++
carga tmr0
fin interrupcion

programa
.
.
.
fin programa

Mediante la formula saca la maxima temporizacion que puede soportar el timer0 y apartir de ahi puedes utilizar una instruccion tipo if y un flag para ver si ha pasado un minuto como requieres, es decir, puedes obtener una temporizacion de 0,5 s (cada 0.5s se llamaria a la funcion de interrupcion) cuando entre en la funcion de interrupcion, se encontrara con el if(contador_minuto>constante_minuto), si es mayor es que ya es un minuto por lo tanto entra en la funcion y actualiza indices, si no es mayor no entra en funcion del if y carga de nuevo el tmr0  y actualiza flag de contador_minuto y sale de la funcion de interrupcion para volver al programa. La constante_minuto debe cargarse acorde a las veces que tiene que entrar en la funcion de interrupcion, si hemos dicho que el tmr0 se desborda cada 0,5s quiere decir que entrando 2 veces en la interrupcion habran transcurrido 1s, si 1min tiene 60s tendra que entrar en la interrupcion 120 veces para actualizar indices cada minuto. Parece algo lioso pero programando es facil. Suerte y a programar!!!
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything