Você está na página 1de 53

INSTITUTO FEDERAL DE EDUCAO, CINCIA E TECOLOGIA DO CEAR

TECNOLOGIA EM MECATRNICA INDUSTRIAL

Programao de Microcontroladores PIC em BASIC


para Iniciantes: Utilizando o Proton IDE

Marcelo Vieira do Nascimento de Freitas

Limoeiro do Norte-CE
Maro de 2015
Prefcio

Este trabalho destinado a proporcionar uma noo bsica sobre programao de


microcontroladores PIC em linguagem BASIC. Elaborado na disciplina de Projeto Social tem como
objetivo final a incluso social daqueles que iniciam a aprendizagem na programao e utilizao de
microcontroladores PIC em linguagem BASIC. Ser discutido questes bsicas de hardware,
software e assuntos correlacionados.

A princpio ser abordado conceitos sobre softwares utilizados na programao, compilao


e simulao de programaes. Em seguida ser mostrado conceitos sobre microcontroladores PIC,
em especial o PIC16F877A, que ser o utilizado para simulaes. Dado o conhecimento adquirido
anteriormente se far necessrio a explanao de alguns conceitos sobre eletroeletrnica, assim
auxiliando na melhor compreenso das estruturas utilizadas para o funcionamento correto dos
microcontroladores. Por ltimo ser abordado a estrutura de programao em BASIC, mostrando
quais so as principais funes e como elas funcionam, mostrando aplicaes e exemplos.

O software de programao e compilao utilizado para programao em Basic ser o Proton


IDE. Para a simulao ser utilizado o ISIS Proteus.

Vale ressaltar que apesar de apresentar conceitos bsicos sobre hardware o foco deste
trabalho ser a apresentao de modo bsico da linguagem de programao BASIC aplicado em
microcontroladores PIC.
Sumrio
1 - SOFTWARES UTILIZADOS .............................................................................................................. 1
1.1 ISIS PROTEUS ............................................................................................................................... 1
1.2 PROTON IDE ................................................................................................................................. 1
1.3 GRAVAO E COMPILAO DA PROGRAMAO ............................................................... 2
1.3.1 - Gravao de Programas Fisicamente ..................................................................................... 2
1.3.2 Gravao de Programas por simulao ................................................................................. 3
2 - O PIC 16F877A ..................................................................................................................................... 4
3 - CONCEITOS BSICOS SOBRE ESTRURAS INTERNAS DOS MICROCONTROLADORES .... 7
3.1 - Memrias........................................................................................................................................ 7
3.2- Unidades de memria ..................................................................................................................... 7
3.3 Memria de Programa (FLASH) .................................................................................................. 8
3.4 Memria de Dados (RAM) ............................................................................................................ 8
3.5 - Registo ............................................................................................................................................ 8
3.6 - SFR Registo de Funo Especial ................................................................................................. 8
3.7 - Portas de Entrada/Sada I/O....................................................................................................... 9
3.8 - Interrupes ................................................................................................................................... 9
3.9 - CPU Unidade Central de Processamento ................................................................................... 9
3.10 - Oscilador ...................................................................................................................................... 9
3.11 - Arquitetura Interna ....................................................................................................................10
4 - CONCEITOS DE ELETRNICA ......................................................................................................11
4.1 Oscilador Externo ........................................................................................................................11
4.2 Estado Lgico de pinos I/O ..........................................................................................................12
4.3 Optoacopladores ...........................................................................................................................12
4.4 - PWM .............................................................................................................................................13
4.5 Analgico x Digital .......................................................................................................................14
5 BASIC: PRINCIPAIS COMANDOS E SUAS ESTRUTURAS NO PROTON IDE .........................15
6 EXEMPLOS E APLICAES ..........................................................................................................22
6.1 Primeiros Programas com o PIC 16F877A ..................................................................................22
6.2.1 Projeto 1: Fazendo um LED piscar..........................................................................................23
6.2.2 Projeto 2: Ligar e Desligar 2 LEDs alternadamente. ................................................................24
6.2.3 - Projeto 3: Fazer uma contagem binaria comeando com 0, 1 e depois com potencias de 2 (2x) at
128......................................................................................................................................................25
6.2.4 Projeto 4: Utilizando botes nas entradas para acionar sadas. Utilizando as instrues IF
THEN. ................................................................................................................................................26
6.2.5 - Projeto 5: Contagem de 0 a 9 com display de 7 segmentos. ......................................................28
6.2.6 - Projeto 6: Utilizando o Display de Cristal Lquido (LCD). .......................................................30
6.2.7 - Projeto 7: Utilizando conversor Analgico/Digital (A/D). ........................................................34
6.2.8 - Projeto 8: Utilizando Sensor de Temperatura para Medies. ...................................................42
6.2.9 Projeto 9: Acionamento de Servo-Motores. .............................................................................44
6.2.10 Projeto 10: Usando o PWM. .................................................................................................47
7 REFERENCIAS BIBLIOGRFICAS ...............................................................................................49
1 - SOFTWARES UTILIZADOS

1.1 ISIS PROTEUS

O ISIS Proteus um software da linha Proteus ASM capaz de simulaes de diversos


componentes/equipamentos eletroeletrnicos, adotando simbologias destes. De grande utilidade para
aqueles que desejam realizar testes em elaboraes de circuitos, auxilia na observao de
caractersticas de funcionamento, parmetros e possveis defeitos de projeto.

Este software ser utilizado para a simulao de circuitos e programao do PIC, ajudando
assim na observao do funcionamento destes e ainda em possveis erros.

Figura 1: rea de Trabalho do ISIS Proteus.

1.2 PROTON IDE

O Proton IDE um programador de microcontroladores PIC muito simples e eficiente


baseado na linguagem de programao BASIC.

O software poderoso a ponto de Escrever, Depurar e Compilar programas em um nico


ambiente de trabalho, ou seja, composto por uma rea de edio de texto onde se far a elaborao
e utilizao da linguagem de programao BASIC para obteno de algoritmos que sero inseridos
no PIC, a Depurao consiste na procura de erros ou falhas na programao que so indicadas nas
linhas de comando do algoritmo e visualizadas na tela de trabalho do editor de texto para que se possa
ser corrigido pelo programador e o Compilador nada mais que uma ferramenta de converso de
linguagem de programao onde exclusivamente no Proton IDE se faz da linguagem BASIC para
linguagem de mquina e assim possa ser inserido no PIC.

1
Figura 2: rea de trabalho do Proton IDE.

1.3 GRAVAO E COMPILAO DA PROGRAMAO

1.3.1 - Gravao de Programas Fisicamente

Para se carregar um programa no PIC, tem-se que usar um Gravador Programador de PIC.
Porm existe uma maneira de fazer est gravao sem a necessidade de sempre ter que dispor de um
Gravador. Isto se faz usando um bootloader.

O bootloader um pequeno programa que roda ao ligar o microcontrolador, fazendo tarefas


de inicializao do sistema e depois rodando o programa principal. Alm disso, o bootloader pode ser
usado para gravar o prprio PIC atravs da linha srie RS232 dado que esse pequeno programa
controla a comunicao com o PC e transfere a informao recebida para a memria de programa do
PIC.

Figura 3: Gravador de PIC USB (40zif).

A gravao da programao feita no Proton IDE para PIC, utilizando o Programador ou a


comunicao RS232 (conexo serial), se d pela opo Compiler and Program ou pela tecla F10.
O software far a depurao do programa a procura de algum erro na elaborao, se no encontrado
nenhum erro um arquivo hexadecimal ser gerado pelo compilador na pasta fonte onde o programa
foi salvo.

2
Ao conectar o PIC alimentao e ao cabo de gravao de dados e em seguida resetar o PIC,
o programa gravado e executado pelo mesmo.

Figura 4: Gravao de programao no PIC.

1.3.2 Gravao de Programas por simulao

Uma forma de visualizar o funcionamento das instrues feitas no Proton IDE quando
introduzidas no PIC a simulao virtual. Para isso utilizaremos o ISIS Proteus.

A simulao no ISIS Proteus se d pela introduo do cdigo hexadecimal no PIC virtual,


presente na biblioteca do simulador. Para gerar esse cdigo hexadecimal s clicar em Compile no
Proton IDE ou F9. Assim o cdigo ser gerado na pasta fonte onde o programa est salvo, nome.hex.

Figura 5: Gerando arquivo hexadecimal do programa.

Aps gerar arquivo hexadecimal do programa e com o PIC introduzido no ISIS Proteus,
s d um duplo clique no componente e na linha Program File: clica no cone de uma pasta e
indicar o caminho do arquivo hexadecimal referente ao programa que se quer simular.

Figura 6: Inserindo arquivo hexadecimal no PIC virtual do ISIS Proteus.

3
2 - O PIC 16F877A

A escolha do microcontrolador PIC 16F877A se d pelo fato de tal componente abranger


todas as caractersticas dos demais componentes da famlia PIC de modo que ao aprender a utiliza-lo
lhe dar meios de utilizar os demais.

De modo geral os PIC so uma famlia de microcontroladores desenvolvido e fabricado pela


Companhia Microchip Technologies Inc. De certo modo podemos comparar esses dispositivos a um
computador, porm bem menores, dado que assim como estes possuem memria de programa,
memria RAM entre outras coisas semelhantes. Dada suas caractersticas de funcionamento se pode
assemelha-lo ao corao dos circuitos controlados, ou seja, o microcontrolador o responsvel pela
operao de controle de todos os processos de um dado circuito eletrnico baseado nas instrues e
rotinas que definem funes de controle.

Microcontroladores x Microprocessadores: apesar de funcionamento semelhantes no


funcionamento so diferentes em vrios aspectos construtivos. Para se usar um microprocessador
vrios outros componentes externos devem ser adicionados, memria e componentes de envio e
recebimento de dados. Em seu projeto o microcontrolador foi confeccionado para se ter tudo num s
equipamento, no necessitando de componentes externos para seu funcionamento.

A elaborao de projetos com microcontroladores requer um estudo prvio da estrutura do


hardware a que se far necessrio para a confeco de programas e com isso saber qual ser a funo
especifica de cada pino, qual dos Portes I/O (IN/OUT) ser utilizado para que possam ser
configurados de maneira correta e etc. Estes detalhes serviro para a correta utilizao e controle de
dispositivos como Botes, LCD, teclados, motores de passo, LEDs, servomotores e outros.

Figura 7: PIC 16F877A com a nomenclatura de seus pinos (funes).

Algumas caractersticas do componente so descritas abaixo.


Microcontrolador de 40 pinos;
Via de programao com 14 bits e 35 instrues;
33 portas configurveis como entrada ou sada;
15 interrupes disponveis;

4
Memria de programao EPROM FLASH, que permite a gravao rpida do
programa diversas vezes no mesmo chip, sem a necessidade de apaga-lo por meio de
luz ultravioleta;
Conversores analgicos de 10 bits (8x) e comparadores analgicos (2x);

Para o melhor entendimento da identificao dos pinos do PIC ser mostrado abaixo uma
tabela com o significado de cada nomenclatura.

Tabela 1: Identificao dos pinos e PORTs do PIC 16F877A


