Debouncing de teclas usando Soft Timers

debouncing
Este post faz parte da série Soft Timers. Leia também os outros posts da série:

Introdução

 

Aqui no Portal Embarcados já tivemos alguns artigos abordando o problema de debouncing de chaves em sistemas embarcados. Nosso colaborador Rodrigo Almeida escreveu um artigo excelente no ano passado descrevendo o que é debouncing e os seus efeitos em sistemas embarcados. E neste artigo demonstraremos a implementação de soft timers para debouncing de teclas.

 

Para isso usaremos o kit Connected Launchpad, da Texas Instruments, e suas teclas de usuário, que sofrerão o processo de debouncing. Para implementar o time delay utilizamos alguns soft timers, disponibilizados pela biblioteca Soft Timers. Como compilador, utilizamos o MDK Keil 5.0 da ARM.

 

 

Hardware Utilizado para Debouncing

 

A Connected Launchpad é um kit bem interessante, veja na Figura 1. Pensado para o mercado de IoT, ele vem equipado com um microcontrolador TIVA TM4C1294, conectividade ethernet com MAC e PHY integrado, USB 2.0, 4 LEDs de uso geral, 2 chaves de uso geral e conectores para as placas de expansão Booster XL da Texas. Acabei adquirindo esta placa pois o seu preço é extremamente baixo.

 

Soft Timers para Debouncing: Connected Launchpad
Figura 1 - Connected Launchpad da Texas Instruments

 

 

Aplicação de Soft Timers para Debouncing

 

O projeto demo (veja aqui o seu repositório) que irei demonstrar aqui realiza basicamente duas operações:

  • leitura das teclas USR_SW1/USR_SW2 com a respectiva atualização dos LEDs D1 e D2 e;
  • atualização de um LED que pode ser interpretado como um LED de Keep-Alive.

 

Essas duas tarefas são realizadas através de tasks gerenciadas por soft timers.

 

A função main() tem a função somente de inicializar o hardware, criar os soft timers e entrar em um laço infinito que só serve para manter o programa rodando e aguardando interrupções.

 

 

As tasks iniciadas pela função main() são responsáveis pela operação de alterar o status dos LEDs D1 e D2 quando as teclas USR_SW1 ou USR_SW2 forem pressionadas e também pela função de pisca-pisca realizado no LED D4.

 

Abaixo segue o código da task TaskMain(), que é a responsável por controlar os LEDs D1 e D2:

 

 

A “mágica” é realizada dentro do módulo BoardKeys (arquivo Board/BoardKeys.c). Ele é responsável por realizar a leitura das teclas e determinar se o seu status é ON ou OFF. Para isso também utilizamos uma task gerenciada por um soft timer que somente realiza a leitura das chaves e armazena o estado em uma struct que é utilizada internamente pelo módulo (struct STSwStatus stSwStatus).

 

 

Atentem-se que, como as tasks são executadas em contexto de interrupção, as tarefas executadas por elas devem ser as mais breves possíveis. Se o usuário colocar um loop infinito em um soft timer o sistema não funcionará a contento. Pensem que é um sistema colaborativo.

 

O código é bastante simples e pode ser portável para qualquer outra arquitetura de microcontrolador, só necessitando reescrever os drivers para os timers e GPIOs.

 

O código fonte do projeto de debouncing no ambiente Keil está disponível no github.

Outros artigos da série

<< Biblioteca de Soft Timers
Este post faz da série Soft Timers. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Rafael Dias
Sou Bacharel em Física formado pelo Instituto de Física da USP, mestre em Engenharia Elétrica, com ênfase em materiais nanoestruturados pela Escola Politécnica da USP e também Técnico em Automação da Manufatura pela Escola SENAI Anchieta. Trabalho com desenvolvimento de software, firmware e me arrisco com eletrônica analógica para instrumentação e controle. Nos tempos livres gosto de dar uma espairecida e pedalar um pouco.

3
Deixe um comentário

avatar
 
2 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Rogerio MachadoRafael Diasphfbertoleti Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Rogerio Machado
Visitante
Rogerio
phfbertoleti
Visitante
phfbertoleti

Muito bom post!

Rafael Dias
Visitante
Rafael Dias

obrigado!