eliminar ruídos na entrada

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

eliminar ruídos na entrada

Mensagempor SoMeWhErE » 23 Jun 2007 12:14

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
Avatar do usuário
SoMeWhErE
Byte
 
Mensagens: 119
Registrado em: 20 Jun 2007 18:09
Localização: Charqueada

Mensagempor phophollety » 23 Jun 2007 13:24

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
"3 minutes of boring code review means 3 hours less fixing LSD (Little Stupid Detail)" Dr. Mike Smith
"Dê-me um ponto de apoio e uma alavanca e moverei o mundo" Arquimedes
"Quando vejo um Alfa Romeo passar eu tiro o meu chapéu" Henry FORD.
Avatar do usuário
phophollety
Dword
 
Mensagens: 1511
Registrado em: 15 Out 2006 13:00
Localização: Santo André São Paulo, Brasil

Mensagempor lpagano » 24 Jun 2007 21:18

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.
lpagano
Byte
 
Mensagens: 393
Registrado em: 06 Nov 2006 14:23

Mensagempor Mersin » 24 Jun 2007 21:20

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!
Mersin
Mersin
Byte
 
Mensagens: 121
Registrado em: 22 Out 2006 13:07
Localização: Goiânia

Mensagempor KrafT » 24 Jun 2007 21:34

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...
"..."Come to the edge," he said. And so they came. And he pushed them. And they flew."― Guillaume Apollinaire
Avatar do usuário
KrafT
Dword
 
Mensagens: 2228
Registrado em: 11 Out 2006 14:15
Localização: Blumenau -SC

Mensagempor fabio_ » 28 Jun 2007 17:13

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
fabio_
Byte
 
Mensagens: 177
Registrado em: 13 Jun 2007 12:08


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x