Você está na página 1de 28

ATUALIZAÇÃO TECNOLÓGICA EM

ELETRÔNICA

UNIDADE

2
DESAFIO 1
APRESENTAÇÃO

Seja bem-vindo!

Neste desafio você estudará os detalhes necessários para iniciar a elaboração de um programa para
microcontroladores da família PIC18F utilizando a linguagem C.

No final deste desafio você terá subsídios para:

• Preparar o seu computador para fazer a programação de microcontroladores PIC;


• Criar um novo projeto no ambiente de desenvolvimento MPLABX;
• Elaborar um programa para o acionamento de portas digitais (I/O); e
• Elaborar um programa para o acionamento de um display LCD.

Preparado? Então siga em frente!

3
PIC OU ARDUINO?

Nos últimos tempos, essa tem sido uma pergunta comum nos ambientes de ensino: Qual é a melhor
tecnologia, PIC ou Arduino? É frequente encontrarmos adeptos fervorosos de uma ou outra tecno-
logia, mas, provavelmente, a melhor resposta para a pergunta seja: depende! Isso acontece porque,
assim como qualquer outra tecnologia, existem vantagens e desvantagens na escolha, portanto, é
preciso analisar as características de cada uma e as necessidades do projeto para escolher qual é a
melhor. E como professores, é muito importante abordar essa questão com nossos alunos, para que
não saiam da escola bitolados em uma ou outra tecnologia.

Sobre o Arduino, é importante lembrar que não se trata de um fabricante de microcontrolador, mas
uma plataforma open source1 que oferece um ambiente de programação próprio e placas modulares
que utilizam microcontroladores da linha Atmega ou outros mais sofisticados, do fabricante Atmel.
Falaremos mais sobre o arduino na próxima unidade deste curso.

Além de PIC e Arduino, não podemos nos esquecer que existem outras tecnologias que devem ser
levadas em consideração para a escolha de um projeto. Apenas para resgatar as informações, vamos
relembrar as principais tecnologias de microcontroladores existentes no mercado. Para facilitar,
vamos dividi-los em grupos que compartilham características semelhantes.

8051

O mais antigo microcontrolador que compõe esse grupo (que leva o mesmo nome do
grupo – 8051) foi lançado pela Intel em 1980. Devido ao seu grande sucesso, até hoje,
vários fabricantes produzem microcontroladores baseados no 8051, com versões vari-
antes que incorporam novas funções e melhorias. Se comparado às novas tecnologias, a
quantidade de funções desses microcontroladores é menor, mas a confiabilidade adquiri-
da ao longo de todos esses anos é um grande diferencial e, por isso, continuam sendo
muito utilizados. Um dos modelos mais conhecidos é o AT89C51, que se tornou pop-
ular por ser um dos primeiros oriundos do 8051 a utilizar uma EEPROM interna para
a memória de programa. Com a EEPROM, o programa pode ser substituído diversas
vezes, o que facilita a elaboração de projetos.

PIC

PIC é uma arquitetura criada pela empresa Microchip, que contém várias famílias de
microcontroladores. O diferencial dessa arquitetura é a diversidade de opções que as
famílias oferecem, que vai desde modelos extremamente simples, até aqueles com uma
grande quantidade de funções integradas. Assim, para cada necessidade haverá um
modelo PIC apropriado. A família completa possui microcontroladores de 8, 16 e 32
bits. As de 8 bits são: PIC10, PIC12, PIC16 e PIC18. A família PIC10 é a mais simples e
vai evoluindo até chegar à PIC18.

1
A definição do Open Source, cuja tradução em português é código aberto, foi criada pela Open Source Iniciative -
OSI, a partir do texto original da Debian Free Software Guidelines – DFSG, e determina o que um programa de código
aberto deve garantir.

4
AVR

AVR é uma linha de microcontroladores criada pela empresa Atmel, que contém várias
famílias de microcontroladores. Assim como ocorre com o PIC, existem vários modelos
de microcontroladores AVR, desde os mais simples até os mais complexos. Na verdade,
a linha AVR é concorrente direta dos PIC. Você encontrará adeptos de uma e da outra
tecnologia, mas saiba que as duas linhas são tecnologicamente parecidas, com sutis van-
tagens e desvantagens de uma sobre a outra. Devido à quantidade de modelos, é muito
difícil fazer um comparativo detalhado entre PIC e AVR, mas lembre-se de que a escolha
certa varia de um projeto para outro. Os AVR estão disponíveis apenas nas versões 8 e 32
bits. Para os de 8 bits, temos as seguintes famílias: TinyAVR, MegaAVR e AVR XMEGA.

HARDWARE LIVRE

Para um projeto baseado em microcontrolador funcionar, é necessário uma PCI para in-
terligar o microcontrolador com os dispositivos externos, tais como motores, lâmpadas,
sensores etc. A elaboração de uma PCI não é uma tarefa tão simples: requer tempo para
fazer o layout e recursos financeiros para produzi-la. Ao falar em centenas de unidades,
esse custo é diluído, mas para projetos menores, em que às vezes precisamos de apenas
uma unidade, a PCI pode representar um custo considerável.

