• Nenhum resultado encontrado

Extensão do Simulador SimuS com uso do Protocolo Firmata

N/A
N/A
Protected

Academic year: 2021

Share "Extensão do Simulador SimuS com uso do Protocolo Firmata"

Copied!
6
0
0

Texto

(1)

Extensão do Simulador SimuS com uso do Protocolo Firmata

Alonso M. Amparo Neto¹, José Antonio dos S. Borges², Gabriel P. Silva¹

¹Departamento de Ciência da Computação ²Núcleo de Computação Eletrônica

Universidade Federal do Rio de Janeiro (UFRJ) – Cidade Universitária 21941-916 – Rio de Janeiro – RJ – Brasil

alonsoman@ufrj.br, antonio2@nce.ufrj.br, gabriel@dcc.ufrj.br Abstract. SimuS is a hypothetical processor simulator intended to be used on

computer architecture classes. Its user interface has some virtual I/O devices, but the integration with Arduino allow the users to have access to actual sensors and actuators. The communication between the host and Arduino uses Firmata Protocol. The project is under development and currently SimuS is able to initialize Arduino and control its digital ports, including PWM output. By the end of this project, SimuS will be able to use all the resources of the Firmata protocol, including analog-to-digital conversion. The source code of the Firmata client library written in Object Pascal will be available to download.

Resumo. SimuS é um simulador de processador hipotético voltado para o ensino

de arquitetura de computadores. Sua interface de usuário possui alguns dispositivos de E/S virtuais, mas a integração com o Arduino permite que os usuários tenham acesso a sensores e atuadores reais. A comunicação entre o host e o Arduino usa o protocolo Firmata. O projeto está em fase de desenvolvimento e atualmente o SimuS é capaz de inicializar o Arduino e controlar suas portas digitais, incluindo a saída PWM. No final deste projeto, o SimuS poderá usar todos os recursos do protocolo Firmata, inclusive conversão analógico-digital. O código-fonte da biblioteca do cliente Firmata, escrito em Object Pascal, estará disponível para download.

Introdução

O SimuS é um simulador voltado para o ensino de arquitetura de computadores, emulando a arquitetura do processador Sapiens, de relativa simplicidade e cujo funcionamento é de fácil compreensão. A sua simplicidade atende o objetivo final que é possibilitar ao aluno a compreensão do funcionamento da arquitetura do computador. Todavia, apesar de possuir alguns dispositivos virtuais de entrada e saída associados à interface do simulador, boa parte das possibilidades de processamento se resumem ao uso de variáveis com valores previamente carregados na memória do simulador.

Dessa forma, o SimuS ficava bastante limitado aos dados pré-definidos pela entrada do usuário. A integração com o Arduino e plataformas similares permite expandir as possibilidades de programação de baixo nível do SimuS. Por meio de instruções específicas, é possível ao programa executado no simulador controlar LEDs conectados ao Arduino, receber dados de sensores, controlar motores, servos, displays, enfim, uma infinidade de dispositivos que podem ser conectados ao Arduino.

A interface entre o computador hospedeiro e o Arduino será realizada por meio do protocolo Firmata para comunicação com microcontroladores. O uso desse protocolo permite simplificar o processo, reduzindo a necessidade de se implementar um novo

(2)

protocolo totalmente do zero, já que existe uma implementação disponível do código do servidor para o Arduino.

O objetivo desse projeto é construir uma implementação completa de uma biblioteca cliente para Firmata em Object Pascal, que não está disponível na comunidade, e tornar o SimuS capaz de controlar dispositivos conectados ao Arduino.

Arquitetura do SimuS

A sua arquitetura é uma evolução do processador Neander-X [Borges e Silva 2017], ideal para introduzir o funcionamento de um processador e de sua programação em linguagem de montagem.

O diagrama em blocos do processador Sapiens é mostrado na Figura 1, onde destaca-se as seguintes características:

Acumulador de 8 bits;

Apontador de instruções (PC) de 16 bits; Apontador de pilha (SP) de 16 bits; Códigos de condição (flag) N, Z e C;

Modos direto, imediato e indireto de endereçamento dos operandos em memória; Operações de entrada e saída de dados para dispositivos E/S;

