Você está na página 1de 50

MICROCONTROLADORES

Prof: Maximiano Correia Martins, D.Sc


Plano de Aula: 3ª Aula de Microcontroladores

Ambiente de desenvolvimento para microcontroladores PIC

Ambiente de desenvolvimento para a plataforma Arduino


ORIENTAÇÕES DE ESTUDO E OBJETIVOS DA AULA VIRTUAL Nº 04 – Plano de Ensino Estácio

Assistir à aula em vídeo intitulada IDE, COMPILADOR E SIMULADOR PARA


MICROCONTROLADORES PIC, disponível no link: https://youtu.be/NsoyEZB5dPs

Estudar o conteúdo on-line intitulado MICROCONTROLADORES - CAP. 1 e 2,


disponível no link:
https://www.ufsm.br/unidades-universitarias/ctism/cte/wp-
content/uploads/sites/413/2018/12/05_microcontroladores.pdf
IDE, compilador e simulador
O que é um IDE?
Integrated Development Environment ou Ambiente de Desenvolvimento Integrado
É um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de
software com o objetivo de agilizar este processo.
Normalmente, uma IDE é composta de:
• Editor de Programas
• Compilador
• Linker
• Loader
• Depurador
IDE
Os IDEs modernos incluem muitas ferramentas. Para chamá-lo de
IDE, deve-se incluir pelo menos um editor de texto (para digitar
seu programa), algum gerenciamento de projeto e ferramenta de
compilação para executar seu programa sem sair do IDE.

O IDE moderno também pode incluir ferramentas de depuração,


ferramentas de cobertura de código, ferramentas de
gerenciamento de versão, ferramentas automatizadas de ajuda e
documentação, editores de recursos gráficos e muitas outras
ferramentas úteis.
IDEs recomendadas
Compilador
Compilação é processo de tradução do código fonte escrito para um
código de máquina, de alto nível para baixo nível.

A compilação é feita por um software especial conhecido como


compilador.

C, Python, Java são uma linguagens de alto nível e precisam de um


compilador para convertê-lo em um código executável e para que o
programa possa ser executado em uma máquina ou microcontrolador.
Compilador
Como todos os outros microcontroladores, o microcontrolador PIC pode ser programado usando
linguagem de montagem (assembly).
Para melhor rendimento e mais rapidez na conclusão de projetos, usa-se linguagens de alto nível, como C.
Muitos compiladores de linguagens de alto nível estão disponíveis para programar um microcontrolador
PIC como MikroC, MPLAB XC8, C-Tech C, além do compilador CCS C que usaremos.
CCS significa Custom Computer Services, uma empresa de soluções para microcontroladores PIC.
O CCS C foi um dos primeiros e é um dos melhores compiladores para iniciantes, pois inclui muitas
bibliotecas integradas que permitem programar um microcontrolador PIC sem profundo conhecimento de
sua arquitetura interna.
Simulador
Existem diversas definições para a simulação, dentre elas podemos citar a de Pegden
(1990) que diz “a simulação é um processo de projetar um modelo computacional de
um sistema real e conduzir experimentos com este modelo com o propósito de
entender seu comportamento e/ou avaliar estratégias para sua operação”.

Usaremos simuladores ao longo desta disciplina por não estarmos presentes em um


laboratório físico.
Exemplos de Simuladores para microcontroladores:
-> PICsimLab (https://sourceforge.net/projects/picsim/)
-> Tinkercad (https://www.tinkercad.com/)
PICsimLab
O PICsimLab é um acrônimo de PIC Simulator Laboratory, um
simulador de placas de desenvolvimento da família PIC, desenvolvido
pelo professor Luis Claudio Gambôa Lopes do CEFET/MG.
Inicialmente suportando apenas uma placa de desenvolvimento com o
PIC16F628A, a versão atual pode simular 4 placas com vários
periféricos e vários microcontroladores PIC, como o
PIC16F877A/18F452.
A arquitetura do simulador permite a fácil implementação de
elementos externos na linguagem C.
Ciclo de desenvolvimento
As tarefas típicas para desenvolver uma aplicação com microcontroladores em sistemas
embarcados são:
1)Criar a arquitetura de alto nível. A partir dos recursos e do desempenho desejados,
decidir qual dispositivo microcontrolador é mais adequado para a aplicação, projetando o
circuito de hardware associado. Depois de determinar quais periféricos e pinos controlam
o hardware, escrever o firmware - o software embutido que controlará os aspectos de
hardware do aplicativo incorporado.

2)Compilar, montar e conectar o software usando o assembler e/ou compilador e mais um


