Interface com linha de comando para microcontrolador

Quando utilizamos um computador, é possível enviar comandos e receber respostas através de periféricos como o mouse, teclado, monitor e placa de som, possibilitando que o usuário realize inúmeras tarefas. Um desenvolvedor de programas para plataformas computacionais pode utilizar prontamente estes periféricos para facilitar a comunicação entre o usuário e as funcionalidades do programa que este escreve.

Para alguém desenvolvendo um projeto utilizando sistemas embarcados (ex.: microcontrolador), os recursos limitados destes dispositivos muitas vezes dificultam a implementação ou interface direta com periféricos conhecidos. Esta dificuldade reside no fato de que é muito mais fácil desenvolver um programa no PC que empregue teclado e monitor, por exemplo, do que desenvolver programa semelhante porém utilizando um microcontrolador como sistema computacional, ao invés do PC.

Alternativas para contornar este problema incluem o emprego de displays e teclados específicos para microcontroladores, no entanto estes são muito mais limitados do que seus equivalentes para computadores (Figura 1).

fig1_pcversusuc

Figura 1 – Periféricos para interface com usuário – PC (à esquerda) versus microcontrolador (à direita).

 

E se fosse possível comandar um microcontrolador através de um PC? Mostrarei que isto é possível e relativamente fácil de se fazer através de um projeto com microcontrolador utilizando o computador e seus periféricos para criar uma interface que envia comandos (teclado) e recebe respostas (monitor) ao invés de implementar display e um teclado pequenos. O microcontrolador estabelecerá comunicação com o PC através de uma interface serial (UART) emulada na porta USB e a interface de leitura, avaliação de comandos e impressão de respostas será implementada com um REPL.

1) Você sabe o que é REPL?

Um REPL [1] é um laço computacional que realiza a interface entre um sistema computacional e um usuário/operador. Através dele, o usuário pode enviar comandos e receber respostas do sistema (Figura 2), que lê (“read”) e avalia (“evaluate”) cada comando inserido, retornando (“print”) ao usuário uma resposta adequada e reiniciando o ciclo (“loop”). Implementações comuns de um REPL envolvem o emprego de um interpretador de linha de comando [2] ou mesmo uma interface gráfica composta por botões e outras estruturas interativas [3].

fig1_REPL_schematic

Figura 2 – Diagrama de blocos de um sistema REPL e usuário.

 

Sistemas REPL são muito comuns e essenciais em diversos dispositivos computacionais, pois disponibilizam ao usuário um meio para executar funções no sistema alvo. As implementações mais conhecidas são as linhas de comando em terminais de sistemas operacionais Unix/Linux e Windows (Figura 3). Cada periférico presente no computador possui um tipo específico de driver, que consiste em um software responsável por identificar e gerenciar o dispositivo conectado ao computador, além de traduzir a informação enviada pelo seu hardware ao sistema operacional.

Por exemplo, um teclado possui um driver que converte os sinais elétricos equivalentes quando se pressiona teclas em um padrão binário que pode ser detectado e utilizado por programas instalados no PC. Este programa poderá enviar a resposta ao driver do monitor, que por sua vez envia a resposta digital ao hardware do monitor responsável por mostrar as imagens em sua tela.

Em projetos que envolvem o uso de sistemas embarcados tais como microcontroladores, um REPL com linha de comando constitui uma grande vantagem para testar funcionalidades do sistema e visualizar ideias implementadas em projetos mais agilmente, sem necessitar do desenvolvimento de interfaces gráficas ou de integração de displays físicos no circuito.

fig2a_cli

Figura 3 – interface com linha de comando em Linux (superior) e Windows (inferior).

 

2) Projeto REPL + Tiva Launchpad

Neste projeto, será desenvolvido um projeto REPL com o kit Tiva Launchpad [4] através de uma interface com linha de comando textual. Este kit possui um microcontrolador com núcleo ARM Cortex M4F, 256 Kb de memória de programa, 32 Kb de memória de dados, diversos periféricos (ADC, SPI, USB, I²C, entre outros), possibilitando a criação de projetos através das IDEs Code Composer ou Eclipse, além de outros programas no site do fabricante. Através deste projeto, será possível acessar diretamente periféricos do microcontrolador presente no kit, verificar e armazenar dados na memória, automatizar tarefas através de scripts, entre outras funções, facilitando o desenvolvimento de projetos que necessitem da interação com seres humanos ou verificação visual de resultados através de uma interface simplificada.

No projeto, a entrada de comandos será realizada através do teclado e as respostas serão visualizadas através de programa cliente Putty [5] que cria uma interface serial virtual entre o kit e o PC (porta COM) e será instalado na plataforma hospedeira (computador). Os comandos digitados pelo usuário serão transmitidos pelo Putty ao kit Tiva através da interface criada pelo segundo microcontrolador do kit (Figura 4). Esta interface disponibiliza uma porta USB serial virtual para comunicação com o primeiro microcontrolador (dispositivo principal), podendo também ser utilizada para debug de programas criados com o kit.

tiva_icdi_fig1a

Figura 4 – Kit Tiva Launchpad EK-TM4123GXL: interface ICDI (microcontrolador secundário) e microcontrolador principal.

 

Para interpretar os comandos recebidos e imprimir as respostas, o microcontrolador principal do kit será empregado, conectando-se com a interface ICDI através dos pinos RX e TX do periférico UART0 presente no primeiro microcontrolador. Assim, é possível conectar as entradas e saídas utilizadas pelo usuário ao microcontrolador, completando o sistema REPL proposto. Um diagrama de blocos é mostrado na Figura 5 para auxiliar na compreensão deste projeto.

fig4_REPL_Tiva_sch

Figura 5 – Diagrama de blocos conceitual do REPL implementado no kit Tiva Launchpad EK-TM4G123GXL.

 

3) Conclusão

Neste artigo, apresentou-se o REPL e suas características. O emprego deste tipo de laço computacional em sistemas embarcados possibilita criar uma interface homem-máquina com o mínimo de código possível. O projeto de um REPL implementado no microcontrolador do kit Tiva Launchpad foi iniciado, visando fornecer uma plataforma base para criação de projetos testáveis e interativos.

Nos próximos artigos, o programa deste projeto será detalhado, bem como um tutorial para implementar funções através dele. Fique ligado nas próximas postagens e sinta-se à vontade para contribuir na seção de comentários e sugestões abaixo!

– Referências:

[1] REPL
[2] CLI
[3] GUI
[4] Kit Tiva Launchpad EK-TM4G123GXL
[5] Putty