Assim, para facilitar a utilização dos microcontroladores surgiu o Arduino. O Arduino


disponibiliza pequenas PCI prontas (incluindo os componentes, que já vêm soldados),
com os circuitos mais utilizados em sistemas microcontrolados. Para elaborar um pro-
jeto, basta selecionar as placas de que precisa e interligá-las. Com isso você pode se pre-
ocupar apenas com a programação.

Veja a seguir um exemplo. Trata-se da placa que contém o microcontrolador, chamada


de Due.

Além de trazer o benefício de um hardware pronto, o Arduino possui uma plataforma


própria para programação, com uma linguagem mais simples. Com o conceito de uma

5
plataforma livre, o hardware pode ser utilizado sem restrições de licença e a programação
conta com comunidades espalhadas em todo o mundo, com exemplos de programas e
com bibliotecas que facilitam a programação.

O foco inicial desse hardware foram os amadores, pensando em tornar possível o seu
ingresso à tecnologia dos microcontroladores, mas a ideia deu tão certo, que passou a ser
uma tendência, já que outras ferramentas começaram a aparecer com a mesma filosofia.

Saiba mais...

Para saber mais sobre o Arduino, sobre as placas disponíveis e


sobre o ambiente de programação, acesse o site oficial na inter-
net: www.arduino.cc

6
CARACTERÍSTICAS DOS MICROCONTROLADORES

O primeiro passo para um projeto que utiliza microcontrolador é a escolha da tecnologia2 e do mod-
elo que será utilizado. No mercado, existem milhares de opções e muitos fabricantes. A principal
diferença entre eles é a quantidade de funções, a quantidade e o tipo de portas de entrada e de saída,
a frequência de funcionamento (clock) e o custo. A melhor escolha é aquela que atenda aos requisi-
tos do projeto, seja confiável, apresente o menor custo e, claro, esteja disponível para ser comprado.

Quantidade de funções - As funções e os recursos mais comuns nos microcon-


troladores são: temporizadores3, interrupções externas4, comunicação5 (RS232, USB
etc), PWM, quantidade de memória6 etc. Você precisa estudar quais são as funções
que irá precisar para escolher o modelo mais adequado para o seu projeto.

Portas de entrada e de saída - A quantidade de portas de entrada e de saída (I/O)


varia muito de um modelo para outro. Verifique quantas portas serão necessárias
para o seu projeto. Lembre-se de que, além da quantidade, você deverá observar
se as portas precisam ser analógicas ou digitais.

Frequência de funcionamento – A frequência de funcionamento está relacionada


com a velocidade. Pode parecer tentador optar sempre pelo mais veloz, mas veja
se de fato isso é necessário. Além de custar um pouco mais, microcontroladores
mais velozes podem consumir mais energia e dificultar a programação de tempo-
rizadores e PWM.

2
Atualmente, os principais microcontroladores se dividem em três grandes grupos: 8, 16 e 32 bits. A quantidade de bits
afeta diretamente na quantidade de funções e na velocidade dos microcontroladores de modo que, quanto mais bits pos-
suem, mais poderosos [e caros] eles são. Iremos nos ater aos modelos de 8 bits, já que eles integram uma quantidade sig-
nificativa de equipamentos. Mas saiba que, ao dominar essa tecnologia, não será difícil assimilar os recursos das demais.
3
Os temporizadores servem para contar tempo, como atrasar o acionamento de um dispositivo. Os microcontroladores
podem ter vários temporizadores internos, dependendo do modelo. Falaremos mais sobre eles adiante, em programação.
4
As interrupções externas servem para priorizar o tratamento de alguns eventos externos ao microcontrolador. Um ou
mais terminais do microcontrolador são destinados para essa função, de modo que, quando um sinal elétrico é detec-
tado, o microcontrolador para o que está fazendo para atender, imediatamente, a requisição. Como exemplo, podemos
citar uma tecla. Quando um usuário a pressiona, o microcontrolador executa de imediato a função associada a ela.
Falaremos mais sobre as interrupções externas adiante, em programação.
5
comunicação é um recurso que alguns microcontroladores possuem para trocar informações com outros dispositivos,
como um computador ou com outro componente eletrônico.
6
Existem três tipos de memórias para microcontroladores: a memória de programa, a RAM e a EEPROM de dados.
Memória de programa: a maioria dos microcontroladores atuais integra a memória que armazena o programa. A quan-
tidade disponível varia conforme o modelo. Quanto mais complexo for o seu programa, mais memória você irá precisar.
Falaremos mais sobre isso adiante, em programação. Memória RAM: todos os modelos possuem certa quantidade
de memória RAM, que serve como uma espécie de rascunho, para armazenar temporariamente o resultado de cálcu-
los matemáticos, os valores obtidos de sensores etc. Memória EEPROM de dados: funciona de modo semelhante à
memória RAM, mas mantém os dados armazenados mesmo quando o microcontrolador está desligado. Muito útil para
manter as configurações do equipamento.