linker para converter o programa (códigofonte) em "zeros e uns", o código de máquina
para os microcontroladores PIC, que fica disponível em um arquivo .hex. Este código de
máquina acabará se tornando o firmware (o código programado no microcontrolador).
Montadores e compiladores
Uma ferramenta de linguagem, como um montador, que é diretamente
traduzível em código de máquina, ou um compilador que permite uma
linguagem mais natural para a criação de programas, deve ser usada
para escrever e editar o código.
No nosso caso utilizaremos o compilador CCS C dentro da IDE MPLAB.
Montadores e compiladores ajudam a tornar o código compreensível,
permitindo que rótulos de função identifiquem rotinas de código com
variáveis que possuem nomes associados ao seu uso e com construções
que ajudam a organizar o código em uma estrutura.
Última etapa
3) Teste de código ou depuração. Normalmente, um programa
complexo não funciona exatamente da maneira como foi
imaginado, e os "bugs" precisam ser removidos para obter
resultados adequados. O depurador permite que se veja os "zeros e
uns" executados, relacionados ao código-fonte escrito, com os
símbolos e nomes das funções do seu programa. A depuração
permite que se experimente o código para ver o valor das variáveis
em vários pontos do programa e para fazer verificações, alterando
os valores das variáveis e percorrendo as rotinas. Mas nem sempre
se possui uma ferramenta de depuração integrada, o que conduz a
soluções alternativas para testar o código
O que fazer então?
Para desenvolver e depurar aplicativos embarcados sem uma ferramenta especial, é preciso de uma
maneira de baixar o programa para o microcontrolador, ou para simulador.
Nos primórdios do desenvolvimento de software de microcontroladores, o que significa os anos 70 e
início dos anos 80, esse era frequentemente o método escolhido.
Ferramentas de depuração eram raras e, para novas arquiteturas, muitas vezes inexistentes. Em
consequência, o programa era frequentemente desenvolvido, gravado em uma EPROM e testado no
hardware de destino.
A depuração, inevitável em aplicações complexas, podia feita com equipamentos de medição externos,
como analisadores lógicos, ou realizada através do uso mais ou menos criativo dos elementos de saída
no microcontrolador.
Por exemplo, ligados às portas podem existir alguns LEDs para a saída de estados, que podem ser
usados para a saída de depuração durante a fase de testes. Através deles o desenvolvedor visualiza o
fluxo do programa, indicando se o programa atingiu, e em que ordem atingiu, determinadas funções ou
endereços de memória.
Microcontrolador PIC16F628A
O microcontrolador PIC16F628A faz parte de uma subfamília que inclui também os
modelos PIC16F627A e PIC16F648A.
As características de arquitetura seguem as encontradas em microprocessadores
RISC.
Utiliza a arquitetura Harvard, na qual o programa e os dados são acessados em
memórias separadas, utilizando barramentos separados.
]Isso melhora a largura da banda, em comparação com a arquitetura tradicional Von
Neumann, na qual o programa e os dados são acessados em uma mesma memória.
A separação das memórias de programa e de dados permite ainda que as instruções
sejam dimensionadas em palavras com largura diferente de 8 bits.
Microcontrolador PIC16F628A
Os códigos operacionais das instruções do PIC16F628A possuem largura
de 14 bits, tornando possível que todas as instruções sejam constituídas
de apenas uma única palavra.
Um barramento de acesso à memória de programa com 14 bits de largura
busca uma instrução de 14 bits em um ciclo único.
Um pipeline de dois estágios sobrepõe a busca e a execução das
instruções.
Consequentemente, todas as 35 instruções (em assembly) são executadas
em um único ciclo, com exceção do desvio na execução do programa.
Unidade Lógica Aritmética (ALU) do PIC16F628A

O PIC16F628A contém uma Unidade Lógica Aritmética (ALU) e um