N I/O/
Nome do Pino Tipo Descrio
Pino P
ST/ Entrada para cristal.
OSC1/CLKIN 13 I
CMOS(4) Entrada para osciladores externos. (hbridos ou RC)
Sada para cristal. Os cristais ou ressonadores devem ser
ligados ao OSC1 e OSC2.
OSC2/CLKOU
14 O - Sada com onda quadrada em da frequncia imposta em
T
OSC1 quando em modo RC. Essa frequncia equivale aos
ciclos de mquina internos.
Master Clear (reset) externo. O microcontrolador s
MCLR/Vpp 1 I/p ST funciona quando este pino encontra-se em nvel alto.
Entrada para tenso de programao (13V)
Vss 12/3 p - GND
Vdd 11/3 p - Alimentao positiva
PORTA (I/Os digitais bidirecionais e sistema analgico):
RA0/AN0 2 RA0: I/O digital ou entrada analgica AN0.
I/O TTL
RA1/AN1 3 RA1: I/O digital ou entrada analgica AN1.
I/O TTL
RA2/AN2/ RA2: I/O digital ou entrada analgica AN2 ou tenso
Vref/C Vref 4 negativa de referncia analgica.
I/O TTL
RA3/AN3/VREF+ 5 RA3: I/O digital ou entrada analgica AN3 ou tenso
I/O TTL
positiva de referncia analgica.
RA4/T0CKI/ RA4: I/O digital (quando sada open drayn, isto , no
C1OUT 6 consegue impor nvel alto) ou entrada externa do contador
I/O ST
TMR0 ou sada do Comparador 1.
RA5: I/O digital ou entrada analgica AN4 ou habilitao
RA5/SS/AN4/ 7 externa (Slave select) para comunicao SPI ou sada do
I/O TTL
C2OUT comparador 2.
PORTB (I/Os digitais bidirecionais). Todos os pinos
deste PORT possuem pull-up interno que podem ser
ligados/desligados pelo software:
RB0/INT 33 I/O TTL/ST RB0: I/O digital com interrupo externa.
RB1 34 I/O TTL RB1: I/O digital.
RB2 35 TTL RB2: I/O digital.
RB3: I/O digital ou entrada para programao em baixa
RB3/PGM 36 TTL tenso (5V).
RB4 37 TTL RB4: I/O digital com interrupo por mudana de estado.
RB5 38 TTL RB5: I/O digital com interrupo por mudana de estado.
RB6: I/O digital com interrupo por mudana de estado
RB6/PGC 39 TTL/ST ou clock da programao serial ou pino de
in-circuit debugger.
RB7: I/O digital com interrupo por mudana de estado
Ou data da programao serial ou pino de in-circuit
RB7/PGD 40 I/O TTL/ST Debugger.

5
PORTC (I/Os digitais bidirecionais):
RC0/T10SO/ 15 I/O ST RC0: I/O digital ou sada do oscilador externo para TMR1
T1CKI ou entrada de incremento para TMR1
RC1/T10SI/ 16 I/O ST RC1: I/O digital ou entrada do oscilador externo para
CCP2 TMR1 ou entrada do Capture2 ou sadas para
Compare2/PWM2.
RC2/CCP1 17 I/O ST RC2: I/O digital ou entrada do Capture1 ou sadas para
Compare1/PWM1.
RC3/SCK/SCL 18 I/O ST RC3: I/O digital ou entrada/sada de clock para
comunicao serial SPI/IC.
RC4/SDI/SDA 23 I/O ST RC4: I/O digital ou entrada de dados para SPI ou via de
dados (entrada/sada) para IC.
RC5/SDO 24 I/O ST RC5: I/O digital e sada de dados para SPI.
RC6/TX/CK 25 I/O ST RC6: I/O digital ou TX (transmisso) para comunicao
USART assncrona ou clock para comunicao sncrona.
RC7/RX/DT 26 I/O ST RC7: I/O digital ou RX (recepo) para comunicao
USART assncrona ou data para comunicao sncrona.
PORTD (I/Os digitais bidirecionais) ou porta de
comunicao paralela.

RD0/PSP0 19 I/O TTL/ST(3) RD0: I/O digital ou dado 0 (comunicao paralela).


RD1/PSP1 20 I/O TTL/ST(3) RD1: I/O digital ou dado 1 (comunicao paralela).
RD2/PSP2 21 I/O TTL/ST(3) RD2: I/O digital ou dado 2 (comunicao paralela).
RD3/PSP3 22 I/O TTL/ST(3) RD3: I/O digital ou dado 3 (comunicao paralela).
RD4/PSP4 27 I/O TTL/ST(3) RD4: I/O digital ou dado 4 (comunicao paralela).
RD5/PSP5 28 I/O TTL/ST(3) RD5: I/O digital ou dado 5 (comunicao paralela).
RD6/PSP6 29 I/O TTL/ST(3) RD6: I/O digital ou dado 6 (comunicao paralela).
RD7/PSP7 30 I/O TTL/ST(3) RD7: I/O digital ou dado 7 (comunicao paralela).
PORTE (I/Os digitais bidirecionais e sistema analgico):

RE0/RD/AN5 8 I/O TTL/ST(3) RE0: I/O digital ou controle de leitura da porta paralela ou
entrada analgica AN5.
RE1: I/O digital ou controle de leitura da porta paralela ou
RE1/WR/AN6 9 I/O TTL/ST(3) entrada analgica AN6.
RE2: I/O digital ou controle de leitura da porta paralela ou
RE2/CS/AN7 10 I/O TTL/ST(3) entrada analgica AN7.

Legenda: I = Input (entrada)


O = Output (sada)
I/O = Input/Output (entrada ou sada)
P = Power (alimentao)
- = No-utilizado
TTL = Entrada tipo TTL
ST = Entrada tipo Schmitt Trigger

6
3 - CONCEITOS BSICOS SOBRE ESTRURAS INTERNAS DOS
MICROCONTROLADORES

3.1 - Memrias

Figura 8: Estrutura ilustrativa de uma memria de dados.

Resumidamente uma memria uma estrutura de armazenamento de bits em um


determinado endereo de memria, onde cada endereo pode ser composto por uma quantidade
definida de bits que assumem valor de 1 ou 0. Como mostra a figura 8 onde o endereo W1 composto
pelos bits de 0 a 7 (8 bits), ou seja, esse endereo pode assumir 28 resultados diferentes como resposta
de sada.

3.2- Unidades de memria

usada para o armazenamento de dados. Cada endereo de memria corresponde a uma


posio de memria. O contedo dessa posio, conhecido atravs do seu endereamento. A
memria tato pode ser lida de, como pode ser escrita para.

Figura 9: Alocao de dados em unidades de memorias.

ROM Read Only Memory: Apenas de Leitura, usada para gravar permanentemente o
programa a executar.
OTP ROM One Time Programmable ROM: ROM onde s se pode escrever o programa
na memria apenas uma vez.
UV EPROM Ultra Violet Erasable Programmable ROM: ROM que permite apagar o
programa, usando luz Ultravioleta.
FLASH: O seu contedo pode ser escrito/apagado quase que infinitamente, usado na maioria
dos microcontroladores.
RAM Random Acess Memory: Memria voltil, quando se desliga a alimentao do chip
as informaes desaparecem. Usada para armazenamento temporrio de dados.
EEPROM Electrically Erasable Programmable ROM: ROM programvel, que se pode
apagar eletricamente. Seu contedo no perdido ao se desligar a alimentao do microcontrolador.
7
3.3 Memria de Programa (FLASH)

Memria no voltil que serve para armazenar o programa escrito no microcontrolador.


Como j citado ela pode ser limpa e escrita por vrias, adequando-se ao desenvolvimento de novos
programas e mudana de dispositivos.

3.4 Memria de Dados (RAM)

Usada pelo programa durante sua execuo, so guardados todos os resultados intermdios
ou dados temporais durante a execuo do programa que no cruciais para o dispositivo. Os dados
contidos nessa memoria so perdidas quando cessada a alimentao.

3.5 - Registo

Um registo um circuito eletrnico que consegue memorizar o estado de um byte.

Figura 10: Estrutura de um Registo.

3.6 - SFR Registo de Funo Especial

Nos microcontroladores os seus bits esto interligados fisicamente aos circuitos internos,
tais como temporizadores, conversores A/D, osciladores, portas srie e outros. Como um byte tem
oito bits, como se fossem oito interruptores que comandam outros pequenos circuitos dentro do chip
e os SFR tm exatamente essa funo de alocar 8 bits para cada tipo de aplicao existente
internamente.

Figura 11: SFR.

8
3.7 - Portas de Entrada/Sada I/O

So Registos ligados aos pinos do microcontrolador e so chamados de Portas ou PORT.


Onde cada pino pode ser configurado como entrada ou sada atravs de software. Como normalmente
cada porta I/O controlado por um SFR cada bit desse registo determina o estado do pino
correspondente do microcontrolador.

Figura 12:SFR de PORTs I/O.

3.8 - Interrupes

uma caracterstica do microcontrolador em que s se far a leitura de suas entradas no


momento em que elas estiverem em modo de ativao e assim poder executar uma ao. Se essa
caracterstica no fosse usada o microcontrolador ficaria a todo momento fazendo a leitura do estado
da sua entrada tornando impraticvel sua utilizao. Essa caracterstica de certo modo delega pelo
microcontrolador a um perito da estrutura interna que reage ao haver necessidade.

3.9 - CPU Unidade Central de Processamento

unidade que memoriza e controla todos os processos dentro do microcontrolador, sendo


subdividida em: Decodificador de Instrues parte eletrnica que reconhece as instrues de
programa fazendo os outros circuitos funcionarem com base nisso. ALU a Unidade Lgica e
Aritmtica, sendo responsvel por todas as operaes lgicas e matemticas. Acumulador um SFR
responsvel pela operao da ALU, usado para armazenar todos os dados de execuo de uma
operao e tambm os resultados de uso de continuao do processamento.

3.10 - Oscilador

O mdulo oscilador se trata de componentes que oferecem uma oscilao continua de sinal,
normalmente configurado para usar um cristal de quartzo e as vezes em conjunto com um ressoador
(capacitor) cermico para melhor estabilidade de oscilao, possibilita a operao sncrona do
microcontrolador advinda dos pulsos dados pelo oscilador. A no necessidade de estabilidade de
oscilao dada por uma dada aplicao abre a possibilidade de um oscilador RC
(resistncia/Capacitor).

9
3.11 - Arquitetura Interna

a forma de troca de informao entre o CPU e a Memria. Os microcontroladores mais


modernos usam duas formas distintas de arquitetura:

Von-Neumann

Se tem uma nica zona de memria disponvel e um barramento de dados de 8 bits de modo
a ser sobrecarregado por ter todos os dados trocados usando somente estas 8 linhas e isso deixa a
comunicao lenta e sem eficincia. A CPU s pode ler ou escrever dados de/para a memria sendo
impossvel ambas ao mesmo tempo devido a utilizao do barramento com os dados.

Figura 13: Arquitetura von-Neumann.

Harvard

Os microcontroladores detentoras desta arquitetura composto de dois barramentos, um de


