Relógio Digital.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Relógio Digital.

Mensagempor Pask » 11 Jan 2007 19:03

Gostaria que alguém pudesse me ajudar no seguinte: elaborei um programa em assembly para um relógio digital que está funcionando muito bem com o PIC 16F628 e 4 displays multiplexados. No entanto, a base de tempo da contagem do tempo do relógio é feita pelo TIMER 1 através do seu oscilador externo via cristal de 32,768 kHz. Então, a base de 60 segundos fica 30,5175us (1:1 prescaler) x 16.384 (TMR1) x 120 (DIVISOR_TMR1) = 60s.
A interrupção do timer 1 foi habilitada e ocorre com periodicidade de 1/2 segundo até completar 1 minuto. A partir daí, ocorrem os incrementos aos dígitos de minutos, horas, etc. O problema é que está havendo uma tendência do relógio a atrasar. Após 24 horas de funcionamento, eu percebo uma diferença de quase 3 segundos em relação ao relógio que usei para acertá-lo, ou seja, ele perde o sincronismo com o relógio comercial usado. Detalhe: o relógio comercial na verdade é o relógio do meu telefone celular que é muito preciso! Sendo assim, quem está realmente atrasando é o relógio com o PIC.
Também já usei como base de tempo o próprio oscilador de clock do PIC (4MHz) com cristal de quartzo externo mas ficou ainda pior, pois o atraso chegava a quase 4 segundos em 24 horas!
Para tentar contornar este problema, elaborei uma sub-rotina que corrige o valor da variável DIVISOR_TMR1 de x tempo em x tempo alterando seu valor final. Com isto, consigo manter o relógio mais ou menos preciso por mais de 10 dias. Mas, eu pergunto, não haveria uma forma de mantê-lo funcionando com ótima precisão por vários meses de outro jeito? Eu sei que todo relógio atrasa e/ou adianta um pouco após várias semanas ou meses de funcionamento. Eu apenas gostaria que o meu relógio digital fizesse a "mesma coisa", ou seja, que fosse preciso corrigir sua hora após alguns meses apenas e não a cada 10 dias! Se ele permanecesse atrasando 0,5 minuto a cada mês já estaria ótimo. Ao final de 1 ano ele teria atrasado 6 minutos apenas.
Alguém pode me dar uma luz? Obrigado.

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor sandei » 11 Jan 2007 19:24

Uma boa opção é o uso de um RTC DS1307. Ele usa uma interface de comunicação I2C e um Cristal externo de 32,768 KHZ.

Você ainda pode adicionar uma Bateria externa 3 V.

Fabio
sandei
Byte
 
Mensagens: 278
Registrado em: 13 Out 2006 08:15

Mensagempor proex » 11 Jan 2007 19:32

Existem duas coisas criticas na interrupçao do Timer. A primeira é em relaçao ao tempo de resposta a interrupçao gerada. Vc sempre terá alguns ciclos de maquina que poderá variar em funçao do que o PIC estiver executando naquele dado momento.

A segunda é sobre a atualizaçao do registrador do timer afim de que ele possa reiniciar o ciclo. Depois que vc escreve o valor no registrador do timer, ele demora mais alguns ciclos para recomeçar a contagem.

Essas "demoras" vão de somando e ao longo de um periodo vc começará a perceber o atraso na contagem.

Particularmente eu já testei algumas rotinas para compensar isso mais nao obtive bons resultados.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor __JEREK__ » 11 Jan 2007 21:04

Pask, você consegui uma grande proeza, algum tempo atraz tentei fazer esse relógio em C mas não consegui muita precisão mesmo com cristal externo de 32Hz!!!
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor lpagano » 12 Jan 2007 06:34

Eu fiz um relógio parecido com esse mas pegando o sinal de 60Hz da rede elétrica como referência. Fiz o seguinte:

Transformei o sinal da rede em 5 e 0 volts. Nesse caso teremos 8,33ms em 0 e 8,33ms em 5V. Quando der 0, aguarda 10ms para que o sinal volte a 5V, incrementa 1 numa variável e espera dar o outro 0. Vai desse jeito até dar 3600 (1 minuto) contagens. Aí você incrementa 1 (minuto) no display.

Eu fiz e deu certinho.

Valeu!
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor renatokodaira » 12 Jan 2007 07:43

Veja que 3s em 24h (86400 s) é mais ou menos 30 ppm (partes por milhao) que é a tolerancia normal desses cristais, alem disso tem o fator temperatura ambiente envolvido (que altera a frequencia do cristal). O jeito é voce achar um cristal que tenha menor erro. Precisao maxima, só com um relogio atomico ...
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor MOR_AL » 12 Jan 2007 08:47

Concordo com o renatokodaira. A precisão dos cristais com a temperatura não é infinita. O que é feito para reduzir a variação na frequência de oscilação dos osciladores a cristal é envolvê-lo com uma temperatura aproximadamente constante e superior a maior temperatura ambiente. Com isso o cristal trabalhará com uma faixa te temperatura menor que a ambiente.
Um controle de temperatura atuando em um resistor, dentro de uma pequena câmera com algum isolamento térmico com o exterior. Dentro desta câmera estariam também o cristal e o sensor de temperatura, que poderia ser uma junção NP polarizada diretamente.
Se a variação original de temperatura for de 0 a 40 graus (exemplo), multiplicando por 10 ppm (partes por milhão) você teria 400 partes de variação em um cristal de 4.000.000 Hz. Isso dá 1 parte em 10.000 (400/4.000.000).
Agora, se sua estufa mantiver a temperatura entre 50 e 52 graus. você terá (2x10/4.000.000), ou 1 parte em 200.000. Compare e veja como melhora.

