guest2003 escreveu:não leu meu reply ?

Que isso Guest, claro que eu li meu amigo, na verdade estou tentando colocar em prática!!! O que vc disse é que a diferença deveria ser e apenas 0,8% segundo o especificado pelo fabricante mas o programa mas esse programa do 2° post meu esta dando uma diferença de 15%, me corrija se eu estiver errado.
(hora:minut:seg)
cronômetro digital= 13:53:13
Meu temporizador= 13:46:00
(retirei a figura, estava errada...)
Como maurício falou isso se deve aos fatores como temperatura, tolerância, redes RC...
Estou querendo usar esse mesmo programa com XT externo como você falou mas não tenho aqui crital de 4MHz para colcar o bicho pra funcionar... estou tentando comprar de Sampa (aliás, foi por isso que eu fiz aquele post sobre cidade pequena lá no boteco!!!
http://asm51.eng.br/phpBB/viewtopic.php?t=319)
MAS, nem tudo esta perdido, pelo menos fiz funcionar o esquema com oscilador externo ligado ao timer1 com cristal de relógio de pulso do paraguai!!! ficou blz!!!! a precisão é de atrazo de 1 segundo a cada 8 horas (em relação a um cronômetro marca Technos).
o programa que eu usei foi esse:
- Código: Selecionar todos
#include <16F628a.h> // Início do programa
#use delay(clock=4000000)
#fuses NOMCLR,INTRC_IO,NOWDT,PUT,NOLVP
#include "funcao_LCD.h" // Configurações para o display LCD, pode ser qualquer biblioteca
// Variáveis usadas na contagem
short int led=0;
int dseg=0;
int seg=0;
int minut=0;
int hora=0;
#int_timer1
void timer1()
{
led = !led; // inverte o estado do led
// set_timer1(32768+get_timer1()); // 32768 = 1Hz
set_timer1(32768); // 32768 = 1Hz
output_bit(pin_A0,led); // Acende e apaga o led (não faz diferença na contagem)
seg++;
dseg=0;
if(seg==60) // Quando a variável seg chegar em 60 incrementa minut e zera seg
{
minut++;
seg=0;
if(minut==60) // Quando a variável minut chegar a 60 incrementa hora e zera minut
{
minut=0;
hora++;
}
}
envia_byte_lcd(0,0xc0); // Desloca o cursor para a segunda linha do LCD
printf(escreve_lcd,"%02u:%02u:%02u",hora,minut,seg);
}
void main()
{
inicializa_lcd(); // Faz a inicialização do LCD
printf(escreve_lcd,"Relogio XT32.768"); // Escreve na 1° linha
envia_byte_lcd(0,0xc0); // Desloca o cursor para a segunda linha do LCD
printf(escreve_lcd,"%02u:%02u:%02u",hora,minut,seg);
// T1_EXTERNAL = Clock externo assíncrono
// T1_DIV_BY_1 = prescaler do timer 1 divido por 1
// T1_CLK_OUT = ativa saída externa do clock
setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1 | T1_CLK_OUT);
enable_interrupts(INT_TIMER1); // habilita interrupção pelo timer1
enable_interrupts(GLOBAL); // habilita as interrupções globais
set_timer1(32768); // inicia a contagem do timer1 em 32768 = 1Hz
while(1); // Mantêm o programa vivo...
} // Fim do programa...
Esquema de ligação:
Queria ter uma máquina fotográfica nessas horas, quem sabe um dia...
acho que não deveria ter nenhum atrazo mas vai saber se esse cristal do paraguai tem alguma precisão ou se os capacitores que coloquei (10pf) que não são os recomendados pelo fabricante (15pf recomendado) realmente façam diferença...
Ah, eletroinf, eu tenho o livro de Fábio PIC Programação em C mas essa parte do cristal externo no timer1 não vem falando, acho que preciso comprar mais literatura!!!!
valeu galera, muto obrigado pela ajuda de todos especialmente eletroinf!!!
Sem vocês eu tava perdido mesmo!!!