O Básico sobre os Microcontroladores – Parte 3 (MIC141)
Este é o terceiro artigo de uma série em que ensinamos nossos leitores o que é um microcontrolador, dando informações básicas para aqueles que desejam utilizar este componente em seus projetos. Trata-se de série de artigos ideais para quem tem conhecimento básico de eletrônica, mas não sabe nada sobre microcontroladores. É uma série ideal para STEAMers, estudantes, makers, e hobistas.
As linguagens de programação usadas nos microcontroladores são as mais comuns como C, C++, Pascal, Assembly, etc.
Normalmente para se trabalhar com a programação são usados interpretadores e compiladores.
Os interpretadores são "tradutores" que fazem uso de uma linguagem próxima daquela que usamos, diferente dos 0 e 1 que os circuitos entendem, para podermos escrever as ordens que o microcontrolador deve executar. O BASIC é um interpretador.
Já o compilador é uma tradutor de alto nível que combina a facilidade de se usar palavras comuns com a alta velocidade de processamento. Um programa compilador já é colocado na EPROM do microcontrolador ou baixado para ele.
Um exemplo de linguagem que é usada nos microcontroladores para a qual existem compiladores fáceis de usar é o C.
Evidentemente, para trabalhar com os microcontroladores você deve saber como programar, ou seja, deve conhecer a linguagem que ele usa e saber usar o compilador.
Para esta finalidade existem muitos livros e cursos disponíveis e são bastante simples.
Na verdade, esta programação é a base do uso dos microcontroladores na escola, onde se aprende a eletrônica básica, criando um circuito que aciona LEDs e escrevendo o programa que faz com que eles pisquem e também circuitos cada vez mais avançados, como controlar um robô ou elevador.
De uma forma geral, o modo como os microcontroladores processam as informações é igual para todos.
Assim, uma vez que se saiba estruturar um programa (a sequência de ordens que o microcontrolador deve seguir gerando os sinais de controle) basta "traduzi-las" para a linguagem que ele usa e pronto...
A estruturação é feita através de um fluxograma, como o da figura 1, em que tudo que o microcontrolador deve fazer é colocado de forma lógica para depois ser escrito o programa.
Abaixo temos um exemplo de programa para Arduino.
// a função loop roda indefinidamente
Mas, você não precisa programar tudo quando fizer um projeto, principalmente se ele for simples.
Na internet estão disponíveis "sketches" que nada mais são do que trechos ou pequenos programas prontos para serem usados (como o programa acima).
Alguém já teve o trabalho de escrever estes programas e usar e eles podem ser agregados ao seu projeto sem problemas.
O programa dado acima para piscar um LED é um exemplo de sketch. Se na sua aplicação vai existir um ou mais LEDs que piscam, você já tem o trecho do programa que faz isso pronto.
O circuito para usar este programa piscando um LED está na figura 2.
Podemos usar o mesmo programa para acionar de modo intermitente um motor, ligando um shield de controle na saída D13. Também alteramos as linhas delay (retardo) para os tempos que desejarmos.
Usando outras saídas podemos piscar de formas diferentes outros LEDs ou produzir efeitos em decoração ou vestíveis, por exemplo.
As aplicações para os microcontroladores são ilimitadas. Onde precisarmos do controle de um ou mais dispositivos a partir de uma programação que envolva automação ou ainda o controle a partir de sinais externos podemos usar um microcontrolador. Isso não se limita à robótica e à mecatrônica (automação e controle) mas a outros ramos que estão expandindo atualmente como a IoT e os vestíveis (Internet das coisas e vestíveis).
Alguns exemplos de aplicação:
- Robôs autônomos
- Braços robóticos
- Portões automáticos e controle de acesso
- Monitoramento de sensores
- Controles industriais
- Automação geral
- Roupas e objetos de uso pessoal inteligentes
As famílias principais
Nosso espaço é insuficiente para abordar em detalhes todas as famílias de microcontroladores disponíveis, mesmo porque a cada dia novos tipos com novas características são lançados.
Sugerimos consultar a Internet, principalmente a Mouser que tem em seus estoques praticamente todos os microcontroladores disponíveis com acesso às folhas de dados (datasheets) o que facilita muito a escolha de um tipo específico para sua aplicação.
Vamos então dar algumas informações básicas sobre os principais tipos.
Esta, sem dúvida é a família principal de microcontroladores, principalmente para uso didático, dada sua facilidade de uso, baixo custo e desempenho.
Criado na Itália, hoje o Arduino conta com diversos tipos próprios como o Uno, Nano, Leonardo, Micro, Mega, Zero,com uma infinidade de variações, como mostra o quadro abaixo disponível em . https://www.arduino.cc/en/Main/Products .
As placas Arduino são baseadas em microcontroladores Atmega da Atmel que podem ser usados em aplicações semelhantes às criadas no Arduino, mas de forma independente. (figura 3)
Para robótica educacional, iniciação, STEM, a placa UNO é a mais recomendada. Na figura 4 temos este microcontrolador.
As características básicas deste microcontrolador (versão Uno) são:
of which 0.5 kB used by bootloader
Flash Memory 32 kB (ATmega328P)
Intel Galileu e Edison
A Intel possui na sua linha de microcontroladores mais simples para uso em robótica, mecatrônica, IoT e com finalidades educacionais dois tipos que na época da produção deste livro eram bastante importantes.
Os dois tipos são disponíveis na forma de plataforma de desenvolvimento contendo processadores da Intel e compatíveis com diversos recursos de expansão. Além disso, as duas plataformas podem rodar em Linux
Intel Galileu
A placa de desenvolvimento Galileu pode ser comparada a uma versão mais avançada do Arduino, pois é compatível com ele e com mais recursos, possibilitando a realização de projetos mais complexos. (figura 5)
São as seguintes suas principais especificações:
- Utiliza um processador Intel® Quark SoC x 1000
- Tem 256 MB de RAM
- Tem 8 NB de memória flash
- Possui recursos de interfaceamento múltiplo no padrão da indústria
Slot Mini-PCI Express
Porta Ethernet de 100 Mb
Slot micro SD para suporte de 32 GB de memória adicional
Porta host USB
Porta cliente USB
- Compatibilidade Arduino
- Suporta Linux Yocto 1.4 Pocky
- Suporta plataformas de desenvolvimento múltiplas
O Galileu se comporta como um míni-PC dada a quantidade de opções de conectividade como acesso à Internet, módulo 3G, Wi-Fi, porta Ethernet, etc.
Diferentemente do Intel Galileu o Intel Edison consiste numa placa especificamente indicada para o desenvolvimento de projetos de baixo custo (figura 6).
- SoC 22 nm Intel® Atom
- 4 GB de memória flash
- Blue Tooth Low- Energy (LE)
- Menos de 1 W de consumo à plena operação
- 40 interfaces GPIO ideais para conectar sensores, tela LCD e diversas placas de expansão.
Mais informações na Intel em https://software.intel.com/en-us/articles/spotlight-on-intel-galileo-and-intel-edison-development-boards
Os PICs ou Programmable Intelligent Controllers são microcontroladores muito populares pela sua facilidade de uso e baixo custo, tendo sido criados pela Microchip (www.microchip.com).
Todos eles estão disponíveis em invólucros ITP (One-Time Programmable Packages), utilizando o mesmo conjunto de instruções.
Da mesma forma que os demais microcontroladores os PICs podem ser usados para agregar inteligência aos projetos mecatrônicos e de outros tipos como automação, IoT, vestíveis, etc.
Selecionando um PIC
Atualmente os montadores que desejam elaborar um projeto mecatrônico podem contar com centenas de tipos diferentes de PICs cujas características diferem conforme a aplicação, da mesma forma que no caso dos Arduinos, conforme vimos no item anterior.
A própria Microchip em seu site fornece um mecanismo de busca que, entrando com as características do projeto que pretendemos desenvolver ela nos indica o PIC que deve ser usado.
O critério básico para ser usado na seleção de um PIC inclui os seguintes itens:
- Tamanho da memória de programa
- Tamanho da RAM de dados
- Tipo de memória
- Existência de recursos adicionais
No site http://www.microchip.com/design-centers/microcontrollers o leitor encontrará informações sobre os tipos disponíveis.
Da mesma forma que os demais microcontroladores a programação é feita conectando-se a placa de programação a um PC, conforme mostra a figura 7.
Como usar e programar, como nos casos anteriores, depende de cada tipo havendo informações nos datasheets do fabricante que devem ser consultados.
Neles também são encontradas aplicações prontas que podem ser utilizados num projeto.
Para acessar uma grande variedade de tipos à venda sugerimos consultar o site da Mouser.
Como Usar um PIC
Um PIC vem "vazio" de fábrica. Apenas a CPU contém o set de instruções que o tipo escolhido oferece.
Assim, o primeiro passo para se usar um PIC no projeto é saber trabalhar com o set de instruções disponível para elaborar um programa que possa ser usado pelo microcontrolador. Isso significa que o leitor deve conhecer a linguagem de programação usada que normalmente é o C++ e ter um computador com um programador.
Este programador consiste numa placa onde existe um soquete para se encaixar o PIC que vai ser programado e um cabo que é conectado ao computador.
O programa consiste, portanto, numa série de instruções que dizem quando e quais entradas devem ter seus níveis lógicos lidos e o que o micriocontrolador deve fazer em função de cada leitura, entregando nas saídas um sinal determinado num certo instante e por um certo intervalo de tempo.
Os programadores ou emuladores de PIC são dispositivos de baixo custo que tanto podem ser montados como adquiridos em casas especializadas.
Um dos programadores mais recomendados para projetos simples que usam PICs com invólucros DIP é o PICStart Plus. este programador é ligado na porta serial do PC onde é rodado o programa no qual o projetista vai riar a aplicação.
Os microcontroladores da série PIC possuem saídas com componentes CMOS o que significa que podem tanto suprir como drenar a mesma corrente de saída, alguma coisa com um limite em torno de 10 mA tipicamente. Isso é diferente dos dispositivos TTL em que se pode drenar mais corrente do que fornecer.
Tabela – Set de Instruções
Existem apenas 35 instruções no set RISC dos chips PIC. Instruções mais complexas são elaboradas a partir delas. Muitas macros são incluídas para que o projetista crie um set de instruções mais rico.
Mnemônico, operandos Descrição
ADDWAF f,d Soma W e f
ANDWF f,d Soma W com f
CLRF f Limpa f
CLRW - Limpa W
COMF f,d Complementa
DECF f,d Decrementa
DECFSZ f,d Decrementa, sai se 0
INCF f,d Incrementa f
INCFSZ f,d Incrementa, sai se 0
IORWF f,d Inclusive OR E com f
MOVF f,d Move f
MOVWF f Move W para f
NOP - Nenhuma operação
RLF f,d Roda para esquerda f através carry
RRF f,d Roda para direita através carry
SUBWF f,d Subtrai W de f
SWAPF f,d Trica os nibbles em f
XORWF f,d Exclusive OR W com f
Bit Oriented File Register Operations:
BCF f,b Bit Clear f
BSF f,b Bit set f
BTFSC f,b Bit test f, skip if clear
BTFSS f,b Bit test f, skip if set
Literal and Control Operations:
ADDLW k Add literal and W
ANDLW k AND literal with W
CALL k Call subroutine
CLRWDT - Clear Watchdog Timer
GOTO k Go to address
IORLW k Inclusive OR literal with W
MOVLW k Move literal to W
RETFIE - Return from interrupt
RETLW k Return with literal in W
RETURN - Return from subroutine
SLEEP - Go into standby mode
SUBLW k Subtract W from literal
XORLW k Exclusive OR literal with W
Mais informações podem ser obtidas no site http://www.microchip.com
Programação e uso
Os microcontroladores, como os PICs estão incluídos na família dos circuitos lógicos digitais alimentados com uma tensão de 5 V. Nesta família incluimos os circuitos integrados TTL e CMOS.
No caso dos circuitos integrados TTL eles possuem a característica de poderem drenar mais corrente do que fornecer.
Assim, conforme mostra a figura abaixo (modelo a), se ligarmos alguma coisa na saída de um circuito integrado TTL para ser acionada com o nível alto, a corrente disponível será de apenas 2 mA. No entanto, se ligarmos como mostra a figura abaixo (modelo b) para que o dispositivo seja acionado quando a saída for ao nível baixo, a corrente disponível será muito maior, da ordem de 20 mA.
Para os circuitos integrados CMOS isso não é válido, pois eles usam tecnologia CMOS onde a capacidade de fornecimento de corrente é a mesma de drenagem da corrente, conforme mostra a figura 9.
No entanto, os circuitos integrados CMOS podem drenar ou fornecer muito menos corrente do que os circuitos integrados TTL. Na figura 30 mostramos os valores típicos de resistores que devemos ligar em série com os LEDs para que eles possam ser acesos pelas saída de um PIC.
No primeiro caso ele acende quando a saída vai ao nível baixo, ou seja, quando colocamos um "zero" lógico nela, e no segundo caso quando colocamos um "um" lógico.
É claro que, se vamos ligar LEDs diretamente na saída de um PIC não precisamos nos preocupar muito em ter uma corrente maior, mas isso vai mudar se, em lugar de LEDs desejarmos controlar algo maior. Precisamos, neste caso, de circuitos drivers (dos quais falaremos numa outra ocasião).
É claro que, para acender ou apagar LEDs com um PIC não basta apenas saber que resistores precisamos ligar em série com estes componentes.
Isso nos leva à configuração final de nosso circuito de exemplo.
Na figura 10 temos o circuito final que utiliza um PIC18F84 para controlar 8 LEDs vermelhos comuns.
Este circuito faz com que os LEDs acendam quando as saídas I/O do PIC são colocadas no nível alto.
Como o consumo do circuito é muito baixo, o regulador de tensão não precisa ser dotado de radiador de calor.
Obs. Existem versões mais modernas de PICque podem ser usadas em configurações semelhantes.
Programa e Programação
Evidentemente, para programar o PIC o leitor precisará ter a placa apropriada para esta finalidade com o programa instalado no PC.
Este programa foi elaborado para ser usado como o ambiente de desenvolvimento MPLAB da Microchip. Para outros ambientes, principalmente terceirizados pode haver necessidade de modificações.