8 bits que liga a CPU RAM, e outro com vrias linhas (12, 14 ou 16) ligando a CPU ROM. Desse
modo a CPU pode fazer a leitura de uma instruo ao mesmo tempo que acessa a memria de dados.

Figura 14: Arquitetura Harvard.

10
4 - CONCEITOS DE ELETRNICA

Devido grande necessidade da utilizao de estruturas e componentes de circuitos


eletrnicos usado no correto funcionamento dos microcontroladores faremos aqui um estudo destes.

4.1 Oscilador Externo

um circuito indispensvel para o funcionamento do microcontrolador e que tambm define


a velocidade a que ele vai funcionar podendo operar entre quatro opes:
Oscilador LP: Oscilador de baixo consumo (Low Power);
Oscilador XT: Cristal / Ressonador (Capacitor);
Oscilador HS: Oscilador de alta Velocidade (High Speed);
Oscilador RC: Resistencia/Condensador (Capacitor).

Cada tipo de oscilador caracterizado pela frequncia de oscilao e consequentemente pelo


cristal/capacitores usados como mostra a tabela 1.

Tabela 2: Tipos de Osciladores e seus componentes


Tipo Frequncia Capacitor 1 Capacitor 2
32 kHz 68 100 pF 68 100 pF
LO
200 kHz 15 33 pF 15 33 pF
2 MHz 15 33 pF 15 33 pF
XT
4 MHz 15 33 pF 15 33 pF
4 MHz 15 33 pF 15 33 pF
HS
10 MHz 15 33 pF 15 33 pF

Figura 15: Conexo de Osciladores com Crystal/Capacitor e outro com RC.

Figura 16: Tipos de Crystal de Quartzo.

11
Esses cristais so de mesma frequncia, mas diferem na sua construo e funcionamento.
Em quanto o primeiro gera um trem de pulsos com 200mV em 100ns o segundo gera pulsos com 2V
no mesmo perodo de tempo.

Os pinos do cristal 2 tem as seguintes nomenclaturas:

Pin 1: NC (pino sem conexo interna);


Pin 7: GND;
Pin 8: Sada TTL;
Pin 14: +5Vdc.

O oscilador externo RC tem com resultado ser mais sensvel e mais econmico de todos. Sua
preciso se deve a tolerncia de erro dos seus componentes e a temperaturas que o podem afetar.

4.2 Estado Lgico de pinos I/O

Quando se deseja introduzir um estado logico baixo ou alto (0V ou 5V) a uma entrada atravs
de botes de pulso temos que considerar a utilizao de duas logicas de estado.

Figura 17: Pinos configurados com: a) Logica Negativa e b) Logica Positiva.

Lgica Negativa nesse estado logico o Pino I/O alimentado com tenso (5V), ao
pressionar o boto de pulso a tenso estar agora sobre o resistor pois a corrente passa toda por ele e
com isso o pino fica sem tenso (0V). Resumindo: inicial o pino est com tenso e ao pressionar o
boto esse fica sem tenso.
Lgica Positiva nesse estado lgico o Pino I/O est sem alimentao (0V), ao pressionar
o boto de pulso o pino alimentado com tenso (5V) devido ao resistor ser um caminho menos
favorvel para a corrente. Resumindo: inicialmente o pino est sem tenso e ao pressionar o boto
esse fica com tenso.

4.3 Optoacopladores

Os optoacopladores so componentes muito uteis quando se deseja separar a parte de


comando da parte de potncia de um circuito. Em uma de suas verses, se trar basicamente de um
LED que ao ser acionado ilumina a base de um fototransistor, fazendo este conduza corrente entre o
coletor emissor.

Figura 18: Circuito utilizando optoacoplador, com sada negativa quando ativo.
12
Na configurao da figura 18, quando aplicado no pin I/O um nvel lgico alto (5V) o LED
do optoacoplador e o fototransistor conduzem corrente a terra e assim se tem um nvel lgico baixo
(0V) na Sada. Ao desativar o LED o fototransistor no conduz fazendo com que se tenha um nvel
lgico alto (5V) na Sada.

J na configurao da figura 19, quando aplicado um nvel lgico alto (5V) no pin I/O, o
LED do optoacoplador acende e o fototransistor conduz para pino de sada um nvel lgico alto (5V).
Porem havendo um nvel lgico baixo (0V) na entrada, o fototransistor permanecer aberto entre
coletor e emissor, tendo como resultado um nvel lgico baixo (0V) na Sada.

Figura 19: Circuito utilizando optoacoplador, com sada positiva quando ativo.

4.4 - PWM

um recurso muito poderoso pois com ele se pode obter uma tenso analgica a partir de
um sinal digital, porem sendo essa sada na verdade meramente digital, ou seja, podendo assumir os
estados 0 e 1.

O nome PWM uma sigla originada do ingls (Pulse Width Modulation), que significa
Modulao por Largura de Pulso. Trata-se de uma onda com frequncia constante (perodo fixo) e
largura de pulso (duty cycle) varivel.

Figura 20: PWM.

Este um tipo de gerao de sinal muito importante, atravs dele possvel implementar um
conversor digital analgico com um nico pino do microcontrolador, uma vez que controlando a
largura do pulso possvel obter uma tenso analgica varivel.

13
4.5 Analgico x Digital

Sistema analgico: um tipo de sinal contnuo que varia em funo do tempo,


podendo assumir qualquer valor dentro de um intervalo de mximo e mnimo.

Sistema digital: um sinal com valores discretos (descontnuos) no tempo, s podem


assumir valores alto e baixo (0 ou 1, 0V ou 5V, etc.).

Figura 21: Sinais digital e analgico.

14
5 BASIC: PRINCIPAIS COMANDOS E SUAS ESTRUTURAS NO PROTON IDE

VARIVEIS
As variveis so dados temporariamente armazenados em um programa BASIC. Elas so
criadas usando a palavra-chave DIM. Como o espao de uma memria RAM em PIC um pouco
limitado em tamanho, a escolha do tamanho certo de uma varivel para uma tarefa especifica
importante. As variveis podem ser do tipo BITS, BYTES, WORDS, DWORDS ou FLOATS.
FLOAT so variveis que podem conter nmeros com casas decimais podendo conter um
valor ente -1e37 at +1e38, mas por causa da arquitetura do compilador de 32 bits, deve-se pensar no
uso de um valor mximo e mnimo entre -2147483646,999 a 2147483646,999, o que torna a mais
precisa dos tipos de variveis. Porm, mais do que o tipo DWORD, e isso tem um preo quando se
faz clculos e comparaes com uma varivel FLOAT, pois usar mais espao de cdigo dentro do
PIC.
DWORD Essas variveis podem conter um valor entre -2147483648 a 2147483647
tornando este a maior dos tipos da famlia de variveis, no entanto usar mais espao de cdigo do
PIC.
WORD Essas variveis podem conter valores entre 0 e 65535, que normalmente grande
o suficiente para a maioria das aplicaes. Ela usa bastante memria, mas no tanto como o tipo
DWORD.
BYTE Podem conter um valor entre 0 e 255, sendo menor, mais rpido e mais eficiente
do que os outros tipos de variveis citado.
BIT Essas variveis podem conter valor 0 ou 1, so criadas sempre 8 de cada vez devido
ao tamanho dos registradores, portanto no se poupa espao na RAM ao declara-la.

REPRESENTAES NUMRICAS
Binrio usa o prefixo %. Exemplo: %0101;
Hexadecimal usa o prefixo $. Exemplo $0A;
Caracteres um byte cercado por aspas. Ex. a representando o valor 97;
Decimal esses valores no usam prefixo.
Pontos Flutuantes so criadas usando o ponto decimal. Ex. 3.14(3,14).

OPERADORES RELACIONAIS
So usados para comparar dois valores. O resultado pode ser usado para tomar uma deciso
sobre o fluxo do programa.

Operador Relao Tipo de Expresso


= Igualdade X=Y
== Igualdade X==Y (mesmo que acima Igualdade)
<> Desigualdade X< >Y
!= Desigualdade X != Y (mesmo que acima Desigualdade)
< Menor que X<Y
> Maior que X>Y
<= Menor ou igual a X <= Y
>= Maior ou Igual a X >= Y

OPERADORES LOGICOS BOOLEANOS


As funes IF-THEN-ELSE-ENDIF, WHILE-WEND, e REPEAT-UNTIL so as condies
que suportam os operadores lgicos NOT, AND, OR e XOR.
NOT inverte o resultado de uma condio, mudando falso para verdadeiro e vice-versa.
AND, OR e XOR junta os resultados de duas condies e produz um nico
verdadeiro/falso resultado.

15
OPERADORES MATEMTICOS
Addition '+'. Adiciona variveis e / ou constantes.
Subtraction '-'. Subtrai variveis e / ou constantes.
Multiply '*'. Multiplica variveis e / ou constantes.
Multiply HIGH '**'. Retorna os 16 bits do resultado multiplicar 16-bit.
Multiply MIDDLE '*/'. Retorna os 16 bits do meio o resultado multiplicar 16-bit.
Divide '/'. Divide as variveis e / ou constantes.
Modulus '//'. Retorna o resto da diviso um valor por outro.
Bitwise AND '&'. Retorna o bit E de dois valores.
Bitwise OR '|'. Retorna o bit OR de dois valores.
Bitwise XOR '^'. Retorna o XOR bit a bit de dois valores.
Bitwise SHIFT LEFT '<<'. Desloca os bits de um valor deixou um nmero especificado de casas.
Bitwise SHIFT RIGHT '>>'. Desloca os bits de um valor certo um determinado nmero de lugares.
Bitwise Complement '~'. Inverte os bits em uma varivel.
ABS. Retorna o valor absoluto de um nmero.
ACOS Retorna a ARC cosseno de um valor em radianos.
ASIN Retorna o arco seno de um valor em radianos.
ATAN Retorna o arco tangente de um valor em radianos.
COS. Retorna o cosseno de um valor em radianos.
DCD. Descodificador 2 n -Alimentao de um valor de quatro bits.
DIG. Retorna o dgito decimal especificado de um valor positivo.
EXP Deduzir a funo exponencial de um valor.
LOG Retorna o logaritmo natural de um valor.
LOG10 Retorna o LOG de um valor.
MAX. Retorna o mximo de dois nmeros.
MIN. Retorna o mnimo de dois nmeros.
NCD. Codificador de prioridade de um valor de 16 bits.
POW Calcula uma varivel para o poder do outro.
REV. Inverte a ordem dos menores bits em um valor.
SIN. Retorna o seno de um valor em radianos.
SQR. Retorna a raiz quadrada de um valor.
TAN Retorna a tangente de um valor em radianos.
DIV32. 15-bit divide x 31 bit.

16
DECLARE

Sintaxe: [DECLARE] cdigo da diretiva a alterar = valor da modificao


Viso geral: Ajusta certos aspectos do cdigo produzido, frequncia de cristal, porta LCD e
pinos de transmisso de srie.
Exemplo: DECLARE XTAL 4 ou DECLARE XTAL = 4 (Declara que o cristal de
4MHz).

DELAYMS

Sintaxe: DELAYMS durao


Viso geral: Atrasa a execuo em x milissegundos (ms). Os atrasos podem ser at 65535ms
(65,535 segundos) de durao.
Exemplo: DELAYMS 100 (Atrasa a execuo em 100ms).

