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
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

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

Software » Debouncing de teclas usando Soft Timers
Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rogerio Machado
Rogerio
04/08/2015 13:19
Pedro Henrique Bertoleti
phfbertoleti
03/08/2015 22:52

Muito bom post!

Rafael Dias
Rafael Dias
Reply to  phfbertoleti
04/08/2015 08:50

obrigado!

Talvez você goste:

Séries



Outros da Série

Menu