Página 1 de 2
Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 10:37
por erik.flores
Amigos estou com uma certa dúvida que não estou conseguindo encontrar uma solução.
Existe no PIC um jeito de
detectar um sinal PWM ou melhor falando um
sinal pulsante na entrada do microcontrolador?
Tenho que identificar 3 tipos de sinal na mesma entrada, o
pulsante, o de 5 V e o TERRA.
O 5 V e o sinal de TERRA são fáceis.
- Código: Selecionar todos
If (SINAL == 5)
{
//comando
}
If (SINAL == 0)
{
//comando
}
E o
sinal pulsante alguém tem uma solução pra me dizer.
Obrigado
Abraços
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 12:30
por cfreund
Veja se existe timer com incremento por pino no seu uC. Ou então, interrupção externa incrementando variável do tipo volatile. Necessário configurar interrupção a cada 1 segundo ou fração, para calcular a frequência e resetar variável/registrador.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 13:38
por erik.flores
cfreund escreveu:Veja se existe timer com incremento por pino no seu uC. Ou então, interrupção externa incrementando variável do tipo volatile. Necessário configurar interrupção a cada 1 segundo ou fração, para calcular a frequência e resetar variável/registrador.
cfreund
Me ajude em forma de exemplos que eu vou entender melhor.
Eu uso o PIC 16F887 e o compilador CCS.
Eu já tenho um timer ativo, o timer1 para contar 1 segundo..
Preciso ativar outro timer?
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 13:50
por Djalma Toledo Rodrigues
Sugestão:
Você imagina como uma pessoa faria isso.
De posse desse procedimento (procedimento lógico) faça um fluxograma.
Dai o Programa.
Mas, observe bem se existe 3 possibilidades +5 , 0, Pulsos
o +5 ou o zero não podem ser reconhecidos assim de imediato
há que dar um tempo, tempo maior que o estimado para o Periodo do PWM .
DJ
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 13:57
por erik.flores
Já está feio o fluxograma.
Meu programa já está feito, só está faltando isso pra concluir o programa, pq é o que meu hardware fornece.
Sim são esses 3 tipos de possibilidades mesmo.
Tudo bem se demorar pra reconhecer 2 ou 3 períodos, mas eu não sei como proceder na comparação.
Você tem alguma sugestão pra calcular o período?
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 14:20
por andre_luis
Erik,
Não sei qual é a versão do seu copmpilador CCS, mas deve ter uma pasta tipo "C:\Examples" com um arquivo EX_CCPMP.C, que estou anexando mais abaixo. No caso, eles utilizaram a função
Delay() para a temporização, mas eu pessoalmente não recomendo.
ex_ccpmp.c
Basicamente, a função do CCP quando configurado como
Comparador, é a de fazer a contagem de uma entrada num intervalo de tempo pre-determinado. Aplicado no seu caso, significa que se a contagem fosse maior que Zero [
if ( pulse_width ) > 0 ], pode interpretar isso como sua entrada estando pulsando.
+++
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 15:31
por Red Neck Guy
Se a frequência for constante e o ciclo fixo, você pode implementar um simples filtro de segunda ordem e ler o nivel resultante pelo ADC.
Um filtro bem fuleiro mesmo, tipo 2 resistores e 2 capacitores.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 15:51
por andre_luis
Aquino escreveu:Se a frequência for constante e o ciclo fixo, você pode implementar um simples filtro de segunda ordem e ler o nivel resultante pelo ADC. Um filtro bem fuleiro mesmo, tipo 2 resistores e 2 capacitores.
É mesmo, esse circuito costumam chamar também de integrador.
Se não me engando o microcontrolador que está usando - PIC16F877 - acho que tem módulo comparador analogico, o que permitiria um ajuste externo por trimpot do nivel de compraração. Tem um site interessante esplicando a teoria disso:
http://www.mikroe.com/chapters/view/8/c ... g-modules/+++
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 16:12
por cfreund
Terra chamando Aquino e André....rs
Bacana a dica do CCP. A coisa ficaria bem enxuta.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 16:22
por andre_luis
Na verdade, a dica do Aquino poderia ser até mais aconselhável se quizer portar depois para um PIC mais simples ( sem comparador analógico ), pois com uma simples entrada A/D adicional poderia resolver.
+++
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 16:24
por Red Neck Guy
Olha, eu faria com o capture, mas aqui é um fórum e eu gosto de propor soluções alternativas.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 16:35
por cfreund
andre_teprom escreveu:Na verdade, a dica do Aquino poderia ser até mais aconselhável se quizer portar depois para um PIC mais simples ( sem comparador analógico ), pois com uma simples entrada A/D adicional poderia resolver.
No caso, eu votaria por utilizar interrupção. Além de economizar hardware, pouparia o colega das Idiossincrasias de um ADC.
Aquino escreveu:Olha, eu faria com o capture, mas aqui é um fórum e eu gosto de propor soluções alternativas.
É válido Aquino. Só que, aumentaria o trabalho e diminuiria a confiabilidade. Por isso meu comentário.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 16:46
por cfreund
erik.flores escreveu:cfreund
Me ajude em forma de exemplos que eu vou entender melhor.
Eu uso o PIC 16F887 e o compilador CCS.
Eu já tenho um timer ativo, o timer1 para contar 1 segundo..
Preciso ativar outro timer?
Qual a frequência e ciclo desse sinal?
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 17:45
por erik.flores
cfreund escreveu:erik.flores escreveu:cfreund
Me ajude em forma de exemplos que eu vou entender melhor.
Eu uso o PIC 16F887 e o compilador CCS.
Eu já tenho um timer ativo, o timer1 para contar 1 segundo..
Preciso ativar outro timer?
Qual a frequência e ciclo desse sinal?
Cara to tentando como o amigo Andre disse mas com a função compare com CCP1 e CCP2.
Mas não to conseguindo ver uma solução ainda com isso.
Parece uma coisa tão simples, mas ta quebrando minha cabeça. rs
Bom cfreund
Eu coloquei pro microcontrolador gerar uma onda através do timer1.
Quando o timer contasse 4 vezes ele estourasse, então daria 1 segundo.
Então estabeleci pra cada contagem dessa do timer através de comparação de números par e ímpar, que gerasse um sinal High ou Low.
Então a cada 1 segundo ele liga 2 vezes e desliga 2 vezes.
Re: Leitura de um sinal pulsante ou PWM

Enviado:
17 Mai 2014 17:52
por cfreund
Veja se entendi bem:
Você precisa identificar três situações de um pino.
1. Nivel Alto
2. Nivel Baixo.
3. Pulsando a 2 Hz com duty cycle de 50%.
É isso?