7
Encapsulamento - Alguns modelos estão disponíveis em vários tipos de encapsula-
mentos, e outros não. Se o encapsulamento for importante para o seu projeto, não se
esqueça de verificar as opções disponíveis.

Custo - Além das questões que envolvem as funções, as portas e a frequência, o


fabricante e a família do microcontrolador escolhidos podem ser significativos na
composição do custo. Utilizar uma tecnologia que você já conhece pode sair bem mais
barato do que se aventurar em uma nova, já que o tempo de execução do projeto e os
imprevistos serão muito menores. Não deixe de avaliar as novas tecnologias, apenas
opte por elas quando realmente valer a pena.

Confiabilidade - Novas tecnologias surgem a todo o momento, mas nem sempre se


mostram confiáveis ao longo do tempo. Algumas apresentam tantos problemas que
acabam desaparecendo do mercado. Não seja um aventureiro! Procure optar por tec-
nologias que estejam consolidadas no mercado. Faça pesquisas na internet e compare
opiniões. Caso queira experimentar uma nova, faça testes exaustivos e disponibilize o
equipamento ao cliente apenas ao ter plena certeza de que não há problemas.

Disponibilidade - Além de todas as questões levantadas, não se esqueça de verificar


se o microcontrolador pode ser comprado facilmente. Embora o mercado atual seja
globalizado, muitos modelos não chegam ao Brasil. Além disso, procure saber se o
modelo escolhido continua em produção. Não é uma boa ideia iniciar um novo pro-
jeto utilizando uma tecnologia morta, pois você terá problemas para comprar novas
unidades ao longo do tempo. Geralmente, os fabricantes indicam em seus sites quan-
do um produto está fora de linha ou mesmo no final da produção.

Como você pôde relembrar, a escolha de um microcontrolador depende de vários fatores. A proposta
deste curso é fomentar o debate e estimular experiências com as tecnologias mais utilizadas nos ambi-
entes de ensino, atualmente, para que todos possam vivenciar um pouco de cada. Portanto, focaremos
nossos estudos no PIC e no Arduino. Nesta unidade, faremos a programação de um PIC da família 18F,
e na próxima, de um Arduino Due, de 32 bits.

8
LINGUAGEM DE PROGRAMAÇÃO

Como você sabe, os microcontroladores interpretam as instruções por meio de números binários,
chamada de linguagem de máquina. Para facilitar a programação foram criadas as linguagens
de programação. Ao invés de utilizar números binários, as linguagens de programação utilizam
mnemônicos, que são textos e símbolos, de fácil memorização, que servem para representar uma
instrução. Veja: para fazer uma soma, ao invés de digitar um número binário para indicar essa
operação, a maioria das linguagens de programação utilizam o símbolo +. Em outros casos, as
instruções são representadas por palavras que indicam o que ela faz, como é o caso da instrução if
(que significa se, em português), que é uma instrução para testar se uma determinada condição é
verdadeira.

A conversão dos mnemônicos em instruções binárias é feita por programas de computador chama-
dos compiladores. Significa dizer que você digita o programa por meio de textos e símbolos e o
compilador traduz para a linguagem do microcontrolador.

Cada linguagem de programação possui o seu respectivo compilador.

As linguagens de programação mais utilizadas em microcontroladores são a Assembly e a C.

A linguagem Assembly é a que mais se assemelha à linguagem de máquina. Ela é


considerada uma linguagem de baixo nível, exatamente devido à semelhança com
o funcionamento real das instruções em um microcontrolador.

A linguagem C, por sua vez, possui uma lógica de instruções mais fácil de se com-
preender e programar, mas que é bem diferente da linguagem de máquina. Devido
à diferença na estrutura das instruções, a linguagem C é considerada uma lin-
guagem de alto nível, se comparada com a Assembly.

Assim, as linguagens de baixo nível são aquelas que mais se assemelham com a linguagem de
máquina. Quanto maior a diferença, mais alto é o nível da linguagem. Portanto, dizer que uma lin-
guagem de programação é de alto ou de baixo nível não significa que ela é melhor ou pior: indica,
apenas, a semelhança da linguagem de programação com a linguagem de máquina.

Mas, na prática, o que isso significa?

As linguagens de baixo nível são mais difíceis para se programar, pois, geralmente, é necessário
digitar um número maior de instruções para que um programa atinja os objetivos. Como a estru-
tura das instruções digitadas é semelhante à binária, o programa, após ser compilado, não sofre
muitas alterações.

9
Já as linguagens de alto nível são mais fáceis para se programar, pois a estrutura das instruções
permite que um programa seja feito com menos instruções. Significa dizer que, para atingir os
objetivos de um programa, é necessário menos esforço do programador. Ocorre que o compilador,
ao compilar um programa desse tipo, gera uma quantidade maior de instruções, pois a conversão
de um mnemônico pode resultar em várias instruções binárias, muitas vezes, desnecessárias. As-
sim, há certo desperdício de memória, e a execução do programa compilado, no microcontrolador,
acaba sendo mais lenta.

Importante!

Concluindo, os programas feitos em linguagens de baixo nível (Assembly)


