Professional Documents
Culture Documents
para IoT
Material Teórico
Microcontroladores para IoT
Revisão Textual:
Prof. Esp. Claudio Pereira do Nascimento
Microcontroladores para IoT
OBJETIVO DE APRENDIZADO
· Apresentar a arquitetura básico de um microcontrolador que é com-
ponente essencial quando se utilizam dispositivos inteligentes, nós
sensores ou placas microcontroladas associadas a sensores;
· Ilustrar como as coisas, os objetos do cotidiano, as máquinas das
indústrias, as plantas de cultivo em larga escala que normalmente
não contêm um computador acoplado, com a adição de um mi-
crocontrolador conectado à internet pode fornecer poder compu-
tacional suficiente, para aprimorar essas coisas sem adicionar alto
custo e maior complexidade do que os processadores de compu-
tador padrão.
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:
Conserve seu
material e local de
estudos sempre
organizados.
Aproveite as
Procure manter indicações
contato com seus de Material
colegas e tutores Complementar.
para trocar ideias!
Determine um Isso amplia a
horário fixo aprendizagem.
para estudar.
Mantenha o foco!
Evite se distrair com
as redes sociais.
Seja original!
Nunca plagie
trabalhos.
Não se esqueça
de se alimentar
Assim: e de se manter
Organize seus estudos de maneira que passem a fazer parte hidratado.
da sua rotina. Por exemplo, você poderá determinar um dia e
horário fixos como seu “momento 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ê
també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.
UNIDADE Microcontroladores para IoT
8
Um Microcontrolador (MCU) é um pequeno computador, um SoC (System
on Chip), em um único componente de circuito integrado, figura 1. Contém um
núcleo de processador, memória, e periféricos programáveis de entrada e saída,
são os I/O (input/output). A memória de programação pode ser RAM, ROM,
PROM, muitas vezes incluída no chip. Os microcontroladores podem ser usados
em aplicações embarcadas (embutidas). Muito diferente dos microprocessado-
res utilizados em computadores. Microcontrolador pode ser definido como um
circuito integrado programável dedicado, pois vem com a possibilidade de ser
programado para desempenhar tarefas específicas desenvolvidas pelo projetista.
9
9
UNIDADE Microcontroladores para IoT
microcontrolador embarcado
Variáveis Variáveis
de entrada Software de saída
Hardware
MEMÓRIA
DE PROGRAMA
PROCESSADOR
CIRCUITO DE MEMÓRIA DE DADOS INTERFACEAMENTO DE
APLICAÇÃO ENTRADA/CIRCUITOS
ESPECÍFICA DRIVERS
PORTAS DE
TEMPORIZADORES
COMUNICAÇÃO
OU CONTADORES
Fonte de SERIAL
Alimentação INTERFACEAMENTO
Reset
DE SAÍDA/CIRCUITOS
CONTROLE DE PORTA DRIVERS
Circuito Oscilador INTERRUPÇÃO PARALELA
10
Importante! Importante!
EMBARCADO = INCORPORADO
Pode ser hadware, software, devices, sensores. Pode ser um sistema eletrônico ou uma
placa eletrônica.
Figura 4
Fonte: iStock/Getty Images
+ + =
Figura 5 – Composição de um sistema eletrônico microcontrolado
Fonte: Adaptado de iStock/Getty Images
11
11
UNIDADE Microcontroladores para IoT
12
Eventos de alta complexidade ou de missão crítica são aqueles que exigem re-
quisitos prioritários, tolerante a falhas e alta performance, funcionando com mais
de uma tarefa em execução. Essa garantia em tempo real, por sistemas microcon-
trolados, só pode ser garantida se a programação do sistema operacional puder ser
prevista. O sistema operacional ou RTOS prioriza a tarefa em função de condições
previamente atribuídas ou programadas como recurso prioritário.
Um microcontrolador é um processador pequeno. Encapsulado em um único
circuito integrado, limitado em recursos internos, com memória de leitura (ROM ou
Flash) para que o programa ali gravado seja executado quando requerido, também
tem uma memória de acesso aleatório – RAM para auxiliar na execução do progra-
ma gravado, mantendo algum armazenamento necessário temporariamente.
13
13
UNIDADE Microcontroladores para IoT
14
de aplicações de alta velocidade, como sistema de controle servo, robótica
etc. Alguns exemplos de microcontrolador de 16 bits são MCUs de 16 bits,
famílias estendidas Intel 8096 e Motorola MC68HC12.
c) O microcontrolador de 32 bits: ele usa as instruções de 32 bits para
realizar as operações aritméticas e lógicas. Elas são desenvolvidas para
efeitos de aplicação de velocidade muito alta em processamento de ima-
gem, telecomunicações, sistema de controle inteligente etc.
15
15
UNIDADE Microcontroladores para IoT
INSTRUÇÕES DE MÁQUINA
CONVERSÃO DO MICROCÓDIGO
MICROINSTRUÇÕES
EXECUÇÃO DA MICROINSTRUÇÃO
Figura 6 – Arquitetura CISC
INSTRUÇÕES DE MÁQUINA
EXECUÇÃO DA MICROINSTRUÇÃO
Figura 8 – Arquitetura RISC
16
Classificação de acordo com a arquitetura de memória
a) Microcontrolador com Arquitetura de Memória Harvard (Figura 9):
o ponto em que uma unidade microcontroladora tem um endereço de
memória diferente e espaço para o programa e memória de dados, o
microcontrolador tem arquitetura de memória Harvard no processador.
MEMÓRIA
UNIDADE DE DE DADOS
PROCESSAMENTO MEMÓRIA DE
DE PROGRAMA
UNIDADE DE MEMÓRIA DE
PROCESSAMENTO DADOS E DE
PROGRAMA
Em Síntese Importante!
TIPOS DE MICROCONTROLADORES
MICROCONTROLADOR
FAMÍLIA
Figura 11
17
17
UNIDADE Microcontroladores para IoT
18
Pinagem e blocos do Microcontrolador 8051
O 8051 foi produzido pela primeira vez em 1980, foi o sucessor do primeiro
microcontrolador da Intel, o 8048, lançado originalmente em 1976. Ao longo
dos anos, tem sido uma das famílias de microcontroladores mais populares e
ainda vale a pena ser visto. A Intel não produz mais microcontroladores base-
ados em 8051, mas há variantes sendo vendidas principalmente pela Cypress,
Maxim, Microchip / Atmel e Silicon Labs.
O 8051 também se tornou popular como um complemento aos módulos Bluetooth
como uma solução System-On-Chip (SOC). Exemplos são a série CC2541 da Texas
Instruments, os módulos Bluegiga da Silicon Labs e os módulos HC-05/06. A vanta-
gem disso é que pode adicionar seu próprio código em cima da pilha Bluetooth e evitar
provisionar um microcontrolador separado no projeto. A arquitetura clássica do 8051 é
bastante básica (figura 12) e, portanto, fácil de aprender.
Intel 8051 Microarchitecture
P0.0 - P0.7 P2.0 - P2.7
Vcc
Port 0 Port 2
Vss Drivers Drivers
Program
Address
ACC Stack Register
Pointer
PC
Interrupt, Serial Port,
ALU Incrementer 16
and Timer Blocks
8 Program
PSW Counter
PSEN#
Instruction
Register
ALE/PROG# Timing
and DPTR
EA#/VPP Control
RST
Port 1 Port 3
Latch Latch
Port 1 Port 3
OSC. Drivers Drivers
XTAL1 XTAL2
19
19
UNIDADE Microcontroladores para IoT
Outra razão para estudar o 8051 é que ele é um dos poucos microcontroladores
que são deixados com um conjunto de instruções CISC baseado em acumulador,
apesar de ser simples em comparação com sua grande prima, a arquitetura 80x86.
20
Quando aplicado nível lógico 1 a este terminal durante 2 ciclos de máquina (com
o oscilador operando) ocorre o reset do microcomputador. Um resistor interno
9 RST (RESET) E
conectado a VSS permite o power-onreset com apenas um capacitor externo
conectado a VCC.
O Port 3 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
10 a 17 P3.0 a P3.7 E/S e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem ser
utilizados como entradas. O Port 3 também funções alternativas em todos os pinos.
18 XTAL2 (clock2) Saída do amplificador inversor do oscilador.
19 XTAL1 (clock1) Entrada do amplificador inversor do oscilador e entrada do gerador de clock interno.
20 VSS (GND OU TERRA) Potencial de referência (terra).
O Port 2 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
e resistores de pull-up internos. Terminais que estejam no estado lógico 1 podem
21 a 28 P2.0 a P2.7 E/S
ser utilizados como entradas. O Port 2 também gera a parte mais significativa dos
endereços durante acessos às memórias externas de programa ou dados.
PROGRAM STORE ENABLE: Habilita o acesso à memória de programa externa durante
29 PSEN S a busca de instruções. Permance em nível lógico 1 durante o acesso da memória de
programa interna.
ADDRESS LATCH ENABLE: Fornece o sinal para armazenamento da parte menos
30 ALE S significativa do endereço durante acessos às memórias externas de programa
ou dados.
EXTERNAL ACCESS: Quando em nível lógico 1, as instruções da memória de programa
interna são executadas. Quando em nível lógico 0, todas as instruções são buscadas
31 EA E
na memória de programa externa. No caso do 8031 este terminal deve sempre estar
em nível lógico 0.
O Port 0 é uma interface de E/S bidirecional com 8 bits individualmente endereçáveis
em dreno aberto. Terminais que estejam no estado lógico 1 podem ser utilizados
32 a 39 P0.0 A P0.7 E/S como entradas de alta impedância. O Port 0 também atua como barramento de dados
e gera de maneira multiplexada a parte menos significativa dos endereços durante
acessos às memórias externas de programa ou dados.
40 VCC Potencial de alimentação (+5v)
RXD (Received Receptor da interface serial assíncrona ou entrada e saída de dados da interface
P3.0
eXchange Data)/data serial síncrona.
TXD (Transmission Transmissor da interface serial assíncrona ou saída de clock da interface
P3.1
eXchange Data)/clock serial síncrona.
INT 0 (interruption
P3.2 Entrada de interrupção externa 0 ou sinal de controle para o contador 0.
priority 1)
INT 1 (interruption
P3.3 Entrada de interrupção externa 1 ou sinal de controle para o contador 1.
priority 3)
P3.4 T0 Entrada externa para o contador 0.
P3.5 T1 Entrada externa para o contador 1.
P3.6 WR Write Sinal de escrita na memória externa de dados.
P3.7 RD Read Sinal de leitura na memória externa de dados.
P1.0 T2 Entrada externa para o contador 2.
P1.1 T2EX Sinal de trigger para captura/recarga do contador 2, controle de direção.
MISO I (Master In/
P1.5 Interface SPI - Serial Peripherical Interface (usada para programação).
Slave Out)
MOSI (Master out/
P1.6 Interface SPI - Serial Peripherical Interface (usada para programação).
Slave in)
P1.7 SCK (serial clock) Interface SPI - Serial Peripherical Interface (usada para programação).
Fonte: Adaptado pelo autor
21
21
UNIDADE Microcontroladores para IoT
22
Figura 14 – Diagrama de Bloco do ATmega328/P da Atmel
Fonte: Divulgação
23
23
UNIDADE Microcontroladores para IoT
24
Figura 16 – Atmega 328 AVR em uma placa Arduino
Fonte: Adaptado de iStock/Getty Images
25
25
UNIDADE Microcontroladores para IoT
Linguagem de Programação
para Microcontrolador
Em muitos aspectos, a programação de um sistema microcontrolado não é
muito diferente da codificação de um computador desktop, mas existem algumas
diferenças importantes:
• em um sistema embarcado, os recursos - memória e potência da CPU - são
limitados. Por comparação com sistemas desktop, é comumente assumido
que eles não têm limites.
• sistemas embarcados são geralmente em tempo real.
• o número de sistemas operacionais em uso em computadores desktop é
bem pequeno. Existem sistemas operacionais bem específicos para sistemas
embarcados, mas em geral não precisam serem adotados.
• para a primeira aproximação, o hardware de todos os PCs é idêntico. Em com-
paração, cada sistema embarcado é diferente, portanto, programar próximo ao
hardware é mais comum.
Linguagem C
A linguagem C foi projetado nos anos 70 por Dennis Ritchie na AT & T Bell
Labs. A linguagem foi baseada em uma tentativa anterior de desenvolver uma
linguagem de alto nível chamada B, que tinha os benefícios da montagem. Este,
por sua vez, começou como BCPL em Cambridge, Inglaterra. O livro de referên-
cia original, The C Programming Language, de Brian W. Kernighan e Dennis
M. Ritchie, foi publicado em 1978. A padronização completa (por ANSI) levou
outros 10 anos e houve várias iterações desde então.
Mesmo que C seja uma linguagem estruturada, ela oferece uma grande flexi-
bilidade, permitindo a escrita de código que é bastante legível, mas com ofusca-
ção, uma opção prontamente disponível.
26
Aqui está um exemplo de código C bem definido.
int x, y, z;
Apesar de seus desafios, a sintaxe C tem sido a base para vários outros idiomas.
Além de precisar de cuidados com o layout, o C tem uma série de outras “flexibi-
lidades” que podem levar a problemas.
• Os ponteiros são poderosos, mas podem facilmente causar confusão.
• A linguagem é fracamente tipada, facilitando conversões acidentais, o que
pode facilmente levar a erros sutis.
• Os recursos de memória dinâmica são bastante primitivos e não são adequa-
dos para sistemas em tempo real.
27
27
UNIDADE Microcontroladores para IoT
void main ()
while (1)
Linguagem C++
O uso de C++ para microcontroladores merece algumas observações, uma
vez que é uma linguagem orientada a objeto, por este motivo, a princípio pode
ser que parece inútil sua utilização. As considerações para o uso dessa linguagem
são as seguintes:
• Código bem estruturado em C++ é melhor que código mal estruturado em C;
• Usar classes necessariamente não gera maio número de linhas de código, porém
permite uma melhor organização do código e de sua documentação;
• A maioria dos programas C também é válida em C++, ou seja, pode-se
escrever um programa C++ somente com a linguagem C. Isto nos remete
ao fato de que só porque uma linguagem tem vários recursos, não é obri-
gatório utilizar todos estes recursos. Então pode-se associar um melhor
aprendizado usando o C++.
Java ME
A Plataforma Java, Micro Edition (Java ME) fornece um ambiente robusto e fle-
xível para aplicativos executados em dispositivos embarcados e móveis na Internet
das Coisas: microcontroladores, sensores, gateways, telefones celulares, assistentes
digitais pessoais (PDAs), TV caixas de topo, impressoras e muito mais. O Java ME in-
clui interfaces de usuário flexíveis, segurança robusta, protocolos de rede integrados e
suporte para aplicativos em rede e off-line que podem ser baixados dinamicamente.
Os aplicativos baseados no Java ME são portáteis em vários dispositivos, mas apro-
veitam os recursos nativos de cada dispositivo.
28
Oracle Java ME Embarcado - O Oracle Java ME Embedded é um Java runtime
que aproveita as principais tecnologias Java ME implantadas em bilhões de dispo-
sitivos em todo o mundo na Internet das Coisas. As especificações do Java ME são
projetadas para serem ricas em funcionalidade, portáteis para uma ampla variedade
de dispositivos, flexíveis e seguras, ao mesmo tempo que são muito eficientes em
termos de recursos e mantêm baixas as demandas na plataforma subjacente
Linguagem Python
Atualmente, novas oportunidades de linguagens mais fáceis vêm tomando a
atenção dos desenvolvedores de projetos IoT. Olhando para a barra de linguagens
de baixo nível a alto nível da figura 18, mostra a Python como uma das linguagens
que mais aparecem na preferência dos projetistas de IoT.
29
29
UNIDADE Microcontroladores para IoT
Linguagens de programação são de três tipos diferentes: baixo nível, nível médio
e alto nível. As linguagens de baixo nível estão mais próximas de como os compu-
tadores “falam” e são executados diretamente no processador: são difíceis de usar
(leia “impossível ler para humanos”), mas podem ser usados com armazenamento
limitado e são altamente poderosos; eles podem lidar com muito mais instruções por
segundo. Linguagens de programação como Assembly, BASIC, Visual Basic e C
entram nesta categoria.
Em seguida, vem em nível intermediário: mais fácil de codificar, mas ainda re-
quer algum tempo e prática para dominar. As linguagens Java, C # e C ++ são
bons exemplos de linguagens de programação de nível médio.
30
Os evangelistas de Python dizem o seguinte: “Comparado com um Arduino,
a placa Micro Python é mais poderosa, mais fácil de programar e você não
precisa de um compilador no seu PC. Comparado com um Raspberry Pi, o
cartão Micro Python é mais barato, menor, mais simples (você pode fazer um,
ou mesmo modificar o design para atender às suas necessidades) e usa menos
energia. A maioria das outras placas são programadas em C, que é uma lin-
guagem de baixo nível e pode ser difícil de programar corretamente. Por outro
lado, o Python é uma linguagem de alto nível, o que significa que o Python tem
um código menor e mais simples para fazer a mesma coisa que o C”.
No entanto, para aplicação desta linguagem deve usar uma IDE e placa especí-
fica que podem ser limitantes para a aceitação no mercado. A linguagem Python
tem sido utilizada para integrar os dados oriundos das saídas das placas com os
dados resultantes do programa.
Linguagem Javascript
Uma combinação natural em um mundo orientado a eventos é o da IoT e do
Javascript. Seja pelo Pi, Arduino ou placas Bluetooth ou Wifi personalizadas,
mais dispositivos são conectados através do Node.js todos os dias desde 2012.
Figura 20
Figura 19 Fonte: Divulgação
Fonte: Divulgação
31
31
UNIDADE Microcontroladores para IoT
O Node-Red foi construído com a ideia de criar uma maneira simples e visual
de manipular fluxos de dados nos mundos físico e digital. É uma ferramenta de
programação para conectar dispositivos de hardware, APIs e serviços online de
maneiras interessantes.
Figura 21 Figura 22
Fonte: Divulgação Fonte: Divulgação
Figura 24
Figura 23 Fonte: Divulgação
Fonte: Divulgação
32
Um pacote Node.js para acessar portas seriais - Linux, OSX e Windows. Ele
fornece uma interface de fluxo para o código de porta serial de baixo nível necessário
para controlar diferentes dispositivos IoT, escrevendo código Javascript.
Figura 25
Fonte: Divulgação
Vale ressaltar que embora existam várias ferramentas de programação para rea-
lizar projetos de IoT, é importante considerar as bases de programação. Como por
exemplo tipos de dados que serão usados para definição na programação.
Tipos de Dados
Toda variável usada em um programa deve ser declarada como de um deter-
minado tipo, que define seu tamanho (em número de bits) e suas características.
As variáveis podem ser vistas na tabela 4.
33
33
UNIDADE Microcontroladores para IoT
const LIGADO = 1;
const DESLIGADO = 0;
Definições do programa
Algumas definições podem ser incluídas para atribuir outros nomes a símbolos
já existentes no microcontrolador. Supondo que em uma das saídas no microcon-
trolador tenha-se um LED ligado ao bit 0 da porta A. Mas também, um motor DC
ligado ao bit 1 dessa mesma porta.
34
Para facilitar a programação, pode-se fazer:
Importante! Importante!
Figura 26
Fonte: iStock/Getty Images
35
35
UNIDADE Microcontroladores para IoT
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
Sites
Martel Tecnologia
A empresa Martel fornece uma explanação bem didática e ilustrativa sobre mi-
crocontroladores. Explore o portal e acompanhe as informações oferecidas sobre
“O que é Microcontrolador?”.
https://goo.gl/ZDpksk
MikroElektronika
https://goo.gl/kpX22z
Explore Embedded
https://goo.gl/WZkCNB
Vídeos
Microcontroladores, o que são? Para que servem? Quais os modelos? Internet das Coisas
Assista ao vídeo abaixo, bem interessante, para você observar a evolução dos micro-
controladores, das placas e dos softwares.
https://youtu.be/2ILbTSw6jJA
Leitura
ATmega48A/PA/88A/PA/168A/PA/328/P
O fabricante de Microcontrolador Atmel disponibiliza em seu portal os DataSheets,
manuais técnicos das famílias dos microcontroladores para implementação em pro-
jetos. A família dos microcontroladores usados em placas Arduino são da linha do
ATMega. A seguir algumas características importantes destacadas que devem ser
sempre consultadas para o desenvolvimento dos projetos em IoT.
https://goo.gl/9apV3a
36
Referências
BONACORSO, Nelso Gauze. Automação eletropneumática. 12. ed. São Paulo:
Érica, 2013. 160 p. ISBN 9788571944251.
CAMARGO, Valter Luís Arlindo de. Elementos de automação. São Paulo: Erica,
2014. ISBN 9788536518411.
37
37