Prévia do material em texto
Interfaceamento Eletroeletrônico I Material Teórico Responsável pelo Conteúdo: Prof. Esp. Elvis Luiz dos Santos Revisão Textual: Prof.ª Dr.ª Selma Aparecida Cesarin Interrupções e Organização da Memória • Instruções de Interrupção; • Conectando o Arduino ao Computador; • Criando o Programa (Sketch); • Modos de Endereçamento de Memória; • Instrução para Escrever na Memória Eeprom (EEPROM.write). • Tratar das interrupções e das linguagens de programação. OBJETIVO DE APRENDIZADO Interrupções e Organização da Memória Orientações de estudo Para que o conteúdo desta Disciplina seja bem aproveitado e haja maior aplicabilidade na sua formação acadêmica e atuação profissional, siga algumas recomendações básicas: Assim: Organize seus estudos de maneira que passem a fazer parte da sua rotina. Por exemplo, você poderá determinar um dia e horário fixos como seu “momento do estudo”; Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma alimentação saudável pode proporcionar melhor aproveitamento do estudo; No material de cada Unidade, há leituras indicadas e, entre elas, artigos científicos, livros, vídeos e sites para aprofundar os conhecimentos adquiridos ao longo da Unidade. Além disso, você tam- bém encontrará sugestões de conteúdo extra no item Material Complementar, que ampliarão sua interpretação e auxiliarão no pleno entendimento dos temas abordados; Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de discus- são, pois irão auxiliar a verificar o quanto você absorveu de conhecimento, além de propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de troca de ideias e de aprendizagem. Organize seus estudos de maneira que passem a fazer parte Mantenha o foco! Evite se distrair com as redes sociais. Mantenha o foco! Evite se distrair com as redes sociais. Determine um horário fixo para estudar. Aproveite as indicações de Material Complementar. Procure se alimentar e se hidratar quando for estudar; lembre-se de que uma Não se esqueça de se alimentar e de se manter hidratado. Aproveite as Conserve seu material e local de estudos sempre organizados. Procure manter contato com seus colegas e tutores para trocar ideias! Isso amplia a aprendizagem. Seja original! Nunca plagie trabalhos. UNIDADE Interrupções e Organização da Memória Instruções de Interrupção Imagine que você está desenvolvendo um sistema para uma máquina do tipo prensa (Figura 1). Como sabemos, esse tipo de máquina precisa de um sistema de segurança no qual o equipamen- to só funcione se o operador estiver com as duas mãos em dois botões, sistema conhecido como bi- manual (Figura 2). Funciona basicamente da seguinte forma: o ma- terial a ser prensado é colocado no local indicado e um sensor indutivo detecta sua presença. Isso dá à máquina condições de disparar o pis- tão, mas, devido ao sistema de segurança, o pistão só dispara se o operador estiver com as duas mãos nas botoeiras do sistema bimanual. Ao mesmo tempo, é claro, isso garante que o operador não deixe a mão sobre a peça e acione o pistão, causando um grave acidente, nem permite, por exemplo, que o operador deixe uma botoeira acionada e controle apenas a outra, pois o sistema só funciona se os dois botões forem pressionados juntos e, ainda, um outro sensor do tipo cortina de luz por exemplo, que garanta que, se na descida do pistão, outra pessoa ou mesmo o operador coloque por exemplo a mão no caminho do pistão, ele pare imediatamente e retorne ao topo do equipamento. Bom, até aqui entendemos basicamente como funciona a máquina. Agora, ima- gine que esse equipamento é controlado por um microcontrolador, que executa suas instruções em sequência, ou seja, se o pistão começou a descer, só vai parar quando bater no fim de curso, instalado na mesa da máquina, isto é, mesmo que o sensor detecte que alguma coisa entrou na frente do pistão, ele vai descer até o fim, pois, de certo, o programa só manda ele retornar quando o fim de curso man- dar um sinal de que foi acionado. Assim, na programação, deve- mos utilizar um comando que in- terrompa a sequência normal do programa e rode uma outra rotina que mande o pistão voltar ao topo. Em programação, isso se chama interrupção, e é usada com frequência na programa- ção de microcontroladores. Figura 1 – Prensa Elétrica Hidráulica 15 Ton Fonte: Divulgação Figura 2 – Sistema de segurança bimanual Fonte: Divulgação 8 9 Como funciona o bimanual. Assista ao vídeo disponível em: https://youtu.be/fn5JSo2oD_k. Ex pl or Cortina de luz: http://bit.ly/2Czr2YY Ex pl or Quando utilizamos interrupções, devemos tratar o tema em duas etapas: • Condição de interrupção: é a condição que indica uma interrupção. Ela avisa ao programa que é a hora de executar uma tarefa extraordinária. No nosso caso, essa condição é que pare o pistão; • Função a ser executada: em nosso exemplo, quando o sensor indicar que algo interrompeu a cortina de luz e entrou na rota do pistão podendo sofrer uma acidente, o programa que está instalado no microcontrolador da placa eletrônica de controle da máquina deve receber sinal do sensor, paralisar o sistema e rodar uma subrotina, que faça com que o pistão funcione no sentido contrário e volte ao topo, travando a máquina, para que possa ser verificado o que ocorreu . No Arduino UNO, os pinos que trabalham com interrupção são os pinos 3 e 4, conforme pode ser observado na Figura 3, ou ATMEGA 328 pinos 4 e 5, confor- me Figura 4. Figura 3 – Disposição dos pinos do Arduino Fonte: arduino.cc 9 UNIDADE Interrupções e Organização da Memória Figura 4 – Disposição dos pinos do ATMEGA328 Fonte: pighixxx.com Vamos, então, desenvolver programa que demonstre o funcionamento da interrupção. Para testar a Interrupção, vamos conectar os componentes do projeto, conforme Figura 4. Não se esqueça de desligar seu Arduino para montar o circuito. Caso esteja usando uma placa real, conecte o LED no pino 13. Observe se ele está correta- mente posicionado e conectado: o lado com chanfro (catodo) deve estar encostado ao GND do Arduino e o lado positivo (Anodo) deve estar conectado a um resistor de 150Ω e ao pino 13 do Arduino. Uma chave deve ser conectada a um resistor de 10KΩ e ao GND e o outro lado deve estar conectado ao pino 2, chamado de INT0. Tudo conforme o esquema da Figura 4. Figura 5 – Circuito de testes da Interrupção Fonte: Acervo do Conteudista 10 11 Conectando o Arduino ao Computador Após a montagem do circuito, conecte o Arduino ao computador e abra a IDE Arduino, escolha qual placa de Arduino você está usando, por meio da aba Fer- ramentas (tools) e abra o submenu Placa, que no nosso caso, é o Arduino UNO (Figura 6). Selecione, também, a porta serial que seu Arduino está usando. Para isso, clique no menu Ferramentas (tools), abra o submenu Porta (Port) e clique na porta que seu Arduino está conectado, como neste exemplo, no qual o Arduino está usando a porta serial COM3 (Arduino/Genuino Uno)” (Figura 7). Figura 6 – Seleção do tipo de placa Fonte: Reprodução Figura 7 – Seleção da serial da placa Fonte: Acervo do Conteudista 11 UNIDADE Interrupções e Organização da Memória Criando o Programa (Sketch) Vamos, agora, criar o programa e vamos dar a ele o nome de “Test Interrupy”. Esse programa vai piscar um led, que chamaremos de “Led pistão”, continua- mente, que representa o pistão da prensa descendo. Quando o botão de interrupção, que chamaremos de “Cortina de luz” (no caso do exemplo, seria o sensor cortina de luz), indicando que algo está na frente do pistão, mesmo que o objeto seja retirado, o sistema da cortina continua mandando sinal de invasão, como uma botoeira de retenção (Figura 8). Se for acionado, o “Led pistão” para de piscar e o Led verde, que chamaremos de “Led volta pistão”, fica ligado, só voltando a apagar se o sistema for resetado. Figura 8 – Botoeira de emergênciaFonte: Divulgação Programa Programa de teste de interrupção, o led verde pisca e para quando o botão de interrupção é pressionado. Então, o led vermelho é ligado, indicando que ocorreu a interrupção. int LedPistao = 9; int LedCortina = 13; void Interrupt() //comando de interrupção { digitalWrite(LedCortina,HIGH); //Liga o LED (HIGH = nível lógico alto) 12 13 digitalWrite(LedPistao, LOW); delay(5000); } //Essa função “setup” roda uma vez quando a placa é ligada ou resetada void setup() { pinMode(LedPistao, OUTPUT);//Configura o pino do led (digital) como saída pinMode(LedCortina, OUTPUT);//Configura o pino do led (digital) como saída attachInterrupt(0,Interrupt,RISING); //Configurando a interrupção, o zero em vermelho indica que o sinal do sensor que //causara a interrupção entrara pelo pino 2 INT0, se estivesse ligado no pino 3 seria valor 1 INT1. } // Função que se repete infinitamente quando a placa é ligada void loop() { digitalWrite(LedPistao,HIGH); delay(600); digitalWrite(LedPistao, LOW); delay(600); } Modos de Endereçamento de Memória Quando, no exemplo anterior, escrevemos int LedPistao = 9, estamos atribuin- do um valor a variável LedPistao, que será armazenado em uma posição de me- mória aleatória, mas existem ocasiões nas quais precisamos direcionar o local da memória, no qual queremos armazenar tal dado, a linguagem C usa o operador de atribuição (=) para transferir dados de um local de memória para outro, ou pode- mos utilizar funções prontas para uso memória EEPROM. Vamos ver a seguir as funções para gravar e ler a memória EEPROM. Alguns códigos de exemplo podem ser encontrados na própria IDE Arduino, facilitando nosso trabalho. Para conhecer esses exemplos, vá até: Menu: Arquivo → Examples → EEPROM. Figura10 13 UNIDADE Interrupções e Organização da Memória Figura 9 – exemplo de uso da EEPROM Fonte: Reprodução Instrução para Escrever na Memória Eeprom (EEPROM.write) A instrução EEPROM.write permite gravar um byte na memória EEPROM. Para isso, usamos a função write da seguinte maneira: EEPROM.write (endereço, valor) Parâmetros: • Address: o local a ser gravado, a partir de 0 (int); • Valor: o valor para gravar de 0 a 255 (byte) • Retorno: nenhum No exemplo a seguir, armazenamos os valores lidos da entrada analógica 0, na memória EEPROM. Esses valores permanecerão na memória EEPROM quando o circuito estiver desligado e puder ser lido por outro programa, como no exemplo a seguir: /* * EEPROM Read * * Reads the value of each byte of the EEPROM and prints it * to the computer. * This example code is in the public domain. */ #include <EEPROM.h> 14 15 //start reading from the first byte (address 0) of the EEPROM int address = 0; byte value; void setup() { //initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ;//wait for serial port to connect. Needed for native USB port only } } void loop() { //read a byte from the current address of the EEPROM value = EEPROM.read(address); Serial.print(address); Serial.print(“\t”); Serial.print(value, DEC); Serial.println(); /*** Advance to the next address, when at the end restart at the beginning. Larger AVR processors have larger EEPROM sizes, E.g: - Arduino Duemilanove: 512b EEPROM storage. - Arduino Uno: 1kb EEPROM storage. - Arduino Mega: 4kb EEPROM storage. Rather than hard-coding the length, you should use the pre-provided length function. This will make your code portable to all AVR processors. ***/ address = address + 1; if (address == EEPROM.length()) { address = 0; 15 UNIDADE Interrupções e Organização da Memória } /*** As the EEPROM sizes are powers of two, wrapping (preventing overflow) of an EEPROM address is also doable by a bitwise and of the length - 1. ++address &= EEPROM.length() - 1; ***/ delay (500); } Como podemos observar, quando necessitamos criar uma interface para um sistema de controle, vários aspectos devem ser observados. Antes de iniciar seu projeto, pense bastante na aplicação, para que possa utilizar os recursos adequados, como interrupção e armazenamento de dados em memória. Na última Unidade, criaremos um projeto completo, no qual essas informações serão muito úteis. Sobre endereçamento, assista ao vídeo disponível em: https://youtu.be/PSw6O64sye0. Ex pl or 16 17 Material Complementar Indicações para saber mais sobre os assuntos abordados nesta Unidade: Livros Some Assembly Required: Assembly Language Programming with the AVR Microcontrollers MARGUSH, T. S. Some assembly required: assembly language programming with the AVR microcontrollers. Nova Iorque: CRC Press, 2011. The AVR Microcontroller and Embedded System: Using Assembly and C MAZIDI, M. A.; NAIMI S.; NAIMI S. The avr microcontroller and embedded system: using assembly and C. Nova Jersei: Prentice Hall, 2011. AVR e Arduino Técnicas de Projeto LIMA, C. B. D; VILLACA, M. V. M. AVR e arduino técnicas de projeto. Florianopolis: [s.n], 2012. Microcontroladores e Microprocessadores GONÇALVES DE CARVALHO FEITOSA PERIM, J.; NASCIMENTO NATALINE R. Microcontroladores e microprocessadores. Londrina: Educacional S.A. 2017. 17 UNIDADE Interrupções e Organização da Memória Referências SOUZA, D. J. Desbravando o PIC. 9.ed. São Paulo: Erica, 2005. ZANCO, W. S. Microcomputadores PIC – Técnicas de Software e de Hardware para Projetos de Circuitos Eletrônicos. São Paulo: Erica, 2006. ZANCO, W. S. Microcomputadores PIC18 com linguagem C. Uma abordagem prática objetiva. São Paulo: Erica, 2006 (E-Book). 18