Documente Academic
Documente Profesional
Documente Cultură
Limoeiro do Norte-CE
Maro de 2015
Prefcio
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
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.
1
Figura 2: rea de trabalho do Proton IDE.
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.
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.
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.
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.
3
2 - O PIC 16F877A
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.
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.
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.
6
3 - CONCEITOS BSICOS SOBRE ESTRURAS INTERNAS DOS
MICROCONTROLADORES
3.1 - Memrias
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)
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
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.
8
3.7 - Portas de Entrada/Sada I/O
3.8 - Interrupes
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
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.
Harvard
10
4 - CONCEITOS DE ELETRNICA
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.
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.
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.
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
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.
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
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.
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
DELAYMS
DEVICE
DIM
END
Sintaxe: END
Viso geral: A declarao END faz parar a compilao de origem, e cria um loop infinito.
GOTO
HIGH
17
LOW
SYMBOL
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).
FOR...NEXT...STEP
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
19
EWRITE
Existe ainda comandos padronizados para controlar e manipular o LCD como mostrado
abaixo na tabela 3.
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
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?
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
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
Programa
Comentando
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
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
26
Programa
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.
Circuito
28
Programa
INICIO:
For CONT = 0 To 9 'Faz um lao com a varivel CONT indo de 0 a 9
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.
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
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.
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.
No Proton IDE necessrio fazer algumas declaraes para o uso de displays alfanumricos
para o uso do comando PRINT.
Circuito
31
Programa 1
Device = 16F877A
Xtal 4
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
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
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
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).
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 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, :
34
Figura 30: Relao entre sinal analgico, digital e grandeza medida.
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.
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.
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.
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.
Para esta configurao se deve analisar a tabela 5, que defini quais pinos do PORT A ou E
sero entradas do conversor A/D.
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).
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.
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.
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.
O sistema pode ser mantido desligado quando no utilizado, para reduo de consumo.
Para fazermos a leitura do canal A/D escolhido utilizaremos da instruo ADIN, mas para
usa-la necessrio alguns declares.
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
Programao
Device = 16F877A
Xtal 4
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
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
41
6.2.8 - Projeto 8: Utilizando Sensor de Temperatura para Medies.
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.
Circuito
42
Programa
Device = 16F877A
Xtal 4
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
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
43
6.2.9 Projeto 9: Acionamento de Servo-Motores.
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.
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
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.
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.
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
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.
49