são mais difíceis para se construir, mas resultam em programas que ocupam
menos memória e executam mais rápidos. Por outro lado, os programas fei-
tos em linguagens de alto nível (C) são mais fáceis para se construir, mas
resultam em programas que ocupam mais memória, e tendem a ser mais
lentos.

Sendo assim, qual é a melhor linguagem para se programar um microcontrolador? A resposta


mais adequada é: depende. É preciso avaliar a quantidade de memória disponível e a velocidade
necessária para o programa. Se a quantidade de memória é farta, e a velocidade não é um fator
crítico, prefira a linguagem C. Se a quantidade de memória é limitada, ou a aplicação requer uma
velocidade muito grande na execução do programa, prefira a linguagem Assembly.

Vale lembrar que, quando os microcontroladores foram criados, a quantidade de memória era lim-
itada, assim como o clock máximo. Atualmente, os microcontroladores possuem boa quantidade
de memória, e um clock máximo que chega facilmente aos 20 MHz. Assim, embora não seja uma
unanimidade, a linguagem C parece ser uma boa opção para os microcontroladores atuais. Por
essa razão, iremos adotar a linguem C ao longo deste curso.

10
COMPILADOR

Existem muitos compiladores para PIC, alguns fornecidos pelo próprio fabricante do microcon-
trolador e outros fornecidos por terceiros. Dentre os compiladores existentes, existem alguns que
são pagos e outros gratuitos. Considerando os compiladores de uma mesma linguagem de pro-
gramação, no nosso caso, C, é importante você saber que há pequenas diferenças no modo de
programação. Embora as instruções da linguagem C sejam padronizadas, os compiladores costu-
mam acrescentar bibliotecas e outras funções específicas de cada fabricante. Portanto, o programa
elaborado para funcionar em um compilador não costuma funcionar em outro.

Assim como acontece na escolha da tecnologia e da linguagem de programação, a escolha do


compilador também depende de alguns fatores como, por exemplo, das funções que você precisa
e da facilidade para a programação. Neste curso vamos adotar o compilador XC8, fornecido pela
Microchip. O XC8 é uma evolução dos compiladores C18 e do Hitech, todos da mesma empresa.
A tendência é que o XC8 substitua o C18 e o Hitech ao longo dos anos, já que ele incorpora as
principais características de cada um.

O XC8 possui uma versão gratuita e uma paga. A diferença entre elas está apenas na otimização do
espaço, na memória de programa. Significa dizer que, no momento de converter os mnemônicos
para a linguagem de máquina, a versão gratuita faz uma conversão mais simples, que resulta em
um maior número de instruções e, consequentemente, ocupa mais memória. Além disso, como
o número de instruções é maior, a execução do programa tende a ser um pouco mais lenta. Na
maioria dos casos, o espaço na memória de programa e a velocidade de execução não costuma ser
crítico, e a versão gratuita atende perfeitamente. Neste curso vamos utilizar a versão gratuita, e
você vai notar que não há restrições para a natureza do programa que vamos desenvolver na situ-
ação de aprendizagem proposta.

11
AMBIENTE DE DESENVOLVIMENTO MPLABX IDE

O MPLABX IDE é um software que possui vários recursos e ferramentas integradas, formando um
ambiente completo para programação.

Além de conter esses recursos, poderá, ainda, permitir a integração de vários compiladores
existentes no mercado, ou seja, você poderá digitar o seu programa no MPLABX e fazer a compi-
lação. Há também a possibilidade de fazer a gravação do programa na memória do microcontro-
lador pelo ambiente, caso ele esteja conectado a um gravador (hardware) compatível.

O MPLABX é gratuito e pode ser baixado diretamente pelo site da Microchip.

12
SIMULADOR DE CIRCUITOS ELETRÔNICOS

No mercado, existem vários programas de computador que permitem simular o funcionamento


de um microcontrolador. Trata-se de um recurso interessante, já que podemos fazer testes antes
mesmo de elaborar o hardware definitivo, o que nos poupa tempo e dinheiro. Ao longo deste cur-
so, você poderá contar com um circuito para simulação, semelhante ao kit didático que utilizará no
encontro presencial. Desse modo, poderá testar o seu programa antes mesmo de gravá-lo no kit.
Utilizaremos, ao longo deste curso, a versão de demonstração do Proteus para simular o funcion-
amento do microcontrolador. A versão de demonstração pode ser baixada gratuitamente pelo site
do fabricante, como veremos a seguir.

13
PREPARANDO O AMBIENTE DE PROGRAMAÇÃO E SIMULAÇÃO

Agora que você resgatou as informações sobre as tecnologias de microcontroladores, sobre as lin-
guagens de programação e sobre os softwares para compilação, programação e simulação, que tal
preparar o seu computador?

Antes de abordar a programação de microcontroladores com display LCD e iniciar a programação


proposta no desafio 1, este é um bom momento para instalar os softwares necessários para o curso.
Os programas podem ser baixados, ou enviados em uma mídia para a sua unidade. Você vai pre-
cisar dos seguintes arquivos/programas:

• MPLABX IDE
• Compilador XC8
• Proteus 7.8 ou superior
• Circuito PICDEM2, para ser aberto no Proteus