registrador de trabalho de 8 bits.
A ALU é uma unidade aritmética de propósito genérico e tem
capacidade de executar operações de adição, subtração, deslocamento,
bem como operações lógicas.
Um diagrama de blocos simplificado é apresentado na figura a seguir:
PIC16F628A
Pinagem do microcontrolador PIC16F628A
A figura mostra a pinagem do microcontrolador PIC16F628A com as diferentes funções que podem
assumir, detalhadas na tabela a seguir.
Memória do PIC16F628A
Dois tipos de memória de dados são fornecidos.
A memória de dados não-volátil EEPROM (128 x 8 - 224 posições de 8 bits) é oferecida para armazenamento de
dados por longos períodos, como por exemplo valores de calibração, dados de tabelas de consulta, ou
quaisquer outros dados que podem requerer uma atualização periódica no campo.
Estes tipos de dados não são perdidos quando a energia é interrompida. A outra memória de dados fornecida é
a memória de dados regular RAM (224 x 8 – 224 posições de 8 bits).
A memória de dados regular RAM é oferecida para o armazenamento temporário de dados durante a operação
normal.
Os dados são perdidos quando a energia é desligada.
A memória de programação é do tipo Flash (2048 x 14 – 2048 posições de 14 bits). São 16 pinos de entrada e
saída (mais dois para alimentação e terra) em duas portas (PORTA e PORTB na figura 1) que podem assumir
diferentes funções dependendo dos bits de configuração.
Vamos Programar um microcontrolador PIC16F628A?
OLÁ MUNDO???
Este programa executa uma tarefa clássica na
iniciação de estudos com microcontroladores,
o piscar de um led ligado a um pino. (RB0)
O esquema dado na figura exemplifica as
ligações esperadas por este programa.
Neste esquema, além do led ligado ao pino 6,
temos o cristal oscilador (XT) que será usado
para sincronizar a execução do programa.
O programa é apresentado está no próximo
slide.
Exemplo de Código fonte:
#include
#fuses XT
#use delay( clock=4MHz )
void main () {
while (1) {
output_high(PIN_B0);
delay_ms(1000);
output_low(PIN_B0);
delay_ms(1000);}
}
Estrutura do programa: Olá Mundo(Pisca Led)
#include <16F628A.h> - Definições do microcontrolador PIC16F628A.
Incluindo este arquivo é possível usar as diretivas e funções que são descritas abaixo, como #fuses,
output_high, PIN_B0 etc.
#fuses XT
Os fuses são bits de configuração. No projeto de software embutido existem algumas configurações
para cada microcontrolador usado no projeto, como o tipo de oscilador interno/externo, se será
usado um cronômetro de monitoramento ou não (watchdog), se haverá um pino de reinicialização ou
não, e assim por diante.
Essas configurações são controladas por meio de registros específicos. Neste exemplo, o parâmetro
XT determina que será usado um cristal externo para se determinar o clock do programa, o valor do
oscilador para o sincronismo do programa. O valor deste está determinado na linha seguinte - #use
delay( clock=4MHz), onde se instrui o compilador a usar uma função delay (atraso) com clock de
4MHz
Estrutura do programa: Olá Mundo(Pisca Led)
void main () - Função principal, existente em todo programa em C.

while (1) - Repetição (loop) infinito. Esta estrutura é essencial para


programas embutidos em microcontroladores. Nestes é preciso garantir que
o programa será executado de forma repetida, em loop infinito, e a estrutura
while garante isso com o parâmetro (1) passado. Também poderia ser usado
o parâmetro TRUE, pois no arquivo de definições 16F628A.h o valor 1 é
atribuído a constante TRUE.

output_high(PIN_B0) e output_low(PIN_B0) - Respectivamente atribui um


valor lógico alto e baixo no pino de nome RB0 (pino 6 da figura 2). A ligação
conforme a figura 3 permite que o led apague e acenda.

delay_ms(1000) - Estabelece um atraso na execução da próxima instrução,


no caso no valor de 1000 ms (1 segundo). Isto irá permitir o efeito de apagar
e acender o led ligado ao pino RB0 com este intervalo
Ambiente de desenvolvimento para a plataforma Arduino
Ambiente de desenvolvimento para a plataforma Arduino
Compreender o básico da arquitetura de microcontroladores da
plataforma Arduino.
• Criar os primeiros programas em C para microcontroladores da
plataforma
Arduino.
• Desenvolver projetos dentro de um ambiente de programação para
plataforma Arduino.
• Simular código em C para a plataforma Arduino.
Arduino
O Arduino é uma plataforma de código aberto usada para construir
projetos de eletrônica. Consiste de uma placa de circuito
programável, onde está o microcontrolador, e um software, ou IDE,
usado para escrever e fazer upload de código do computador para
a placa física. O IDE do Arduino usa uma versão simplificada do C,
facilitando o aprendizado do programa, o que tornou a plataforma
bastante popular entre as pessoas que estão começando com a
eletrônica.
História
Criada em 2005 por um grupo de pesquisadores italianos, a
plataforma foi criada com o objetivo de disponibilizar um
dispositivo barato e fácil de programar, sendo dessa forma acessível
a estudantes e projetistas amadores. Com o conceito de hardware
livre, ideia onde qualquer um pode montar, modificar e personalizar
as placas Arduino a partir do hardware básico, a plataforma se
popularizou e ganhou seguidores e desenvolvedores que
disponibilizam inúmeros recursos de hardware e bibliotecas para a
programação facilitada dos sistemas.
Arduino
A programação facilitada na plataforma Arduino é um dos motivos para
a grande adoção do seu uso, não pela linguagem de programação, que
é a mesma C usada por outras plataformas, mas pela grande
quantidade de código disponível para várias funcionalidades.