DEVICE

Sintaxe: DEVIDE digito do dispositivo


Viso geral: Informa ao compilador qual o microcontrolador PIC est sendo usado.
Exemplo: DEVICE = 16F877A.

DIM

Sintaxe: DIM Varivel {as} {Extenso ou tamanho}


Viso geral: Todas as variveis definidas pelo usurio devem ser declaradas usando a
instruo DIM.
Exemplo: DIM NUM AS BYTE (declara a varivel NUM como sendo Byte (8bits)).

END

Sintaxe: END
Viso geral: A declarao END faz parar a compilao de origem, e cria um loop infinito.

GOTO

Sintaxe: GOTO rtulo


Viso geral: Ira para um rtulo definido e continua a execuo de l.
Exemplo: GOTO LA (pula para a execuo do rtulo LA) ... LA: (executa as instrues
contidas no rtulo LA).

HIGH

Sintaxe: HIGH PORT ou PORT.Bit


Viso geral: Coloca um PORT ou um bit em estado lgico alto. Para um PORT, isso
significa preenche-lo de 1s. Para um bit isso significa defini-lo como 1.
Exemplo: HIGH PORTB.4 (Coloca o pino 4 do PORT B em nvel lgico alto).

17
LOW

Sintaxe: LOW PORT ou PORT.Bit


Viso geral: Coloca um PORT ou um bit em estado lgico baixo. Para um PORT, isso
significa preenche-lo com 0s. Para um bit isso significa defini-lo como 0.
Exemplo: LOW PORTB.4 (Coloca o pino 4 do PORT B em nvel lgico baixo).

SYMBOL

Sintaxe: SYMBOL Nome {=} Valor


Viso geral: Atribui um codinome para um registro, varvel, ou valores constantes.
Exemplo: SYMBOL LED =PORTB.4 (atribui ao pino 4 do PORT B o nome LED).

INPUT
Sintaxe: INPUT PORT ou PORT.Pin
Viso geral: Faz com que um PORT especifico ou um pino seja utilizado como entrada.
Exemplo: INPUT PORTA.0 (faz o pino 0 do PORT A uma entrada).

OUTPUT
Sintaxe: OUTPUT PORT ou PORT.Pin
Viso geral: Faz com que um PORT especifico ou um pino seja utilizado como sada.
Exemplo: OUTPUT PORTA.0 (faz o pino 0 do PORT A uma sada).

TRIS
Sintaxe: TRIS PORT ou PORT.Pin
Viso geral: Configura os pinos ou PORTs como entrada ou sada. Faz Registro de
configurao I/O de PORT ou um pino especifico, que pode se dar de modo binrio (8bits),
hexadecimal ou decimal, sendo os dois primeiros mais comuns.
1 = Entrada
0 = Sada
Exemplos:
TRISA = %11110 (% para expressar a configurao em binrio, desse modo o pino
0 do PORT A configurado como sada e os pinos 1, 2, 3 e 4
como entradas).

TRISA = $1E ($ para expressar a configurao em hexadecimal).

TRISA = 30 (Ao converter o binrio ou hexadecimal temos que o valor em


decimal 30, essas 3 formas para o compilador no ser
problema pois ao converte para linguagem de mquina o
resultado ser sempre binrio em relao aos pinos do PORT
configurado).

FOR...NEXT...STEP

Sintaxe: FOR Varivel = Contagem inicial TO contagem final {STEP {+ -} incremento}


Viso geral: A instruo FOR...NEXT se encarrega de fazer repeties de instrues que
permanecem dentro do lao FOR...NEXT. O parmetro STEP afeta o incremento segundo o valor
declarado depois desta palavra, ao omiti-lo o incremento de uma unidade.
Exemplo: FOR i = 0 TO 9 STEP 3
NEXT
18
IF THEN - ELSE

Sintaxe: If expresso 1 {AND / OR expresso 2} Then rtulo


Viso geral: Com a instruo IF THEN podemos tomar decises ao longo de um programa,
baseado em condies especficas definidas pelo programador.
Exemplo: If PORTA.0 = 1 Then PORTB.0 =1

SELECT CASE - ENDSELECT

Sintaxe: SELECT Expresso


CASE Condio
Instruo
CASE ELSE
Instruo
ENDSELECT
Viso geral: Avalia uma expresso ento executa continuamente um bloco de cdigo
BASIC com base nas comparaes, com Condio(s). Depois de executar um bloco de cdigo, o
programa continua a linha seguinte at chegar a ENDCASE. Se no houver casos verdadeiros
encontrados e nem um ELSE CASE, o cdigo levar a execuo do ENDSELECT.
Exemplo: SELECT VAR1
CASE 1
RESUL=1

CASE 2
RESUL=2

CASE ELSE
RESUL=0
ENDSELECT

ALL_DIGITAL = TRUE
Viso geral: Esta instruo define todos os pinos como digitais, inclusive os analgicos.

ADCON1
Viso geral: Esta instruo define a configurao de pinos como Analgicos.
Exemplo: ADCON1=%10000001 o bit 7 configura a justificao, os bits 6/5/4 no
tem funo, 3/2/1/0 configuram os canais
utilizados.

EREAD

Sintaxe: varivel = EREAD endereo


Viso geral: Ler as informaes contidas na EEPROM on-board, disponvel em alguns tipos
de PIC.
Exemplo: DIM VAR1 AS BYTE uma varivel declara e o seu contedo o
VAR1 = EREAD 0 contido na posio 0 da memria EEPROM.

19
EWRITE

Sintaxe: EWRITE endereo, [contedo]


Viso geral: Escreve informaes na memria eeprom on-board disponvel em alguns PIC.
Exemplo: EWRITE 0, [MECATRONICA]
Escreve na memria os caracteres da palavra MECATRONICA, de modo que cada letra
equivale a uma posio comeando de 0.

PRINT

Sintaxe: PRINT Item {, Item}


Viso geral: Envia texto um mdulo LCD. Item pode ser uma constante, varvel, expresso,
modificador ou lista de string. Os operadores modificadores no agem para modificar, mas sim para
indicar o que se quer escrito no LCD. Para textos se deve seguir a tabela ASCII para caracteres
especiais e entre aspas ( texto).
Modificadores:
AT Indica a posio do curso no LCD [AT Xpos (1 to n), Ypos (1 to n)], ou seja,
[PRINT AT nlinha, ncoluna].
CLS Limpa o LCD.
BIN{1...32} mostra dgitos binrios no display
DEC{1...10} mostra dgitos decimais no display
HEX{1...8} mostra dgitos hexadecimais no display
Outros ...
Exemplo: PRINT AT 1, 1, MINHA NOTA=, DEC 10
Este exemplo faz com que se escreva a frase MINHA NOTA= a partir da
primeira linha e primeira coluna e aps o igual, o nmero 10 em decimal, ficando MINHA
NOTA=10 no LCD.

Existe ainda comandos padronizados para controlar e manipular o LCD como mostrado
abaixo na tabela 3.

Tabela 3: Comandos para LCD.


Comando Operao
$FE, 1 Limpa o LCD e move o cursor para a posio home.
$FE, 2 Move o cursor para a primeira linha da primeira coluna.
$FE, $10 Move o cursor uma posio esquerda.
$FE, $14 Move o cursor uma posio a direita.
$FE, $18 Desloca todo os caracteres do display a esquerda.
$FE, $1C Desloca todo os caracteres do display a direita.
$FE, $0C Desliga o cursor.
$FE, $0E Cursor sublinhado.
$FE, $0F Cursor piscando.
$FE, $C0 Move o cursor para o incio da segunda linha.
$FE, $94 Move o cursor para o incio da terceira linha.
$FE, $D4 Move o cursor para o incio da quarta linha.

20
ADIN
Sintaxe: Varivel = ADIN ncanal
Viso geral: Ler o valor do conversor A/D on-board.
Exemplo: VAR = ADIN 0 Coloca o valor da converso do canal 0 na varivel VAR.

SERVO
Sintaxe: SERVO Pino, Valor da Rotao
Viso geral: Controla o centro de controle de um servo motor. Pino equivale ao pino do
PORT escolhido em que o servo conectado. Valor de Rotao uma constante ou varivel WORD
dedicada ao posicionamento do motor podendo assumir valores entre 500 a 2500, sendo 1500 o valor
central de posicionamento.
Exemplo: SERVO PORTD.0, 1500 Posiciona o servo ligado ao pino 0 do PORT
centralmente.

PWM
Sintaxe: PWM Pino, Nvel, Ciclo
Viso geral: Gera uma sada com Modulao por Largura de Pulso em pino, em seguida,
retorna o pino para o estado de entrada.

21
6 EXEMPLOS E APLICAES

Fazer um programa simplesmente elaborar uma lista de instrues para o microcontrolador


executa-las sequencialmente. Ao escrever o programa se faz extrema importncia que essa sequncia
de execuo esteja bem defina para se atingir o objetivo desejado. como uma receita de bolo:

1 Pega os Ingredientes;
2 Mistura os Ingredientes;
3 Coloca a Mistura na Forma;
4 Leva a Forma ao Forno;
5 Tira a Forma do Forno e espera esfriar;
6 Come o Bolo.

Claramente essa seria a sequncia correta de programao para se fazer um bolo. Mas e se
fosse feito uma sequncia como abaixo?

1 Leva a Forma ao Forno;


2 Come o Bolo;
3 Tira a Forma do Forno e espera esfriar;
4 Mistura os Ingredientes;
5 Coloca a Mistura na Forma;
6 Pega os Ingredientes.

Certamente todas as instrues foram informadas, porm com ordenamento incorreto. Na


primeira instruo se pode at levar a Forma ao Forno, mas sem a mistura dos ingredientes e assim
no tem como comer o bolo antes de faz-lo, obvio, e isso causar um erro de execuo. Por isso se
faz de grande importncia o conhecimento correto da sequncia de instrues dada ao
microcontrolador.

6.1 Primeiros Programas com o PIC 16F877A

Para se aprender a programar um microcontrolador importante comear o assunto com


exemplos prticos e simples, isso ajuda a entender como a arquitetura do PIC e as instrues do
programa esto sendo usados.

Os circuitos estaro baseados nos conhecimentos mostrados em pginas anteriores.

Para melhorar a compreenso dos projetos que faremos na sequencia desse material,
utilizaremos uma sequncia simples de elaborao dos programas, como mostrado abaixo

Declarao do Microcontrolador;
Declarao do Oscilador;
Nomear os pinos ou PORTs a serem usados;
Configurar os pinos ou PORTs como entradas ou sadas;
Configurao dos PORTs como Digitais ou Analogicos;
Declarao de Varveis;
*Declarao de outros componentes (se necessrio);
Instrues e/ou rotinas.