Para preparar o seu computador, você deve seguir os passos enumerados abaixo.

1. INSTALE O MPLABX IDE

Para mais instruções sobre a instalação, acesse o Desafio 1 em seu ambiente virtual de
aprendizagem.
Item 08 - Preparando o ambiente de programação e simulação

2. INSTALE O COMPILADOR XC8

Para mais instruções sobre a instalação, acesse o Desafio 1 em seu ambiente virtual de
aprendizagem.
Item 08 - Preparando o ambiente de programação e simulação

3. INSTALE O PROTEUS

Para mais instruções sobre a instalação, acesse o Desafio 1 em seu ambiente virtual de
aprendizagem.
Item 08 - Preparando o ambiente de programação e simulação

4. BAIXE O CIRCUITO PARA SIMULAÇÃO

Para mais instruções sobre a instalação, acesse o Desafio 1 em seu ambiente virtual de
aprendizagem.
Item 08 - Preparando o ambiente de programação e simulação

14
INICIANDO A PROGRAMAÇÃO

Agora que você já preparou o seu computador, pode iniciar no MPLABX, a elaboração do progra-
ma que será executado no PIC. No MPLABX, cada programa fica armazenado em uma estrutura
de arquivos denominada projeto. Desse modo, para iniciar um novo programa, você precisa criar
um novo projeto e o arquivo principal, onde o programa será digitado.

Se você nunca criou ou tem dúvidas sobre como criar um projeto no MPLABX, acompanhe o tu-
torial que preparamos para você.

Veja o tutorial acessando o Desafio 1 em seu ambiente virtual de aprendizagem.


Item 09 - Iniciando a programação

Depois de criar o projeto e o arquivo principal, está tudo pronto para começar a programação.
Todo programa deve contém 4 blocos importantes:

Comentários iniciais, com os dados do projeto.

Inclusões, que indicam as bibliotecas e outros arquivos adicionais do programa.

Bits de configuração, para configurar alguns recursos do microcontrolador.

Funções e procedimentos, que contém as instruções do seu programa.

15
COMENTÁRIOS INICIAIS

O recurso de comentários permite a você inserir qualquer tipo de texto ao longo do seu programa.
Uma de suas funções, que é considerado uma boa prática de programação, serve para que você
comece o programa com as informações básicas sobre ele, tais como: o nome do autor, a data em
que foi elaborado e um breve descritivo sobre o que ele faz.

Dica...

Além de ser utilizado para os dados iniciais, os comentários são úteis para
deixar lembretes e informações importantes ao longo do programa.

Existem duas maneiras para se escrever um comentário: uma para os comentários que ocupam
apenas uma linha e outra para os que ocupam mais de uma.

COMENTÁRIO DE UMA LINHA

Os comentários que ocupam apenas uma linha devem ser precedidos por duas barras,
como indicado abaixo:

// Exemplo de um comentário de uma linha

COMENTÁRIO DE DUAS OU MAIS LINHAS

Quando os comentários são mais extensos, em que são necessárias várias linhas, de-
vemos utilizar uma barra seguida de um asterisco para indicar o início do comentário,
antes da primeira linha, e um asterisco seguido de uma barra para indicar o término, ao
final da última linha. Veja um exemplo:

/* Exemplo de
Um comentário
De várias linhas */

A inclusão das duas barras ou da barra seguida do asterisco, antes dos comentários, serve
para indicar ao compilador que o que vem a seguir não é uma instrução, portanto, o
compilador pode ignorar essas informações durante a compilação. Se não fosse assim,
o compilador tentaria traduzir o texto do comentário para a linguagem binária, o que
geraria um erro de compilação.

16
INCLUSÕES

As inclusões indicam ao compilador que o programa contém outros arquivos além do princi-
pal. Trata-se de uma prática comum para utilizar bibliotecas ou para dividir o seu programa em
mais arquivos, com o objetivo de organizar melhor o programa, normalmente, quando ele é muito
grande.

As inclusões são feitas por meio de uma diretiva chamada include. Basta digitar essa diretiva no
programa, desse modo:

#include <nome do arquivo>

Veja um exemplo:

Há duas maneiras para informar as inclusões:

1 – Entre os símbolos de menor e maior <arquivo.h>: Indique o nome do arquivo entre os símbo-
los de menor e maior quando ele estiver na pasta do compilador.

2 – Entre aspas duplas “arquivo.h”: Indique o nome do arquivo entre aspas duplas quando ele esti-
ver na mesma pasta do projeto.

Uma inclusão obrigatória para todos os programas que utilizam microcontroladores da família
PIC18 no XC8 é a <xc.h>. Este arquivo contém todas as informações sobre o microcontrolador
que estamos utilizando, e que são necessárias para o funcionamento correto das bibliotecas nativas
do XC8. Outras inclusões são opcionais, de acordo com as bibliotecas ou com a divisão que você
queira fazer no seu programa.

Você sabia?

Que no compilador XC8 não é necessário fazer a inclusão da biblioteca es-


pecífica de cada microcontrolador, como acontecia no compilador C18? No
XC8, basta incluir o arquivo xc.h.

