Página 1 de 1
Medir mili Hertz

Enviado:
02 Dez 2010 07:56
por Leomatias
Bom dia à todos.
Seria possível medir frequências menores que 1 hertz, tipo de 0,5 à 1 hertz? Como poderia ser feito... alguma dica? Estou usando o PIc 16f874A... cheguei a implementar um frequêncímetro utilizando timer 0 e timer1, mas a consigo ler até 1 hertz, abaixo disso, ele indica como zero.
Desde já obrigado pela atenção...

Enviado:
02 Dez 2010 08:41
por ze
neste caso é só inverter: a base de tempo vai ser seu sinal externo e seu sinal (interno) pode ser a contagem do timer. se for 10khz p.ex. é só capturar a contagem no evento (subida ou descida) do seu sinal externo. se contar até 5234 a freq é de 0,5234hz.
pode zerar o timer no 1º evento e capturar no 2º. ou algo do gênero.
abç

Enviado:
02 Dez 2010 10:03
por styg
Complementando o q o Lellis disse, se o teu mcu permitir podes capturar o tempor entre a borda de subida e a de descida (ou vice-versa) assim consegues fazer a leitura mais rapido. Desde que teu sinal tenha duty de 50%, nesse caso tua frequencia real será metade da medida.

Enviado:
02 Dez 2010 10:13
por Leomatias
Não entendi muito bem a explicação de vocês, ainda... desculpe.
Estou usando o timer0 como temporizador de 1 segundo, já meu timer 1 está como contador de pulsos externos.
Quando ocorre o estouro de timer0, a interrupção para 1 segundo, busco o conteúdo da contagem do timer 1 e zerando-o em seguida.
Isso seria a melhor forma?
Agradeço novas dicas, estou tentando entender melhor o que foi dito por vocês dois nas duas últimas mensagens deixadas.
Desde já valeu...

Enviado:
02 Dez 2010 10:13
por Leomatias
Não entendi muito bem a explicação de vocês, ainda... desculpe.
Estou usando o timer0 como temporizador de 1 segundo, já meu timer 1 está como contador de pulsos externos.
Quando ocorre o estouro de timer0, a interrupção para 1 segundo, busco o conteúdo da contagem do timer 1 e zerando-o em seguida.
Isso seria a melhor forma?
Agradeço novas dicas, estou tentando entender melhor o que foi dito por vocês dois nas duas últimas mensagens deixadas.
Desde já valeu...

Enviado:
02 Dez 2010 10:13
por Leomatias
Não entendi muito bem a explicação de vocês, ainda... desculpe.
Estou usando o timer0 como temporizador de 1 segundo, já meu timer 1 está como contador de pulsos externos.
Quando ocorre o estouro de timer0, a interrupção para 1 segundo, busco o conteúdo da contagem do timer 1 e zerando-o em seguida.
Isso seria a melhor forma?
Agradeço novas dicas, estou tentando entender melhor o que foi dito por vocês dois nas duas últimas mensagens deixadas.
Desde já valeu...

Enviado:
02 Dez 2010 10:36
por styg
Esse seu método é melhor para frequencia altas.
Hoje vc ta contando os pulsos de um sinal em um determinado tempo para saber a frequencia.
O que c tem q fazer é, contar o tempo de um pulso (ou periodo) de um sinal.
Ou seja, tens que ver no DS do teu mcu qual timer tem 'input capture' e colocar nessa entrada o teu sinal, e config teu timer para tal.
O que acontece, toda borda de subida por ex. ele vai pegar o valor do seu timer e jogar pra um reg especifico, aí é só pegar a diferença entre duas leitura e sabendo teu clock, calcular a freq.
procura no teu datasheet por 'input capture'

Enviado:
02 Dez 2010 10:56
por Leomatias
Não entendi muito bem a explicação de vocês, ainda... desculpe.
Estou usando o timer0 como temporizador de 1 segundo, já meu timer 1 está como contador de pulsos externos.
Quando ocorre o estouro de timer0, a interrupção para 1 segundo, busco o conteúdo da contagem do timer 1 e zerando-o em seguida.
Isso seria a melhor forma?
Agradeço novas dicas, estou tentando entender melhor o que foi dito por vocês dois nas duas últimas mensagens deixadas.
Desde já valeu...