A IDE do Arduino é repleta de bibliotecas com funções para programar


as placas e facilitar a integração de periféricos (shields) que são
acoplados à mesma
Arduino Uno
Existem diversas variedades de placas Arduino. O modelo mais
popular, Arduino Uno R3, é uma placa baseada no
microcontrolador ATmega328 do fabricante Atmel. Possui 14 pinos
de entrada/saída digital, 6 entradas analógicas (usadas para medir
tensão, de sensores, por exemplo), um cristal oscilador de 16MHz,
uma conexão USB, uma entrada de alimentação, um botão de reset
etc. A figura 1 mostra a placa Arduino Uno com indicações
numéricas que são detalhadas a seguir
Arduino UNO
Alimentação
• Alimentação (USB / Conector de alimentação) Toda placa Arduino
precisa de uma maneira de estar conectada a uma fonte de energia. O
Arduino UNO pode ser alimentado por um cabo USB vindo do seu
computador ou uma fonte de alimentação de parede (como esta) que
é terminada em um conector de alimentação. Na foto acima, a
conexão USB é marcada com (1) e o conector de alimentação está
marcado com (2). A conexão USB também é usada para carregar o
código na placa Arduino. IDE do Arduino, quando reconhece uma
placa acoplada ao computador, permite fazer o descarregamento do
código compilado na mesma.
Pinagem
Pinos (5V, 3.3V, GND, analógico, digital, PWM, AREF): Os pinos Arduino
Uno são os lugares onde você conecta os fios para construir um
circuito. Eles geralmente têm receptáculos de plástico preto que
permitem que você conecte um fio direto na placa. O Uno tem vários
tipos diferentes de pinos, cada um deles rotulado na placa e usado para
diferentes funções.
• GND (3): abreviação de ?Ground?. Existem vários pinos GND no Arduino
Uno, qualquer um dos quais pode ser usado para aterrar o circuito.
• 5V (4) e 3.3V (5): Fica claro que o pino de 5V fornece 5 volts de energia, e
o pino de 3,3V fornece 3,3 volts de energia. A maioria dos componentes
simples usados com o Arduino Uno funciona em 5 ou 3.3 volts.
• Analógico (6): A área dos pinos sob a etiqueta "Analog In" (A0 até A5 na
UNO) são pinos de entrada analógica. Esses pinos podem ler o sinal de um
sensor analógico (como um sensor de temperatura) e convertê-lo em um
valor digital que podemos ler e usar no programa.
• Digital (7): Em frente aos pinos analógicos estão os pinos digitais (0 a 13
na UNO). Esses pinos podem ser usados tanto para entrada digital (como
dizer se um botão é pressionado) quanto para saída digital (como
alimentar um LED)
• PWM (8): Você deve ter notado o til (~) ao lado de alguns dos
pinos digitais (3, 5, 6, 9, 10 e 11 no UNO). Esses pinos funcionam
como pinos digitais normais, mas também podem ser usados para
algo chamado PWM (Pulse Width Modulation, modulação por
largura de pulso).
• AREF (9): representa a referência analógica. Na maioria das vezes
você pode deixar este pino sozinho. Às vezes, é usado para definir
uma tensão de referência externa (entre 0 e 5 Volts) como o limite
superior para os pinos de entrada analógica.
• Botão de reset (10): Apertar este botão irá conectar
temporariamente o pino de reset ao terra e reiniciar qualquer
código que esteja carregado no Arduino.
LED indicador de energia: Há um pequeno LED ao lado da palavra
"ON" (11). Este LED deve acender sempre que você conectar o
Arduino Uno a uma fonte de energia.
LEDs TX, RX e L: TX é a abreviação de transmitir e RX de receber.
Essas marcações aparecem um pouco na eletrônica para indicar os
pinos responsáveis pela comunicação serial. No nosso caso,
existem dois lugares no Arduino UNO, onde TX e RX aparecem -
uma vez pelos pinos digitais 0 e 1, e uma segunda vez ao lado dos
LEDs indicadores TX e RX (12). Esses LEDs nos darão algumas
indicações visuais sempre que o Arduino estiver recebendo ou
transmitindo dados.
O led L, logo acima destes, está ligado ao pino 13 e é usado para
programas de teste iniciais, como foi visto no roteiro híbrido.
Arduino Uno
Circuito Integrado principal: O Circuito Integrado (13)
é o microcontrolador ATmega328, "cérebro" do
Arduino Uno.

