Página 1 de 2

contar tempo com PIC

MensagemEnviado: 20 Ago 2008 15:47
por giovaniluigi
Olá

Há muito tempo q em vários projetos preciso ter um contador de tempo relativamente preciso.

Fiz e refiz diversos calculos, baixei calculadoras para ajustar os timers e configurei o PIC exatamente como tudo indicava. Mas o que obtive foi só decepção pois o tempo não fica preciso. (Erro de aproximadamente 3 segundos a cada minuto.)

Utilizei timers 8bits, 16 bits, com e sem pre-load, vários PICs e diversos osciladores sem sucesso.

A maneira que encontrei para desviar desse problema foi em usar uma regra de três junto com o erro gerado para aproximar um valor mais preciso e "calibrar" os timers.

Dessa forma por aproximação funciona mas eu quero descobrir o motivo do erro.

Estou usando um cristal então erro por causa do oscilador não é. Desabilitei todas interrupções por isso alguma outra acontecendo junto com os timers tb está descartado.

Uma coisa que me chamou a atenção foi em alguns programas que baixei para calcular os valores dos timers. Neles é preciso informar um parametro chamado "Re-load (instr cycle)" para ele fazer o cálculo dos valores corretamente. O problema é que não intendi que parâmetro é esse e talvez seja uma pista para meus problemas com os timers.

Se alguém de vcs puder me ajudar, ou quem já conseguiu obter uma contagem precisa puder me descrever como fez eu ficaria mt agradecido.

MensagemEnviado: 20 Ago 2008 16:03
por Sergio38br
vc por acaso ja tentou usar o timer1 com o cristal de 32,768Khz, na microchip tem um AN que trata sobre o assunto

Sergio

MensagemEnviado: 20 Ago 2008 16:39
por giovaniluigi
Não, nunca usei esse cristal, agora que lembrei de várias vezes ouvir comentários sobre essa frequência...

vou dar uma lida sobre isso

vlw

MensagemEnviado: 20 Ago 2008 18:41
por Jorge_Francisco
Sergio38br escreveu:vc por acaso ja tentou usar o timer1 com o cristal de 32,768Khz, na microchip tem um AN que trata sobre o assunto

Sergio


Sabe onde posso encontrar tal cristal?

MensagemEnviado: 20 Ago 2008 18:52
por xultz
Hoje em dia qualquer lojinha tem, pede como ressonador de 32kHz ou cristal mesmo, que você acha

MensagemEnviado: 20 Ago 2008 19:06
por Jorge_Francisco
xultz escreveu:Hoje em dia qualquer lojinha tem, pede como ressonador de 32kHz ou cristal mesmo, que você acha


Então, a questão é que aqui no Rio não acho nada, em sampa sei que é fácil, mas pesquisei aqui e nem vou usar mais, mas obrigado mesmo assim.

MensagemEnviado: 20 Ago 2008 20:58
por Djalma Toledo Rodrigues
Giovaniluigi não basta simplesmente usar Cristal, é necessário ajustar a frequência do Oscilador, ou com um Trimer os adicionando ou retirando capacitores do oscilador.
Para medir exatamente a frequência do Oscilador o PIC dispõe da saída do oscilador dividido por 4 em um de seus pinos.
Outro cuidado é com o Coeficiente de Temperatura dos capacitores cerâmicos. Deve-se usar capacitores com NP0
Dica os capacitores de 10 pF ou menores são NP0 então eu coloco tantos quantos necessários em paralelo, no oscilador para obter a frequência com exatidão e estabilidade.

Exemplo de reload dentro da IRS do Timer1
:
org 04H
.
.
.

movlw 80H
movwf Tmr1H
movlw 02H
movwf Tmr1L
.
.
.
bcf Pir1,TMR1IF
RETFIE

Para obter frequência de 1 Hz é preferível o Cristal de 32.768 kHz , usado em relógios, no Oscilador do Timer1 , vale a mesma recomendação citada acima para os Capacitores e ajuste de frequência.
Este cristal (na verdade é um Diapasão) á 25° C tem um coeficiente de temperatura quase nulo, muito superior ao Cristal de Quartzo portanto.

Resta ainda uma dificuldade, é que o uC se for interrompido durante a execução de uma instrução ele irá antes terminar esta instrução para depois atender a interrupção . Call , Return etc. são o pior caso já que são instruções de 2 ciclos.

Abraço e boa precisão
.

MensagemEnviado: 20 Ago 2008 21:12
por Djalma Toledo Rodrigues
Jorge Francisco eu aqui no Rio faço é o seguinte: :idea:
Vou ao camelô , compro aquele despertador de mesa transparente* que é mais barato que o relógio de pulso e retiro dele o Cristal de 32.768 kHz

* Com a caixa faço um pequeno porta retrato fica muito legal , e ainda sobra um Buzzer e um monte de engrenagens que ainda não encontrei serventia.
:lol:

MensagemEnviado: 21 Ago 2008 01:50
por Maurício
Rapaziada!

Vcs tão de saca, com essa parada do cristal de 32KHz aí, não tão, não? :lol:

Liga lá na LECOMP (11-3224-1800), que eles tem isso daí as toneladas.

[]'s

MensagemEnviado: 21 Ago 2008 07:33
por RobL
Este cristal (na verdade é um Diapasão) á 25° C tem um coeficiente de temperatura quase nulo, muito superior ao Cristal de Quartzo portanto.


