Se que el tema, es un reloj despertaror, mi intencion no es desvirtuar el tema, pero este es el unico topic, donde pude encontrar gente interesada en el tiempo, es decir en medir el tiempo real, sea segundo a segundo, usando cristales especificos.
El codigo que uso con el cristal de 4MHz es:
#include <16F88.h>
#FUSES NOWDT,NOBROWNOUT,NOLVP,NOPROTECT,XT
#FUSES NOMCLR
#FUSES CPD
#FUSES IESO//Internal External Switch Over mode enabled
#FUSES PUT
#FUSES FCMEN
#use delay(clock=4000000)
#include "LCD.c"
unsigned int16 cont500mS;
unsigned int16 contS=0;
unsigned int16 contM=0;
unsigned int16 contH=0;
unsigned int8 unocero=0;
#int_TIMER1
void TIMER1_isr(void)
{
setup_timer_1(T1_DISABLED);
set_timer1(3036);//para desbordarlo en 500ms osea medio segundo
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
cont500mS++;if(unocero==0){unocero=1;}else{unocero=0;}
if(unocero==1)
{contS++;if(contS==60){contS=0;contM++;}
if(contM==60){contM=0;contH++;}
lcd_gotoxy(1,1);printf(LCD_PUTC,"%Lu:%Lu:%Lus....",contH,contM,contS);
}
}
void main()
{
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
Setup_Oscillator(OSC_4MHZ|OSC_INTRC);
set_timer1(3036);//adelantamos el tiempo en esa cantidad para que desborde en 500ms
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
lcd_init();
while(TRUE)
{
}
}
Como comentario: se crea una interrupcion por desbordamiento, cada 500mili segundos, cada dos interrupciones se cuenta un segundo y se pone el valor en el LCD. he borrado parte del codigo que hace la conversion del modulo Analogico digital para mi proyecto, asi que me disculpan si hay una linea por ahi que se filtra (esa conversio AD funciona a la perfeccion).
Por ahi lei que en el LCD.C, hay DELAYs, ahora la respuesta podria estar por ahi??, en ese mismo comentario lei en ingles que durante un DELAY, las interrupciones no funcionan? es decir si debiera producirse el desbordamiento del timer pero el PIC esta dentro de un DELAY, esta interrupcion no se produce? que hay de cierto en esto? no he tenido oportunidad de comprobar esto, que pienso yo aqui ya se deben haber encontrado con este inconveniente?
Gracias por las respuestas...
mil disculpas por hablar del cristal de 4MHz cuando el tema es con el 32KHz
Los resultados: Pues el reloj se atrasa, en promedio un segundo cada 30minutos, es demasiado.