Enviado:
02 Dez 2010 10:56
por ze
voce não vai usar + o timer0 como temporizador de 1 segundo para o timer1. O "1 segundo" vai vir de fora: o seu sinal. E o resultado estará na "captura" da contagem do timer1. numa das capturas voce pode gerar o contador e na outra pegar o resultado efetivamente. (ou fazer a dif como disse o amigo) sim este pic tem captura. por gentileza veja a seção CAPTURE/COMPARE/PWM MODES do datasheet. caso não entenda, já sabe...
(leia de novo.rs)
abç

Enviado:
02 Dez 2010 11:02
por ze
voce não vai usar + o timer0 como temporizador de 1 segundo para o timer1. O "1 segundo" vai vir de fora: o seu sinal. E o resultado estará na "captura" da contagem do timer1. numa das capturas voce pode gerar o contador e na outra pegar o resultado efetivamente. (ou fazer a dif como disse o amigo) sim este pic tem captura. por gentileza veja a seção CAPTURE/COMPARE/PWM MODES do datasheet. caso não entenda, já sabe...
(leia de novo.rs)
também pode ao invés de usar a interrupt de estouro do timer, usar uma de interrupt externa e pegar o conteudo do timer com já faz atualmente
abç

Enviado:
02 Dez 2010 20:35
por Djalma Toledo Rodrigues
Mude a base de tempo para 10 s
ou Conte o Periodo do Sinal.
DJ

Enviado:
03 Dez 2010 08:21
por renatokodaira
O que eles estao querendo dizer eh que voce nao vai mais contar o numero de pulsos do sinal em determinado periodo de tempo (base de tempo), mas que agora precisa medir o periodo do sinal e depois fazer o calculo da frequencia (1/T).
Por exemplo:
O seu PIC tem um modulo de CCP (Compare, Capture, PWM). O que voce vai usar eh o Capture.
Voce vai configurar o TMR1 como contador, com clock vindo do proprio PIC, ou seja Fosc/4 e usando o divisor postcaler (digamos por 8 ). Como o TMR1 eh um contador de 16 bits, ele pode contar ateh 65535. Se usar um cristal de 1MHz no PIC, e configurar o postcaler para 8, cada incremento do contador TMR1 vai acontecer a cada 32 us, ou seja o contador pode contar ateh 65535 x 32us = 2,097 s o que jah eh suficiente.
O sinal que voce quer medir vai num pino que seja sensivel a borda de subida ou de descida. Quando ocorrer uma subida do seu sinal, o PIC vai reconhecer (por interrupçao) e voce liga e aciona a contagem no TMR1, e ele vai começar a contar independentemente do seu sinal. Quando ocorrer outra borda de subida (seu sinal medido estah completando um ciclo), voce pára o TMR1 e veja quanto foi a contagem dele. Esse valor multiplicado por 32 us corresponde ao periodo (T) do seu sinal. Pra calcular a frequencia basta fazer a conta 1/T. Exemplo: se a contagem foi de 45000, entao o periodo eh: 45000 x 32us = 1440 ms ou 1,44s cuja frequencia seria de 1/1,44 = 0,694 Hz ou 694mHz.

Enviado:
03 Dez 2010 14:18
por Leomatias
Obrigado desde já pelas mensagens.
Renato, além de configurar o Timer1 é necessário configurar o CCPCON... do módulo CCP, ou a sua descrição acima é só utilizando o timer1?

Enviado:
03 Dez 2010 15:23
por renatokodaira
Sim precisa configurar o CCP1CON pra selecionar o modo capture (e se eh borda de subida ou de descida). Precisa configurar interrupçao, precisa configurar o TMR1. Por isso voce precisa ler a datasheet como o Lellis disse.