Um detalhe importante. Infelizmente existem outros fatores que provocam outros desvios na frequência do cristal. O próprio tempo (envelhecimento) faz isso. Os componentes do circuito do oscilador também provocam variações na frequência, porém em menor grau.

Pesquise na internet sobre osciladores a cristal que tem muita coisa a respeito.

MOR_AL
Avatar do usuário
MOR_AL
Dword
 
Mensagens: 2934
Registrado em: 19 Out 2006 09:38
Localização: Mangaratiba - RJ

Mensagempor otavio luiz » 12 Jan 2007 09:10

Sou obrigado a descordar. Voce esta dividindo corretamente e tudo mais, mas voce tem que descontar o tempo gasto pra processar as instruções durante a int. Vamos la, voce pede uma interrupção a cada meio segundo, isso da 172800 interrupções por dia, se voce gastar 10 instruções por interrupção a 4Mhz ou seja, 10uS pro int. da um atrazo de mais ou menos 1,8 segundos por dia. Então sua int possui mais de 10 instruções.
Lembre-se, zona de Fresnel não é nenhuma franquia de puteiro.
Avatar do usuário
otavio luiz
Byte
 
Mensagens: 257
Registrado em: 11 Out 2006 13:56
Localização: Barretos - SP, terra de Peão

Mensagempor __JEREK__ » 12 Jan 2007 20:48

lpagano escreveu:Eu fiz um relógio parecido com esse mas pegando o sinal de 60Hz da rede elétrica como referência. Fiz o seguinte:

Transformei o sinal da rede em 5 e 0 volts. Nesse caso teremos 8,33ms em 0 e 8,33ms em 5V. Quando der 0, aguarda 10ms para que o sinal volte a 5V, incrementa 1 numa variável e espera dar o outro 0. Vai desse jeito até dar 3600 (1 minuto) contagens. Aí você incrementa 1 (minuto) no display.

Eu fiz e deu certinho.

Valeu!


Oi lpagono, tudo bem?? Poderia me dizer como você fez o circuito para tirar o 5 volts da tensão de rede?? tem algum esquema para que eu possa me basear?
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

DS1307

Mensagempor Pask » 13 Jan 2007 08:11

Foi citado sobre a possibilidade de utilização do chip DS1307 (Real Time Clock com comunicação serial). Eu baixei o seu datasheet e estive dando uma analisada nas informações do fabricante. Pelo que pude entender, a comunicação dele com o PIC é feita pela USART. Alguém poderia me passar mais detalhes sobre como usar este recurso, pois nunca o utilizei antes? Se possível, vocês poderiam me passar pelo menos um exemplo de como configurar o PIC e o DS1307 somente para leitura de horas e minutos? Obrigado.

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

5 volts

Mensagempor Pask » 13 Jan 2007 08:18

Caro Jerek, para obter os 5V da rede elétrica você tem duas opções:

1ª) Use um transformador com secundário de uns 8V e coloque dois diodos zener de 5V1 em anti-paralelo um com outro para "quadrar" a forma de onde sem retificá-la! Vc terá uma forma de onda trapezoidal que poderá ser aplicada ao PIC sem problemas.

2ª) Use um divisor resistivo de tensão. Coloque dois resistores em série e ligados entre os terminais da rede elétrica. Então, retire os 5V do ponto de junção entre eles. Utilize um resistor de 100k e outro de 4k7 para uma tensão de rede de 127Vac. Com esses valores ôhmicos você terá quase 6V entre eles. Depois, é só ligar os diodos zener como no ítem 1 acima e você obterá a mesma forma de onda. Aqui só tem uma desvantagem: vc não terá isolação da rede elétrica!

Pask.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor sandei » 13 Jan 2007 08:19

Pask !

Recebi seu email Sob o RTC 1307, porém eu utilizo o AVR Bascom para comunicar em I2C com o RTC ,neste caso não sei se te ajudaria, qto ao RTC no Pic não posso te ajudar, se quiser o Codigo para o AVR posso postar aki no Forúm .

Fabio
sandei
Byte
 
Mensagens: 278
Registrado em: 13 Out 2006 08:15

Mensagempor __JEREK__ » 13 Jan 2007 10:00

Pask, muito obrigado pela resposta!!! Acho qeu poderia colocar um foto-acoplador para resolver o problema da isolação da rede no caso do intem 2.
__JEREK__
Byte
 
Mensagens: 216
Registrado em: 11 Out 2006 17:53
Localização: BA

Mensagempor Pask » 13 Jan 2007 16:14

Boa idéia. O foto-acoplador é uma ótima opção.
Pask
Word
 
Mensagens: 600
Registrado em: 22 Dez 2006 19:19

Mensagempor microeletronica » 13 Jan 2007 20:21

Duas opcoes baratas: DS1305 e DS1307.
Ambos sao simples de achar, sao componentes comuns,,,
Da dallas, eleronica consolidada.
Existem varios exemplos pela internet.

O DS1305 na minha opiniao eh melhor... me dei melhor com ele. Possui comunicacao SPI e alguns alarmes.
O DS1307 eh I2C, tambem ja utilizei este chip.

Possuo conhecimento destes chips e caso tenha mesmo interesse de trabalhar com estes componentes posso tee ajudar com codigos e sugestoes.
Estes trabalham muito bem com XT de 32 K e bateria externa.
Seu problema parece ser mesmo de XT, como o amigo apontou. Tive e tenho ate hoje problemas com producao de equipamentos eletronicos com esses malditos XT de 32 que nao tem precisao. Meu deus do ceu!

Procure XT melhores e debugue se software pra ver se nao tem nada que prejudique a atualizacao dos registradores de atualizacao dos tempos.

[]s/
microeletronica
Byte
 
Mensagens: 158
Registrado em: 05 Dez 2006 18:22

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x