Página 1 de 1
Tratar onda quadrada

Enviado:
03 Jan 2017 15:28
por wBB
Usando um PIC com clock de 8MHz (ou mais, caso precise aumentar...), é possível tratar um sinal de onda quadrada e converter de um sinal do tipo 1 para o tipo 2 indicado na imagem anexa? Se sim, como?
Re: Tratar onda quadrada

Enviado:
03 Jan 2017 16:58
por Red Neck Guy
Se o tempo de 500us é sempre fixo, você pode esquecer todas as outras transições e trabalhar apenas com a primeira borda de subida.
Com essa abordagem, bastaria ligar o sinal em um pino com interrupção externa e usar um timer para contar os 500us.
Agora se essa variação que você falou nos 500us é crítica pra ti, dá pra fazer amostrando o pino e definindo um time-out, mas vai ter um jitter na subida.
Re: Tratar onda quadrada

Enviado:
03 Jan 2017 21:41
por wBB
Esse tempo de 500us é aproximado, mas não varia muito não... porém, não posso estabelecer esse tempo inicial para ser ignorado ( em torno de 500us, por exemplo), pois o sinal é muito irregular.
A outra opção que você sugeriu é fazendo um pooling no pino que recebe o sinal, suponho? Em princípio vejo como difícil de funcionar também pois poderia gerar erro de leitura caso uma borda ou outra do sinal fosse ignorada no final.
Uma observação: eu perguntei sobre como fazer esse tratamento do sinal por meio de microcontrolador, mas na verdade não é obrigatório que seja dessa forma. Se tiver alguma alternativa...
Obrigado.
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 08:49
por Maffeis
Coloca um capacitor na entrada do pino
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 09:28
por wBB
Isso pode gerar um grande erro de detecção do final do tempo do trecho com o trem de pulsos devido à descarga do capacitor após a última borda de descida.
Obrigado!
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 11:08
por andre_luis
Não bastaria detectar a 1a borda de subida após passados pelo menos 100ms, e só decidir pelo final do frame após passados 150us sem receber mais nenhum pulso ?
De qualquer modo, se o tempo do pacote varia, um erro bem alto estaria associado co final da detecção (+-150ms)menos(+-50ms).
A proposito, esse sistema precisa funcionar em tempo real ?
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 11:51
por wBB
André, o erro ficaria muito alto dessa maneira realmente.
Não, não precisa funcionar em tempo real.
Acho que já encontrei um jeito: vou ler apenas a primeira borda de subida via interrupção externa, desabilitar a interrupção, colocar um delay para ignorar o trem de pulsos, habilitar a interrupção e aguardar a próxima borda de subida, a qual deverá ser o início do próximo trem de pulsos, concluindo assim o ciclo (tenha o tempo total que tiver). Esses passos serão feitos na rotina de interrupção externa.
Obrigado.
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 12:00
por Red Neck Guy
Não precisa desabilitar a interrupção externa.
Você pode utilizar um dos timers para gerar precisamente outra int pra baixar o pino.
Algo
cpp code
void irq_ext(void){
if(!PINO_SAIDA)
CONFIGURA_INT_TIMER();
PINO_SAIDA = 1;
}
void irq_timer(void){
PINO_SAIDA = 0;
}
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 13:38
por MOR_AL
Considere que seu sinal possui três etapas, como na figura 1, que vou chamar de pulsante 1, estável 0 e pulsante 2.
Na etapa pulsante 1, estabeleça o valor do maior período em '0'. No seu exemplo seria de 150us. Observe que este tempo é bem menor que em estável 2.
Se o maior período em '0' de pulsante 1 for muito menor que o período em '0' de estável 2, ENTÃO:
Use um mono-estável retrigável, com disparo na transição negativa, recebendo o seu sinal. O período seria um pouco superior ao maior período em '0' de pulsante 1 (e de pulsante 2). Seu mono-estável deve ir para '1' na transição negativa e iniciar o período de tempo do mono-estável na transição positiva.
Seu erro seria idêntico ao período do mono-estável.
Como o período em '0' de pulsante 1 (e pulsante 2) é da ordem de 200us e o período estável 2 é da ordem de 100ms ou 800ms, portanto um mínimo de 500 vezes maior, então o seu erro relativo de tempo seria de 0,2%.
O problema é se no período estável 2 ocorrer um pulso de ruído. Aí você terá que pensar em uma rotina que considere esta possibilidade.
MOR_AL
Re: Tratar onda quadrada

Enviado:
04 Jan 2017 14:58
por wBB
Obrigado pessoal.
Vou tentar implementar com as dicas de vocês.