Obs.: Vale ressaltar que o Proton IDE ler as linhas de programao sequencialmente e que
comentrios no programa so feitos com a adio do acento grave ( ` ) frente das palavras da linha.
22
6.2.1 Projeto 1: Fazendo um LED piscar.

Circuito

Figura 22: Circuito do Projeto 1.

Programa

Device = 16F877A 'Declara qual o Microcontrolador


Xtal 4 'Declara o Oscilador

Symbol LED = PORTB.0 'Nomeia o pino 0 do PORT B como LED

TRISB.0 = 0 'Declara o pino o do PORT B como sada

AQUI: 'Rtulo da rotina


High LED 'Coloca o LED em nvel lgico Alto
DelayMS 1000 'Atrasa a execuo do programa em 1000ms

Low LED 'Coloca o LED em nvel lgico Baixo


DelayMS 1000 'Atrasa a execuo do programa em 1000ms

GoTo AQUI 'Manda o programa executar a rotina do rtulo AQUI

End 'Informa o fim do programa

Comentando

Device = 16F877A declara qual o microcontrolador usado. Xtal 4 declara qual o oscilador
usado. Symbol LED = PORTB.0 nomeia o pino do PORT B como LED facilitando. TRISB.0 = 0
declara que o pino 0 do PORT B ser usado como sada. AQUI: o rtulo de uma rotina a ser
executada. High LED coloca 5V no pino 0 do PORT B. DelayMS 1000 atrasa o programa em 1000
milissegundos ou 1 segundo. Low LED coloca 0V no pino 0 do PORT B. Goto AQUI faz com que
a rotina do rtulo AQUI seja executada. End informa ao compilador o fim do programa.
Assim o LED ascender, permanecendo assim por 1 segundo e apagar por mais 1 segundo
at que a rotina seja repetida.

23
6.2.2 Projeto 2: Ligar e Desligar 2 LEDs alternadamente.

Circuito

Figura 23: Circuito do Projeto 2.

Programa

Device = 16F877A 'Declara qual o Microcontrolador


Xtal 4 'Declara o Oscilador

TRISB = %00000000 'Declara o PORT B como sada

PORTB = 0 'Coloca 0V em todos os pinos do PORT B

AQUI: 'Rtulo da rotina


High PORTB.0 'Coloca o 5V no pino 0 do PORT B
Low PORTB.7 'Coloca o 0V no pino 7 do PORT B
DelayMS 500 'Atrasa a execuo do programa em 500ms

Low PORTB.0 'Coloca 0V no pino 0 do PORT B


High PORTB.7 'Coloca 5V no pino 7 do PORT B
DelayMS 500 'Atrasa a execuo do programa em 500ms

GoTo AQUI 'Manda o programa executar a rotina do rtulo AQUI

End 'Informa o fim do programa

Comentando

A maioria das instrues so bem parecidas com o do projeto 1. Neste projeto


TRISB=%00000000 declara de forma binaria que todos os pinos do PORT B sero usados como
sadas. PORTB=0 faz com que todos pinos do PORT B fiquem com 0V. A rotina executada dentro
do rtulo AQUI: faz com que enquanto o pino 0 tenha 5V o pino 7 tenha 0V e vice-versa, de modo
que na simulao da figura 23 os leds ascendam e apaguem alternadamente, ou seja, enquanto um
ascende o outro apaga e vice-versa.

24
6.2.3 - Projeto 3: Fazer uma contagem binaria comeando com 0, 1 e depois com potencias
x
de 2 (2 ) at 128.

Circuito

Figura 24: Circuito do Projeto 3.

Programa

Device = 16F877A 'Declara qual o Microcontrolador


Xtal 4 'Declara o Oscilador

TRISB = %00000000 'Declara o PORT B como sada

PORTB = 0 'Coloca 0V em todos os pinos do PORT B

AQUI: 'Rtulo da rotina


PORTB = %00000000 'PORT B igual a 0
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %00000001 'PORT B igual a 1
DelayMS 150 'Atrasa a execuo do programa em 150ms

PORTB = %00000010 'PORT B igual a 2


DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %00000100 'PORT B igual a 4
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %00001000 'PORT B igual a 8
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %00010000 'PORT B igual a 16
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %00100000 'PORT B igual a 32
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %01000000 'PORT B igual a 64
DelayMS 150 'Atrasa a execuo do programa em 150ms
PORTB = %10000000 'PORT B igual a 128
DelayMS 150 'Atrasa a execuo do programa em 150ms

GoTo AQUI 'Manda o programa executar a rotina do rtulo AQUI


End 'Informa o fim do programa

25
Comentando

O que se tem de diferente nesse programa em relao aos demais a configurao do nvel
lgico dos pinos do PORT B de forma binria. PORTB = %00000001 uma forma binaria (o
smbolo % a representao binria na programao) de indicar quais os pinos estaro com 0V ou
5V, nvel lgico baixo ou alto, assim a configurao citada anteriormente faz com que o pino 0 do
PORT B fique com 5V e os demais pinos do PORT fiquem com 0V, com representao decimal igual
a 1. O programa faz uma contagem binaria com as sadas, de modo que comece com 0, depois 1 e em
seguida faa a contagem da potencias de 2 at 128. Isto far com que os leds ascendam de forma
crescente.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________

6.2.4 Projeto 4: Utilizando botes nas entradas para acionar sadas. Utilizando as
instrues IF THEN.

Circuito

Figura 25: Circuito do Projeto 4.

26
Programa

Device = 16F877A 'Declara qual o Microcontrolador


Xtal 4 'Declara o Oscilador

Symbol LED1 = PORTB.0 'Nomeia pino 0 do PORT B


Symbol LED2 = PORTB.1 'Nomeia pino 1 do PORT B
Symbol BOTAO = PORTD.0 'Nomeia pino 0 do PORT D

TRISB = 0 'Configura o PORT B como sada


TRISD.0 = 1 'Configura o pino 0 do PORT D como entrada

PORTB=0 'Coloca os pinos do PORT B em nvel lgico alto

TEST: 'teste do boto


If BOTAO = 0 Then LIGAR1 'Condio 'Se' 1 para o boto
If BOTAO = 1 Then LIGAR2 'Condio 'Se' 2 para o boto

LIGAR1:
High LED1 'Liga LED1
Low LED2 'Desliga LED2
DelayMS 50 'Atraso de execuo
GoTo TEST 'Retorna para teste do boto

LIGAR2:
Low LED1 'Desliga LED1
High LED2 'Liga LED2
DelayMS 50 'Atraso de execuo
GoTo TEST 'Retonar para teste de boto

End

Comentando

Nesta programao temos trs pontos importantes a se analisar. A primeira coisa que na
figura 25 se observa o boto B1 no MCLR que servir como reset, ou seja, numa lgica positiva
que enquanto o boto B1 no for pressionado o microcontrolador no tem alimentao (0V) e
consequentemente no executara nenhuma instruo, mas ao pression-lo uma tenso de 5V far a
alimentao e colocar o microcontrolador em funcionamento. O segundo ponto importante o outro
boto B2 no pino 0 do PORT D (configurado como entrada no TRISD.0=1 e nomeado como
BOTAO) que servir como uma entrada digital (sensor) que tem a funo de ligar e desligar as sadas
referentes ao LED1 e LED2. A ltima coisa a se relatar a utilizao da instruo IF THE dentro
rtulo TEST:, que tem a funo de impor uma condio de anlise e de ao dentro do programa
para assim saber qual a resposta a se dar dependendo do estado lgico do boto B2.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________

27
6.2.5 - Projeto 5: Contagem de 0 a 9 com display de 7 segmentos.

Os displays que ser utilizado nesta parte da programao e simulao ser o Display de
Leds de sete segmentos, dado que os nmeros so compostos atravs de sete traos cada qual com
seu respectivo Led que ao combina-los podemos formar nmeros de 0 a 9.

A figura 26, mostra como a nomenclatura de cada trao do display. Desta forma temos um
pino para controlar cada um dos segmentos (A G). Vale ressaltar que se tem diferentes tipos desse
display, mas utilizaremos um genrico, dado que essa explicao trata de uma simples explicao do
seu funcionamento para que assim se possa ter a possibilidade de utiliza-lo na programao e
simulao.

Figura 26: Display de 7 segmentos genrico.

Circuito

Figura 27: Circuito do Projeto 5.

28
Programa

Device = 16F877A 'Declara qual o Microcontrolador


Xtal 4 'Declara o Oscilador

Symbol DISPLAY = PORTB 'Nomeia pino 0 do PORT B

TRISB = 0 'Configura o PORT B como sada

Dim CONT As Byte 'Declara a varivel CONT como Byte

PORTB=0 'Coloca os pinos do PORT B em nvel lgico alto

INICIO:
For CONT = 0 To 9 'Faz um lao com a varivel CONT indo de 0 a 9

If CONT=0 Then DISPLAY=%00111111 'coloca 0 no display


If CONT=1 Then DISPLAY=%00000110 'coloca 1 no display
If CONT=2 Then DISPLAY=%01011011 'coloca 2 no display
If CONT=3 Then DISPLAY=%01001111 'coloca 3 no display
If CONT=4 Then DISPLAY=%01100110 'coloca 4 no display
If CONT=5 Then DISPLAY=%01101101 'coloca 5 no display
If CONT=6 Then DISPLAY=%01111101 'coloca 6 no display
If CONT=7 Then DISPLAY=%00000111 'coloca 7 no display
If CONT=8 Then DISPLAY=%01111111 'coloca 8 no display
If CONT=9 Then DISPLAY=%01100111 'coloca 9 no display
DelayMS 150

If CONT=9 Then INICIO 'Volta ao incio da contagem indo de 0 a 9

Next 'continua o lao de contagem at a varivel alcanar o valor final

End

Comentando

Para essa aplicao temos uma instruo nova que a FOR NEXT que se trata de um lao
onde a varivel tem uma contagem de incio e um fim, sendo que a cada contagem a rotina dentro
desse lao executada at que o lao chegue sua contagem final. A contagem no display feita
colocando 0V ou 5V nos pinos referentes a cada segmento a que se quer acionar para representar o
nmero escolhido, onde tal procedimento feito pela indicao do nvel lgico de cada pino do PORT
B nomeado como DISPLAY, de forma binaria, como por exemplo em DISPLAY=%00111111
indicando os pinos 0 a 6 como 5V e 7 a 8 como 0V, mostrando 0 no display.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
29
6.2.6 - Projeto 6: Utilizando o Display de Cristal Lquido (LCD).

Os LCDs so muito mais poderosos que os displays de 7 segmentos, dado que possuem
muito mais caracteres e so alfanumricos. Porm so mais caros e com uma visualizao inferior,
pois os caracteres no possuem iluminao prpria e so de tamanho bem reduzido.

Os mdulos LCD so ideais para aplicaes alfanumricas ou com grficos. Os


alfanumricos tm disponibilidade de grande variedade de configuraes, como: uma linha, duas
linhas e quatro linhas sendo as mais comuns. A quantidade de colunas tem so variveis, sendo
comumente encontrada com 16, 20 e 40 colunas por linha.

Como podemos ver existem muitos displays de cristal lquido (LCD) no mercado, mas
utilizaremos o modelo padro em aplicaes, o de duas linhas e 16 caracteres cada uma. Uma
caracterstica importante desse display que ele possui um drive de controle interno. Assim a
comunicao ser feita com ele atravs de uma comunicao paralela, passando comando e os
caracteres que desejamos escrever, diretamente em cdigo ASCII.

Figura 28: Display LCD com 2 linhas e 16 colunas cada uma, total de 32 caracteres.

Pinagem

Os pinos 1 e 2 (VSS e VDD) do LCD corresponde a alimentao GND e Vdc


respectivamente, onde a tenso mxima suportada de 5 Vdc. J o pino 3 VEE corresponde ao
controle de contraste, assim um potencimetro conectado a ele para ter esse controle.

O pino 4 RS (Register Select) utilizado para definir o tipo de informao passada atravs
da comunicao paralela. Quando o RS 0 a informao enviada um comando ou instruo. Se RS
for 1 A informao enviada um registro de dados ou caractere alfanumrico.

O pino 5 R/W (Read/Write), um pino utilizado para ler dados a partir da tela do LCD ou
escrever uma entrada no LCD. Se R/W=0 o LCD est habilitado para se poder escrever dados na tela.
Se R/W=1 o LCD habilita a leitura de seus dados. Em muitos casos esse pino no utilizado, ficando
permanentemente ligado ao Vss, assim o LCD opera somente em modo de escrita. Por isso preciso
garantir o trmico das operaes internas do mdulo de LCD atravs de tempos pr-estabelecidos.

O pino 6 E (Enable), um pino de habilitao, ou seja, se E=0 o LCD desativado para


receber dados, mas se E=1 ento o LCD capaz de trabalhar de modo a podermos escrever ou ler
dados no mesmo.

Os pinos 7 a 14 (D0 a D7) equivalem ao barramento de dados paralelo. Apesar da existncia


de 8 vias de dados, esses displays podem operar com 4 vias (D4 a D7) j que as demais vias ficam
sem funes, assim as informaes so enviadas em dois pacotes de 4 bits cada um.

30
Ao se trabalhar com 8 bits, estes devero ser conectados em um s PORT e nunca em PORTs
diferentes do microcontrolador. Ao se trabalhar com somente 4 bits mais significativos do LCD, estes
devem ser conectados aos quatro bits menos significativos ou aos quatro bits mais significativos do
PORT escolhido.

Os pinos E (pino 6) e RS (pino 4) podem ser conectados em qualquer PORT do


microcontrolador. O pino R/W deve estar conectado terra (GND) para indicar ao LCD que se est
trabalhando com escrita de dados.

No Proton IDE necessrio fazer algumas declaraes para o uso de displays alfanumricos
para o uso do comando PRINT.

1 DECLARE LCD TYPE 1 ou 0 - Informa ao compilador o tipo de display a ser utilizado


pelo comando PRINT, se (Grfico ou Alfanumrico)
2 DECLARE LCD_DTPIN PORT.PIN identifica o PORT e os pinos que as vias de
dados do LCD est ligada. Por exemplo: Se utilizado uma via de dados de 8 bits o comando seria
DECLARE LCD_DTPIN PORTB.0 ou Se utilizado uma via de 4 bits seria DECLARE LCD_DTPIN PORTB.4.
3 DECLARE LCD_ENPIN PORT.PIN Identifica o PORT e o pino que a via de
habilitao (enable) LCD est ligada.
4 DECLARE LCD_RSPIN PORT.PIN Identifica o PORT e o pino que a via RS do
LCD est ligada.
5 DECLARE LCD_INTERFACE 4 ou 8 Informa ao compilador o tamanho da via de
dados do LCD utilizada.
6 DECLARE LCD_LINES 1, 2 ou 4 Informa ao compilador o nmero de linhas do
LCD utilizada.

Circuito

Figura 29: Circuito do Projeto 6.

31
Programa 1

Device = 16F877A
Xtal 4

Declare LCD_Type 0 'Informa que o LCD Alfanumerico


Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable
Declare LCD_RSPin PORTB.2 'Informa o pino RS
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD

Print At 1, 1, "MECATRONICA" 'Imprime no LCD

Comentando

Neste programa feito os declares para o LCD funcionar com a instruo Print e depois est
funo imprime no LCD a mensagem MECATRONICA, o Modificador At faz com que o primeiro
caractere do texto inicie na primeira linha e primeira coluna do LCD.

Programa 2

Device = 16F877A
Xtal 4

Dim INDICE As Byte 'declara a varivel


Dim CHAR As Byte 'declara a varivel

EWrite 0, [" IFCE LIMOEIRO "] 'coloca na memoria das pos. 0 a 16


EWrite 17, [" MECATRONICA "] 'coloca na memoria das pos. 17 a 32

Declare LCD_Type 0 'Informa que o LCD Alfanumerico


Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable
Declare LCD_RSPin PORTB.2 'Informa o pino RS
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD

INICIO:
Cls 'Limpa o LCD
For INDICE = 0 To 15
CHAR = ERead INDICE 'Ler a memoria na posio INDICE e coloca em CHAR
DelayMS 100
Print $FE, 14, $FE, $0C, CHAR 'Move uma pos. a direita, desliga cursor
Next 'e imprime o caractere de CHAR

DelayMS 300

Print $FE, 2 'Retorna inicio primeira linha


For INDICE = 0 To 15
CHAR = ERead INDICE 'Ler a memoria na posio INDICE e coloca em CHAR
DelayMS 100
Print $FE, $1C, CHAR 'Move os caracteres p/ direita
Next
DelayMS 300

32
For INDICE = 15 To 0 Step -1
CHAR = ERead INDICE
DelayMS 100
Print $FE, $18, CHAR 'Move os caracteres p/ esquerda
Next
DelayMS 300

Print $FE, $C0 'desliga o cursor


For INDICE = 17 To 32
CHAR = ERead INDICE
DelayMS 100
Print $FE, 14, $FE, $0C, CHAR 'Move uma pos. direita, desl. cursor
Next 'e imprime CHAR
DelayMS 300

GoTo INICIO

Comentando

Neste programa foi usado a escrita e leitura de memria onde cada caractere dos textos
equivale colocados nela equivale a uma posio. Na impresso dos caracteres no LCD, as letras foram
colocadas uma de cada vez para a primeira linha, movidas da esquerda para direita e em seguida da
direita para a esquerda. Depois o segundo texto foi impresso no LCD tambm uma letra por vez.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________

33
6.2.7 - Projeto 7: Utilizando conversor Analgico/Digital (A/D).

O conceito de sinais analgicos e digitais foram descritos anteriormente, dado a


caracterstica do PIC s processar sinais digitais e muitas vezes termos que trabalhar com variveis
analgicas agora temos que utilizar o conversor A/D, eles so necessrios para o processamento de
sinais como de temperatura, corrente e tenso eltrica, posicionamento ou sinal de um sensor. Por
tudo isso que se faz importante saber suas caractersticas e seu funcionamento.

Para melhor entendimento da teoria da converso dos sinais analgicos em dados digitais,
um exemplo prtico com o sensor de temperatura ira nos ajudar. Sensores de temperatura fornecem
informaes analgicas (tenso) proporcional a temperatura, assim, para que se possa ser analisado
pelo microcontrolador, se faz necessrio um conversor A/D.

O PIC 16F877A possui um conversor A/D de 10 bits com 8 entradas independentes. do


tipo aproximaes sucessivas.

O menor passo, ou resoluo, o menor valor da grandeza analgica medica que causar
mudana de leitura do estado digital pelo conversor medida que o valor anterior lido pelo A/D.
dado diretamente pelo seu nmero de bits e pode ser expresso por:


=
2
Em que VREF uma tenso de referncia e n o nmero de bits do conversor.

Cada um dos n bits que compem a informao digital representa uma parcela da tenso
analgica a ser convertida, de forma que a soma de todas as contribuies de cada um dos n bits forma
a tenso de entrada do conversor A/D. Assim a parcela de tenso proporcional ao bit m do conversor
A/D dada por:

2(1)
=
2
Em que: bm o valor do bit m, ou seja, 0 ou 1.

Vamos supor que o A/D para o exemplo da temperatura e que seja de 4 bits, a tenso de
referencia seja de 5V e o valor da converso em binrio seja 1101. A tenso de entrada, :

(123 + 122 + 021 + 120 )


= (5) = 4,0625
24
Este valor de tenso equivalente a uma dada temperatura, e por isso o valor convertido
(1101) equivale a mesma temperatura. Assim, temos que duas converses devem ser feitas, uma para
o sinal analgico em digital e a outra de digital para a unidade desejada que representa a grandeza a
ser medida como por exemplo C.

34
Figura 30: Relao entre sinal analgico, digital e grandeza medida.

Existem muitas maneiras de implementar um A/D. O estudo aqui ser do sistema de


converso chamado de aproximao sucessiva.

Nesse tipo de conversor, a converso realizada do bit mais significativo (Msb) para o
menos significativo (Lsb). Dado que o Msb por se s representa metade da tenso de referncia,
conhecer o estado deste bit (0 ou 1) significa saber se a tenso de entrada maior ou menor que a
metade da referncia. Conhecido o Msb, representa metade da metade (1/4) da tenso de referncia.
Assim at o Lsb.

Supondo um A/D de 4 bits e Vref de 5V:

Tabela 4: Valor de cada bit para o exemplo.


Bit Tenso
4 (Msb) 2,5000 V
3 1,2500 V
2 0,6250 V
1 (Lsb) 0,3250 V

Supondo uma tenso de entrada de 3,3V. a converso ento seria:

1 Testa-se o bit mais significativo, ou seja, a tenso de entrada maior do que 2,5? Sim,
ento este bit vale 1.
2 Testa-se o prximo bit, ou seja a tenso de entrada maior do que 3,75V (2,5V+1,25V)?
No, ento o bit 0.
3 Testa o prximo bit, a tenso de entrada maior do que 3,125V (2,5V+0,625V)? Sim,
ento o bit 1.
4 Por fim o bit menos significativo, a tenso de entrada maior do que 3,4375V
(2,5V+0,625V+0,3125V)? No, ento o bit 0.
Desse modo o valor final da converso de 3,3V de entrada em binrio 1010.

uma forma de converso rpida e para um conversor de n bits so necessrias interaes,


que independem do valor a ser convertido.

35
Quatro registradores controlam a operao do conversor:
ADRESH byte mais significativo da converso;
ADRESL byte menos significativo da converso;
ADCON0 registrador de controle 0;
ADCON1 registrador de controle 1.

O conversor gera um resultado binrio de 10 bits e armazena o resultado nos registros


ADRESL e ADRESH.

Apesar do microcontrolador possuir diversos canais analgicos, internamente s existe um


sistema de converso. Por isso, somente um canal pode ser utilizado de cada vez. Para comear a
utiliza-lo temos que aprender a configurar os canais de maneira correta.

Inicialmente se deve definir, conforme as necessidades do projeto, qual a quantidade de


canais analgicos que sero necessrios. Em um microcontrolador que possui vrios canais, se pode
utilizar todos ou parte deles, deixando os outros pinos configurados como I/O digitais. impossvel
configurar individualmente cada canal. Existem valores padres de configurao que devem ser
respeitados.

Primeiro passo configurar os canais de entrada que sero utilizados para introduzir o sinal
analgico do conversor A/D e os canais para tenses de referncia. Isto se faz selecionando a
combinao correspondente aos bits PCFG3, PCFG2, PCFG1 e PCFG0 do registro de controle
ADCON1.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0
Figura 31: Dados de configurao do registrador ADCON1.

Para esta configurao se deve analisar a tabela 5, que defini quais pinos do PORT A ou E
sero entradas do conversor A/D.

Tabela 5: Pinos de entrada analgicas e tenso de referncia.


PCFG3: AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
VREF+ VREF-
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
0000 A A A A A A A A VDD VSS
0001 A A A A VREF+ A A A RA3 VSS
0010 D D D A A A A A VDD VSS
0011 D D D A VREF+ A A A RA3 VSS
0100 D D D D A D A A VDD VSS
0101 D D D D VREF+ D A A RA3 VSS
0110 D D D D D D D D VDD VSS
0111 D D D D D D D D VDD VSS
1000 A A A A VREF+ VREF- A A RA3 RA2
1001 D D A A A A A A VDD VSS
1010 D D A A VREF+ A A A RA3 VSS
1011 D D A A VREF+ VREF- A A RA3 RA2
1100 D D D A VREF+ VREF- A A RA3 RA2
1101 D D D D VREF+ VREF- A A RA3 RA2
1110 D D D D D D D A VDD VSS
1111 D D D D VREF+ VREF- D A RA3 RA2

36
Alm da configurao dos pinos analgicos, conforme a tabela apresentada, no se pode
esquecer de configurar os registradores TRISA e TRISE, de forma que os canais utilizados estejam
ajustados para entrada (TRIS = 1). Estando o canal analgico como sada, o sistema de converso
continuar funcionando, mas os valores convertidos sero equivalentes aos nveis alto (1 = V DD) e
baixo (0=VSS).

Outra questo importante de se observar o fato da utilizao das tenses de referncia. A


converso feita ao se comparar a tenso do pino de entrada analgica em relao as tenses de
referencia VREF + e VREF -. Assim, quando a tenso de entrada for igual a tenso V REF +, a converso
tem como resultado o valor mximo (1024) e sendo a tenso de entrada igual a VREF o resultado
ser zero (0). Pode-se ter quatro tipos de referncias, sendo duas internas (VDD e VSS), e duas externas,
ligadas aos pinos RA2 (VREF -) e RA3 (VREF +). Ao exemplificarmos com a aplicao de uma tenso
variando de 0V a 5V na entrada analgica e utilizando referencias internas onde V REF + = VDD(5V) e
VREF - = VSS(0V) e em outra aplicao um sensor varia de 1V a 4V. Para que no se perca a resoluo
do A/D, ento trabalha-se com tenses de referncias externas com VREF +(RA3) = 4V e VREF (RA2)
= 1V. importante respeitar os limites eltricos impostos a essas referncias:

Tabela 6: Limites eltricos.


Referncia Mnimo (V) Mximo (V)
VREF + VDD 2,5 VDD + 0,3
VREF - VSS 0,3 VREF + - 2,0
(VREF + = VREF -) 2,0 VDD + 0,3

O prximo fato a ser aprendido a importncia da velocidade e consequentemente aos


tempos de amostragem que devem ser respeitados para uma correta utilizao do conversor A/D.
Inicia-se entendo o funcionamento interno do sistema de converso.

Para se evitar problemas de rudo e varaes da entrada analgica durante o processo de


inverso (vale lembrar que nada absolutamente instantneo), Internamento o PIC utiliza uma
estrutura chamada Sample and Hold (S/H), com traduo amostragem e reteno. O PIC possui
internamente, um capacitor (120pF) ligado ao canal analgico em uso. Assim, ele fica carregado com
a tenso proveniente do canal de amostra. Quando o processo de converso iniciado, este capacitor
desligado, automaticamente, do canal analgico, mantendo a tenso sobre o capacitor constante
(retm). Por isso, durante todo o processo de converso, a tenso utilizada a existente no capacitor
e no mais a do canal analgico. Assim, mesmo que a tenso externa no canal varie, a converso no
ser afetada.

Durante o tempo da converso, o valor da tenso no capacitor interno no foi alterado; porm
quando terminado a converso ele ser religado a entrada analgica, que pode ter sofrido uma
variao brusca e por isso que entre converses necessria uma adequao da carga do capacitor.
Sendo recomendado um tempo mnimo de 40s a 50s.

Entendido um pouco das caractersticas e conceitos do A/D, a gora se tem que saber como
fazer sua operao.

Sendo anteriormente configurado os canais utilizados pelos registros ADCON1 e TRIS,


agora a vez de se configurar o ADCON0.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE --- ADON
Figura 32: Dados de configurao do registrador ADCON0.
37
Deve-se ajustar 2 bits em ADCON0<ADCS1:ADCS0> pois aqui que configuramos a
frequncia de trabalho.

Tabela 7: Bits de configurao da frequncia de trabalho do A/D.


ADCS1 ADCS0 Frequncia
0 0 Fosc /2
0 1 Fosc /8
1 0 Fosc /32
1 1 RC Interno

Para os trs primeiros ajustes, a frequncia de trabalho do A/D ser a frequncia do oscilador
externo do PIC (Fosc) dividida por uma das opes (2, 8 ou 32). Obtendo assim o valor do TAD.
Imagine um cristal externo de 4 MHz e uma opo de Fosc /8, temos que:

TAD = 8/4.000.000
TAD = 0,000002s ou 2s

Neste caso, o TAD de 2s. Quando se escolhe o cristal e da opo de diviso da frequncia
importante respeitar os valores de TAD aceitos pelo PIC. No PIC 16F877A (Standard) este valor
deve ser maior que 1,6s. Valores muito altos para o TAD tambm no so muito aconselhveis, e por
isso se recomenda o limite de 20s.

A ltima opo de escolha para o clock do A/D se refere a um RC interno dedicado para essa
finalidade. Neste caso o valor nominal para TAD de 4s (com variao entre 2s e 6s). Esta opo
pode ser utilizada para que o sistema de converso continue funcionando mesmo em modo SLLEP.
Este RC pode ser usado a qualquer momento, mas recomendado que para sistemas que operem com
frequncias superiores a 4MHz este oscilador seja uado somente em modo SLEEP.

A ltima configurao necessria quanto a caracterstica de funcionamento do conversor


A/D est relacionada com o modo de armazenamento do resultado nos registradores especficos.
Dado que a converso gera um resultado de 10 bits, se faz necessrio o uso de dois registradores para
armazenar este valor, o ADRESH e o ADRESL, que equivalem a parte alta e parte baixa do resultado.
Somados esses registradores resultam em 16 bits, com isso o resultado pode ser armazenado neles
justificando pela esquerda ou direita com o bit de configurao ADCON1<ADFM>.

Tabela 8: Seleo da justificao do armazenamento.


ADFM OPO
Justificado pela direita.
Utiliza todos os bits de
1
ADRESL [7:0] e somente
2 bits de ADRESH [1:0]
Justificado pela esquerda.
Utiliza todos os bits de
0
ADRESH [7:0] e somente
2 bits de ADRESL [1:0]

Tal justificao se faz valida quando queremos trabalhar com somente 8 bits do conversor,
assim se pode justificar pela esquerda e acessarmos somente a parte mais significativa atravs de
ADRESH. Com isso se cria um filtro, onde se joga fora os 2 bits menos significativos do ADRESL.

Ajustadas as configuraes agora hora de efetuar a converso.


38
Comea-se ligando o sistema de converso atravs de ADCON0<ADON>:

Tabela 9: Ligar ou desligar o sistema de converso.


ADON Estado do A/D
0 Sistema Desligado
1 Sistema Ligado

O sistema pode ser mantido desligado quando no utilizado, para reduo de consumo.

A prxima ao a escolha do canal a ser utilizado, entre os oito disponveis, atravs de


ADCON0<CHS2:CHS0>:

Tabela 10: Configurao do canal utilizado.


CHS2 : CHS0 Canal Selecionado
000 Canal 0 (RA0/AN0)
001 Canal 1 (RA1/AN1)
010 Canal 2 (RA2/AN2)
011 Canal 3 (RA3/AN3)
100 Canal 4 (RA5/AN4)
101 Canal 5 (RE0/AN5)
110 Canal 6 (RE1/AN6)
111 Canal 7 (RE2/AN7)

O ltimo passo iniciar a converso por meio do bit ADCON0<GO/DONE>:

Tabela 11: Configura o estado da converso.


GO/DONE Estado do A/D
1 Inicia a Converso
Indica o termino da converso.
0
Se forado manualmente, cancela a converso atual.

Para fazermos a leitura do canal A/D escolhido utilizaremos da instruo ADIN, mas para
usa-la necessrio alguns declares.

DECLARE ADIN_RES 10 Informa o nmero de bits usado para o resultado da


converso.
DECLARE ADIN_TAD FRC Informa qual a fonte de clock para o sistema de converso
A/D, configurando os bits do ADCON0<ADCS1:ADCS0>.
DECLARE ADIN_STIME 50 a 100 Determina o tempo de carga total do capacitor de
amostragem, mais comumente adotado entre 50s a 100s.

Obs.: S por motivo de precauo importante lembrar que se faz muito importante a
configurao do PORT ou pino escolhido como entrada atravs do da instruo TRIS.

39
Circuito

Figura 33: Circuito do Projeto 7.

Programao
Device = 16F877A
Xtal 4

Dim VALOR As Word 'Declara a variavel


Dim TENSAO As Float 'Declara a variavel
Dim RESOLUCAO As Float 'Declara a variavel
RESOLUCAO = 0.0049 'Declara uma constante

TRISA.0 = 1 'Declara o pino como entrada


TRISB = 0 'Declara o PORT como sada

Declare LCD_Type 0 'Informa que o LCD Alfanumerico


Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable
Declare LCD_RSPin PORTB.2 'Informa o pino RS
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD

Declare Adin_Res 10 'Bits usado na converso


Declare Adin_Tad FRC 'Fonte do clock da converso
Declare Adin_Stime 50 'tempo de carga do capacitor de amostragem

ADCON1=%10001110

INICIO:
Cls 'Limpa o LCD
VALOR = ADIn 0 'Coloca o valor do canal 0 no variavel VALOR
TENSAO = VALOR * RESOLUCAO 'Converte de Bits p/ valor real de tenso
Print "VALOR = ", Dec4 VALOR 'imprime o valor do canal 0
Print At 2, 1, "TENSAO = ", Dec4 TENSAO 'Imprime o valor de tenso
DelayMS 500
GoTo INICIO
40
Comentando

Neste programa temos que em ADCON1=%10001110 configuramos a leitura do A/D com


justificao a direita e ativamos o pino RA0/AN0 como o canal analgico a ser usado na converso.
A varivel VALOR recebe a converso A/D em binrio atravs da instruo ADIn 0 (canal 0). Como
VALOR recebe o valor da converso em binrio, temos que converter esse valor para que se possa
fazer a leitura real de tenso analgica na entrada do pino. Essa converso se faz multiplicando
VALOR pela constante RESOLUCAO (que indica quanto vale cada bit da converso A/D). Por
ltimo imprimimos VALOR e TENSAO no LCD para que possamos visualizar os dados da
converso.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________

41
6.2.8 - Projeto 8: Utilizando Sensor de Temperatura para Medies.

A medio de temperatura uma pratica muito importante, principalmente em industrias e


em atividades ambientais.

Para medir temperatura atravs do PIC16F877A. necessrio o uso de um transdutor de


temperatura como o LM35 e um programa que auxilie na interpretao do resultado. Esses
transdutores tm sua leitura feita na escala de temperatura em graus Celsius com Range entre -55 C
e 150C.

O LM35 tem uma famlia que diferem entre suas caractersticas, o que usaremos neste
projeto ser o LM35DZ. Nele temos 3 pinos: O pino +Vs que recebe a tenso de entrada que pode
variar entre 4V e 30V, o pino GND que ligado a terra ou ao negativo e o pino Vout o pino de
sada do sensor e ser ligado ao pino de entrada do microcontrolador. O LM35DZ tem uma variao
de tenso na sua sada dado por 10mV/C, ou seja, para cada 1C de variao o pino de sada tem um
incremento de 10mV. O LM35DZ mede temperatura entre 0C e 100C.

Para a leitura da temperatura utilizaremos o conversor A/D do PIC16F877A. Analisando os


parmetros temos que: utilizando tenses de referncia 0V e 5V no PIC e 10 bits de converso, a
resoluo ser 0,004883 V/bit, sendo est a menor variao de tenso sentida pelo conversor e
equivalente a 1 bit. Com isso podemos dizer que se 10mV equivalem a 1C ento por regra de trs
simples podemos dizer que a resoluo equivale a 0,4883C e assim podemos definir 1 bit do A/D
como sendo 0,4883C.

Circuito

Figura 34: Circuito do Projeto 8.

42
Programa

Device = 16F877A
Xtal 4

Dim VALOR As Word 'Declara a variavel


Dim TEMPERATURA As Float 'Declara a variavel
Dim CONVERSAO As Float 'Declara a variavel
CONVERSAO = 0.4883 'Declara uma constante

TRISA.0 = 1 'Declara o pino como entrada


TRISB = 0 'Declara o PORT como sada

Declare LCD_Type 0 'Informa que o LCD Alfanumerico


Declare LCD_DTPin PORTB.4 'Informa os pinos de Dados
Declare LCD_ENPin PORTB.3 'Informa o pino do Enable
Declare LCD_RSPin PORTB.2 'Informa o pino RS
Declare LCD_Interface 4 'Informa a quantidade de bits em um pacote de dados
Declare LCD_Lines 2 ' Informa o numero de linhas do LCD

Declare Adin_Res 10 'Bits usado na converso


Declare Adin_Tad FRC 'Fonte do clock da converso
Declare Adin_Stime 50 'tempo de carga do capacitor de amostragem

ADCON1=%10001110

INICIO:
Cls 'Limpa o LCD
VALOR = ADIn 0 'Coloca o valor do canal 0 no variavel VALOR
TEMPERATURA = VALOR * CONVERSAO 'Converte de Bits p/ temperatura
Print "VALOR = ", Dec4 VALOR 'imprime o valor do canal 0
Print At 2, 1, "Temperatura=", Dec4 TEMPERATURA, 'Imprime o valor
DelayMS 500 'de TEMPERATURA
GoTo INICIO

Comentando

Neste projeto o valor convertido no canal 0 do A/D proveniente do sensor de temperatura


LM35DZ colocado na varivel VALOR e depois com a constante de converso CONVERSAO, o
valor da varivel VALOR convertido para o valor de temperatura graus Celsius registrada pelo
sensor. E por ltimo impresso no LCD, VALOR e TEMPERATURA.

________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
43
6.2.9 Projeto 9: Acionamento de Servo-Motores.

Os servos motores so usados em vrias aplicaes quando se deseja movimentar algo de


forma precisa e controlada.
Sua caracterstica mais marcante a sua capacidade de movimentar o seu eixo at uma posio
e mant-lo, mesmo quando sofre uma fora em outra direo.
Para entendimento de seu funcionamento necessrio o conhecimento de sua parte interna
como mostra a figura abaixo:

Figura 35: Componentes internos do servo motor (Fonte: Desconhecida).

<<<Partes do Servo Motor>>>


Circuito de Controle responsvel pelo monitoramento do potencimetro e acionamento do
motor visando obter uma posio pr-determinada.
Potencimetro ligado ao eixo de sada do servo, monitora a posio do mesmo.
Motor Movimenta as engrenagens e o eixo principal do servo.
Engrenagens reduzem a rotao do motor, transferem mais torque ao eixo principal de sada
e movimentam o potencimetro junto com o eixo.
Estes componentes esto posicionados internamente a caixa do servo da forma mostrada na
figura 36:

Figura 36: Vista do servo motor (Fonte: Desconhecida).

44
<<<Controle do Servo Motor>>>
O servo motor alimentado com tenses de 5V e recebe um sinal no formato PWM (Pulse
Width Modulation). Este sinal 0V ou 5V. O circuito de controle do servo fica monitorando este
sinal em intervalos de 20ms. Se neste intervalo de tempo, o controle detecta uma alterao do sinal
na largura o sinal, ele altera a posio do eixo para que a sua posio coincida com o sinal recebido.

Como mostra a Figura 37:


Um sinal com largura de pulso de 1ms corresponde a posio do servo todo a esquerda ou 0
graus.
Um sinal com largura de pulso de 1,5ms corresponde a posio central do servo ou de 90
graus.
Um sinal com largura de pulso de 2ms corresponde a posio do servo todo a direita ou 180
graus.

Figura 37: Sinais de controle do servo motor (Fonte: Desconhecida)

Uma vez que o servo recebe um sinal de 1,5ms (por exemplo), ele verifica se o potencimetro
encontra-se na posio correspondente, se ele estiver nada feito. Se o potencimetro no estiver na
posio correspondente ao sinal recebido, o circuito de controle aciona o motor at que o
potencimetro esteja na posio correta. A direo de rotao do servo motor depende da posio do
potencimetro. O motor vai girar na direo levando o potencimetro mais rapidamente na posio
correta.

45
Circuito

Figura 38: Circuito do Projeto 9.

Programa
Device 16F877A
Xtal 4

TRISB=%00000000
TRISD=%11100000
Dim POS As Word
Symbol SERVO1 = PORTB.0 'Nomeia pino do servo
Symbol BOTAO1 = PORTD.5 'Nomeia pino do Boto 1
Symbol BOTAO2 = PORTD.6 'Nomeia pino do Boto 2
Symbol BOTAO3 = PORTD.7 'Nomeia pino do Boto 3
PORTB=0
PORTD=0
POS=1500 'Coloca o valor 1500 na variavel POS

TEST:
If BOTAO1=1 Then If POS<2000 Then POS=POS+1 'Gira p/ direita
If BOTAO2=1 Then POS=1500 'Centraliza
If BOTAO3=1 Then If POS>0 Then POS=POS-1 'Gira p/ esquerda
Servo SERVO1, POS 'Instruo para controle do Servo Motor
DelayMS 20
GoTo TEST

Comentando

Esse um programa bem simples onde a instruo Servo controla a posio do servo motor
atravs de pulsos entre 1ms e 2ms de durao, sendo esse tempo controlado pela instruo IF-THEN
relacionando os valores com 3 botes ligados ao PORTD, onde o BOTAO1 incrementa uma unidade
no tempo do pulso de controle do servo, assim acrescentando 0,001ms de durao ao sinal de pulso,
fazendo o servo girar para a direita. O BOTAO2 centraliza o servo motor com pulso do sinal de
controle em 1,5ms e o BOTAO3 decrementa 0,001ms de durao do sinal de controle do pulso e com
isso o servo gira para a esquerda.
46
6.2.10 Projeto 10: Usando o PWM.

A instruo PWM Pino, Duty (ou Nvel), Ciclo, produz um trem de pulsos em modulao
por largura de pulso em um pino. Cada ciclo de PWM consistem de 256 passos.

O Duty (Nvel) uma varivel ou constante que determina a durao do pulso em seu nvel
mais alto indo de 0 at 255. Quando o Nvel for 0, a sada se mantem em 0% da tenso de entrada e
quando o Nvel for 255, a sada se mantem em 100% da tenso de entrada.

O Ciclo uma varivel ou constante onde se define o nmero de ciclos em um pino


especifico, ou seja, o ciclo PWM repetido ciclo vezes.

O tempo do Ciclo do PWM depende da frequncia do oscilador. Se um oscilador de 4MHz


usado, cada Ciclo duraria cerca de 5ms. Se um oscilador de 20MHz usado, cada Ciclo teria cerca
de 1ms. A definio do valor do Oscilador no ter efeito no PWM.

Podem ser usados quantos Pinos quiser dentro do limite do microcontrolador. O Pino ser
fixado como sada logo antes da gerao dos pulsos e ser revertido para entrada aps parar a gerao.
A sada PWM em pino se parece com uma distoro de sinais e no com uma linha srie de ondas
quadradas. Para melhor estabilidade do sinal necessrio algum tipo de filtro e assim tornar o sinal
em algo que possa ser utilizado. Um circuito RC pode ser usado como um simples conversor
Digital/Analgico (D/A), como mostra a figura 39. Esse filtro utilizado no pino do microcontrolador
quando se quer utilizar a prpria tenso do microcontrolador para obter a tenso analgica de sada,
quando se quer outras tenses ento o PWM ser usado para gerar o sinal para outro circuito gerar o
sinal analgico e agora este que necessitara do filtro.

Figura 39: Filtro RC.

O PWM muito usado para regular tenses em fontes. Este controle se faz modificando
Nvel da largura de pulso de trabalho do sinal gerado. Pode-se aplicar a formula a baixo para obter o
Nvel dos pulsos ou a tenso de sada.

255
= =
255

Onde:
Vout: tenso de sada
Vfonte: tenso da fonte de alimentao do circuito
Nvel: constante entre 0 a 255.

47
Circuito

Figura 40: Circuito do Projeto 10.

Programa

Device 16F877A
Xtal 4

TRISB=%00000000

INICIO:
PWM PORTB.7, 128, 100 'PWM para 50% do sinal
GoTo INICIO
End

Comentando

Nesse projeto o intuito foi adquirir na sada um sinal com metade da fonte de tenso, que
nesse caso seria 5V proveniente do microcontrolador PIC. Utilizando a formula anteriormente citada
se pode calcula o valor do Nvel: Nvel=(2,5*255)/5=127,5 ou 128. O Ciclo foi de 100 ciclos do PWM.
Na sada analgica temos 2,5V na sada analgica para a configurao da figura 40, com a
configurao do PWM, 128, 100.

48
7 REFERENCIAS BIBLIOGRFICAS

SOUSA, David Jos de. Nicols Csar L. Conectando o PIC-Recursos Avanados. 3a Edio
Editora Erica, 2002.

SENA, Antnio Srgio. Microcontroladores PIC. SENAC

ESTEVA, Christian Bodington. BASIC PARA MICROCONTROLADORES PIC.

JERNIMO, Alberto. Microcontroladores PIC Para Iniciantes.

SOUSA, Vitor Amadeu. Programao em BASIC para o PIC.

MECANIQUE. Pronto ds userguide. 2004.

microEngineering Labs, Inc. PicBasic Pro Compiler.

49