contar tempo com PIC

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

contar tempo com PIC

Mensagempor giovaniluigi » 20 Ago 2008 15:47

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.
giovaniluigi
Bit
 
Mensagens: 6
Registrado em: 24 Jul 2007 13:14

Mensagempor Sergio38br » 20 Ago 2008 16:03

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
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor giovaniluigi » 20 Ago 2008 16:39

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
giovaniluigi
Bit
 
Mensagens: 6
Registrado em: 24 Jul 2007 13:14

Mensagempor Jorge_Francisco » 20 Ago 2008 18:41

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?
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor xultz » 20 Ago 2008 18:52

Hoje em dia qualquer lojinha tem, pede como ressonador de 32kHz ou cristal mesmo, que você acha
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor Jorge_Francisco » 20 Ago 2008 19:06

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.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Djalma Toledo Rodrigues » 20 Ago 2008 20:58

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
.
Editado pela última vez por Djalma Toledo Rodrigues em 20 Ago 2008 21:16, em um total de 1 vez.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Djalma Toledo Rodrigues » 20 Ago 2008 21:12

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:
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor Maurício » 21 Ago 2008 01:50

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
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor RobL » 21 Ago 2008 07:33

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.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor Jorge_Francisco » 21 Ago 2008 08:32

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.
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor dcardoso » 21 Ago 2008 10:25

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
dcardoso
Bit
 
Mensagens: 21
Registrado em: 28 Jul 2008 15:08

Mensagempor giovaniluigi » 21 Ago 2008 13:07

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.
giovaniluigi
Bit
 
Mensagens: 6
Registrado em: 24 Jul 2007 13:14

Mensagempor renatokodaira » 21 Ago 2008 16:49

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.
Editado pela última vez por renatokodaira em 21 Ago 2008 18:02, em um total de 1 vez.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Djalma Toledo Rodrigues » 21 Ago 2008 17:23

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.
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x