Medir mili Hertz

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Medir mili Hertz

Mensagempor Leomatias » 02 Dez 2010 07:56

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...
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor ze » 02 Dez 2010 08:41

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor styg » 02 Dez 2010 10:03

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.
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor Leomatias » 02 Dez 2010 10:13

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...
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor Leomatias » 02 Dez 2010 10:13

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...
Editado pela última vez por Leomatias em 02 Dez 2010 12:08, em um total de 1 vez.
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor Leomatias » 02 Dez 2010 10:13

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...
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor styg » 02 Dez 2010 10:36

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'
Lucas
Avatar do usuário
styg
Word
 
Mensagens: 799
Registrado em: 16 Out 2006 08:24
Localização: Floripa abaixo de zero.

Mensagempor Leomatias » 02 Dez 2010 10:56

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...
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor ze » 02 Dez 2010 10:56

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor ze » 02 Dez 2010 11:02

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Djalma Toledo Rodrigues » 02 Dez 2010 20:35

Mude a base de tempo para 10 s

ou Conte o Periodo do Sinal.

DJ
Avatar do usuário
Djalma Toledo Rodrigues
Dword
 
Mensagens: 2334
Registrado em: 03 Ago 2008 13:22

Mensagempor renatokodaira » 03 Dez 2010 08:21

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.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15

Mensagempor Leomatias » 03 Dez 2010 14:18

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?
Leomatias
Bit
 
Mensagens: 35
Registrado em: 20 Fev 2008 09:20

Mensagempor renatokodaira » 03 Dez 2010 15:23

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.
renatokodaira
Byte
 
Mensagens: 402
Registrado em: 11 Out 2006 15:15


Voltar para PIC

Quem está online

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

x