Instrução de TRAP para simular a chamada de instruções no nível de sistema operacional;

Novas instruções de movimentação de pilha, deslocamento do registrador, soma e subtração com vai-um/vem, entre outras.

Em arquiteturas de processadores reais, a instrução TRAP tem a função de chamar funções do sistema operacional. Como não há um sistema operacional carregado no SimuS, essas operações são desviadas para serem executadas internamente no simulador. O simulador SimuS interpreta a instrução TRAP como um pedido para que uma determinada operação de E/S seja realizada. O número do trap, ou seja, a função que está sendo solicitada é passada no acumulador. A instrução TRAP tem um operando adicional que é o endereço de memória onde os parâmetros adicionais necessários são passados para o módulo do simulador responsável pela realização da operação. Isso ajuda a contornar o problema da carência de registradores do processador Sapiens.

(3)

Arduino e Firmata

Esse projeto fará uso de um Arduino Uno. Nesse modelo de Arduino há um microcontrolador ATmega328P com 14 portas digitais, numeradas de 0 a 13, sendo que há um LED embutido na porta 13 que pode ser controlado pelo usuário. Além disso, dessas portas digitais, os pinos 3, 5, 6, 9, 10 e 11 são capazes de gerar onda PWM por hardware. Adicionalmente, há 6 portas analógicas numeradas de A0 a A5 que podem realizar conversão analógico-digital com 10 bits de precisão [SparkFun Eletronics 2012].

O Arduino possui uma IDE própria na qual podem ser escritos programas em linguagem C denominados sketches, mas esta IDE não será a ferramenta de programação no escopo deste projeto. O único uso desta IDE será para carregar o sketch StandardFirmata.ino no Arduino para realizar o papel de servidor no protocolo. Feito isso, o foco estará presente na interação entre o SimuS e o Firmata.

No Arduino, o funcionamento básico para ter acesso e gerenciar um pino consiste em inicialmente definir um modo de funcionamento para esse pino e então realizar a leitura ou escrita nesse pino, de acordo com o modo de funcionamento definido previamente. O sketch apresentado na Figura 3 exemplifica esse funcionamento.

Quando se está programando o Arduino diretamente, essa forma de controlá-lo é suficiente. Entretanto, quando se deseja enviar comandos para o Arduino externamente, por meio de uma aplicação, precisaríamos de uma maneira de enviar comandos ao Arduino para realizar essas tarefas, tais como definir o modo de um pino e o seu nível lógico. É nesse momento que o protocolo Firmata tem sua utilidade.

Esse protocolo funciona com um servidor implementado em uma plataforma com microcontrolador se comunicando através de uma interface serial ou WiFi com um computador hospedeiro, onde um cliente envia os comandos e recebe as respostas do microcontrolador [Hans-Christoph Steiner 2009].

A implementação mais completa que existe para o servidor Firmata é aquela feita para os diversos tipos de Arduino, embora existam implementações disponíveis para outros tipos de plataformas baseadas em microcontroladores.

Figura 2. Placa do Arduino

(4)

Em termos de biblioteca Firmata para o cliente, há implementações em diversas linguagens, tais como C, Python, Perl, Javascript, Java, PHP, só para citar algumas. Não existe, contudo, implementações da biblioteca para Object Pascal, a linguagem na qual o simulador SimuS foi programado. [Firmata Protocol Version 2.6 2017]

SimuS e Firmata

No SimuS, como vimos, há uma instrução que tem como função simular as operações de entrada e saída, emulando o funcionamento de um sistema operacional: as instruções de TRAP. Será este o mecanismo que iremos utilizar para a comunicação entre o programa simulado e os pinos do Arduino. Essas ações serão realizadas sob o controle do simulador SimuS, fazendo uso de um cliente Firmata. Essa implementação ao Framework Johnny-Five, que é voltado para dispositivos IoT e robótica. [Cvjetkovic e Matijetvic 2016]