O Djalma colocou bem, como proceder.
Só que este cristal é de quartzo e tem massa aderida (fork) para faze-lo oscilar em baixa freqüência.
Todos os cristais tem esse comportamento a 25*C.
NOTA:
No Rio de Janeiro encontram-se cristais na República do Líbano.

MensagemEnviado: 21 Ago 2008 08:32
por Jorge_Francisco
RobL escreveu:
Este cristal (na verdade é um Diapasão) á 25° C tem um coeficiente de temperatura quase nulo, muito superior ao Cristal de Quartzo portanto.


O Djalma colocou bem, como proceder.
Só que este cristal é de quartzo e tem massa aderida (fork) para faze-lo oscilar em baixa freqüência.
Todos os cristais tem esse comportamento a 25*C.
NOTA:
No Rio de Janeiro encontram-se cristais na República do Líbano.


República do Líbano está virando departamento de som automotivo,hehehe.

MensagemEnviado: 21 Ago 2008 10:25
por dcardoso
Não sei até que ponde irá ajudar mas vc não poderia usar um
Real Time Clock Modules - RTC-72421/72423.

O que vcs acham?

[]ços

MensagemEnviado: 21 Ago 2008 13:07
por giovaniluigi
Pois é já até comprei alguns RTC para evitar futuros problemas, com eles é a precisão é boa sem dúvida, porém não aceito que um MCU como o PIC não consiga contar tempo corretamente. Sem dúvida eu devo estar errando e quero corrigir isso.

Mas agora com essas dicas em usar esse cristal, acho que vou conseguir bons resultados, afinal o RTC tb usa esse cristal.

Obrigado.

MensagemEnviado: 21 Ago 2008 16:49
por renatokodaira
Pois é já até comprei alguns RTC para evitar futuros problemas, com eles é a precisão é boa sem dúvida, porém não aceito que um MCU como o PIC não consiga contar tempo corretamente. Sem dúvida eu devo estar errando e quero corrigir isso.

Mas agora com essas dicas em usar esse cristal, acho que vou conseguir bons resultados, afinal o RTC tb usa esse cristal.


Giovani eu já consegui uma contagem precisa com o Timer1 e usando somente o cristal de 4MHz do oscilador principal. A dica é usar interrupção por estouro do TMR1 para incrementar o seu contador de tempo (através da rotina de serviço da interrupção). No meu caso eu carregava o registrador TMR1H com o valor 11 e o registrador TMR1L com o valor 221. Assim o TMR1 ficaria com valor 3037 (resultado de 11 x 256 + 221) e configurando o clock do TMR1 para usar Clock/4 (o clock principal do PIC/4) e Prescaler divisor por 8, temos:

65536 - 3037 = 62499 ciclos para estourar o TMR1

Usando Clock/4 (1us) e prescaler divisor por 8 (1us x 8 ), temos 8us de periodo de cada contagem no TMR1

62499 x 8 us = 499.992 us ou seja quase 0,5 segundo. Como fiz a rotina de interrupçao gastar mais 8 ciclos de maquina (8us usados para salvar alguns registradores e incrementar a base de tempo depois disso é carregar de novoTMR1L e TMR1H, restaurar os registradores e retornar da interrupçao), dá exatos 500.000 us ou 0,5s exatos (lógico que dependendo do cristal) você tem a base de tempo exata de meio segundo. Só precisa criar as demais variaveis de segundo (inteiro), minutos e horas.

Veja que a rotina de interrupçao precisa ser em assembly pra voce ter controle do tempo das instruçoes usadas para chegar certinho nos 500000 ciclos. Voce pode diminuir o valor em TMR1L para 220, assim voce terá mais 8 ciclos para usar na rotina de interrupçao (se sobrar use NOPs para gastar o tempo). Dessa forma voce consegue calibrar bem o TMR1 para ser usado como base de tempo de precisao.

MensagemEnviado: 21 Ago 2008 17:23
por Djalma Toledo Rodrigues
RobL

O Djalma colocou bem, como proceder.
Só que este cristal é de quartzo e tem massa aderida (fork) para faze-lo oscilar em baixa freqüência.
Todos os cristais tem esse comportamento a 25*C.


Embora os relógios digam Quartzo o ressonador é na verdade cerâmico.

Mas, "passo a palavra" a um fabricante www.sobretom.com.br:

Invólucros cilíndricos miniaturas de 2x6 mm e 3x8 mm

Para o encapsulamento de lâminas de cristais oscilando no padrão "tuning-fork" (diapasão),
que atingem frequências muito baixas. Um exemplo típico é o cristal de 32768 Hz,
utilizado em relógios e computadores.

Estabilidade térmica
Curva quase parabólica com pico (máx) em 25oC
e constante de -0,034 PPM/oC2 (típica).
Frequência decai para -20 PPM a 0oC e a 50oC,
e para -40 PPM a -10oC e a 60oC, aprox.

-------------------------------------------------------------------
Cristal de Quartzo:
Invólucro HC-49/U e HC-50/U (1) ________ HC-49/T (1)
Faixa de frequência 1,8 MHz a 250 MHz____ 4 MHz a 250 MHz(1)

Estabilidade térmica ±5, ±10, ±15, ±20, ±30, ±50 e ±100 PPM (2)

( Obrigado Sobretom )
-------------------------------------------------------------------
Compare a Estabilidade do Quartzo +/- 10 PPM (*)
com o diapasão de 32.768 kHz a 25°C - 0.034 PPM
Pode chegar a 294 vezes melhor

(*) +/- 5 PPM é Cristal Premium muito mais $$,$$

Abraço e desculpe qualquer coisa.