Ir ao conteúdo
  • Cadastre-se

Debouncing para iniciantes


Angelo Eletronic

Posts recomendados

Estou criando um novo topico pois vi muitos aqui querendo aprender a fazer um debouncing ou seja,por exemplo,um led so aciona se o botão 1 for pressionado e segurado por 2 segundos.

Aqui vou dar uma breve descrição e depois o codigo fonte em C.

Metodo Debouncing:

O metodo debouncing pode ser utilizado para certificar que uma chave(ou qualquer coisa) está acionada,verificando se a mesma está acionada por um determinado tempo,tambem pode ser utilizado para ativar comandos,por exemplo você tem um programa sendo rodado num MCU PIC e para entrar nas informações dele você segura * por 10 segundos,é uma aplicação ao debouncing;

--------------------------------------------------------------------------------------

Codigo em c.

Podemos fazer utilizando um simples delay. por exemplo:


if(botao = 1)
{
delay_ms(100);
if(botão = 1)
{
// Botão acionado.
}
else if(botão = 1)
{
// nao esperou tempo suficiente
}
{

Espero não ter errado e ter ajudado.

Angelo.

Link para o comentário
Compartilhar em outros sites

Excelente iniciativa, Angelo !!!

Só faltou explicar aos iniciantes o que é Debouncing.

Por definição, quando apertamos um botão, o qual possui um contato mecânico, é gerada uma série de ruidos aleatórios chamados de spikes. Ou seja, a tensão instantânea sobre o botão pode ser qualquer valor, entre os valores que seriam obtidos com o botão em repouso e com o botão ligado após um tempo longo.

Isto pode ser observado com um osciloscópio digital.

A duração desses spikes é pequena, geralmente na ordem de milisegundos, mas o efeito prático é o de que durante esses poucos milissegundos, uma leitura efetuada nesse botão pode interpretar que ele está ligado ou desligado, devido aos ruidos aleatórios que são gerados pelo contato mecânico.

Porém, para um microprocessador, alguns milissegundos são uma eternidade, ou seja, por exemplo, após detectar que o botão foi acionado, mediante UMA ÚNICA LEITURA DO BOTÃO, nosso programa pode executar as funções correspondentes e voltar ao mesmo ponto anterior da leitura do botão, EM MENOS DE 1 milissegundo !!!!

Assim, o efeito que temos é que em vez de o nosso programa interpretar que apertamos o botão APENAS 1 VEZ, ele pode acabar interpretando que apertamos o botão mais de 20 vezes em seguida !!!!!

Claro que dependendo do programa, o resultado pode ser catastrófico !

Na verdade, o termo DEBOUNCING significa uma técnica que nos dê certeza de que o botão apertado apenas uma vez seja interpretado corretamente como apenas UM aperto de botão.

Por outro lado, se apertarmos o mesmo botão por 5 vezes seguidas em um segundo, o nosso programa tem de conseguir ler corretamente 5 apertos de botão !

Como a rotina mostrada pelo amigo Angelo mostra, uma maneira de fazer isto é usarmos uma rotina de delay, de pelo menos 50 milisegundos por exemplo, que detecta que o botão foi apertado, espera por 50 msegundos, e verifica se o botão foi solto ou não.

Caso o botão ainda esteja apertado, a rotina espera de novo 50 milisegundos, e novamente verifica se foi solto, até que finalmente o botão seja solto, sendo que apenas neste instante o programa considera queo botão foi apertado mesmo, e continua a execução.

Já que o Angelo colocou um esboço em C, vou colocar um esboço em Basic do PIC SIMULATOR IDE, que pode ser fácilmente adaptado para o MikroBasic.

Supondo que temos um hardware em que o contato do botão esteja normalmente em nivel lógico 1 em repouso, e quando apertado vá para nivel lógico 0 , segue este trecho de programa :

Symbol botao = PORTD.0 ' botão colocado neste pino do PIC

...

IF botao = 0 Then

GOTO apertado

ENDIF

' Aqui segue o programa sem nenhum aperto do botão

...

apertado: ' Rotina de Debounce

WAITMS 50

IF botao = 1 Then

GOTO botaoconfirmado

ENDIF

GOTO apertado ' Espera soltarmos o botão

botaoconfirmado:

' Aqui segue o programa sabendo que o botão foi apertado !

...

Espero com isto ter complementado o tópico.

Bons usos a todos.

Paulo

Link para o comentário
Compartilhar em outros sites

Bouncings também ocorrem em circuitos não dotados de microcontroladores, quando nos deparmos com isso, pode se fazer debounce via hardware, usando uma simples célula RC, o valor do tempo de carga do capacitor, sera o tempo necessário até que sinal de entrada do botão se estabilize!

Vejam essa figura:

http://school.mech.uwa.edu.au/~nscott/How_to_do_stuff/micro_crash_course/int0/capacitor_74HC14_debounce.gif

abs.

Link para o comentário
Compartilhar em outros sites

Excelente iniciativa, Angelo !!!

Só faltou explicar aos iniciantes o que é Debouncing.

Obrigado. Mesmo se eu explicasse o debouncing eu não conseguiria explicar tão bem como você ^_^

Felipe.:

Agradeço sua colaboração,e achei muito interessante seu circuito dos capacitores,etc. Gostei. ^_^

Abraços...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...