17
BITS DE CONFIGURAÇÃO

Depois de inserir os comentários iniciais e as inclusões, o próximo passo é a indicação dos bits de
configuração. Vários recursos, no microcontrolador, precisam ser ativados ou configurados para
que funcionem corretamente. A configuração é feita por meio de pequenos espaços de memória
conhecidos como registradores, que servem para armazenar a configuração. Em alguns microcon-
troladores, esses registradores são chamados de fuses (fusíveis, em português).

Como exemplo, podemos citar o registrador de configuração para o oscilador, em que você in-
forma se o oscilador utilizado será interno ou se será por meio de um cristal de quartzo, externo.
Além desse, existem registradores para configurar os temporizadores, as interrupções, o funcion-
amento das portas etc.

Como você pode imaginar, os registradores podem variar conforme o modelo do microcontro-
lador. Para conhecer detalhes, a melhor fonte é o próprio datasheet do microcontrolador. Sempre
que precisar utilizar algum recurso, o datasheet indicará as configurações necessárias.

Para o caso dos microcontroladores da família PIC, os registradores de configuração podem ser
manipulados no instante da gravação. Para facilitar esse trabalho, porém, a maioria dos compi-
ladores oferece um recurso em que você pode indicá-los no próprio programa, antes de iniciar as
instruções.

O modo como isso é feito varia um pouco de um compilador para outro. Para o caso do com-
pilador XC8, eles são configurados por meio de uma diretiva denominada pragma config. Basta
digitar a diretiva, da seguinte forma:

#pragma config <nome da configuração> = <valor>

Veja alguns exemplos:

Dica...

O MPLABX possui um recurso para facilitar a configuração dos bits. A van-


tagem é que você saberá quais são os bits existentes no microcontrolador que
está utilizando, e não precisará digitar todos eles no programa, basta copiar e
colar. Este recurso está disponível no topo da tela do MPLABX, em:
Window -> Pic Memory Views -> Configuration Bits

18
FUNÇÕES E PROCEDIMENTOS

Por fim, depois iniciar o programa com os comentários, indicar as inclusões e os bits de configu-
ração, você já pode iniciar a programação propriamente dita, ou seja, pode incluir as instruções que
definirão o funcionamento do seu programa.

Como você sabe, as instruções devem ser inseridas em blocos, que podem ser funções ou procedi-
mentos. Você sabe qual é a diferença entre eles?

Ambos auxiliam na organização do seu programa, permitindo que você divida grandes tarefas em
tarefas menores, ou seja, em pequenos blocos de instruções. A diferença entre as funções e os pro-
cedimentos é que as funções retornam um resultado, no momento em que o bloco for concluído,
enquanto que o procedimento não retorna informação alguma.

Todo programa feito em linguagem C deve, obrigatoriamente, ter um procedimento denominado


main(). Esse será o primeiro procedimento executado quando o microcontrolador for ligado ou
resetado, ou seja, as primeiras instruções do seu programa deverão estar contidas no procedimento
main(). A inclusão de outros procedimentos e/ ou funções é opcional, e deve ser feita para facilitar
a programação e o reaproveitamento de código, de acordo com as boas práticas da programação
estruturada.

A partir daqui, podemos começar a pensar nas instruções, nos procedimentos e nas funções que
farão parte do programa. Para facilitar os estudos, vamos dividir a programação, de acordo com as
principais funcionalidades e recursos dos microcontroladores.

Para saber mais sobre programação estruturada, acesse o Desafio 1 em seu


ambiente virtual de aprendizagem.
Item 13 - Funções e procedimentos

19
ACIONAMENTO E LEITURA DE PORTAS DIGITAIS

Uma das funções mais utilizadas em microcontroladores é o acionamento das portas, ou seja, é
fazer com que o nível lógico de uma porta altere para zero ou um.

O procedimento é bastante simples, e requer apenas duas etapas: a configuração da porta e o acion-
amento da porta.

CONFIGURAÇÃO DE PORTA

A configuração da porta indica ao microcontrolador o modo de operação da porta, afinal, a


maior parte delas tem a capacidade de operar como porta de saída ou porta de entrada. Desse
modo, para acionar uma porta é necessário configurá-la como porta de saída, o que é feito por
meio da instrução TRIS. Há duas maneiras de configurar portas: alterando uma porta de cada
vez ou um conjunto delas, de acordo com o porto7.

Veja alguns exemplos:

Em alguns casos, é necessária uma configuração adicional na porta, para informar que se trata
de uma porta digital. Isso ocorre quando a porta que desejamos utilizar permite o uso de sinais
digitais e analógicos.

Nos microcontroladores da família PIC essa configuração é feita pelo registrador ADCON1.
Veja um exemplo. No caso, todas as portas serão configuradas como portas digitais:

Este exemplo é valido para o microcontrolador PIC18F452. A configuração das portas pode

variar de um microcontrolador para outro. Para saber como configurar cada microcontro-
lador, é necessário consultar o respectivo datasheet.

7
Porto é um conjunto de portas de um microcontrolador, geralmente, divididos em blocos de 8 bits.

