Debouncing de teclas usando Soft Timers

Conheça neste artigo de Rafael Dias como implementação Soft Timers para debouncing de teclas, continuação do seu artigo sobre 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

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.

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!

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H