Página 1 de 1

eliminar ruídos na entrada

MensagemEnviado: 23 Jun 2007 12:14
por SoMeWhErE
ola pessoal

gostaria de saber a opinião de vocês mais experientes que eu...que estão há varios anos nesse ramo.....

qual a maneira mais eficiente que vocês usam pra eliminar o ruído provocado por um botão.....

exemplo ao ler as entradas onde esta localizado um botão....e ao pressionar esse botão ele gera ruidos...e o programa não funciona corretamente....

valew

MensagemEnviado: 23 Jun 2007 13:24
por phophollety
Basicamente há dois métodos, por soft e por hard..

por soft você faz um pequeno looping (digamos que cada instrução do seu uC demora 1uS) então você verifica 200000x se o botão está pressionado continuamente..., assim elemina os ruidos de curta duração..

Ou faz um pequeno filtro RC com dois resistores e um pequeno capacitor, algo entorno de 10nF

MensagemEnviado: 24 Jun 2007 21:18
por lpagano
Dá para fazer um debouncing também, mas não sei como, só ouvi dizer de colegas com mais experiência.

Tenta usar a dica que o phophollety deu, de usar um resistor e capacitor em paralelo. Eu fiz isso num circuito meu e deu certinho, nunca mais tive ruído provocado por chaves. Ligue esse resistor e capacitor entre a linha com o suposto ruído e a terra.

Só para detalher: no meu caso eu usei um resistor de 100k em paralelo com um capacitor de 10nF. Ficou um "xuxuzinho" de bom.

Boa sorte.

MensagemEnviado: 24 Jun 2007 21:20
por Mersin
Olá amigo,

Nos meus 3 anos de experiência com mC, eu me preocupava muito com isso no início, daí sempre resolvia o problema por software, colocando uma variável booleana para representar a leitura do pino do botâo e fazia o que o Phophollety disse, ou seja, criava um loop de apenas 30x, onde eu fazia essa variável igual a ela mesma "OR" valor atual do botão, daí das 30x ele lesse apenas uma vez em "on", então a operação "OR" deixava a variável dizer que o botão havia sido pressionado.

O que faço hoje´é o seguinte: utilizo o botão ou botões na porta B ativando o Pullup da mesma e fazendo com que o pussbottom jogue o pino à terra e acredite, não me preocupo mais com ruido, leio apenas uma vez o estado do pino e não tenho problema algum com isso!

Vale a pena tentar!

Valeu!

MensagemEnviado: 24 Jun 2007 21:34
por KrafT
Eu uso ler dentro do timer:
Código: Selecionar todos
   if(!input(CH2)){
      if(!--TempoCH2){
        CH2Acionada=True;
       
      }

   }
      else TempoCh2=50;


Pq usar componente externo se software se paga uma vez só?

O mesmo vale para teclado multiplex... So que nesse caso uns diodinhos liberam alguns I/O's preciosos...

MensagemEnviado: 28 Jun 2007 17:13
por fabio_
em ASM eu uso esta rotina e funciona blz

BTFSC BT1 ; botão 1 está acionado?
GOTO $+8
CLRF AUX ; filtro de 1 mseg para garantir acionamento
DECFSZ AUX,F
GOTO $-1
BTFSC BT1 ; botão 1 continua acionado?
GOTO $+3 ; não
BSF BOTAO1 ; sim, indica botão acionado
GOTO $+2
BCF BOTAO1 ; indica botão desacionado