Prévia do material em texto
SÍLVIO PETROLI NETO AMBIENTES COMPUTACIONAIS 86 Desenvolvimento de sistemas embarcados 4 UNIDADE 4 DESENVOLVIMENTO DE SISTEMAS EMBARCADOS INTRODUÇÃO O computador é uma máquina digital, que possui um hardware desenvolvido a partir dos princípios básicos de eletrônica e que pode ser programado, seguindo do nível mais baixo (mais próximo do hardware) até o nível mais alto (mais próximo do programador) de programação. Nessa unidade, serão trabalhados os conceitos necessários para o desenvolvimento de um hardware com função específica (sistema embarcado). Para isso, serão trabalhados os seguintes conceitos: 01. O que são registradores e como eles participam, efetivamente, da programação; 02. A programação de um processador, utilizando microprogramação e linguagem de baixo nível (Assembly); 03. Os princípios fundamentais da eletrônica, que deem subsídios para o desenvolvimento de um hardware com propósito específico; 04. As principais características de um microcontrolador e seu funcionamento básico; 05. O desenvolvimento de um protótipo, utilizando um Ambiente Integrado de Desenvolvimento. Ao utilizar esses conceitos pretende-se que sejam desenvolvidas as seguintes habilidades: 01. Compreender o uso dos registradores e sua importância na programação de microcontroladores; 02. Utilizar ambientes integrados de desenvolvimento na programação de baixo nível; 03. Utilizar prototipação na solução de problemas que integram hardware e software; 04. Desenvolver projeto que utilize programação de baixo nível no controle de hardware. 87 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Assim, a partir dos conceitos vistos nessa unidade, será possível desenvolver o protó- tipo de um sistema embarcado, que realize uma tarefa específica e possa ser utilizado de forma independente a um computador. A partir do desenvolvimento desse protótipo é possível perceber, com maior amplitude, o funcionamento das máquinas digitais, de que forma são concebidas e como são controladas a partir de sua programação. 1. REGISTRADORES E LINGUAGEM DE BAIXO NÍVEL Fisicamente, sabemos que o processador é um conjunto de transistores, interligados, capazes de executar o funcionamento de operações lógicas básicas, que definem, em conjunto, operações mais complexas, como as operações aritméticas, por exemplo. Porém, para entender o funcionamento lógico de um processador e como ele pode ser programado, precisamos abstrair o modelo físico e definir um modelo lógico de um pro- cessador. Isso quer dizer, esquecer por um momento toda a parte de circuito e definir o processador como um conjunto de registradores que podem ser manipulados para que os valores armazenados neles condizam com os resultados esperados de certas operações. Tokheim (2013, p. 19) define registrador como: Um registrador é um conjunto de células de memória arranjadas como um único dispositivo. Por exemplo, um registrador de 8 bits pode ser utilizado para armazenar informações que serão posteriormente utilizadas, ou o re- gistrador pode ser projetado para manipular os dados, como no caso do registrador de deslocamento. Este último dispositivo pode modificar o conte- údo dos dados, deslocando-os para a direita ou para a esquerda. Ou seja, registradores são partes pequenas de memória, fisicamente encapsuladas junta- mente ao processador, com fim de auxiliar diretamente as operações que o processador realiza durante a execução de tarefas. Ainda, os registradores possuem uma alta veloci- dade de leitura e escrita quando comparada a qualquer outra memória do computador. Pensando de forma hipotética, já que pensar em um processador real seria muito com- plexo, os principais registradores podem ser definidos como mostrado na Figura 1, que exibe o esquema lógico de um processador, com seus principais registradores. Além disso, embora não mostrado na imagem, todos os registradores possuem ligações en- tre eles, podendo haver transferência de dados de um registrador para outro. Figura 01. Hierarquia de memória Fonte: elaborada pelo autor. 88 Desenvolvimento de sistemas embarcados 4 Os principais registradores são, portanto: ` RI (Registrador de Instruções) – é o registrador responsável por indicar qual operação está em execução no momento; ` PC (Programm Counter) – é o registrador responsável por indicar qual o endereço de memória em que se encontra a próxima instrução a ser executada. É ele, portanto, quem indica o fluxo de execução; ` ACC (Acumulador) – é o registrador que participa de todas as operações aritméticas e lógicas, armazenando os resultados das operações e, muitas vezes, um dos operadores; ` REM (Registrador de Endereço de Memória) – é a interface do processador com o bar- ramento de endereços da memória. É ele o responsável por armazenar o endereço de memória que deve ser lido ou o endereço de memória onde determinado dado deve ser armazenado, em operações de leitura e escrita da memória; ` RDM (Registrador de Dados de Memória) – de forma análoga ao registrador de endere- ços, é a interface com o barramento de dados da memória. Em operações de leitura, é nele que o valor lido é armazenado e em operações de escrita é ele que contém o valor que deverá ser escrito na memória. Para entender melhor o funcionamento de cada um desses registradores, é necessário que tenhamos a definição de um computador hipotético, para o qual possamos definir algumas características que nos possibilitem a programação dessa máquina. Para isso, será utilizado o computador hipotético Neander, que segundo Weber (2012, p. 80): O computador hipotético Neander foi criado com intenções didáticas para permitir exercitar os conceitos básicos da arquitetura de Von Neumann. Ele foi inspirado no computador IAS, projetado por John Von Neumann, e visa facilitar ao aprendizado da programação em linguagem binária. Embora com dimensões reduzidas e muito primitivo para uso prático, ele é tão simples que você̂, sem muito esforço, pode programá-lo e projetá-lo. Para definir o funcionamento do computador hipotético Neander, é preciso entender que ele possui as seguintes características: ` Registrador de dados (RDM) de 8 bits; ` Registrador de endereços (REM) de 8 bits; ` Os valores negativos são representados utilizando-se complemento B (inverte-se o valor bit a bit e soma-se 1); ` Um apontador de programa (PC) de 8 bits; 89 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co A Tabela 1 mostra o conjunto de instruções possíveis para o computador hipotético Neander: Tabela 01. Instruções do Computador Neander ` Um acumulador (ACC) de 8 bits; ` O endereçamento de memória acontece de forma direta (o valor físico da memória é indi- cado como operador nas instruções); ` Todo operando é um endereço de memória, não havendo possibilidade de utilizar valores literais, ou seja, para somar dois números, por exemplo, é preciso que os números a se- rem somados estejam armazenados na memória; ` Existe apenas um conjunto pequeno de instruções e elas podem possuir 0 (zero) ou 1 (um) operador. CÓDIGO INSTRUÇÃO COMENTÁRIO 0000 (0H) NOP nenhuma operação 0001 (1H) STA end armazena acumulador – (store) 0010 (2H) LDA end carrega acumulador – (load) 0011 (3H) ADD end Soma 0100 (4H) OR end “ou” lógico 0101 (5H) AND end “e” lógico 0110 (6H) NOT inverte (complementa) acumulador 1000 (8H) JMP end desvio incondicional – (jump) 1001 (9H) JN end desvio condicional – (jump on negative) 1010 (AH) JZ end desvio condicional – (jump on zero) 1111 (FH) HLT término de execução – (halt) Fonte: elaborada pelo autor, baseado em Weber (2012, p. 82). Ao conjunto de instruções que um processador é capaz de executar damos o nome de Assembly e, no caso do computador Neander, o Assembly é como mostrado na Tabela 1. É possível perceber que a cada instrução existe um código binário associado e, para facilitar o entendimento, esse código está representado também em binário. Além disso,está definida a instrução que cada código representa e qual operação ele é capaz de executar. Percebe-se que algumas instruções não possuem operandos, como é o caso da operação NOT (que inverte o valor do que estiver armazenado no acumu- lador) e da instrução HLT (que indica o final do programa) Nas instruções que possuem operandos, o operando é representado por end, que indi- ca o endereço de memória em que se encontra o valor a ser considerado na operação. Além disso, operações que necessitem de mais de um operando, como é o caso da soma, um deles é sempre representado pelo próprio acumulador. No caso da soma 90 Desenvolvimento de sistemas embarcados 4 (instrução ADD) por exemplo, uma instrução ADD 05 significa somar o valor atual do acumulador com o valor do endereço 05 da memória, armazenando o resultado da soma no próprio acumulador. Perceba que o acumulador (registrador ACC) participa efetivamente de quase todas as operações, sendo o responsável pelo armazenamento de um dos operadores em muitos casos e sendo o responsável por armazenar o responsável por armazenar o resultado de todas as operações aritméticas e lógicas. Como exemplo, suponha que se deseje fazer uma soma de dois valores quaisquer. Essa operação seria representada por Soma = A+B em uma linguagem de alto nível (forma como os seres humanos se comunicam). Porém, pensando em baixo nível (Assembly), se for utilizado o conjunto de instruções do computador hipotético Neander, essa operação é mais complexa, necessitando um volume maior de instruções, como mostrado no Código 1: 01. LDA 80 02. ADD 81 03. STA 82 04. HLT Observa-se que, a operação que pode ser realizada em apenas uma linha usando alto nível, quando escrita em Assembly, necessita de 4 (quatro) linhas. Isso porque, antes de se efetuar a soma, um dos operandos (que se encontra previamente armazenado no en- dereço 81 da memória) deve ser carregado até o acumulador (instrução LOAD). Com um dos operandos no acumulador, é possível executar a operação ADD, que, nesse caso, soma o conteúdo do acumulador ao conteúdo do endereço 81 da memória, armazenando o resultado previamente no próprio acumulador. A partir daí, a operação STR armazena o valor do acumulador no endereço 82 de memória e a instrução HLT termina o programa. Embora mais complexa, é importante perceber que todo programa escrito em lingua- gem de alto nível será convertido em baixo nível, em um processo conhecido como compilação. Isso é necessário porque existem inúmeras instruções de alto nível, porém, independente da linguagem, todas podem ser convertidas em uma determinada instru- ção específica do assembly da máquina na qual o programa está executando e todas as instruções de máquina possuem um representante em binário. Assim, o programa do Código 1, usando-se a conversão de números binários e a representação de cada instrução em um código binário mostrada na Tabela 1, pode ser representado apenas em binário, como mostra o Código 2: Código 1 - Operação de soma usando Assembly Neander Fonte: elaborado pelo autor. 91 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co 01. 0010 01010000 02. 0011 01010001 03. 0001 01010010 04. 1111 Para realizar a conversão do código em binário, tudo o que se fez foi apenas converter as instruções, segundo valores já conhecidos e mostrados na Tabela 1 e converter os valores 80, 81 e 82 para binário. 01. REM<-PC 02. LEIA 03. RI<-RDM 04. PC<-PC+[deslocamento]) 05. Decodificar 06. REM<-(REM+1) 07. LEIA 08 .REM<-RDM 09. LEIA 10. ACC<-RDM Com o código representado em baixo nível, conforme mostrado no Código 2, o com- putador é capaz de executar as instruções que, basicamente, trata-se de manipular os valores dos registradores. Essa manipulação dos registradores é conhecida como mi- croinstruções e elas são específicas para cada instrução assembly. Dessa forma, para cada instrução do computador, existe um conjunto de microinstruções pré-definidas. O Código 3 mostra como são as microinstruções da instrução LDA. Código 2 - Operação de soma usando Assembly Neander em binário Fonte: elaborado pelo autor. Código 3 - Microinstruções para a instrução LDA Fonte: elaborado pelo autor. 92 Desenvolvimento de sistemas embarcados 4 Orientando-se por essas microinstruções, é possível verificar que o primeiro passo é fazer a leitura da instrução que deve ser executada. Essa leitura da instrução é cha- mada de busca (passos 01 a 03). Na linha 04, o apontador já passa a indicar qual é a próxima instrução a ser buscada. Na linha 05 é feita a decodificação da instrução, em que se descobre que a instrução a ser executada é a instrução LDA. E, a partir da linha 06, os passos realizados são os que tem a finalidade de buscar o dado e armazená-lo no acumulador (objetivo da instrução LDA). A intenção maior do capítulo 1 foi mostrar que o processamento se dá a partir da mani- pulação de registradores, feito no nível de microinstruções (baixo nível), que representa diretamente as instruções do assembly de cada computador e que, por sua vez, conse- gue representar as instruções das linguagens de programação de alto nível. A partir do capítulo 2, serão trabalhados alguns conceitos visando o desenvolvimento de um protótipo de sistema embarcado, visando trabalhar de forma sucinta com eletrônica para montagem de um hardware mínimo que possa ser programado. 2. FUNCIONAMENTO BÁSICO DE ELETRÔNICA As duas grandezas fundamentais da elétrica são a diferença de potencial, que é medida em Volt (V) e a corrente, que é medida em Ampère (A). Para Gussow (2009, p. 17): Em virtude da força do seu campo eletrostático, uma carga elétrica é capaz de realizar trabalho ao deslocar uma outra carga por atracão ou repulsão. A capacidade de uma carga realizar trabalho é chamada de potencial. Quando uma carga for diferente da outra, haverá́ uma diferença de potencial entre elas. E, ainda segundo Gussow (2009, p.17): O movimento ou o fluxo de elétrons é chamado de corrente. Para se produzir a corrente, os elétrons devem se deslocar pelo efeito de uma diferença de potencial. A corrente é representada pela letra I. A unidade fundamental com que se mede a corrente é o Ampère (A). Assim, a diferença de potencial entre dois pontos, que chamaremos de V e mediremos em Volt (V) causa um deslocamento dos elétrons através de um material condutor e, a esse deslocamento, daremos o nome de corrente, que representaremos por I e medire- mos utilizando ampère (A). Podemos fazer uma analogia do fluxo elétrico com o fluxo de fluido (HAMBLEY, 2016, p.4). Uma bateria se assemelha a uma bomba de água, produzindo um fluxo. O fluxo de líquido é análogo ao fluxo de elétrons (corrente) e os canos são como os fios, que conduzem esse fluxo e a diferença de potencial equivale à diferença de pressão. Assim, da mesma forma que uma diferença de pressão entre duas extremidades de um cano provocam o fluxo do líquido, a diferença de potencial gera a corrente. Além disso, existe outra grandeza que surge da relação entre a diferença de potencial (tensão elétrica) e a corrente, que é a resistência. Da mesma forma que canos mais finos dificultam a passagem da água, fios mais finos apresentam uma resistência maior 93 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co à passagem da corrente. Para Gussow (2009, p. 51), “a resistência é a oposição ao fluxo da corrente. Para se aumentar a resistência de um circuito, são utilizados compo- nentes elétricos denominados de resistores”. A resistência é medida em Ohm (Ω) e chamaremos os materiais que apresentam pouca resistência de materiais condutores e materiais que apresentam muita resistência à passagem da corrente de isolantes. A unidade de medida da resistência é uma homenagem ao físico alemão Georg Simon Ohm, cuja primeira lei é mostrada na Equação 1: .V R I= Na Equação 1, V é a tensão de um sistema, R é a resistência e I a corrente. Então, é possível perceber quetensão, corrente e resistência estão diretamente ligadas. Quando se aumenta a corrente, a única forma de manter a mesma tensão é diminuindo-se a resistência e, ao se aumentar a tensão, a única forma de se manter a corrente estável é aumentando-se, também, a resistência. Com a Lei de Ohm, é possível calcular tensão e corrente de um circuito, desde que se conheça a resistência, que depende exclusivamente do componente e/ou do material empregado. Em alguns circuitos, podem existir mais de um componente resistivo. Nesses casos, eles podem estar agrupados de duas formas: 1. Resistências em série: a Figura 2 mostra um circuito desse tipo. Para esses casos, a resistência equivalente será a soma das resistências, como mostra a Equação 2. Figura 02. Circuito com resistências em série Fonte: elaborada pelo autor. Equação 1 - Lei de Ohm Fonte: elaborado pelo autor. 94 Desenvolvimento de sistemas embarcados 4 Para esses casos, a corrente é a mesma em todos as resistências e é calculada a partir da resistência equivalente, conforme mostra a Equação 3. 120 2 60eq VI A R = = = E a tensão em cada resistência é calculada utilizando-se o valor de cada resistência e a corrente do circuito, conforme mostra a Equação 4. 1 1. 20.2 40V R I V= = = 2 2. 30.2 60V R I V= = = 3 3. 10.2 20V R I V= = = 2. Resistências em paralelo: a Figura mostra um circuito desse tipo. Para esses ca- sos, o inverso da resistência equivalente será a soma do inverso de cada resistência em paralelo como mostra a Equação 5. Figura 03. Circuito com resistências em paralelo Fonte: elaborada pelo autor. 1 2 3 20 30 10 60eqR R R R= + + = + + = Ω Equação 2 - Resistência equivalente em série Fonte: elaborado pelo autor. Equação 3 - Cálculo corrente com resistores em série Fonte: elaborado pelo autor. Equação 4 - Cálculo das tensões das resistências em série Fonte: elaborado pelo autor. 95 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co e 1 1 1 1 1 1 1 10 1 2 3 60 30 20qR R R R = + + = + + = Ω Para esses casos, a tensão é a mesma em todos as resistências e a tensão do próprio circuito. Já a corrente em cada resistência é calculada utilizando-se o valor de cada resistência e a tensão do circuito, conforme mostra a Equação 6. 1201 2 1 60 VI A R = = = 1202 4 2 30 VI A R = = = 1203 6 3 20 VI A R = = = Sabendo-se calcular a corrente e a tensão dos circuitos e, conhecendo os principais com- ponentes eletrônicos, é possível construir protótipos de hardware que podem ser con- trolados utilizando-se microcontroladores. Os principais componentes da eletrônica são: Transistores Um transistor é um componente semicondutor, permite a passagem de energia em determinadas situações que podem ser controladas. Eles são a base da computa- ção, já que ele pode assumir valores ligado ou desligado de acordo com a operação que se deseja realizar. Segundo Duarte (2017, p. 157): O transistor bipolar foi criado no início dos anos 1950 para substituir a válvu- la, que desenvolvia a mesma função do transistor, porém com um consumo de energia muito maior que o consumo desse novo componente. A Figura 4 mostra como é um transistor. Verifique que ele possui 3 (três) conexões, duas usadas para ligação no circuito e uma de controle. Equação 5 - Resistência equivalente em paralelo Fonte: elaborado pelo autor. Equação 6 - Cálculo das correntes das resistências em paralelo Fonte: elaborado pelo autor. 96 Desenvolvimento de sistemas embarcados 4 Figura 04. Transistor Fonte: 123RF. Resistores Um resistor é um componente elétrico que possibilita o controle da resistência em um circuito. Com o uso do resistor adequado, é possível controlar o fluxo da corrente que é permitida em um determinado circuito. Para Duarte (2017, p. 7): Em eletricidade, a oposição à passagem de corrente elétrica em um circuito é chamada de resistência elétrica (ou resistência) e sua unidade de medida é o ohm (Ω). Para que se possa controlar, externamente, o valor da corrente que circula em um circuito, é necessário inserir, nesse circuito, uma resistên- cia de valor conhecido, adequada a cada caso. Para tornar isso possível, faz-se uso de um componente elétrico, o resistor, que é construído com um valor específico de resistência, permitindo o ajuste da corrente em cada parte do circuito, de acordo com o desejado. A Figura 5 mostra um desses componentes. Perceba que ele possui faixas coloridas. Essas faixas são utilizadas para indicar a resistência do componente. 97 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Figura 05. Resistor Fonte: 123RF. Cada faixa e cada cor tem um significado, que pode ser visto na Figura 6. Figura 06. Tabela de cores - Resistor Fonte: 123RF. 98 Desenvolvimento de sistemas embarcados 4 Capacitores Um capacitor funciona basicamente como uma bateria. Ele armazena energia em determina- dos momentos e libera essa energia armazenada em outros, dependendo da necessidade. Para Duarte (2017, p. 31): O capacitor é um componente capaz de armazenar cargas elétricas. Fisi- camente, pode ser construído, na sua forma mais simples, por duas pla- cas metálicas, paralelas (armaduras) e separadas por um material isolante (dielétrico) [...]. A Figura 7 mostra diferentes tipos de capacitores cerâmicos usados atualmente. Figura 07. Capacitor Fonte: 123RF. Diodos: são componentes elétricos capazes de permitir o fluxo da corrente elétrica ape- nas em um determinado sentido. São muito uteis na fabricação de conversores analó- gicos digitais, por exemplo. Segundo Duarte (2017, p. 45): O diodo é um componente eletrônico com dois eletrodos (daí a origem do seu nome: di-dois; odo-eletrodo), construído a partir de cristais de material semicondutor, capaz de permitir, ou não, a passagem de corrente elétrica, conforme o tipo de polarização a que está submetido. A Figura 8 mostra a imagem de um diodo. 99 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Figura 08. Diodo Fonte: 123RF. Leds Os leds (Light Emitter Diode) funcionam exatamente como os diodos, mas são diodos emissores de luz. Assim, são componentes eletrônicos muito uteis em circuitos, já que existem várias cores e podem ser controlados (acesos ou apagados) através de controle. Segundo Duarte (2017, p. 135): O LED emite luz colorida, de intensidade proporcional à corrente que passa por ele, quando submetido à polarização direta. Existem LEDs de diversas cores, formatos e tamanhos. A Figura 9 mostra as principais cores de LEDs encontrados no mercado. Figura 09. LED Fonte: 123RF. 100 Desenvolvimento de sistemas embarcados 4 Cada cor possui tensão e corrente máximas permitidas de atuação, que podem ser vistas na Tabela 2: Tabela 02. Tensão e corrente LED COR DO LED TENSÃO (V) CORRENTE (mA) Vermelho 1.8V a 2.0V 20mA Amarelo 1.8V a 2.0V 20mA Laranja 1.8V a 2.0V 20mA Verde 2.0V a 2.5V 20mA Azul 2.5V a 3.0V 20mA Branco 2.5V a 3.0V 20mA Fonte: elaborada pelo autor. Além dos componentes apresentados, são comuns em circuitos microcontrolados a presença de sensores e atuadores. Sensores são componentes capazes de captar alguma grandeza física e enviá-la para o microcontrolador, como é o caso dos sensores de temperatura, sensores de luminosi- dade, sensores de proximidade etc. Atuadores são componentes utilizados para realizar alguma ação a partir dos dados emitidos pelo microcontrolador. São exemplos de atuadores os motores, as chaves etc. Com base nos conceitos vistos, é possível utilizar um microcontrolador, que pode ser programado para a realização de atividades diversas, e esse sistema pode ser embar- cado em equipamentos, que podem ser controlados a partir deles. 3. MICROCONTROLADORES E SISTEMAS EMBARCADOS Um microcontrolador nada mais é que um pequeno computador, que possui um proces- sador, memória e um conjunto de pinos de entrada e saída. Sua função é receber dados pelos seus pinos de entrada, que podem ser acopladosa sensores de diversos tipos ou a teclados, por exemplo, processar esses dados de acordo com uma lógica pré-determi- nada e emitir dados de saída a partir de pinos também destinados a esse fim. Os pinos de saída podem estar conectados a LEDs, atuadores e monitores que receberão essa informação e atuarão como resposta ao processamento efetuado. Segundo Monk (2017, p. 2): [...] um microcontrolador é um pequeno computador dentro de um chip. Além de conter todos os recursos que já estavam presentes nos primeiros compu- tadores domésticos, um microcontrolador apresenta outras coisas. Ele con- tém um processador, um ou dois quilobytes de memória RAM[NT] para guar- dar dados, uns poucos quilobytes de memória EPROM[NT] ou de memória flash para armazenar os programas e ainda pinos de entrada e saída. Esses pinos de entrada/saída ligam o microcontrolador aos demais componentes dos circuitos que você está desenvolvendo. 101 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co O intuito do estudo de um microcontrolador, nesse componente curricular, é possibili- tar a construção de um protótipo, no qual possam ser empregadas técnicas de eletrô- nica e depois programar esse hardware para efetivar a relação hardware e software na solução de problemas. Será utilizado o Arduino como microcontrolador para os projetos. O Arduino é um microcontrolador de baixo custo, com bastante eficiência. Figura 10. Placa do microcontrolador Arduino Conector de Alimentação Conexão USB / Alimentação Pinos Digitais Chave de RESET Entradas Analógicas Conectores de Alimentação externa Microcontrolador Fonte: elaborada pelo autor. A Figura 10 mostra uma placa Arduino, modelo UNO. Nela, é possível ver os principais componentes da placa: ` Conector de alimentação: usado para ligar a placa a uma fonte de alimentação. A placa Arduino pode ser alimentada também pela conexão USB, enquanto estiver sendo progra- mada e deve ser ligada a esse conector de alimentação depois da programação para se manter em funcionamento; 102 Desenvolvimento de sistemas embarcados 4 Além desses componentes principais, outro componente merece ser comentado: acima do microcontrolador encontra-se um componente prateado, ele é o oscilador, que for- nece 16 milhões de ciclos por segundo, ou seja, é o responsável pela geração do clock do microcontrolador. Atualmente, existem alguns modelos de placas Arduino, cada uma com uma caracterís- tica específica. As principais comercializadas atualmente são: ` Microcontrolador: é o cérebro da placa. O microcontrolador contém o processador que controla todo o processo de execução de instruções, buscando, decodificando e execu- tando cada uma das instruções que compõe o programa que está armazenado em sua memória. Por falar em memória, nesse mesmo CI (Circuito Integrado) estão encapsuladas as memórias, tanto a primária como a secundária; ` Conectores de alimentação externa: esses pinos são utilizados para alimentar compo- nentes externos que estejam conectados ao Arduino. Eles fornecem pinos de aterramento (GND) e pinos de 5V e de 3.3V; ` Entradas analógicas: esses pinos são utilizados para conexão de sensores que for- neçam valores analógicos, como é o caso de um sensor de temperatura, por exemplo. Apesar de terem a propriedade de entradas analógicas, esses pinos podem ser usados, também, como entrada e saída digital, caso seja necessário; ` Pinos Digitais: são utilizados para conexão de sensores e atuadores que funcionem de modo digital. Podem ser utilizados, tanto como entrada como saída (isso pode ser contro- lado por software na hora da programação). Os pinos marcados com o símbolo ~ (3, 5, 6, 9, 10 e 11) podem ser utilizados como saída analógica, através de um recurso conhecido como PWM (Pulse Width Modulation). Uma curiosidade é que o pino 13 está internamente conectado a um LED interno do Arduino (L), localizado logo em frente ao pino 13. Toda ação realizada com o pino 13 reflete nesse LED; ` Chave de RESET: essa chave é utilizada para resetar a placa, levando-a para as configu- rações de fábrica. É utilizada em casos que se queira desistir da programação realizada; ` Conexão USB: tem duas funções e serve, tanto para fazer a conexão do equipamento com o computador que será responsável por transmitir a ela o programa quanto como alimentação da placa enquanto está conectada ao computador. ` UNO: é a mais conhecida e está representada na Figura 10. É bastante indicada para iniciantes pois possui uma boa capacidade de processamento e baixo custo; ` PRO Mini: é destinada a usuários avançados, que necessitam de alta capacidade de processamento e tamanho pequeno; ` FIO: é uma placa indicada para aplicações sem fio (wireless); 103 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Para funcionar, a placa Arduino deve ser programada. Essa programação pode ser realizada em linguagem C ou então através de programação em blocos. Utilizaremos, aqui, a programação em blocos. Qualquer que seja o modo de programação, ele deve ser realizado através de um ambiente de desenvolvimento, que deve ser instalado no computador. Nesse ambiente, o programa será elaborado e testado e, depois de pronto, carregado na placa através de uma interface USB. 4. DESENVOLVIMENTO EM ARDUINO O Arduino possui um ambiente integrado de desenvolvimento próprio, em versões para Windows, Linux ou Mac. Nele, é possível escrever um programa, testá-lo e carregá-lo na placa Arduino através da conexão USB. Porém, a fim de agilidade, trabalharemos com um ambiente de desenvolvimento on-li- ne, o Tinkercad. É uma ferramenta on-line para desenvolvimento de modelos 3D ` NANO: é utilizado para projetos que necessitam de uma placa bem compacta, com custo acessível; ` MICRO: principal característica é que tem uma conexão direta com o USB, sendo identifi- cado pelo computador como um mouse ou teclado; ` LEONARDO: possui maior capacidade de processamento que a versão UNO e pode ser usado em projetos maiores, embora nãos seja indicado para iniciantes; ` MEGA: tem um tamanho maior, com a vantagens de possuir um número maior de pinos de entrada e saída; ` LILYPAD: utilizado para aplicações vestíveis (em equipamentos como roupa, relógio, óculos etc.). É bem pequeno e pode ser facilmente integrado a tecidos e outros materiais; ` DUO: tem o mesmo tamanho e quantidade de portas do MEGA, mas possui um alto poder de processamento; ` YUN: é basicamente o mesmo que o LEONARDO, mas possui integração com wireless; ` ESPLORA: parece um controlador de um videogame e é utilizado para controlar o computador; ` ROBOT: vem com roda, alto falante, display, leitor de cartão e sua aplicação está direta- mente ligada ao desenvolvimento de robôs; ` ETHERNET: esse modelo vem com conector RJ45, e pode ser ligado à rede com um cabo de rede comum; ` PRO: é um modelo destinado a projetos em produção e não protótipos. É mais robusto e menos suscetível a problemas de conexão; ` TER: é um computador completo, no qual é possível instalar um sistema operacional, por exemplo. 104 Desenvolvimento de sistemas embarcados 4 feitos em CAD e, também, um simulador de circuitos elétricos. A ferramenta é manti- da pela Autodesk e, além de ser gratuita, é bem fácil de utilizar. É uma grande ferra- menta para o aprendizado, já que não necessita que se adquira nenhum equipamento ou componente eletrônico. Link para baixar o ambiente integrado de desenvolvimento do Arduino: https://www.arduino. cc/en/software. Acesso em: 25 mar. 2022. Link de acesso ao Tinkercad: Faremos o desenvolvimento de nosso protótipo utilizando essa ferramenta. Para isso, primeiramente acesse o endereço do Tinkercad e clique em Entrar. Será apresentada a tela da Figura 11. Figura 11. Login Tinkercad Fonte: captura de tela realizada pelo autor. Disponível em: https://www.tinkercad.com. Acesso em: 25 mar. 2022. SAIBA MAIS 105 4 Ambientes computacionais U nive rs id ad e S ão F ra nc is co Clique em Personal Accounts e escolha entrar com o Google. Lembre-se de utilizar seu e-mail institucional para entrar usando a sua conta de e-mail da USF (que é uma conta Google). A partir daqui você já estará logado e pronto para utilizar a ferramenta. Nela, é possível criar projetos em 3D, blocos de código, circuitos etc. Escolha circuitos, como mostrado na Figura 12. Figura 12. Tinkercad Circuitos Fonte: captura de tela realizada pelo autor. Agora, clique em “criar novo circuito” e será apresentada a tela da Figura 13. Nela, é possível alterar o nome do projeto, clicando no nome dele a atualizando. Figura 13. Tela para elaboração de circuito Tinkercad Fonte: captura de tela realizada pelo autor. 106 Desenvolvimento de sistemas embarcados 4 Clique duas vezes sobre o nome atual (Brave Duup-Habbi) e altere para “Meu primeiro projeto’. Além disso, você pode ver uma lista de componentes, que estão organizados em componentes básicos, exclusivos para Arduino etc. Acima da lista de componentes, existem botões para programar o circuito (se for um circuito com Arduino), para iniciar a simulação (testar o funcionamento do circuito e é possível enviar o projeto para uma imagem ou um arquivo, por exemplo. Antes de desenvolver um protótipo, será necessário conhecer dois componentes princi- pais do Tinkercad. O primeiro deles é a “Placa de ensaio pequena”, que está disponível na lista de componentes básicos. A Figura 14 mostra uma placa dessas. Figura 14. Placa de ensaio pequena Fonte: captura de tela realizada pelo autor. Utilizaremos essa placa para organizar nossos componentes e interligá-los. A linha in- dicada por um + é utilizada para alimentar a placa. Todos os furos nessa linha estão in- terligados e serão alimentados ao se ligar qualquer um deles a uma fonte de energia. O mesmo acontece com a linha indicada por um “-“, que será utilizada para aterramento. Já as linhas a, b, c, d, e são interligadas na vertical, ou seja, na coluna 1, a linha a está ligada com a linha b e a linha b com a linha c e a linha c com a linha d, e assim suces- sivamente, porém não existe ligação entre a coluna 1 e a coluna 2. O mesmo acontece com as linhas f, g, h, i e j, que estão interligadas na coluna 1 e nas demais colunas, porém, cada coluna é independente e não há ligação entre elas. Como exemplo, a Figura 15 mostra um circuito para acender um LED. Perceba que, além do LED, existe a necessidade de se ter uma fonte de energia e um resistor, para controlar a corrente e tensão no LED. 107 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Figura 15. Circuito para acender um LED Fonte: elaborada pelo autor. Como fonte de energia foi utilizada uma bateria de 9V. Percebam a ligação do terminal positivo da bateria na linha +, energizando-a e, de forma análoga, a ligação do terminal negativo com a linha – da placa. Foram utilizadas cores diferentes para os cabos por conta de melhor entendimento. Além do LED é necessário utilizar também um resistor, para controlar a passagem de corrente sobre o LED. Como mostrado na Tabela 2, a corrente máxima para um LED vermelho é de 2mA, ou seja 0,02A. Com essa informação, e utilizando a Equação 1, obtém-se o valor da resistência, como mostrado na Equação 7. 9 2. 350 0,02 VV R I R I − = =〉 = = = Ω Sem o resistor, tensão e correntes seriam grandes o suficiente para queimar o LED, como mostrado na Figura 16. Figura 16. LED queimado Fonte: captura de tela realizada pelo autor. Equação 7 - Cálculo de valor da resistência Fonte: elaborado pelo autor. 108 Desenvolvimento de sistemas embarcados 4 Usando a placa Arduino, é possível controlar o LED, ligando-o a um determinado pino do Arduino e controlando esse pino para que o LED possa, piscar, aumentar e diminuir intensidade etc. A Figura 17 mostra um circuito de controle de LED usando o Arduino. Nela, é possível perceber que o LED continua ligado a um resistor, só que agora o resistor pode ter um valor menor, de 150Ω. Isso acontece porque a tensão fornecida pelo pino do Arduino é de 5V, diferente dos 9V fornecidos pela bateria. Figura 17. Arduino controlando LED Fonte: captura de tela realizada pelo autor. Se não for colocado o resistor, o Arduino tem um dispositivo de controle interno que vai adaptar a tensão e corrente ao consumo do dispositivo e ele deve continuar funcionando, mas o correto é prever a corrente máxima e ajustá-la com a utilização do resistor adequado. Porém, ao simular o circuito da Figura 18, nada deve acontecer, já que o ponto 2, no qual o LED está ligado, ainda não está energizado. Esse processo de controle dos pinos é feito, no caso do Arduino, por programação. Clicando no botão código, será possível manipular o programa para que fique como o mostrado na Figura 28. 109 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Figura 18. Programa para piscar LED Fonte: captura de tela realizada pelo autor. Na Figura 28, o programa define o pino 2, que é o pino em que o LED está ligado como nível lógico ALTO (ligado), em seguida, aguarda 1s e define o pino 2 como nível BAIXO (desligado), o que apaga o LED, aguardando mais 1s. Isso faz com que o LED ligado ao pino 2 pisque em intervalos de 1s. Como todo programa do ARDUINO executa em loop, o LED ficará piscando enquanto o equipamento estiver ligado. Agora, suponha que, em vez de apenas acender ou apagar o LED, o que desejamos é que seu brilho aumente até um determinado nível e depois diminua gradativamente até se apagar. Para isso, não precisamos alterar o circuito em si. Apenas alterando o programa, é possível obter esse novo modo de funcionamento do circuito, conforme mostrado na Figura 19. Figura 19. Programa para esmaecer LED Fonte: captura de tela realizada pelo autor. 110 Desenvolvimento de sistemas embarcados 4 Agora, foram colocados dois controles de contagem, um para cima (que conta de 0 a 255) e outro de contagem para baixo (que conta de 255 até 0). A cada valor da contagem, esse valor é transmitido ao LED, que agora está no pino 3. Houve a necessidade de se mudar o pino porque uma contagem não é um valor digital (alto e baixo), e sim um valor analógico. Então, deve-se usar um dos pinos de saída marcados com o símbolo “~”, que podem atu- ar como pinos de saída analógica também. Esses pinos analógicos convertem uma faixa de valor em níveis de energia, sendo que 0 representa o menor valor (sem energia) e 255 representa o maior valor (nível máximo = 5V). Mudando-se esses valores, o brilho do LED aumenta a medida que um valor maior é passado para o pino 3 e, da mesma forma, o brilho diminui a medida que menores valores são passados para o pino 3. O Tnkercad traz diversos exemplos prontos de uso do Arduino controlando diversos componentes. A Figura 20 traz um exemplo pronto do Tinkercad que mostra o microcon- trolador controlando um motor. Figura 20. Arduino controlando motor Fonte: captura de tela realizada pelo autor. O código desse exemplo pode ser visto na Figura 21. Perceba que ele também utiliza um pino de saída analógica (nesse caso o pino 9) e envia para esse pino valores de 0 a 180, que representa quantos graus o motor deve girar. 111 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co Figura 21. Programa para controlar motor Fonte: captura de tela realizada pelo autor. O exemplo se assemelha muito ao mostrado na Figura 19, alterando-se apenas a faixa de valores, que no caso do LED era ade 0 a 255 para valores de 0 a 180 e, também, o comando, que era acender o LED e agora é girar o motor. Assim, é possível perceber que, usando o Tinkercad, é possível fazer simulações bem reais do funcionamento do Arduino e de demais componentes eletrônicos, possibilitan- do o desenvolvimento de protótipos de sistemas embarcados microcontrolados. A partir dos exemplos mostrados, é possível pensar em projetos de automação indus- trial, automação residencial,controles de entrada e saída de ambientes, controles de segurança, entre outros. 112 Desenvolvimento de sistemas embarcados 4 OBJETO DE APRENDIZAGEM CONCLUSÃO O processador é, de forma básica, um conjunto de circuitos eletrônicos que podem ser programados utilizando linguagem de baixo nível. Sendo o computador, também, uma máquina de vários níveis, é possível que a programação seja feita em alto nível, e con- vertida para a linguagem de baixo nível pelo próprio computador. Porém, o entendimento de como funciona o hardware e da programação de baixo nível e suas microinstruções controladoras de valores dos registradores internos ajuda na compreensão da máquina em si e faz com que sua programação seja mais eficiente. De forma análoga ao funcionamento do computador, os microcontroladores podem ser programados para controlar componentes eletrônicos, que vão desde sensores, que abastecem esses microcontroladores com dados de entrada, até atuadores que são controlados por esses microcontroladores para efetuar determinadas tarefas, interagin- do com o meio em que estão inseridos. A partir disso, são criados sistemas embarcados, que estão cada vez mais presentes em nosso cotidiano, controlando desde nossos carros e casas até mesmo nossas rou- pas e assessórios. Espera-se que esse estudo possa ter auxiliado na compreensão do computador e de como um software está intimamente ligado ao hardware, sempre na busca de melhorar o seu desempenho. Fonte: adaptado do site https://miro.com/app/board/uXjVOSR2Izs=/?openNote. Acesso em 28/03/2022. 113 4 Ambientes computacionais U ni ve rs id ad e S ão F ra nc is co REFERÊNCIAS BIBLIOGRÁFICAS DUARTE, Marcelo de A. Eletrônica Analógica Básica. Barueri, SP: Grupo GEN, 2017. Disponível em: ht- tps://integrada.minhabiblioteca.com.br/#/books/9788521633679/. Acesso em: 15 mar. 2022. GUSSOW, Milton. Eletricidade Básica. [S. I.], Grupo A, 2009. Disponível em: https://integrada.minhabibliote- ca.com.br/#/books/9788577804290/. Acesso em: 14 mar. 2022. HAMBLEY, Allan R. Engenharia Elétrica - Princípios e Aplicações. 6. ed. Barueri, SP: Grupo GEN, 2016. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788521633266/. Acesso em: 14 mar. 2022. MONK, Simon. Programação com Arduino. [S. I.], Grupo A, 2017. Disponível em: https://integrada.minhabi- blioteca.com.br/#/books/9788582604472/. Acesso em: 15 mar. 2022. TOKHEIM, Roger. Fundamentos de Eletrônica Digital - V2. [S. I.], Grupo A, 2013. Disponível em: https:// integrada.minhabiblioteca.com.br/#/books/9788580551952/. Acesso em: 12 mar. 2022. WEBER, Raul F. Fundamentos de Arquitetura de Computadores - V8 - UFRGS. [S. I.], Grupo A, 2012. Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788540701434/. Acesso em: 12 mar. 2022.