Académique Documents
Professionnel Documents
Culture Documents
REPBLICA
MICROCONTROLADORES PIC
MARO DE 2014
E.T.E. REPBLICA
SUMRIO
E.T.E. REPBLICA
E.T.E. REPBLICA
E.T.E. REPBLICA
E.T.E. REPBLICA
E.T.E. REPBLICA
E.T.E. REPBLICA
esquerdo. Logo desta janela encontra-se a seleo da porta serial COM na qual o
programador ser conectado, no caso: COM1.
Se forem utilizados outros tipos de programadores, deve-se verificar se eles so
suportados pelo Winpic800, e ento fazer a seleo adequada. H duas placas
gravadoras com interface USB em nosso laboratrio, mostradas na Figura II.4(a) e II.4(b):
(a)
(b)
E.T.E. REPBLICA
E.T.E. REPBLICA
A Figura II.6 mostra que basta clicar no cone da pastinha amarela (para onde a
seta est apontando) ou no menu Arquivo e logo em seguida em Abrir, localizando-se
a pasta na qual o arquivo .h est gravado (a mesma pasta que foi criada para o projeto e
para o programa fonte, no caso, em C CCS). No exemplo, est se abrindo um programa
denominado PISCA_LED1.hex que se encontra na pasta PISCA_LED1 (que pode estar
dentro da pasta criada para a turma, por exemplo).
4) O quarto passo, caso haja necessidade, a configurao dos chamados fusveis de
configurao interna ou configuration bits. Se estes j foram definido em alguma diretiva
do programa ou no prprio software de edio/compilao, este passo pode ser pulado.
Independentemente do programador utilizado, necessrio escolher uma configurao de
trabalho do PIC. O 16F628A possui um registrador especfico para esta funo, chamado
CONFIG, o qual acessado por meio do endereo 2007h. Como este endereo est fora
da faixa de endereo da memria de programa (0000h at 07FFh), os bits desse
registrador so acessveis somente na gravao ou verificao.
No h necessidade de preocupao com esta posio de memria, pois, como j
mencionado, os softwares de gravao, assim como editores de linguagem, costumam
permitir que o usurio escolha as opes desejadas para os fusveis, e ento efetuar a
gravao automaticamente. Os itens configurados variam de PIC para PIC. O PIC
16F628A possui as seguintes opes:
- Tipo de oscilador
- Watchdog Timer (WDT)
- Power up Timer
- Brown Out Detect
- Master Clear Eneable
- Low Voltage Program
- Data EE read Protect
- Code Protect
A funo de cada um desses fusveis descrita na seo II.1.
Clicando-se na opo Config. do Winpic800 como mostrado na Figura II.7
possvel configurar estes bits, sem a necessidade de uma diretiva no cdigo em C, ou
sem usar o programa editor. Isto tambm possvel atravs do MPLAB, que pode
trabalhar associado ao CCS, no menu Configure/Configuration Bits...
E.T.E. REPBLICA
5) Uma vez que a placa gravadora esteja conectada na porta COM (conector DB9) e o
PIC tenha sido detectado, clica-se no cone que tem o formato de um circuito integrado
com uma seta vermelha apontado para ele (programar tudo), como destacado na
Figura II.8, e s aguardar o tempo de gravao e verificao para ver se tudo correu
bem.
Tipo de Oscilador
O PIC 16F628 pode trabalhar com vrios tipos de osciladores. Estes podem ser
internos ou externos. A escolha depende do tipo de hardware disponvel, das aplicaes e
da relao custo benefcio. Os cristais so os mais precisos, porm so os mais caros. A
malha RC a mais barata, porm de menor preciso. Uma soluo intermediria so os
ressonadores. As opes so:
10
E.T.E. REPBLICA
Watchdog Timer
O WDTE um fusvel de programao que permite habilitar ou desabilitar o WDT
(Watchdog Timer temporizador Co de Guarda), que um temporizador interno RC
que quando ocorre um overflow ou estouro (atinge o mximo da contagem) provoca um
reset no programa que esteja funcionando em modo normal. Tem um clock independente,
rodando livre e independentemente do clock principal. A principal finalidade do WDT
recuperar a CPU de eventuais travamentos no programa, que podem ocorrer por
interferncias externas ou erros no software. importante em casos onde o programa no
pode parar de funcionar, como o caso de um computador de bordo. Para a maioria dos
nossos programas o WDTE deve estar desabilitado, pois se o WDT estiver habilitado,
este deve ser resetado de tempos em tempos, de forma a nunca ocorrer o overflow do
mesmo. Este ajuste no pode ser alterado durante a execuo do programa.
Power up Timer
O temporizador de power up (PWRT), se estiver habilitado, permite que o PIC s
comece a operar cerca de 72 ms aps a fonte ter sido ligada. Evita problemas de
inicializao incorreta ou travamentos devido ao tempo de estabilizao necessrio da
fonte de alimentao ou do reset externo.
Master Clear Eneable (MCLRE)
Esta opo habilita o pino RA5/MCLR/THV a funcionar como entrada de reset. Se
isto ocorrer, h a necessidade de manter o pino correspondente (pino 4) em nvel alto, o
que feito atravs de um resistor de pull-up (resistor de elevao, conectando o pino
Vcc), que varia na faixa de 4,7 K a 10 K, geralmente. Se o MCLRE estiver
desabilitado, este pino funciona com I/O e no h necessidade do resistor de pull-up para
o funcionamento do PIC.
11
E.T.E. REPBLICA
Brown Out Detect Eneable (BODEN)
A habilitao desta opo ir resetar o PIC caso a tenso de alimentao caia
abaixo de certo valor (normalmente 4 V). Isto pode evitar travamentos com determinadas
quedas na tenso de alimentao.
Low Voltage Program (LVP)
Ativa ou no a programao de baixa voltagem. Este recurso permite que a
memria de programa do PIC seja gravada em baixa tenso (5 V ao invs dos tradicionais
13 V aplicados ao pino de programao). Isto favorece a criao de sistemas onde um
PIC grava o programa de outro PIC ou sistemas de upgrades remotos. Como os 13V
raramente esto disponveis nos projetos, este processo padroniza o hardware em nveis
TTL. Em geral, esta funo estar desabilitada de forma a permitir que o pino RB4/PGM
atue como I/O.
Data EE Read Protect
Se esta opo estiver ativada no ser possvel ler a EEPROM interna atravs do
gravador do PIC. Se esta opo estiver desativada todos os dados armazenados nesta
memria sero perdidos durante a gravao.
Code Protect (CP)
Uma vez ativado o cdigo de proteo, o programa gravado no chip no poder
mais ser lido, nem pelo programador, embora haja a possibilidade de reprogramao. Isto
evita cpias indevidas.
Checksum
O checksum o resultado da soma de todos os valores numricos armazenados
na memria de programa do PIC. Trata-se de uma tcnica de verificao de erros. Se um
programa j gravado possui o mesmo checksum de um programa compilado, mesmo com
o code protect ativado, deduz-se, por exemplo, que os dois possuem o mesmo cdigo
fonte.
Nmero de Identificao
O PIC possui 4 bytes (posies de 2000h a 2003h) que podem ser gravados para
uma identificao de verso, por exemplo. Facilita o rastreamento do software em caso de
problemas futuros, mesmo com o cdigo de proteo ativado. S os quatro bits menos
significativos de cada byte esto disponveis, de forma que 4 dgitos de 0 a 9 podem ser
usados como ID.
12
E.T.E. REPBLICA
1) Conecte o gravador numa entrada USB do computador e clique no cone abaixo na
rea de trabalho:
2) aps abrir a tela abrir a tela abaixo (Figura III.2), a placa e o PIC ligado a ela j devem
ter sido detectados. Se a mensagem No device found aparecer em na janela Device,
clique em Programmer/Manual Device Select.
3) Clique em File e logo em seguida em Import Hex para importar o arquivo compilado
(extenso .hex) desejado. Busque a pasta onde o arquivo se encontra.
13
E.T.E. REPBLICA
4) Aps a importao, clique em Write para gravar o PIC.
IV Uso do CCS
A partir de agora passaremos a ter noes sobre a linguagem C para sistemas
embarcados (embedded systems), isto , sistemas dedicados (para propsitos
especficos, em geral, automao e controle) que integram um sistema eltrico e/ou
mecnico maior. Muitos desses sistemas, hoje em dia, so baseados em
microcontroladores. Os sistemas dedicados tm objetivos opostos aos sistemas de
propsito geral, como os PCs, voltados tipicamente para processamentos de dados. O
embedded C uma extenso da linguagem C para operao com sistemas embarcados,
incluindo operaes de I/O, dentre outros recursos.
A aplicao da linguagem C em programao de microcontroladores tem ganhado
campo nos ltimos anos, substituindo com vrias vantagens a programao em assembly
que foi originalmente majoritria nessa aplicao.
Adotamos como plataforma de desenvolvimento de nossos programas em
linguagem C o software PCWHD da CCS (Custom Computer Service), empresa
responsvel pelos primeiros compiladores C para os microcontroladores da Microchip. A
verso demo, com durao de 45 dias, pode ser baixada do site www.ccsinfo.com.
Os chamados compiladores C-Aware IDE da CCS possuem as seguintes verses,
cuja aquisio depende da necessidade do cliente:
- PCW
Para PICs 10/12/16;
- PCWH
Para PICs 10/12/16/18;
- PCDIDE
Para PICs 24/dsPIC;
- PCWHD
Para PICs 10/12/16/18 e PICs 24/dsPIC.
O PCWHD, alm do mdulo IDE, constitudo por mdulos compiladores,
chamados compiladores de linha de comando (comand line), que podem ser comprados
separadamente, conforme a necessidade:
PCB
compilador para a linha base (pics de 12 bits)
PCM
compilador para a linha intermediria (pics de 14 bits)
PCH
compilador para o topo de linha (pics de 16 bits)
PCD
compilador para os pics de 24 bits
14
E.T.E. REPBLICA
Figura IV.2
15
E.T.E. REPBLICA
at porque se torna um pouco invivel explorar todos esses recursos durante o perodo
letivo.
IV.1.1 Utilizando o Projetct Wizard
O Projetc Wizard do CCS a maneira mais simples, rpida e direta de fazer as
inicializaes necessrias para um novo programa fonte em linguagem C, inclusive as
configuraes dos fusveis. Algumas configuraes de fusveis, inclusive, no precisariam
nem ser especificadas, pois o compilador os configura automaticamente (situao
default), da seguinte maneira:
- A programao em baixa tenso (Low Voltage Program ou LVP) fica desativada;
- O Power up Timer fica ativado;
- O Watch dog Timer fica automaticamente desativado se no estiver presente no cdigo
fonte a funo restart_wdt();
- A configurao automtica dos bits de configurao feita baseada na diretiva #use
delay();
- O Master Clear Eneable (MCLRE) ativado.
Passos:
1) Clique File, logo em seguida em New, e finalmente em Project Wizard (Figura
IV.3):
Figura IV.3
16
E.T.E. REPBLICA
2) Ao ser aberta a tela Salvar como (Figura IV.4), salve o projeto na pasta desejada,
com o nome desejado (que por default main.ccspjt).
Figura IV.4
3) Na prxima tela que se abrir (Figura IV.5), no item Device que a primeiro que se
abre selecione PIC16 na caixa intitulada Family (ou mantenha o defaut all), na aba
Options General Device;
Na caixa Device, na mesma aba, selecione o nmero do nosso PIC: 16F628A.
Ainda na mesma aba, abaixo, esto as opes de clock. Na caixa Oscillator Type
selecione Internal, para que o PIC possa funcionar com seu clock interno, sem a
necessidade de clocks externos (como um cristal, por exemplo). Na caixa Clock Speed,
digite a frequncia desejada, que pode ser selecionada em Hz, KHz ou MHz. No caso,
usaremos a frequncia do clock interno de 4 MHz (4.000.000 Hz).
Mais abaixo, mantenha o Watchdog Timer desabilitado, mantendo desclicado o
eneable na opo WDT.
4) Desa a barra de rolagem vertical na parte esquerda da tela at o final e selecione a
opo Fuses (Figura IV.6).
Na aba Options (Figura IV.7) desabilite a opo Master Clear pin eneable,
desabilitando a entrada de Master Clear (isto permite que este pino correspondente do
17
E.T.E. REPBLICA
PIC pino 4 prescinda do uso de um resistor de pull-up, j que a entrada de Master
Clear no ser utilizada. Isto disponibiliza tambm a entrada RA5).
Figura IV.5
Habilite o Power Up Time e o Reset when brownout detected.
Clicando na aba Code (Figura IV.8) pode-se verificar a configurao escolhida
para os fusveis (que teria de ser introduzida manualmente no programa caso no se
utilizasse o o Project Wizard). O que aparece direita da dupla barra (//) so
comentrios. As linguagens de programao dispem desse recurso para facilitar a
interpretao do que o programa est fazendo, servindo apenas para quem est lendo o
cdigo, pois no constituem comandos ou funes da linguagem. A dupla barra utilizada
para comentrios de linha (apenas em uma linha), j para comentrios de bloco (vrias
linhas) deve-se utilizas os delimitadores /* no incio do comentrio e */ no final do
comentrio.
Se quisermos testar o programa sem uma determinada parte dele (bloco ou
conjunto de instrues), basta transformar a parte que se quer eliminar em comentrio.
Assim, no h a necessidade de apagar todos os comandos e eles podem facilmente ser
reinseridos, caso haja necessidade.
18
E.T.E. REPBLICA
Figura IV.6
Figura IV.7
19
E.T.E. REPBLICA
Figura IV.8
5) Clique em Create Project no canto inferior direito e ser exibida a tela da figura IV.9:
Figura IV.9
No arquivo cabealho (extenso .h) introduzidos pela diretiva include,
encontram-se todas as configuraes feitas no projeto. Estas teriam que ser includas
20
E.T.E. REPBLICA
manualmente, caso no se houvesse empregado o Project Wizard, usando as seguintes
diretivas:
#include<16f628a.h>
#fuses intrc_io, nowdt, nolvp, nomclr, brownout, put
#use delay(clock=4000000)
Code Protect
Data EE Read Protect
Oscilador
DESCRIO
Habilita Master Clear
Desabilita Master Clear
Habilita brownout detect
Desabilita brownout detect
Habilita Watchdog Timer
Desabilita Watchdog Timer
Habilita Power Up Timer
Desabilita Power Up Timer
Habilita prog. em b. tenso
desabilita prog. em b.
tenso
PROTECT
Leitura do cdigo protegida
NOPROTECT
Leitura no protegida
CPD
Leitura da EPROM prot.
NOCPD
Leitura da E PROM no p.
LP, RC, XT, HS, INTRC_IO, Vrios
tipos
de
clock
INTRC_OSCOUT, EC e
internos e externos
EC_OSCOUT
MCLR
NOMCLR
BROWNOUT
NOBROWNOUT
WDT
NOWDT
PUT
NOPUT
LVP
NOLVP
21
E.T.E. REPBLICA
#include <16F628A.h>
Main( )
{
}
Em qualquer compilador de linguagem C tradicional a funo Main, com as
duas chaves delimitando o incio e o fim da funo, j seria o bastante. No caso do
compilador para microcontroladores, entretanto, h a necessidade da incluso do
arquivo cabealho (header) que contm as informaes necessrias ao PIC que
ser usado (no caso, o PIC 16F628A). Da a necessidade da diretiva include no
incio do programa (como visto anteriormente, isto feito automaticamente ao se
usar o Project Wizard).
O programa anterior nada faz, mas j compilado sem erros. Experimente
digitar, compilar e gravar os programas a seguir e, com base nas explicaes de
sala de aula, responda o questionrio a seguir:
22
E.T.E. REPBLICA
}
}
#include<16f628a.h>
#fuses intrc_io, nowdt, nolvp, nomclr, brownout, put
#use delay(clock=4000000)
#define led pin_b5
main()
{
while(true)
{
output_high(led);
delay_ms(1000);
output_low(led);
delay_ms(1000);
}
return(0);
}
4 PROGRAMA Programa Pisca_Led3
#include<16f628a.h>
#fuses intrc_io, nowdt, nolvp, nomclr, brownout, put
#use delay(clock=4000000)
main()
{
while(true)
{
output_bit(pin_B1,0); // coloca o bit 1 da porta B em nvel baixo
delay_ms(1000);
output_bit(pin_B1,1); // coloca o bit 1 da porta B em nvel alto
delay_ms(1000);
}
return(0);
}
5 PROGRAMA Programa Pisca_8_Leds_juntos1
23
E.T.E. REPBLICA
#include<16f628a.h>
#fuses intrc_io, nowdt, nolvp, nomclr, brownout, put
#use delay(clock=4000000)
main()
{
while(true)
{
output_b(0b00000000);
delay_ms(1000);
output_b(0b11111111);
delay_ms(1000);
}
return(0);
}
Exerccios
1) Numere a sequncia de passos abaixo de forma a coloc-la na ordem certa:
(
(
(
(
) compilar o programa
) Identificar erros de sintaxe e lgica (debbug)
) editar o programa em linguagem
) gravar o PIC
24
E.T.E. REPBLICA
a) Sabendo-se que o circuito ser montado num protoboard apenas com os componentes
apresentados, que cuidados devem ser tomados na configurao dos fusveis em relao
ao Master Clear e ao tipo de clock? Por qu? O que h de diferente na base de testes
empregada no laboratrio no tocante a esses itens?
b) Calcule um adequado valor para R1 considerando-se:
tenso de sada em nvel alto 5,0 V
corrente nominal do led 20 mA
tenso sobre o led (aceso) 2,0 V
c) Qual dos programas Pisca_led (1, 2 ou 3) estaria adequado para este hardware, de
forma que o led permanea 1 segundo aceso e 1 segundo apagado?
d) Altere este programa de forma que:
d.1) O led pisque mais rpido
d.2) O led pisque mais lentamente
d.3) O led permanea 4 segundos aceso e 2 segundos apagado
25
E.T.E. REPBLICA
( ).CCSPJT
( ).C
( ).PBAS
( ).CCSPJT
( ).C
( ).PBAS
26
E.T.E. REPBLICA
13) Altere o 5 programa e o 6 programa de maneira a passar a informao de binrio
para hexadecimal.
14) Elabore um programa em CCS C que pisque alternadamente dois leds colocados em
RB3 e RB6. Eles devem permanecer 0,5 segundo aceso e 0,5 segundo apagado.
27