Na programação do Arduino, a dinâmica é simples. Deve-se definir um modo de funcionamento para o pino, antes de fazer qualquer atividade de leitura ou escrita referenciando o pino desejado. Para definição do modo de funcionamento de um pino, passaremos o valor 201 no acumulador e, no endereço de memória correspondente ao parâmetro adicional da instrução, serão passados dois parâmetros: um byte correspondente ao número do pino e um outro referente ao modo, de acordo com a definição a seguir:

INPUT (#0): Modo padrão dos pinos. Esse modo necessita de pouca corrente para alternar de estados e é ideal para implementar sensores de toque capacitivos, ler o estado de um LED do tipo fotodiodo.

OUTPUT (#1): Esse modo de funcionamento permite enviar até 40 mA. Essa corrente é suficiente para acender LED e ativar diversos sensores, mas, é insuficiente para relês, solenóides ou motores.

PWM (#2): Esse modo de funcionamento tem como função representar as escritas analógicas. E pode representar, de maneira digital, variações de tensão. Com esse recurso, podemos ajustar a intensidade do brilho de um LED, por exemplo. Apesar de o Arduino usar valores entre 0 e 255, estaremos usando valores entre 0 e 1023. ANALOG INPUT (#4): Nesse modo de funcionamento, o Arduino irá retornar um

valor entre 0 e 1023 para cada leitura realizada no pino. A conversão analógico-digital é realizada pelo próprio Arduino.

SERVO (#5): Esse modo de funcionamento de pino é uma abstração do Firmata. Quando ativado desse modo, aquele pino fará o trabalho de comunicar com um servo da maneira correta. A ativação desse modo automaticamente realiza um attach_servo() internamente no SimuS.

Os TRAPs necessários para o funcionamento dessa integração do SimuS com o Arduino são:

DigitalWrite (#202): este TRAP recebe dois parâmetros em memória: o primeiro é o pino a ser escrito e o segundo parâmetro é o valor, HIGH (‘1’) ou LOW (‘0’) que deve ser escrito.

DigitalRead (#203): este TRAP recebe apenas um parâmetro, que é o pino a ser lido. E retorna no acumulador o valor lido (‘0’ ou ‘1’) no pino definido na entrada. AnalogRead (#204): este TRAP recebe um único parâmetro o número do pino a ser lido e retorna na posição seguinte um valor de 16 bits que contém um valor

(5)

inteiro de 0 a 1023 representando o valor lido. A tensão de referência assumida é sempre 5 volts.

PWM (AnalogWrite) (#205): Essa TRAP tem um comportamento semelhante ao DigitalWrite. Ela irá receber dois parâmetros, o primeiro é um byte com o número do pino, o segundo é uma palavra de 16 bits como o “duty cycle” da onda PWM que deverá ser gerada. Uma vez chamada, a porta irá continuamente gerar essa onda repetidamente. Esse segundo parâmetro é um valor entre 0 e 1023, que é mapeado para 0 a 255 no Arduino.

Servo (#206): Este último TRAP tem por função definir a posição que um servo deve se posicionar. Ela recebe dois bytes como parâmetros: o primeiro define o pino, o segundo define o ângulo da rotação, geralmente um valor entre 0 e 180. O trabalho consiste em modificar o simulador SimuS e integrá-lo ao protocolo Firmata. Para isso, serão incluídas as novas rotinas de TRAP e criados exemplos de uso para cada um desses novos TRAPs. Ao final de todo o processo, o SimuS deverá ser capaz de fazer uso do máximo de recursos do protocolo.

Atualmente, o SimuS já é capaz de interagir com as portas digitais do Arduino. Uma implementação inicial da biblioteca cliente do Firmata já está em construção e permite iniciar o Arduino que já tenha o protocolo pré-carregado, configurar o modo de funcionamento de um pino e definir um valor lógico HIGH ou LOW nessa porta. Na Figura 4, é apresentado um exemplo de programa escrito em linguagem de montagem do SimuS que pisca o LED presente no pino 13 do Arduino, equivalente a Figura 3 do Arduino.

(6)

O desenvolvimento do cliente Firmata está em andamento. Este apresenta as funcionalidades apresentadas acima, uma vez que está sendo utilizado pelo SimuS em seus TRAPs. Como a comunicação com o Arduino é realizada via interface serial, foi incluída no projeto parte da biblioteca Ararat Sinapse em Object Pascal. Essa biblioteca tem seu foco na implementação de redes. Entretanto, ela possui uma adição que é a possibilidade de lidar com portas seriais. Para a implementação do Firmata Pascal, especialmente essa adição que será utilizada como base para o envio e recebimento de dados com o Arduino e similares. [Lukas Gebauer 2012]

Conclusão

Neste artigo, foi apresentada uma proposta de interface do SimuS com o Arduino. Quaisquer dispositivos compatíveis com a plataforma do Arduino poderão ser utilizados, com o uso do protocolo de comunicação Firmata. Toda a implementação em linguagem de montagem deverá ser realizada por meio de TRAPs e elas tem por função ocultar a complexidade das operações de entrada e saída do usuário.

O trabalho a ser realizado consiste no desenvolvimento das rotinas de tratamento dos TRAPs propostos no simulador SimuS, além da implementação de uma biblioteca cliente Firmata em Object Pascal, que pretendemos deixar o código fonte disponível para a comunidade.

Atualmente o projeto ainda está em fase inicial de implementação, sendo assim o SimuS é capaz apenas de controlar as portas digitais do Arduino por meio do protocolo. Os modos de funcionamento e TRAPs propostas são de caráter inicial e estão sujeitas a mudanças de acordo com as necessidades do projeto.

Além disso, outros recursos suportados pelo Firmata serão estudados em uma fase mais avançada do projeto para serem adicionados ao SimuS recursos como motores de passo e os protocolos SPI, I²C e OneWire.

Referências

Borges, J. A. S., Silva, G. P. (2017) “SimuS - Um Simulador Para o Ensino de Arquitetura de Computadores”, WEAC 2017.

SparkFun Eletronics (2012) “Introduction to Arduino”,

http://create.coloradovirtuallibrary.org/wp-content/uploads/Curriculum/SparkFun/Beginner/Arduino_final_handout.pdf ,

Acessado em 24 de Setembro.

Hans-Christoph Steiner (2009) “Firmata: Towards making microcontrollers act like extensions of the computer”, NINE 2009.

Firmata Protocol Version 2.6 (2017) “Firmata Protocol Documentation”,

https://github.com/firmata/protocol, Acessado em 20 de Agosto.

Lukas Gebauer (2012) “Ararat Synapse”, https://www.ararat.cz/synapse/doku.php, Acessado em 22 de Setembro.

Vladimir Cvjetkovic, Milan Matijetvic (2016) “Overview of architectures with Arduino boards as building blocks for data acquisition and control systems”, International Journal of Online Engineering . 2016, Vol. 12 Issue 7, p10-17. 8p.

Referências

Documentos relacionados

O caso de gestão estudado discutiu as dificuldades de implementação do Projeto Ensino Médio com Mediação Tecnológica (EMMT) nas escolas jurisdicionadas à Coordenadoria

Optamos por escolher o tema gestão democrática a partir do PPP, primeiramente, porque a escola ainda não o possui, e, também, por considerarmos esse documento

Atualmente o predomínio dessas linguagens verbais e não verbais, ancorados nos gêneros, faz necessário introduzir o gênero capa de revista nas aulas de Língua Portuguesa, pois,

Quando mudei para o Brasil, uma das grandes diferenças que percebi é que a taxa equivalente ao overdraft, o cheque especial, era dez vezes mais no Brasil do que na

Quando se fala do risco biotecnológico como uma comunicação que viabiliza a formação de uma multiplicidade de estados internos em diversos sistemas sociais, pode-se perceber a

Outra surpresa fica por conta do registro sonoro: se num primeiro momento o som da narração do filme sobre pôquer, que se sobrepõe aos outros ruídos da trilha, sugere o ponto de

No final, os EUA viram a maioria das questões que tinham de ser resolvidas no sentido da criação de um tribunal que lhe fosse aceitável serem estabelecidas em sentido oposto, pelo

The DCF model using the Free Cash Flow to the Firm (FCFF) method, estimates in the first place the Enterprise Value of the company, that represents the value of all future cash