Escolar Documentos
Profissional Documentos
Cultura Documentos
PIC18
Reviso
Principais Autores
Descrio da Verso
Data de Trmino
A
B
Verso inicial.
Alterao do esquema eltrico
01/06/2009
12/08/2009
Exsto Tecnologia
NDICE
PGINA
Introduo .............................................................................................................................................. 9
1
Apresentao do produto............................................................................................................. 9
Microcontroladores ................................................................................................................... 20
1.1 Sistema computacional........................................................................................................ 20
1.1.1 Memrias .................................................................................................................... 21
1.1.1.1
Memria de programa ........................................................................................ 22
1.1.1.2
Memria de Dados ............................................................................................. 23
1.1.2 Dispositivos de entrada e sada ................................................................................... 23
1.1.3 Perifricos ................................................................................................................... 27
1.1.4 CPU ............................................................................................................................. 27
1.2 Arquitetura Computacional ................................................................................................. 32
1.2.1
1.2.2
1.2.3
2.1
2.2
2.7
Oscilador .............................................................................................................................. 54
2.8.1
2.8.2
2.8.3
2.8.4
2.8.5
2.8.6
2.8.7
2.8.8
2.8.9
2.8.10
2.8.11
3
3.1
4.4.2.1
If ....................................................................................................................... 115
4.4.2.2
If-else ................................................................................................................ 116
4.4.2.3
Operador ternrio condicional .......................................................................... 116
4.4.2.4
Switch ............................................................................................................... 117
4.4.3 Repetio................................................................................................................... 118
4.4.3.1
Do-While .......................................................................................................... 118
4.4.3.2
While ................................................................................................................ 118
4.4.3.3
For .................................................................................................................... 119
4.4.3.4
Comando Break ................................................................................................ 119
4.5 Funes .............................................................................................................................. 119
4.5.1 Passagem de parmetros ........................................................................................... 120
4.6 Interrupes....................................................................................................................... 122
4.6.1 Utilizao das Interrupes ....................................................................................... 126
4.6.2 Interrupes no C18 .................................................................................................. 129
4.7 Funes teis ..................................................................................................................... 131
4.8
5.4
6.2
10
11
12
13
14
15
16
17
18
19
2.1
2.2
3.1
3.2
3.3
Exsto Tecnologia
3.4
3.5
3.6
6
6.1
6.2
Exsto Tecnologia
Introduo
Parabns! Voc acaba de adquirir um produto de alta qualidade e tecnologia de ponta. O Kit
Educacional XM118 ser de grande auxlio no aprendizado e desenvolvimento de sistemas digitais, na
elaborao de cursos e treinamentos que envolvam microcontroladores PIC18.
A Exsto Tecnologia uma empresa situada em Santa Rita do Sapuca, Minas Gerais, cidade
conhecida como Vale da Eletrnica por seu destaque na indstria eletroeletrnica e pela
excelncia de suas instituies de ensino. Nossa misso sempre fornecer as melhores ferramentas
para o desenvolvimento e aprendizado em eletrnica e desenvolvimento de software. Visite nosso
site www.exsto.com.br para conhecer outras solues e produtos oferecidos.
1 Apresentao do produto
O Kit Educacional XM118 um ambiente de desenvolvimento que visa facilitar o aprendizado e
o desenvolvimento de aplicaes de microcontroladores PIC18.
Seu desenvolvimento foi baseado no PIC18F4550, que dentre outras caractersticas
importantes possui um perifrico USB Device, apesar de suportar outros componentes de 40 pinos
(nestes casos nem todas as aplicaes da placa so suportadas). A tabela abaixo apresenta algumas
das principais caractersticas do PIC18F4550.
A tabela a seguir trs as principais caractersticas do PIC18F4550.
Exsto Tecnologia
Caracterstica
Freqncia de Operao
Memria de programa
Memria de dados RAM
Memria de dados EEPROM
Fontes de interrupo
Terminais de I/O
Temporizadores/Contadores
CCP
ECCP 1
Comunicao Serial
Comunicao USB
Comunicao Paralela
Conversor analgico para digital
Detector de tenso programvel
Conjunto de instrues
Notas:
PIC18F4550
DC a 48MHz
32768 bytes
2048 bytes
256 bytes
20
36
4
1
1
MSSP
EUSART 2
Sim
SPP3
10 bits, 13 canais
1
75 convencionais + 8
do modo entendido
A escolha da famlia PIC18 se justifica por ser uma famlia de dispositivos de 8 bits de alto
desempenho, que possui recursos comuns a todos os microcontroladores modernos, permitindo um
aprendizado que no se limite apenas a essa famlia mas que se estenda a outras famlias PIC e
mesmo a outros fabricantes. Outra vantagem dessa linha poder usar um compilador C profissional
como o C18. Na atualidade o desenvolvimento em sistema embarcados praticamente todo feito em
C, sendo usado o Assembly apenas em situaes especficas.
O kit foi concebido para poder explorar ao mximo os recursos oferecidos pelo
microcontrolador. As diversas aplicaes esto dispostas de forma didtica, com indicao na
serigrafia da placa. Esto disponveis diversos pontos de medida (teste points) que permitem a
visualizao dos sinais de maior relevncia. O gravador/depurador XICD-2 embutido no kit permite,
alm da gravao a depurao (esse processo ser mais explorado ao longo do curso); esse
dispositivo totalmente compatvel com o ICD-2 Microchip e conecta-se diretamente ao MPLAB IDE.
As principais caractersticas do kit XM118 so:
Baseado no PIC18F4550
Fontes de alimentao
o
+5 e +12V
10
Ventoinha
RS232
RS485
Perifricos analgicos
o
Potencimetro
Sensor de temperatura
11
Entrada 0 a 10VDC
Entrada 4 a 20mA
Como vrias aplicaes utilizam os mesmos pinos do microcontrolador o kit possui um srie
de dip switchs para configurao de hardware. Consulte o manual e o esquema eltrico
Exsto Tecnologia
12
3 Orientao Pedaggica
O material didtico (apostila e caderno de experincias) tem como funo guiar o aluno
durante todo o seu aprendizado em Microcontroladores PIC18 utilizando o kit XM118. A apostila
trs os contedos tericos sobre microcontroladores e linguagem C. Ela organiza em captulos, de
forma que possa ser dividida conforme o plano de aula e carga horria do curso.
Temos o propsito de explorar os conceitos abordados e imediatamente prover a integrao
do aluno com o prazer da prtica, tornado seu aprendizado mais interessante e consistente. Todo o
contedo aqui abordado de forma a fomentar a vontade do aluno e aplicar o conhecimento de
forma imediata, permitindo que ele possa criar seus prprios circuitos a partir dos conhecimentos
adquiridos.
O curso e, em especial as experincias prticas, foi pensados com o objetivo de levar o aluno
a adquirir competncias para o trabalho com microcontroladores, a saber:
Compreender, analisar e comparar microcontroladores
Compreender e utilizar circuitos com microcontroladores
Ser capaz de entender e desenvolver programas em linguagem C para microcontroladores
Conhecer os perifricos mais comuns em microcontroladores
Desenvolver projetos usando microcontroladores
O assunto microcontroladores bastante extenso e no se pode fazer um curso com a
pretenso de abord-lo todo. No caso deste curso foi enfocado o microcontrolador PIC18F4550, um
dispositivo de uma famlia avanada com uma srie de recursos. Buscamos explorar a maioria desses
recursos, apesar de alguns no terem sido inclusos e outros serem tratados apenas de forma
introdutria. Foi dada especial ateno ao estudo da linguagem C para microcontroladores.
A diviso das aulas do curso prev um esquema de 2 horas de teoria e 1 hora de prtica para
cada aula. Abaixo apresentada uma proposio de diviso de aulas tericas. Para cada aula
destas existe uma aula prtica na seo Caderno de Experincias (para alguns contedos
conceituais a aula prtica na verdade um questionrio sobre o assunto abordado). Tendo em conta
a extenso do assunto e a variedade de cargas horrias das disciplinas, propomos dois nveis em
que o curso pode ser ministrado: bsico e avanado. O nvel bsico aborda o contedo mnimo que
entendemos como necessrio a um curso de microcontroladores, com uma carga horria limitada
em 30 horas (10 aulas). O nvel avanado foi previsto para uma carga de 60 horas (19 aulas + 1 de
projeto) e permite explorar alguns perifricos a mais, alm de aumentar a oportunidade de exercitar
a linguagem C com mais experincias. Recomendamos que na ltima aula do mdulo avanado seja
proposto um projeto envolvendo diversos conceitos estudados ao longo do curso.
Exsto Tecnologia
13
7
8
9
10
x
x
x
x
11
x
x
x
x
12
13
14
15
x
x
x
x
x
x
x
x
x
16
17
18
19
1 Microcontroladores
1.1
Sistema computacional
1.2
Arquitetura Computacional
2 PIC18, microcontroladores de alto desempenho
2.1
Microcontroladores PIC
2.2
Arquitetura
2.3
Memrias
2.4
Processador
2.5
Portais de I/O
2.6
Conjunto de instrues do PIC18
3 Ferramentas para o PIC18F: MPLAB IDE e Compilador
C18
3.1
O MPLAB IDE
3.2
Simulao em C
3.3
O compilador C18
3.4
Depurao em C
2.7
Oscilador
2.8
Caractersticas Especiais
4.2
Diretivas
4 Linguagem C para microcontroladores
4.1
Introduo a linguagem C
4.3
Tipos de dados
4.4.1
Atribuio
4.4.2
Deciso
4.4.4
Repetio
4.5
Funes
4.6
Interrupes
5 Aplicaes
5.1
Display de 7 segmentos
5.2
Buzzer
5.3
Teclado Matricial
5.4
Display de cristal lquido
6 Perifricos
6.2
Contadores e Temporizadores
6.4
Conversor Analgico-Digital
6.5.1
Modo captura
6.5.2
Modo comparao
6.5.3
Modo PWM
6.6
USART
6.7.1
SPI
6.7.2
I2C
Mdulo XMM01 e expansor de I/O
Tema
Base conceitual
Hardware do microcontrolador
Assembly do PIC18
Ferramentas de
desenvolvimento
Caractersticas especiais
Fundamentos da linguagem
Funes
Interrupes
Interface Homem-Mquina
Temporizados e contadores
Portas de comunicao
Interface Industrial
Algumas observaes:
1. Para instituies que possuem cursos de linguagem C ANSI anterior ao de
microcontroladores as aulas 6, 7, 8 e 9 podem ser resumidas em 1 ou 2 aulas, enfocando
apenas a parte prtica.
Exsto Tecnologia
14
Exsto Tecnologia
15
Curso de
Microcontroladores
PIC18
Exsto Tecnologia
16
A Um Poeta
Olavo Bilac
Longe do estril turbilho da rua,
Beneditino, escreve! No aconchego
Do claustro, na pacincia e no sossego,
Trabalha, e teima, e lima, e sofre, e sua!
Exsto Tecnologia
17
18
Exsto Tecnologia
19
1 Microcontroladores
O objetivo deste curso tratar dos microcontroladores da linha PIC18Xxxx, mais
especificamente do PIC18F4550. Existem diversos textos que tambm tratam desse assunto.
Contudo, existe uma carncia de informaes sobre o que vem a ser um microcontrolador, seus
princpios de funcionamento, as partes comuns a todos os microcontroladores, dentre outras coisas.
Mesmos os manuais dos componentes admitem que o leitor j possua um conhecimento prvio do
assunto. Para suprir essa carncia, a primeira unidade desse material tratar de sistemas
computacionais e microcontroladores de forma genrica. importante este embasamento terico
no somente para garantir um melhor aproveitamento no estudo do PIC 18F4550 como tambm
para tornar o leitor apto a entender o funcionamento de outros microcontroladores, tanto da linha
PIC como de outros fabricantes. Esses conhecimentos tambm so importantes na escolha do
microcontrolador a ser utilizado em um projeto, pois permite estabelecer as bases conceituais para a
comparao de suas caractersticas.
20
no caso do programa so as instrues) que podem ser organizados de diversas formas diferentes,
obtendo-se diferentes resultados.
Como exemplo de sistema computacional, o primeiro que nos vem em mente o
computador pessoal (PC), hoje to difundido. Contudo, existem vrios equipamentos, to ou mais
comuns que os PCs, que so sistemas computacionais. Por exemplo, os vdeos-game, os mini-games,
as calculadoras, palm-tops, etc. Alm disso, temos os microcontroladores, que so o objetivo desse
nosso estudo, que esto presentes nas mais diversas aplicaes, de eletrodomsticos a plantas
industriais, de alarmes a equipamentos mdicos.
A estrutura bsica de um sistema computacional como a apresentada no diagrama em
blocos abaixo.
Memria
Dados
Programa
Controle
Barramento de
Dados
(CPU)
Dispositivos de
Entrada e sada e
perifricos
Mundo
Externo
Memrias
Memrias so dispositivos que armazenam informaes. No caso de um sistema
computacional, essa informao, assim como a memria, pode ser dividida em dois tipos: programa
e dados.
Programa a seqncia de instrues que ao CPU deve seguir para desempenhar a funo a
que se destina a aplicao. Quando se trata de um programa executado por um microcontrolador
so usados tambm os termos firmware e software embarcado (embedded software). J dados so
variveis que a CPU usa durante a execuo do programa.
Exsto Tecnologia
21
Existem tambm Registros (bytes de memria) com funes especiais que trabalham junto
ao processador (CPU). Em alguns casos esses registros esto dentro do prprio processador e em
outros eles so mapeados juntamente com a memria de dados.
1.1.1.1
Memria de programa
Sua funo armazenar o software (programa) a ser executado no sistema. Tambm
utilizada para guardar tabelas de constantes. Dentre os vrios endereos de memria de programa
existem alguns com finalidade especfica, chamados vetores. So endereos para onde o programa
desvia quando ocorrem determinados eventos. Assim, sempre existir um vetor de reset, que onde
o programa comea (ou recomea) quando o sistema inicializado (ou resetado). H tambm as
interrupes, das quais trataremos mais adiante, e que causam desvios no fluxo do programa
quando ocorrem determinados eventos. Os endereos associados s interrupes so chamados de
vetores de interrupo. Podemos encontrar sistemas onde, independentes da causa da interrupo,
h apenas um vetor para onde o programa desvia e sistemas onde cada fonte ou tipo de interrupo
possui um vetor.
De uma forma geral, a memria de programa uma memria no voltil. Isto quer dizer que
o programa no perdido quando se retira a alimentao do sistema; se no fosse assim, o sistema
teria que ser programado a cada vez que fosse colocado em funcionamento.
As diferentes tecnologias usadas para implementao da memria de programa dos
microcontroladores so:
Flash: uma memria eletricamente apagvel (EEPROM) com tempos de acesso para
leitura rpido. Oferece uma grande flexibilidade, pois geralmente possvel reprogramar
um equipamento sem retirar o microcontrolador da placa (gravao in-circuit). Alm
disso, alguns modelos permitem que o microcontrolador altere sua prpria memria de
programa.
22
microcontroladores tendem a ser todos com memria Flash, mas ainda existem alguns componentes
sendo fabricados com os demais tipos de memria.
Alguns microcontroladores apresentam a possibilidade de expanso de memria, isto ,
permitem acrescentar mais componentes de memria externamente; outros no.
A quantidade de memria interna uma das principais diferenas entre microcontroladores
de uma mesma linha, e tem um impacto significativo no preo dos componentes. Esse um dos
motivos porque se deve otimizar os programas para que tenham o menor tamanho possvel, ou seja,
ocupem a menor quantidade de memria possvel.
1.1.1.2
Memria de Dados
a memria onde so armazenados os dados a serem processados pelo computador (as
variveis dos programas e outras informaes.). Como esses dados so constantemente alterados, a
memria utilizada para armazen-los do tipo RAM, que pode ser reescrita indefinidamente. Como
se trata de uma memria voltil, quando a alimentao cortada esses dados so perdidos.
Alguns microcontroladores disponibilizam tambm memrias EEPROM para armazenar
dados que no devem ser perdidos com a falta de energia.
Da mesma forma que a memria de programa, os microcontroladores j possuem
internamente alguma quantidade de memria RAM de dados. Aqui tambm alguns permitem
expanso de memria e outros no. A quantidade de RAM tambm varia de componente para
componente.
1.1.2
deles que um sistema computacional adquire dados externos e aciona processos. So comumente
chamados de dispositivos de I/O (Input/Output Entrada/Sada), portais de I/O (no ingls, ports) ou
simplesmente portais. Para entender seu funcionamento antes devemos entender como funcionam
os barramentos.
As vrias partes de um sistema computacional (CPU, memrias, dispositivos de I/O) so
ligadas entre si atravs de barramentos (tambm chamados via ou, em ingls, bus), que so ligaes
fsicas de comunicao paralela entre os componentes. Existe um barramento de dados, ao qual
todos os dispositivos esto ligados e por onde trocam informaes. Todos os dispositivos ligados ao
barramento de dados so lidos (colocam dados no barramento) ou escritos (recebem os dados do
barramento) pela CPU, que controla todo o processo. Assim temos vrias sadas e entradas ligadas
aos mesmos pontos. Esse sistema no entra em conflito porque somente um dispositivo acessado
Exsto Tecnologia
23
por vez. Enquanto um dispositivo acessado (lido ou escrito) os demais ficam em alta impedncia, se
so sada, ou ignoram os dados do barramento, se so entrada. Dessa forma, surge a necessidade de
outro barramento, o barramento de endereos, que permite ao processador enderear, ou seja,
indicar qual dispositivo ser acessado. Alm desse, h tambm um barramento de controle, que
indica basicamente se o acesso de leitura ou escrita, pois muitas vezes um mesmo endereo de
memria ou dispositivo de I/O pode ser lido ou escrito. O barramento de controle tambm serve
para indicar se est sendo acessado um endereo de memria ou um dispositivo de entrada e sada,
j que utilizam o mesmo barramento de endereo.
O tamanho de um barramento, que seu nmero de bits, deve ser considerado com
ateno. O tamanho do barramento de dados limita o tamanho bsico de dados que trafegam pelo
sistema e so processados pela CPU. Por exemplo, ao dizer que um sistema de 8 bits podemos
concluir que ele faz operaes matemticas envolvendo operadores de 8 bits. Por isso comum
classificar os sistemas computacionais pelo tamanho de seu barramento. H hoje microcontroladores
de 8, 16 e 32 bits.
J o tamanho do barramento de endereos nos informa qual a quantidade mxima de
endereos (de memria ou dispositivos de I/O ) pode ser acessados. A capacidade de memria de
2n endereos, sendo n o nmero de bits do barramento de endereos. Exemplificando, um
barramento de endereo de 10 bits capaz de enderear 210 = 1024 endereos.
Conforme exposto acima, os dispositivos de entrada devem permitir colocar sua sada ligada
ao barramento de dados em alta impedncia. Para tanto, so tradicionalmente utilizados buffers com
sada tri-state para essa funo.
Para a implementao dos dispositivos de sada so utilizados latches, pois permitem o
carregamento dos dados somente quando so acionados.
A seleo dos dispositivos de I/O a partir do barramento de endereos feita por
decodificadores.
Exemplo 1.1
A figura abaixo mostra um exemplo de utilizao de buffers e latches como portais de
entrada e sada, respectivamente.
Ambos os portais esto ligados ao barramento de dados. Cada portal possui um
decodificador (DEC), que apresenta nvel alto na sada quando o valor do barramento de endereos
o endereo do portal. Os sinais RD (read ler), WR (write escrever) e IORQ (I/O request requisio
de I/O) constituem o barramento de controle.
Exsto Tecnologia
24
Para realizar uma operao de escrita do portal , o processador inicialmente coloca os dados
a serem escritos no barramento de dados e o endereo do portal no barramento de endereo. Ento
so acionados os sinais WR e IORQ. Nesse instante temos 1 nas trs entradas da porta AND que
aciona o terminal E do latch, que faz com ele carregue os dados presentes no barramento na sada.
Para a operao de leitura, o endereo do portal colocado no barramento de endereos. Em
seguida, os sinais IORQ e RD so acionados. Assim temos 1 no terminal de habilitao de sada do
buffer e o valor em sua entrada transferido para o barramento de dados, podendo ser armazenado
pela CPU.
Exsto Tecnologia
25
O latch de sada chamado Data Latch. O registro de direo de dados o TRIS Latch. Se
o valor armazenado no latch TRIS for 1 o pino est configurado como entrada: os transistores de
sada estaro cortados independente do valor na sada do latch de dados. Quando for realizada uma
operao de leitura do portal (acionando o sinal RD PORT) o nvel lgico presente no pino do
microcontrolador armazenado em um latch de entrada e passado ao barramento de dados (Data
Bus) atravs de um buffer tri-state. No restante do tempo a sada desse buffer fica em alta
impedncia. Se o valor armazenado no latch TRIS for 0, o driver de sada est ativo, forando o pino
ao nvel lgico correspondente ao armazenado no latch de dado. Qualquer dado escrito no latch de
dados imediatamente transferido para o terminal do microcontrolador.
Caso seja feita uma operao de escrita em um terminal configurado como entrada, o dado
escrito ser armazenado no latch de dados, mas no ser transferido para o terminal, pois o driver
est desativado. Por outro lado, se for realizada uma operao de leitura em um terminal
configurado como sada, o valor lido ser o presente o terminal, que o mesmo escrito no latch de
dados.
Todo esse processo, contudo, ocorre de forma automtica e transparente para o
programador, bastando que este defina a direo de cada pino.
Exsto Tecnologia
26
1.1.3
Perifricos
Alm dos portais de I/O e as memrias, podemos ter muitos outros tipos de dispositivos
ligados ao barramento de dados. Esses dispositivos nada mais so do que circuitos destinados a
realizar funes especiais, teis na aplicao a que se destina o sistema computacional. Esses
dispositivos perifricos so particularmente importantes nos microcontroladores, que os tem uma
grande variedade.
Como perifricos mais comuns podemos citar os temporizadores e contadores (Timers), os
mdulos de comunicao serial, conversores A/D e D/A, mdulos de CCP (Captura, comparao e
PWM), drivers de LCD, comparadores analgicos, etc.
O modo de acesso aos perifricos semelhante ao de acesso aos portais de I/O. Eles muitas
vezes possuem vrios registros de parmetros que podem ser configurados, e um ou mais registros
de entrada e sada de dados.
1.1.4
CPU
A CPU (Central Processing Unit Unidade Central de Processamento) ou processador parte
principal de um sistema computacional. comum se referir CPU dos microcontroladores como core
(ncleo). Sua funo executar as instrues do programa e processar dados. Para tanto ela controla
todas as demais partes do sistema e envia ou recebe dados dessas partes. Ela tambm capaz de
interpretar e colocar em execuo as instrues que compe o programa e realizar operaes lgicas
e aritmticas.
Genericamente um processador organizado conforme o diagrama em blocos abaixo.
Exsto Tecnologia
27
Exsto Tecnologia
28
Esse bloco composto por um decodificador e um contador. Tal decodificador pode ser visto
como um livro de receitas culinrias. No livro, cada pgina contm uma receita e dentro de cada
receita h os passos para sua execuo. De modo anlogo, cada instruo do processador como o
endereo de uma pgina onde est a seqncias de acionamento dos sinais de controles (internos
e externos ao processador) que permitem a execuo da instruo. O contador responsvel por
fazer com que os passos para a execuo de uma instruo sejam executados em seqncia. Cada
modelo de processador possui um conjunto, ou set, de instrues que pode executar.
O barramento de controle interno (Internal Control) permite ao decodificador de instrues
controlar os blocos internos do processador, enquanto o barramento de controle externo (External
Control) j foi discutido e tem a funo de indicar se o acesso de leitura ou escrita, se em
memria ou dispositivos de I/O.
Para que o decodificador de instrues possa executar uma instruo necessrio que a
mesma seja lida da memria de programa e levada at ele. O programa armazenado na memria
uma seqncia de instrues. Podemos ento supor que para enderear corretamente essas
instrues deveria haver um contador. Ele existe e chamado Contador de Programa ou PC
(Program Counter). A cada instruo iniciada o PC incrementado. Portanto ele aponta a prxima
instruo, isto , contm o endereo da prxima instruo a ser executada. A sada desses contador
ligada a um registro (Program Addressing) que carregado ao final de cada instruo e sua sada o
barramento de endereos da memria de programa.
Quando a CPU resetada, o PC automaticamente carregado com o valor do vetor de reset.
Geralmente o vetor de reset o endereo zero da memria, mas nem todos os sistemas trabalham
assim. Durante a execuo do programa, um valor pode ser carregado no PC. Isso ocorre para desviar
o fluxo do programa. Existem instrues que realizam essa alterao de fluxo, que pode ser de dois
tipos: desvio ou chamada.
Quando ocorre um desvio o contedo do PC alterado para que ele passe a executar o
programa a partir de outro ponto. No nosso sistema genrico isso feito simplesmente carregando
um valor proveniente do barramento de dados.
Na execuo de uma chamada o fluxo do programa tambm desviado para um
determinado ponto para executar um trecho do programa, mas nesse caso ele deve retornar ao
ponto do programa onde ocorreu o desvio (mais precisamente primeira instruo aps a instruo
de chamada). Isso permite executar uma sub-rotina, conceito que ser discutido quando tratarmos
do software.
Exsto Tecnologia
29
Fica claro ento que em uma chamada o endereo de retorno deve ser armazenado em
algum lugar, caso contrrio no seria possvel retornar ao ponto onde a chamada ocorreu. Esse lugar
chamado de pilha (stack). O nome pilha se deve a seu funcionamento, que semelhante a uma
pilha de pratos: como pode haver vrias chamadas consecutivas sem que haja retorno, os endereos
de retorno so armazenados uns sobre os outros. Quando ocorre uma instruo de retorno (que
o que faz o programa retornar da chamada), o programa volta para o ltimo endereo guardado, e
assim sucessivamente at que a pilha esteja vazia. A pilha ento uma poro de memria onde
podem ser armazenados os endereos de retorno. Em alguns sistemas possvel guardar outros
tipos de dados na pilha, o que no ocorre com os microcontroladores PIC. Existem sistemas onde
essa poro de memria implementada no processador e outros onde parte da memria de
dados. Em ambos os casos surge a necessidade de se conhecer qual o topo da pilha, ou seja, qual
a prxima posio para se armazenar um endereo de retorno. Para isso existe um registro (na
verdade um contador) chamado ponteiro da pilha (Stack Pointer) que aponta o topo. Esse registro
incrementado cada vez que um novo endereo de retorno armazenado na pilha e decrementado
quando ocorre um retorno.
De uma forma geral, quando a pilha implementada na memria RAM, temos acesso a ela e
ao registro stack pointer. Nesses casos geralmente podemos determinar em que poro da memria
colocaremos a pilha. J nos sistemas onde a pilha implementada separadamente, geralmente no
se tem acesso nem ao contedo da pilha nem ao stack pointer.
Voltaremos a tratar de chamadas e desvios em outro momento do curso.
Todo esse processo estudado tem por objetivo gerar o endereo de memria de programa
de onde ser lido uma instruo a ser executada. Uma vez determinado o endereo, seu contedo
lido e armazenado em um registro chamado registro de instruo (Instruction Register). Desse
registro, parte da instruo vai para o decodificador de instrues e parte pode ir para a ALU e/ou
parte para o registro de endereamento de dados (Data Addressing). Para entender o porque disso,
devemos ter em mente que uma instruo nada mais que uma palavra binria. Parte dela, que
efetivamente a instruo, indica ao decodificador de instrues qual a seqncia de aes deve ser
executada (qual a pgina do decodificador de instrues). O restante constitui os operandos da
instruo, ou seja, os dados a serem processados. Esses dados podem ser constantes ou endereos
de variveis na memria RAM. Conforme sua natureza e a instruo a ser executada eles tem um
destino ou outro.
A unidade lgico-aritmtica ou ALU (Aritmetic and Lgic Unit) o circuito responsvel pelos
clculos em um processador. Como prprio nome diz, ela responsvel pela realizao de operaes
Exsto Tecnologia
30
Exsto Tecnologia
31
ser incrementado, decrementado ou participar que qualquer operao lgico-aritmtica. Sua funo
semelhante a dos ponteiros em linguagens de alto nvel.
Por fim, apesar de no serem considerado parte integrante da CPU, necessrio comentar
alguma coisa sobre os sistemas de temporizao e reset.
Todo o sistema computacional trabalha sincronizado com um mesmo sinal de clock. Devemos
lembrar que esse clock o que faz o decodificador de instrues passar de uma instruo para a
outra, e tudo o mais deve estar sincronizado com ele, seno haveria o caos. Para gerar esse sinal de
clock necessrio um oscilador. Nos microcontroladores esse oscilador j faz parte do componente e
pode ser de vrios tipos, como ser tratado oportunamente.
Independente da forma como o clock gerado, esse sinal aplicado a CPU e aos perifricos.
comum que a freqncia do clock dos perifricos seja menor que a da CPU. Para tanto so
utilizados divisores de freqncia.
A freqncia de clock diretamente proporcional a velocidade com que a CPU executa as
instrues. Os microcontroladores geralmente tm uma faixa de freqncia de trabalho bem ampla,
podendo ir de alguns Hertz a dezenas e at centenas de Mega-Hertz. importante lembrar que
quanto maior a freqncia de trabalho, maior o consumo do sistema. Para casos em que o
consumo crtico, como em equipamentos portteis alimentados a bateria, existem vrias formas de
reduzir este consumo, dependendo do microcontrolador utilizado. So os chamados modos de baixo
consumo, que podem reduzir o clock da CPU e/ou dos perifricos ou mesmo deslig-los. Cada
microcontrolador apresenta diferentes modos de baixo consumo.
Outro ponto importante o reset. Alm do reset que ocorre quando o sistema ligado,
chamado de Power-on reset, os microcontroladores apresentam vrias outras fontes de reset. Esses
resets so protees do sistema. Assim, o microcontrolador pode ser resetado automaticamente se
houver uma queda de tenso, se o programa travar, se for acessado um endereo invlido de
memria de programa, se ocorrer um estouro da pilha, e em outras situaes, dependendo do
modelo de microcontrolador.
32
de programas esto agrupadas em um mesmo bloco, sendo acessadas pelos mesmos barramentos
de dados e endereos.
1.2.1
Arquitetura von-Neumann
Na arquitetura von-Neumann, as memrias tanto de dados quanto de programa, so
acessadas usando-se o mesmo barramento de dados; os portais de I/O tambm fazem uso do
barramento de dados. Vale lembrar aqui que uma instruo como uma operao matemtica, isto
, composta de operadores, que indicam o que ser feito, e operandos, que so os parmetros
envolvidos na operao. Desta forma, o processo de execuo de cada instruo dividido em dois
momentos: a leitura da instruo e dos operandos (fetch) e a execuo da instruo propriamente
dita. Nota-se que dessa forma o processador est parte do tempo ocupado com a leitura da memria
de programa e, conseqentemente no fica executando o firmware o tempo todo. Outra
caracterstica da arquitetura von-Neumann que, visto que os operandos das instrues so
geralmente do mesmo tamanho do barramento de dados, quanto mais complexa a instruo maior
ser a quantidade de endereos ocupados por ela na memria. Por outro lado, como a complexidade
da instruo no tem limite a no ser o espao ocupado, podemos ter um set de instrues to
complexo quanto se queira.
Do exposto acima, podemos concluir que arquitetura von-Neumann consume muito tempo
de processamento com a leitura da instruo e dos operandos. Conclui-se tambm que instrues
diferentes ocupam quantidades diferentes de memria e so executadas em tempos diferentes.
Memria
Dados
Programa
CPU
Barramento
de Dados
I/O
Arquitetura von-Neumann
Devido inexistncia de limitaes a complexidade das instrues, os sistemas de
arquitetura von-Neumann geralmente tm conjuntos de instrues complexos, o que equivale a
dizer que possuem um grande nmero de instrues e cada instruo realiza uma grande seqncia
de aes (instrues complexas). Processadores desse tipo so chamados CISC (Complex Instruction
Set CPU CPU com Set de Instrues Complexo).
Exsto Tecnologia
33
1.2.2
Arquitetura Harvard
J a arquitetura chamada de arquitetura Harvard, que utilizada nos microcontroladores
PIC, tem como principal caracterstica acessar a memria de dados separadamente da memria de
programa.
A principal vantagem dessa arquitetura a leitura de instrues e de alguns tipos de
operandos pode ser feita ao mesmo tempo em que a execuo das instrues. Isso significa que o
sistema fica todo o tempo executando instrues, o que acarreta um significativo ganho de
velocidade. Enquanto uma instruo est sendo executada, a seguinte est sendo lida. Esse processo
conhecido como pipelining (canalizao) e ilustrado pela figura a seguir.
Pipeline
Outro fato importante que o barramento de programa no necessariamente tem o mesmo
tamanho do barramento de dados. Dessa forma, em uma nica palavra da memria de programa
pode conter operando e operadores, o que nos permite carregar toda a instruo em um nico ciclo
de leitura da memria.
No caso especfico dos microcontroladores PIC da famlia 16Xxxx, o processador foi projetado
para que cada instruo ocupe um endereo de memria e seja executada em um ciclo de mquina
(que leva 4 perodos de clock para ocorrer), com exceo das instrues de chamada e desvio, que
so executadas em dois ciclos. Dessa forma, tem-se um controle do tamanho e, principalmente, do
tempo de execuo do programa simplesmente contando o numero de instrues.
Pode-se notar ento que os tempos de execuo e de leitura esto atrelados e so os
menores possveis. Isso acarreta em as instrues no poderem executar uma grande seqncia de
aes, ou seja, no existem instrues complexas. Por isso, os PICs so considerados processadores
RISC (Reduced Instruction Set CPU CPU com Set de Instrues Reduzido). O nmero de instrues
reduzido, o que no significa que no se possa executar programas complexos, mas sim que
seqncias complexas de aes devem ser construdas por seqncias de instrues bsicas.
Exsto Tecnologia
34
Memria
de
Programa
Barramento de
Programa
CPU
Memria
de
Dados
Barramento de
Dados
I/O
Arquitetura Harvard
Para exemplificar, os PIC 18F4550 tem barramento de dados de 8 bits, barramento de
instruo de 16 bits e apenas 83 instrues. Essa organizao pode ser observada na figura acima.
1.2.3
aplicaes.
Os microcontroladores so sistemas computacionais completos em um nico chip. Alm do
processador, das memrias e dispositivos de I/O, os microcontroladores geralmente possuem vrios
tipos de perifricos. Quando se utiliza microcontroladores possvel construir circuitos de controle
com muito poucos componentes, por que o microcontrolador j tem quase todo o necessrio
internamente. Isso implica em reduo de custos e tamanho, menor consumo, facilidade de
desenvolvimento, dentre outras vantagens, e por isso que se utiliza cada vez mais
microcontroladores para agregar inteligncia a diversos produtos. Os microcontroladores, porm,
so destinados a aplicaes no muito complexas, e tem uma capacidade de processamento
limitada. Alm disso, j possuem uma estrutura preestabelecida, no sendo possvel alterar sua
configurao. Atualmente existem microcontroladores de 8, 16 e 32 bits. A maior fatia desse
mercado a dos microcontroladores de 8 bits. H, porm, um grande crescimento de aplicaes em
32 bits. Os microcontroladores de 16 bits esto restritos a aplicaes especiais, como o mercado
automotivo e tendem a ter seu espao reduzido pela fcil de acesso componentes de 32 bits.
Em sistemas construdos com microprocessadores, por sua vez, necessrio desenvolver
todo o hardware. Dessa forma existe um maior trabalho de desenvolvimento, porm pode-se
construir qualquer configurao que se queira. So sistemas com custo maior, porm com muito
mais memria, conseqentemente podem executar programas mais complexos. Pode-se dispor de
muito mais portais de I/O e de quaisquer perifricos necessrios. Alm disso, os processadores
podem operar em com freqncias de clock mais altas, portanto so sistemas mais velozes. Sistemas
Exsto Tecnologia
35
Exsto Tecnologia
36
PIC10
PIC12
PIC14
PIC16
PIC17
PIC18
PIC24F/PIC24H
dsPIC30/dsPIC33
PIC32
Dessas, as mais usadas e com maior nmero de componentes so as PIC12, PIC16 e PIC18. As
famlias PIC14 e PIC17 foram famlias intermedirias na evoluo da linha. A famlia PIC24F/PIC24H
composta por componentes de 16 bits e a mais recente. J a famlia dsPIC30/dsPIC33 trs os
controladores hbridos de 16 bits. No final de 2007 foi lanada tambm a famlia PIC32, composta por
componentes de 32 bits. Quanto ao tipo de memria, os componentes mais antigos (que ainda
continuam sendo fabricados) tm memria do tipo OTP e EPROM. J os mais novos utilizam somente
flash. A tendncia do mercado trabalhar somente com flash, principalmente nas etapas de ensino e
desenvolvimento. O tipo de memria flash pode ser identificado por uma letra F no nome do
componente (por exemplo PIC12F679, PIC16F628, PIC18F4550).
Dentro da famlia PIC18 h vrias sub-famlias, cada uma composta de vrios componentes.
Os componentes diferem entre si em:
37
Perifricos
O quesito perifricos uma das principais caractersticas dos PIC. Dentre os disponveis nas
vrias famlias, podemos citar: timers, conversores A/D, comparadores analgicos, mdulos USART
(comunicao serial RS232), Mdulos MSSP (I2C e SPI master), mdulos CCP (Captura, comparao e
PWM), etc...
A linha PIC18 composta por microcontroladores com core de 8 bits de alto desempenho.
Buscou-se manter certa compatibilidade com a linha PIC16, o que pode ser observado no
funcionamento de diversos perifricos e no conjunto de instrues. Contudo, muitas mudanas se
fizeram necessrias, principalmente na arquitetura e no mapeamento de memria, para superar
certas limitaes apresentadas pela famlia PIC16.
A famlia PIC16 ainda amplamente utilizada. Contudo, ao estudar uma famlia mais
complexa, como a PIC18, acredita-se que o aluno se tornar apto tambm a trabalhar com
microcontroladores mais simples, como o PIC16 ou PIC12.
Nosso enfoque nesse curso ser no PIC18F4550 e na famlia PIC18. Os assuntos relativos ao
hardware sero apresentados de forma generalista para a famlia PIC18 e depois tratados no que
especfico para o PIC18F4550. Dessa maneira pretende-se fazer um estudo no de um componente
apenas, mas de toda a famlia.
2.1.1
A Microchip
O fabricante dos microcontroladores PIC a empresa americana Microchip. Atualmente ela
Exsto Tecnologia
38
2.2 Arquitetura
A figura abaixo apresenta o diagrama em blocos do PIC18F4550. Os demais componentes da
famlia PIC18 apresentam um diagrama muito semelhante, havendo diferena apenas nos nmero de
portais e nos perifricos.
39
40
Caracterstica
Freqncia de Operao
Memria de programa
Memria de dados RAM
Memria de dados EEPROM
Fontes de interrupo
Terminais de I/O
Temporizadores/Contadores
CCP
ECCP 1
Comunicao Serial
Comunicao USB
Comunicao Paralela
Conversor analgico para digital
Detector de tenso programvel
Conjunto de instrues
Notas:
PIC18F4550
DC a 48MHz
32768 bytes
2048 bytes
256 bytes
20
36
4
1
1
MSSP
EUSART 2
Sim
SPP3
10 bits, 13 canais
1
75 convencionais + 8
do modo entendido
line Package Encapsulamento plstico em linha dupla). Esses pinos podem ser divididos em
terminais de alimentao, de reset, de conexo com o oscilador e os terminais de portais e
perifricos. Como se trata de um componente com diversas caractersticas e um pequeno nmero de
terminais, muitos terminais possuem mais de uma funo. Dessa forma, temos terminais de entrada
e sada dos portais multiplexados com terminais dos perifricos, terminais do oscilador e terminais
de reset. De uma forma geral, quando usamos um determinado perifrico, o terminal associado a
ele serve ao perifrico e sua funo de entrada e sada fica desativada. Quando o perifrico no
utilizado, o terminal trabalha como I/O.
Os portais do microcontrolador podem variar de funes de modelo para modelo, mas
geralmente algumas funcionalidades se repetem sempre para pinos com o mesmo nome. Consulte o
manual do microcontrolador para saber quais as funes associadas a cada pino.
Os driver de entrada podem ser TTL ou Schmitt Trigger (ST), podendo um mesmo pino ter
drivers diferentes para funes diferentes.. As sadas so do tipo CMOS, embora exista um terminal
(RA4) com sada com dreno aberto (OD open drain). Esse terminal, para ser usado como sada,
Exsto Tecnologia
41
precisa de um resistor de pull-up. H tambm os drivers especiais para osciladores (XTAL). Alm,
disso, alguns perifricos possuem entradas analgicas (AN).
A tabela que segue apresenta as caractersticas eltricas desses drivers para o
microcontrolador operando alimentado por 5V.
Parmetro
Tipo de buffer
Min
Max
VIL
TTL
Vss
0,8
Schmitt Trigger
Vss
1,0
VIH
TTL
2,0
VDD
Schmitt Trigger
4,0
VDD
VOL
CMOS
0,6
VOH
CMOS
4,3
Caractersticas eltricas de entrada e sada
Os terminais do oscilador podem ser utilizados como I/O, dependendo do modo de oscilador
utilizado, conforme estudado. O terminal de reset (MCLR) pode ser configurado como entrada de um
portal no momento da gravao.
Quanto capacidade de corrente, cada terminal configurado como sada capaz de fornecer
ou drenar 25mA. Contudo, a corrente (fornecida ou drenada) total de todos os termiais juntos no
pode ultrapassar 200mA.
Pinagem do PIC18F4550
Exsto Tecnologia
42
2.3 Memrias
Por ser um microcontrolador de arquitetura Harvard, o PIC18 tem suas memrias de
programa e dados mapeadas separadamente.
2.3.1
Memria de programa
A arquitetura do PIC18 trs um PC (Program Counter Contador de programa) de 21 bits,
Exsto Tecnologia
43
Como ser tratado no momento oportuno, existem dois vetores de interrupo. O vetor de
maior prioridade o 0008h o de menor o 0018h.
A figura a seguir apresenta o mapa de memria de programa do PIC18F4550. Leituras
realizadas em endereos no implementados de memria retornam 0.
0000h
Vetor de reset
0008h
0018h
Uso geral
7FFFh
8000h
No implementado
1FFFFFh
Mapa e memria de programa
2.3.1.1
ser manipulado a partir da memria de dados atravs de PCLATU, PCLATH e diretamente atravs de
PCL. A figura apresenta a como esses registros interagem.
Exsto Tecnologia
44
Estrutura do PC
De forma similar
ilar ao que acontece no PIC16, toda vez que uma operao de escrita
realizada em PCL os valores de PCLATH e PCLATU so carregados em PCH e PCU, respectivamente,
causando um desvio imediato. A novidade que uma leitura do registro PCL faz com que os valores
valo
de PCH e PCU sejam transmitidos para o PCLATH e PCLATU, respectivamente. Essa funcionalidade
muito interessante, principalmente na implementao de RTOS (Real
(Real Time Operation System
Sistema Operacional de Tempo Real). O bit 0 de PCL no pode ser escrito,
escrito, ficando sempre em 0.
A pilha do PIC18 um espao de memria de 31 posies de 21 bits. Ela no est mapeada
nem em RAM nem em FLASH. Trata-se
Trata se de uma pilha circular, ou seja, o 32 endereo gravado
sobrescreve o primeiro, caracterizando um overflow da pilha. Se instrues de retorno forem dadas
quando o primeiro nvel da pilha estiver livre considera-se
considera um underflow da pilha. Pode-se
Pode configurar
o microcontrolador para que esses dois eventos causem reset.
O ponteiro da pilha (Stack
(
Pointer) acessvel
el atravs do registro STKPTR, o que no
acontece na arquitetura PIC16. Nesse registro h tambm bits que sinaliza o estado da pilha. O
ponteiro da pilha contm o endereo do topo da pilha, que recebe o ltimo endereo de retorno
guardado.
R/C 0
R/C-0
U0
R/W 0
R/W 0
R/W 0
R/W 0
STKOVF
Bit 7
STKUNF
SP4
SP3
SP2
SP1
R/W 0
SP0
Bit 0
STKPTR
STKOVF : indicador
icador de overflow
o
45
pilha, chamado de topo da pilha (TOS Top of Stack). No PIC18 o contedo desse endereo
acessvel atravs dos registros de funo especial TOSU, TOSH e TOSL. possvel ento ler o
contedo do topo da pilha e alter-lo. Alm disso, existem as instrues PUSH e POP. PUSH
incrementa o valor o ponteiro da pilha e carrega o endereo seguinte no TOS. POP decrementa o
ponteiro, descartando endereo contido no TOS. Essas funcionalidades so bastante teis na
implementao de um sistema operacional.
2.3.2
Memria de dados
A memria de dados apresenta alteraes bastante significativas em relao ao PIC16. A
principal diferena est no sistema de paginao. A arquitetura do PIC18 prev 12 bits para
endereamento de memria de dados, o que permite trabalhar com at 4096 endereos de
memria, divididos entre registros de funo especial (SFR Special Function Registers) e registros de
uso geral (GPR General Purpose Registers). As instrues que manipulam dados na memria RAM
(com exceo de MOVFF) fornecem 8 bits para compor esse endereo; os outros quatro so
fornecidos pelo registro de seleo de banco: BSR.
Esse esquema de acesso parece ser o mesmo usado no PIC16, que apresentava diversas
inconvenincias em sua aplicao. H, porm algumas inovaes que facilitam o seu uso. Em
primeiro lugar, existe a instruo MOVFF capaz de mover dados entre dois registros em quaisquer
bancos; isso possvel porque esta uma instruo longa (32 bits) e contm os endereos de 12 bits
dos dois registros acessados. As demais instrues necessitam da seleo de banco para acesso aos
registros. Isso facilitado pela instruo MOVLB, que move um valor constante diretamente para
BSR. Existem ainda instrues especiais para o modo indexado e o banco de acesso, descritos a
seguir.
Aseguir apresentado o mapeamento de memria de dados vlido para o PIC18F4550.
Exsto Tecnologia
46
Banco
BSR
0000
0001
00h
7Fh
80h
FFh
00h
RAM de Acesso
GPR
GPR
FFh
00h
2
0010
GPR
FFh
00h
0011
GPR
FFh
00h
0100
GPR
FFh
00h
0101
GPR
FFh
00h
0110
GPR
FFh
00h
0111
GPR
Banco de Acesso
FFh
00h
8
1000
FFh
00h
1001
FFh
00h
10
1010
FFh
00h
11
1011
No implementado
FFh
00h
12
1100
FFh
00h
13
1101
FFh
00h
14
1110
FFh
00h
No Usado
7Fh
15
1111
80h
SFR
FFh
SFR: Special Function Register Resgistros de Funo Especial
GPR: General Purpose RAM RAM de uso Geral
Exsto Tecnologia
47
2.3.2.1
quem conhece o PIC16 pode parecer que eles esto distribudos em quatro bancos, pela semelhana
na forma de apresentar, mas na verdade esto todos em um nico banco.
2.3.2.2
Banco de acesso
Para agilizar operaes de manipulao de dados entre variveis e os registros de uso
especial foi implementado um sistema de banco de acesso. Trata-se de uma opo que pode ser
informada nas instrues de manipulao de dados que habilita o uso de um sistema alternativo de
acesso a memria. Quando uma instruo usa esse sistema o registro BSR ignorado e visto como
um nico banco de 256 endereos, cujos 128 primeiros endereos so os 128 primeiros do banco
(chamados de RAM de Acesso) enquanto os 128 ltimos so os 128 endereos finais do banco 15
onde esto os registros de funes especiais (SFR). Isso pode ser observado na figura 1.6.
Exsto Tecnologia
48
2.3.2.3
comunicao USB. usando um sistema chamado memria RAM de porta dupla (dual port RAM)
onde tanto o perifrico USB como o core do PIC tem acesso de leitura e escrita para troca de
informaes.
Quando no usada comunicao USB essas bancos podem ser usados como RAM de uso
geral.
2.3.2.4
Modos de endereamento
A arquitetura do PIC18 possui quatro modos de endereamento: Inerente, Literal, Direto e
Indireto.
O Modo Inerente aquele das instrues que no necessitam da indicao do operando. O
operando inerente a instruo (da o nome). Exemplos: CLRWDT, DAW, PUSH.
O Modo Literal aquele onde operando um valor constante (literal). Nesse caso o
operando armazenado como parte da instruo na memria flash. Ex.: MOVLB, ADDLW, GOTO.
No modo Direto os operandos da instruo so dados da memria RAM cujos endereos so
fixos. Esses endereos fazem parte da prpria instruo. Ex.: MOVFF, BSF, ADDWF.
Ao contrrio do modo direto, o modo indireto manipula dados de memria RAM de
endereos variveis. O dado acessado atravs dos registros INDFx e seu endereo apontado pelo
registro FSRx. Existem trs conjuntos de registro FSRx formando trs ponteiros de 16 bits
(FSR0H:FSR0L, FSR1H:FSR1L e FSR2H:FSR2L). Juntamente com cada par FSRx trabalha um registro
INDFx (INDF0, INDF1e INDF2).
2.4 Processador
O processador (ou CPU) do PIC18 executa as instrues e controla todo o hardware do
microntrolador. Ele frequentemente chamado de core, isto , o ncleo do microcontrolador.
O processador necessita para trabalhar de um sinal chamado clock de sistema, que gerado
pelo sistema de oscilador. Refere-se ao perodo do clock de sistema com TSCLK. Cada instruo
executada em 4 ciclos de clock do sistema e esse perodo do ciclo de instruo chamado TCY.
Portando, TCY = 4.TSCLK.
Cada instruo executada pelo oscilador gasta 4 ciclos de clock. Esses quatro ciclos,
chamados ciclos Q, compem um ciclo de instruo. Surge ento um sinal, cuja freqncia da
freqncia do oscilador e chamado de clock de instruo ou clock de perifricos. Ou seja, o tempo
Exsto Tecnologia
49
Ao
Q1
Q2
Q3
Ciclo de processamento
Q4
ALU
A ALU (Arithmetic Logical Unit Unidade Lgico-Aritmtica) do PIC18 capaz de realizar
Exsto Tecnologia
50
U0
U0
R/W x
R/W x
R/W x
R/W x
OV
DC
Bit 7
R/W x
C
Bit 0
STATUS
1 = resultado negativo
0 = resultado positivo
OV : Overflow, indica a ocorrncia de vai 1 do bit 6 para o bit 7, indicando que houve
estouro da capacidade do valor absoluto (7 bits) em operaes sinalizadas.
0 = no houve overflow
51
2.4.2
com capacidade de fazer operaes com operandos de 8 bits, gerando resultados de 16 bits. O PIC18
possui instrues de multiplicao que, ao contrrio do que acontece em alguns processadores, no
so implementadas por operaes bsicas da ALU, mas sim atravs de um hardware especfico. A
principal vantagem disso que as multiplicaes (de 8 por 8 bits) so realizadas em um nico ciclo de
instruo, tornando o microcontrolador muito mais rpido para a execuo de qualquer tipo de
multiplicao. O multiplicador por hardware, juntamente com a maior velocidade de processamento,
permite ao PIC18 implementar algoritmos de processamento de sinal, alm de reduzir a ocupao de
memria de programa para essas operaes.
A instruo MULLW realiza a multiplicao de W por uma constante enquanto MULWF
realizada a multiplicao de W por um endereo de memria RAM. Nos dois casos o resultado (de 16
bits) armazenado no SFRs PROFH e PRODL.
A operao de multiplicao no afeta os flags do registro STATUS.
Exsto Tecnologia
52
Exsto Tecnologia
53
2.7 Oscilador
Como o funcionamento de um sistema computacional baseado numa seqncia de aes,
essas aes devem ser executadas numa certa cadncia. Para obter essa cadncia utilizado um
sinal de sincronismo ou clock.
Exsto Tecnologia
54
HSPLL: Cristal de alta freqncia com PLL (High Speed with Phase Locked Loop)
A famlia PIC18 prev 3 fontes possveis de clock: primrio, secundrio e interno. A fonte
primria pode ser um dos modos de oscilado a cristal, clock externo ou mesmo o oscilador interno. A
fonte secundria um segundo oscilador do circuito, ligado ao Timer 1 (trataremos com mais
detalhes desse oscilador quando o Timer 1 for estudado). A fonte interna a opo de se usar o
oscilador interno. possvel mudar de fonte de clock a qualquer momento durante a execuo do
clock. Isso permite uma srie de possibilidades relacionadas com economia de energia, como ser
tratado oportunamente.
O PIC18F4550 possui um circuito oscilador especial para atender a uma demanda de
freqncia para a comunicao USB. Para o correto funcionamento da porta USB necessrio um
sinal de 48 MHz (para USB de alta velocidade) ou 6MHz (para USB de baixa velocidade). Isso implica
em um sistema de gerao e seleo de clock mais complexo do que o encontrado em outros
Exsto Tecnologia
55
componentes da famlia PIC18. O diagrama em blocos abaixo mostra esse sistema de forma
simplificada.
Oscilador
Primrio
PLL
IDLE Mode
CPU
Oscilador
Secundrio
Perifricos
Oscilador
Interno
A qualquer momento possvel selecionar qual dos osciladores est sendo usado como fonte
de clock para a CPU e perifricos. Existe ainda um PLL associado ao oscilador primrio, que ser
detalhado mais a frente, mas por hora pode ser entendido como um multiplicador de freqncias.
Deve ser notado o detalhe da chave que permite interromper o clock para CPU; essa chave a
atuao do modo IDLE que ser tratado quando forem estudados os modos de baixo cosumo.
2.7.1
Exsto Tecnologia
56
Freqncia do
Cristal
Faixa de
Capacitor C1
4 MHz
27 pF
4 MHz
27 pF
8 MHz
22 pF
20 MHz
15 pF
Seleo de capacitores para oscilador a cristal
Faixa de
Capacitor C2
27 pF
27 pF
22 pF
15 pF
Partida do oscilador
Exsto Tecnologia
57
2.7.2
sincronismo para um circuito de PLL (Phase Locked Loop) que gera em sua sada um sinal com quatro
vezes a freqncia do sinal de referncia.
PLL (Phase Locked Loop) um circuito que permite gerar um sinal de alta freqncia baseado
em um sinal preciso de baixa freqncia. Para entend-lo ser estudado o sistema de PLL
comumente encontrado em microcontroladores PIC18 na figura a seguir.
Comparador
de fase
Oscilador
de
referncia
Filtro
Sinal de
sada
VCO
Divisor
Oscilador RC
Tambm possvel trabalhar com osciladores RC (Resistor/Capacitor). Para isso utilizada a
Exsto Tecnologia
58
59
2.7.4
Oscilador Externo
O modo EC permite que seja aplicado um sinal de clock proveniente de outra parte do
circuito. Isso pode ser til quando j existe algum oscilador ou base de tempo j implementada,
ajudando a reduzir custos. Nesses casos o sinal aplicado ao terminal RA7/OSC1/CLKIN.
A figura 2.5 apresenta dois circuitos osciladores que podem ser utilizados. Um (a) faz uso de
um cristal de ressonncia paralela enquanto o outro (b) usa cristal de ressonncia srie. Na prtica,
mais comum encontrar cristais de ressonncia paralela.
(a)
(b)
Figura 2.7 Circuitos osciladores: (a) cristal paralelo e (b) cristal srie
Tambm pode ser usado como clock um sinal externo nos modos LP, XT e HS, com o
oscilador configurado para a faixa de freqncia mais adequada.
2.7.5
Oscilador Interno
O PIC18F4550 possui um oscilador interno (INTOSC) que pode ser usado em substituio a
qualquer um dos modos de oscilador interno. O oscilador propriamente dito tem freqncia de 8
MHz. Ele possui, porm um ps-escala (divisor de freqncia) que permite escolher entre as
freqncias 8MHz, 4 MHz, 2 MHz, 1MHz, 500 kHz, 250 kHz e 125kHz. Alm dessas freqncias
derivadas do oscilador INTOSC existe outro oscilador chamado de INTRC que gera freqncia de
31kHz. Este oscilador gera clock para algumas temporizaes do sistema, como o watchdog time,
mas tambm pode ser escolhido como fonte de clock. O processo para determinar qual o freqncia
usada ser apresentado mais a frente.
O oscilador de 8MHz calibrado em fbrica. Mesmo assim possvel fazer um ajuste fino de
sua freqncia atravs do registro OSCTUNE. A preciso tpica do oscilador interno de 1%.
2.7.6
a necessidade de cada projeto. Os critrios para escolher o tipo de oscilador a ser usado so:
Exsto Tecnologia
60
Preciso
Estabilidade
Variedade de freqncias
Custo
Osciladores a Cristal
Oscilador
Oscilador
RC
interno
2.7.7
em outros componentes da famlia PIC18. Isso porque ele precisa gerar sinais especficos para o
mdulo USB. O oscilador primrio feito especificamente com a finalidade de gerar o sinal de clock
para a USB. Pode-se optar por usar esse mesmo sinal como clock do sistema ou escolher a fonte
secundria ou interna. A figura a seguir representa o sistema de gerao e seleo de clock do
PIC18F4550.
Exsto Tecnologia
61
Ao escolher o modo de oscilador principal podemos optar por um modo com PLL ou sem PLL.
Ao escolher um modo com PLL temos que ter em mente que esse PLL foi concebido para atender as
necessidades do mdulo USB, portanto o clock gerado para o processador e perifrico torna-se uma
conseqncia do clock para USB. Acompanhe na figura acima como cada modo opera.
Ao selecionando um modo sem PLL (XT, HS, EC, ECIO) o sinal do oscilador principal passa por
um divisor de freqncias, chamado Oscillator Prescaler que permite dividir esse sinal por 2, 3 ou 4,
ou no dividir. Podemos assim obter diferentes freqncias de operao, mesmo atendendo a
necessidade do oscilador para USB. Se no existe interesse em usar a USB, basta escolher esse modo
de trabalho e escolher a opo 1:1.
Exsto Tecnologia
62
Quando optamos por usar um modo com PLL (HSPLL, XTPLL, ECPLL E ECPIO) o sinal do
oscilador principal aplicado a um divisor de freqncia (PLL Prescaler). O objetivo desse divisor
obter um sinal de 4 MHz em sua sada, permitindo que o usurio escolha cristais de freqncias
mltiplas de 4MHz. Fazendo-se a seleo correta do fator de diviso obtemos um sinal de 4 MHz
aplicado ao PLL, cujo divisor por 12, ou seja, aplicando uma entrada de 4 MHz obtemos uma sada
de 96MHz. Esse sinal dividido por 2 para se obter a freqncia de 48MHz necessria a comunicao
USB de alta velocidade. Esse mesmo sinal aplicado a outro divisor (PLL Postscale) que permite
obter uma frao desse sinal para ser usado como sinal de clock pelo processador e perifricos.
Outra fonte de clock disponvel o oscilador secundrio. Ele baseado no oscilador do timer
1, que ser tratado em outro lugar. Por hora basta saber que temos mais essa opo de clock.
Por fim, o bloco oscilador interno tambm est disponvel, funcionando conforme discutido
acima.
A configurao do oscilador ser feita atravs dos chamados bits de configurao do
microcontrolador. Por hora o importante entender o funcionamento do clock.
2.7.8
estabelecidas. O mdulo USB pode operar no modo baixa velocidade ou alta velocidade.
Em baixa velocidade a USB precisa de um sinal de clock de 6MHz. Para obt-lo a nica opo
usar um cristal de 24MHz com Oscillator Postscale de 1:1. Ao ser selecionado o modo de baixa
velocidade o sinal do oscilador primrio ser divido por 4 para obter o sinal necessrio de 6MHz.
Em alta freqncia existe mais flexibilidade. Como o existe um divisor de freqncias na
entrada do PLL, podemos escolher uma srie de valores de cristais, conforme mostrado na tabela
abaixo.
Freqncia do cristal
4 MHz
8 MHz
12 MHz
16 MHz
20 MHz
24 MHz
40 MHz
48 MHz
1:1
1:2
1:3
1:4
1:5
1:6
1:10
1:12
Exsto Tecnologia
63
Com qualquer um destes cristais possvel obter o sinal de 96MHz na sada do PLL, que ser
dividido por 2 para se obter 48MHz, necessrios a USB. Pode-se tambm usar o sinal de sada do PLL
para escolher uma srie de freqncias para o clock do processador, atravs do PLL Postscaler,
conforme apresentado a seguir
PLL postscaler
1:2
1:3
1:4
1:6
2.7.9
48 MHz
32 MHz
24 MHz
16 MHz
U0
U0
R/W 0
R/W 0
R/W 0
R/W 0
INTSRC
Bit 7
TUN4
TUN3
TUN2
TUN1
R/W 0
TUN0
Bit 0
OSCTUNE
Exsto Tecnologia
64
R/W 0
R/W 1
R/W 0
R/W 0
Rx
R0
R/W 0
IDLEN
Bit 7
IRCF2
IRCF1
IRCF0
OSTS
IOFS
SCS1
R/W 0
SCS0
Bit 0
OSCCON
110 = 4 MHz
101 = 2 MHz
100 = 1 MHz
001 = 125MHz
1x = Oscilador interno
00 = Oscilador primrio.
Exsto Tecnologia
65
Combinados com as possibilidades de escolha de fonte de clock possvel utilizar 7 modos diferentes
de consumo.
No modo normal, a CPU do microcontrolador e os perifricos recebem sinal do da fonte de
clock selecionada e o programa executado.
No modo Sleep, os osciladores do microcontrolador so desligados. Nem CPU nem os
perifricos recebem sinal de clock (com exceo do TIMER1, caso tenha seu prprio oscilador ativo).
Nesse modo o consumo de energia mnimo, porm deve-se considerar os atrasos antes do retorno
a execuo normal causados pelo tempo de partida dos osciladores.
No modo Idle os osciladores permanecem em operao e a penas o sinal de clock da CPU
cortado; os perifricos continuam recebendo o sinal da fonte de clock selecionada normalmente.
Nesse caso temos uma reduo de consumo menor que a proporcionada pelo modo Sleep, porm o
processador volta a operar imediatamente ao retornar ao modo normal, j que os osciladores
continuam operando (no a tempo de partida). Outro benefcio do modo Idle que os perifricos
continuam recebendo sinal de clock, podendo causar o retorno ao modo normal por interrupo.
Qualquer uma das 3 fontes de clock pode ser escolhida durante nos modos normal e Idle.
importante lembrar que quanto menor a freqncia de operao, menor o consumo de energia.
Para entrar tanto em modo Idle como em modo Sleep basta executar a instruo SLEEP. O bit
INDLEN do registro OSCON controla qual o modo de baixo consumo selecionado. Para um menor
consumo de energia aes que reduzam o consumo do circuito coerentes com o hardware devem ser
implementadas (como desligar LEDs e cortar a alimentao de algumas partes do circuito.)
Uma vez em modo Sleep ou Idle, trs tipos de eventos podem acordar o microcontrolador,
conforme apresentado a seguir. Acordar o microcontrolador significa reativar o oscilador principal
e continuar a execuo do programa.
Exsto Tecnologia
66
Nvel lgico baixo no pino MCLR, o que faz com que o microcontrolador acorde e reset
Estouro do WatchDog, o que no ocasiona RESET, apenas acorda o microcontrolador.
Nesse caso o microcontrolador no resetado.
A ocorrncia de alguma interrupo habilitada.
importante observar que diversos perifricos podem estar utilizando o sinal do oscilador
principal e, portanto pararo de operar durante o modo Sleep. Interrupes associadas a esses
perifricos no iro ocorrer, portanto no podem acordar o microcontrolador.
Para uma interrupo causar a sada de um modo de baixo consumo ela precisa apenas estar
habilitada, no sendo necessrio a habilitao global tambm. Se a habilitao global no estiver
habilitada, a ocorrncia da interrupo acorda o microcontrolador e o programa segue a partir da
instruo seguinte a instruo SLEEP.
2.8.2
OSCCON
IDLEN
SCS1:SCS0
X
00
X
01
X
1x
1
00
1
01
1
1x
0
X
Sinal de clock
CPU
Perifricos
Sim
Sim
Sim
Sim
Sim
Sim
No
Sim
No
Sim
No
Sim
No
No
Fonte de clock
Principal
Secundria
Oscilador interno
Principal
Secundria
Oscilador interno
Todas desligadas
Reset
Os PIC18 possuem diversas fontes de reset e funcionalidades associadas que visam
67
A forma mais simples de reset atravs do pino MCLR: o microcontrolador reseta quanto um
nvel lgico aplicado a esse pino. No PIC18F4550 pode-se desabilitar a funo de reset do pino
MCLR. Nesse caso ele passa a operar como um pino de entrada do portal E. Isso feito via bit de
configurao.
2.8.3
68
os primeiros 1024 perodos do oscilador, de forma que o programa seja executado somente quando
o oscilador j estiver perfeitamente estabilizado. Essa funcionalidade sempre ativa nos modos de
oscilador a cristal. A figura 2.3 apresenta o comportamento de partida do oscilador.
2.8.6
Quando a tenso cai abaixo dos limites tolerados para o circuito os resultados so imprevisveis. H
situaes nas quais interessante que quando ocorra uma queda dessas o sistema seja resetado.
Nos PIC18 a tenso de limiar para o BOR configurvel. Para o PIC184550 essa tenso pode
ser 2,05V, 2,79V, 4,33V ou 4,59V. Para outros componentes, consulte o manual especfico. O BOR
pode ser habilitado ou desabilitado. Uma condio de queda de tenso s caracterizada se a tenso
cair abaixo do limiar escolhido por mais de 100us.
No PIC18F4550 existe ainda a possibilidade de ter o BOR controlador por software, atravs
do bit SBOREN do registro RCON; nesse caso a faixa de tenso a escolhida na configurao. Quando
o BOR usado recomenda-se que tambm o PWRT esteja ativo.
Na figura a seguir apresentada a forma de operao do BOR em conjunto com o PWRT.
Exsto Tecnologia
69
Causas de reset
As causas de reset podem ser identificadas atravs da de bits do registros RCON e STKPTR.
O registro RCON e seus bits so apresentados abaixo.
R/W 0
IPEN
Bit 7
R/W-1
U0
R/W 1
R1
R1
R/W 0
SBOREN
RI
TO
PD
POR
R/W 0
BOR
Bit 0
RCON
1 = Prioridade Habilitada
SBOREN : Controle de BOR por software (depende dos bits de configurao). Somente no
PIC18F4550.
1 = BOR habilitado
0 = BOR desabilitado
RI : Indicador de execuo de instruo RESET (deve ser setado pelo software aps a
ocorrncia de um BOR)
70
2.8.8
POR: Indicador de POR (deve ser setado por software aps ocorrncia de POR).
o
1 = no ocorreu POR
0 = ocorreu POR
BOR: Indicador de BOR (deve ser setado por software aps ocorrncia de BOR).
o
1 = no ocorreu BOR
0 = ocorreu BOR
Seqncia de inicializao
Como exposto, existem vrios tempos que podem ser aguardados antes que o
microcontrolador saia da condio de reset, isto , comece a executar o programa. Supondo todas as
funcionalidades acima ativas a seqncia a seguinte:
1. o circuito ligado: a tenso de alimentao comea a subir;
2. detectada a subida da tenso: POR;
3. o sistema aguarda o tempo de PWRT (aprox. 65 ms);
4. o oscilador comea a funcionar: 1024 ciclos so contados (OST);
5. o programa comea a rodar.
2.8.9
Watch-Dog Timer
Esse timer de 8 bits, que baseado em um oscilador INTRC, independente do oscilador
principal, gera um reset quando estoura. Ele importante em situaes em que, por qualquer
motivo, o microcontrolador trava. Quando habilitado ele deve ser zerado a intervalos regulares
menores que seu tempo mximo pela instruo CLRWDT. Se o programa para e o Watch-Dog no
zerado, tendo sido habilitada essa funo na gravao, ocorre o reset. O WatchDog do PIC18 pode
ser habilitado ou no na gravao do microcontrolador.
Da mesma maneira possvel definir atravs dos bits de configurao qual o valor da psescala do WatchDog. A ps-escala nada mais que um contador de 16 bits que conta o nmero de
estouros do Watchdog, uma forma de aumentar o tempo at o reset. Tipicamente o WatchDog
estoura a cada 4 ms no PIC18F4550. Se for adotada uma ps-escala de 1:4 significa que um reset
ocorrer a dada 4 estouros do WatchDog, ou seja, a cada 4x4ms = 16ms, se a instruo CLRWDT no
for usada. A execuo da instruo CLRWDT no s zera o WatchDog como tambm a ps-escala,
reiniciando a contagem.
Exsto Tecnologia
71
Ao contrrio do que ocorre com o PIC16, no PIC18 no existe qualquer relao entre o
WatchDog e o Timer0.
Caso o WatchDog no seja habilitado atravs de bits de configurao mesmo assim possvel
ativ-lo escrevendo 1 do bit SWDTEN do registro WDTCON. Tambm possvel desabilitar o
WatchDog somente escrevendo 0 no bit SWDTEN (desde que o WatchDog no tenha sido habilitado
nos bits de configurao).
Se o microcontrolador for colado em modo Sleep ou Idle o WatchDog continua a
incrementar, uma vez que sua base de tempo o oscilador INTRC. Contudo, seu estouro
(considerando a ps-escala) no ira resetar o microcontrolador, mas sim tir-lo do modo Sleep ou
Idle. A execuo da instruo SLEEP zera o WatchDog e a ps-escala assim como a instruo CLRWDT.
2.8.10 Proteo de Cdigo (Code Protect)
O programa gravado em um PIC pode ser protegido, isto , pode ser impedida a sua leitura.
Essa funcionalidade muito importante, sobretudo quando se trata de produo industrial, visto que
assim se podem preservar os direitos autorais do autor do firmware e dificultar a cpia de produtos.
Quando um componente est protegido e se realiza sua leitura, o valor lido em qualquer
endereo 0000h. Por isso um componente protegido no pode ser confundido com um
componente apagado, pois nesse ltimo caso o valor lido em qualquer endereo 3FFFh.
2.8.11 Gravao e depurao
O PIC gravado atravs de um processo chamado ICSP (in-circuit serial programming) que
realiza a gravao usando apenas 2 terminais de I/O e o pino de reset. Dessa maneira possvel
gravar o microcontrolador mesmo este estando j montado na placa de aplicao. Essa
funcionalidade de grande valia quando se usa componentes SMD ou quando o firmware precisa ser
atualizado em campo.
Os pinos usados so chamados de PGD (dados) PGC (clock) e VPP (alta tenso) que no caso
do 18F4550 correspondem ao pinos RB7, RB6 e MCLR. Como para gravar necessrio tambm que o
microcontrolador esteja alimentado, a interface ICSP normalmente tem ainda os pinos de GND e
VDD.
Alm da gravao a interface ICSP permite tambm a depurao, que o processo de
executar o programa de forma sincronizada com o MPLAB IDE. Isto permite colocar breakpoins
(pontos de paradas em posies do cdigo), ler e alterar o contedo da memria, executar o cdigo
passo-a-passo. Tudo isso com o programa gravado e sendo executado no microcontrolador. Mais
detalhes sobre a depurao so apresentados na sesso que trata especificamente do MPLAB.
Exsto Tecnologia
72
Exsto Tecnologia
73
Uma vez instalado o MPLAB IDE , para abri-lo execute Iniciar Programas Microchip
MPLAB IDE v7.31 MPLAB IDE
3.1.1
(projeto) composto por diversos arquivos gerenciados pelo MPLAB. Para criar um novo projeto
existe um assistente, que executado em Project Project Wizard...
Exsto Tecnologia
74
Exsto Tecnologia
75
Neste passo pode-se optar por criar um novo projeto ou reconfigurar um projeto j
existente. Como estamos criando um novo projeto escolheremos esta opo e indicaremos a pasta
onde o projeto deve ser criado. Para melhorar a organizao, cada projeto alojado em uma pasta.
No campo abaixo de Create a New Project preencha o caminho e nome do projeto ou a pasta onde o
projeto ser guardado, utilizando a opo Browse... para explorar o computador. Clique em Avanar.
Caso o diretrio escolhido ainda no exista aparecer uma mensagem perguntando se ele deve ser
criado. Neste caso, clique em OK.
Exsto Tecnologia
76
77
S (Sistema): define o caminho como absoluto. Normalmente usado para arquivos usados
em vrios projetos com um local predefinido.
que ao levar o projeto para outra maquina o MPLAB no consiga encontrar o caminho do projeto.
Marque os arquivos selecionados com a opo C e em seguia clique em Avanar.
A ltima tela apresenta um resumo do projeto criado. Confira se todas as informaes esto
corretas e clique em Concluir.
Na tela do MPALB aparecer a janela de gerncia do projeto, que contem todos os arquivos
pertencentes ao projeto. Para editar um arquivo d um clique duplo sobre ele.
Exsto Tecnologia
78
Construindo um projeto.
Uma vez criado o projeto, o mesmo deve ser construdo para que possa ser gravado no
microcontrolador ou simulado.
Cabe aqui dizer que os arquivos de cdigo fonte Assembly possuem a terminao .ASM e
os arquivos de biblioteca para Assembly tm terminao .INC. J os arquivos de cdigo fonte de C
tm terminao .C; os arquivos de cabealho e bibliotecas em C tem a extenso .H. Alm desses,
Exsto Tecnologia
79
h tambm o roteiro de ligao (linker script) que traz informaes sobre como o programa ser
alojado na memria do microcontrolador e tem extenso .LKR; O montador (MPASM Assembler)
ou o compilador (C18) interpretam os arquivos criados pelo usurio o cria diversos outros. Os de
maior importncia so os arquivos de erro (terminao .ERR) que permitem visualizar mensagens de
erro e os arquivos binrios (terminao .HEX) que so os arquivos gravados no microcontrolador.
Para construir um projeto use a tecla de atalho Ctrl+F10 ou v em Project Build All
Feito o isso aparecer a tela Output apresentando o resultados de compilao, bem como
mensagens, avisos ou erros encontrados. Se ocorrerem erros no processo de compilao os mesmos
so apresentados em lista e um clique duplo sobre eles mostra no cdigo fonte a linha onde se
encontra o erro. No havendo erros a ltima linha da janela Output apresentar a mensagem BUILD
SUCCEEDED seguida da data.
3.1.3
Gravando o microcontrolador
Para gravar o microcontrolador usa-se o ICD-2 uma ferramenta que permite, alm da
gravao, a depurao, como veremos mais a frente. Uma vez que ele estiver devidamente
conectado ao kit e ao PC, v em Programmer Select Programmer 2 MPLAB ICD 2. Surgir uma
barra de ferramentas cuja funo e apresentada na figura abaixo.
3.2 Simulao em C
Uma poderosa ferramenta de desenvolvimento o simulador integrado ao MPLAB IDE. Esse
simulador permite a simulao de cdigos escritos tanto em C (seja C18 ou outros compiladores
suportados) como em Assembly.
O uso do simulador particularmente interessante durante a etapa de estudo dos
microcontrolador e para a verificao de do funcionamento de funes e trechos de cdigo isolados.
Exsto Tecnologia
80
J para programas inteiros a simulao pode no apresentar resultados muitos conclusivos. Nesses
casos torna-se mais interessante o uso de uma ferramenta de depurao, conforme tratado a seguir.
A seguir so apresentados os passos bsicos para a realizao de simulao no MPLAB.
Uma vez criado um projeto, o primeiro passo habilitar o simulador como ferramenta de
depurao. Para isso escolha Debugger Select Tool MPLAB SIM.
Em seguida configure a simulao atravs de Debugger Settings...Dentre as opes existentes,
recomendamos configurar a porta serial virtual conforme apresentado na figura abaixo. Isso permite
que as informaes enviadas pela porta serial durante a simulao sejam exibidas em um janela do
MPLAB.
Exsto Tecnologia
81
Watch: permite a escolha dos endereos de memria RAM (SFR ou de uso geral) e de bits
para visualizao. Permite:
o
Adicionar SFR:
Simulao
Acompanhar o andamento do programa pela janela no programa ou pela janela
Disassembly Listing.
Comandos (os comando podem ser dados atravs do Menu Debugger, de teclas de atalho e
da barra de ferramentas):
3.2.2
Comando
Run
Atalho
F9
cone
Descrio
Executa o programa em tempo real
Halt
F5
Animate
Step Into
F7
Step Over F8
Step Out Reset
F6
Outras funcionalidades
Breakpoints: param a execuo do programa quando a instruo marcada atingida
o
Para retirar, clique com o boto direito do mouse sobre o breakpoint e selecione
Remove Breakpoint.
82
Na janela Watch:
3.2.3
Analisador lgico
O analisador lgico do MPLAB SIM se comporta como um analisador lgico real, isto , ele
plota o estado de sinais (pinos do microcontrolador) em funo do tempo. Isto permite monitorar o
estado dos pinos e de alguns sinais internos como se tivssemos um osciloscpio conectado a esses
pinos. Para ativar o analisador lgico de simulao va em View Simulator Logic Analyzer
A primeira coisa a fazer para trabalhar com o analisador selecionar os canais (sinais) que
devem ser monitorados. Para isso clique no boto Channels. Surgir a janela abaixo.
Exsto Tecnologia
83
Basta escolher os sinais a serem mostrados na lista a esquerda e clicar em Add para que
esses sejam mostrados no analisador.
Uma funcionalidade interessante para monitorar o funcionamento de diversos sinais
conjuntamente eh agupa-los em um barramento (Bus). Isso permite que o conjunto de sinais seja
apresentado como um nico valor hexadecimal. Para isso clique em Configure Bus(s). Ser mostrada
a tela abaixo.
Para criar um barramento clique em New Bus, preencha o nome do barramento e clique em
ok na janela de dialogo. Ao fazer isso o barramento criado aparecera na lista Available Bus(s). Em
seguida selecione o barramento na lista e defina os sinais que comporo esse barramento na lista
Available Signals e clique em Add. O barramento est pronto, basta clicar em OK para retornar a tela
de seleo de canal, onde o barramento estar na lista Avaliable signals.
Escolhidos os sinais a serem apresentados, clique em ok para retornar ao analisador lgico.
Ao simular o programa os sinais apresentados sero apresentados na tela do analisador. A
figura abaixo apresenta um exemplo disso.
Exsto Tecnologia
84
3.2.4
Gerao de estmulos
Outra funcionalidade interessante do MPLAB SIM a gerao de estmulos que permite
simular sinais aplicados a pinos ou sinais do microcontrolador. Para aplicar estmulos a simulao vah
em Debugger Stimulus New Workbook.
Existe uma sehrie de tipos de estimulos que podem ser gerados. Neste curso nos
concentraremos nos estimulos assincronos, que equivalem a chaves ligadas aos terminais do
microcontrolador. Para configurar estes, selecione a aba Asynch da janela de stimulus, conforme a
figura abaixo.
Exsto Tecnologia
85
A coluna Fire contm botes que, quando pressionados no decorrer da simulao, iro
realizar a ao descrita na coluna Action no sinal descrito na coluna Pin/SFR.
A coluna Pin/SFR mostra o sinal controlado em cada linha. Clicando em qualquer clula desta
coluna se abrir uma lista para a escolha do sinal desejado.
Na coluna Action escolhe-se a ao a ser realizada quando Fire pressionado:
Set High e Set Low: foram o pino nvel lgico alto e baixo, respectivamente;
Toggle: inverte o estado do pino;
Pulse High e Pulse Low: gera um pulso alto e baixo, respectivamente.
A coluna Width define a largura, ou seja, a durao do pulso quando a coluna Action tem
as opes Pulse High ou Pulse Low. A unidade de tempo do pulso, nesse caso, eh escolhida na coluna
Units e pode ser uma unidade de tempo ou ciclos de maquina do microcontrolador (cyc).
Por fim, a coluna Comments/Message permite inserir um texto comentando a utilidade do
estimulos.
Para salvar um conjunto de estmulos clique no boto Save. Para abrir um conjunto de
estmulos salvos anteriormente v em Debugger Stimulus Open Workbook.
Os sinais de estmulos tambm pode ser plotados no analisador lgico.
Exsto Tecnologia
86
CCS
Um compilador muito popular o CCS. Ao contrrio do C18, o CCS tambm capaz de
da Hitech. Trata-se de um compilador ANSI, portanto permite uma fcil migrao de e para o C18.
Este compilador aceita componentes das linhas PIC10F, PIC12F e PIC16F, com algumas limitaes.
Exsto Tecnologia
87
3.4 Depurao em C
O processo de depurao (debugging) consiste em realizar as mesmas aes possveis na
simulao, porm com o programa sendo realmente executado no microcontrolador. Dessa maneira
possvel verificar o valor de variveis a medida que elas so alteradas no circuito, inserir
breakpoints e acompanhar a execuo do programa sendo executado no hardware da aplicao.
Se a simulao permite testar a lgica de rotinas e pequenos programas a depurao uma
ferramenta mais poderosa quando se trata de programa de maior complexidade e principalmente na
localizao e correo de bugs no software.
Para realizar a depurao necessrio um hardware especial chamado XICD-2, embutido no
kit XM118. Uma vez instalado e configurado (esse processo apresentado no manual do kit) os
mesmos comandos e janelas disponveis para simulao ficam disponveis, s que agora atuando no
mundo real.
Exsto Tecnologia
88
*/
double
int
struct
break
else
long
switch
case
enum
register
typedef
Exsto Tecnologia
89
char
extern
return
union
const
float
short
unsigned
continue
for
signed
void
default
goto
sizeof
volatile
do
if
static
while
Exsto Tecnologia
Curso PIC Avanado
Jos Domingos Adriano
domingos@exsto.com.br
(c)Exsto Tecnologia 2006
www.exsto.com.br
// definies para o PIC18F4550
// Funes de sada de caracter
*/
*/
*/
*/
*/
*/
90
y = y +
x = x +
if(x ==
z
x
}
1;
1;
165){
= z + 1;
= 150;
}
}
4.1.1
A funo printf()
Uma funo bastante usada em C a funo printf(). Essa funo definida pelo padro ANSI
e est contida na biblioteca stdio.h. A funo printf() escreve dados na porta de sada padro. Em
computadores, a porta padro o monitor. No C18 porta de sada padro a porta serial.
Printf() til principalmente na depurao de programas, pois apresenta dados de diversas
maneiras em forma de caracter, permitindo assim conhecer o contedo de variveis. Como ser
mostrado em momento oportuno, possvel configurar o simulador do MPLAB para apresentar os
dados enviados pela serial do PIC.
funo consome muita memria e na maioria das vezes pode ser substituda por funes mais
simples de envio de caracter ou string simples.
4.1.2
C ou no C, eis a questo.
A escolha da linguagem a ser usada no desenvolvimento de um projeto com
91
ter sempre em mente essas premissas, vamos expor aqui porque, na maioria das vezes e para grande
parte dos desenvolvedores, a linguagem C a mais adequada.
H quem defenda ferrenhamente que o desenvolvedor profissional deva trabalhar em
Assembly. Os principais argumentos a favor desse modo de pensar so a eficincia (em temos de
ocupao de memria) do cdigo gerado por um programador experiente, o menor tempo de
execuo do programa e o controle total, j que nada feito sem que o programador saiba e queira.
A eficincia de cdigo importante na medida em que a memria disponvel nos componentes em
questo restrita e tem grande impacto no custo do componente. Tambm se perde o controle do
cdigo gerado, j que toda vez que um compilador usado o cdigo Assembly produzido sai do
controle do desenvolvedor. No passado, compiladores pouco confiveis apresentavam erros de
implementao difceis de serem depurados. E ainda, se o conjunto de instrues no possuir certas
caractersticas o uso de compiladores gera um cdigo significativamente maior e mais lento que um
de mesmas funes em Assembly.
Por outro lado, mais difcil de se desenvolver algoritmos complexos em Assembly, tornando
o trabalho de desenvolvimento mais lento e mais caro. Realizar operaes matemticas complexas
(por exemplo, com variveis do tipo ponto flutuante) torna-se bastante confuso. Como a linguagem
nativa e os modelos de memria de cada arquitetura de microcontroladores diferem, exigido um
tempo muito longo de estudo para se adaptar a um novo conjunto de instrues. Instrues de
mesma funo podem ter mnemnicos totalmente diferentes em diferentes conjuntos de instruo.
A grande quantidade de linhas de cdigo e a pouca inteligibilidade tornam os processos de
depurao demorados e difceis. Sendo o Assembly uma linguagem de programao no estruturada
os custos de desenvolvimento, depurao e manuteno tendem a ser maiores. Por fim, o
reaproveitamento de cdigo e a portabilidade de programas entre uma arquitetura e outra quase
impossvel, resultando na reescrita de vrias centenas ou milhares de linhas de programa.
No passado era possvel a um desenvolvedor especializar-se nessa ou naquela arquitetura,
tornando-se cada vez mais experiente no uso de um set de instrues e realizando todos seus
projetos com alguns poucos microcontroladores compatveis. Hoje, porm, a variedade de
microcontroladores muito grande. Praticamente todos os fabricantes de circuitos integrados
digitais tm suas famlias de microcontroladores. A concorrncia de preo entre esses fabricantes e a
diversidade de configuraes dos microcontroladores exige que as empresas optem por usar
diferentes arquiteturas em diferentes projetos, ou mesmo substituir componentes em produtos j
existentes. necessrio que o desenvolvedor de sistemas microcontrolados seja capaz de se adaptar
aos diferentes modelos de memria e conjunto de instrues, com pouco tempo para o estudo
detalhado de cada caso.
Exsto Tecnologia
92
A soluo ento utilizar uma linguagem de mais alto nvel, que por princpio so
independentes do hardware. O desenvolvedor concentra seu trabalho na criao de algoritmos e
funcionalidades no projeto e deixa o trabalho de implementao para o compilador. Surge ento
outro problema: qual linguagem usar?
Para muitas pessoas a resposta : o C! Vejamos por que.
Em primeiro lugar, o C considerado uma linguagem de mdio nvel, isto , mais amigvel
para o ser humano, mas mantendo recursos de baixo nvel. Em virtude disso, o C permite gerar
cdigos mais eficientes quando comparado com outros compiladores. H tambm a vantagem da
independncia do hardware que permite que um projeto seja portado de uma arquitetura para outra
com poucas alteraes no cdigo. Essas caractersticas do C no so por acaso. A linguagem foi
desenvolvida no incio dos anos 70 por Dennis Ritchie especificamente para o desenvolvimento do
sistema operacional UNIX. Na poca o dilema era quase o mesmo: construir sistemas operacionais
em assembly era demorado e dispendioso e todo o trabalho tinha que ser refeito a cada novo
processador criado. Os computadores da poca tinham pouca memria e os modelos usados por
Ritchie no eram capazes de implementar operaes de ponto flutuante diretamente. Ritchie
desenvolveu uma linguagem simples, fcil de ser aprendida, mas com recursos que permitem o
desenvolvimento de programas complexos, como sistemas operacionais, que permite portabilidade
de cdigo sem prejudicar as funcionalidades de baixo nvel, gerando um cdigo bastante enxuto,
isto , eficiente no uso da memria.
Por ser uma linguagem estruturada, o C exige que o programador siga boas prticas de
programao, evitando assim erros que, em Assembly, poderiam passar despercebidos.
A portabilidade de cdigo fica garantida, pois existe uma norma que rege a linguagem C.
Todo compilador que segue o padro ANSI deve conseguir reconhecer o mesmo cdigo gerado,
independente da arquitetura alvo. Os compiladores C profissionais so bastante confiveis, geram
cdigo eficiente e livre de bugs de implementao.
Uma vantagem adicional do C so as bibliotecas de funes que acompanham os
compiladores. Alm das bibliotecas convencionais do padro ANSI a maioria dos compiladores possui
bibliotecas para uso das funcionalizadas especficas de cada microcontrolador. Alm do ganho de
tempo em se usar as bibliotecas j prontas existe tambm um ganho de eficincia de cdigo, j que
essas funes so normalmente implementadas em Assembly para otimizao de memria e tempo.
Exsto Tecnologia
93
94
maior consumo de memria que a tcnica acarreta. Contudo j existem compiladores que permitem
trabalhar de forma orientada a objetos (em C++, Java, etc). No futuro otimizaes na arquitetura dos
microcontroladores sero feitas para tornar o cdigo orientado a objeto mais leve aos
microcontroladores.
4.1.3
4.2 Diretivas
Diretivas podem ser descritas como comandos dados ao compilador, indicado a aes que
devem ser feitas no momento da compilao. Elas podem ou no gerar cdigo que efetivamente vai
ser executado pelo microcontrolador, j que sua funo orientar a compilao do programa.
O padro ANSI C prev uma grande variedade de diretivas. Alm disso, o padro prev uma
diretiva para criao de novas diretivas, chamada #pagrma , de forma que diferentes compiladores
possam oferecer a seus usurios opes que no esto previstas no padro ANSI.
Das diversas diretivas disponveis enfocaremos apenas e quem tem maior uso neste curso,
apresentadas abaixo.
4.2.1
#include
A diretiva #include permite incluir arquivos de cabealho e bibliotecas de funes.
Exsto Tecnologia
95
#include <P18F4550.h>
#include <spi.h>
#define
Esta diretiva muito til pois permite apelidar um trecho de texto por um nome. #define
define que um nome representa o texto imediatamente a seguir, de forma que quando da
compilao toda ocorrncia desse nome seja substitudo pelo texto. Vejamos os exemplos a seguir:
#define VALOR_MAXIMO
125
#define LED
POTRDbits.RD0
#define ACENDE_LED
LED = 1;
No primeiro exemplo, o valor 125 foi chamado de VALOR_MAXIMO. Esse tipo de construo
til quando temos um limite ou constante que queremos usar em diferentes partes do cdigo, mas
que pode mudar seu valor devido a alguma necessidade do projeto. Chamando de VALOR_MAXIMO
o valor 125, se for necessrio mud-lo para, por exemplo, 203 basta alterar na definio, e no em
todos os pontos do cdigo.
No segundo caso, usamos #define para atribuir um nome a um pino do microcontrolador.
Dessa forma, no recisamos fazer sempre referncia ao pino, chamamo-lo por seu apelido LED. Isto
facilita o entendimento do cdigo e possveis alteraes na configurao do hardaware.
No ltimo caso usamos #define para apelidar um trecho de cdigo, criando o que
conhecido como macro.
4.2.3
#pragma config
Esta uma diretiva especfica do compilador C18, criada com o uso da diretiva #pragma. Ela
Exsto Tecnologia
96
Essa configurao permite usar diferentes valores de cristais como sinal de entrada do PLL
para o mdulo USB.
CPU System Clock Postscaler
Sem PLL
Com PLL
CPUDIV = OSC1_PLL2
FXTAL / 1
FPLL / 2 (48 MHz)
CPUDIV = OSC2_PLL3
FXTALl/ 2
FPLL / 3 (32 MHz)
CPUDIV = OSC3_PLL4
FXTALl/ 3
FPLL / 4 (24 MHz)
CPUDIV = OSC4_PLL6
FXTAL / 4
FPLL / 6 (16 MHz)
Essa configurao permite selecionar o fator de diviso do clock do sistema. Quando usado
como modos de oscilador sem PLL ele divide o freqncia do cristal (Fxtal) por 1, 2, 3 ou 4. Quando
usado em modos com oscilador, divide a freqncia da sada do PLL (96MHz ) por 2, 3, 4 e 6,
obtendo-se as freqncias indicadas na tabela.
USB Clock Selection
USBDIV = 1 Clock de USB vem direto do oscilador principal, sem pr-escala (baixa velocidade)
USBDIV = 2
Clock de USB vem do PLL (alta velocidade)
Esta opo permite escolher entre o modo de baixa o alta velocidade, para USB. No modo de
baixa velocidade a nica freqncia de entrada aceita 6MHz.
Oscillator Selection
Oscilador de CPU
Oscilador de USB
FOSC = XT_XT
XT
XT
FOSC = XTPLL_XT
XT com PLL
XT com PLL
FOSC = ECIO_EC
EC (clock externo), RA6 usado como I/O EC (clock externo)
FOSC = EC_EC
EC (clock externo), RA6 sada de clock
EC (clock externo)
FOSC = ECPLLIO_EC
EC (clock externo) com PLL, RA6 usado EC (clock externo) com PLL
como I/O
FOSC = ECPLL_EC
EC (clock externo) com PLL, RA6 sada EC (clock externo) com PLL
de clock
FOSC = INTOSCIO_EC
Oscilador interno, RA6 usado como I/O EC (clock externo)
FOSC = INTOSC_EC
Oscilador interno, RA6 sada de clock
EC (clock externo)
FOSC = INTOSC_XT
Oscilador interno
XT
FOSC = INTOSC_HS
Oscilador interno
HS
FOSC = HS
HS
HS
FOSC = HSPLL_HS
HS com PLL
HS com PLL
Seleciona o tipo de oscilador principal. Observe que a seleo de modo define qual ser o
oscilador da CPU e qual ser de USB.
Exsto Tecnologia
97
98
WDTPS = 16
1:16
WDTPS = 32
1:32
WDTPS = 64
1:64
WDTPS = 128
1:128
WDTPS = 256
1:256
WDTPS = 512
1:512
WDTPS = 1024
1:1024
WDTPS = 2048
1:2048
WDTPS = 4096
1:4096
WDTPS = 8192
1:8192
WDTPS = 16384
1:16384
WDTPS = 32768 1:32768
Para determinar o tempo total entre estouro do watchdog, multiplique o valor da pr-escala
por 4ms.
MCLR Pin Enable
MCLRE = OFF
MCLR (Reset) desabilitado; RE3 habilitado como entrada
MCLRE = ON
MCLR (Reset) habilitado; RE3 desabilitado
Low-Power Timer 1 Oscillator Enable
LPT1OSC = OFF Oscilador do Timer1 em modo de maior consumo e maior preciso
LPT1OSC = ON
Oscilador do Timer1 em modo de menor consumo e menor preciso
PORTB A/D Enable
PBADEN = OFF
Pinos de PORTB [4:0] configurados como entrada digital aps Reset
PBADEN = ON
Pinos de PORTB [4:0] configurados como entrada analgica aps Reset
Para usar os pinos do PORTB como entrada ou sadas digitais, mesmo com a funo de
interrupo, necessrio desativar as entradas do A/D ou configurar PBADEN = OFF.
CCP2 MUX
CCP2MX = OFF
CCP2MX = ON
Exsto Tecnologia
99
A proteo de cdigo para EEPROM impede que ela seja lida externamente.
Data EEPROM Code Protection bit
CPD = ON
Data EEPROM code-protected
CPD = OFF Data EEPROM not code-protected
A proteo de escrita de memria FLASH impede que o bloco protegido possa ser escrito
pelo prprio microcontrolador.
Exsto Tecnologia
100
101
PLLDIV = 5
#pragma config
#pragma config
FOSC = HS
#pragma config
WDT = OFF
// Watchdog desativado
#pragma config
PBADEN = OFF
#pragma config
LVP = OFF
#pragma config
DEBUG = ON
// habilita debug
4.2.4
(RTI) de baixa ou de alta prioridade. Ao fazer isso o compilador se encarrega de descrever o cdigo
especfico para chamada, salvamento e retorno de contexto da interrupo. Alm disso, a diretiva
permite passar uma lista de variveis (variveis declaradas pelo usurio e registros do
microcontrolador) que devem ter seu contexto salvo quando ocorrer interrupo. Sua sintaxe
apresentada a seguir.
#pragma interrup nome_da_RTI_alta_prioridade [save = lista_de_variveis]
#pragma interruplow nome_da_RTI_baixa_prioridade [save = lista_de_variveis]
Mais detalhe e exemplos do uso dessa na seo que trata de interrupes em C.
102
processador, mas no deve ser menor que 16 bits. Float armazena dados do tipo ponto flutuante
(fracionrios) de preciso simples e double armazena dados de ponto flutuante de dupla preciso.
Alm dos tipos de dados padro existem tambm modificadores que permitem alterar as
caractersticas de cada tipo de dado. So eles:
signed: informa que o dado do tipo sinalizado (valores positivos e negativos)
unsigned: informa que o dado do tipo no sinalizado (somente valores positivos)
long: informa que o inteiro uma variao maior que o padro
short: informa que o inteiro uma variao menor que o padro
Como os modificadores short e long atuam somente sobre dados do tipo int podemos
escrever apenas o modificador, o int fica subentendido.
Quando um dado do tipo sinalizado, um de seus bits utilizado para indicao do sinal, o
que reduz pela metade o valor absoluto que esse dado pode conter.
Os tipos de dados inteiros que ocupam mais de um endereo de memria tm sua parte
menos significativa nos endereos mais baixos e a parte mais significativa nos endereos mais altos.
A tabela 2.2 apresenta os tipos de dados tratados pelo compilador C18, bem como seu
tamanho e faixa de valores.
Tipo
Tamanho
Faixa de valores
Mnimo
Mximo
char
8 bits
-128
127
signed char
8 bits
-128
127
unsigned char
8 bits
0
255
int
16 bits
-32.768
32.767
unsigned int
16 bits
0
65.536
Short
16 bits
-32.768
32.767
Unsigned short
16 bits
0
65.536
Short long
24 bits
-8.388.608
8.388.607
Unsigned shot long
24 bits
0
16.777.215
Long
32 bits
-2.147.483.648 2.147.483.647
Unsigned long
32 bits
0 4.294.967.295
Tabela 2.2 - Tipos da dados inteiros
Os tipos de dados float e double para variveis com parte fracionrias (chamados de floating
points ponto decimal flutuante) definidos para C18 como variveis de 32 bits, que comportan-se de
forma idntica. A tabela 2.3 traz os tipos de dados suportados em C bem como as faixas de valores:
Exsto Tecnologia
103
Tipo
Tamanho
Faixa de valores
Mnimo
Mximo
float
32 bits
double
32 bits
A representao de valores nas diferentes bases feita conforme a tabela 2.4, onde y
representa o valor a ser expresso. A smbolo usado para separar as partes inteiras e fracionria de
um nmero o ponto ( . ). A representao de caracteres feita entre apstrofos ( ).
Tipo
Decimal
Hexadecimal
Binrio
Octal
Notao Exemplos
yyy
31, 1025, -3, 50000
0xyyy
0x31, 0xABCD, 0x0008
0byyy
0b10101010, 0b1111000011110000
0oyyy
0o31, 0o123, 0o1543
Tabela 2.4 - Representao de valores
Exsto Tecnologia
104
4.3.2
Vetores e matrizes
possvel criar vetores e matrizes de dados dos tipos bsicos. Vetores e matrizes so
conjuntos de diversas variveis de mesmo tipo que so referenciadas por um mesmo identificador,
sendo discriminadas por um ndice. Vetores so unidimencionais, enquanto matrizes podem ter duas
dimenses ou mais. Todo vetor ou matriz terminado por um caracter de valor 0.
Para atribuir valores constantes ou valores iniciais variveis enumera-se os valores de
cada elementos entre chaves, separados por vrgulas. Um caso particular de vetores so os vetores
de caracteres, chamados de strings, que so teis para armazenar palavras e frases. Nesses casos, o
conjunto de caracteres pode ser atribudo a um vetor constante simplesmente usando aspas para
marcar incio e fim. Esse processo apresentado no exemplo abaixo. Uma string sempre terminada
com um caracter igual a zero. Este caracter serve para marcar o final de uma string, uma vez que
nenhum caracter representado por zero.
Na criao de um vetor ou matriz necessrio informar o nmero de elementos que essa
contm. Isso feito colocando o nmero de elementos entre colchetes na declarao. No caso de
um vetor de caracteres constantes no preciso colocar o nmero de elementos, pois esse
determinado pelo nmero de elementos atribudos.
Para fazer referncia a um elemento em particular dentro de uma matriz ou vetor usa-se a
posio desse elemento (ndice). ndices podem ser valores fixos ou variveis. Ateno: em C as
Exsto Tecnologia
105
Medida[i] = 15;
x = Valores[3];
4.3.4
Ponteiros
Um tipo especial de variveis o tipo ponteiros. Ponteiros so variveis que contm o
endereo de outras variveis. Sua funo apontar onde a varivel est na memria, da seu
nome. Ponteiros so muito usados em C e um dos motivos que permitem a implementao do
cdigo de forma bastante otimizada. Uma arquitetura de microcontrolador otimizado para a
linguagem C deve ter um eficiente sistema de ponteiros.
Para declarar um ponteiro usamos uma sintaxe parecida com a declarao de varivel,
porm com significado diferente. Deve ser colocado o tipo de dado que o ponteiro aponta e o nome
do ponteiro, precedido por *. Por exemplo, na declarao a seguir x uma varivel do tipo inteiro
enquanto ip um ponteiro que aponta para variveis do tipo inteiro.
int x;
// x um inteiro
int *ip;
Exsto Tecnologia
106
Para atribuir a um ponteiro o endereo de uma varivel usamos o operador &. Para
manipular o contedo da varivel apontada pelo ponteiro usamos o operador *. O exemplo a
seguir ilustra alguns usos de ponteiros.
int x = 1, y = 2, z[10];
// x e y so inteiros,
// z um vetor de inteiros
// ip e iq so ponteiros que
//
4.3.5
apontam inteiros
ip = &x;
// ip aponta para x
iq = &y;
// iq aponta para y
y = *ip;
// y agora vale 1
*ip = 0;
// x agora vale 0
ip = &z[0];
iq = ip;
Qualificadores
Existem alguns qualificadores que indicam como os dados devem ser alocadas na memria.
So naturais da linguagem C os qualificadores static e auto. O qualificador auto indica que a
varivel valida somente naquele bloco de instrues (bloco delimitado por chaves ou funo),
sendo alocada quando o bloco comea e desalocada quando terminar. Desalocar, ou detruir, significa
que aquele endereo de memria pode ser usado por outras variveis do programa. O qualificador
static informa que a varivel no pode ser desalocada, portanto seu endereo de memria no ser
ocupado por outras variveis e seu contedo no ser alterado aps a finalizao do bloco. Seu
comportamento semelhante ao de variveis globais, porm s so reconhecidas dentro do bloco
ao qual pertencem.
Quando no especificado, as variveis so consideradas como auto.
O compilador C18 introduz 4 novos qualificadores: ram e rom, near e far.
Os qualificadores ram e rom definem se o dado (varivel ou constante) deve ser alocado na
memria de dados (RAM) ou de programa (ROM). A principio isso parece no fazer sentido, pois
imagina-se que variveis devam ser alocadas na RAM e constantes na memria de programa.
Contudo, para aumentar a velocidade da manipulao de dados, constantes podem ser carregadas
na memria de dados quando o programa iniciado. Em outras situaes, pode ser desejvel que
Exsto Tecnologia
107
garantir que grandes tabelas de constantes estejam armazenadas na FLASH para reduzir o consumo
de memria RAM. As variveis declaradas em memria de programa devem, obrigatoriamente, ser
do tipo static.
Quando no especificado, o C18 assume que os dados devem ser alocados na RAM. Isso
vlido tanto para variveis com para constantes.
Os qualificadores near e far (perto e longe em ingls, respectivamente) informam em que
regio da memria os dados devem ser alocados. Para dados na memria de programa, near (perto)
significa nos primeiros 64 kbytes de memria. Para memria de dados, near significa na RAM de
acesso. Em ambos os casos, far significa em qualquer regio da memria, inclusive nas regies
abrangidas por near.
Quando no especificado, o C18 trata os dados como qualificados com far.
Seguem abaixo alguns exemplos de usos dos modificadores.
rom static char Senha[4]// varivel alocada na memria flash
const char Nome[] = Joo;
4.3.6
Exsto Tecnologia
108
4.4.1
Atribuio
Comando de atribuio realizado simplesmente com o uso do operador =. O
Nesses casos devemos evitar o uso do termo igual para evitar equvocos. Dizemos, por
exemplo, x recebe dois e no x igual a dois.
O C permite substituir a expresso x = x + 5 por x += 5, como o mesmo efeito.
4.4.1.1
definidos todos os registros de uso especial. Dessa maneira, possvel manipular diretamente os
registros como se fossem variveis e envolv-los em operaes com os operadores estudados. Os
exemplos abaixo mostram com isso pode ser feito:
#include<P18F4550.h>
void main(void){
TMR0 = 0x25;
T1CON = 0b0001001;
// configura o timer 1
TRISA = 0xAA;
INTCON = 0xC0;
// habilita interrupes
Exsto Tecnologia
109
#include<P18F4550.h>
void main(void){
RCONbits.IPEN = 1;
INTCONbits.GIEH = 1;
// habilita interrupes
ADCON0bits.ADON = 0;
// desliga o ADC
TXSTAbits.TXEN = 1;
4.4.1.2
especiais para realizar operaes de entrada e sada de dados. Mas como no PIC18 os portais de I/O
so registros de funes especiais e, portanto, definidos no arquivo de cabealho de cada
microcontrolador, podemos manipul-los como se fossem variveis.
Os registros que controlam a direo dos pinos dos portais, isto , o registro TRISx, podem
ser acessados por dois nomes: TRISx (TRISA, TRISB, TRISC, etc...) e DDRx (DDRA, DDRB, DDRC, etc.).
DDRx vem de Direction Data Register Registro de Direo de Dados. Pode-se configurar o portal
todo de uma vez ou os registros individualmente. O exemplo a seguir trata do portal B, mas o mesmo
raciocnio pode ser estendido aos demais portais.
4.4.1.3
Operadores em C
Para a execuo de expresses e condies o C dispes de diversos operadores, alm do
Operao
Adio
Subtrao
Multiplicao
Diviso
Resto da Diviso
Incremento
Decremento
Exsto Tecnologia
110
int x, y = 3, z = 2;
x = y + z;
// o valor de x ser 5
x = y - z;
// o valor de x ser 1
x = y * z;
// o valor de x ser 6
x = y / z;
x = y % z;
// y recebe 5
x = ++y;
// y contm 6 e o valor de x 6
y = 5;
// y recebe 5
x = y++;
x>y
Verdadeiro
x >= y
Verdadeiro
Exsto Tecnologia
111
x<y
Falso
x <= y
Falso
x == y
Falso
x != y
Verdadeiro
Os operadores lgicos so divididos em dois tipos. O primeiro tipo realiza operaes lgicas
de comparando o estado de cada operando, se falso (igual a 0) ou verdadeiro (diferente de 0).
Esses operadores permitem criar condies com expresses lgicas, envolvendo inclusive operadores
relacionais. Mais exemplos de sua aplicao sero apresentados quando se tratar de comandos de
deciso. Tais operadores so apresentados na tabela a seguir.
Operador
&&
||
!
Operao
E (AND)
OU (OR)
COMPLEMENTO (NOT)
O segundo tipo de operador lgico realiza operaes lgicas bit a bit em seus operandos. Os
operadores pertencentes a esse segundo tipo esto na tabela a seguir.
Operador
&
|
^
~
>>
<<
Operao
E (AND)
OU (OR)
OU-EXCLUSIVO (XOR)
COMPLEMENTO (NOT)
Deslocamento a direita
Deslocamento a esquerda
s = a & b;
s = a | b;
s = a ^ b;
s = ~b;
Exsto Tecnologia
112
s = a >> 3;
s = a << 2;
Operao
Endereo do identificador
Contedo do endereo apontado pelo
operando
O operador & deve ser usado com ateno. Se ele for usado com apenas um operando, tem
a funo de retornar o endereo de memria desse operando. Mas caso seja usado com dois
operandos, sua funo a operao lgica E. Essas duas formas de aplicao so apresentadas nos
exemplos abaixo.
4.4.1.4
X = &Y;
// X recebe o endereo de Y
X = Y & 0x0F
Precedncia de operadores
Numa expresso com vrios operadores as operaes sero efetuadas seguindo uma ordem
predefinida relacionada com tipo de operados. O programados pode alterar essa ordem conforme a
sua vontade utilizando parnteses, que funcionaram como em uma operao matemtica. A seguir
a ordem de precedncia dos operadores.
Exsto Tecnologia
113
Ordem de execuo
// da na mesma fazer
TRISB = 0b00110101;
// ou
DDRB = 0b00110101;
// ou
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 0;
TRISBbits.TRISB2 = 1;
TRISBbits.TRISB3 = 0;
TRISBbits.TRISB4 = 1;
TRISBbits.TRISB5 = 1;
TRISBbits.TRISB6 = 0;
TRISBbits.TRISB7 = 0;
// ou ainda
DDRBbits.RB0 = 1;
DDRBbits.RB1 = 0;
DDRBbits.RB2 = 1;
DDRBbits.RB3 = 0;
DDRBbits.RB4 = 1;
DDRBbits.RB5 = 1;
DDRBbits.RB6 = 0;
DDRBbits.RB7 = 0;
Operador
()[]
! ~ ++ -- * &(endereo)
* / %
+ << >>
<<= >>=
== !=
& (operao E)
^
|
&&
||
?
= += -= *= /=
// 1 = Entrada
// 0 = Sada
Para acesso aos portais existem dois registros, LATx e PORTx, conforme discutido em 1.9. O
acesso a esse registros pode ser feito conforme apresentado no exemplo a seguir.
LATA = 0x00;
x = PORTB;
PORTBbits.RB0 = 1;
LATBbits.LATB1 = PORTAbits.RA5;
Exsto Tecnologia
114
4.4.2
Deciso
As estruturas de deciso permitem ao programa tomar decises baseadas na avaliao de
4.4.2.1
If
A estrutura if (se) executa um bloco de comandos se a condio for verdadeira. Caso
contrrio segue a execuo do programa. Seu aspecto geral apresentado abaixo, assim como um
exemplo de utilizao.
if (<condio>){
<Bloco verdadeiro>
}
Exemplo:
if(x > 5){
printf("\n x maior que 5");
}
115
if (TMR0){
// verdadeiro se TMR0 diferente de 0
printf(TMR0 diferente de 0)
}
if(!PORTBbits.RB0){
LigaMotor();
}
if(PIR1bits.TMR1IF){
RTITimer1();
}
4.4.2.2
If-else
A estrutura if-else (se-seno) executa um bloco de comandos se a condio for verdadeira ou
outro bloco de comando se a condio for falsa. Temos a seguir forma geral dessa estrutura e um
exemplo de utilzao.
if (<condio>){
<Bloco verdadeiro>
}
else{
<Bloco falso>
}
Exemplo:
if(x > 5){
printf("\n x maior que 5");
}
else{
printf("\n x menor que 5");
}
4.4.2.3
forma alternativa de se realiza a estrutura se-seno. Isso feito atravs do operador ternrio
condicional. Sua sintaxe :
Varivel = Condio ? Expresso1 : Expresso2;
Sendo Condio uma expresso cujo resultado vai ser avaliado em verdadeiro ou falso e
Expresso1 e Expresso2 expresses quaisquer cujo valor pode ser atribudo varivel. Se Condio
for verdadeiro, Varivel recebe o resultado de Expresso1; seno, Varivel recebe o resultado de
Expresso2. A seguir o uso do operador ternrio condicional exemplificado.
Exsto Tecnologia
116
x = (y >= 10) ? y * 2 : y * 3;
equivale a
if( y >= 10) x = y * 2;
else
x = y * 3;
PORTDbits.RD0 = (valor <= 128) ? 1 : 0;
equivale a
if( valor <= 128) PORTDbits.RD0 = 1;
else
PORTDbits.RD0 = 1;
4.4.2.4
Switch
O comando switch permite a implementao de uma estrutura caso. A seguir temos a forma
O que o comando switch faz comparar <varivel> com os valores que ela pode assumir
(valor1, valor2, etc). Caso a varivel possua um desses valores o bloco associado ao valor
executado. O ltimo bloco, chamado default, opcional e s executado se <varivel> no igual a
nenhum dos valores.
A seguir, como exemplo, temos uma aplicao tpica do comando switch..
switch(x){
case 1:
printf("\n
break;
case 2:
printf("\n
break;
case 3:
printf("\n
break;
default:
printf("\n
break;
}
x igual a 1");
x igual a 2");
x igual a 3");
x diferente de 3, 2 e 1");
Exsto Tecnologia
117
4.4.3
Repetio
Em C existem trs comandos que implementam estruturas de repetio:
Do-While
While
For
4.4.3.1
Do-While
Esse comando implementa uma estrutura Faa-Enquanto. Sua funo executar um blocos de
instrues enquanto uma condio for satisfeita. Sua principal caracterstica que o bloco
executado antes do teste ser realizado. Ou seja, o bloco executado pelo menos uma vez,
independente da condio ser verdadeira ou falsa. Esse funcionamento particularmente til
quando a condio a ser testada afetada pelo bloco. A seguir temos sua forma padro e um
exemplo de utilizao.
do{
<bloco de instrues>
}while(<condio>);
Exemplo:
// fica imprimindo a mensagem enquanto n < 5;
do{
printf("\n Bloco do do-while!!");
}while(n < 5);
4.4.3.2
While
Da mesma forma de Do-While, o comando While repete um bloco enquanto uma
determinada condio verdadeira. A principal diferena entre os dois comandos que com While o
teste feito antes de se executar o bloco. Em outras palavras, o bloco s vai ser executado se em
algum momento a condio for satisfeita.
while(<condio>){
<bloco de instrues>
}
Exemplo:
// fica imprimindo a mensagem enquanto n diferente de x
while(n != n){
printf("\n Bloco do While!!");
}
Exsto Tecnologia
118
4.4.3.3
For
O comando For utilizado para repetir um bloco por um nmero pr-determinado de vezes.
4.4.3.4
Comando Break
Quando executado dentro de um lao de repetio, o comando break causa a imediata
4.5 Funes
A linguagem C permite a criao de funes (equivalentes a sub-rotinas em Assembly). Alm
disso, vrias funes j prontas so fornecidas com o compilador C18, sejam funes definidas pelo
padro ANSI sejam funes para uso especfico no PIC18.
Uma funo um trecho de cdigo que deve executar uma funo especfica e bem definida.
Seu objetivo permitir que um programa seja modular, isto , composto de blocos cujas
responsabilidades dentro do programa so bem claras. Modularidade um princpio da programao
estruturada e C uma linguagem estruturada por natureza.
Funes bem construdas facilitam a depurao, manuteno e entendimento do cdigo. E
ainda, podem ser transportadas para outros programas onde se faam necessrias.
Exsto Tecnologia
119
Passagem de parmetros
Assim como uma funo matemtica (da seu nome) uma funo em linguagem C tem
*/
*/
Para exemplificar, suponhamos que se deseja construir uma funo que some o valor de dois
inteiros e retorne o resultado dessa soma, tambm em formato inteiro. Essa funo poderia ser
desenvolvida da seguinte maneira:
int SomaDoisNumeros(int x, int y)
// Funo que soma dois nmeros
// Entrada: x e y contendo os valores
// Sada:
a soma de x e y
{
int z;
// Declarao de variveis
z = x + y;
// comandos da funo
return(z);
// retorna o resultado
120
podem ser passados para a funo, sejam eles constantes, variveis ou valores imediatos. Esse
valores so copiados para as variveis internas x e y.
As variveis declaradas em uma funo, assim como seus argumentos s existem dentro da
funo. Isso significa que podemos ter outras variveis chamadas x em outras funes e estas so
tem qualquer relao com a varivel x que existe em SomaDoisNumeros.
O exemplo a seguir ilustra como a funo pode ser chamada na funo principal.
void main(void)
{
int x,z;
z = 5;
x = SomaDoisNumeros(8,z);
}
Exsto Tecnologia
121
4.6 Interrupes
Muitas vezes um projeto exige que providncias sejam tomadas imediatamente no momento
em que um determinado evento ocorre, porm no se pode ficar o tempo todo verificando as
entradas associadas a esse evento. Por exemplo, supondo que um sistema que deve fazer vrias
medidas continuamente e mostrar uma medida selecionada em um display. Essa medida
selecionada pelo pressionamento de um boto. Vamos admitir que o processo de fazer todas as
medidas e mostr-las no display demore um determinado tempo, alguns segundos. Ento s
poderemos verificar o estado do boto rapidamente a intervalos de alguns segundos. Se o boto no
estiver pressionado no exato momento da leitura o microcontrolador no tomar conhecimento
desse fato. O ideal que o microcontrolador pudesse fazer as medidas o tempo todo e somente no
momento em que o boto fosse pressionado ele executaria a rotina relacionada a esse evento,
voltando depois s medidas.
Uma interrupo faz exatamente isso: interrompe a execuo normal do programa para
executar tarefas de maior prioridade no momento. Ela pode ser chamada por determinados eventos,
parando a execuo normal no momento em que ocorre o evento, executando o cdigo armazenado
em uma posio de memria vinculada a interrupo e depois retornam a execuo normal do
Exsto Tecnologia
122
programa.
hardware.
Quando ocorre um pedido de interrupo para a CPU, o programa desviado para um
endereo pr-estabelecido, o vetor de reset. No PIC18 existem dois vetores de reset, conforme ser
tratado mais adiante. Desse endereo em diante feito o chamado tratamento de interrupo, isto
, so executadas as rotinas que se deseja associar ao evento causador da interrupo.
123
Dois fatos importantes sobre os bits de flag devem ser enfatizados. O bit de flag vai para 1
quando ocorre o evento mesmo que a interrupo associada a ele no esteja habilitada. Alm disso o
hardware fora o bit de flag para 1 mas o mesmo deve ser zerado pelo software para indicar que a
interrupo em questo foi tratada.
As interrupes externas,
externas, isto , que so causadas diretamente por eventos externos ao
microcontrolador, so a interrupo INT0 (pino RB0), INT1 (pino RB1), INT2 (pino RB2) e a
interrupo por mudana de estado do portal B. As demais interrupes so internas, causadas pelos
perifricos
erifricos para indicar determinados eventos (chegada de dado pelo portal serial, "estouro" de
timer, etc).
Quando ocorre uma interrupo o fluxo do programa desvia para um vetor de reset
(conforme a prioridade da interrupo). Conseqentemente, a rotina de tratamento de interrupo
Exsto Tecnologia
124
deve obrigatoriamente comear nesse endereo. Para determinar qual interrupo ocorreu testa-se
os bits de flags de todas as interrupes ativas com a mesma prioridade.
Pode acontecer de uma rotina de tratamento de interrupo fazer uso de uma varivel ou
registro de funo especial tambm usada no programa principal. Neste caso, a execuo da rotina
de tratamento de interrupo iria corromper o valor desta varivel, causando um erro intermitente e
difcil de detectar. Para entender esse problema basta pensar que se em determinado ponto do
programa movemos o valor 10 para a varivel X e ocorre uma interrupo neste exato momento, o
valor de W ser alterado na RTI e o valor que finalmente aparecer em X no ser 10. Ao contrrio de
alguns microcontroladores, quando ocorre uma interrupo nenhum registro automaticamente
salvo. Assim importante salvar os registros W e STATUS antes que seja realizado qualquer
tratamento de interrupo, bem como qualquer outro SFR que for usado dentro e fora das rotinas de
interrupo. Esse processo chamado salvamento de contexto. Tambm recomendvel que o
registro STATUS seja zerado. necessrio ento que existam variveis criadas para salvar esses
registros. Outra prtica recomendada de nunca usar dentro de uma rotina de tratamento de
interrupo registros que so utilizados em outras partes do programa.
Um outro cuidado que deve ser tomado quando se trabalha com interrupes no executar
rotinas muito grandes. Isso porque o tratamento de interrupo deve tomar medidas emergenciais.
Nada que no seja estritamente necessrio deve ser trabalhado na interrupo, e isso principalmente
porque podem ocorrer vrias interrupes em seguida, e s se pode tratar uma por vez. Quando
uma interrupo chamada, a habilitao das demais fica desativada, e s reativada aps a
execuo do RETFIE. Se outra interrupo ocorrer nesse intervalo de tempo, ela tratada aps
RETFIE. Deve-se notar que o que ativa a chamada de interrupo a existncia de um flag de uma
interrupo habilitada setado. Assim, depois de tratar uma determinada interrupo deve-se zerar o
flag associado a ela. Caso contrrio, o programa fica travado, pois cada vez que h o retorno de
interrupo, a interrupo chamada novamente.
Finalmente, necessrio considerar que na realidade o tratamento de interrupo no
ocorre no exato momento em que a interrupo acontece. Primeiramente, a checagem dos eventos
que causam a interrupo obedece a uma varredura interna. E depois de detectado o evento,
algumas aes devem ser realizadas, como o desvio para o vetor de reset, por exemplo. Assim, aps
a real ocorrncia de uma interrupo ela s vai comear a ser tratada 3 ciclos de mquina aps sua
ocorrncia, se for uma interrupo interna, e de 3 a 4 ciclos de mquina se for uma interrupo
externa.
importante.
Exsto Tecnologia
125
4.6.1
associado a ela, o que feito normalmente uma nica vez, na inicializao programa. Nada impede,
porm que um perifrico seja configurado, ou re-configurado, em qualquer ponto programa.
O prximo passo habilitar as interrupes a serem utilizadas, e isso pode ser feito em dois
momentos. Pode-se determinar que uma interrupo esteja ativa durante toda a execuo do
programa, e nesse caso sua habilitao deve ser feita na inicializao. Por outro lado, em algumas
situaes deseja-se que a interrupo seja ativada somente a partir de um dado momento ou ainda
que seja ativada e posteriormente desativada. Nessa situao basta habilitar, ou desabilitar, a
interrupo no momento oportuno.
importante lembrar que as interrupes habilitadas somente causam chamadas de
interrupo se o bit de habilitao global (GIEH e GIEL quando a prioridade estiver ativa, GIE caso
contrrio) estiver habilitado.
Finalmente, deve-se fazer o tratamento de interrupo, isto , construir as rotinas que
sero chamadas quando ocorrer uma determinada interrupo. Essas rotinas devero seguir as
recomendaes dadas acima e deve-se salvar os registros de interesse. As rotinas de tratamento de
interrupo sero apresentadas no item da unidade de software que trata de interrupes.
Os registros que controlam o sistema de interrupo so apresentados a seguir.
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
GIE/GIEH
Bit 7
PEIE/GIEL
TMR0IE
INT0IE
RBIE
TMR0IF
INT0IF
R/W 0
RBIF
Bit 0
INTCON
Se IPEN = 0
1 = Habilita as interrupes
0 = Desabilita as interrupes
Se IPEN = 1
Se IPEN = 0
Se IPEN = 1
Exsto Tecnologia
126
R/W 0
RBPU
Bit 7
1 = interrupo habilitada
0 = interrupo desabilitada
1 = interrupo habilitada
0 = interrupo desabilitada
1 = interrupo habilitada
0 = interrupo desabilitada
R/W 0
R/W 0
R/W 0
U0
R/W 0
INTEDG0
INTEDG1
INTEDG2
TMR0IP
U0
R/W 0
RBIP
Bit 0
INTCON2
1 = desabilita Pull-ups
0 = Habilita Pull-ups
1 = Transio de subida
0 = Transio de descida
1 = Transio de subida
0 = Transio de descida
1 = Transio de subida
0 = Transio de descida
Exsto Tecnologia
127
1 = Alta prioridade
0 = Baixa prioridade
1 = Alta prioridade
0 = Baixa prioridade
R/W 0
R/W 0
U0
R/W 0
R/W 0
U0
R/W 0
R/W 0
INT2IP
Bit 7
INT1IP
INT2IE
INT1IE
INT2IF
INT1IF
Bit 0
INTCON3
1 = Alta prioridade
0 = Baixa prioridade
1 = Alta prioridade
0 = Baixa prioridade
1 = interrupo habilitada
0 = interrupo desabilitada
1 = interrupo habilitada
0 = interrupo desabilitada
As demais interrupes tem seus bits de flag, habilitao prioridade distribudos nos registros
PIRx, PIEx e IPRx, respectivamente, como mostrado na tabela 1.4.
Exsto Tecnologia
128
Evento de Interrupo
Flag
Habilitao
Prioridade
1 = ocorreu
0 = no ocorreu
1 = Habilitada
0 = Desabilitada
1 = Alta
0 = Baixa
INTCON
INTCON
INT0IF
INT0IE
TMR0IF
TMR0IE
RBIF
RBIE
INTCON3
INTCON3
Interrupo externa INT1
INT1IF
INT1IE
Interrupo externa INT2
INT2IF
INT2IE
PIR1
PIE1
Leitura ou escrita da porta paralela escrava
PSPIF
PSPIE
Converso do AD completa
ADIF
ADIE
Recepo serial USART
RCIF
RCIE
Transmisso serial
TXIF
TXIE
Transmisso/recepo completa pelo MSSP
SSPIF
SSPIE
Interrupo do mdulo CCP1
CCP1IF
CCP1IE
Estouro do timer 2
TMR2IF
TMR2IE
Estouro do timer 1
TMR1IF
TMR1IE
PIR2
PIE2
Falha no oscilador
OSCFIF
OSCFIE
Alterao no estado do comparador
CMIF
CMIE
Trmino de escrita na EEPROM
EEIF
EEIE
Coliso no barramento SPI
BCLIF
BCLIE
Deteco de baixa/alta tenso
HLVDIF
HLVDIE
Estouro do timer 3
TMR3IF
TMR3IE
Interrupo do mdulo CCP2
CCP2IF
CCP2IE
Tabela 1.4 - Controle das interrupes
Interrupo externa INT0
Estouro do timer 0
Mudana de estado na porta B
4.6.2
INTCON2
Sempre alta
TMR0IP
RBIP
INTCON3
INT1IP
INT2IP
IPR1
PSPIP
ADIP
RCIP
TXIP
SSPIP
CCP1IP
TMR2IP
TMR1IP
IPR2
OSCFIP
CMIP
EEIP
BCLIP
HLVDIP
TMR3IP
CCP2IP
Interrupes no C18
O compilador C18 permite o trabalho com interrupes atravs da diretiva #pragma (outras
129
// *** Prottipos
void RTITimer1(void);
void RTITimer0(void);
// *** Configurao das RTI
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
_asm GOTO RTITimer0 _endasm
}
#pragma code
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO RTITimer1 _endasm
}
#pragma code
#pragma interruptlow RTITimer0
#pragma interrupt RTITimer1
// *** Funes
void RTITimer0 (void)
{
INTCONbits.TMR0IF = 0;
LATB = LATB^0x01;
// inverte o bit 0
}
void RTITimer1 (void)
{
PIR1bits.TMR1IF = 0;
LATB = LATB^0x02;
}
// inverte o bit 1
Exsto Tecnologia
130
Descrio
Converte em um valor de 8 bits sinalizado
Converte em um valor fracionrio
Converte em um valor de 16 bits sinalizado
Converte em um valor inteiro longo
Converte um valor de 8 bits sinalizado em uma string
Converte um valor de 16 bits sinalizado em uma string
Converte um valor inteiro longo sinalizado em uma
string
Tabela 2.6 Funes de converso de tipo
H funes que permitem identificar o evento que ocasionou ltimo reset. Essas funes
pertencem a biblioteca reset.h.
Funes
isBOR
isLVD
isMCLR
isPOR
isWDTTO
isWDTWU
isWU
StatusReset
Descrio
Retorna 1 se o reset foi causado por BOR
Retorna 1 se o reset foi causado por LVD
Retorna 1 se o reset foi causado atravs do pino MCLR
Retorna 1 quando os sistema acaba de ser ligado
Retorna 1 se ocorreu estouro do WatchDog
Retorna 1 se saiu do modo SLEEP por estouro do WatchDog
Retorna 1 se saiu do modo SLEEP por estouro do MCLR ou interrupo.
Seta os pinos POR e BOR. Isto deve ser feito aps um POR
Tabela 2.7 Funes de Reset
No portal B do PIC18 existem algumas funcionalidades especiais que podem ser configuradas
fazendo uso das funes apresentadas na tabela 2.8. Estas funes pertencem a biblioteca portb.h.
Exsto Tecnologia
131
Funes
ClosePORTB
CloseRB1INT
CloseRB2INT
CloseRB3INT
DisablePullups
EnablePullups
OpenPORTB
OpenRB1INT
OpenRB2INT
OpenRB3INT
Descrio
Desativa a interrupo por mudana de estado e resistores de
pull-up do portal B.
Desabilita as interrupes INT0, INT1 e INT2.
Desativa os resistores de pull-up internos do portal B
Ativa os resistores de pull-up internos do portal B
Configura interrupes e pull-up do portal B.
Habilita as interrupes INT0, INT1 e INT2.
Tabela 2.7 Funes do portal B
H ainda algumas macros que podem ser usadas em C para a execuo direta de instrues
do Assembly do PIC18. Essas funes esto definidas na biblioteca de cabealho de cada
microcontrolador. Essas macros so apresentadas na tabela 2.8
Funes
Nop()
ClrWdt()
Sleep()
Reset()
Rlcf(var, dest, access)
Rlncf(var, dest, access)
Rrcf(var, dest, access)
Rrncf(var, dest, access)
Swapf(var, dest, access)
4.7.1
Ao
Executa a instruo NOP
Executa a instruo CLRWDT zera o timer do WatchDog
Executa a instruo SLEEP
Executa a instruo RESET causa o reset do microcontrolador
Rotaciona var a esquerda atravs do bit C
Rotaciona var a esquerda (sem passar pelo bit C)
Rotaciona var a direita atravs do bit C
Rotaciona var a direita (sem passar pelo bit C)
Executa a instruo SWAPF
Tabela 2.8 Macros
Operaes matemticas
Um dos grandes benefcios de se usar uma linguagem de programao como C em lugar do
Exsto Tecnologia
132
Funes
acos
asin
atan
atan2
ceil
cos
cosh
exp
fabs
floor
fmod
frexp
ieeetomchp
ldexp
log
log10
mchptoieee
modf
pow
sin
sinh
sqrt
tan
tanh
Descrio
Cosseno inverso
Seno inverso
Tangente inversa
Tangente inversa de uma razo
Retorna o inteiro imediatamente superior
Cosseno
Cosseno hiperblico
Exponencial ex
Valor absoluto de um nmero fracionrio
Retorna o inteiro imediatamente inferior
Resto da diviso de nmeros fracionrios
Decompe um fracionrio em frao e exponencial
Converte um valor fracionrio no formato IEEE-754 para o formato Microchip.
Multiplica um valor por 2x
Calcula o logaritmo na base natural
Calcula o logaritmo na base 10
Converte um valor fracionrio no formato Microchip para o formato IEEE-754.
Mdulo de um fracionrio
Exponencial xy
Seno
Seno hiperblico
Raiz quadrada
Tangente
Tangente hiperblica
Tabela 2.5 Funes da biblioteca Math.h
133
Evite o uso de valores fracionrios; prefira o uso de valores inteiros. Assim, para valores
entre 0,00 e 5,00, poderamos utilizar uma varivel de 16 bits com valores entre 0 e 500.
Contudo, alguns cuidados devem ser tomados para aumentar a eficincia do cdigo gerado e
evitar problemas de difcil soluo.
Em primeiro lugar, a escolha do tipo de dado das variveis deve ser bem criteriosa. O cdio
mais enxuto gerado para operaes com variveis com mesmo comprimento do barramento de
dados do microcontrolador, ou seja, do tipo char. Quando variveis de tamanhos diferentes so
usados uma quantidade significativa de instrues necessria para implementar mesmo operaes
simples como soma e subtrao. Ou seja, de uma forma mais geral, quantos mais bytes uma varivel
tem, maior e mais lento o cdigo gerado para trat-la.
O uso de variveis do tipo ponto flutuante deve ser evitado ao mximo. Operaes com esse
tipo de dado consomem muita memria e demoram muito tempo para serem executadas. Uma boa
tcnica para se evitar o uso de ponto flutuante trabalhar com dados em escala, convertendo-os
para ponto flutuante somente quando realmente necessrio. Por exemplo, um programa que faz
uma medida de tenso que expressa um valor entere 0,000 e 5,000 volts, compara esse valor com
outros e o mostra em um display ocupa muita memria por processar dados do tipo ponto flutuante.
O mesmo programa pode ocupar menos memria se a faixa de valores for de 0 a 5000, ou seja,
pensar os valores todos multiplicados por 1000. Dessa maneira podem ser usados dados do tipo
int. Na apresentao dos valores em um LCD basta inserir uma vrgula no local adequado.
Outro cuidado a ser tomado com o tipo dos dados envolvidos em uma operao. Por
exemplo, uma expresso onde dois inteiros so somados e atribudos a um caracter gerar um
resultado errado.
Por fim, deve-se estar atendo para que valores intermedirios de uma expresso no
extrapolem a faixa de valores dos operandos da expresso. Por exemplo, o cdigo a seguir
aparentemente no contm erros.
Exsto Tecnologia
134
void main(void)
{
int x,y,z;
y = 15;
z = 500;
x = y * 20000 / z;
Se o clculo for feito com uma calculadora teremos como resultado 600. Porm o clculo
realizado pelo microcontrolador resulta em -55! Vejamos porque isso ocorre.
O compilador implementa rotinas em Assembly para realizar a operao, j que todos os
operandos envolvidos so inteiros. Mas a operao feita pela ordem com que os dados aparecem
na expreso. Na verdade a operao realizada em partes, com o uso de variveis internas de
rascunho. O trecho abaixo ilustra o processo, sendo rasc uma varivel interna de rascunho, do
tipo inteiro.
rasc = y * 20000
x = rasc / z
Ora, para y valendo 15 o valor armazenado em rasc 300.000, grande demais para ser
armazenado em um inteiro. Internamente durante a execuo do clculo o valor truncado, ou seja,
partes dele so desprezadas para caber em 16 bits. O valor de x calculado com base em um valor
incorreto e toda a operao fica prejudicada.
Problemas como esse tornam-se difceis de serem depurados por para alguns valores a
operao da certo. Por exemplo, se valesse 3 o resultado em x estaria correto.
Uma forma de corrigir o problema usar parnteses para indica a precedncia das
operaes. Sero realizadas primeiras as operaes dentro dos parnteses mais esternos. Para o
cdigo a seguir
void main(void)
{
int x,y,z;
y = 15;
z = 500;
x = y * (20000 / z);
}
135
rasc = 20000/z
x = y * rasc
espao
de
tempo),
rotinas
de
manipulao
de
dados
como
converses
136
Outro ponto sobre variveis que devemos observar quando utilizamos variveis globais e locais
com o mesmo nome. Isto causa uma confuso no compilador que podem geram problemas na
execuo do programa. Por exemplo, se for criada duas variveis, uma local e outra global com o
mesmo nome, o compilador vai dar preferncia para a ltima definida. Como sempre a ultima a ser
definida ser a local, a varivel global ficar inacessvel e comearo a acontecer problemas quando
tentar se utilizar a varivel global, pois ela ser identificada pelo sistema como local.
Exsto Tecnologia
137
5 Aplicaes
5.1 Display de 7 segmentos
Um dos modos mais comuns de apresentar informao para o usurio em um sistema
eletrnico atravs de displays de LEDs. Esse tipo de display nada mais que um conjunto de LEDs
numa disposio que permite formar diferentes caracteres conforme so acionados. Eles podem ser
de dois tipos: anodo comum ou catodo comum e podem ser vistos na figura 5.1 (b) e (c). A figura a
mostra a nomenclatura comumente utilizada para os segmentos que compe os dgitos e o ponto.
Figura 5.1 Displays de LED: (a) disposio dos segmentos, (b) catodo comum e (c) anodo comum
Como pode ser observado na figura 5.1, os displays de anodo comum tem seus segmentos
acionados quando aplicamos 0, ficando o anodo (comum) na alimentao. J os de catodo comum
so acionado com 1 e o catodo (comum) ligado a terra. No kit Pratic 628 contamos com displays
de catodo comum.
Para escrevermos um determinado valor no display necessrio converter, ou decodificar, o
valor originalmente em binrio para combinaes que acionem o display corretamente. Isso pode ser
feito atravs de circuitos integrados feitos para esse fim, mas por motivo de economia de
componentes mais interessante que essa converso seja feita por software e o acionamento seja
feito diretamente pelo microcontrolador. A converso deve ser feita obedecendo a tabela 5.1. Ela
corresponde a kit NEO 201 onde o display catodo comum e os pinos RD0, RD1, ..., RD6, RD7 esto
ligados aos segmentos A, B, ..., G, DP (DP o ponto decimal do display.)
Exsto Tecnologia
138
Valor
(hexadecimal)
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Catado Comum
g
0
0
1
1
1
1
1
0
1
1
1
0
1
0
1
1
f
1
0
0
0
1
1
1
0
1
1
1
0
0
1
0
0
e
1
0
1
0
0
0
1
0
1
0
1
1
0
1
0
0
d
1
0
1
1
0
1
1
0
1
1
0
1
1
1
1
0
c
1
1
0
1
1
1
0
1
1
1
1
1
1
1
1
1
Anodo comum
b
1
1
1
1
1
0
1
1
1
1
1
1
1
0
1
1
a
1
0
1
1
0
1
1
1
1
1
1
1
0
1
1
1
g
1
1
0
0
0
0
0
1
0
0
0
1
0
1
0
0
f
0
1
1
1
0
0
0
1
0
0
0
1
1
0
1
1
e
0
1
0
1
1
1
0
1
0
1
0
0
1
0
1
1
d
0
1
0
0
1
0
0
1
0
0
1
0
0
0
0
1
c
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
b
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
a
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
0
5.1.1
00000110,
//1
01011011,
//2
01001111,
//3
01100110,
//4
01101101,
//5
01111101,
//6
00000111,
//7
01111111,
//8
01100111};
//9
Displays multiplexados
Uma tcnica utilizada para reduzir custos de hardware a de multiplexar displays. Essa tcnica
Exsto Tecnologia
139
Basta acionar os diversos displays em seqncia de forma que todos sejam acionados a uma
taxa maior que 20 vezes por segundo. O circuito para fazer isso consiste em ligar os segmentos
respectivos de cada display em paralelo e acionar o terminal comum (anodo ou catodo) um por vez.
Dessa maneira com 7 pinos mais um pino por display eh possvel assinar diversos a dispalays.
5.1.2
valores em hexadecimal) e vrios displays podem ser usados conjuntamente usando a tcnicas da
multiplexacao. Porem, como apresentar valores com 123 ou 5000? Para isso e necessrio decompor
uma varivel em unidades, dezenas, centenas, etc... e apresentar individualmente cada parte em um
digito. Os trechos de cdigo abaixo decompem variveis do tipo char e int (no sinalizados) para
apresentao em displays. A partir delas possvel desenvolver rotinas para outros tipos de dados.
// *** Decomposio de unsigned char
//unid, dez, cent so caracteres no sinalizado
cent = valor / 100;
valor = valor
dez
= valor
% 100;
/ 10;
% 10000;
% 1000;
= valor
% 100;
/ 10;
Exsto Tecnologia
140
5.2 Buzzer
O buzzer (buzina) nada mais que um tipo de alto-falante simples, dimensionado para ter uma
melhor resposta em um faixa de freqncia especfica. Atravs deles conseguimos gerar apitos
(beeps) para sinalizaes de diversos tipos.
Existem buzzers que so auto oscilantes, aos quais basta aplicar uma tenso de alimentao
que geram um tom. Outros precisam que se envie um sinal chaveado para produzir seu som.
Exsto Tecnologia
141
C3
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
C2
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
C1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
C0
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
L3
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
0
L2
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
L1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
1
1
L0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
Tecla
1
2
3
A
4
5
6
B
7
8
9
C
*/F
0
#/E
D
No programa que utilizar leitura de teclado deve-se ativar os resistores de pull-up do portal
B. Caso contrrio, o teclado no funcionar corretamente.
No Neo201 os teclado est ligado ao PIC seguindo a tabela baixo:
Exsto Tecnologia
142
Teclado
C3
C2
C1
C0
L0
L1
L2
L3
PIC
PORTB,0
PORTB,1
PORTB,2
PORTB,3
PORTB,4
PORTB,5
PORTB,6
PORTB,7
I/O
Sada
Sada
Sada
Sada
Entrada
Entrada
Entrada
Entrada
LE_TECLADO
C0 <- Falso
C1<-Verdadeiro
C2 <- Verdadeiro
L0 = Falso?
N
N
L1 = Falso?
N
L2 = Falso?
W <- '4'
N
L3 = Falso?
W <- '7'
S
W <- ' * '
5.3.1
uma funcionalidade pensada para permitir associar uma interrupo ao teclado. Essa funcionalidade
a interrupo por mudana de estado na porta B. O evento que sinaliza essa interrupo eh a
mudana do estado dos pinos RB7, RB6, RB5 ou RB4. Observe que esses pinos esto ligados a linhas
do teclado, portanto so entradas. Assim, qualquer tecla pressionada causar o pedido de
Exsto Tecnologia
143
interrupo. Ao se fazer o tratamento da interrupo faz-se a varredura para determinar qual a tecla
lida. Mas ateno, para que esse procedimento funcione as colunas devem ser mantidas sempre em
0 quando fora do tratamento de interrupo.
Exsto Tecnologia
144
Descrio do
Comando
Controle do display
Limpeza do Display
com retorno do cursor
a
Retorno do cursor 1
linha e da mensagem
sua posio inicial
Controle do Cursor
Sentido de
deslocamento do
cursor na entrada de
um novo caracter
Deslocamento da
mensagem com a
entrada de um novo
caracter
Deslocamento da
mensagem sem
entrada de novos
caracteres
Endereo da primeira
posio ( esquerda)
Modo
RS
R/W
0
0
0
0
0
0
Cdigo do Comando
(Hexadecimal)
0C
0A, 08
01
02
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0E
0C
0F
10
14
02
0D
04
06
Para esquerda
Para direita
0
0
0
0
07
05
Para esquerda
Para direita
0
0
0
0
18
1C
0
0
0
0
80
C0
1 Linha
a
2 Linha
Os endereos de cada posio no display so dados pela tabela abaixo. Para que um caracter
seja escrito em uma determinada posio, envia-se o valor dessa posio como comando e em
seguida envia-se o caracter a ser escrito.
80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F
C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF
Exsto Tecnologia
145
Exsto Tecnologia
146
A tabela seguinte apresenta a funo de cada um dos pinos do display e em como eles esto
ligados ao PIC.
Exsto Tecnologia
147
5.4.1
Pino
Smbolo
Funo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Vss
Vdd
Vo
RS
R/W
EN
D0
D1
D2
D3
D4
D5
D6
D7
GND
+5V
Controle de contraste
Seleo de modo
Leitura/Escrita
Habilitao
PORTE, 0
PORTE, 2
PORTE, 1
PORTD, 0
PORTD, 1
PORTD, 2
PORTD, 3
PORTD, 4
PORTD, 5
PORTD, 6
PORTD, 7
Via de
Dados
A biblioteca XLCD
O compilador C18 vem com uma biblioteca genrica pra displays LCD chamada XLCD. Essa
biblioteca possui as funes listadas abaixo, quer permitem inicializar o display e escrever simples
caracteres ou strings. Note que existem diferentes tipos de funo dependendo se a informao a ser
escrita est na memria de dados (RAM) ou na memria de programa (FLASH).
Funo
Prottipos
BusyXLCD
putcXLCD
void
char
void
char
putsXLCD
putrsXLCD
ReadAddrXLCD
SetCGRamAddr
SetDDRamAddr
WriteCmdXLCD
WriteDataXLCD
OpenXLCDD
ReadDataXLCD
OpenXLCD( unsigned
lcdtype );
OpenXLCD( unsigned
lcdtype );
Descrio
Retorna 1 se o LCD estiver realizando
alguma operao e 0 se estiver livre pra
receber novos comandos.
Inicializa o LCD.
Escreve um caracter no LCD
Exsto Tecnologia
148
Para usar a biblioteca XLCD necessrio fazer algumas alteraes nas definies da biblioteca
para o hardware que estiver sendo usado e recompilar os arquivos. Para facilitar, os arquivos que
fazem uso dessa biblioteca no curso j sofreram essas alteraes. Baseie-se neles para novos
projetos.
R/W x
U0
R/W 0
R/W x
R/W 0
R/W 0
EEPGD
Bit 7
CFGS
FREE
WRERR
WREN
WR
R/W 0
RD
Bit 0
EECON1
149
o
1 = Uma operao de leitura foi interrompida antes do fim (por qualquer reset)
1 = Permite escrita
0 = Impede escrita
o
1 = Inicia o processo de leitura da EEPROM. Esse bit pode apenas ser setado em
software. Se EEPGD = 1 (acesso a FLASH) esse pino no pode ser setado
5.5.1
Memria EEPROM
Os PIC18F452 e 18F4550 possuem 256 bytes de memria EEPROM para dados. A EERPOM
serve para armazenar dados que podem ser alterados com a execuo do programa, mas que no se
pretende perder caso a tenso de alimentao seja retirada Essa memria mapeada
separadamente das memrias RAM e FLASH, tendo endereos de 00h a FFh. A forma de acesso a
memria EEPROM do PIC18 muito semelhante a da linha PIC16.
A memria EEPROM pode ser acessada byte a byte, tanto para leitura como para escrita. Na
verdade, quando uma operao de escrita realizada, automaticamente feito um ciclo de
apagamento e escrita do endereo em questo.
A memria EEPROM opera para leitura ou escrita em toda a faixa de tenso. garantido um
tempo mnimo de reteno de dados de 40 anos. A memria suporta no mnimo 100.000 ciclos de
escrita, sendo o valor tpico para condies normais de operao de 1.000.000 de ciclos. Cada
operao de escrita demora 4ms para ser executada.
O acesso a memria EEPROM feita de forma indireta, atravs de registros de controle e
passagem de parmetros. Por isso, podemos considerar que seu comportamento mais semelhante
Exsto Tecnologia
150
EEPROM
EEADR
EEADR
EEADR
EEADR
A memria EEPROM possui dois nveis de segurana, controlados pelos bits de configurao
CPD e WRTD. CPD bloqueia leituras e escritas externas da EEPROM, liberando-as somente se o
microcontrolador for totalmente apagado. J WRTD bloqueia escritas internas e externas. Em todos
os casos as operaes de leitura interna so permitidas.
5.5.1.1
Interrupo
O bit EEIF setado toda vez que uma operao de escrita terminada. Isso permite iniciar o
Exsto Tecnologia
151
5.5.1.2
Funes
O acesso memria feito seguindo uma seqncia obrigatria de comandos. O manual do
microcontrolador apresenta rotinas Assembly para esse fim. Contudo, o compilador C18 no prov
rotinas para acesso a EEPROM.
Segue abaixo os cdigos fonte de rotinas que realizam leitura e escrita da EEPROM interna do PIC.
unsigned char ReadEEPROM (unsigned char address)
//**************************************************************
//
ROTINA PARA LEITURA DA EEPROM
//
ENTRADA: address -> endereo de leitura da EPROM
//
SADA: Retorno
-> Retorna o valor contido na EPROM
//**************************************************************
{
EEADR = address;
// EEADR recebe o endereo
EECON1bits.CFGS = 0;
// seleciona acesso a memrias
EECON1bits.EEPGD = 0;
// seleciona acesso a EEPROM
EECON1bits.RD = 1;
// inicia o processo de escrita
return(EEDATA);
// retorna o dado lido da EEPROM
}
void
WriteEEPROM (unsigned char address, unsigned char data)
//*************************************************************
//
rotina p escrita na e2prom
//
entrada: address -> indica posio da memria e2prom
//
data
-> dados que sero escritos
//
sada:
nulo
//************************************************************
{
EEADR = address;
// EEADR recebe o endereo
EEDATA = data;
// EEDATA recebe o dado
EECON1bits.CFGS = 0;
// seleciona memrias
EECON1bits.EEPGD = 0;
// seleciona memria EEPROM
EECON1bits.WREN = 1;
// desliga proteo de escrita
INTCONbits.GIE = 0;
// desabilita interrues
EECON2 = 0x55;
// seqncia
EECON2 = 0xAA;
//
obrigatria
EECON1bits.WR = 1;
// inicia processo de escrita
while(!PIR2bits.EEIF); // aguarda completar a escrita
INTCONbits.GIE = 1;
// reativa as interrupes
PIR2bits.EEIF = 0;
// zera o flag de escrita
EECON1bits.WREN = 0;
// liga a proteo de escrita
}
Exsto Tecnologia
152
Flash
TBLPTRU
TBLPTRH
TBLPTRL
TABLAT
Exsto Tecnologia
153
O processo de escrita exige que antes o quadro de 64 bytes seja apagado. Para isso o
mesmo ponteiro TBLPTR carregado para apontar o quadro. como se a memria fosse divida em
quadros de 64 bytes e um endereo de 16 bits (os 16 bits vlidos mais significativos de TBLPTR)
indicassem o quadro, enquanto os 6 bits menos significativos so ignorados na operao. Em seguida
executado o processo de apagamento, fazendo o bit FREE de EECON1 igual a 1 e executando um
comando de escrita.
Para gravao dos dados no PIC18F452 devem ser carregados 8 bytes atravs da instruo
TBLWT de escrita de tabela (table write). Os dados no so gravados diretamente na memria FLASH,
mas armazenados em um conjunto de registros de carga (holding registers), para posteriormente
serem gravados de uma s vez. Nessa operao os 19 bits vlidos mais significativos de TBLPTR
apontam o bloco de 8 bytes a ser gravado enquanto os 3 bits menos significativos indicam o registro
de carga que recebe os dados. Em seguida realizada uma operao de gravao (com o bit FREE em
0). Um cuidado que se deve tomar que TBLPTR deve apontar para o bloco de 8 bits no momento
da gravao.
Para a gravao do PIC18F4550 o raciocnio o mesmo, porm os blocos so de 64 bytes.
Flash
TBLPTRU
TBLPTRH
TBLPTRL
Registros de
carga
00
01
02
03
04
05
06
07
154
Existem trs nveis de proteo de cdigo da memria flash, configurados atravs dos
bits de gravao:
External Block Table Read (bit EBTRn): permite apenas leituras internas e o cdigo
que executa a leitura estiver no mesmo setor de memria do dado lido.
Uma observao importante que, apesar dos bits de configurao poderem ser alterados
por instrues de escrita na FLASH (fazendo o bit CFGS igual a 1) os bits de Code-Protect s so
zerados se houver uma instruo para apagar a memria inteira; esse comando s pode ser dado
externamente por um gravador.
5.5.2.1
Interrupo
Do mesmo modo que para a EEPROM, o bit EEIF setado toda a vez que o processo de
gravao finalizado. No entanto, ao contrrio do que ocorre com EEPROM, o programa para de ser
executado enquanto dados so gravados na FLASH, isto , obrigatoriamente o tempo de gravao
ser um tempo morto para o programa.
Continua existindo a recomendao de se desativar as interrupes durante a gravao,
apesar de que, pelos motivos apresentados acima, se ocorresse uma interrupo est no poderia
ser tratada.
Exsto Tecnologia
155
6 Perifricos
Uma das caractersticas que explica o sucesso dos microcontroladores a presena de
diversos perifricos. Esses componentes agregados ao core permitem realizar diversas tarefas,
expandindo as capacidades do componente. Como trabalham de forma independente do
processador e possuem interrupes, eles realmente trabalham em paralelo com o processador na
execuo das tarefas dos programas. O PIC18F4550 particularmente rico em perifricos e possui
um perifrico USB, que um dispositivo especial dentro da famlia de microcontroladores.
Nessa seo apresentaremos os principais perifricos do PIC18F4550. Alm das descries
do funcionamento dos perifricos so apresentadas as bibliotecas de funes de perifricos que
acompanham o compilador C18. Como o foco do curso a linguagem C, no detalharemos o
funcionamento dos bits de controle de perifricos, uma vez que isso feito pelas funes das
bibliotecas de cada perifrico. Focaremos principalmente no funcionamento e configurao dos
perifricos e no uso das funes em C. Os eventos causadores de interrupo so apresentados; os
bits associados a cada interrupo so apresentados no captulo 4.6 Interrupes.
Exsto Tecnologia
156
Observe que existe um arquivo de ajuda para cada biblioteca de perifrico, que pode ser
acessado diretamente ou atravs do arquivo principal que C18HWeriferalIntro.htm. Os arquivos de
ajuda esto escritos em ingls, obviamente, sendo necessria um conhecimento mnimo dessa
linguagem para os compreender, assim como para entender o manual de qualquer componente
eletrnico.
Para exemplificar o uso vamos explorar a biblioteca do conversor AD (AD Converter.HTM). Os
demais arquivos sempre seguiram esse padro. Temos a tela inicial abaixo, que apresenta um link
para o contedo da ajuda.
Exsto Tecnologia
157
Exsto Tecnologia
158
Um pouco alm apresentada uma tabela onde possvel identificar qual a verso de AD do
microcontrolador utilizado. Dependendo do perifrico podem existir diferenas nas funes
conforme o microcontrolador utilizado. Estar indicado para cada funo a que verso de perifrico
se destina e a tabela deve ser sempre consultada para definir a verso do perifrico a ser usado. Por
exemplo, na figura abaixo podemos identificar que o PIC18F4550 possui um ADC de verso ADC_V5.
Exsto Tecnologia
159
Explorando um pouco mais a funo OpenADC veremos como a configurao do ADC. Para
cada perifrico existir uma funo Open... que o inicializa atravs de uma srie de parmetros. Essa
funo possuir um ou mais parmetros de entrada, que sero uma operao E entre diversas
constantes definidas, que representam as configuraes possveis do perifrico. Em C o trabalho de
configurar o perifrico resume-se a definir esses parmetros de configurao, ficando a cargo do
compilador, atravs da funo, de configurar bits e registros. Os diferentes parmetros so
agrupados atravs do operador & que, como sabemos, realiza a operao E bit-a-bit. A figura abaixo
mostra como a funo se apresenta na ajuda (note que essas funo a que se aplica a verso
ADC_V5, portanto pode ser usada para o PIC18F4550).
Exsto Tecnologia
160
Transcrevemos a seguir a ajuda dessa funo na integra, para se perceber seus aspectos
principais. Note que, ao final existe um exemplo do uso da funo, muitas vezes til.
2.4.3
OpenADC (ADC_V3, 4, 5, 6)
Arguments:
Config
A bitmask that is created by performing either bitwise AND operation (&) or
bitwise OR operation (|), configurable either way as shown in the example at
the end of this file, with a value from each of the categories listed below.
These values are defined in the file adc.h.
A/D clock source:
ADC_FOSC_2
FOSC / 2
ADC_FOSC_4
FOSC / 4
ADC_FOSC_8
FOSC / 8
ADC_FOSC_16 FOSC / 16
Exsto Tecnologia
161
ADC_FOSC_32 FOSC / 32
ADC_FOSC_64 FOSC / 64
ADC_FOSC_RC Internal RC Oscillator
A/D result justification:
ADC_RIGHT_JUST
ADC_LEFT_JUST
Result in Most Significant bits
A/D acquisition time select:
ADC_0_TAD
0 Tad
ADC_2_TAD
2 Tad
ADC_4_TAD
4 Tad
ADC_6_TAD
6 Tad
ADC_8_TAD
8 Tad
ADC_12_TAD
12 Tad
ADC_16_TAD
16 Tad
ADC_20_TAD
config2
20 Tad
Channel 0
ADC_CH1
Channel 1
ADC_CH2
Channel 2
ADC_CH3
Channel 3
ADC_CH4
Channel 4
ADC_CH5
Channel 5
ADC_CH6
Channel 6
For ADC_V4:
ADC_CH0
Channel 0
ADC_CH1
Channel 1
ADC_CH2
Channel 2
ADC_CH3
Channel 3
Channel 0
ADC_CH1
Channel 1
ADC_CH2
Channel 2
ADC_CH3
Channel 3
ADC_CH4
Channel 4
ADC_CH5
Channel 5
ADC_CH6
Channel 6
ADC_CH7
Channel 7
ADC_CH8
Channel 8
ADC_CH9
Channel 9
ADC_CH10
Channel 10
ADC_CH11
Channel 11
Exsto Tecnologia
162
ADC_CH12
Channel 12
ADC_CH13
Channel 13
ADC_CH14
Channel 14
ADC_CH15
A/D Interrupts:
Channel 15
ADC_INT_ON
Interrupts enabled
ADC_REF_VREFPLUS_VREFMINUS
ADC_REF_VREFPLUS_VSS
ADC_REF_VDD_VSS
Portconfig
For ADC_V3:
The value of portconfig can be any value from 0 to 127, few are defined
below
ADC_0ANA
All digital
ADC_1ANA
analog:AN0
ADC_2ANA
analog:AN0-AN1
ADC_3ANA
analog:AN0-AN2
ADC_4ANA
analog:AN0-AN3
ADC_5ANA
analog:AN0-AN4
ADC_6ANA
analog:AN0-AN5
ADC_7ANA
analog:AN0-AN6
For ADC_V4:
The value of portconfig can be any value from 0 to 15, few are defined below
ADC_0ANA
All digital
ADC_1ANA
analog:AN0
ADC_2ANA
analog:AN0-AN1
ADC_3ANA
analog:AN0-AN2
ADC_4ANA
analog:AN0-AN3
analog:AN0
digital:AN1-AN15
ADC_2ANA
analog:AN0-AN1
digital:AN2-AN15
ADC_3ANA
analog:AN0-AN2
digital:AN3-AN15
ADC_4ANA
analog:AN0-AN3
digital:AN4-AN15
ADC_5ANA
analog:AN0-AN4
digital:AN5-AN15
ADC_6ANA
analog:AN0-AN5
digital:AN6-AN15
ADC_7ANA
analog:AN0-AN6
digital:AN7-AN15
ADC_8ANA
analog:AN0-AN7
digital:AN8-AN15
ADC_9ANA
analog:AN0-AN8
digital:AN9-AN15
ADC_10ANA
analog:AN0-AN9
digital:AN10-AN15
ADC_11ANA
analog:AN0-AN10
digital:AN11-AN15
ADC_12ANA
analog:AN0-AN11
digital:AN12-AN15
ADC_13ANA
analog:AN0-AN12
digital:AN13-AN15
Exsto Tecnologia
163
Remarks:
File Name:
Code Example:
ADC_14ANA
analog:AN0-AN13
ADC_15ANA
All analog
digital:AN14-AN15
This function resets the A/D-related registers to the POR state and then
configures the clock, result format, voltage reference, port and channel.
adcopen.c
With AND mask:
OpenADC( ADC_FOSC_32
&
ADC_RIGHT_JUST
&
ADC_12_TAD,
ADC_CH0
&
ADC_REF_VDD_VSS
ADC_INT_OFF, 12
With OR mask:
OpenADC( ADC_FOSC_32
ADC_RIGHT_JUST
ADC_12_TAD,
ADC_CH0
ADC_REF_VDD_VSS
ADC_INT_OFF, 12
&
);
|
|
|
|
);
Timer 0
O Timer 0 do PIC18 um timer de 16 bits, mas pode operar em modo 8 bits para manter
Exsto Tecnologia
164
Interrupo
O evento que ocasiona a interrupo o overflow do timer 0, que depende da configurao
Timer 1
O timer 1 um timer de 16 bits. Ele pode operar em dois modos: leitura e escrita em 8 bits
(compatvel com PIC16) e leitura e escrita em 16 bits. No modo leitura e escrita em 8 bits os dois
registros do timer so alterados separadamente, conforme os valores so carregados. No modo de
16 bits existe um sistema que carrega o valor de/para um registro auxiliar quando feita uma
operao de como byte menos significativo; dessa maneira as operaes acontecem de forma
simultnea nos dois registros.
A figura 3.3 apresenta o diagrama em blocos do timer 1 para o modo de acesso em 16 bits.
Exsto Tecnologia
165
Interrupo
O evento associado a interrupo do timer 1 o overflow da contagem de 16 bits.
6.2.3
Timer 2
O timer 2 um temporizador de 8 bits. Ele apresenta algumas caractersticas que diverem
dos timers vistos anteriormente. Na figura 3.4 pode-se observar o diagrama em blocos desse timer.
Exsto Tecnologia
166
Interrupo
O evento que dispara a interrupo do timer 2 a contagem de n eventos de coincidncia
Timer 3
O timer 3 funciona da mesma maneira que o timer 1, conforme pode ser observado na figura
3.5. No modo contador o sinal de clock aplicado ao mesmo pino do timer (RC0). Alm disso, se o
oscilador do timer 1 estiver ativo, tambm pode fornecer sinal de clock par o timer 3.
Exsto Tecnologia
167
Interrupo
O evento associado interrupo do timer o overflow da contagem de 16 bits.
6.2.5
Funes
As funes do C18 para uso dos timers esto contidas na biblioteca timers.h. A seguir
Prottipos
OpenTimerx
CloseTimerx
ReadTimerx
WriteTimerx
Descrio
Configura e ativa o timer x
Desativa o timer x
L o timer x
Escreve no timer x
Exsto Tecnologia
168
Quando trabalhamos com microcontroladores, podemos ter situaes onde desejamos uma
comparao rpida entre dois ou mais valores analgicos para que seja tomada alguma ao sem
uma interveno do programa principal. Isso poderia ser vantajoso se fosse feito de forma
automtica pelo microcontrolador ao invs de se ter mdulos A/D para fazer este tipo de tarefa.
No microcontrolador 18F4550 temos um perifrico que possui essa caracterstica. O modulo de
comparao analgica contem dois comparadores que podem ser configurados de vrias formas
diferentes. As entradas podem ser pinos multiplexados de entrada do portal A (RA0 at RA5), bem
como podem ser referencias de tenses obtidas dentro do microcontrolador. As sadas digitais
podem ser obtidas com valores normais ou inversos, estando disponveis na sada do mdulo
comparador ou ainda podem ser lidas atravs do registro de controle.
Abaixo temos o registro que serve para configurao da entrada e da sada do mdulo
comparador dentro do microcontrolador.
Registro CMCON:
Quando C2INV for zero, temos o valor um quando o valor de entrada Vin+ do
comparador 2 for maior que Vin- e zero quando o valor de entrada de Vin+ for
menor que Vin-;
Quando C1INV for zero, temos o valor um quando o valor de entrada Vin+ do
comparador 1 for maior que Vin- e zero quando o valor de entrada de Vin+ for
menor que Vin-;
C2INV e C1INV: Como j pde ser notado, quando possuem valor um inverte o valor de
sada do comparador C2 e C1 respectivamente e quando em zero no inverte;
Exsto Tecnologia
169
CIS: Este registro serve para selecionar a que pinos estaro conectados os Vin- dos
comparadores C1 e C2. Assim, quando usamos CM2:CM1:CM0 = 110 temos:
Exsto Tecnologia
170
Quando CIS for igual a zero, C1 Vin- estar conectado a RA0/AN0 e C2 conectado
a RA1/AN1.
6.3.1
6.3.1.1
Funcionamento do Comparador
Valores de entrada e referncia do comparador
Abaixo podemos ver a figura de um dos comparadores, bem como a relao entre os valores
analgicos colocados na entrada e o sinal digital. Quando a entrada analgica Vin+ menor que a
entrada analgica Vin-, a sada do comparador tambm ter um valor de sada de nvel lgico baixo.
Quando a entrada analgica em Vin+ maior que a entrada analgica Vin-, a sada do comparador
possui sua sada com um nvel lgico alto. As reas em negrito da sada do comparador representam
a incerteza do valor de sada devido aos offsets e o tempo de resposta das entradas.
171
Sada do comparador
As sadas dos comparadores so lidas atravs do registro CMCON como pde ser visto acima.
Estes bits so somente para leitura. A sada do comparador pode tambm estar ligada diretamente
aos pinos de entrada e sada RA4 e RA5. Quando habilitados, os multiplexadores da sada de cada um
destes pinos so utilizados para a sada do comparador.
Exsto Tecnologia
172
6.3.1.4
173
Interrupo
Prottipos
Open_ancomp
Close_ancomp
void Close_ancomp(void);
Descrio
Configura e ativa o comparador
analgico.
Desativa comparador analgico e
sua interrupo.
Para ter acessos as sadas dos comparadores acessamo-los diretamente atravs dos bits
CMCONbits.C1OUT e CMCONbits.C2OUT.
Quantizao;
Taxa de Amostragem e;
Linearidade.
Exsto Tecnologia
6.4.1
Quantizao
Entre os dois valores extremos da escala de valores analgicos que devem ser convertidos
para a forma digital existem infinitos valores intermedirios, o que justamente caracteriza uma
grandeza que varia de forma anloga ou analgica.
Entretanto, no podemos simplesmente representar o valor analgico atravs de bits, pois
para infinitos valores deveramos ter infinitos bits para representar todas as variaes possveis. Para
realizar a converso de um sinal analgico para um valor digital deve ser definido o nmero de bits
em que o valor ser representado no universo digital e, a partir disso, definir em quantas faixas de
valores digitais a faixa de valores analgicos ser dividida.
Assim, por exemplo, se utilizarmos na converso 4 bits, teremos a possibilidade de
representar apenas 16 valores na escala total de valores analgicos, e se usarmos 8 bits poderemos
representar 256 valores, conforme indica a figura 52.
Se tivermos uma escala de 0 a 8 V, por exemplo, e usarmos 4 bits para a converso, os
"degraus"da escada de converso tero 0,5 V de altura, o que significa que este conversor ter uma
resoluo de 0,5 V. Se usarmos um conversor A/D de 8 bits (256 "degraus"de resoluo) para fazer
um voltmetro de 0 a 10 V, por exemplo, a resoluo deste voltmetro ser de 10/256 ou pouco
menos de 0,04 V.
Este comportamento "digital" pode ser observado em muitos instrumentos comuns, tais
como os multmetros digitais em que, se a grandeza medida estiver num valor intermedirio entre
dois degraus da resoluo do conversor A/D, o valor apresentado no display oscilar entre eles.
Exsto Tecnologia
174
Evidentemente, tanto maior a preciso na converso quanto mais bits so utilizados pelo
conversor.
Tipos com 8 a 16 bits so comuns nas aplicaes industriais e em medidas, dependendo da
quantidade de "passos" desejados na converso ou a resoluo. Em aplicaes de alta fidelidade
pode-se trabalhar com at 24 bits.
Um fator importante que deve ser escolhido no se especificar o nmero de bits de um
conversor o rudo inerente ao circuito. Por exemplo, supondo uma aplicao onde valores de
tenso entre 0 e 5V devem ser convertidos e onde se sabe que existe um rudo da ordem de 20mV
no sinal a ser convertido. Ora, se usarmos um conversor A/D de 12 bits, por exemplo, teremos passos
de quantizao de 5V/(212), isto , da ordem de 1,2 mV. Portanto teremos uma preciso de
converso que no representa uma preciso de medida, pois o sinal de interesse possui uma
impreciso gerada pelo rudo. Aplicaes com conversores A/D de 16 ou 24 bits exigem circuito
extremamente imunes a rudo e interferncia para poder funcionar de forma correta.
6.4.2
Taxa de Amostragem
175
observar uma forma de onda de 10 MHz, deve, para ter uma definio razovel, realizar pelo menos
100 milhes de amostragens por segundo (10 pontos por ciclo).
O conceito de taxa de amostragem est ligado tambm ao Teorema da Amostragem, a
determinao da freqncia mxima na entrada de um conversor A/D e ao dimensionamento dos
chamados filtros anti-aliasing. Contudo no entraremos em detalhes sobre esses assuntos, sendo
essa discusso mais adequada para um curso de processamento de sinais.
6.4.3
Linearidade
A curva de converso da grandeza analgica para a forma digital deve ser linear para um bom
conversor. Isso significa que no existem desvios na correspondncia entre o valor analgico e a
sada digital ao longo da escala de valores em que o conversor deve trabalhar. Em outras palavras,
em um grfico onde um eixo representa os valores analgicos de entrada e o outro os valores digitais
de sada, a funo de transferncia deve ser idealmente uma reta.
No entanto, na prtica podem ocorrer pequenos desvios, de acordo com o que mostra a
figura abaixo.
6.4.4
Desenvolvimento
Para fazer uma converso de sinais analgicos para a forma digital existem diversas tcnicas
que so empregadas nos circuitos comerciais, muitas delas encontradas em circuitos integrados que
Exsto Tecnologia
176
Na sada deste circuito temos uma chave eletrnica ou chaveador, que determina o instante
exato em que a leitura do sinal deve ser feita. A chave fecha ento por uma frao de segundo (numa
freqncia que depende da taxa de amostragem) permitindo que o sinal carregue o capacitor C.
Assim, quando a chave abre, esperando a leitura seguinte, o capacitor tem armazenado o
valor da grandeza analgica a ser convertida. Esta tenso no capacitor mantida no circuito
conversor atravs de um buffer de sada durante o tempo que ele necessita para isso.
Exsto Tecnologia
177
Na figura abaixo temos um grfico que indica de que modo tenso de entrada varia e o
circuito de amostragem e reteno mantm a sada constante durante os intervalos de converso
(que correspondem aos "degraus").
6.4.5
Aplicao
Existem vrias formas de se construir conversores A/D, sendo que cada um tem a sua
caracterstica de funcionamento que deve ser levada em conta, na hora de se construir e/ou escolher
para sua aplicao. Temos uma relao de possveis combinaes:
Sigma-Delta.
O Sigma-Delta uma das importantes tcnicas de converso A/D, utilizada em aplicaes que se
deseja uma altssima velocidade de converso, como nos DSPs (Digital Signal Processing).
Exsto Tecnologia
178
Portanto, vimos que a converso do sinal analgico para o digital sempre existe uma perda de
informao seja ela de amplitude - caracterstica da quantidade de bits utilizados - ou de fase do sinal
- caracterstica da taxa de amostragem empregada.
Vimos que o erro mximo que pode ocorrer na quantizao de metade do valor de nvel da
quantizao assim sendo quanto maior for o nmero de bits do conversor menor ser o seu erro.
O erro de "Aliasing" facilmente evitado utilizando o teorema da amostragem que "Para que
uma determinada freqncia f1 do sinal analgico seja ou possa ser completamente reconstituda a
taxa amostral, no processo de digitalizao, deve ser no mnimo igual a 2*f1"
Conhecidas as imperfeies da converso podemos ento saber quais os fatores que influem na
escolha de um conversor A/D e assim prever melhor os ajustes que sistema dever sofrer, pois j
conhecida as suas fraquezas.
6.4.6
Exsto Tecnologia
179
O mdulo ADC realiza todo o processo de Sample and Hold (Amostragem e reteno). Esse
processo realizado quando uma determinada entrada selecionada e inicia-se a carga de um
capacitor interno CHOLD. Aps o tempo de carga do capacitor (THOLD) a entrada desconectada e
inicia-se o processo de converso da tenso armazenada no capacitor, que feito pelo mtodo de
aproximaes sucessivas. A figura 3.12 apresenta o circuito equivalente da entrada da do ADC.
Exsto Tecnologia
180
A resistncia da fonte da tenso a ser convertida (Rs no circuito acima) no deve ser superior
a 10k, caso contrrio o capacitor CHOLD pode no ser completamente carregado quando se iniciar
a converso resultando em uma medida incorreta.
Alm disso, o processo de converso s poder ser iniciado depois de decorrido o tempo de
carga do capacitor (THOLD). A ativao do processo de converso ser explicada mais adiante.
O tempo total de amostragem, que vai do instante em que o canal a ser amostrado
selecionado ao momento em que o resultado da converso armazenado nos registros de resultado
do AD, a soma do tempo de aquisio com o tempo de converso. O tempo de aquisio varia em
funo da temperatura, da tenso de alimentao e da resistncia da fonte do sinal a ser amostrado.
Para temperaturas inferiores a 25oC, alimentao de 5V o tempo de aquisio encontra-se no
intervalo:
Interrupo
Exsto Tecnologia
181
Funes
O As funes para uso do ADC esto na biblioteca adc.h.
Funo
Prottipos
BusyADC
Descrio
Retorna 1 se o ADC estiver
realizando uma converso.
CloseADC
ConvertADC
OpenADC
Configura o ADC
SetChanADC
ReadADC
L o resultado da converso
O mdulo CCP (Captura, Comparao e PWM) permite realizar uma srie de funes por
hardware. Para exemplificar a versatilidade desse perifrico, podemos citar como exemplos de sua
utilizao: gerao de sinais de PWM, gerao de sinais analgicos, medida de freqncia, medida de
largura de pulso, dentre vrias.
Existem trs modos de operao:
Captura
Comparao
Esse perifrico controlado por dois registros que operam conjuntamente como um parmetro
de 16 bits (CCP1H e CCP1L) e um registro de controle (CCP1CON). Alm disso, dependendo do modo
selecionado, o mdulo CCP interagem com os timers.
Exsto Tecnologia
182
Por fim, existe uma interrupo associada ao mdulo CCP, que disparada em situaes
diferentes para cada modo.
6.5.1 Modo captura
No modo captura, o valor do timer 1(TMR1H:TMR1L) armazenado
armazenado nos registros CCP1H:CCP1L
quando ocorre um evento. Alm disso, o flag CCP1IF setado, permitindo acionar a interrupo.
Esse evento pode ser a ocorrncia de:
Para operao nesse modo, o terminal RB3/CCP1 deve estar configurado como entrada.
entrada O timer
deve estar no modo temporizador ou no modo contador sncrono.
O modo captura
tura pode ser utilizado para determinar a diferena de tempo entre dois eventos.
Isso pode ser feito de duas formas. No primeiro evento, o timer reiniciado
reiniciado e no segundo, o valor
capturado do timer 1 multiplicado pelo perodo do seu clock corresponde ao tempo
t
transcorrido
entre os dois eventos. Outra forma deixar o timer 1 incrementado livremente e capturar seu valor
nos dois eventos. Fazendo uma subtrao entre os dois valores capturados, temos o tempo entre os
eventos. Esse procedimento pode ser utilizado
utilizado para medir velocidade e freqncias (nesse caso
temos o perodo e sabemos que f = 1/T).
Os modos onde o evento de captura a ocorrncia de 4 ou 16 transies podem ser vistos
como tendo uma pr-escala
escala na entrada. Essa pr-escala
pr escala pode ser til para trabalhar
tr
com sinais de
freqncias altas. Sua contagem s pode ser zerada com a mudana de modo do CCP.
A figura abaixo apresenta o diagrama em blocos para o modo de captura.
Exsto Tecnologia
183
184
Interrupes
O bit CCPxIF quando ocorre um evento de captura.
6.5.1.2 Funes
As funes associadas ao modo de captura
captura esto na biblioteca capture.h e so apresentadas a
seguir lembrando que o PIC18F4550 possui um mdulo CCP2 convencioal e um mdulog ECCP1
(Enhanced CCP).
Funo
Prottipos
CloseCapture2
OpenCapture2
void OpenCapture2(unsigned
OpenCapture2(
char config);
ReadCapture2
CloseECapture1
OpenECapture1
void OpenECapture1(unsigned
OpenEC
char config);
ReadECapture1
Descrio
Desativa o modo captura (CCP)
(CC
Configura o mdulo de captura
(CCP)
L o valor capturado
Desativa o modo captura (ECCP)
Configura o mdulo de captura
(ECCP)
L o valor capturado (ECCP)
Exsto Tecnologia
185
Funes
A funes de comparao, presentas na biblioteca compare.h so apresentadas a seguir,
lembrando que o PIC18F4550 possui um mdulo CCP2 convencioal e um mdulog ECCP1 (Enhanced
CCP):
Funo
Prottipos
CloseCompare2
OpenCompare2
CloseECompare1
OpenCompare1
6.5.3
Descrio
Desativa o modo captura (CCP)
Configura o mdulo CCP em
modo de captura
Desativa o modo captura (CCP)
Configura o mdulo CCP em
modo de captura
Modo PWM
No modo PWM o mdulo CCP permite utilizar sinais modulados em largura de pulso (PWM
Pulse Width Modulation), que consiste em representar um valor pelo duty-cicle (isto , tempo em
alto) de um trem de pulsos de freqncia fixa. Por exemplo, admitindo-se que trabalhando com o
PWM do PIC, sua resoluo mxima de 10 bits, ou seja, 1023 correspondem a 100% de duty-cicle.
Usando uma regra de trs simples, podemos determinar a quanto que corresponde 30%, 25%, 99%,
etc. Este processo chamado de modulao porque permite carregar uma informao (expressa no
duty-cicle) em uma portadora (trem de pulsos).
A maior parte das aplicaes de PWM para microcontroladores se aproveita da propriedade da
energia de um sinal retangular ser proporcional ao seu duty-cicle (a energia de um sinal est
relacionada com a rea entre o sinal e o eixo do tempo). Vamos imaginar que um sinal PWM
aplicado a uma lmpada DC. Um duty-cicle de 100% (sinal sempre em 1) far a lmpada acender em
sua potncia mxima; j um sinal com 70% de tempo em alto entrega a lmpada 70% da potncia
mxima, e assim por diante. Essa propriedade utilizada no acionamento de cargas DC, controle de
motores, etc.
Outra caracterstica importante do PWM que, se o sinal for filtrado, podemos obter nveis
analgicos, tambm proporcionais ao duty-cicle. Isso permite que geremos desde nveis analgicos
fixos at sinais mais complexos, como tons DTMF (de telefonia).
Exsto Tecnologia
O PWM precisa de uma base de tempo que dar a freqncia do sinal. O mdulo CCP utiliza
o Timer 2 para conseguir essa base. Isso pode ser observado no diagrama de blocos do PWM, na
figura 3.9. Tambm necessrio que o pino RB3/CCP1 seja configurado como sada.
A gerao do sinal PWM se d da seguinte maneira. Cada vez que TMR2 coincide com PR2, o
pino RB3/CCP1 setado e TMR2 reiniciado. Isso nos d a freqncia do sinal. O duty-cicle
conseguido comparando o CCPR1H concatenado com dois bits de latch com TMR2 concatenado com
mais dois bits, da pr-escala ou gerados pelos ciclos Q; Quando h a coincidncia, o pino RB3/CCP1
zerado. As concatenaes nos do 10 bits de resoluo. Esse processo pode ser observado na figura a
seguir.
O registro CCPR1H no acessvel para leitura no modo PWM. O duty-cicle configurado
atravs de CCP1L e dos bits 4 e 5 de CCP1CON. Esse valor atualizado em CCPR1H e nos bits de latch
a cada perodo.
Exsto Tecnologia
186
Configurar o PWM estabelecer sua freqncia e seu duty-cicle. De posse desses dois
parmetros, podemos calcular os valores em cada registro.
O perodo o inverso da freqncia e configurado atravs de PR2 e da pr-escala do TMR2 e
pode ser calculado atravs da equao a seguir:
(4.1)
Onde:
TPWM : perodo do PWM
TOSC: perodo do oscilador
TMR2PS: fator de pr-escala do timer 2
Para encontrar o valor de PR2 a partir de um dado valor de perodo pode ser usada a equao
4.2. Valor de PR2 deve ser inteiro e menor que 256. Logo, em alguns casos ser necessrio
arredondar esse valor, o que gerar um pequeno erro entre a freqncia desejada e a real. Com
valores diferentes de pr-escala podemos chegar a valores menores que 256 e a aproximaes que
levem a um erro menor.
PR2 =
TPWM
1
4 TOSC TMR2 PS
(4.2)
Exsto Tecnologia
187
O duty-cicle por sua vez configurado atravs de CCPR1L e dos bits 4 e 5 de CCP1CON.
Geralmente se especifica o duty-cicle em porcentagem do tempo total. Assim, dado um duty-cicle em
porcentagem (DC%), o tempo correspondente a ele encontrado pela equao abaixo.
TDC = TPWM DC %
100
(4.3)
(4.4)
Onde:
TPWM : perodo do PWM;
TOSC: perodo do oscilador;
TMR2PS: fator de pr-escala do timer 2;
DC[9:0] : um valor de 10 bits obtido acrescentando os bit 5 e 4 a esquerda de
CCP1RL.
Dispondo do tempo do duty-cicle, o valor de DC[9:0] dado pela equao abaixo. Esse valor
deve ser inteiro e menor que 1023. O valor da pr-escala deve ser o mesmo utilizado para a
determinao do perodo.
DC[9 : 0] =
T DC
TOSC TMR 2 PS
(4.5)
188
189
de dez bits. Por exemplo, se o valor usado para PR2 for 63, os dois bits mais significativos so
perdidos e 100% de duty-cicle corresponder 255. Teremos um PWM de 8 bits. A resoluo, dada
em bits, para uma dada freqncia de PWM dada pela equao 4.6:
FOSC
)
FPWM
log(2)
log(
RESOLUO =
6.5.4
(4.6)
EPWM
O EPWM (Enhanced PWM, PWM avanado) em um modo de operao que o PWM assume
algumas caractersitcas especiais para acionamento de pontes de transisores ou FET, com a funlo
de chaveamento usadas em UPS e controle de motores. Esse modo no ser tratado neste curso.
6.5.4.1
Interrupo
No h interrupo associada ao modo PWM.
6.5.4.2 Funes
Funo
Prottipos
Descrio
ClosePWM2
OpenPWM2
SetDCPWM2
CloseEPWM1
OpenEPWM1
SetDCEPWM1
SetOutputEPWM1
void
void
void
void
void
6.6.2
Comunicao paralela
No envio de dados de forma paralela todos os bits que compe uma palavra so transmitidos
ao mesmo tempo e por diferentes condutores. O exemplo clssico so os barramentos dos PCs,
facilmente reconhecveis pelas diversas trilhas que correm paralelas na placa de circuito impresso.
Exsto Tecnologia
Esse tipo de comunicao exige pouco ou nenhum preparo para o envio, visto que os dados so
tratados dentro do processador de forma paralela. Outra caracterstica dessa forma de comunicao
a velocidade. Como a informao toda enviada de uma s vez, a transferncia de informaes
ocorre em tempo mnimo.
As limitaes dessa tcnica surgem quando as distncias entre os pontos que se deseja
comunicar aumentam. Em primeiro lugar para interconexo de equipamentos em distncias grandes
o uso de comunicao paralela exige conectores de muitos pinos e cabos de vrias vias.Como pode
ser intudo, o custo dos cabos e conectores proporcional ao nmero de vias do cabo.
Alm do custo dos cabos outro impedimento para a comunicao paralela so os efeitos
reativos (capacitivos e indutivos) dos meios de comunicao paralela (sejam eles cabos ou trilhas
numa placa). Em altas taxas de transmisso devemos considerar os condutores a luz da teoria de
guias de ondas, que de forma resumida nos diz que em altas freqncias um fio ou uma trilha no
devem ser encarados como um curto-circuito, mas como uma associao de resistncias,
capacitncias e indutncias. Em virtude disso os sinais podem se degradas por interferncia mtua e
tambm, pelas prprias caractersticas do meio. Outro ponto importante o rudo (interferncia)
inserido nos condutores e proveniente do onde eles esto. Novamente o maior nmero de
condutores agrava a situao.
Esses fatos so inerentes a qualquer linha de transmisso de sinais eltricos, mas o
agravamento dos problemas na comunicao paralela que cada linha de transmisso um meio
diferente das demais, ou seja, cada bit degradado de forma diferente. Isso pode acarretar
problemas na comunicao de dados a distncias longas (o critrio para dizer se uma distncia
grande sua comparao com o comprimento de onda do sinal que se transmite). Assim limita-se
a comunicao para pequenas distncias em alta velocidade (por exemplo, barramentos do PC) ou a
distncias maiores com baixa taxa de transmisso (por exemplo, comunicao entre PC e
impressora).
6.6.3
Comunicao serial
A forma encontrada para solucionar os problemas apresentados pela comunicao paralela a
Exsto Tecnologia
190
A comunicao serial tambm traz vantagens no aumento das taxas e das distncias de
comunicao. Tcnicas para a reduo de rudo e degradao do sinal podem ser aplicadas mais
facilmente quando a informao transita por um nico caminho. Alm disso, no h problemas em
os bits serem afetados de forma diferente, pois so tratados separadamente.
Em contrapartida, a comunicao serial demanda um circuito mais complexo, uma vez que a
informao que tratada de forma paralela pelo processador deve ser convertida para o formato
paralelo. Pelo mesmo motivo, a transmisso mais lenta que a paralela (observando apenas o tempo
do envio de uma informao). O principal problema a ser resolvido na comunicao serial, porm,
saber quando um bit termina e quando comea o prximo. E ainda, os cabos no deixam de serem
guias de ondas, apresentando os problemas discutidos acima e mantendo sempre uma relao de
compromisso entre o comprimento dos cabos e a taxa transmisso mxima.
Por todas essas razes a quase totalidade das conexes entre equipamentos feita por
comunicao serial. Entre as formas de comunicao serial mais difundida podemos citar o EIA-232,
EIA-485, o USB e mesmo as LANs Ethernet.
A comunicao serial pode ser feita de duas maneiras principais, a sncrona e assncrona, que
diferem na forma de localizar cada bit em uma rajada.
Como o prprio nome diz, na comunicao serial sncrona existe um sincronismo, nesse caso
entre o sinal transmitido e um clock enviado juntamente. O clock permite determinar o exato
momento em que o bit do sinal deve ser lido, evitando assim erros na recepo e a correta
montagem do dado na forma paralela. Entres as formas de comunicao serial sncrona podemos
citar o I2C e o SPI, que no sero tratados aqui.
J na comunicao assncrona nenhuma referencia de onde o bit deve ser lido enviado com
o sinal. A soluo nesse caso adivinhar o momento certo de ler o bit. Para isso necessrio que o
receptor saiba a taxa de transmisso e portanto a durao de cada bit. Ainda que o transmissor
indique de alguma forma onde comea e onde termina a transmisso. Dessa maneira, o receptor
aguarda a chegada da indicao de incio, chamado start bit ou bit de incio e quando esse lido ele
sabe que a cada intervalo de tempo, chamado tempo de bit (Tb) um bit novo est presente na via de
comunicao. Para minimizar o risco de erro a leitura feita na metade da durao do bit ou so
feitas algumas amostras durante esse intervalo de tempo.
Aparentemente, se procedermos dessa forma, bastaria enviar um start bit e para sincronizar
receptor e transmissor e depois poderia vir uma seqncia infinita de bits. Na verdade, porm, isso
no ocorre, pois sempre existira uma pequena diferena entre as bases de tempo de TX e RX. Como
Exsto Tecnologia
191
uma amostra ocorre Tb aps a anterior, se esse tempo estiver errado, o erro vai se acumulando at
que se perca o sincronismo. Por exemplo, se o relgio de RX for 5% mais lento ou mais rpido que o
de TX a cada 20 bits recebido o sincronismo ser perdido. Na prtica os dados so enviados em
pacotes de alguns bits, iniciados por um start bit e terminados por um stop bit. O stop bit tem a
funo de marcar o fim do pacote, para que um bit de informao no seja confundido com um novo
start bit.
O formato genrico utilizado em um pacote de comunicao serial apresentado na figura
abaixo.
Tempo ocioso
(opcional)
1, 1 ou 2 stop bits
Bit de paridade (opcional)
5 a 9 bits de dados
1 start bit
192
taxa de transmisso (baud rate). Esse gerador deve ser configurado para a taxa de transmisso
desejada levando-se em considerao a freqncia de clock do oscilador principal.
O gerador de baud rate pode operar em dois modos, taxas altas e taxas baixas. Conforme a
seleo do modo usada uma das seguintes equaes:
Taxas altas (USART_BRGH_HIGH)
Exsto Tecnologia
193
194
16 1
1
16
64 1
1
64
Sendo spbrg o valor a ser carregado no gerador de baud rate e BR a taxa de transmissao
desejada
Deve-se estar atento, pois valor calculado pode no ser um inteiro. Neste caso, ao fazer a
aproximao para um inteiro mais prximo o valor de taxa de transmisso pode ser muito diferente
do valor nominal. Sempre que arredondar o valor obtido para spbrg calcule a taxa real obtida com o
valor de spbr e obtenha o erro atravs da equao a seguir.
%
Na prtica, podem ocorrer problemas de comunicao para se a diferena entre o valor real
e o nominal forem maiores que 5%.
6.6.4.2
Interrupo
O flag de interrupo de recepo (RCIF) setado (colocado em nvel um) quando um novo
byte recebido com sucesso. Uma aplicao til usar a RTI para receber um buffer de vrios bytes
e tratar apenas quando todos os dados chegarem.
Por sua vez, o flag de interrupo de recepo (TXIF) setado quando um byte enviado
pela serial (buffer de transmisso vazio). Isto permite construir RTI que transmitam seqencialmente
um buffer de diversos bytes sem que o programa principal tenha que aguardar a transmisso de cada
byte, seja qual for a taxa de transmisso.
6.6.4.3
Funes
O C18 define diversas funes de uso da USART. Uma opo trabalhar com o conjunto de
Prottipos
BusyUSART
CloseUSART
DataRdyUSART
Descrio
Retorna 1 se a USART est
transmitindo
Desabilita USART
Retorna 1 se um byte foi recebido
Exsto Tecnologia
getcUSART
getsUSART
putcUSART
putsUSART
putrsUSART
ReadUSART
OpenUSART
WriteUSART
baudUSART
L um byte da USART
L uma string da USART
Configura USART
Envia um byte pela USART
Envia um string alocada na RAM
pela USART
Envia um string alocada na FLASH
pela USART
L um byte da USART
Envia um byte pela USART
Configura a taxa de transmisso,
Funo
Direo
TxD
Sada
RxD
Entrada
Exsto Tecnologia
195
RTS
Sada
CTS
Entrada
DSR
Entrada
DTR
Sada
Os pinos DSR e DTR servem para indicar que os equipamentos esto conectados e prontos para
comunicao. DTS e CTS servem para fazer controle de fluxo: Quando o DTE tem dados para
transmitir ele informa o DCE atravs de RTS; se o DCE pode receber esses dados CTS ativado.
A sinalizao so ativadas em 0 e desativadas em 1.
Em uma grande maioria dos casos so utilizados apenas os terminais de transmisso e recepo de
dados, podendo ser usado um cabo com apenas 3 fios (TxD, RxD e Terra).
Segundo a norma, a comunicao serial pode suportar taxas de bit (geralmente chamadas baud rate)
de at 20 kbps. possvel realizar comunicao full-duplex, ou seja, nos dois sentidos ao mesmo
tempo.
A distncia mxima do cabo de comunicao deve ser inferior a 15 metros (50 ps).
Umas das principais causas da limitao de taxa e distncia do EIA-232C limitao nos tempos de
subida e descida do sinal, que deve ser menor que 4% do tempo tempo de bits.
As especificaes eltricas do EIA-232C podem ser observadas na figura abaixo.
+15V
+5V
TX
Cabo
RX
+15V
+3V
-3V
-5V
-15V
1
-15V
No transmissor o nvel lgico 0 representado por uma tenso entre +5 e +15 Volts e o nvel lgico
1 representado por tenses entre -5 e -15 Volts. No receptor tenses entre +3 e +15 Volts so
interpretadas como 0 e entre -3 e -15 Volts interpretadas como 1; tenses entre +3 e -3 Volts
levam a estados ideterminados. A diferena entre os limites de tenso no transmissor (-5V e +5V) e
Exsto Tecnologia
196
os limites do receptor (-3V e +3V) constitui a margem de segurana, dentro da qual rudos e eventuas
perdas no cabo no degradam os dados.
As tenses mxima mnima que podem ser aplicadas ao receptor sem que haja dano so,
respectivamente, +25V e -25V. Alm disso, a norma especifica que qualquer curto circuito entre
quaisquer pinos, inclusive o pino de terra, no devem causar dano ao circuito.
Como na maioria das aplicaes trabalha com circuitos alimentados com +5V so necessrios
conversores de nvel para criar uma interface eltrica com o EIA-232, dentre os quais os mais
conhecidos so o MAX232 e seus equivalentes.
6.6.6 EIA-485
Outro padro muito difundido, principalmente no meio industrial, o EIA-485, tambm conhecido
como RS-485. As principais vantagens desse padro sobre o EIA-232C so as maiores distncias
alcanadas e a possibilidade de operao em rede com mltiplos usurios.
No EIA-485 a transmisso feita por dois fios de forma balanceada. Isso significa que por um
condutor enviado um sinal A e pelo outro condutor uma cpia invertida B (B = -A) desse sinal. Na
recepo h um circuito diferenciador que faz diferena entre o sinal A e B, portanto na sada desse
circuito temos
S = A B , mas B = A S = A ( A) = 2 A
(1)
Como o rudo age de forma aditiva, somando-se ao sinal dos dois condutores, na recepo o efeito
do rudo cancelado pela ao do diferenciador, conforme pode ser observado em (2), onde R
representa o sinal de rudo.
S = ( A + R) ( B + R) = ( A + R) ( A + R) S = A + R + A R = 2 A
(2)
Alm disso, a rede casada com resistores de terminao, o que reduz a degradao por reflexo
do sinal.
Podemos ligar diversos usurios em rede, sendo tipicamente usada a topologia de barramento para
tanto. Em um barramento EIA-485 somente um dos terminais pode transmitir por vez, ficando os
outros com o driver de sada desligado. Portanto s possvel a comunicao no modo half-duplex. A
figura abaixo mostra os esquemas ligao de diversos transceptores a rede. Os resistores RT so
resistores de terminao e devem ser colocados nas extremidades do barramento. Seu valor tpico
120 ohm, portanto um valor equivalente de 60 ohm.
Exsto Tecnologia
197
O nmero mximo de pontos na rede limitado pela carga que cada terminar receptor representa
para o barramento, que deve ser de 1mA para 12V, e pelas caractersticas do buffer de sada.
Seguindo padro EIA-485 a quantidade de pontos fica limitada a 32 pontos, mas atualmente existem
tranceivers com caractersticas alteradas que permitem at 128 pontos na rede.
A distncia mxima possvel na rede de aproximadamente 1200m (4000 ps). A taxa mxima de
transmisso de 10Mbps. A taxa de transmisso dada em funo dos tempos de subida (tR) e
descida do sinal (tF), sendo que no EIA-485 os TR e TF podem corresponder a 30% do tempo total do
bit.Assim:
RMAX = 1/ t B = 0,3 / t R
(3)
198
usurios necessrio identificar qual o usurio a que se destina o dado e criar mtodos que evitem a
coliso de dados(dois usurios transmitindo ao mesmo tempo na rede). Essas so funes da camada
2 do modelo OSI, a camada de enlace, e podem ser implementadas atravs de rotinas que obedeam
um protocolo de comunicao. A funo dessas rotinas prover o transporte dos dados atravs de
diversos mecanismos e entregar os dados para a aplicao.
6.6.7.1 Comunicao ponto-a-ponto (para EIA-232)
Nesse caso tpico de aplicao para o padro EIA-232 temos comunicao bidirecional full-duplex,
portanto no h risco de coliso e qualquer um dois equipamentos (no caso, o PC e o
microcontrolador) podem iniciar a comunicao.
Abaixo apresentado o formato do frame desse protocolo, que a forma como os dados sero
encapsulados para transmisso.
Tamanho
0 ~ 254
STX
NB
Dados
CKS
199
se perder. Alm disso necessrio identificar no frame o endereo do terminal ao qual ele se
destina, portanto cada terminal deve ter um endereo individual.
Se todos os terminais puderem iniciar a comunicao h uma grande probabilidade de ocorrncia de
coliso. A soluo mais simples nesse caso determinar que um dos terminais (mestre) tenha
iniciativa de iniciar a comunicao, sendo que os demais terminais (escravos) limitam-se a responder.
Esse tipo de comunicao Mestre-Escravo (Master-Slave) bastante comum em aplicaes onde o
terminal mestre um computador que comanda uma rede de escravos microcontrolados.
Abaixo temos o aspecto do frame para a comunicao mestre escravo (comando).
Tamanho
1
STX
1
NB
0 ~ 253
End
Dados
CKS
Tamanho
1
STX
1
NB
0 ~ 253
End
Dados
CKS
200
Modo mestre;
Modo escravo.
Modo I2C.
6.7.1
Modo mestre;
Modo multi-mestre;
Modo escravo.
SPI
A comunicao SPI especifica 3 pinos de comunicao de dados: Clock (SCK), Entrada de
Dados (SDI) e Sada de Dados (SDO). Alm disso, cada perifrico SPI deve ter um sinal de habilitao
baixo ativo (normalmente chamado CE Chip Enable ou CS Chip Select).
A tabela abaixo apresenta os sinais, suas funes e os pinos correspondentes nos PIC18F452
e PIC18F4550.
Sinal
SDO
SDI
SCK
Pino
RC7
RB0
RB1
Funo
Sada de dados
Entrada de dados
Modo mestre: sada de clock
Modo escravo: entrada de clock
SS
RA5
Habilitao no modo escravo.
Figura 7.1 - Pinos para operao em SPI
A conexo entre dispositivo SPI deve ser feita conforme o diagrama abaixo. Observe que a
sada do mestre (SDO) ligagada a entrada dos escravos (SDI) e a sada dos escravos (SDO) ligada a
entrada do mestre (SDI). Alguns fabricantes utilizam tambm a nomenclatura MISO (Master Input,
Slave Output) e MOSI (Master Output, Slave Input) para simbolizar os pinos de dados.
Exsto Tecnologia
201
Exsto Tecnologia
202
Funes
O compilador C18 possui funes para comunicao SPI na biblioteca SPI.H descritas abaixo.
Exsto Tecnologia
203
Funo
Prottipo
CloseSPI
Descrio
Desabilita o mdulo MSSP
DataRdySPI
getcSPI
L um byte
getsSPI
void getsSPI(
unsigned char
void OpenSPI(
unsigned char
unsigned char
L uma string
OpenSPI
putcSPI
putsSPI
ReadSPI
L um byte
WriteSPI
Escreve um byte
I2C
O protocolo I2C especifica 2 sinais de comunicao, um com o sinal de clock (gerado pelo
Pino
Funo
RC4
Dados seriais
RA3
Clock (provido pelo mestre)
Figura 7.5 - Pinos para operao em SPI
A conexo entre dispositivo I2C deve ser feita conforme o diagrama abaixo. Os resistores de
pull-up so fundamentais, j que os drivers de sada de todos os dispositivos I2C so open-drain. Ao
enviar dados um dispositivo I2C (mestre ou escravo) o que na verdade acontece que nos bits 0 o
dispositivo satura um transistor aterrando o barramento e nos bits 1 ele corta esse transistor,
ficando o nvel 1 garantido pelo resistor de pull-up. Dessa forma vrios dispositivos podem trocar
informao sem risco de dano.
Exsto Tecnologia
204
VDD
SDA
SCL
SDA
SCL
SDA
SCL
Para sinalizar incio e fim de comunicao so usadas as condies de Star e Stop, que so
quebras da regra acima. Quando SCK est em 1 e SDA transita de 1 para 0 caracteriza-se uma
condio de Start. Quando SCK est em 1 e SDC transita de 0 para 1 caracteriza-se uma condio
de Stop. Essas sinalizaes so utilizadas para definir o incio e fim da comunicao, de forma que os
escravos sejam sincronizados com o mestre. Abaixo temos a ilustrao dessas condies.
Exsto Tecnologia
205
Alm disso, a cada byte transmitido deve ser gerado pelo escravo que o recebe uma resposta
de confirmao (ACK, do ingls acknowledge ). Essa condio obtida quando o escravo fora 0 em
SDA no nono pulso de clock. Dependendo do protocolo do dispositivo pode ser gerando tambm um
sinal de no-acknowledge (NACK), que caracterizado pela permanncia de SDA em 1 durante o
nono bit. A figura abaixo representa essa sinalizao, mas esteja atento ao fato que no existem os
sinais DATA IN e DATA OUT, so apenas representaes da origem do sinal em SDA (DATA IN
gerado pelo mestre e DATA OUT pelo escravo).
Uma tpica operao de escrita (do mestre para o escravo) apresentada na figura a seguir
(observe quais bits so gerados pelo mestre e quais so pelo escravo) onde apresentado apenas a
sinalizao de dados, ficando subentendido o sinal de clock. A comunicao inicia-se com um Star
gerado pelo mestre. Em seguida o primeiro byte define o endereo do dispositivo a ser acessado. O
oitavo bit define se uma instruo de leitura (1) ou escrita (0). No nono bit o escravo responde
um um ACK. Em seguida enviado um byte definindo um endereo de memria dentro do
dispositivo, que tambm confirmado por um ACK. A partir da cada byte enviado armazenado em
um endereo a partir do endereo inicial, at o mestre encerrar a comunicao atravs de um Stop.
Exsto Tecnologia
206
A seguir apresentado uma operao de leitura. O comando inicia-se com um Start, seguido
do endereo do dispositivo (7 bits) e o oitavo bit em 1, indicando leitura. O escravo responde com
ACK e passa a enviar seus dados seqencialmente. Note que sempre o mestre que gera o sinal de
clock, o escravo apenas envia os dados para o barramento. A cada byte enviando pelo escravo o
mestre responde com um ACK. No ltimo byte o mestre responde com um NACK, sinalizando o fim
do envio de dados e finaliza a comunicao com um Stop.
Como deve ter sido observado, no foi especificado a partir de qual endereo o escravo
deveria enviar seus dados. Isso porque, uma vez dado um comando de leitura o escravo passa a
enviar seus dados para o mestre. Esses dados so enviados a partir do endereo atual, isto , do
ultimo endereo gravado. Para realizar a leitura a partir de um endereo especfico o que se faz
iniciar um processo de escrita e reiniciar a comunicao, forando um no Start, seguindo de um
comando de leitura, conforme apresentado a seguir.
Exsto Tecnologia
207
Operando em modo mestre, o microcontrolador deve gerar o clock para todos os dispositivos
escravos da rede. Alm disso, ele deve gerar as condies de bit de partida (start bit) e bit de parada
(stop bit) definidas pelo protocolo e verificar a bit de ACK (confirmao gerada pelo escravo). O
diagrama em blocos do mdulo MSSP operando em modo I2C mestre mostrado na figura abaixo.
Exsto Tecnologia
208
No modo mestre o sinal de clock que controla a taxa de transmisso configurado atravs
dos sete bits menos significativos do registro SSPADD. O valor carregado nesse registro
decrementado duas vezes por ciclo de instruo. Quando chega a zero o estado do sinal de clock
invertido e o valor recarregado para reiniciar a contagem de tempo.
6.7.2.1
Interrupo
No modo I2C escravo o mdulo MSSP ir gerar uma interrupo toda vez que um comando
for enviado para o endereo do microcontrolador. Alm disso, pode-se configurar para que a
interrupo ocorra toda vez que acontecer um bit de partida de um bit de parada.
No modo I2C mestre o flag de interrupo ser acionado por qualquer um dos eventos
abaixo:
Bit de partida
Bit de parada
Transmisso de ACK
6.7.2.2
Funes
Exsto Tecnologia
209
Para uso do mdulo MSSP para comunicao I2C existe a biblioteca I2C.H.
Funo Prottipo
AckI2C
CloseI2C
DataRdyI2C
getcI2C
getsI2C
IdleI2C
unsigned char
unsigned char
unsigned char
void IdleI2C(
NotAckI2C
OpenI2C
void OpenI2C(
sync_mode,
unsigned char
unsigned char
unsigned char
unsigned char
unsigned char
putcI2C
putsI2C
getsI2C(
* rdptr,
length );
void );
unsigned char
slew );
putcI2C(
data_out );
putsI2C(
*wrptr );
ReadI2C
RestartI2C
StartI2C
StopI2C
WriteI2C
Descrio
Gera condio de ACK
Desativa o mdulo SSP
Verifica se existem novos
dados no buffer de recepo.
L um byte
L uma sequencia de byres
(modo mestre apenas)
Fica em loop enquanto o
barramento I2C est inativo.
Gera uma condio e NACK
Configura o mdulo MSSP para
operao em modo I2C
Escreve um byte
Escreve uma sequencia de
bytes (modos mestre e
escravo)
L um byte.
Gera uma condio de Restart
Gera uma condio de Start
Gera uma condio de Stop
Escreve um dado
Prottipo
EEAckPolling
EEByteWritex
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
char EEByteWrite(
char control,
char address,
char data );
int EECurrentAddRead(
char control );
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
unsigned
char EEPageWrite(
char control,
char address,
char * wrptr );
int EERandomRead(
char control,
char address );
char EESequentialRead(
char control,
char address,
char * rdptr,
char length );
EECurrentAddReadx
EEPageWritex
EERandomRead
EESequentialRead
Descrio
Gera uma varredura de
ACK
Escreve um byte
L um dado do prximo
endereo
Escreve uma sequencia de
dados
L um dado de
endereo qualquer
um
Exsto Tecnologia
210
6.8 USB
O protocolo USB foi inicialmente desenvolvido para ser uma forma prtica de conexo de
perifricos a computadores (como mouse, teclado e impressoras), em substituies a portas seriais e
paralelas. Esse padro evoluiu e hoje o pradrao de comunicao pra PCs, perifricos e dispositivos
pessoais (iPOD, cmeras digitais, etc..).
O protocolo USB apresenta diversas vantagens, das quais podemos citar:
Altas taxas de transmisso
Conexo Plug&Play
Alimentao dos dispositivos atravs do cabo de comunicao.
Conexo de diversos perifricos ao mesmo tempo
Baixo custo
Atualmente esto em uso dois padres, o USB 1.0 e o USB 2.0. O padro USB 1.0 suporta as
velocidades de 1,5 Mbps (USB-LS Low Speed) e 12Mbps (USB-FS Full Speed). O padro USB 2.0
suporta ainda a velocidade de 480 Mbps (USB-HS High Speed), apesar de um dispositivo no ter
que suportar HS para ser considerado compatvel com USB 2.0.
A comunicao USB uma comunicao Mestre-Escravo, isto , um dispositivo principal
(Mestre ou host) comanda um rede de perifricos (escravos ou devices). Portanto impossvel a
comunicao entre 2 devices (por exemplo, um mouse no pode se comunicar com um pen-drive).
Existe ainda dispositivos OTG, que podem se comportar como Host e como escravo. Abaixo uma lista
dos tipos de dispositivos USB.
USB Host: Gerencia o barramento, iniciando todas as comunicaes e alimentando os
dispositivos. Tipicamente requer uma alta capacidade de processamento deve possuir
drivers para as classes de dispositivos aos quais pode se conectar
USB Device: Responde aos comandos do Host e alimentado por ele.
USB OTG (On-The-Go): ao mesmo tempo mestre e escravo. Suporta apenas uma
conector Mini-AB para conexo com Host (Mini A) e Device (Mini B).
Embedded Host: opera como Host com algumas funcionalidades limitadas.
Hub USB: permitem a expanso de portas USB. Permitem at 127 elementos na rede,
sendo que pode-se usar no mximo 5 hubs em cascata.
A figura abaixo ilustra os tipos de conectores que definem ao tipo de elemento que se deve
conectar.
Exsto Tecnologia
211
212
O PIC18F4550 possui um perifrico de USB Device compatvel com a norma USB 2.0. Ele pode
operar em full-speed (12MHz) ou low-speed (1,5MHz). Internamente ao PIC existe um regulador de
3,3V, responsvel por fornecer a esse componente a tenso necessria para o driver de sada. Existe
suporte a resistores de pull-up (que indicam ao host se o dispositivo full-speed ou low-speed)
externo, assim como possibilidade de uso de um transceptor externo. Contudo, esses dispositivos
esto disponveis internamente, no necessitando de nenhum componente externo alm do
conector B.
O protocolo USB, apesar da praticidade, no algo trivial. Sua implementao no simples
como a de um perifrico como timer ou A/D, exigindo o uso de uma biblioteca de funes
complexas. Nesse sentido, a forma mais fcil pra se trabalhar com USB a partir de um exemplo
pronto para a classe de dispositivo que se pretende usar, na qual sero feitas as alteraes para
nossa aplicao.
A Microchip prov essas bibliotecas, bem como drivers para os tipos bsicos de dispositivos e
extensa documentao. Todo esse material est disponvel no CD que acompanha o kit em em
www.microchip.com/usb .
Mais ainda, o kit XM118 compatvel com a placa de demonstrao PICDEM FS-USB (com
exceo do sensor de temperatura I2C, no presente no kit), portanto diversos exemplos e
aplicativos desenvolvidos para essa placa da Microchip sero executados no kit.
Exsto Tecnologia
213
Anexos
Anexo A Distribuio de Pinos do 18F4550
Exsto Tecnologia
214
Exsto Tecnologia
215
referencia [5], da qual um dos autores ningum menos que o prprio criador do C, Dennis Ritchie.
Por fim, mais informaes sobre microcontroladores de uma forma geral e microcontroladores
da famlia PIC16 podem ser obtidas na referncia [1].
Exsto Tecnologia
216
Anexo D - Bibliografia:
[1] Adriano, J. D. (2005). Curso de microcontroladores PIC16Fxxx Mdulo Bsico. Exsto Tecnologia.
Santa Rita do Sapuca
[2] Kernighan, Brian W. Ritchie, Dennis M.(1988). The C programming language.Editora Prentice-Hall
PTR
[3] Shultz, Thomas W. (1998). C and 8051: hardware, modular programming and multitasking. Vol. I e
II. 2a. edio. Ed. Prentice Hall PTR.
Exsto Tecnologia
217
Exsto Tecnologia
218
Conjunto de instrues:
Exsto Tecnologia
219
Notas:
1. Quando uma operao que altera o valor de registro PORT tem como destino o prprio
registro PORT o valor considerado aquele lido diretamente dos terminais do
microcontrolador
2. Quando essa instruo executada no registro TMR0 (e d = 1, se aplicvel) a pr-escala
zerada;
3. Quando o PC alterado, gerando um desvio no fluxo do programa, ou um teste condicional
resulta verdadeiro, so gastos dois ciclos de mquina.
4. Algumas instrues ocupam 2 endereos de memria. Elas so executadas em dois ciclos de
instruo e o segundo ciclo tem o efeito de um NOP.
Exsto Tecnologia
220
Exsto Tecnologia
221
CADERNO DE
EXPERINCIAS
Exsto Tecnologia
222
Exsto Tecnologia
223
Questionrio
1. Qual a principal caracterstica dos sistemas computacionais, que os diferencia dos demais
circuitos digitais?
2. Qual a diferena entre memria de programa e memria de dados?
3. O que so registros?
4. O que so vetores na memria de programa?
5. Descreva os vrios tipos de memria de programa.
6. Qual a diferena entre memrias voltil e no-voltil?
7. Para que servem os portais?
8. Por que so utilizados barramentos para interligar as vrias partes de um sistema
computacional?
9. Descreva a funo dos barramentos de
a.
Dados
b.
endereos
c.
controle.
7 bits
b.
12 bits
c.
16 bits
d.
21 bits
Exsto Tecnologia
224
b.
Registro Status
c.
PC (Program Counter)
d.
Pilha (Stack)
e.
16. Qual a principal caracterstica da arquitetura Harvard? O que se ganha com isso?
17. O que significam as siglas CISC e RISC?
18. Explique a diferena entre um microcontrolador e um microprocessador.
Exerccios propostos
Propomos aqui uma pesquisa por manuais de componentes de diversos tipos de
micrococontrolador. O objetivo familiarizar o aluno com os manuais destes componentes e
exercit-lo na atividade de busca de informaes.
1. Pesquise na internet e faa download do manual dos seguintes componentes
a. PIC16F628A (Microchip)
b. PIC18F4550 (Microchip)
c. PIC24FJ128GA108 (Microchip)
d. AT89S52 (Atmel)
e. MC68HC908QY4 (Freescale)
Exsto Tecnologia
225
f.
MSP430F2011(Texas)
Memria
Flash [kB]
Memria
RAM [B]
Freqncia
mxima [MHz]
Nmero de
pinos
Barramentos
de dados
[bits]
8
PIC16F628A
3,5
224
20
18
PIC18F4550
32
2048
48
40
PIC24FJ128AG108
128
16000
32
80
16
AT89S52
256
33
40
MC68HC908QY4
128
32
16
MSP430F2011
128
16
14
16
Exsto Tecnologia
226
2 Aula 2 O PIC18F4550
Objetivos
Estudar o hardware do microcontrolador PIC18F4550
Conhecer os modelos de memria para o PIC18
Questionrio
1. Quantos bits tm o barramento de instrues do PIC18?
2. Quantos bits tm o barramento de endereo para memria de programa do PIC18? Quantos
endereos podem ser acessados ento? Quantos bytes esto realmente implementados no
PIC18F4550?
3. Qual a diferena entre as instrues RCALL e CALL? E entre BRA e GOTO?
4. Quantos bits tm o barramento de endereo para memria de dados do PIC18? Quantos
endereos podem ser acessados ento? Quantos bytes esto realmente implementados no
PIC18F4550?
5. Explique o que so SFR e GPR.
6. O que o banco de acesso?
7. Explique, resumidamente, como interagem os registro TRISB, LATB e PORTB.
8. Em quantos ciclos de clock realizado cada instruo do PIC18? Quais so esses ciclos e qual
ao acontece em cada um deles?
9. Descreva o que ocorre com os registros PCLATU e PCLATH quando o registro PCL lido. E
quando se escreve em PCL, o que ocorre?
10. O que fazem a instruo MULLW e MULWF?
11. Quantos nveis tm a pilha do PIC18? Quais eventos associados a pilha causam reset?
12. Com base no funcionamento do processador, sabendo quantos ciclos de clock cada instruo
leva para ser executada, calcule quanto o tempo de execuo de uma instruo para as
freqncias de clock a seguir:
a. 4MHz
b. 20MHz
c. 48MHz
d. 3,58MHz
13. Explique a funo dos bits abaixo, pertencentes ao registro status.
Exsto Tecnologia
227
Questionrio
1. Quantas instrues tm o PIC18?
2. Explique, de forma resumida, o que fazem as instrues abaixo. Para isso, consulte o manual
do PIC18 (captulo 26 Instruction Set Summary).
a. MOVLW
b. MOVWF
c. MOVFF
d. ADDWF
e. SUBLW
f.
ANDWF
g. XORLW
h. INCF
i.
RLCF
j.
RLNCF
k. BSF
l.
BTG
m. BZ
n. BNZ
o. BRA
p. CALL
q. GOTO
r.
RETURN
s. SLEEP
Exsto Tecnologia
228
Introduo
As ferramentas de software utilizadas para o desenvolvimento com microcontroladores so
de grande ajuda na criao e depurao de projetos. Ter boas ferramentas de desenvolvimento
quase to importante com ter um bom microcontrolador para o sucesso de qualquer projeto.
O objetivo dessa aula prtica passar por todo o processo de desenvolvimento, criando um
novo projeto, compilando, simulando e, por fim, gravando e depurando no kit.
Questionrio
1. O que um IDE?`
2. Qual a funo da Janela Watch?
3. Para que serve o Simulator Logic Analyzer?
4. O que faz um estmulo com configurado como Toggle?
Exerccios
Verifique se o MPLAB e C18 esto instalados em seu computador. Caso contrrio, realize a
instalao conforme o manual.
1.
#include<P18F4550.h>
#include<delays.h>
//// Configures
#pragma config
#pragma config
#pragma config
#pragma config
PLLDIV = 5
CPUDIV = OSC1_PLL2
FOSC = HS
WDT = OFF
//
//
//
//
229
#pragma config
#pragma config
#pragma config
PBADEN = OFF
LVP = OFF
DEBUG = ON
void main(void){
DDRD = 0x00;
for(;;){
PORTD = 0x55;
//
Delay10KTCYx(200);// manter comentado na simulao e depurao
PORTD = 0xFF;
//
Delay10KTCYx(200);// manter comentado na simulao e depurao
}
}
230
Exerccios Propostos
1. Crie um novo projeto com as mesmas configuraes do anterior chamado de Aula4P1.
2. Adicione um arquivo C com o cdigo abaixo.
#include<P18F4550.h>
#include<delays.h>
//// Configures
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config
#pragma config
PLLDIV = 5
CPUDIV = OSC1_PLL2
FOSC = HS
WDT = OFF
PBADEN = OFF
LVP = OFF
DEBUG = ON
//
//
//
//
//
//
//
void main(void){
int i;
DDRD = 0x00;
for(;;){
PORTD = 0xFE;
for (i=0;i<8;i++){
LATD = LATD << 1;
Delay10KTCYx(200);// comentado na simulao e depurao
}
}
}
Exsto Tecnologia
231
Questionrio
1. Quais eventos provocam a sada dos modos Sleep e Idle?
2. Qual a utilidade do Power-up Timer?
3. Para que serve o watchdog?
4. Qual a finalidade do PLL presente no PIC18?
5. Quais as freqncias so geradas pelo oscilador interno?
6. Quantas fontes de sinal de clock tm o PIC18? Podemos mudar de fonte de clock durante a
execuo do programa?
7. Atravs de quais bits de qual registro feita a escolha da fonte de clock?
8. Descreva resumidamente os trs modos de consumo do PIC18?
9. A tenso do BOR configurvel?
10. Faa uma tabela comparando os modos de oscilador a cristal (XT, HS e LP), oscilador interno
e oscilador RC externo com relao a estabilidade, faixa de freqncia e custo.
Critrio
Preciso
Estabilidade
Variedade de freqncias
Custo
Osciladores a Cristal
Oscilador
Oscilador
RC
interno
Exerccios
1. O exerccio resolvido Aula5E1 apresenta um exemplo que permite verifica o funcionamento
do oscilador do PIC18. Atravs da leitura da chave DIP ligada ao portal B possvel acionar os
bits do registro OSCCON. O programa principal aciona seqencialmente LEDs do portal D
conforme a freqncia de clock selecionada.
Exsto Tecnologia
232
RB5
RB4
(SCS1) (SCS0)
Oscilador
0
0
0
1
1
1
1
1
1
1
1
1
X
X
X
X
X
X
X
X
RB3
RB2
RB1
(IRCF2) (IRCF1)
(IRCF0)
Freqncia do oscilador interno
X
X
X
X
X
X
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
Oscilador
Primrio (HS+PLL)
Secundrio
Interno
Freqncia
Tempo
por LED
48 MHz
16,6ms
No h oscilador
secundrio na placa
31 kHz
12,8s
125 kHz
6,4s
250 kHz
3,2s
500 kHz
1,6s
1 MHz
800ms
2 MHz
400ms
4 MHz
200ms
8 MHz
100ms
Exsto Tecnologia
233
Questionrio
1. Faa uma comparao de trs caractersticas das linguagens C e Assembly que mostrem que
vantajoso trabalhar em C.
2. Porque C considerada uma linguagem de mdio nvel?
3. O que o C ANSI?
Exerccios
1. Crie um novo projeto chamado Aula6E1 e escreva um programa que realize as operaes
apresentadas abaixo. O objetivo do programa apenas a simulao, portanto basta realizar
as operaes. Declare as variveis no menor tamanho que atenda as operaes.
a. x = y + 775; (y um unsigned char)
b. z = w *k; (w e k unsigned char)
c. p = (m*100)/n; (w e k inteiros sinalizados)
2. Crie um projeto que configure o PORTD (onde esto ligados os LEDs do kit) como sada. No
Loop principal leia o valor das chaves dip switch (PORTB) e transfira esse valor para os LEDs.
Obs.: Para ler as chaves necessrio ativar os resistores de pull-up no PORTB. Isso feito
colocando o seguinte comando na inicializao do microcontrolador:
INTCON2bits.RBPU = 0;
3. Crie um projeto baseado no exerccio anterior onde cada chave aciona um LED, conforme a
tabela a seguir. Para isso ser necessrio acessar no o portal todo, mas cada bit
individualmente.
Chaves
RB0
RB1
RB2
RB3
LEDs
RD7
RD6
RD5
RD4
Exsto Tecnologia
234
RB4
RB5
RB6
RB7
RD1
RD3
RD0
RD2
Exerccios Propostos
4. Crie um novo projeto com as seguintes caractersticas
a. Microcontrolador PIC18F4520
b. Ferramentas da linguagem C18
c. Inclua o arquivo linker scrip para esse microcontrolador
d. Crie um novo arquivo chamado Proposto.C e inclua-o no projeto.
e. Escreva o cdigo abaixo no arquivo Proposto.C e monte o projeto. Em seguida
execute a simulao e observe o que o programa faz.
#include<P18F4520.h>
#include<stdio.h>
void main (void)
{
int i=0;
printf("\n\nExerccio Proposto: ");
for(;;){
printf("%d ",i);
i++;
if(i == 15) Sleep();
}
}
Anotaes:
Exsto Tecnologia
235
Introduo
Alm dos comandos bsicos a linguagem C permite o uso de funes que executam tarefas
definidas. O padro ANSI determina diversas bibliotecas de funes que devem acompanhar o
compilador. Alm destas, o compilador C18 trs diversas bibliotecas de funes para uso especfico.
Umas das mais teis e a biblioteca delays.h, cujas funes so apresentadas na tabela abaixo e so
detalhadas no anexo F. Essas funes permitem gerar atrasos no programa e cujo tempo calculador
a partir do tempo de execuo de uma instruo TCY (TCY = 4.TOSC).
Funo
Prottipo
Descrio
Delay1TCY
void Delay1TCY(void)
Atraso de 1 ciclo.
Delay10TCYx
Delay100TCYx
Delay1KTCYx
Delay10KTCYx
Questionrio
1. Como configurar o PORTD do PIC18F4520 para que seus bits sejam todos sadas?
2. Escreva um trecho de cdigo no qual o pino RD2 v para 1 se o pino RB0 estiver em 0 e
vice-versa (use o comando if-else).
3. Para obter um atraso de 100ms, supondo o sinal de clock de 8MHz, qual funo de atraso
deve ser usada e qual seu argumento?
4. Preencha a tabela abaixo:
Exsto Tecnologia
236
Tipo de Dado
Tamanho [bits] Faixa de valores
char
unsigned char
int
unsigned int
Short long
float
5. necessrio fazer uma contagem de latas de goiabadas em uma linha de produo. O valor
mximo de contagem 200. Qual o tipo de dado mais adequando para essa varivel?
6. O conversor ADC do PIC converte sinais de tenso em valores no sinalizados de 10 bits. Qual
o tipo de dado mais adequado para representar essa informao.
Exerccios
1. Exerccio resolvido (Aula7E1): Elaborar um programa para controle de uma linha de
produo de goiabada,
ada, na etapa de impresso de validade e lote. O programa deve cumprir
as seguintes tarefas:
1. Manter uma esteira acionada at que passem 5 latas
2. Desligar a esteira
3. Acione o carimbo de Prazo de validade por 2s
4. Esperar 1 segundo
5. Acione o carimbo de lote por
p 2s
6. Repetir o processo a partir de 1
O sensor que conta as latas de goiabada baixo ativo. Os carimbos so alto ativos,
ficando acionados enquanto recebem 1 e recolhendo automaticamente quando seu sinal
volta a 0.
237
Pino do microcontrolador
Direo
RB0
Entrada
RD0
Sada
RD1
Sada
RD2
Sada
a. Simule o projeto e observe o resultado.
Funo
Sensor (baixo ativo)
Esteira (alto ativo)
Carimbo Lote (alto ativo)
Carimbo Validade (alto ativo)
Exerccios Propostos
1. Escrever um programa que controle que pisque um LED com uma freqncia de 10 Hz se a
chave INT estiver pressionada e com freqncia de 2 Hz se no estiver. Para fazer isso atribua
diferentes valores a uma varivel que ser o argumento de uma funo de delay. No se
esquea de elaborar o fluxograma
2. Crie um programa (bem como o fluxograma) capaz de implementar a seguinte tabela:
Chave 1
Chave 2
LED1
0
0
0
0
1
0
1
0
1
1
1
0
Obedea a seguinte configurao de hardware.
Pino do microcontrolador
RB0
RA4
RD0
RD1
Direo
Entrada
Entrada
Sada
Sada
LED2
0
1
0
0
Funo
Chave 1
Chave 2
LED 1
LED 2
Anotaes:
Exsto Tecnologia
238
Questionrio
1.
Exerccio
1. Exerccio resolvido (Aula8E1): Desenvolver o projeto de controle de um sistema de
aquecimento de gua representado pela figura abaixo.
Funcionamento:
I.
O tanque deve encher acionando-se a bomba (BOMBA) at que o lquido atinja o
nvel mximo do tanque, o que ser indicado pelo sensor NMAX.
II.
Estando o tanque cheio, aciona-se o aquecimento atravs de uma resistncia
controlada pelo rele AQUECE. Essa Resistncia deve ficar acionada por 3 segundos, e
depois permanecer acionada at que a temperatura atinja o valor pr-estabelecido,
quando ento o sensor STEMP ir atuar.
Exsto Tecnologia
239
III.
IV.
Atingida a temperatura mxima a vlvula VALV deve ser aberta. Ela deve permanecer
aberta at que o nvel de gua chegue ao mnimo, quando NMIN deixa de indicar
presena de lquidos.
Quando o tanque estiver vazio, a vlvula deve ser fechada e o processo se reinicia.
Condies de projeto:
I.
II.
III.
IV.
Configurao de hardware:
Sinal
Pino
Direo
Tipo
NMIN
RB0
Entrada
Alto-ativo
NMAX
RB1
Entrada
Alto-ativo
STEMP
RB2
Entrada
Alto-ativo
BOMB
RD0
Sada
Baixo-ativo
VALV
RD1
Sada
Baixo-ativo
AQUECE
RD2
Sada
Baixo-ativo
II.
III.
Exerccio Propostos
1. Faa um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0
pisque 3 vezes, usando obrigatoriamente while.
2. Faa um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0
pisque 3 vezes, usando obrigatoriamente for.
Exsto Tecnologia
240
3. Desenvolva um programa que realize as funes descritas na tabela abaixo (lembrando que
as chaves so baixo ativas);
RB0
1
0
1
0
RB1
1
1
0
0
Ao
Nenhuma ao
LED0 piscado a 1Hz
LED0 piscando a 8Hz
LED0 aceso constantemente
Anotaes:
Exsto Tecnologia
241
9 Aula 9 Funes
Objetivos
Questionrio
1.
Exerccios
1. Exerccio Resolvido (Aula9E1): Simule o exemplo Funes.c, observado o funcionamento da
pilha, o comportamento dos diferentes tipos de variveis (global, local e static) e a passagem
de parmetros.
2.
Crie uma funo que realize a decomposio de inteiro para 5 dgitos, chamada IntToBCD. O
parmetro de entrada (inteiro) deve ser o parmetro de entrada da funo. Os 4 dgitos
devem ser variveis globais.
3. Altere o exerccio anterior para que os dgitos sejam parmetros passados por referncia
(ponteiros).
4. Crie uma biblioteca de funes (composta por IntToBCD.h e IntToBCD.c) para conter funo
desenvolvida no exemplo anterior.
Anotaes:
Exsto Tecnologia
242
10 Aula 10 Interrupes
Objetivos
Estudar o sistema de interrupes do PIC18
Entender a prioridade de interrupes
Construir rotinas de tratamento de interrupo.
Questionrio
1. Quantos nveis de prioridade de interrupo h no PIC18?
2. Quando o programa est sendo executado e ocorre uma interrupo de baixa prioridade, o
que ocorre?
3. Se uma interrupo de alta prioridade ocorre durante a execuo da RTI de baixa prioridade,
o que acontece.
4. Quais os bits de habilitao global das interrupes de alta e baixa prioridade?
5. Como identificar qual a causa da interrupo?
6. Que providncias devem ser tomadas sempre ao se tratar uma interrupo?
Exerccio
1. Exerccio resolvido (Aula10E1): Para demonstrar o funcionamento das interrupes vamos
desenvolver um programa que acione os LEDs de forma diferente no programa principal e
nas interrupes de baixa e alta prioridade. A interrupo de baixa prioridade ser a
interrupo INT2 e a interrupo de alta prioridade ser INT1.
No programa principal os leds ficam todos piscando ao mesmo tempo, em uma
freqncia de 2Hz.
Quando ocorrer uma interrupo de baixa prioridade ser feito um deslocamento de
LED acionado da esquerda para a direita e da direita para esquerda, 3 vezes. Cada LED
permanece acesso por 200ms.
Quando ocorrer a interrupo de alta prioridade, os LEDs sero acionado intercalados
(10101010), se tero seus estados invertidos a cada 500ms, por 3 vezes.
Execute o programa. Teste inicialmente as interrupes separadamente. Em seguida tente a
acionar uma enquanto as outra est sendo executada. Observe e anote os resultados.
Ateno: Esse exemplo para fins didticos somente. extremamente recomendado que
no se use rotinas de atraso dentro de uma RTI.
Exsto Tecnologia
243
2. Altere o exemplo anterior de forma que no haja mais prioridade de interrupo (IPEN = 0).
Nesse caso, s estar ativa a interrupo de alta prioridade e as RTI devem ser reescritas.
Execute o programa e acione uma chave por vez. Em seguida tente a acionar uma enquanto
a outra est sendo executada. Observe e anote os resultados.
Exerccios propostos
1. Escreva um programa que inverta o estado de RD0 a cada 500ms em sua rotina principal. O
pino RD1 deve ter se estado invertido conforme o valor de uma varivel global Tempo.
Quanto ocorrer interrupo INT1, que deve ser de alta prioridade, RD2 ir para 1 e Tempo
recebe um valor que faz o RD1 inverter de estado a cada 200ms. Quando ocorrer a
interrupo INT2, que deve ser de baixa prioridade, RD2 ir para 0 e RD1 passa a inverter a
cada 1s.
Anotaes:
Exsto Tecnologia
244
Introduo
Em muitas aplicaes com microcontroladores necessrio passar informaes para
pessoas. Nestes casos, diversos recursos podem ser utilizados. Dois muito comuns so o display de
sete segmentos e o buzzer, que sero tratados nesta experincia.
O dispaly de 7 segmentos um arranjo de LEDs que permite formar nmeros e algumas
letras conforme a combinao de segmentos acionados. Esse tipo de display pode ser multiplexado,
isto , vrios ligados em conjunto acionando um s por vez, o que o torna um interface bastante
verstil.
O buzzer nada mais que um alto-falante muito simples, feito para emitir sons com maior
intensidade em determinadas freqncias. Esse componente se torna muito til na medida em que
pode chamar a ateno do usurio para um equipamentos, sem que aquele esteja olhando
diretamente para este. Basicamente existem buzzers auto-oscilantes, que basta alimentar para que
emita som, e buzzers que precisam receber um sinal quadrado para serem acionados. O kit
equipado com um buzzer desse ltimo tipo.
Questionrio
1. Como o circuito interno de um display de 7 segmentos catodo-comum?
2. Como declarar um vetor de constantes
3. Desenhe um circuito capaz de multiplexar 4 displays de 7 segmentos?
4. Para que o circuito da questo acima possa operar corretamente, qual tempo cada segmento
deve permanecer acionado.
5. Admitindo que um buzzer tenha seu melhor desempenho na freqncia de 4,2kHz, qual o
perodo do seu sinal?
6. Para o buzzer do exemplo acima, escreva um trecho de cdigo capaz de acionar
ininterruptamente o buzzer usando rotinas de delay e supondo um oscilador de 20 MHz.
Dica: o pino do microcontrolador que aciona o buzzer deve permanecer meio perodo em 1
e meio perodo em 0.
Exerccios
Exsto Tecnologia
245
Exerccio Propostos
1.
Altere o exerccio 2 para que ele seja possvel programar um valor de contagem usando RB0
e RB1 e, ao pressionar RB2 esse valor seja decrementado a cada 1 segundo, at zerar.
2. Altere o exerccio 3 para que, ao pressionar o boto, a freqncia do buzzer alterne entre 4,2
kHz e 2,4kHz, permanecendo (aprox.) 1s cada um. Dica: para definir o tempo em que cada
freqncia usada conte os perodos do sinal gerado.
Anotaes:
Exsto Tecnologia
246
Introduo
Para construir uma IHM (interface homem-mquina) eficiente podemos usar display de
cristal lquido alfanumrico e teclas matriciais. Alm disso, o portal B possui uma interrupo
especialmente til para a escrita de teclado. Essas facilidades podem ser usadas em C atravs de
bibliotecas de funes.
Questionrio
1. Quais os sinais necessrios para controlar um display de cristal lquido alfanumrico?
2. Qual interrupo do PIC18 pode ser usada em conjunto com um teclado matricial?
Exerccios
1. Exemplo resolvido (Aula12E1): Construir um programa que faa a leitura do teclado e
escreva a tecla lida no centro da segunda linha do LCD. Na primeira linha deve aparecer a
mensagem Exsto Tecnologia. Execute o programa e observe os resultados
2. Altere o programa anterior para escrever seu nome em lugar da mensagem Exsto
Tecnologia.
3. Altere o programa para que sejam lidos 4 teclas. Se a seqncia dessas teclas for 1, 2, 3 e
4, deve aparecer a mensagem Senha correta no LCD; caso contrrio, deve parecer
Senha Errada. As teclas lidas devem ser escritas uma ao lado da outra no LCD.
Exerccios Propostos
1. Desenvolva uma rotina capaz de escreve no LCD o valor de variveis do tipo unsigned
char, chamada PrintChar.
2. Desenvolva uma rotina capaz de escreve no LCD o valor de variveis do tipo unsigned int,
chamada PrintInt.
Exsto Tecnologia
247
Introduo
Como o prprio nome indica, os timers so perifricos muito teis para gerar temporizao.
Para isso, determinamos um valor inicial que deve ser carregado no timer para que ele gere uma
interrupo aps um tempo pr-determinado. A equao (1) mostra como calcular o tempo (T) at o
estouro do timer aps a carga de um valor inicial (To), usando uma pr-escala de valor PS. O sinal
aplicado ao timer tem perodo TCY (quando a fonte de clock interna). TOV o valor de contagem que
causa overflow (65536 para 16 bits e 256 para 8 bits) Essa equao valida para os timers 0, 1 e 3.
T = (TOV T0 ) ( PS TCY )
(1)
A equao (2) mostra como determinar To para obter um tempo T desejado. Nesse caso, o
valor da pr-escala deve ser arbitrado.
T0 = TOV
1
T
PS TCY
(2)
Questionrio
1. Quais os timers do PIC184550? De quantos bits cada timer?
2. Qual a funo da pr-escala? E da ps-escala do timer 2?
3. Se o timer 1 est configurado com pr-escala de 1:4 e usando a fonte de clock interna com
oscilador de 8MHz quanto tempo entre o momento que o timer zerado e seu overflow?
4. Se o timer 2 configurado com pr-escala de 1:16, ps-escala de 1:3, usando a fonte de clock
interna com oscilador de 4MHz e o registro PR2 contm o valor 200, a cada quantos
milisegundos o flag de interrupo setado?
5. Qual o argumento para a funo OpenTimer1 para configurar o timer 1 conforme a questo
3?
6. Qual o argumento para a funo OpenTimer2 para configurar o timer 1 conforme a questo
4?
Exerccios
Exsto Tecnologia
248
Exerccios Propostos
1. Determinar as equaes para determinao de To e T aplicveis ao timer 2.
2. Crie um relgio, com contagem de hora, minutos e segundos usando o timer 1
Anotaes:
Exsto Tecnologia
249
Questionrio
1. Por que conversores A/D so necessrios?
2. Quais os pinos de entrada dos comparadores no PIC18F4550? Aps o reset, esses pinos esto
configurados como entradas analgicas ou digitais.
3. Qual o evento que gera a interrupo do comparador?
4. Como so acessadas as sadas dos comparadores em C?
Exerccios
1. Exerccio Resolvido (Aula14E1): Desenvolver um programa que faa a leitura do canal 0 do
conversor A/D e acione os LEDs do PORTD progressivamente conforme essa tenso aumenta
(bargraph). Configure o kit de forma que o canal 0 leia a o sinal do potencimetro (POT).
2. O kit possui um sensor de temperatura LM35. Este sensor apresenta em sua sada um sinal
linear de 10mV/oC. Faa a leitura desse sensor e mostre o valor no LCD; para tanto ser
necessrio fazer a converso do valor lido de binrio para oC e posteriormente quebrar
este valor em dgitos para apresent-los no display.
Dica: evite o uso de variveis fracionrias (ponto flutuante).
Exerccios Propostos
1. Faa um programa de controle de temperatura, que mantenha a temperatura lida pelo
sensor entre 32 e 40oC. Para isso faa a leitura do sensor e acione a resistncia de
aquecimento (RC1) para aquecer at atingir 40oC e a ventoinha (RC2) para resfriar at atingir
32 oC. Apresente no LCD a temperatura e se est aquecendo ou esfriando.
Exsto Tecnologia
250
Captura
Comparao
PWM
Questionrio
1. O que fazem cada um dos modos de operao do CCP
2.
Exerccios
1. Exerccio Resolvido (Aula15E1): Configure o timer 1 e ECCP1 para que o mdulo CCP gere
uma interrupo a cada 1 segundo. No tratamento de interrupo do ECCP1 implemente
rotinas de um relgio de hora, minutos e segundos. No loop principal apresente no LCD a
hora.
2. Exerccio Resolvido (Aula15E2): Desenvolver um programa que configure a freqncia do
PWM do CCP2 em 2 kHz e permita a variao do Duty-cicle com incrementos e decrementos
de 10% atravs das chaves nos pinos RB0 e RB1, respectivamente. Configure o hardware do
kit para que o sinal do PWM acione a lmpada na placa. Observe o que acontece.
3. Combine os dois exemplos anteriores, de forma que tenhamos o relgio e o controle da
luminosidade da lmpada ao mesmo tempo
Exerccios Propostos
1. Altere o exerccio proposto da aula 15 para que a converso do AD seja disparada pelo
mdulo CCP2 configurado em modo comparao, gerando disparos a cada 100ms. Para isso
deve-se ativar a interrupo do ADC (e no do CCP2) para fazer a leitura dos valores
Exsto Tecnologia
251
Anotaes:
Exsto Tecnologia
252
Questionrio
1. Sobre comunicao paralela, cite:
a. Suas vantagens:
b. Suas desvantagens:
2. A comunicao de forma serial elimina vrios problemas presentes na comunicao paralela,
mas apresenta algumas desvantegens. Quais so elas.
3. Cite alguns sistemas de comunicao serial.
4. O que comunicao sncrona?
5. O que comunicao assncrona?
6. Explique o processo pelo qual possvel criar sincronismos na comunicao assncrona sem a
presena do sinal de clock.
7. Por que no possvel enviar infinitos bits usando apenas um star bit inicial?
8. Preencha a figura abaixo com os elementos que compem a comunicao serial e descreva a
funo de cada um deles.
___________
_________________
_____________________
_________________________
__________
_
Exsto Tecnologia
253
Spbrg
Taxas altas ou
Taxa real
e%
baixas?
2400 bps
9600 bps
19200 bps
57600 bps
250000 bps
Exerccios
1. Exerccio resolvido (Aula16E1): Desenvolver um programa capaz de transmitir via RS232 para
um computador as teclas pressionadas no teclado e imprimir no LCD os caracteres recebidos
do computador. Utilize taxa de transmisso de 9600 bps.
Dica: 1. utilize no computador o Hiper Terminal ou outro software de terminal disponvel.
2. para ganhar tempo, tome como base o arquivo Aula12E1 (LCD e teclado)
2. Altere o programa anterior para realizar a comunicao entre dois kits utilizando RS485. Da
mesma maneira que o exerccio acima, o valor pressionado no teclado deve ser enviado e o
Exsto Tecnologia
254
Exerccios Propostos
1. Desenvolver um programa que fique constantemente lendo o sensor de temperatura e envie
essa informao (em graus Celsius) pela porta serial RS232 para um computador.
2. Desenvolver um sistema onde 3 kits trocam informaes entre si, sendo um mestre e dois
escravos. Cada escravo deve ter um endereo diferente, de forma que o mestre consiga se
comunicar hora com um, hora com outro. O mestre deve realizar um comando de leitura que
tenha como resposta o valor Lido no potencimetro POT de cada kit, e mostre
simultaneamente esses valores no LCD.
Anotaes:
Exsto Tecnologia
255
17 Aula 17 SPI
Objetivos
Entender o funcionamento de do protocolo de comunicao SPI
Aprender a configurar o mdulo MSSP do PIC18 para operar em modo SPI meste
Conhecer o funcionamento de potencimetros digitais.
Implementar um comunicao serial entre o PIC18 e o potencimetro digital do kit
Introduo
Existem diversos componentes que utilizam o protocolo de SPI para se comunicar com outros
circuitos. De fato, como um modo eficiente e simples de comunicao, os mais diversos
componentes que podem ser comunicar com microcontroladores possuem essa porta de
comunicao, como memrias, relgios, expansores de I/O, dispositivos de comunicao (Zigbee,
ethernet, rdios), CODEC, AD, DA, amplificadores de ganho programvel, sensores de temperatura,
acelermetros, para citar alguns exemplos.
Como aplicao para o protocolo SPI no kit XM118 existe um potencimetro digital. Um
potencimetro digital um componente que se comporta como um potencimetro convencional,
isto , possui terminais e um cursor, e a resistncia entre o cursor e os terminais varia conforme o
ajuste. Porm, ao contrrio de um potencimetro convencional, o ajuste do potencimetro digital
feito digitalmente por um microcontrolador. No caso do componente em questo no kit, que o
MCP41010, esse ajuste feito atravs da interface SPI.
No kit o potencimetro digital est ligado numa montagem divisor de tenso, de maneira
que os terminais estejam ligados a VDD e a GND e que possamos medir a tenso no cursor variando
entre esses dois extremos. Esse sinal pode ser aplicado a um canal de AD.
Para mais detalhes do funcionamento do MCP41010 e para entender como ele se comunica
com o microcontrolador, consulte seu manual, que se encontra no CD que acompanha o kit.
Questionrio
1. Em quais modos pode operar a SPI do PIC18F4550?
2. Descreva a funo de todos os pinos da porta SPI do PIC18F4550.
3. Quais fontes de clock podem gerar a taxa de transmisso do mdulo MSSP em modo SPI?
4. Consulte o manual do potencimetro digital MCP41010 e responda as questes a seguir
a. Qual a resistncia do potencimetro interno do MCP41010?
b. Qual a faixa de tenso nos terminais do potencimetro.
Exsto Tecnologia
256
Exerccios
1. Exerccio Resolvido (Aula16E1): Implemente um programa que envia valores para o
potencimetro digital a cada 50ms. Esses valores devem variar seqencialmente entra 0 e
255 e depois de 255 a 0. Tomando como base o primeiro exerccio sobre AD, mea o valor
da sada do potencimetro e mostre-o atravs de um bargraph de LEDs. Mea com um
osciloscpio esse sinal.
2. Desenvolva um programa que leia a tenso do potencimetro do kit atravs do canal AN3 e
ajuste o potencimetro digital com essa mesma tenso (ou o mais prximo que for possvel).
No display LCD devem ser mostradas as tenses lidas do potencimetro convencional (AN3)
e do potencimetro digital (AN0).
Exerccios Propostos
1. Altere o exerccio 2 para que o valor do potencimetro digital s se ajuste ao potencimetro
convencional enquanto a tecla em RB0 estiver pressionada, mantendo seu valor caso
contrrio.
Anotaes:
Exsto Tecnologia
257
18 Aula 18 I2C
Objetivos
Estudar o protocolo I2C
Entender o funcionamento de uma memria serial I2C
Realizar uma aplicao prtica envolvendo memria externa e I2C.
Questionrio
1. Em quais modos pode operar o PIC em modo I2C?
2. Explique como possvel realizar a comunicao bidirecional entre dois dispositivos no
barramento I2C usando apenas 1 terminal de dados (SDA). Porque importante a presena
do resistor de pull-up ligado a esse pino?
3. O que caracteriza as condies de Star e Stop no protocolo I2C?
4. O que o ACK? Quando e como ele gerado?
5. Qual o procedimento para gerar uma leitura de um endereo qualquer de um dispositivo
I2C?
Exerccios
1. Exerccio Resolvido (Aula17E1): Desenvolver um programa que leia o teclado e apresente na
primeira linha do display valor lido. Se for pressionada a tecla A deve-se gravar a ltima
tecla vlida na EEPROM, no endereo 0. Na segunda linha deve-se apresentar o valor lido no
endereo 0 da EEPROM. Aps grava algum valor desligue o kit e observe que a EEPROM no
perde os dados.
Cuidado! Garanta que o programa s realize uma gravao cada vez que a tecla A for
pressionada. Caso o programa entre em loop e realize mltiplas gravaes a memria pode
ser danificada.
2. Altere o projeto desenvolvido no exerccio 3 da aula 12, onde so lidas 4 teclas e comparadas
com o 1234, para que a comparao seja feita com os quatro primeiros endereos da
EEPROM externa. Alm disso, se for pressionada a tecla A pea a senha antiga e em seguida
uma nova senha e grave-a na memria.
Dica: necessrio garantir que a senha original (1234) esteja gravada na memria.
Escreve um trecho de cdigo para fazer isso uma vez e em seguida comente essa parte do
programa para que a ltima senha gravada seja preservada.
Exerccios Propostos
Exsto Tecnologia
258
Anotaes:
Exsto Tecnologia
259
Introduo
Expasores de I/O
Apesar de estarem disponveis microcontroladores com diferentes quantidades de pinos, as
vezes as condies do projeto levam a uma situao onde no h pinos suficientes para a aplicao
desejada. Quando isso acontece deve-se pensar em algum processo de expanso de I/O. O mtodo
mais simples atravs do uso de buffers (por exemplo, 74HC244) e Latchs (por exemplo, 74HC573),
criando um barramento de dados externo compartilhado por esses dispositivos. O inconveniente
desse processo que, mesmo com a expanso, o nmero de pinos demandada grande. Outro
mtodo possvel so resgitradores de deslocamento, fazendo converso serial/paralelo ou
paralelo/serial, de forma que o microcontrolador utilize poucos pinos em uma interface serial. Por
fim, mais modernamente esto disponveis componentes chamados de expansores de I/O. esses
componentes tem as mesmas caractersticas dos portais do microcontrolador, podendo-se
configurar individualmente seus pinos como entrada ou sada. Eles possuem interface SPI ou I2C,
facilitando em muito o desenvolvimento de aplicaes.
O mdulo XMM01 utiliza um expansor de I/O MCP23016 para obter mais 16 pinos de I/O (8
entradas e 8 sadas).
Interface industrial
Muitas vezes o microcontrolador utilizado em aplicaes industriais, substituindo PLCs ou
em automao de mquinas. Nesses casos alguns cuidados deve ser tomados. O circuito do
microcontrolador, que vamos chamar circuito de controle, opera em baixas tenses (3,3VDC ou 5VDC)
e aceita um certo nvel de rudo. J as cargas e dispositivos entrada de aplicaes industriais
costumam operar em tenses mais altas (10 VDC, 24 VDC e 48 VDC) ou mesmo tenso alternada (110VAC
e 220VAC). Alm disso, o nvel de rudo presente maior, proveniente de chaveamento de circuitos
de potncia (contatores, tiristores, etc...) ou proveniente de dispositivos como motores, bombas,
etc... Portanto, na prtica o desejvel o isolamento galvnico entre as partes de controle e potncia
do circuito (dois circuitos so isolados galvanicamente quando no existe contato eltrico entre eles).
Exsto Tecnologia
260
Nessas situaes usa-se foto-acopladores (tambm conhecidos como opto-isoladores) para fazer
garantir o isolamento dos sinais. Essa precauo no tem sentido se os circuitos ficarem em contato
prximo na placa, portanto tambm deve existir um cuidado de layout para garantir a separao dos
diferentes domnios eltricos.
O mdulo XMM118 possui entradas e sadas isoladas (foto-acopladas) que permitem a
conexo a sinais de 10 a 24VDC. Atravs do uso desse mdulo possvel realizar aplicaes de
controle em aplicaes reais industriais, como: leitura de sensores digitais e chaves, acionamento de
rels, vlvulas e outros dispositivos. Adicionalmente o prprio kit XM118 possui entradas (0 a 10V, 4
a 20 mA) e sadas (a sada do DAC pode ser ajustada para at 0 a 10V) que podem ser usadas em
aplicaes tipicamente industriais (nesse caso no existe isolamento galvnico).
Alm disso, observe que os domnios de eltricos esto separados, o que pode ser
evidenciado pelos diferentes tipos de malha de terra empregados na placa.
Questionrio
Consulte o manual do MCP23016 e responda as perguntas abaixo.
1. Quantos pinos de I/O o dispositivo possui?
2. Qual a interface de comunicao desse dispositivo?
3. O MCP23016 possui 3 pinos para definio de seu endereo no barramento de comunicao.
Quais so esses pinos? Quantos dispositivos iguais poderamos ter em um mesmo
barramento ento? Quantos pinos de I/O estariam disponveis nessa condio?
4. Quais os registros responsveis pela definio de direo dos pinos?
Exerccios
1. Exerccio Resolvido (Aula19E1): Desenvolva uma biblioteca de funes que permita (1)
configurao do MCP23016 no que se refere a direo dos pinos de I/O, (2) Leitura de portal
de entrada e (3) escrita no portal de sada. Para testar essa biblioteca a informao lida da
entrada deve ser apresentada nos LEDs do kit e as sadas devem ser acionadas
seqencialmente a intervalos de 100ms.
O protocolo de comunicao do MCP23016 similar ao da memria EEPROM, portanto
use as rotinas de leitura e escrita da EEPROM I2C presentes na biblioteca I2C.h para fazer as
novas funes.
2. Alterar o programa 3 da aula 7 para operar usando o XMM01.
3. Alterar o programa 2 da aula 8 para operar usando o XMM01.
Exsto Tecnologia
261
MANUAL DE OPERAO
E MANUTENO
Exsto Tecnologia
262
263
1 Contedo do Kit:
Depois de retirar o seu kit de desenvolvimento da caixa, verifique se o mesmo possui os
seguintes itens:
Caso ocorra a falta de algum destes itens ou defeito, consulte a Exsto Tecnologia para
esclarecimentos.
Ao inserir o CD no drive ele deve automaticamente iniciar um aplicativo que permite navegar por
seu contedo.
2 Instalaes
2.1 Instalao do Hardware
Ao retirar o kit da embalagem confirme a presena de todos os acessrios e equipamentos,
conforme descrito no item 1 deste manual.
Para alimentar o kit ligue o cabo tripolar ao kit e a uma tomada de alimentao. O kit
equipado com fontes chaveadas que operam, de forma automtica, com 110 ou 220V, em 50 ou
60Hz. Para ligar o kit, use a chave que se encontra junto ao conector tripolar, na parte traseira do kit.
Ligue o kit e verifique se os LEDs indicadores de alimentao e o logotipo da Exsto na parte
frontal se acenderam, indicando que est tudo funcionando corretamente.
Exsto Tecnologia
Na parte traseira do bastidor existe um conector USB. Esse conector o conector conecta o
computador ao gravador/depurador X-ICD2.
Ateno: no conecte o cabo USB a X-ICD2 antes de ter instalado o MPLAB, caso
contrrio no ser reconhecido o driver do dispositivo, podendo ocasionar falhas de
funcionamento.
Exsto Tecnologia
264
Figura 1.
Execute o arquivo Install_MPLAB_v820.exe. Para isso clique em Instalar MPLAB 8.20 no aplicativo
executado quando o CD inserido.
A primeira tela apenas uma tela de boas vindas. Nela so recomendadas as seguintes aes antes
de instalar o MPLAB:
265
Esta tela apresenta o contrato de licena do MPLAB. Leia-o atentamente e, estado de acordo,
marque a opo I accept the terms of the license agreement e clique em Next.
Nesta tela possvel escolher entre a verso completa e personalisada. Recomendamos optar por
Completa e clicar em Next.
Exsto Tecnologia
266
Nesta tela possvel escolher a pasta de instalao do MPLAB, o que no recomendamos. Clique em
Next.
Esta tela apresenta o contrato de licena do Application Maestro (um aplicativo que instalado
juntamente como o MPLAB). Leia-o atentamente e, estado de acordo, marque a opo I accept the
terms of the license agreement e clique em Next.
Exsto Tecnologia
267
Esta tela apresenta o contrato de licena do compilador C32. Leia-o atentamente e, estado de
acordo, marque a opo I accept the terms of the license agreement e clique em Next.
Esta tela apresenta um resumo da instalao antes que essa seja iniciada. Estando tudo correto,
clique em Next para iniciar a instalao.
Exsto Tecnologia
268
Nesta tela apresentado o andamento da instalao. Esse processo pode demorar alguns minutos.
Essa tela aparece durante a instalao e questiona sobre a instalao do compilador HI-TECH C, que
um compilador (verso Demo)associado ao MPLAB. Clique Yes caso queira instal-lo e No caso
contrrio.
Exsto Tecnologia
269
Ao final da instalao aparecer a tela acima. necessrio reiniciar o computador para que o MPLAB
possa ser executado normalmente. Para isso, marque a opo Yes, I want to restat my computer
nowe clique em Finish.
2.2.2
Exsto Tecnologia
270
Conforme a orientao apresentada, o MPLAB IDE deve ser fechado antes da instalao do
C18. Clique em Next para a prxima tela.
Uma vez lido o contrato de licena e aceitos seus termos marque a opo I Accept e clique
em Next.
Exsto Tecnologia
271
Na tela acima possvel alterar o diretrio de instalao do C18 clicando no boto Browse...,
apesar de recomendarmos que isso seja feito. Clique em Next.
Exsto Tecnologia
272
importante marcar todos os campos nas telas acima para que o MPLAB IDE seja atualizado
para trabalhar com o compilador C18. Aps marcar todos os campos, clique em Next.
Exsto Tecnologia
273
Clicando em Next na tela acima a instalao tem incio. Esse processo pode levar algum
tempo. Uma vez terminado esse processo a tela abaixo apresentada. Clique em Finish para
terminar o processo.
Exsto Tecnologia
274
Exsto Tecnologia
275
Exsto Tecnologia
276
2.3.2
Exsto Tecnologia
277
Exsto Tecnologia
278
Exsto Tecnologia
279
Exsto Tecnologia
280
Exsto Tecnologia
281
Figura 2.
Serigrafia do Kit XM118
O hardware do Kit Educacional XM118 foi concebido para permitir a maior flexibilidade possvel
nas ligaes. Par os pinos com diversas funes foram ligados a chaves dip switch, de forma a
permitar a conexo com diferentes circuitos de aplicao. Para configurar corretamente o hardware
para suas necessidades leia as tabelas indicativas das funes das chaves.
Muitos dos circuitos de aplicao possuem pontos de testes (test points) que facilitam a medida de
seus principais sinais.
A seguir so apresentadas detalhadamente as partes do circuito. Elas fazem referncia ao
esquema eltrico que se encontra no anexo A deste manual e em forma PDF no CD.
282
proteo entrada contra surtos de tenso. O bastidor metlico aterrado, para maior proteo dos
usurios.
Ateno: os recursos de proteo s so eficazes se o terceiro pino do cabo tripolar
estiver conectado a um aterramento de qualidade. A Exsto tecnologia no se
responsabiliza por danos ou acidentes ocasionados por baixa qualidade ou
inexistncia de aterramento.
PIC18F4520
DC a 48MHz
32768 bytes
2048 bytes
256 bytes
20
36
4
1
1
MSSP
EUSART 2
Sim
SPP3
10 bits, 13 canais
1
75 convencionais + 8
do modo entendido
Exsto Tecnologia
283
Pinagem do PIC18F4550
Para mais dados tcnicos, consulte o manual do componente que se encontra do CD que
acompanha o produto.
Alm do PIC18F4550 outros microcontroladores PIC de 40 pinos podem ser usados na placa,
desde que sejam compatveis pino a pino (o que verdade para a maioria dos pinos de componentes
com o mesmo encapsulamento). Alguns modelos muito populares suportados com algumas poucas
restries so o PIC18F4520 e o PIC16F877A.
284
necessrio, j que os pinos de gravao so pinos de I/O usados em algumas aplicaes e o pino de
reset.
Ateno: para realizar corretamente o processo de gravao certifique-se de que
todas as chaves de U8 esto na posio ON.
Alm disso, o conector CN9 permite gravar/depurar outros componentes externos, seja
atravs do header (placa para gravao de componente) que acompanha o circuitos, seja em placas
desenvolvidas pelo prprio usurio. Para isso, um cabo RJ11-RJ11 acompanha o produto.
Ateno: quando for gravar ou depurar um microcontrolador externo todas as
chaves de U8 devem
Descrio
Target/Verde
Busy/Amarelo
Error/Vermelho
USB/Verde
Almm desses LEDs internos, existe na placa o LED D41 que indica quando o
microcontrolador est sendo acessado. Observando esse LED podemos detectar se existem
problemas na gravao.
Exsto Tecnologia
285
O primeiro ponto a ser abordado a seqncia de pinos do XICD. O cabo que acompanha o
produto se limita a fazer a ligao entre o XICD e a placa reader. Entretanto, pode ser necessrio
fazer a ligao do XICD a outro tipo de placa onde o microcontrolador no pode ser colocado no
reader ou ainda por ser necessria a depurao o microcontrolador tem que estar funcionando na
placa de desenvolvimento.
Como a seqncia dos pinos deve ser respeitada para que o funcionamento seja feito, abaixo
temos uma figura que mostra a forma com que cada pino est ligado no conector do XICD.
Exsto Tecnologia
286
Ligao do XICD
Embora o pino 2 (VDD) possa suprir uma quantidade limitada de corrente para o alvo sobre
certas condies, nas operaes seguintes os pinos 2 e 3 sero omitidos. Estes pinos so
apresentados no diagrama, mas apenas trs ligaes so relevantes para operao do XICD: VPP,
PGC e PGD.
Nos diagramas seguintes os pinos de VDD e VSS (GND) sero ignorados. Mas esteja ciente de
que o VDD da placa de desenvolvimento tambm usado para alimentar os drivers de sada do XICD.
importante lembram que nem todos PICs tem entradas para alimentaes distintas, mas se elas
existirem no PIC em que se deseja operar, todas devem conectadas corretamente para que o XICD
opere corretamente. A interconexo muito simples, qualquer problema comum freqentemente
causado por outras conexes ou componentes nas vias de uso do XICD que interferem com seu
funcionamento, como os apresentados no capitulo abaixo.
3.4.1
correto do XICD.
Exsto Tecnologia
287
Ligao do XICD
Para o projeto de ligao do XICD em uma placa de desenvolvimento siga corretamente as
recomendaes abaixo:
No use resistores de pull-up nos pinos PGC e PGD: eles iro impedir a transio
rpida, tanto de dados como do sinal de clock nas operaes de gravao e
depurao.
No use capacitores no pino VPP: eles iro impedir a transio rpida de VPP.
Geralmente o resistor de pull-up suficiente.
No use diodos nos pinos PGC e PGD: eles iro impedir a comunicao bidirecional
entre a placa e o XICD.
3.5 Configurao
O microcontrolador tem um nmero limitado de pinos para poder interagir com todos os
circuitos presentes no kit. Alm disso, vrios pinos tm mais de uma funo, podendo trabalhar de
forma diferente com cada circuito a ele associado. Para maximizar o nmero de aplicaes que
podem ser realizadas se faz necessrio atribuir mais de um circuito a cada terminal do componentes
e selecionar o circuito a ser usado em cada caso.
Alguns circuitos esto simplesmente ligados em paralelos, como por exemplo, LEDs e LCD,
teclado e chaves. Outros so selecionados atravs de chaves de configurao. A tabela abaixo
apresenta as configuraes possveis, indicando o portal do microcontrolador, o sinal utilizado, sua
funo e direo (em relao o microcontrolador).
Exsto Tecnologia
288
Ateno: Nos pinos o microcontrolador que tem mais de uma funo associada
apenas uma deve ser selecionada por vez.
Portal do
Sinal
microcontrolador
RC0
555_OUT
TACOGRAFO
RC1
AQUECEDOR
LAMP
RC2
VENTILADOR
BUZZER
DAC
RA3
POT
RA2
LCD_CS
USB_SENSE
RA4
TACOGRAFO
CS_REST
RS_EN
RE1
LED_1G
RE0
LED_1R
RA5
LED_2G
RA3
LED_2R
RA0
ANALOG1
POT
DPOT
TEMP
RA1
ANALOG2
DAC_OUT
RA2
0-10V
RA3
4-20mV
RC4
DRC5
D+
RC6
RS_485_TX
RS_232_TX
RC7
RS_485_RX
RS_232_RX
RC6
RELE_1
RC7
RELE_2
RD6
RELE_3
RD7
RELE_4
Notas:
Direo
Entrada
Entrada
Sada
Sada
Sada
Sada
Sada
Entrada
Sada
Entrada
Entrada
Sada
Sada
Sada
Sada
Sada
Sada
Entrada
Entrada
Entrada
Entrada
Entrada
Entrada
Entrada
Entrada
Bidir
Bidir
Sada
Sada
Sada
Sada
Sada
Sada
Sada
Sada
Funo
Sinal do gerador de sinais
Sinal do tacgrafo (conta-giros) da ventoinha
Controle da resistncia para aquecimento
Controle da lmpada DC
Controle da ventoinha
Controle do buzzer
Entrada do filtro do DAC do PWM
Sinal analgico do potencimetro
Chip Select do display grfico
Entrada indicadora de conexo com USB
Sinal do tacgrafo (conta-giros) da ventoinha
Habilitao do MCP41010 e do HT1380
Habilitao de transmisso pela porta RS485
Aciona cor verde do LED bicolor 1
Aciona cor vermelha do LED bicolor 1
Aciona cor verde do LED bicolor 2
Aciona cor vermelha do LED bicolor 2
Entrada Analgica AN1
Potencimetro
Potencimetro digital
Sensor de temperatura
Entrada Analgica AN1
Feedback do conversor D/A
Entrada Analgica de 0 a 10 V
Entrada Analgica de 4 a 20 mA
Comunicao USB 1
Transmisso serial para RS485 2
Transmisso serial para RS232 2
Recepo serial para RS485 2
Recepo serial para RS232 2
Aciona Rel 1
Aciona Rele 2
Aciona Rel
Aciona Rele 4
1 Ao contrrio dos demais, esses pinos esto diretamente ligados a porta USB e, para us-los como entradas a
chave deve estar em ON. Quando for usada a comunicao as chaves devem permanecer em OFF.
2 Na serigrafia das chaves est trocado TX com RX, sendo correta a informao apresentada na tabela.
A tabela abaixo mostra a configurao dos dip switch para cada circuito.
Exsto Tecnologia
289
Portal do
microcontrolador
Sinal
Chave
Dip Switch
PWM e Timers
RC0
RC1
RC2
RA3
RA2
RA4
RE1
RE0
RA5
RA3
RA0
RA1
RA2
RA3
RA0
RA1
RC4
RC5
RA4
RC6
RC7
RC6
RC7
RD6
RD7
Notas:
555_OUT
1
TACOGRAFO
2
AQUECEDOR
3
LAMP
4
VENTILADOR
5
BUZZER
6
DAC
7
POT
8
Perifricos Diversos
LCD_CS
1
USB_SENSE
2
TACOGRAFO
3
CS_REST
4
LED_1G
5
LED_1R
6
LED_2G
7
LED_2R
8
Perifricos Analgicos
ANALOG1
1
ANALOG2
2
0-10V
3
4-20mA
4
POT
5
DPOT
6
TEMP
7
DAC_OUT
8
Portas Seriais
D- 1
1
1
D+
2
RS_EN
3
Snifer
4
2
RS_485_TX
5
RS_232_TX 2
6
2
RS_485_RX
7
2
RS_232_RX
8
Rels
RELE_1
1
RELE_2
2
RELE_3
3
RELE_4
4
CH3
CH2
CH1
CH4
CH5
1 Ao contrrio dos demais, esses pinos esto diretamente ligados a porta USB e, para us-los como entradas a
chave deve estar em ON. Quando for usada a comunicao as chaves devem permanecer em OFF.
2 Na serigrafia das chaves est trocado TX com RX, sendo correta a informao apresentada na tabela.
Exsto Tecnologia
290
3.6.1
Teclado
Um teclado matricial esta disponvel. Trata-se de um teclado que opera por varredura, isto ,
so aplicados diferentes valores nas linhas e pelo valor lido nas colunas possvel identificar a tecla
pressionado, com uma clara economia de pinos (8 pinos para ler 16 teclas). O teclado esta ligado ao
microcontrolador conforme a tabela baixo.
RB4
RB5
RB6
RB7
RB3
1
4
7
*/E
RB2
2
5
8
0
RB1
3
6
9
#/F
RB0
A
B
C
D
3.6.2
Chaves
Esto disponveis 8 chaves dip switch ligadas ao portal B do microcontrolador. Observe que
essas chaves foram projetadas para ser baixo ativas, portanto ao serem colocadas na posio ON elas
aterram os pinos do microcontrolador. Estando aberto o nvel lgico alto nas entradas do
microcontrolador garantido pelos resistores de pull-up internos.
Ateno: Para o correto funcionamento das chaves necessrio ativar os resistores
de pull-up internos do microcontrolador por software.
3.6.3
Push-Buttons
Existem 5 chaves pulsativas (push-buttons) ligados a pinos do microcontrolador. Alguns
desses pinos possuem funes especiais, como interrupes e contadores. Essas chaves so baixo
Exsto Tecnologia
291
ativas, portanto ao serem pressionados foram nvel lgico baixo nos pinos do microcontrolador e
quando no esto pressionadas tem nvel lgico alto garantido por resistores de pull-up. A tabela
abaixo mostra a ligao das chaves push bottons at ao microcontrolador.
Chave
SW1
SW4
SW5
SW6
SW2
SW3
Nome
RESET
INT0
INT1
INT2
TMR1
CH0
Display LCD
O kit possui um display LCD alfanumrico de 2 linhas por 16 colunas, ligado ao conector P1.
Displays de 7 segmentos
O kit XM118 possui tambm 4 displays de sete segmentos. Estes displays trabalham de forma
multiplexada, isto , seus segmentos esto todos ligados em paralelo e os comuns dos displays so
acionados por um processo de varredura, dando a impresso de estarem simultaneamente ativos.
Paras habilitar o display consulte a tabela de configuraes.
3.7.3
LEDs
No portal D esto ligados 8 leds convencionais baixo ativos (acendem com nvel lgico baixo).
H ainda 2 LEDs bicolores ligados a outros pinos do microcontrolador, conforme o esquema
eltrico.
Para saber como habilitar os leds bicolor consulte a tabela de configuraes.
Exsto Tecnologia
292
3.8 Acionamentos
H diversos circuitos de aplicao que podem ser acionados no XM118. A maioria desses
circuitos esta associada aos pinos com funo de PWM, mas nada impede de usar esse pinos
simplesmente para ligar e desligar os circuitos em questo.
Todos estes circuitos usam como drive o integrado ULN2803, que possui sada open-colector
com capacidade de at 500mA.
Ateno: Consulte as tabelas de configurao do microcontrolador e faa os ajustes
necessrios nas dip switch antes de usar os circuitos aqui descritos.
3.8.1
1 Buzzer
Um buzzer piezeltrico permite a gerao de sons no kit. Para esse buzzer operar
necessrio aplicar um sinal varivel na freqncia que se deseja ouvir. Ele no produzir som algum
se for simplesmente alimentado.
3.8.2
Rels
Quatro rels esto disponveis para aplicaes do usurio. possvel ter acesso aos terminais
Lmpada DC
Diversas aplicaes interessantes podem ser feitas com a lmpada DC presente no kit. Em
especial, aplicaes de PWM podem variar a intensidade de brilho. Essa lmpada alimentada com
12VDC.
3.8.4
Ventoinha
A ventoinha presente na placa um motor DC que pode ser ligado ou desligado ou ter sua
velocidade controlada por PWM. Essa ventoinha esta ligada ao lado da resistncia, podendo ser
usada para refriger-la.
Exsto Tecnologia
293
3.8.6
Sensor de rotao
Associada a ventoinha foi colocado um sensor de rotao (tacgrafo). Este composto por
3.9.1
Potencimetro
Trata-se de um potencimetro linear ligado entre +5VDC e GND, de forma que a excurso de
Sensor de temperatura
Este sensor de temperatura LM35 fica junto resistncia de aquecimento. Ele fornece uma
tenso de 10 mV por grau Celsius, sendo que essa variao linear em toda a faixa.
3.9.3 Condicionador de sinais analgicos
Para a leitura de sinais analgicos externos foram inclusas no kit 4 entradas analgicas com
circuitos condicionadores de sinal. So elas:
An1 e An2: entradas amplificadas com ganhos ajustveis de 1 a 10 vezes. O ganho desses
amplificadores ajustado pelos respectivos trimpots.
0 a 10 V: esta entrada divide o sinal por 2. Ela foi pensada para permitir a interao com
sistemas industriais que usam a escala de 0 a 10 V para medidas.
Exsto Tecnologia
294
3.9.4
Conversor D/A
Uma possibilidade de uso do PWM para gerao de nveis analgicos de tenso. O princpio
de funcionamento que ao passar o sinal do PWM por um filtro passa baixas a sada apresenta um
nvel de tenso proporcional ao duty-cicle do sinal de entrada. O filtro passa baixo necessrio j est
presente no kit. A sada desse filtro amplificada com ajuste de ganho permitindo gerar sinais com
at 10 V de amplitude para o duty-cicle de 100%. Existem muitos dispositivos industriais controlados
por sinais de tenso de 0 a 10 V, como por exemplo o inversor de freqncia.
Existe ainda um feedback do sinal gerado para o microcontrolador, para averiguar o correto
funcionamento.
Exsto Tecnologia
295
No kit o conector CN9 um conector B (device) que permita a conexo do kit a um host USB. O
LED USB DETECT (D28) sinaliza quando o kit est conectado a um host.
Devido as caractersticas de comunicao USB, que opera em altas taxas, os sinais de D+ e Desto ligados diretamente aos pinos do microcontrolador, havendo chaves que permitem
desconectar esses pinos do restante do circuito. Consulte a tabela de configuraes para verificar
quais as chaves utilizadas.
3.11 Diversos
Essa seo descreve alguns circuitos que se comunicam com o microcontrolador atravs dos
protocolos I2C e SPI. A presena desses componentes , alm do estudo deles em si, o estudo desses
protocolos.
Para maiores informaes sobre esses componentes e seus protocolos comunicao consulte
os manuais dos mesmos no CD.
3.11.1 Memria EEPROM
O componente 24C08 (U15) uma memria EEPROM que se comunica atravs do protocolo
I2C. Ela tem capacidade de 8kbit (1 kbyte).
3.11.2 Potencimetro digital SPI
Mais uma inovao do kit. O potencimetro digital utiliza a comunicao serial SPI (Serial
Peripheral Interface), que utilizada para a comunicao entre dois componentes em curta distncia.
Assim como o potencimetro convencional, o potencimetro digital est ligado de tal
maneira que possvel ler o valor de seu cursor, tenso esta que varia de 0 a 5V.
3.11.3 Relgio de tempo real (RTC)
O HT1380 (U12) um relgio de tempo real (RTC Real Time Clock) e calendrio com
comunicao serial. Ele possui um cristal prprio para gerao da base de tempo (X1) e mantido
por uma bateria recarregvel(BAT1), mesmo se o kit for desligado da energia.
O protocolo de comunicao desse componente assemelha-se ao protocolo SPI, porm
apresenta algumas divergncias do padro, consulte seu manual para mais detalhes de
funcionamento.
3.11.4 Gerador de Freqncia
Muitas aplicaes do microcontrolador precisam de um sinal peridico aplicado aos pinos do
microcontrolador. Para prover o kit conta com um gerador de freqncias capaz de gerar sinais
quadrados de 60 Hz a 3 kHz (aproximadamente). Esse circuito tem como ncleo o CI LM555 (U26). A
freqncia pode ser ajustada atravs do potencimetro R36.
Exsto Tecnologia
296
Tanto entradas como sadas possuem LEDs indicadores de seus estados lgicos.
Exsto Tecnologia
297
usado, o
MCP23016, possui uma interface serial I2C e dois portais de oito bits. Esses portais so praticamente
iguais aos portais do microcontrolador. Esses portais podem ser configurados como entrada ou sada
e, ainda, possvel configurar interrupes nos pinos de entradas. Para mais caractersticas tcnicas
e informaes sobre o uso, consulte o manual desse componente.
3.12.2 Entradas
As entradas foto acopladas identificam como 1 sinais entre 12Vdc e 24Vdc, tornando-as aptas a
serem conectadas a sensores industriais e controles que operam nessa faixa de tenso. As entradas
so protegidas quanto a inverso de polaridade. Tenses acima de 30Vdc podem danificar o foto
acoplador.
Todas as entradas so referenciadas a um ponto comum (COM). A figura abaixo mostra como
devem ser feitas as ligaes.
Exsto Tecnologia
298
4 Resolvendo Problemas
4.1 Suporte Tcnico
A Exsto Tecnologia oferece suporte tcnico gratuito para questes de utilizao de seus produtos
atravs do e-mail suporte@exsto.com.br ou do telefone (35) 3471-6898.
5 Garantia
O Kit tem garantia total contra defeitos de fabricao pelo perodo de 1 (hum) ano. No esto
cobertos quaisquer danos causados pelo ou ao kit por mau uso do mesmo.
Exsto Tecnologia
299
Exsto Tecnologia
300
Exsto Tecnologia
301
Exsto Tecnologia
302
Exsto Tecnologia
303
Exsto Tecnologia
304
Exsto Tecnologia
305
Exsto Tecnologia
306
Exsto Tecnologia
307
6.2 XMM01
Exsto Tecnologia
308
Exsto Tecnologia
309
Exsto Tecnologia
310
Exsto Tecnologia
311
Exsto Tecnologia
312