Regulador de tensão: O regulador de tensão (14) não


é algo que se pode interagir no Arduino. Mas é
potencialmente útil saber que está lá e para o que
serve. O regulador de tensão faz exatamente o que
diz - controla a quantidade de tensão que é colocada
na placa do Arduino. Ele irá afastar uma tensão extra
que pode prejudicar o circuito. Claro, ele tem seus
limites, por isso não conecte o Arduino a algo maior
que 20 volts.
Análise do primeiro programa para Arduino
No ambiente de programação para Arduino, um programa,
chamado de sketch, apresenta duas funções básicas: setup() e
loop().

A função setup() é chamada quando um programa começa a


rodar. É usada para inicializar as variáveis, os tipos dos pinos,
declarar o uso de bibliotecas, entre outros. Esta função será
executada apenas uma vez após a placa Arduino ser ligada ou
reiniciada.

Após criar uma função setup(), a função loop() executa


sempre o mesmo bloco de código, continuamente, permitindo ao
programa fazer mudanças e responder às interações com o exterior
da placa.
Análise do primeiro programa para Arduino
No Arduino Uno, os 14 pinos digitais podem ser utilizados como
uma entrada ou uma saída digital utilizando-se as funções
pinMode(), digitalWrite(), e digitalRead().

Abaixo uma descrição destas funções, como usadas no código


acima:

pinMode(13, OUTPUT) - configura o pino 13 como saída.

digitalWrite(13, HIGH) - ajusta o pino 13 para nível alto.

delay(1000) - espera 1000 ms antes de executar a próxima linha de


código
Análise do primeiro programa para Arduino
No ambiente de programação para Arduino, um programa,
chamado de sketch, apresenta duas funções básicas: setup() e
loop().

A função setup() é chamada quando um programa começa a


rodar. É usada para inicializar as variáveis, os tipos dos pinos,
declarar o uso de bibliotecas, entre outros. Esta função será
executada apenas uma vez após a placa Arduino ser ligada ou
reiniciada.

Após criar uma função setup(), a função loop() executa


sempre o mesmo bloco de código, continuamente, permitindo ao
programa fazer mudanças e responder às interações com o exterior
da placa.
Fazendo Leituras com Arduino
A função digitalRead() é usada da seguinte forma:

digitalRead(pino);

- Lê o valor de um pino digital especificado, ALTO ou BAIXO.


Se o pino não estiver conectado a nada, o digitalRead () pode retornar
ALTO ou BAIXO, e isso pode mudar aleatoriamente.
Fazendo Leitura da temperatura com Arduino
Questões sugeridas(AURA)
Para sedimentar o aprendizado do conteúdo híbrido, é sugerido que os alunos
desenvolvam mais exemplos com o Simulador Tinkercad.
1. Crie um novo projeto no Tinkercad com a placa Arduino Uno, assim como feito
no conteúdo online do roteiro híbrido desta aula. Monte um esquema como
dado na figura abaixo.
a. Faça um programa que acenda o led L da placa (ligado ao pino 13)
quando o botão estiver apertado, e apague o led L quando este botão
não estiver pressionado:
b. Altere o programa para que o intervalo de liga e desliga do led L
seja alterado entre 1 seg. e 0,5 seg. quando se aperta o botão.
c. Pense agora em como alterar o período de liga e desliga do led L
entre quatro valores: 0,25 seg, 0,5 seg, 0,75 seg e 1 seg. Certifique-se https://www.tinkercad.com/
que ao iniciar o programa o led esteja apagado e que um dos estados
seja este ao apertar o botão repetidas vezes.

Você também pode gostar