20
ACIONAMENTO DE PORTA

O acionamento de portas pode ser feito para uma única porta ou para o porto inteiro. Para
isso, basta executar a instrução PORT. Veja alguns exemplos:

LEITURA DE PORTA

A leitura do estado de uma porta, quando utilizada como entrada, também é feita por meio da
instrução PORT. A diferença está no modo de executar a instrução. Ao invés de atribuir um valor,
devemos ler a instrução PORT. Podemos carregar o valor atual de uma porta para uma variável, ou
executar uma instrução condicional, ou seja, que pode executar determinada tarefa, de acordo com
o estado atual da porta. Veja um exemplo:

Saiba mais...

If é uma instrução condicional da linguagem C. A condição a ser verificada


deve ser colocada entre parênteses. Caso a condição testada seja verdadeira, o
conjunto de instruções que aparecem entre as chaves, logo após a instrução if,
será executado. Se desejar que um conjunto de instruções seja executada ap-
enas quando a condição verificada for falsa, você deverá adicionar um bloco
denominado else depois do if. Nesse caso, as instruções depois do bloco else
só serão executadas quando a condição verificada for falsa.
Para mais informações, consulte o site http://www.cprogramming.com/tuto-
rial/c/lesson2.html.

21
DISPLAY LCD

O display de cristal líquido ou simplesmente LCD (Liquid Crystal Displays) é uma interface
homem-máquina (IHM) em que é possível escrever caracteres alfanuméricos, compondo mensa-
gens. Veja um modelo a seguir:

O display de cristal líquido contém um microcontrolador dedicado. Sendo assim, é necessário um


programa que inicialmente parametrize o display e envie os comandos corretos para compor as
mensagens.

A parametrização inclui o modo de comunicação entre o LCD e o microcontrolador, o modo de


deslocamento da mensagem e a visibilidade do cursor.

Além da parametrização, alguns comandos devem ser enviados ao LCD, entre eles, limpar o display
e posicionar o cursor onde deverá ser escrito a mensagem.

O display utilizado possui duas linhas e 20 posições e os endereços de cada posição são:

• A 1ª linha vai de 0x80h a 0x93h; e


• A 2ª linha vai de 0xC0 a 0xD3.

A programação de um display depende do acionamento de algumas portas do microcontrolador ao


qual o display está conectado.

A configuração mínima exige 6 portas: uma para acionar o display, uma para informar se o dado
enviado é um comando9 ou um texto10 e quatro para o envio de dados. Veja um exemplo de um dis-
play conectado a um microcontrolador utilizando a configuração mínima de hardware:

9
Um comando é uma informação enviada ao display para executar determinada tarefa, por exemplo, apagar o display
ou posicionar o cursor em determinada linha e coluna.
10
Um texto é uma informação que deverá ser exibida no display, por exemplo, uma letra ou um número.
22
Para facilitar a programação existem bibliotecas prontas para o acionamento de displays LCD. A
vantagem das bibliotecas é que você não precisa se preocupar com o acionamento sincronizado
das portas, por exemplo, para escrever uma mensagem de vários caracteres, basta executar uma in-
strução. Se não fosse a biblioteca, você precisaria executar um procedimento que envolve o acion-
amento de várias portas, para cada caractere enviado.

O compilador XC8 possui um conjunto de bibliotecas nativo chamado PLIB. Dentre as bibliotecas
disponíveis existe uma específica para displays LCD, camada XLCD. Praticamente todas as biblio-
tecas PLIB estão prontas para o uso, bastando apenas informar quais você deseja utilizar, por meio
da diretiva #include. Para o caso da XLCD, porém, foram necessários alguns ajustes para adequá-la
ao nosso kit didático. Isso se deve às portas que foram utilizadas no projeto, e devido ao modelo do
display não ser totalmente compatível com a biblioteca.

Portanto, ao invés de utilizar a biblioteca XLCD, utilizaremos a LCD. A estrutura da biblioteca


LCD é a mesma da XLCD. Os nomes dos procedimentos e das funções podem ser diferentes, mas
são parecidos com os originais.

Saiba mais...

O compilador XC8 possui um documento contendo explicações detalhadas


sobre o uso da biblioteca PLIB, chamado pic18_plib.pdf. Esse documento
está disponível na pasta docs, que pode ser encontrada na pasta de instalação
do XC8 (geralmente em “C:\Program Files (x86)\Microchip\xc8\v1.12\docs”,
em que v1.12 pode variar conforme a versão do XC8 que você instalou.

23
1.BAIXE E CONFIGURE A BIBLIOTECA LCD

Você deverá baixar os dois arquivos da biblioteca LCD, copiá-los para a pasta do seu projeto e
incluí-los no MPLABX. Para incluí-los no MPLABX, basta clicar com o botão direito sobre as
pastas Header Files e Source Files e clicar em Add Existing Item. Abrirá uma janela para que
você indique o local onde estão os arquivos.

2. INCLUA A BIBLIOTECA NO SEU PROGRAMA

Você deverá utilizar a diretiva #include para informar ao compilador que você utilizará a bib-
lioteca LCD. Note que é necessário informar, apenas, o arquivo de extensão H.

24
3. INICIALIZE O DISPLAY

Nos trechos iniciais do seu programa, execute o procedimento InicializaLCD. Os parâmetros


se referem ao modo de configuração do hardware (no nosso, 4 bits de dados) e ao tamanho dos
caracteres no display. Este procedimento configura as portas envolvidas (incluindo as configu-
rações TRIS) e envia os comandos iniciais para o display.

4. ESCREVA AS MENSAGENS

O procedimento para escrever mensagens se resume em duas etapas: uma para indicar a
posição inicial do texto (linha e coluna) e outra para escrever o texto. No exemplo, note que
existem dois blocos em destaque. No primeiro, o cursor é posicionado no endereço 0x80, que
corresponde à primeira coluna da primeira linha. Em seguida, o procedimento EnviaTextoL-
CD_ROM() escreve o texto Exemplo. No segundo bloco, o cursor é posicionado no endereço
0xC0 e, logo depois, é enviado o texto Display LCD.

25
CARACTERES ESPECIAIS

Além dos caracteres padrão contidos na memória do display, você poderá criar outros, de acordo
com a necessidade. Por exemplo, caracteres acentuados ou pequenos desenhos.

É importante lembrar que no display LCD compatível com o controlador HD44780, que é um dos
mais utilizados, cada caractere é formado por uma matriz de 5x8 pixels. Para configurar um carac-
tere especial é necessário enviar para a memória do display um conjunto de 8 bytes, sendo que cada
byte corresponde a uma linha da matriz. O valor de cada byte indica se determinado pixel estará
aceso ou apagado, ou seja, é preciso compor o número binário indicando 1 para pixel aceso e 0 para
apagado.

Saiba mais...

Visite este site e veja como gerar o conjunto de bytes para caracteres especiais.
No site, basta clicar em cada pixel que você deseja acender. Os números que
correspondem aos pixels serão montados automaticamente, à direita da tela.
http://omerk.github.io/lcdchargen/

Depois de obter os 8 bytes, basta escolher uma posição de memória para armazená-lo. Os dis-
plays compatíveis com o HD44780 permitem armazenar até 8 caracteres especiais. O endereço de
memória inicial é o 0x40, sendo que cada caractere ocupa 8 bytes, ou seja, a linha 1 do caractere 1
será armazenado na posição 0x40, a linha 2 do mesmo caractere na posição 0x41 e assim por diante.
Significa dizer que o endereço inicial para armazenar o segundo caractere é 0x48.

Depois, para exibir o caractere, basta enviar um comando indicando a posição de memória em que
está o caractere.

Importante!

O endereço inicial de gravação é 0x40, mas como ele representa o primeiro


endereço disponível para caracteres especiais, no momento de escrever, você
deverá indicar o endereço 0x00.

Acompanhe um exemplo em que iremos gravar e exibir um caractere que representa um fantasma
do jogo PAC MAN.

26
1.GRAVAR O CARACTERE

Você deverá desenhar o caractere com base em uma matriz de 5x8 pixels, e obter 8 bytes,
sendo um para cada linha. O fantasma corresponde à seguinte sequencia: 0b01110, 0b11111,
0b10101, 0b11111, 0b11111, 0b11111, 0b10101 e 0b00000. O exemplo, a seguir, traz o trecho
do programa para armazenar o caractere na memória:

2. ESCREVER O CARACTERE

Você deverá desenhar o caractere com base em uma matriz de 5x8 pixels, e obter 8 bytes,
sendo um para cada linha. O fantasma corresponde à seguinte sequencia: 0b01110, 0b11111,
0b10101, 0b11111, 0b11111, 0b11111, 0b10101 e 0b00000. O exemplo, a seguir, traz o trecho
do programa para armazenar o caractere na memória:

Veja o caractere que acabamos de configurar sendo exibido no display:

27
DESAFIO 1

Além dos caracteres padrão contidos na memória do display, você


poderá criar outros, de acordo com a necessidade. Por exemplo, carac-
teres acentuados ou pequenos desenhos.

Agora que você conhece os principais aspectos necessários para iniciar a


programação de um microcontrolador PIC, chegou o momento de reto-
mar o desafio 1.

Retorne à tela principal do ambiente virtual de aprendizagem e participe


do desafio 1. Lembre-se que a elaboração do programa proposto deverá
ser realizada em grupo. Você terá à disposição um ambiente de grupo, para debater com os colegas
e um espaço destinado para a entrega do programa.

Qualquer dúvida, entre em contato com o seu tutor.

Bom trabalho!

RECAPITULANDO

Neste desafio você estudou:

• As principais ferramentas necessárias para a programação de micro-


controladores PIC;
• Como iniciar a programação de um microcontrolador PIC;
• Como realizar o acionamento de portas digitais (I/O) em um micro-
controlador PIC; e
• Como acionar um display LCD.

Você deverá participar da seguinte atividade:

• Desafio 1 – atividade em grupo: Elaborar um programa para exibir em um display LCD o


nome da empresa e o ciclo atual de lavagem.

28