S - passeiucp

Transcrição

S - passeiucp
Ap
plicaçções prátticas de Eletrô
E ônica
ae
m
micro
oconttrolad
dores em
m sisttemas
comp
putacionaiis
Aprend
nda de forma
f
simples
s
s a gravvação wireless
w
s e via USB
U dee
ocontrola
ladores
microc
Saandro Juccá
INTRODUÇÃO..................................................................................................................................................................6
ASSEMBLY X LINGUAGEM C.........................................................................................................................................................6
VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA MICROCONTROLADORES..............................8
ARQUITETURAS DOS MICROCONTROLADORES..............................................................................................................8
O CONTADOR DE PROGRAMA (PC).........................................................................................................................................9
BARRAMENTOS.....................................................................................................................................................................................9
A PILHA (STACK)..............................................................................................................................................................................10
CICLO DE MÁQUINA.......................................................................................................................................................................10
MATRIZ DE CONTATOS OU PROTOBOARD.....................................................................................................................11
RESISTORES........................................................................................................................................................................................12
CAPACITORES.....................................................................................................................................................................................13
FONTES DE ALIMENTAÇÃO........................................................................................................................................................15
PROTOCOLO DE COMUNICAÇÃO USB.................................................................................................................................16
MÉTODOS DE COMUNICAÇÃO USB......................................................................................................................................16
FERRAMENTA DE GRAVAÇÃO VIA USB........................................................................................................18
2.1 GRAVAÇÃO DE MICROCONTROLADORES........................................................................................................19
2.2 GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS.........................................................24
2.3 GRAVAÇÃO WIRELESS DE MICROCONTROLADORES...............................................................................27
2.4 SISTEMA DUAL CLOCK.................................................................................................................................................35
2.5 EMULAÇÃO DE COMUNICAÇÃO SERIAL NO WINDOWS..........................................................................35
2.6 GRAVANDO O MICROCONTROLADOR VIA USB NO LINUX...................................................................42
2.7 GRAVANDO O PIC VIA USB PELO TERMINAL DO LINUX OU MAC OSX.........................................43
2.8 SISTEMA DUAL CLOCK.................................................................................................................................................45
2.9 EMULAÇÃO DE COMUNICAÇÃO SERIAL NO LINUX....................................................................................45
2.10 PROGRAMA COM INTERRUPÇÃO EXTERNA POR BOTÃO E DO TIMER 1.....................................49
2.11 OBTENÇÃO DE UM VOLTÍMETRO ATRAVÉS DO CONVERSOR AD COM A VARIAÇÃO DE UM
POTENCIÔMETRO............................................................................................................................................................................50
2.12 CIRCUITO COM84 PARA GRAVAÇÃO DO gerenciador.hex.....................................................................51
PERIFÉRICOS INTERNOS DO MICROCONTROLADOR.........................................................................53
3.1 CONVERSOR A/D.............................................................................................................................................................53
3.1.1 AJUSTE DE RESOLUÇÃO DO SENSOR E DO CONVERSOR AD DE 8 BITS.....................................54
3.1.2 AJUSTE DA TENSÃO DE FUNDO DE ESCALA COM AMPOP....................................................................54
3.1.3 AJUSTE DA TENSÃO DE REFERÊNCIA COM POTENCIÔMETRO..........................................................55
3.1.4 CONVERSOR AD DE 10 BITS....................................................................................................................................55
3.1.5 OBTENÇÃO DE UM VOLTÍMETRO ATRAVÉS DO CONVERSOR AD COM A VARIAÇÃO DE UM
POTENCIÔMETRO............................................................................................................................................................................56
3.1.6 LEITURA DE TEMPERATURA COM O LM35 ATRAVÉS DO CONVERSOR AD................................57
3.1.7 TERMISTOR.........................................................................................................................................................................58
3.2 MEMÓRIAS DO MICROCONTROLADOR.............................................................................................................59
3.2.1 MEMÓRIA DE PROGRAMA..........................................................................................................................................59
3.2.2 MEMÓRIA DE INSTRUÇÕES......................................................................................................................................59
3.2.3 MEMÓRIA EEPROM INTERNA...................................................................................................................................60
3.2.4 MEMÓRIA DE DADOS (RAM)....................................................................................................................................60
3.2.5 EXEMPLO DE APLICAÇÃO...........................................................................................................................................61
3.2.5.1 CONTROLE DE ACESSO COM TECLADO MATRICIAL...........................................................................61
3.3 MODULAÇÃO POR LARGURA DE PULSO PELO CCP....................................................................................65
CONTROLE PWM POR SOFTWARE DE VELOCIDADE DE UM MOTOR CC......................................................67
[2]
INTERRUPÇÕES E TEMPORIZADORES.........................................................................................................68
INTERRUPÇÕES.................................................................................................................................................................................68
INTERRUPÇÕES EXTERNAS.......................................................................................................................................................69
INTERRUPÇÃO DOS TEMPORIZADORES...........................................................................................................................70
MULTIPLEXAÇÃO POR INTERRUPÇÃO DE TEMPORIZADORES............................................................................72
EMULAÇÃO DE PORTAS LÓGICAS...................................................................................................................73
5.1 INSTRUÇÕES LÓGICAS PARA TESTES CONDICIONAIS DE NÚMEROS..........................................74
5.2 INSTRUÇÕES LÓGICAS BOOLANAS BIT A BIT..............................................................................................74
5.3 EMULAÇÃO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS.............................................78
5.4 MULTIPLEXAÇÃO COM DISPLAYS DE 7 SEGMENTOS...............................................................................84
COMUNICAÇÃO SERIAL EIA/RS-232............................................................................................................86
6.1 CÓDIGO ASCII...................................................................................................................................................................88
6.2 INTERFACE USART DO MICROCONTROLADOR............................................................................................88
6.3 COMUNICAÇÃO SERIAL EIA/RS-485....................................................................................................................90
ACIONAMENTO DE MOTORES MICROCONTROLADOS........................................................................90
ACIONAMENTO DE MOTORES CC DE BAIXA TENSÃO..............................................................................................91
MOTORES ELÉTRICOS UTILIZADOS EM AUTOMÓVEIS...........................................................................................91
COROA E O PARAFUSO COM ROSCA SEM-FIM..............................................................................................................93
CHAVEAMENTO DE MOTORES CC COM TRANSISTORES MOSFET....................................................................94
EXEMPLO: SEGUIDOR ÓTICO DE LABIRINTO................................................................................................................95
ESTABILIDADE DO CONTROLE DE MOVIMENTO.........................................................................................................95
PONTE H................................................................................................................................................................................................99
DRIVER PONTE H L293D.............................................................................................................................................................99
SOLENÓIDES E RELÉS.................................................................................................................................................................100
DRIVER DE POTÊNCIA ULN2803..........................................................................................................................................102
PONTE H COM MICRORELÉS...................................................................................................................................................103
ACIONAMENTO DE MOTORES DE PASSO.......................................................................................................................103
MOTORES DE PASSO UNIPOLARES....................................................................................................................................104
MODOS DE OPERAÇÃO DE UM MOTOR DE PASSO UNIPOLAR.........................................................................105
ACIONAMENTO BIDIRECIONAL DE DOIS MOTORES DE PASSO......................................................................106
SERVO-MOTORES...........................................................................................................................................................................106
FOTOACOPLADORES E SENSORES INFRAVERMELHOS....................................................................109
TRANSMISSOR E RECEPTOR IR..........................................................................................................................................110
AUTOMAÇÃO E DOMÓTICA COM CONTROLE REMOTO UNIVERSAL.............................................................111
CODIFICAÇÃO DE RECEPTOR INFRAVERMELHO UTILIZANDO A NORMA RC5.......................................114
ACIONAMENTO DE CARGAS CA COM TRIAC................................................................................................................118
TRIACS E RELÉS DE ESTADO SÓLIDO..............................................................................................................................118
DIMMER ANALÓGICO...................................................................................................................................................................118
CONTROLE DIGITAL DE DISPARO DE UM TRIAC......................................................................................................119
DIMMER DIGITAL COM CONTROLE REMOTO IR........................................................................................................124
LCD (DISPLAY DE CRISTAL LÍQUIDO)......................................................................................................128
EXEMPLO: CONTROLE DE TENSÃO DE UMA SOLDA CAPACITIVA COM LCD...........................................131
MODELAGEM DE SINAIS DE SENSORES...................................................................................................134
EXEMPLO: MODELAGEM DE UM LUXÍMETRO MICROCONTROLADO COM LDR......................................134
SUPERVISÓRIO................................................................................................................................................................................137
INTERFACE I2C.......................................................................................................................................................141
REGRAS PARA TRANSFERÊNCIA DE DADOS.................................................................................................................142
MEMÓRIA EEPROM EXTERNA I2C.........................................................................................................................................145
RTC (RELÓGIO EM TEMPO REAL)................................................................................................................147
EXEMPLO: PROTÓTIPO DATALOGGER USB DE BAIXO CUSTO.........................................................................151
TRANSMISSÃO DE DADOS VIA GSM..........................................................................................................157
COMANDOS AT PARA ENVIAR MENSAGENS SMS DE UM COMPUTADOR PARA UM CELULAR OU
MODEM GSM.....................................................................................................................................................................................157
COMANDOS AT PARA RECEBER MENSAGENS SMS EM UM COMPUTADOR ENVIADAS POR UM
CELULAR OU MODEM GSM.......................................................................................................................................................158
O PROTOCOLO MODBUS EMBARCADO.....................................................................................................161
MODELO DE COMUNICAÇÃO..................................................................................................................................................161
DETECÇÃO DE ERROS.................................................................................................................................................................162
MODOS DE TRANSMISSÃO......................................................................................................................................................162
INTRODUÇÃO À SISTEMAS OPERACIONAIS EM TEMPO REAL (RTOS)...................................167
MÁQUINAS DE ESTADO..............................................................................................................................................................169
UTILIZANDO O COPILADOR C18 E A IDE MPLABX MULTIPLATAFORMA COM FUNÇÕES
EM PORTUGUÊS.....................................................................................................................................................171
FUNÇÕES EM PORTUGUÊS.......................................................................................................................................................172
FUNÇÕES BÁSICAS DA APLICAÇÃO DO USUÁRIO.....................................................................................................172
FUNÇÕES DO CONVERSOR ANALÓGICO DIGITAL (A/D)......................................................................................177
FUNÇÕES DA COMUNICAÇÃO SERIAL RS-232.............................................................................................................178
EXEMPLOS DE PROGRAMAS....................................................................................................................................................179
APÊNDICE I: CABEÇALHOS DA FERRAMENTA PARA DIVERSOS COMPILADORES............186
CCS C Compiler................................................................................................................................................................................186
C18 compiler......................................................................................................................................................................................186
SDCC......................................................................................................................................................................................................188
MikroC....................................................................................................................................................................................................189
Hi-Tech C Compiler........................................................................................................................................................................190
Microchip ASM compiler..............................................................................................................................................................190
Dedico este trabalho
a Deus e à minha família.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
INTRODUÇÃO
Um microcontrolador é um sistema computacional completo, no qual estão incluídos
internamente uma CPU (Central Processor Unit), memórias RAM (dados), flash (programa)
e E2PROM, pinos de I/O (Input/Output), além de outros periféricos internos, tais como,
osciladores, canal USB, interface serial assíncrona USART, módulos de temporização e
conversores A/D, entre outros, integrados em um mesmo componente (chip).
O microcontrolador PIC® (Periferal Interface Controler), da Microchip Technology Inc.
(empresa de grande porte, em Arizona, nos Estados Unidos da América), possui uma boa
diversidade de recursos, capacidades de processamento, custo e flexibilidade de aplicações.
ASSEMBLY X LINGUAGEM C
A principal diferença entre uma linguagem montada (como assembly) e a linguagem de
programação C está na forma como o programa objeto (HEX) é gerado. Em assembly, o
processo usado é a montagem, portanto devemos utilizar um MONTADOR (assembler),
enquanto que em linguagem C o programa é compilado. A compilação é um processo mais
complexo do que a montagem. Na montagem, uma linha de instrução é traduzida para
uma instrução em código de máquina. Já em uma linguagem de programação, não existem
linhas de instrução, e sim estruturas de linguagem e expressões. Uma estrutura pode ser
condicional, incondicional, de repetição, etc...
As expressões podem envolver operandos e operadores mais complexos. Neste caso,
geralmente, a locação dos registros de dados da RAM é feita pelo próprio compilador. Por
isso, existe a preocupação, por paret do compilador, de demonstrar, após a compilação, o
percentual de memória RAM ocupado, pois neste caso é relevante, tendo em vista que
cada variável pode ocupar até 8 bytes (tipo double).
Para edição e montagem (geração do código HEX) de um programa em assembly, os
softwares mais utilizados são o MPASMWIN (mais simples) e o MPLAB. Para edição e
compilação em linguagem C (geração do código HEX), o programa mais utilizado é o PIC C
Compiler CCS®.
Os microcontroladores PIC possuem apenas 35 instruções em assembly para a família
de 12 bits (PIC12) e 14 bits (PIC16), descritas nas tabelas abaixo, e 77 instruções para a
família de 16 bits (PIC18). A tabela abaixo mostra algumas instruções em assembly.
[6]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 1. 1: Instruções em assembly.
Como pode ser visto, a família PIC16F (14 bits com aproximadamente 35 instruções)
não possui uma instrução em assembly que realize multiplicação ou divisão de dois
operandos, o que curiosamente é presente na linguagem assembly da família MCS51 (256
instruções que satisfazem a maioria das aplicações industriais). Portanto, para realizar uma
multiplicação, é necessário realizar somas sucessivas, ou seja, em vez de multiplicar uma
variável por outra, realizar somas de uma variável em uma terceira área de memória,
tantas vezes quando for o valor da segunda variável. (X * 5 = X + X + X + X + X).
Mas em linguagem C é possível se utilizar o operador de multiplicação (*),
de forma simples e prática. Ao compilar, a linguagem gerada irá converter a
multiplicação em somas sucessivas sem que o programador se preocupe com isso.
[7]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
VANTAGENS
X
DESVANTAGENS
MICROCONTROLADORES
DA
LINGUAGEM
C
PARA
- O compilador C irá realizar o processo de tradução, permitindo uma programação mais
amigável e mais fácil para desenvolvimento de aplicações mais complexas como, por
exemplo, uso do canal USB e aplicações com o protocolo I2C.
- A linguagem C permite maior portabilidade, uma vez que um mesmo programa pode ser
recompilado para um microcontrolador diferente, com o mínimo de alterações, ao contrário
do ASSEMBLY, onde as instruções mudam muito entre os diversos modelos de
microcontroladores existentes como PIC e 8051.
- Em C para microcontroladores PIC, não é necessário se preocupar com a mudança de
banco para acessar os registros especiais da RAM como, por exemplo, as portas de I/O e
os registros TRIS de comando de I/O dos pinos, isto é executado pelo próprio compilador
através das bibliotecas.
- É possível incluir, de forma simples e padronizada, outro arquivo em C (biblioteca) para
servir como parte do seu programa atual como, por exemplo, incluir o arquivo LCD
(#include <lcd.c>), desenvolvido por você anteriormente.
- O ponto fraco da compilação em C é que o código gerado, muitas vezes, é maior do que
um código gerado por um montador (assembler), ocupando uma memória maior de
programa e também uma memória maior de dados. No entanto, para a maioria das
aplicações sugeridas na área de automação industrial, a linguagem C para PIC se mostra a
mais adequada, tendo em vista que a memória de programa tem espaço suficiente para
estas aplicações.
- Outra desvantagem é que o programador não é “forçado” a conhecer as características
internas do hardware, já que o mesmo se acostuma a trabalhar em alto nível, o que
compromete a eficiência do programa e também o uso da capacidade de todos os
periféricos internos do microcontrolador. Isso provoca, em alguns casos, o aumento do
custo do sistema embarcado projetado com a aquisição de novos periféricos externos.
ARQUITETURAS DOS MICROCONTROLADORES
A arquitetura de um sistema digital define quem são e como as partes que compõe o
sistema estão interligadas. As duas arquiteturas mais comuns para sistemas
computacionais digitais são as seguintes:
- Arquitetura de Von Neuman: A Unidade Central de Processamento é interligada à
memória por um único barramento (bus). O sistema é composto por uma única memória
onde são armazenados dados e instruções;
- Arquitetura de Harvard: A Unidade Central de Processamento é interligada a memória
de dados e a memória de programa por barramentos diferentes, de dados e de endereço.
O PIC possui arquitetura Harvard com tecnologia RISC, que significa Reduced Instruction
Set Computer (Computador com Conjunto de Instruções Reduzido). O barramento de
dados é de 8 bits e o de endereço pode variar de 13 a 21 bits dependendo do modelo. Este
[8]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
tipo de arquitetura permite que, enquanto uma instrução é executada, uma outra seja
“buscada” na memória, ou seja, um PIPELINE (sobreposição), o que torna o
processamento mais rápido.
O CONTADOR DE PROGRAMA (PC)
O contador de programa é responsável de indicar o endereço da memória de
programa para que seu conteúdo seja transportado para a CPU para ser executado. Na
família PIC16F ele contém normalmente 13 bits, por isso, pode endereçar os 8K words de
14 bits (o PIC16F877A possui exatamente 8K words de 14 bits, ou seja, 14 Kbytes de
memória de programa).
A família 18F ele possui normalmente 21 bits e é capaz e
endereçar até 2 Megas words de 16 bits (o PIC18F2550 possui 16K words de 16 bits, ou
seja, 32 Kbytes de memória de programa). Cada Word de 14 ou 16 bits pode conter um
código de operação (opcode) com a instrução e um byte de dado.
BARRAMENTOS
Um barramento é um conjunto de fios que transportam informações com um propósito
comum. A CPU pode acessar três barramentos: o de endereço, o de dados e o de controle.
Como foi visto, cada instrução possui duas fases distintas: o ciclo de busca, quando a CPU
coloca o conteúdo do PC no barramento de endereço e o conteúdo da posição de memória
é colocado no Registro de instrução da CPU, e o ciclo de execução, quando a CPU executa
o conteúdo colocado no registro de instrução e coloca-o na memória de dados pelo
barramento de dados. Isso significa que quando a operação do microcontrolador é iniciada
ou resetada, o PC é carregado com o endereço 0000h da memória de programa.
Figura 1. 2: Memórias.
As instruções de um programa são gravadas em linguagem de máquina hexadecimal
na memória de programa flash (ROM). No início da operação do microcontrolador, o
contador de programa (PC) indica o endereço da primeira instrução da memória de
programa, esta instrução é carregada, através do barramento de dados, no Registro de
Instrução da CPU.
Um opcode (código de instrução), gerado na compilação em hexadecimal, contém
uma instrução e um operando. No processamento, a CPU compara o código da instrução
[9]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
alocada no registro de instrução com o Set de Instruções do modelo fabricado e executa a
função correspondente. Após o processamento, o operando dessa instrução indica para a
CPU qual a posição da memória de dados que deve ser acessada e, através do barramento
de controle, a CPU comanda a leitura ou a escrita nesta posição.
Após o processamento de uma instrução, o PC é incrementado para indicar o endereço
do próximo código de instrução (opcode), da memória de programa, que deve ser
carregado no registro de instrução.
A PILHA (STACK)
A pilha é um local da RAM ( no PIC18F2550 é localizada no final dos Registros de
Função Especial entre FFDh e FFFh) onde é guardado o endereço da memória de programa
antes de ser executado um pulo ou uma chamada de função localizada em outra posição
de memória.
CICLO DE MÁQUINA
O oscilador externo (geralmente um cristal) ou o interno (circuito RC) é usado para
fornecer um sinal de clock ao microcontrolador. O clock é necessário para que o
microcontrolador possa executar as instruções de um programa.
Nos microcontroladores PIC, um ciclo de máquina (CM) possui quatro fases de clock que
são Q1, Q2, Q3 e Q4. Dessa forma, para um clock externo de 4MHz, temos um ciclo de
máquina (CM=4 x 1/F) igual a 1μs.
Figura 1. 3: Ciclo de máquina.
O Contador de Programa (PC) é incrementado automaticamente na fase Q1 do ciclo de
máquina e a instrução seguinte é resgatada da memória de programa e armazenada no
registro de instruções da CPU no ciclo Q4. Ela é decoficada e executada no próximo ciclo,
no intervalo de Q1 e Q4. Essa característica de buscar a informação em um ciclo de
máquina e executá-la no próximo, ao mesmo tempo em que outra instrução é “buscada”, é
chamada de PIPELINE (sobreposição). Ela permite que quase todas as instruções sejam
executadas em apenas um ciclo de máquina, gastando assim 1 μs (para um clock de 4
[ 10 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
MHz) e tornando o sistema
s
mu
uito mais rrápido. As únicas exe
eções refeerem-se às instruçõess
m “saltos” no contador de prog
grama, com
mo chamadas de funnções em outro loca
al
que geram
da memórria de programa e os retornos d
dessas funções.
MATR
RIZ DE CO
ONTATOS OU PROT
TOBOARD
D
Para d
desenvolve
er os proje
etos e exeercícos pro
opostos nessa apostiila será ne
ecessário a
uilização d
de uma Ma
atriz de Con
ntatos (ou Protoboarrd em inglê
ês), mostraada na figu
ura abaixo,
que é uma placa co
om diverso
os furos e conexões condutora
as para moontagem de
d circuitoss
eletrônicoss. A grand
de vantage
em do Prot
otoboard na
a montage
em de circcuitos eletrrônicos é a
facilidade de inserção de comp
ponentes (n
não necesssita soldagem).
Figura 1
1. 4: Prottoboard.
Na superfície de uma matriz
m
de ccontatos há uma basse de plásstico em qu
ue existem
m
centenas de orifício
os onde são
s
encaixxados os componen
ntes ou taambém po
or ligaçõess
e inferior são insta
alados con
ntatos mettálicos que interliga
a
mediante fios. Em sua parte
eletricame
ente os com
mponentess inseridos na placa que
q são org
ganizados em coluna
as e canais.
De cada la
ado da pla
aca, ao lon
ngo de seu
u comprime
ento, há duas colunaas complettas. Há um
m
espaço livvre no meiio da placa
a e de cad
da lado de
esse espaç
ço há váriios gruposs de canaiss
horizontaiss (pequena
as fileiras)), cada um
m com 05 orifícios de
d acordo como é ilu
ustrado na
a
figura abaixo.
[ 11 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Fig
gura 1. 5: Contatoss internos
s de uma protoboa
ard.
Em alguns po
ontos do circuito é neecessário limitar a in
ntensidade da corrente elétrica.
Para fazerr isso utilizzamos um componen
,
nte chama
ado resisto
or. Quanto maior a resistência
r
menor é a corrente elétrica
e
que passa nu
um condutor.
RESIS
STORES
Os resistores geralmentte são feito
os de carbo
ono. Para identificar qual a ressistência de
e
um resisto
or específicco, comparramos ele ccom a segu
uinte tabela:
[ 12 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 1.
1 6: Códiigo de corres de res
sistores.
CAPACITORES
S
Cap
pacitor ou condensador é um compone
ente que armazena
a
energia num campo
o
elétrico. co
onsistem em
e dois ele
etrodos ou placas que
e armazen
nam cargass opostas. Estas duass
placas são
o condutorras e são separadass por um isolante ou
o por um
m dielétrico
o. Eles são
o
utilizados desde armazenar
a
bits naas memórrias volátteis dinâm
micas (DR
RAM) doss
computado
ores, até corrigir
c
o fa
ator de pottência de indústrias fornecendo
f
o reatância
a capacitiva
a
para comp
pensar a re
eatância in
ndutiva pro
ovocada po
or bobinas e motoress elétricos de grande
e
porte.
unção maiis comum é filtrar ru
uídos em circuitor
c
ellétricos e eestabilizar as fontes,
A fu
absorvend
do os picoss e preench
hendo os vvales de te
ensão. Os capacitorees descarre
egados são
o
[ 13 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
um curto e carregad
dos abrem o circuito,, por isso são utilizados tambéém para isolar fontess
CC.
Figura 1. 7: Form
ma de on
nda de cap
pacitor.
Os capacitore
es podem ser
s carregaados e desscarregado
os muito raapidamentte, por isso
o
são utilza
ados tamb
bém no fllash eletrô
ônico em uma câm
mera fotoggráfica, on
nde pilhass
carregam o capacito
or do flash
h durante vários seg
gundos, e então o ccapacitor descarrega
d
a
toda a carga no bu
ulbo do flash quase que instan
ntaneamen
nte geranddo o alto brilho.
b
Isto
o
pode torna
ar um cap
pacitor gran
nde e carrregado exttremamentte perigosoo. Eles são
o utilizadoss
também e
em paralelo com mo
otores eléttricos para
a fornecer energia ppara que as
a bobinass
energizada
as possam vencer a inércia
i
quaando os mo
otores são ligados.
As Unidades de Medida
a de capaccitância são Farad (F
F), Microfaarad (μF), Nanofarad
d
(nF) e Piccofarad (pF
F). Os capacitores m
mais comun
ns são os eletrolíticoos, lstradoss na figura
a
abaixo, oss cerâmicoss e os de poliéster.
p
Figurra 1. 8: Ex
xemplos de
d Capacitores.
A fig
gura abaixxo mostra a identificaação de cap
pacitores cerâmicos.
c
Figura 1. 9: Cálculo d
demonstra
ativo de capacitân
c
ncia.
gura abaixxo mostra a identificaação de cap
pacitores de
d poliésteer.
A fig
[ 14 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 1. 10: Código d
de cores Capacitor
C
res Poliésster.
FONT
TES DE AL
LIMENTAÇ
ÇÃO
As fontes mais comun
ns em sisstemas em
mbarcados com miccrocontrola
adores são
o
baterias re
ecarregáve
eis ou conv
versores CA
A-CC como
o carregado
ores de cellulares.
As baterias ou pilhass são dispo
ositivos qu
ue armazen
nam energia químicaa e a torna
a disponíve
el
na forma d
de energia elétrica.
A ccapacidade de armazzenamento
o de energ
gia de uma
a bateria é medida através da
a
multiplicaçção da corrente de descarga
d
p
pelo tempo
o de autono
omia, senddo dado em
m ampére-hora (1 Ah
h= 3600 Coulombs)
C
. Deve-se observar que, ao co
ontrário daas bateriass primáriass
(não recarrregáveis),, as baterias recarreegáveis não
o podem ser
s descarrregadas até
a 0V poiss
isto leva a
ao final prematuro da
d vida da bateria. Na
N verdade
e elas têm
m um limite
e até onde
e
podem serr descarreg
gadas, cha
amado de ttensão de corte.
c
Desc
carregar a bateria ab
baixo deste
e
limite redu
uz a vida útil da bateria.
As b
baterias diitas 12V, por
p exempllo, devem operar de 13,8V (teensão a ple
ena carga),
até 10,5V (tensão de
e corte), quando 100
0% de sua capacidad
de terá sidoo utilizada,, e é este o
tempo que
e deve ser medido co
omo auton omia da ba
ateria.
Como o ccomportam
mento das baterias n
não é linear, isto é,, quando m
maior a corrente de
e
descarga m
menor será
á a autono
omia e a ccapacidade
e, não é co
orreto falarr em uma bateria de
e
100Ah. De
eve-se fala
ar, por exe
emplo, em uma bateria 100Ah padrão dee descarga
a 20 horas,
com tensã
ão de corte
e 10,5V. Esta bateriaa permitirá
á descarga de 100 / 20 = 5A durante
d
20
0
horas, qua
ando a bateria irá atingir 10,5V
V.
Outtro fator im
mportante é a temperratura de operação
o
da
d bateria,, pois sua capacidade
c
e
e vida útil dependem
m dela. Usu
ualmente aas informa
ações são fornecidas
f
supondo T=25°C
T
ou
u
T=20°C, q
que é a tem
mperatura ideal para maximizarr a vida útiil.
1.12. RUÍDO (BOUNCIN
B
NG) E FILT
TRO (DEB
BOUNCIN
NG)
Em operaçõess de Liga/D
Desliga e m
mudança de nível lógico, surge um ruído (Bouncing
g)
na transição que, ca
aso uma interrupção
o esteja ha
abilitada ou até messmo um co
ontador de
e
evento, po
ode provoccar várias interrupçõ
ões ou contagens. Ass formas m
mais comun
ns de filtro
o
(Debounciing) são via software
e, program
mando um tempo
t
(em
m torno de 100ms, de
ependendo
o
[ 15 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
da chave) após as transições, de modo a eliminar o ruído antes de efetuar uma instrução,
ou via hardware, utilizando um capacitor de filtro em paralelo com a chave.
Figura 1. 11: Ruído.
PROTOCOLO DE COMUNICAÇÃO USB
A USB, sigla para Universal Serial Bus, é o padrão de interface para periféricos externos
ao computador provavelmente mais popular dos já criados. Um sistema USB é composto
por hardware mestre e escravo. O mestre é chamado de host e o escravo denomina-se
dispositivo ou simplesmente periférico. Todas as transferências USB são administradas e
iniciadas pelo host. Mesmo que um dispositivo queira enviar dados, é necessário que o host
envie comandos específicos para recebê-los.
A fase de preparação, conhecida como enumeração, acontece logo depois de quando o
dispositivo USB é fisicamente conectado ao computador. Nesse momento, o sistema
operacional realiza vários pedidos ao dispositivo para que as características de
funcionamento sejam reconhecidas. O sistema operacional, com a obtida noção do
periférico USB, atribui-lhe um endereço e seleciona a configuração mais apropriada de
acordo com certos critérios. Com mensagens de confirmação do dispositivo indicando que
essas duas últimas operações foram corretamente aceitas, a enumeração é finalizada e o
sistema fica pronto para o uso.
MÉTODOS DE COMUNICAÇÃO USB
Os métodos mais comuns de comunicação USB, também utilizados pela ferramenta
SanUSB, são:
Human Interface Device (HID) - O dispositivo USB é reconhecido automaticamente pelo
sistema operacional Windows@ ou linux como um Dispositivo de Interface Humana (HID),
não sendo necessário a instalação de driver especiais para a aplicação. Este método
apresenta velocidade de comunicação de até 64 kB/s e é utilizado pelo gerenciador de
gravação da ferramenta SanUSB no linux. Mais detalhes na video-aula disponível em
http://www.youtube.com/watch?v=h6Lw2qeWhlM .
Communication Device Class (CDC) – Basicamente o driver emula uma porta COM,
fazendo com que a comunicação entre o software e o firmware seja realizada como se
[ 16 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
fosse uma
a porta de comunicaçção serial padrão. É o método
o mais simpples de co
omunicação
o
bidireciona
al com velo
ocidade de
e comunicaação é de até 115 kb
bps, ou sejja, aproxim
madamente
e
14,4 kB/ss. Mais de
etalhes em
m uma ap
plicação Windows@
W
com prottocolo Mo
odbus RTU
U
http://w
www.youtu
ube.com/
/watch?v
v=KUd1Jk
kwGJNk e em uuma apliicação de
e
comunicaçção
bidirecio
onal
no
Linuxx
http://w
www.youtu
ube.com/
/watch?v
v=cRW99T
T_qa7o.
Mass Storage Device (MSD) - Método customiza
ado para
dispositivos de
e
mento em
m massa que
q
permitte alta velocidade de
d comuni cação USB
B, limitado
o
armazenam
apenas pe
ela própria
a velocida
ade do baarramento USB 2.0 (480 Mbpps). Este método é
utilizado p
por pen-drives, sccanners, cââmeras diigitais. Foii utilizado juntamen
nte com a
ferramenta
a SanUSB para comunicação ccom softwa
are de sup
pervisão p rogramado
o em Java.
Mais
hes
na
vide
eo-aula
m
detalh
dissponível
em
http://w
www.youtu
ube.com/
/watch?v
v=Ak9RAl2YTr4.
Como foi visto,, a comun
nicação U
USB é basseada em uma cenntral (hostt), onde o
or enumerra os dispo
ositivos US
SB conectados a ele. Existem três grand
des classess
computado
de dispositivos com
mumente associados
a
a USB: dispositivos
d
s de interfface huma
ana (HID),
classe de dispositivo
os de comu
unicação ((CDC) e dispositivos de armazeenamento em massa
a
(MSD). Ca
ada uma dessas classes já possui um
m driver im
mplementaado na maioria
m
doss
sistemas o
operaciona
ais. Portantto, se ade quarmos o firmware
e de nossoo dispositiv
vo para ser
compatíve
el com uma
a dessas classes, não
o haverá ne
ecessidade
e de implem
mentar um
m driver.
Figurra 1. 12: D
Drivers e comunica
ação.
Noss sitemas operaciona
o
is Window
ws@ e Linux
x, o modo mais fácil de comun
nicar com o
PIC USB é o CDC, por uma razão sim
mples, os programa
as para PC
Cs são ba
aseados na
a
comunicaçção via porrta serial, o que torn
na o proce
esso ainda mais simpples. O método CDC
C
no Linux e o HID no
n Window
ws@ são naativos, ou seja, não é necessáário instala
ar nenhum
m
driver no ssistema op
peracional para
p
que o PC reconh
heça o disp
positivo.
[ 17 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
FERRAMENTA DE GRAVAÇÃO VIA USB
O sistema de desenvolvimento SanUSB é uma ferramenta composta de software e
hardware básico da família PIC18Fxx5x com interface USB. Esta ferramenta livre se mostra
eficiente no desenvolvimento rápido de projetos reais, pois não há necessidade de remover
o microcontrolador para a atualização do firmware. Além disso, esta ferramenta se mostra
eficaz no ensino e na difusão de microcontroladores, bem como em projetos de eletrônica e
informática, pois todos os usuários podem desenvolver projetos reais no ambiente de
ensino ou na própria residência sem a necessidade de um equipamento para gravação de
microcontroladores. Além disso, o software de gravação de microcontroladores USB é
multiplataforma, pois é executável no Windows@, Mac OSX e no Linux e também plug and
play, ou seja, é reconhecido automaticamente pelos sistemas operacionais sem a
necessidade de instalar nenhum driver. Dessa forma, ela é capaz de suprimir:





Um equipamento específico para gravação de um programa no microcontrolador;
conversor TTL - RS-232 para comunicação serial bidirecional, emulado via USB pelo
protocolo CDC, que permite também a depuração do programa através da
impressão via USB das variáveis do firmware;
fonte de alimentação, já que a alimentação do PIC provém da porta USB do PC. É
importante salientar que cargas indutivas como motores de passo ou com corrente
acima de 400mA devem ser alimentadas por uma fonte de alimentação externa.
Conversor analógico-digital (AD) externo, tendo em vista que ele dispõe
internamente de 10 ADs de 10 bits;
software de simulação, considerando que a simulação do programa e do hardware
podem ser feitas de forma rápida e eficaz no próprio circuito de desenvolvimento ou
com um protoboard auxiliar.
Além de todas estas vantagens, os laptops e alguns computadores atuais não
apresentam mais interface de comunicação paralela e nem serial EIA/RS-232, somente
USB.
Como pode ser visto, esta ferramenta possibilita que a compilação, a gravação e a
simulação real de um programa, como também a comunicação serial através da emulação
de uma porta COM virtual, possam ser feitos de forma rápida e eficaz a partir do momento
em o microcontrolador esteja conectado diretamente a um computador via USB.
[ 18 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 2. 1: G
Gravação do
d PIC via
a PC.
Utilizando estta ferramenta, estud antes fora
am três vezes conseccutivas cam
mpeões da
a
Competiçã
ão de Robó
ótica do IF
FCE (2007, 2008 e 20
009) na ca
ategoria Loocalização, campeõess
da Feira Brasileira de Ciências e Engeenharia (F
FEBRACE09
9) da USPP em São
o Paulo na
a
Categoria Engenhariia (2009), como tam
mbém obtiv
veram Prêm
mio de Inoovação em
m Aplicação
o
Tecnológicca na Ferria Explora
a 2009 em
m Medelin
n na Colô
ômbia e fforam Cam
mpeões na
a
Categoria Supranive
el do Foro Internacio nal de Cie
encia e Ing
geniería 20010 no Chile, terceiro
o
lugar em iinovação na
n Semante
ec 2011 do
o IFCE e ca
ampeões na
n V Feira Estadual de
d Ciênciass
e Cultura d
do Ceará na
n categoriia robótica educacion
nal em 201
11.
2.1
GRA
AVAÇÃO DE MICRO
OCONTRO
OLADORE
ES
A trransferênccia de prog
gramas pa ra os micrrocontrolad
dores é noormalmente efetuada
a
através de
e um hard
dware de gravação específico
o. Através desta ferrramenta, é possíve
el
efetuar a descarga de
d program
mas para o microcon
ntrolador diretament
d
te de uma porta USB
B
er PC.
de qualque
Para que ttodas essas funcionalidades sejjam possív
veis, é nece
essário graavar, anterriormente e
somente u
uma vez, com
c
um grravador esspecífico pa
ara PIC, o gerenciaddor de gravação pela
a
USB Geren
nciador.he
ex disponív
vel na passta comple
eta da ferramenta noo link abaixo, onde
e
também é possível baixar
b
perio
odicamentte as atualiizações dessa ferram
menta e a inclusão de
e
novos prog
gramas: http://ww
ww.4share
ed.com/fiile/sIZwB
BP4r/100
0727SanU
USB.html
Casso o compu
utador ainda não o ttenha o ap
plicativo Ja
ava JRE ouu SDK insttalado para
a
suporte a programa
as executá
áveis deseenvolvidoss em Java
a, baixe a Versão Windows@
W
@
disponível em: http
p://www
w.4shared
d.com/file
e/WKDhQ
QwZK/jre--6u21-Wiindows@-ou
u
através
doo
link:
i586-s.httml
http://w
www.java..com/pt_BR/down
nload/ma
anual.jsp.
Para
a que os programas
p
s em C posssam ser gravados
g
no
n microcoontrolador via USB, é
necessário
o compilá-los, ou se
eja, transfo
ormá-los em
e linguag
gem de m áquina he
exadecimal.
Existem diiversos com
mpiladoress que podeem ser utillizados porr esta ferraamenta, entre eles o
[ 19 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
SDCC, o C18, o Hi-Tech
H
e o CCS. D
Devido à didática
d
da
as funçõess e biblio
otecas USB
B
os perifériccos e multtitasking, uum dos compiladoress
disponíveiss para emulação serrial, diverso
utilizados com bom rendimentto, além d
do C18, co
om exemplos de apliccação disp
poníveis na
a
desenvolvim
mento, é o CCS na vversão 3.24
45. Esta ve
ersão funccional com bibliotecass
pasta de d
de
suporte
a
USB
B
pod e
ser
obtida
a
atraavés
do
link:
http://w
www.4sha
ared.com/
/file/Mo6
6sQJs2/10
00511Com
mpilador. html .
As vversões 4 deste com
mpilador ap
presentam
m bugs em funções e aplicaçõe
es, embora
a
tenham sid
do testada
as algumass versões e funcionarram satisfatoriamentee até a verrsão 4.084.
Neste caso, é recom
mendado criar,
c
paraa cada firm
mware (pro
ograma a ser comp
pilado), um
m
novo sourc
rce file.
Casso grave no microcontrolado
or o novo
o gerencia
ador de gravação pela USB
B
Gerenciado
orPlugandP
Play.hex, não esqueeça de collar o novo
o arquivo cabeçalho SanUSB.h
h
dentro da
a pasta ExxemploseB
BibliotecasC
CCS localizzada na pasta
p
instaalada do compilado
c
r
(C:\Arquivvos de pro
ogramas\PICC\Driverrs ). A re
epresentaçã
ão básica do circuitto SanUSB
B
montado e
em protobo
board é mosstrada a seeguir:
Figura 2. 2: Esquemá
ático de m
montagem
m da Ferra
amenta pa
ara 28 pin
nos.
Para um m
microcontro
olador de 40
4 pinos, o circuito é mostrado abaixo:
[ 20 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 2. 3: Esquemático de m
montagem
m da ferramenta pa
ara 40 pin
nos.
Os








com
mponentes básicos do
o circuito ssão:
1m
microcontro
olador da família
f
PIC
C USB (18F
F2550, 18F
F2455, 18FF4550, etc.);
1 crristal de 20
0MHz;
2 ca
apacitores de 22pF;
2 ca
apacitores de 1uF (um no pino
o 14 Vusb e outro entre o +5V e o Gnd ) ;
3 le
eds e 3 ressistores de 390 (só é necessário
o um led co
om resisto r no pino B7);
B
1 re
esistor de 2k2
2 e um botão
b
ou fiio para gra
avação no pino 1;
1 diodo qualq
quer entre o +5V e o o pino Vdd
d;
1 Cabo USB qualquer.
q
Notte que, es
ste sistem
ma multip
iplataform
ma (Wind
dows@, LLinux e Mac
M
OSX),
),
compatív
vel com o softwarre de gra
avação HID
HI USB da
d Microcchip tamb
bém para
a
Linux e Mac OSX
X, pode
e ser imp
plementad
do també
ém em q
qualquer placa de
e
desenvollvimento de micro
ocontrola
adores PIIC com interface
in
USB, pois utiliza o
botão de reset, no pino 1, co
omo botão de gravaçção via US
SB. Ao connectar o ca
abo USB e
ontrolador, com o p
pino 1 no Gnd (0V),, através ddo botão ou de um
m
alimentar o microco
simples fio
o, o micro
ocontrolado
or entra em
m Estado para Grav
vação via U
USB (led no
n pino B7
7
aceso) e q
que, após o reset com
m o pino 1 no Vcc (+
+5V através do resisttor fixo de 2K2 sem o
jump
j
), en
ntra em Estado
E
pa
ara Operaçção do programa
p
aplicativo (firmware
e) que fo
oi
compilado
o.
a
normalme nte quatro
o fios, que são conecctados ao circuito do
o
O ccabo USB apresenta
microcontrrolador no
os pontos mostradoss na figurra acima, onde norm
malmente, o fio Vccc
(+5V) do ccabo USB é vermelho
o, o Gnd ((Vusb-) é marrom
m
ou preto, o D
D+ é azul ou verde e
o D- é am
marelo ou branco.
b
Notte que a fo
onte de aliimentação do microccontroladorr nos pinoss
19 e 20 e dos barra
amentos vermelho
v
((+5V) e azzul (Gnd) do circuitoo provem da própria
a
porta USB do compu
utador. Parra ligar o ccabo USB no
n circuito é possível cortá-lo e conectá-lo
o
direto no protoboard
rd, com fios rígidos soldados, como tam
mbém é poossível con
nectar sem
m
em um pro
otoboard ou
o numa p
placa de circuito
c
imp
presso, utiilizando um
m conector
cortá-lo, e
[ 21 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
USB fêmea
a. O diodo
o de proteçção colocad
do no pino
o 20 entre o Vcc da USB e a alimentação
o
do microcontroladorr serve parra protegeer contra corrente
c
re
eversa casso a tensão
o da porta
a
USB esteja
a polarizad
da de forma
a inversa.
A fiigura abaixxo mostra a ferrameenta SanU
USB monta
ada em pro
rotoboard seguindo
s
o
circuito an
nterior e a posição de
d cada teerminal no conector USB a serr ligado no
o PC. Cada
a
terminal é conecta
ado diretamente no
os pinos do microc
controladorr pelos quatro
q
fioss
correspond
dentes do cado USB..
Figura 2.. 4: Esque
ema monttado em protoboar
p
rd e conecctor USB..
É im
mportante salientar que,
q
para o perfeito
o funcionam
mento da gravação via USB, o
esta ferra
circuito de
amenta de
eve conterr um cap
pacitor de filtro enttre 0,1uf e 1uF na
a
alimentaçã
ão que vem
m da USB, ou seja, co
olocado en
ntre os pino
os 20 (+5V
V) e 19 (Gnd).
Casso o sistem
ma microco
ontrolado sseja embarcado com
mo, por exeemplo, um
m robô, um
m
sistema de
e aquisição
o de dados ou um ccontrole de
e acesso, ele
e necesssita de uma fonte de
e
alimentaçã
ão externa, que pode
e ser uma bateria comum de 9V
V ou um ccarregador de celular.
A figura abaixo mosstra o PCB, disponíveel nos Arqu
uivos do Grupo SanU
USB, e o circuito para
a
esta ferram
menta com
m entrada para fontee de alimen
ntação externa. Paraa quem de
eseja obter
o sistema pronto para um apre
endizado m
mais rápido
o, é possív
vel também
m encomen
ndar placass
de circuito
o impresso
o da ferram
menta San
nUSB, com
mo a foto da placa aabaixo, en
ntrando em
m
contato co
om o grupo
o SanUSB através
a
do e-mail: sa
anusb_laesse@yahoo. com.br .
Figura
a 2. 5: Esq
quema mo
ontado em
m PCB.
Se preferir co
onfecciona
ar a placa,, é possív
vel também
m imprimirr o PCB (em
(
preto))
abaixo, em
m folha ap
propriada, corroer, ffurar (pontos marrons) e solddar os com
mponentes.
[ 22 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Mais
detalhes
em:
www.4sha
ared.com/
/get/ithq Lbiq/Faze
endoPCBttermico.h
html ou através
a
do
o
http://w
video disponível em:: http://w
www.youttube.com
m/watch?v
v=8NhNssNw5BfU.
Figura 2. 6: PCB
B da Ferra
amenta Sa
anUSB.
Para
a obter vários
v
programas-fo nte e víd
deos deste
e sistema livre de gravação,
comunicaçção e alim
mentação via USB, basta se
e cadastra
ar no gruupo de accesso livre
e
www.tiny
yurl.com/
/SanUSB e clicar no
o item Arqu
uivos.
Durrante a pro
ogramação
o do microccontrolador basta insserir, no in
nicio do pro
ograma em
m
C, a biblioteca cab
beçalho SanUSB
S
(#
#include <SanUSB.h
<
h>) contidda dentro da pasta
a
Exemplose
eBibliotecasCCS e que
q
você j á adiciono
ou dentro da Driverss localizada
a na pasta
a
instalada d
do compila
ador ( C:\A
Arquivos dee programa
as\PICC\Drivers ). Essta bibliote
eca contém
m
instruçõess do PIC1
18F2550 para
p
o sisstema operacional, configuraações de fusíveis e
habilitação
o do sistem
ma Dual Clo
ock, ou sejja, oscilado
or RC interrno de 4 M Hz para CP
PU e crista
al
oscilador e
externo de
e 20 MHz para gerrar a frequ
uência de 48MHz daa comuniccação USB,
através de
e prescalerr multiplicador de freq
quência.
Como a frequê
ência do oscilador interno é de 4 MHz, cadda increm
mento doss
temporizad
dores corrresponde a um micro
rossegundo
o. O progrrama exem
mplo1 abaixo comuta
a
um led con
nectado no
o pino B7 a cada 0,5 segundo.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
void main(()
{
clock_int_4
4MHz();//F
Função neccessária paara habilita
ar o dual clock
c
(48M Hz para USB e 4MHzz
para CPU)
while (1)
[ 23 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
{
output_toggle(pin_B7); // comuta Led na função principal
delay_ms(500);
}
}
O programa pisca3 abaixo pisca três leds conectados nos pinos B5, B6 e B7.
#include <SanUSB.h>
main(){
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz
para CPU)
while (1)
{
output_high(pin_B5); // Pisca Led na função principal
delay_ms(500);
output_low(pin_B5);
output_high(pin_B6);
delay_ms(500);
output_low(pin_B6);
output_high(pin_B7);
delay_ms(500);
output_low(pin_B7);
}}
---------------------------------------------------------------------------------------------------------------
Os arquivos compilados .hex assim como os firmwares estão disponíveis em
http://www.4shared.com/file/sIZwBP4r/100727SanUSB.html.
2.2
GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS
Para executar a gravação com a ferramenta SanUSB, é importante seguir os
seguintes passos:
1. Baixe o a pasta da ferramenta de desenvolvimento SanUSB, para um diretório raiz C ou
D, obtida no link http://www.4shared.com/file/sIZwBP4r/100727SanUSB.html.
2. Grave no microcontrolador, somente uma vez, com um gravador específico para PIC ou
com um circuito simples de gravação ICSP mostrado nas próximas seções, o novo
gerenciador de gravação pela USB GerenciadorPlugandPlay.hex disponível na pasta
Gerenciador, compatível com os sistemas operacionais Windows@, Linux e Mac OSX.
3. Pressione o botão ou conecte o jump de gravação do pino 1 no Gnd para a transferência
de programa do PC para o microcontrolador.
4. Conecte o cabo USB, entre o PIC e o PC, e solte o botão ou retire o jump. Se o circuito
SanUSB estiver correto acenderá o led do pino B7.
5. Caso o computador ainda não o tenha o aplicativo Java JRE ou SDK instalado para
suporte a programas executáveis desenvolvidos em Java, baixe a Versão Windows@
disponível em: http://www.4shared.com/file/WKDhQwZK/[email protected]
ou
através
do
link:
[ 24 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
http://w
www.java..com/pt_BR/down
nload/ma
anual.jsp e execute o aplicativo SanUSB
B
da pasta S
SanUSBwin
nPlugandPla
ay. Surgiráá a seguintte tela:
F
Figura 2. 7: Interfa
ace de gra
avação do
o microco
ontrolado
or via USB
B.
6. Clique e
em Abrirr e escolha o program
ma .hex que
q
deseja gravar, co
como por exemplo,
e
o
programa compilado
o exemplo
o1.hex da pasta ExxemploseBiibliotecasSSanUSB e clique em
m
Gravar. Esste program
ma pisca o led conecttado no pino B7;
7. Após a gravação do
d program
ma, lembree-se de soltar o botã
ão ou retiraar o jump do pino de
e
gravação e clique em
e Resetar. Pronto o program
ma estará em operaçção. Para programar
novamente
e, repita os passos anteriores a partir do passo 3.
Para prote
eger o exe
ecutável sa
anusb de eexclusão do
o anti-virus, como ppor exemplo, o AVG,
basta ir em
m Proteçã
ãoResiden
nte do antti-virus AVG
G:
[ 25 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Clicar em g
gereciar exxecessões,, como na figura abaixo:
Clicar em Gerenciar Exceções e adicionaar caminho
o. Então in
nserir o cam
el
minho do executáve
que é em C:\Program Files\Sa
anUSB ou em C:\Arq
quivos de Programas
P
s\SanUSB e clicar em
m
OK.
[ 26 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Pronto é isso. Para reinstalarr o executtável da subpasta
s
SanUSBwin
S
nPlugandPlay , basta
a
instalá-lo d
de dentro do
d arquivo
o .zip ou .raar.
2.3
3
GRAV
VAÇÃO WI
IRELESS D
DE MICRO
OCONTRO
OLADORE
ES
A g
gravação wireless
w
descrita nestta apostila
a pode ser feita com
m modems Zigbee ou
u
Bluetooth. Para a grravação Zig
gbee são u
utlizados dois
d
módulos XBee®
® da Série 1 (S1). De
e
um lado, u
um módulo é conecttado a um
m PC coord
denador co
onectado aao PC via USB
U
do PC
C
através do
o chip FTD
DI FT232RL
L ou atravvés de uma
a porta serial real coom o MAX
X-232 e, do
o
outro lado
o da rede,, um módulo Zigbeee é conectado ao microcontro
m
olador do dispositivo
o
final. Esta
a conexão
o permite a program
mação sem fio no mic
crocontrolaador PIC. Programass
disponíveiss em: http://www.4sshared.com
m/get/aP17
7n4FT/sanu
usbee.htm l
Aba
aixo uma illustração para
p
realizaar gravaçã
ão de micro
ocontroladdor de form
ma wirelesss
com tensã
ão de alime
entação de
e 3,3V.
[ 27 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 2. 8: Ilustra
ação do ccircuito de
e gravaçã
ão wirelesss Zigbee.
Para mais detalhes basta acompanhar o
os vídeos Gravação sem fio dee microcon
ntroladoress
http://w
www.youtu
ube.com/
/watch?v
v=_Pbq2e
eYha_c
e
Gravaçção
sem
m
fio
de
e
microcontrroladores via Zigbee: http:/
//www.yo
outube.co
om/watch
h?v=BlRjKbXpepg.
Procedime
ento para gravação
g
wireless:
w
1- Circuitto básico
o: Conecte
e o módu lo Xbee® ao micro
ocontroladoor da placca SanUSB
B
(www.tinyyurl.com/Sa
anUSB), co
om alimenttação entrre 3V e 3,6
6V e apenaas 4 fios: Vcc
V (3,3V),
Gnd, Tx e Rx, como
o mostra a figura abaaixo. Na figura, o fio
o vermelhoo é ligado ao pino 20
0
(Vcc) do m
microcontrolador e ao
a pino 1 ((Vcc) do modem
m
Zig
gbee, o fioo azul é lig
gado ao 19
9
(Gnd) do m
microcontrrolador e ao
a pino 10 (Gnd) do modem Zigbee, o fi o laranja é ligado ao
o
pino 18 (R
Rx) do miccrocontrola
ador e ao pino 2 (DOUT
odem Zigbeee, e o fio amarelo é
O ) do mo
ligado ao 1
17 (Tx) do
o microconttrolador e ao pino 3 (DIN) do modem
m
Zigbbee.
2- Config
guração dos
d
Módu
ulos: A grravação wireless
w
só vai aconttecer se os
o móduloss
Xbee® da
a série 1 (ccoordenad
dor e dispo
ositivo final) estiverem configu rados com
m o mesmo
o
baud rate do microccontroladorr (19200 b ps). Para o coordena
ador, bastaa conectar, o módulo
o
coordenad
dor ao micrrocontrolad
dor, ver cirrcuito básico acima, gravar viaa USB e ex
xaminar em
m
qual firmw
ware (Conf
nfigCoord96
600to19200
00.hex ou ConfigCoor
C
rd19200to1
o19200.hexx) o led no
o
pino B7 irá
á piscar inttermitentemente. Se o led não piscar, provavelmennte existe um
u erro na
a
[ 28 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
ligação do
o circuito. Após
A
a con
nfiguração, coloque o módulo Coordenado
C
or no conv
versor USB-serial e conecte ao PC.
P
Faça postteriormente
e o mesm
mo para o módulo Dispositivo
o final, g ravando o firmware
e
(ConfigDisspFinal9600
00to19200.h
hex
ou
ConfigDi
DispFinal192
200to19200
00.hex)
e
deixe-o
o
conectado
o ao microccontrolador. Quando o led do pino
p
B7 estiver piscaando, signiffica que oss
módulos e
estão conecctados corretamente e estão ap
ptos para gravação
g
w
wireless.
Figura
a 2. 9: Grravação v ia USB de
e Configuração wirreless.
3-
Adap
ptador
W
Wireless:
Agora
grave,
novamentte
via
USB,
o
firmware
e
AdaptadorrSerial.hexx da pasta
a Adaptad orWirelesss. Se, apó
ós a gravaação do Adaptador
A
,
apresentarr o erro Odd
O addresss at begin
inning of HEX
H
file errror, comoo na figura
a abaixo, é
necessário
o gravar novamente
n
o gerencciador.hex, com qualquer gravvador espe
ecifico (ver
tutorial), e em segu
uida, realizar novam
mente a gravação viia USB doo firmware
e aplicativo
o
AdaptadorrSerial.hex. Após a transferên
t
cia deste firmware, o microcoontrolador está apto
o
para grava
ação wirele
ess.
[ 29 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figurra 2. 10: Gravação
G
o via USB de Adapttador wire
eless.
Ago
ora basta acessar a pasta saanusbee pelo
p
Prompt do Wi ndows@ (Iniciar
(
->
>
Pesquisar -> Promp
pt de Coma
ando), com
mo na figu
ura abaixo, e digitar,
r, como mo
ostrado no
o
vídeo Gravvação sem
m fio de microcontro
m
oladores via
v Zigbee,, as linhass de coma
ando, para
a
transferir os progra
amas aplicativos.hex como o Exemplo1w
wireless.heex contido
o na pasta
a
sanusbee.
Exe
emplo:
san
nusbee Exeemplo1Wire
eless.hex ––p COM2
F
Figura 2. 11: Grava
ação wire
eless zigbe
ee pelo prompt do
o Window
ws.
A g
gravação wireless
s Bluetoo
oth pode ser realiza
ada com apenas um módulo
o
Bluetooth conectado
o ao microccontrolado
or, pois norrmalmente
e no PC cooordenadorr, como em
m
laptops e desktops, já existe um
u módulo
o bluetooth
h interno. A tensão ddo módulo
o Bluetooth
h
[ 30 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
encapsulad
do, mostra
ado na figu
ura abaixo,, suporta até
a 6V, dife
erentementte do módulo Xbee®
®
que suporrta de 3,3V
V. Dessa fo
orma, pod
de-se cone
ectar o módulo Bluettooth diretamente ao
o
microcontrrolador alim
mentado pela
p
tensão
o da porta USB de 5V
V.
De um lado um
u PC coo
ordenador e, do outrro lado da rede, um módulo bluetooth
b
é
conectado
o ao microccontrolado
or do dispo
ositivo final. Esta co
onexão perrmite a pro
ogramação
o
sem
fio
no
m
microcontro
lador
PIIC.
Os
Programa
as
http://www
w.4shared.com/get/a
aP17n4FT//sanusbee..html.
estão
Neste
N
liink
disponív
íveis
anexo:
em
http://sanusb-laese.w
wix.com/ro
obotica#!p
produtos/productsstackergalleryyv20=1,
em:
pode
ser
adquirido o modem Bluetooth mostrado neste tutorial.
Aba
aixo uma illustração para
p
realizaar gravaçã
ão de micro
ocontroladdor de form
ma wirelesss
Bluetooth com tensã
ão de alime
entação dee 5V.
Fig
gura 2. 12
2: Ilustração do Ciircuito de
e gravação
o wirelesss Bluetoo
oth.
Para mais detalhes basta acompanhar o
os vídeos Gravação sem fio de microcon
ntroladores
es
http://w
www.youtu
ube.com/
/watch?v
v=_Pbq2e
eYha_c e Gravação
G
ssem fio (w
wireless) de
e
microcontrroladores
http:/
//www.yo
outube.co
om/watch
h?v=0PcC
CQtsO1Bw
wg
via
a
Bluetooth. Procedime
ento para gravação w
wireless:
1- Circuitto básico
o: Conecte o módulo
o bluetooth
h ao micro
ocontroladdor da placca SanUSB
B
(www.tinyyurl.com/Sa
anUSB), co
om alimen
ntação entrre 3V e 6V
V e apena s 4 fios: Vcc
V (3,3V),
Gnd, Tx e Rx, como mostra a figura
f
acim
ma do circu
uito. Na fig
gura, o fio vvermelho é ligado ao
o
[ 31 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
pino 20 (V
Vcc) do miicrocontrolador e ao pino Vcc do modem
m bluetoothh, o fio azzul é ligado
o
ao 19 (Gnd) do micrrocontrolad
dor e ao p
pino Gnd do modem bluetooth,, o fio verd
de é ligado
o
ao pino 18
8 (Rx) do
o microcon
ntrolador e ao pino Tx modem
m bluetoothh, e o fio amarelo é
ligado ao 1
17 (Tx) do
o microconttrolador e ao pino Rx
x do modem
m bluetootth.
2- Parearr o mode
em Blueto
ooth: Apóss alimenta
ar o modem Bluetoooth com 3,,3V ou 5V
V,
conectado
o ao microccontroladorr, realizar o pareame
ento com o PC indo eem:
2.1- Inicia
ar -> Pain
nel de con
ntrole -> A
Adicionar um
u dispositivo de bluuetooth ->
> linvor ->
>
senha pad
drão: 1234;;
2.2- Após o paream
mento, cliqu
ue em Inicciar -> Pa
ainel de co
ontrole -> exibir imp
pressoras e
os. Irá aparrecer o mo
odem pareaado, como
o, por exem
mplo, o linvvor.
dispositivo
h.
F
Figura
2. 13:
1 Pareamento do
o modem bluetooth
1.3- Clicarr em cima,, por exem
mplo, do m
modem de linvor, e verificar
v
quual porta criada
c
pelo
o
modem Bluetooth, em
e Hardwa
are, que seerá utilizada
a para a grravação wiireless.
Figu
ura 2. 14:: Verificaç
ção da po
orta seriall criada pe
elo mode
em blueto
ooth.
On
número da porta Serrial Padrão
o por Link Bluetooth (COM37) ppode ser modificada
m
,
por exemp
plo, para COM9 com
mo neste tutorial, através do
o Gerenciaador de Dispositivos,
clicando co
om o botão direito em
e cima daa porta -> propriedad
des -> Connfiguração de Porta > Avançad
do -> Núm
mero da Porrta COM.
[ 32 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
3- Config
guração do
d Módullo blueto
ooth: A grravação wireless
w
só vai aconttecer se o
módulo Bluetooth esstiver confiigurado co
om o mesm
mo baud ra
ate do micrrocontrolad
dor (19200
0
bps). Para
a isto, basta conectarr, o módulo
o bluetooth
h ao micro
ocontroladoor, ver circcuito básico
o
acima, gra
avar via US
SB o firmw
ware Config
figbluetotth
h9600to192
200.hex e verificar se
s o led no
o
pino B7 irá
á piscar inttermitentemente. Se o led não piscar, provavelmennte existe um
u erro na
a
ligação do circuito.
Quando o led do pino
p
B7 esstiver piscaando, sign
nifica que os móduloos estão conectados
c
s
corretame
ente e estão
o aptos pa
ara gravaçãão wirelesss.
Figura
a 2. 15: Gravação v
via USB de Configu
uração wiireless.
4-
Adap
ptador
W
Wireless:
Agora
grave,
novamentte
via
USB,
o
firmware
e
AdaptadorrSerial.hexx da pasta
a Adaptad orWirelesss. Se, apó
ós a gravaação do Adaptador
A
,
apresentarr o erro Odd
O addresss at begin
inning of HEX
H
file errror, comoo na figura
a abaixo, é
necessário
o gravar novamente
n
o gerencciador.hex, com qualquer gravvador espe
ecifico (ver
tutorial), e em segu
uida, realizar novam
mente a gravação viia USB doo firmware
e aplicativo
o
AdaptadorrSerial.hex. Após a transferên
t
cia deste firmware, o microcoontrolador está apto
o
para grava
ação wirele
ess.
[ 33 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figurra 2. 16: Gravação
G
o via USB de Adapttador wire
eless.
Ago
ora basta acessar a pasta saanusbee pelo
p
Prompt do Wi ndows@ (Iniciar
(
->
>
Pesquisar -> Promp
pt de Coma
ando), com
mo na figu
ura abaixo, e digitar,
r, como mo
ostrado no
o
vídeo PIC
C wireless Zigbee programmin
p
ng II, as linhas de comandoo, para tra
ansferir oss
programass aplicativo
os.hex com
mo o Exemp
plo1wirelesss.hex contido na pa sta sanusb
bee.
Exe
emplo: san
nusbee Exe
emplo1Wirreless.hex –p COM9
Fig
gura 2. 17
7: Gravaçã
ão wirele
ess blueto
ooth pelo prompt d
do Window
ws.
As vantagens do mo
odem Bluetooth em relação ao
o Zigbee, são
s o preçoo e a disp
ponibilidade
e
de mode
ems Bluettooth já disponíveeis em vários
v
sisttemas coomputacion
nais como
o
computado
ores e ce
elulares. A desvantaagem em relação ao
a Zigbee é a distâ
ância para
a
gravação d
de microco
ontroladore
es máxima de 10 metros.
[ 34 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
2.4
4
SISTEMA DUAL
L CLOCK
Devvido à inccompatibilid
dade entree as frequ
uências ne
ecessárias para a gravação
g
e
emulação serial via
a USB e a frequênccia padrão
o utilizada pela CPU
U, temporrizadores e
interface I2C, esta fe
erramenta adota o p
princípio Dual
D
Clock, ou seja, uutiliza duass fontes dee
clock, umaa para o caanal USB de
d 48MHz, provenien
nte do cristtal osciladoor externo de 20MHzz
multiplicad
da por um
m prescale
er interno, e outra para
p
o CP
PU de 4 M
MHz, prove
eniente do
o
oscilador R
RC interno de 4 MHz,, como é ilustrado na
a figura abaixo.
Fiigura 2. 18:
1 Comun
nicação PIC
P com PC
P e via I2 C.
Esse
e princípio
o de clock paralelo, rrealizado pela
p
instrução clock_
k_int_4MHz(
z(), permitee
que um da
ado digitad
do no tecla
ado do com
mputador, trafegue para
p
o miccrocontrola
ador em 48
8
MHz via USB, depoiss para perifféricos com
mo um reló
ógio RTC ou
o para a m
memória EE
EPROM em
m
4 MHz via I2C e vice--versa.
2.5
5
EMULA
AÇÃO DE COMUNIC
CAÇÃO SE
ERIAL NO
O WINDOW
WS
do um méttodo de co
omunicação
o serial biddirecional através do
o
Nesste tópico é mostrad
canal USB
B do PIC18F2550. Uma dass formas mais simp
ples, é attravés do protocolo
o
Communiccations Dev
evices Class
ss (CDC), qque emula uma porta COM RSS-232 virtu
ual, atravéss
do canal U
USB 2.0. Dessa
D
form
ma, é posssível se co
omunicar com
c
caraccteres ASCII via USB
B
através de
e qualquerr software monitor sserial RS-2
232 como o HyperT
Terminal, o SIOW do
o
CCS® Com
mpiler ou o ambiente
e de prograamação De
elphi®. O driver CDC
C instalado
o no PC e o
programa aplicativo gravado no
n PIC, co
om a biblio
oteca CDC (#includee <usb_san_cdc.h>),
são os ressponsáveis por esta emulação
e
d
da porta RS
S-232 virtu
ual através da USB.
biblioteca CDC
C
para o program
ma.c do microcontrollador está dentro da
a pasta de
e
A b
exemplos, a qual devve estar na
a mesma p
pasta onde
e está o programa.c a ser comp
pilado para
a
a emulaçã
ão da com
municação serial RS
S-232. Alé
ém disso, o program
ma.c deve
e inserir a
biblioteca usb_san_ccdc.h, com
mo mostra a o exemplo de leitura e escrrita em um
m buffer da
a
EEPROM in
nterna do microcontrrolador. Ass funções CDC
C
mais utilizadas
u
ccontidas na
a biblioteca
a
usb_san_ccdc.h para comunicaçção com a COM virtu
ual são:
usb_cdc_
_putc() – o microcontrolador eenvia caraccteres ASC
CII emuladoos via USB
B.
Ex.: prin
ntf(usb_cd
dc_putc, "\r\nEnder
"
reco para escrever:
e
");
usb_cdc_
_getc() – retém um caractere ASCII emu
ulado pela USB.
Ex.: dado
o = usb_c
cdc_getc((); //retém
m um caractere na variável dadoo
[ 35 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
gethex_usb() – retém um número hexadecimal digitado no teclado.
Ex.: valor = gethex_usb();//retém um número hexadecimal na variável valor
usb_cdc_kbhit( ) – Avisa com TRUE (1) se acabou de chegar um novo caractere no
buffer de recepção USB do PIC.
Ex.: if (usb_cdc_kbhit()) {dado = usb_cdc_getc();}
O exemplo abaixo mostra a leitura e escrita em um buffer da EEPROM interna do
microcontrolador com emulação da serial através da USB:
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para comunicação serial
BYTE i, j, endereco, valor;
boolean led;
main() {
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
output_high(pin_b7); // Sinaliza comunicação USB Ok
while (1) {
printf(usb_cdc_putc, "\r\n\nEEPROM:\r\n"); // Display contém os primeiros
64 bytes em hex
for(i=0; i<=3; ++i) {
for(j=0; j<=15; ++j) {
printf(usb_cdc_putc, "%2x ", read_eeprom( i*16+j ) );
}
printf(usb_cdc_putc, "\n\r");
}
printf(usb_cdc_putc, "\r\nEndereco para escrever: ");
endereco = gethex_usb();
printf(usb_cdc_putc, "\r\nNovo valor: ");
valor = gethex_usb();
write_eeprom( endereco, valor );
led = !led; // inverte o led de teste
output_bit (pin_b7,led);
}}
--------------------------------------------------------------------------------------------------------------Após gravação de um programa que utilize comunicação serial CDC no microcontrolador
pelo SanUSB e resetar o microcontrolador, vá, se for o Windows 7, em propriedades do
sistema -> Configurações avançadas do sistema -> Hardware -> Gerenciador de
[ 36 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
dispositivos e clique com botão direito no driver CDC do microcontrolador e atualizar Driver,
apontando para a pasta DriverCDCwinSerial.
No Windows@ XP, após a gravação de um programa que utilize comunicação serial CDC no
microcontrolador pelo SanUSB e resetar o microcontrolador, o sistema vai pedir a
instalação do driver CDC (somente na primeira vez).
Figura 2. 19: Instalação do driver CDC (1).
Escolha a opção Instalar de uma lista ou local especifico (avançado). Após Avançar,
selecione a opção Incluir este local na pesquisa e selecione a pasta DriverSanWinCDC, onde
está o driver CDC.
Figura 2. 20: Instalação do driver CDC (2).
Após Avançar, clique em Continuar assim mesmo.
[ 37 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 2. 21: Instalação do driver CDC (3).
Aguarde enquanto o Driver CDC é instalado no Windows@.
Figura 2. 22: Instalação do driver CDC (4).
Clique em Concluir para terminar a instalação.
[ 38 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 2. 23: Instalação do driver CDC (5).
Vá em painel de controle -> sistema -> Hardware -> Gerenciador de dispositivos -> Portas
(COM & LPT) e confira qual é a porta COM virtual instalada.
Figura 2. 24: Verificação de porta COM instalada.
Abrindo qualquer programa monitor de porta serial RS-232, como o SIOW do CCS ou
o Java-SanUSB, direcionando para a COM virtual instalada (COM3,COM4,COM5,etc.). No
CCS clique em Tools -> Serial port Monitor -> configuration -> set port options para que o
computador entre em contato com o PIC através da emulação serial via USB.
[ 39 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 2. 25: Utilização da porta COM pelo CCS.
Para utilizar uma função que necessite de atendimento imediato quando um
caractere for digitado como, por exemplo o caractere L ou D, é necessário inserir no
firmware do microcontrolador a condição para verificar de forma constante e reter o
caractere
emulado
que
chegou
pela
USB
S
(SB_cdc_kbhit(
))
{dado=usb_cdc_getc();} no laço infinito da função principal. O comando
(SB_cdc_kbhit( )) evita que o programa fique parado no usb_cdc_getc (que fica
esperando um caractere para prosseguir o programa). Veja o programa abaixo, que pisca
um led na função principal (pino B6) e comanda o estado de outro led (pino B7) pelo
teclado de um PC via USB:
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para comunicação serial virtual
BYTE comando;
void main() {
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz
para CPU)
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com USB do PC
while (TRUE)
{
if (usb_cdc_kbhit( )) //avisa se chegou dados do PC
[ 40 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
{ //verifica
a se tem um novo byte no b
buffer de recepção, depois o kbhit é ze
erado para
a
próximo byyte
comando=
=usb_cdc_g
getc(); //sse chegou,, retém o caractere e comparra com ‘L’ ou ‘D’ em
m
ASCII
if (comand
do==’L’) {o
output_hig
gh(pin_b7); printf(usb_cdc_putc, “\r\nLedd Ligado\r\\n”);}
if (comand
do==’D’) {output_low
{
w(pin_b7);; printf(usb
b_cdc_putc
c, “\r\nLedd Desligado
o\r\n”);}
}
gh(pin_B6)); // Pisca Led na fun
nção principal
output_hig
delay_ms((500);
output_low
w(pin_B6);;
delay_ms((500);
}}
---------------------------------------------------------------------------------------------------------------------
Figurra 2. 26: Visualizaç
V
ção de tex
xtos via serial
s
emu
ulada.
Para
a utilizar o programa
a de comu
unicação Java-SanUS
SB para em
mulação se
erial virtua
al
entre o co
omputadorr e o micro
ocontrolado
or, é necessário baix
xá-lo atravvés do link
k disponíve
el
em
http://w
www.4sha
ared.com/
/file/1itVIIv9s/101
1009Softw
wareComS
Serial_Window.ht
ml .
Após execcutar o prrograma de comuniccação serial Java-Sa
anUSB, verrifique a porta
p
COM
M
virtual gerrada (COM
M3,COM4,COM11,etc. ) no Wind
dows@, em
m Painel dde Controle
e\Todos oss
Itens do Painel de
e Controle\Sistema e altere no progra
ama seriall Java- Sa
anUSB em
m
os e depoiss clique em
m Conectarr, como mo
ostra a figu
ura abaixo..
Dispositivo
[ 41 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figurra 2. 27: Interface
I
e em Java de comunicação sserial.
2.6
6
GRAVA
ANDO O MICROCO
M
ONTROLAD
DOR VIA USB NO L
LINUX
Esta
a aplicação
o substitui a gravação
o via USB pelo terminal do Linuux, pois é uma forma
a
mais simp
ples e dire
eta de gra
avação. Co
om apenass dois cliq
ques no innstalador automático
a
o
SanUSB.de
eb é possíível instala
ar este ap licativo em
m qualquerr máquinaa com Linu
ux (Ubuntu
u
10.04, equ
uivalente ou
o posterio
or). Depoiss de instala
ado, a inte
erface de ggravação é localizada
a
em Aplicattivos -> accessórios.
Se você já te
em o Java
a instalado
o (JRE ou SDK) baix
xe o instalaador automático.deb
b
atualizado
disponíveel
no
link:
www.4sha
ared.com/
/file/RN4
4xpF_T/sa
anusb_Lin
nux.html contido ta
ambém na
a
http://w
pasta gera
al http://
/www.4sh
hared.com
m/file/sIZ
ZwBP4r/100727Sa
anUSB.httml.
Se ainda não tem o Jav
va (JRE ou
u SDK), ba
aixe o instalador SannUSB, já configurado
c
o
Java
a
JRE
e
dispponível
em:
com
o
http://w
www.4sha
ared.com/
/file/3mh
hWZS5g/s
sanusb.httml .
A ffigura abaiixo mostra
a a interfaace gráfica
a desenvolvida para gravação
o direta de
e
microcontrroladores via
v USB:
[ 42 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
agem de programa
F
Figura
2. 28:
2 Mensa
a gravado
o.
Nesste aplicatiivo, estão disponíve is botões para Abrirr o prograama em he
exadecima
al
compilado
o, para Grravar o prrograma h
hexadecima
al no micrrocontroladdor via USB e para
a
Resetar o microcontrolador no
n intuito de colocá--lo em op
peração. A interface apresenta
a
a gravar e resetar au
utomaticam
mente.
ainda um botão para
É im
mportante salientar que
q para u
utilizar esta
a ferramen
nta no Linuux é necesssário estar
logado com
m permisssão para accessar a p
porta USB como,
c
por exemplo, super-usu
uário (sudo
o
su), e que para esstabelecer comunicaçção com o microcontrolador é necessá
ário gravar
anteriorme
ente no microcontro
m
olador, som
mente uma
a vez, com
m qualquerr gravadorr específico
o
para PIC, o gerencia
ador de grravação peela USB Ge
erenciadorrLinux.hex,, disponíve
el na pasta
a
SanUSB ou
u em http://www.4shared.ccom/file/
/HGrf9nD
Dz/Gerencciador.htm
ml .
Após gravvar o GerenciadorLinux.hex co m um gravador convencional para PIC, coloque o
circuito Sa
anUSB em modo de gravação pela USB
B (pino 1 ligado ao G
Gnd (0V) através de
e
botão ou fio ) e con
necte o ca
abo USB d o circuito no PC. Se
e o circuit
ito SanUS
SB estiver
er
correto, a
acenderá
á o led do pino B7. Pronto, o sistema
s
já está prepaarado para
a gravar no
o
microcontrrolador, de
d forma simples e direta, quantos programas
p
.hex voccê desejar
utilizando a interface
e USB.
Para progrramar nova
amente, basta press ionar o bo
otão de gra
avação no pino 1, de
esconecte e
conecte o cabo US
SB de alim
mentação, selecione o programa.hex d esejado em
e Abrir e
pressione o botão Grravar&Rese
etar.
2.7
7
GRAVA
ANDO O PIC
P VIA U
USB PELO TERMINA
AL DO LIN
NUX OU MAC
M
OSX
[ 43 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Esta
a aplicação
o é realiza
ada de forrma simple
es em linha de comaando no terminal do
o
Mac OSX. Para abrirr o termina
al é necesssário baixa
ar e instala
ar o softwaare Xcode.. No Linuxx,
instale
o
san
nusb.deb
disponív
ível
em
m
http://w
www.4sha
ared.com/
/file/sIZw
wBP4r/10
00727San
nUSB.htm
ml .
Para inicia
ar a gravação com linhas de com
mando é im
mportante seguir os sseguintes passos:
1. Grave no microco
ontroladorr, somentee uma vezz, com um gravadorr específico
o para PIC
C
com o cirrcuito simp
ples de gravação C
COM84 desscrito nestta apostilaa ou outro
o gravador
qualquer, o gerenciiador de gravação
g
p
pela USB Gerenciado
dor.hex, quue é multiplataformaa
ac OSX e Windows@)
W
).
(Linux, Ma
2. Pelo Te
erminal do
o Linux ou Mac OSX
X acesse on
nde está o executávvel sanusb
b, instalado
o
pelo arq
quivo san
nusb.deb, e no Mac OSX acessse a ppasta de arquivoss
SanUSBMa
acPlugandP
Play, ond
de está o execcutável sa
anusb. M
Mais dealhes em:
http://www
w.youtube
e.com/watcch?v=rSg_ i3gHF3U .
3. Após e
entrar na pasta do exectável sanusb, acesse infformações do conte
eúdo deste
e
arquivo dig
gitando:
. / sanusb-h
A figura abaixxo mostra o printscreeen de exe
emplo de um
u processso de acessso à pasta
a
e também do processso de grav
vação pelo
o terminal:
Figu
ura 2. 29: Acesso à pasta pe
elo termin
nal do LIN
NUX.
ntado, colo
oque-o em modo de gravação
g
((pino 1 liga
ado ao Gnd
d
4. Com o ccircuito SanUSB mon
com botão
o pressiona
ado ou jum
mp ) e coneecte o cabo
o USB do circuito
c
no PC.
5. Para g
gravar no microconttrolador, o firmware desejado, como o exemplo1.hex, deve
e
estar mesm
mo diretório do executável sanusb, então
o para a grravação viaa USB, digita-se:
[ 44 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
. / sanusb –w exemplo1.he
ex
6. Depois de gravar, remova o botão ou jjump de gravação,
g
então
e
resett digitando
o:
. / sanusb –r
ou simplem
mente: . / sanusb –w
– exem plo1 –r
Para
a program
mar novam
mente, bassta coloca
ar o jump
p de gravvação, dessconecte e
conecte o cabo USB de alimen
ntação, e reepita os pa
assos anteriores a paartir do passso 6. Se o
ão for reco
onecido, ffeche o te
erminal, co
onecte o m
microcontrrolador em
m
microcontrrolador nã
outra portta USB, ab
bra um no
ovo terminaal e repita
a repita oss passos a nteriores a partir do
o
passo 3.
2.8
8
SISTEMA DUAL
L CLOCK
Devvido à inccompatibilid
dade entree as frequ
uências ne
ecessárias para a gravação
g
e
emulação serial via
a USB e a frequênccia padrão
o utilizada pela CPU
U, temporrizadores e
interface I2C, esta fe
erramenta pode ado
otar o princípio Duall Clock reaalizado pela
a instrução
o
clock_int_4
4MHz(), ou
u seja, utiliza duas ffontes de clock, uma
a para o ccanal USB de 48MHz,
provenientte do crista
al oscilado
or externo de 20MHz multiplicada por um
m prescalerr interno, e
outra para
a o CPU de
d 4 MHzz, provenieente do osscilador RC interno de 4 MHz, como é
ilustrado n
na figura abaixo.
3 Comun
nicação PIC
P com PC
P e via I2 C.
Fiigura 2. 30:
Esse
e princípio
o de clock
ck paralelo, permite que um dado digiitado no teclado
t
do
o
computado
or, trafegu
ue para o microcontr
m
rolador em 48 MHz via
v USB, deepois para periféricoss
como um relógio RTC ou para a memóriaa EEPROM em 4 MHzz via I2C e vice-versa.
2.9
9
EMULA
AÇÃO DE COMUNIC
CAÇÃO SE
ERIAL NO
O LINUX
do um méttodo de co
omunicação
o serial biddirecional através do
o
Nesste tópico é mostrad
canal USB
B do PIC18F2550. Uma dass formas mais simp
ples, é attravés do protocolo
o
Communiccations Dev
evices Classs (CDC), quue é padrã
ão no Linux
x e que em
mula uma porta COM
M
RS-232 virrtual com o microcontrolador, através do
o canal US
SB. Dessa forma, é possível se
e
comunicarr com cara
acteres ASC
CII via US
SB através de qualqu
uer softwarre monitorr serial RS-[ 45 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
232 como o Cutecom, o minicom ou outros aplicativos com interface serial. A biblioteca
CDC_ACM padrão no Linux e o programa aplicativo gravado no PIC com a biblioteca CDC
(#include <usb_san_cdc.h>), são os responsáveis por esta emulação da porta RS-232
virtual através da USB. A emulação serial é muito utilizada também para “debugar”, ou
seja, depurar as variáveis de um programa.c, imprimindo-as pela USB durante a execução
real do programa. Dessa forma, o programador pode encontrar possíveis erros na
programação do firmware.
A biblioteca CDC (#include <usb_san_cdc.h>) está dentro da mesma pasta de
ExemploseBibliotecas. Para a compilação de um programa aplicativo com emulação serial,
como o exemplo_emulSerial.c, a biblioteca CDC(#include <usb_san_cdc.h>) deve estar na
mesma pasta do programa exemplo_emulSerial.c a ser compilado ou dentro da pasta
instalada do compilador (C:\Arquivos de programas\PICC\Drivers). O programa
exemplo_emulSerial.c abaixo, contido na pasta ExemploseBilbliotecas, pisca um led no pino
B6 na função principal e comanda, via USB através emulação serial, o estado de outro led
no pino B7 com as teclas L e D do teclado de um PC. As funções CDC mais utilizadas para
comunicação com a COM virtual são:
usb_cdc_putc() – o microcontrolador envia caracteres ASCII emulados via USB.
Ex.: printf(usb_cdc_putc, "\r\nEndereco para escrever: ");
usb_cdc_getc() – retém um caractere ASCII emulado pela USB.
Ex.: dado = usb_cdc_getc(); //retém um caractere na variável dado
gethex_usb() – retém um número hexadecimal digitado no teclado.
Ex.: valor = gethex_usb();//retém um número hexadecimal na variável valor
usb_cdc_kbhit( ) – Avisa com TRUE (1) se acabou de chegar um novo caractere no
buffer de recepção USB do PIC.
Ex.: if (usb_cdc_kbhit( )) {dado = usb_cdc_getc();}
Outras funções do protocolo são:
• get_string_usb(char *s, int max): Recebe uma string;
• usb_attach(): Re-conecta o dispositivo, deve ser usada para re-conectá-lo quando o
dispositivo foi desconectado, mas ainda nãoremovido literalmente;
• usb_detach(): Desconecta o dispositivo. Deve ser usada antes de sua remoção física do
computador;
• usb_enumerated(): Verifica se o dispositivo está pronto para a comunicação.
#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para comunicação serial virtual via USB
BYTE comando;
main() {
clock_int_4MHz();//Função necessária para habilitar o dual clock (48MHz para USB e 4MHz
para CPU)
[ 46 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com USB do PC
while (TRUE)
{
if (usb_cdc_kbhit( )) //avisa se chegou dados do PC
{ //verifica se tem um novo byte no buffer de recepção, depois o kbhit é zerado para
próximo byte
comando=usb_cdc_getc(); //se chegou, retém o caractere e compara com 'L' ou 'D' em
ASCII
if (comando=='L') {output_high(pin_b7); printf(usb_cdc_putc, "\r\nLed Ligado!\r\n");}
if (comando=='D') {output_low(pin_b7); printf(usb_cdc_putc, "\r\nLed Desigado!\r\n");}
}
output_high(pin_B6); // Pisca Led na função principal
delay_ms(300);
output_low(pin_B6);
delay_ms(300);
}}
Este firmware realiza a comunicação serial virtual com o protocolo CDC inserido no
firmware do microcontrolador através da biblioteca usb_san_cdc.h. Este protocolo é padrão
no sistema operacional Linux.
Após gravar o firmware via USB com o executável linux sanusb, instale o software de
comunicação serial digitando pelo terminal do linux #sudo apt-get install cutecom .
Verifique a porta serial virtual criada digitando dmesg no terminal. Abra o Cutecom,
digitando cutecom no terminal e direcione a porta virtual criada em Device do Cutecom,
geralmente a porta é ttyACM0 ou ttyACM1. Mais informações podem ser obtidas no video:
http://www.youtube.com/watch?v=cRW99T_qa7o .
[ 47 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 2. 31: Cu
uteCOM.
É p
possível também utilizar o pro
ograma de
e comunicação seriaal Java-SanUSB para
a
emulação serial virtu
ual entre o computad
dor e o miccrocontrolador.
É p
possível baixar esta ferramenta
f
a de comu
unicação se
erial atravéés do link disponíve
el
usb_10_a
em http:://www.4
4shared.c
com/file/
/5emc7kn
nO/SerialJ
Java-sanu
all.html .
Após cone
ectar o miccrocontrola
ador e abrrir o progra
ama de co
omunicaçãoo serial Jav
va-SanUSB
B
em Aplicattivos -> Outros,
O
ap
parecerá a porta serial virtual gerada
g
no Linux (tty
yACM0) em
m
Dispositivo
os. Para listar a portta serial viirtual gerad
da, utilizan
ndo o Term
minal do Liinux, basta
a
digitar ls /
/dev/ttyA
ACM* . É possível
p
reealizar a co
omunicação
o depois dee clicar em
m Conectar,
como mosstra a figura abaixo.
Fig
gura 2. 32: Interfa
ace de com
municaçã
ão serial em
e Java p
para LINU
UX.
[ 48 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
2.10 PROGRAMA COM INTERRUPÇÃO EXTERNA POR BOTÃO E DO TIMER 1
---------------------------------------------------------------------------------------------------------------
#include <SanUSB.h>
BYTE comando;
short int led;
int x;
#int_timer1
void trata_t1 ()
{
led = !led; // inverte o led - pisca a cada 0,5 seg.
output_bit (pin_b7,led);
set_timer1(3036 + get_timer1());
}
#int_ext
void bot_ext()
{
for(x=0;x<5;x++) // pisca 5 vezes após o pino ser aterrado (botão pressionado)
{
output_high(pin_B5); // Pisca Led em B5
delay_ms(1000);
output_low(pin_B5);
delay_ms(1000);
}
}
main() {
clock_int_4MHz();
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
//enable_interrupts (int_ext); // Habilita interrupcao externa 0 no pino B0
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// configura o timer 1 em 8 x 62500 = 0,5s
set_timer1(3036);
// Conta 62.500us x 8 para estourar= 0,5s
while (1){
output_high(pin_B6); // Pisca Led na função principal
delay_ms(500);
output_low(pin_B6);
delay_ms(500);
}}
[ 49 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
--------------------------------------------------------------------------------------------------------------------2.1
11 OBTEN
NÇÃO DE UM VOLT
TÍMETRO ATRAVÉS
S DO CON
NVERSOR
R AD COM
M
A VARIA
AÇÃO DE UM
U POTEN
NCIÔMET
TRO
------------------------------------------------------------------------------------------------------------------------
#include <
<SanUSB.h
h> //Leiturra de tensãão em mV com variaçção de um
m potenciôm
metro
#include <
<usb_san_
_cdc.h>// Biblioteca
B
ppara comu
unicação se
erial virtuall
int32 tensa
sao;
main() {
4MHz();
clock_int_4
usb_cdc_in
init(); // In
nicializa o protocolo
p
C
CDC
usb_init();; // Inicializ
iza o protoc
ocolo USB
usb_task()
(); // Une o periférico
o com a usb
sb do PC
setup_adc_
c_ports(AN
N0); //Hab
bilita entradda analógicca - A0
setup_adcc(ADC_CLO
OCK_INTER
RNAL);
while(1){
//ANALÓGI
/
ICO
DIGITAL(1
10 bits)
set_adc_cchannel(0);;
// 5000 m
mV
1023
3
delay_ms((10);
// tensaoo
read_
_adc()
tensao= (5
(5000*(int3
32)read_ad
dc())/1023;
3;
printf (usb
b_cdc_putcc,"\r\nA ten
nsao e' = %
%lu mV\r\n",tensao)); // Imprim
me pela se
erial virtuall
output_hig
gh(pin_b7));
delay_ms((500);
output_low
w(pin_b7);;
delay_ms((500);
}}
Figura 2.
2 33: Uso
o de poten
nciômetro
o no conv
versor AD
D do PIC.
Para
a obter no
ovos progra
amas e pro
ojetos, bassta acessarr os arquivvos do grup
po SanUSB
B
em www.tinyurl.com/SanU
USB como também baixar
b
a ap
postila com
mpleta disp
ponível em
m
TTP://www
w.4shared.com/docu
ument/Qst_
_pem-/100
0923Apostila_CPIC.httml .
[ 50 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
2.1
12 CIRCU
UITO COM
M84 PARA
A GRAVAÇ
ÇÃO DO ge
erenciado
or.hex
a este circcuito simple
es de gravvação só é necessário
o 3 resistoores de 10k
k, um cabo
o
Para
serial DB9
9 (RS-232)) e uma fo
onte exterrna de 5V,, que pode ser obti da da porrta USB. O
circuito e a foto abaiixo mostram o esqueema simple
es de ligaçã
ão dos pinoos.
F
Figura 2. 34: Circu
uito COM8
84 para gravação do
d gerencciador.hex
x
Este circuito a partir da porta COM
C
DB9 p
pode ser visualizado na figura aabaixo.
ura 2. 35:: Esquema
a de ligaç
ção do conector se
erial.
Figu
Estte circuito de gravaçção funcion
na com o software PICPgm (ddetectado como JDM
M
Programm
mer) ou com
m WinPic (detectado
(
M84 Progra
ammer). E
Este último
o se mostra
a
como COM
mais está
ável, poiss após a detecçãão do microcontro
m
lador, é possível gravar o
microcontrrolador, e mesmo
o indican
ndo ERRO
OR: Prog
gramming failed, o arquivo
o
gerenciado
or.hex mostrou-se
m
gravado corretam
mente para geren ciar grav
vações no
o
microcontrrolador pella porta US
SB nos sisttemas operracionais Windows@®
W
®, Linux e Mac OSX.
O ssoftware de
d gravaçção do geerenciador..hex pode ser baixxado atrvé
és do linkk,
disponível em http:/
//www.4
4shared.co
om/get/1
1uP85Xru
u/winpicp
prCOM84..html.
[ 51 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 2.
2 36: Tela de conffiguração do softw
ware de grravação.
Apó
ós a insta
alação, execute o p
programa. Na guia "Device, Config", escolha o
microcontrrolador. Um
ma vez qu
ue o microccontrolado
or é conecttado à port
rta COM RS
S-232 de 9
pinos do PC, vá para "Interrface", seleecione " COM84 prrogrammerr for seria
al port", e
pressione "Initialize"". Se o softtware disseer que a in
nicialização
o foi um êxxito "Succe
ess", então
o
o program
ma está pronto
p
parra gravar o gerencciador.hex no microocontrolado
or. Para a
gravação, selecione
e em File
e Load & Program
mDevice e depois sselecione o arquivo
o
gerenciado
or.hex. Co
omo citado
o anteriorm
mente, messmo que, após a grravação e verificação
o
apareça “Programm
med Failed
d”, é prováável que o gerenciiador.hex tenha sido gravado
o
corretame
ente.
[ 52 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 2. 37: Tela de confirmação de reconhecimento do circuito.
PERIFÉRICOS INTERNOS DO MICROCONTROLADOR
3.1
CONVERSOR A/D
O objetivo do conversor analógico-digital (AD) é converter um sinal analógico,
geralmente de 0 a 5V, em equivalentes digitais. Como pode ser visto, algumas
configurações permitem ainda que os pinos A3 e A2 sejam usados como referência externa
positiva e negativa, fazendo com que uma leitura seja feita em uma faixa de tensão mais
restrita como, por exemplo, de 1 a 3 Volts.
Figura 3. 1: Diagrama de blocos interno do conversor A/D. Em C, o conversor AD pode ser ajustado para resolução de 8 bits (#device adc=8
armazenando o resultado somente no registro ADRESH) ou 10 bits (#device adc=10).
Para um conversor A/D com resolução de 10 bits e tensão de referência padrão de 5V, o
valor de cada bit será igual a 5/(210 - 1) = 4,8876 mV, ou seja, para um resultado igual a
100 (decimal), teremos uma tensão de 100* 4,8876 mV = 0,48876 V. Note que a tensão
de referência padrão (Vref) depende da tensão de alimentação do PIC que normalmente é
5V. Se a tensão de alimentação for 4V, logo a tensão de referência (Vref) também será 4V.
Para um conversor A/D com resolução de 10 bits e tensão de referência de 5V, o valor de
cada bit será igual a 5/(28 - 1) = 19,6078 mV, ou seja, para um resultado igual a 100
(decimal), é necessário uma tensão de 100 * 19,6078 mV = 1,96078 V, quatro vezes
maior.
É comum se utilizar o conversor AD com sensores de temperatura (como o LM35),
luminosidade (como LDRs), pressão (STRAIN-GAGE), tensão, corrente, humidade, etc..
[ 53 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 3. 2: Uso de periféricos no conversor A/D.
Para utilizar este periférico interno, basta:
setup_adc_ports (AN0_TO_AN2);
setup_adc(ADC_CLOCK_INTERNAL );
//(Seleção dos pinos analógicos 18F2550)
//(selecionar o clock interno)
Veja a nomenclatura dos canais analógicos de cada modelo, dentro da biblioteca do
CCS na pasta Device. Depois, no laço infinito, basta selecionar o canal para leitura, esperar
um tempo para a seleção física e então ler o canal AD.
set_adc_channel(0);
//Seleciona qual canal vai converter
delay_ms (1);
// aguarda um milisegundo para comutar para o canal 0
valor = read_adc();
// efetua a leitura da conversão A/D e guarda na variável valor
3.1.1 AJUSTE DE RESOLUÇÃO DO SENSOR E DO CONVERSOR AD DE 8 BITS
O ajuste da resolução do conversor AD se dá aproximando a tensão de fundo de escala
do sensor (VFS) à tensão de referencia do conversor (VREF). Para isso existem duas técnicas
de ajuste por Hardware:
Para este tópico é utilizado como exemplo de ajuste da resolução do conversor AD, o
sensor de temperatura LM35 que fornece uma saída de tensão linear e proporcional com
uma resolução de 10mV a cada °C.
3.1.2 AJUSTE DA TENSÃO DE FUNDO DE ESCALA COM AMPOP
Para conversores AD de 8 bits e VREF de 5V, a resolução máxima é de 19,6mV (R= VREF /
(2 -1). Dessa forma, como a Resolução do sensor é 10mV/°C (RS), é necessário aplicar um
n
[ 54 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
ajuste de resolução com um ganho na tensão de fundo de escala do sensor para que cada
grau possa ser percebido pelo conversor do microcontrolador. A forma mais comum de
ganho é a utilização de amplificadores operacionais não inversores. Veja mais detalhes no
material de apoio no final dessa apostila. A tensão de fundo de escala (VFS) está
relacionada à Temperatura Máxima desejada de medição (TMAX), onde VFS = RS(10mV/°C)
* TMAX e o Ganho (G) de aproximação da tensão de fundo de escala (VFS) à tensão de
referencia (VREF) é dado por G = VREF / VFS, ou seja, para uma Temperatura Máxima
desejada de 100°C, o ganho deve ser aproximadamente 5.
Figura 3. 3: AMP-OP não inversor.
A aproximação da tensão de fundo de escala (VFS) à tensão de referencia (VREF) é
realizada para diminuir a relevância de ruídos em determinadas faixas de temperatura.
3.1.3 AJUSTE DA TENSÃO DE REFERÊNCIA COM POTENCIÔMETRO
Outra forma mais simples de ajuste por Hardware (aumento da resolução do
conversor AD) é a aproximação da tensão de referencia (VREF) à tensão de fundo de escala
(VFS) através da diminuição da tensão de referência (VREF) com o uso de um potenciômetro
(divisor de tensão). Por exemplo, um conversor AD de 8 bits com uma tensão de referência
(VREF) de 2,55V no pino A3, apresenta uma resolução de 10mV por bit (2,55/(28-1)), ou
seja, a mesma sensibilidade do sensor LM35 de 10mV/°C . Percebe variação de cada °C.
3.1.4 CONVERSOR AD DE 10 BITS
Para conversores de 10 bits, com maior resolução (4,89 mV), o ajuste
(escalonamento) é realizado geralmente por software, em linguagem C, que possui um
elevado desempenho em operações aritméticas.
OBS.: O ganho de tensão de um circuito poderia ser simulado por software com os
comandos: Int32 valorsensor= read_adc();
Int32 VFS = 4 * Valorsensor;
A fórmula utilizada pelo programa no PIC para converter o valor de tensão fornecido
pelo sensor LM35 em uma temperatura é:
ANALÓGICO
5V = 5000mV
DIGITAL
1023
->
[ 55 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
T(°C)* 10mV/°C
->
(int32)read_adc()
T (ºC) = 500 * (int32)read_adc()/1023
onde (int32)read_adc() é o valor digital obtido a partir da temperatura (T(ºC)) analógica
medida. Esta variável é configurada com 32 bits (int32), porque ela recebe os valores dos
cálculos intermediários e pode estourar se tiver menor número de bits, pois uma variável
de 16 bits só suporta valores de até 65.535. A tensão de referência do conversor é 5V e
como o conversor possui 10 bits de resolução, ele pode medir 1023 variações.
3.1.5 OBTENÇÃO DE UM VOLTÍMETRO ATRAVÉS DO CONVERSOR AD COM A
VARIAÇÃO DE UM POTENCIÔMETRO
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h> //Leitura de tensão em mV com variação de um potenciômetro
#include <usb_san_cdc.h>// Biblioteca para comunicação serial virtual
int32 tensao;
main() {
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
setup_adc_ports(AN0); //Habilita entrada analógica - A0
setup_adc(ADC_CLOCK_INTERNAL);
while(1){
//ANALÓGICO
DIGITAL(10 bits)
set_adc_channel(0);
// 5000 mV
1023
delay_ms(10);
// tensao
read_adc()
tensao= (5000*(int32)read_adc())/1023;
printf (usb_cdc_putc,"\r\nA tensao e' = %lu C\r\n",tensao); // Imprime pela serial virtual
output_high(pin_b7);
delay_ms(500);
output_low(pin_b7);
delay_ms(500);
}}
---------------------------------------------------------------------------------------------------------------
[ 56 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 3. 4: Con
nexão do potenciômetro no converso
or A/D.
3.1.6 LEIITURA DE
E TEMPER
RATURA CO
VÉS DO C ONVERSO
OR AD
OM O LM35 ATRAV
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
#include <
<usb_san_
_cdc.h>// Biblioteca
B
p
para comunicação se
erial virtuall
int16 temp
peratura;
main() {
clock_int_4
4MHz();
usb_cdc_in
nit(); // Inicializa o protocolo
p
C
CDC
usb_init();; // Inicializza o protoccolo USB
usb_task()); // Une o periférico com a US
SB do PC
setup_adcc_ports(NA
A0); //Habilita entrad
da analógicca – A0
setup_adcc(ADC_CLO
OCK_INTER
RNAL);
while(1){
set_adc_channel(0);;
delay_ms((10);
temperatu
ura=430*re
ead_adc()//1023; //V
Vref = 4,,3V devido
o à quedda no dio
odo, então
o
(430*temp
p)
printf (usb
b_cdc_putcc,”\r\nTemperatura d
do LM35 = %lu C\r\n”,temperattura);
gh(pin_b7)); // Pisca Led em o
n
operação normal
output_hig
delay_ms((500);
output_low
w(pin_b7);;
delay_ms((500);
}}
---------------------------------------------------------------------------------------------------------------------
[ 57 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 3. 5: Le
eitura de temperatura via monitor
m
se
erial.
3.1.7 TER
RMISTOR
R
Um termistor é um
ma resistência variáável com a tempera
atura. Na realidade
e todas ass
resistência
as variam com a tem
mperatura, só que oss termistorres são feiitos para terem
t
uma
a
grande va
ariação com
m a tempe
eratura. A ligação do
d termisto
or ao micrrocontolado
or é muito
o
simples, co
omo mostrra a figura baixo.
ura 3. 6: C
Conexão do termis
stor.
Figu
Convém le
embrar que
e a respostta de um teermistor não é linearr, como moostra a figu
ura abaixo.
Figu
ura 3. 7: R
Resposta do termis
stor.
LINEARIZ
ZAÇÃO
uito comum
m de lineaarização do
o termistorr é por moodalidade da tensão,
Um forma mu
onde um ttermistor NTC
N
é cone
ectado em série com um resisto
or normal formando um divisor
de tensão. O circuito do diviso
or contém
m uma fontte de tensã
ão de refeerência (Vrref) igual a
[ 58 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
2,5V. Isto tem o efeito de prod
duzir uma ttensão na saída que seja linearr com a tem
mperatura.
or R25C esco
olhida for iigual ao da
a resistênc
cia do term
mistor na te
emperatura
a
Se o valor do resisto
0
ambiente (25 C), en
ntão a reg
gião de ten
nsão linear será simé
étrica em to
torno da te
emperatura
a
ambiente (como vistto em figurra abaixo).
Figura
a 3. 8: Lin
nearizaçã
ão do term
mistor.
3.2
MEMÓRIAS DO MICR
ROCONTRO
OLADOR
Om
microcontro
olador apre
esenta diveersos tiposs de memória, entre eelas:
3.2.1 MEMÓRIA DE
D PROGR
RAMA
Am
memória de
e programa
a flash, é o local ond
de são grav
vados o cóódigo hexadecimal do
o
programa compilado
o. Essa me
emória é u
uma espéccie de EEPROM (mem
mória prog
gramável e
apagável e
eletronicam
mente), ma
as só podee ser gravada e apagada complletamente e não byte
e
a byte, o q
que a torna
a mais eco
onômica.
3.2.2 MEMÓRIA DE
D INSTRU
UÇÕES
A m
memória de
d instruçõ
ões, que é uma esp
pécie de BIOS
B
(binaary input and
a
output
ut
system), se localizaa dentro da CPU ppara comp
paração co
om o códdigo hexad
decimal do
o
programa que está sendo
s
proccessado e eexecução de
d uma açã
ão corresppondente.
[ 59 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
3.2.3 MEMÓRIA EEPROM INTERNA
A maioria dos modelos da família PIC apresenta memória EEPROM interna, com
dimensões de 128 ou 256 bytes. Em algumas aplicações, a EEPROM interna é muito útil
para guardar parâmetros de inicialização ou reter valores medidos durante uma
determinada operação de sensoreamento.
O PIC18F2550 contém 256 bytes (posições 0 a 255) de EEPROM interna, que podem
ser escritas facilmente utilizando a instrução write_eeprom(posicao, valor); e lidas
com a instrução valor2=read_eeprom (posicao);. O projeto de controlde de acesso
com teclado matricial abaixo mostra o uso desta memória.
3.2.4 MEMÓRIA DE DADOS (RAM)
A memória RAM do microcotrolador 18F2550 possui 2Kbytes disponíveis para
propósito geral (entre 000h a 7FFh). No final da RAM (entre F60h e FFFh) estão localizados
os registros de funções especiais (SFR), que servem para configurar os periféricos internos
do microcontrolador.
Esses registros podem ser configurados bit a bit através do seu endereço com a
diretiva #byte que funciona para apontar uma posição de memória (#byte
OSCCON=0XFD3 -> OSCCON=0B01100110; //Configura oscilador interno para 4MHz) ou
por funções proprietárias do compilador (setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
set_timer1(3036); // configura o timer 1 com clock interno e dividido por 8 para contar
62500 = 65536-3036 – Tempo total = 62500 x 8us = 0,5 segundos).
[ 60 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 3. 9: Registros de funções especiais.
3.2.5 EXEMPLO DE APLICAÇÃO
3.2.5.1
CONTROLE DE ACESSO COM TECLADO MATRICIAL
O teclado matricial é geralmente utilizado em telefones e em controle de acesso de
portas com senhas pré-definidas. O controle de acesso é feito, na maioria das vezes, com
sistemas microcontrolados por varredura das linhas, aterrando individualmente as colunas
do teclado. Caso alguma tecla seja pressionada, o pino da tecla correspondente também
será aterrado e indicará a tecla digitada.
[ 61 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 3. 1 0: Teclad
do Matricial.
Para
a reconhe
ecer uma senha d
digitada em um te
eclado maatricial é necessário
o
armazenarr o valor das teclass digitadass em seqü
üência em
m alguma memória, como por
exemplo, na memória de dad
dos RAM (pode-se utilizar qu
uaisquer poosições do
os 2Kbytess
disponíveiss entre 000h
0
a 7F
FFh), depo
ois compará-la com uma sennha pré-programada
a
contida na
a memória de programa flash (““ROM”) ou
u na EEPRO
OM internaa.
gura 3. 11: Formas
s de comp
paração com
c
a sen
nha pré-p rogramad
da.
Fig
Notte que o prrograma de
e controle de acesso
o em anexo
o utiliza a E
EEPROM in
nterna para
a
possibilitarr a inserçção de no
ovas senh
has na EE
EPROM, se
em a neccessidade de gravar
novamente
e a memórria de prog
grama do m
microcontro
olador.
PONTEIR
ROS
Ponteiros
s guardam
m endereç
ços de me
emória de
e program
ma.
Exemplo p
para declarrar um pon
nteiro:
unsigned
d int16 p=
=100;
//ponteirro igual a posição
p
100
*p='7'; /// Conteúdo
o endereça
ado por p é igual a ‘7
7’(ASC II) ou
o 0x37.
++p; //In
ncrementa a posição para receb
ber próxim
mo dado.
Programa de contro
ole de acessso com arrmazename
mento de se
enhas na EEEPROM in
nterna pelo
o
próprio tec
eclado atravvés de uma
a senha dee administr
trador (messtre):
[ 62 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
/////////////////////////////////////////////////////////////////////////
///Teclado Matricial insere novas senhas pelo teclado com a senha mestre//
/////oscilador interno 4 de MHz//////////////////////////////////////////
//Se faltar energia ou existir um reset, as senhas armazenadas não são
//perdidas e é possivel armazenar novas senhas após a última senha gravada
//É possível apagar senhas lendo a EEPROM e zerando as posições da senha
ex.:write_eeprom( endereco, 0 );
#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para comunicação serial
char caract,tecla0,tecla1,tecla2,tecla3;
unsigned int16 p=100,i,j;
unsigned int mult=8,k=0,n=0;
int1 led,flag=0,flag2=0,flag3=0;
//////////////////////////////////////////////////////////////////////////////////
#int_timer1 // Interrupção do timer 1
void trata_t1 () // Conta 62.500us x 8 = 0,5s
{--mult;
if (!mult)
{mult=8; // 8 x0,5s - 4 seg
p=100; tecla0='F';tecla1='F';tecla2='F';tecla3='F'; // volta a posição de origem a
cada 4 seg
}}
//////////////////////////////////////////////////////////////////////////////////
main() {
clock_int_4MHz();
port_b_pullups(true);
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// inicia o timer 1 em 8 x 62500 = 0,5s
set_timer1(3036);
//write_eeprom( 239, 0);//Pode apagar toda a memória de senhas zerando k
if(read_eeprom(239)>0 && read_eeprom(239)<40) {k=read_eeprom(239);} // Carrega a
útima posição livre da eeprom (k) antes do reset armazenada em 239
while (1)
{
// Reconhecimento de tecla por varredura
output_low(pin_b0);output_high(pin_b1);output_high(pin_b2);
if(input(pin_b3)==0) {*p='1'; flag=1; while(input(pin_b3)==0);delay_ms(200);}
[ 63 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
if(input(pin_b4)==0) {*p='4'; flag=1; while(input(pin_b4)==0);delay_ms(200);}
if(input(pin_b5)==0) {*p='7'; flag=1; while(input(pin_b5)==0);delay_ms(200);}
if(input(pin_b6)==0) {*p='*'; flag=1; while(input(pin_b6)==0);delay_ms(200);}
output_high(pin_b0);output_low(pin_b1);output_high(pin_b2);
if(input(pin_b3)==0) {*p='2'; flag=1; while(input(pin_b3)==0);delay_ms(200);}
if(input(pin_b4)==0) {*p='5'; flag=1; while(input(pin_b4)==0);delay_ms(200);}
if(input(pin_b5)==0) {*p='8'; flag=1; while(input(pin_b5)==0);delay_ms(200);}
if(input(pin_b6)==0) {*p='0'; flag=1; while(input(pin_b6)==0);delay_ms(200);}
output_high(pin_b0);output_high(pin_b1);output_low(pin_b2);
if(input(pin_b3)==0) {*p='3'; flag=1; while(input(pin_b3)==0);delay_ms(200);}
if(input(pin_b4)==0) {*p='6'; flag=1; while(input(pin_b4)==0);delay_ms(200);}
if(input(pin_b5)==0) {*p='9'; flag=1; while(input(pin_b5)==0);delay_ms(200);}
if(input(pin_b6)==0) {*p='!'; flag=1; while(input(pin_b6)==0);delay_ms(200);}
// Guarda tecla pressionada
if (flag==1) {
if(p==100){tecla0=*p;}
if(p==101){tecla1=*p;}
if(p==102){tecla2=*p;}
if(p==103){tecla3=*p;flag2=1;} //A flag2 avisa que senha foi digitada completamente
mult=4; //cada tecla tem 2 seg para ser pressionada a partir da primeira
printf
(usb_cdc_putc,"\r\nValor
das
teclas
digitadas:
%c
%c
%c
%c\r\n",tecla0,tecla1,tecla2,tecla3);
printf (usb_cdc_putc,"Endereco para onde o ponteiro p aponta: %lu\r\n",p);
++p; // Incrementa posição para próxima tecla
if(p>103){p=100;}
}
//************************************************************************
****
if (tecla0=='3' && tecla1=='6'&& tecla2=='9'&& tecla3=='!'&& flag2==1) {
flag3=1; //Indica que a senha mestre autorizou e a nova senha pode ser armazenada
flag2=0; //Garante que somente a próxima senha, diferente da senha mestre, será
armazenada
output_high(pin_c0);printf
(usb_cdc_putc,"\r\nSenha
Mestre!\r\n");delay_ms(1000);
output_low(pin_c0);}
//************************************************************************
****
if (flag2==1 && flag3==1) { //Se a senha mestre já foi digitada (flag3) e a nova senha do
usuário também foi digitada (flag2)
write_eeprom( 4*k, tecla0 ); //Grave a nova senha
write_eeprom( (4*k)+1, tecla1 );
write_eeprom( (4*k)+2, tecla2 );
write_eeprom( (4*k)+3, tecla3 );
[ 64 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
++k; // incremente as posições para armazenar nova senha
printf (usb_cdc_putc,"\r\nSenha armazenada\r\n");
write_eeprom( 239, k); printf(usb_cdc_putc,"proximo k=%u\r\n",k);//Guarda a útima
posição livre antes do reset na posição 239 da EEPROM
flag3=0; //Zera a flag3 da nova senha
//************************************************************************
****
for(i=0; i<6; ++i) //Lê EEPROM
{
for(j=0; j<40; ++j) {printf(usb_cdc_putc,"%2x ", read_eeprom(i*40+j)
);}//Leitura da eeprom interna
}
printf(usb_cdc_putc,"\r\n");
}
//************************************************************************
****
// Compara conjunto de teclas pressionadas com senhas armazenadas na eeprom
if (flag2==1) {
for(n=0;n<=k;n++)
{
if
(tecla0==read_eeprom(4*n)
&&
tecla1==read_eeprom(4*n+1)
&&
tecla2==read_eeprom(4*n+2)&& tecla3==read_eeprom(4*n+3))
{ output_high(pin_c0); printf (usb_cdc_putc,"\r\nAbre a porta!\r\n");delay_ms(3000);
output_low(pin_c0);} } }// abre a porta
//************************************************************************
****
flag=0; flag2=0; //Zera as flags para que novas senhas possam ser digitadas
led = !led; // inverte o led de operação
output_bit (pin_b7,led);
delay_ms(100);
}}
--------------------------------------------------------------------------------------------------------------valor = read_adc();
// efetua a leitura da conversão A/D e guarda na variável valor
3.3
MODULAÇÃO POR LARGURA DE PULSO PELO CCP
O Periférico interno independente CCP (Capture/Compare/PWM) é responsável por
comparação de sinais, bem como, gerar um sinal de sáida em PWM (CCP1CON=0x0C), ou
seja, modulação por largura de pulso (pulse width modulation). Dessa forma, é possível
[ 65 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
realizar o PWM pelo periférico interno CC
CP do micrrocontrolad
dor ou porr software através de
e
essador do microconttrolador, co
omo mostrrado no iteem 3.3.1.
emulação pelo proce
A gerração do PWM
P
é pro
oduzida, geeralmente,, pelo chav
veamento de uma te
ensão com
m
amplitude constante
e (+5V porr exemplo)), tendo em
m vista qu
ue quanto menor a la
argura doss
pulsos em
mitidos na base de uma chavve eletrôn
nica, como
o um traansistor, menor
m
é a
saturação do transisstor e, conssequentem
mente, men
nor a tensã
ão lado da carga, ressultante do
o
chaveamento.
O perríodo T0 é o intervalo de tempo que se reg
gistra o pe
eríodo repeetitivo do pulso
p
e o τ0
é o ciclo d
de trabalh
ho (duty-ciicle), ou seeja, o tem
mpo em que
q
o pulsso permanece com a
amplitude em nível lógico alto.
Figura
F
7. 1
1: Ciclo de
e trabalho
o.
dulo CCP, o registro PR2 é carrregado parra servir de referênccia de conttagem para
a
No mód
o timer 2 d
de 8 bits com
c
presca
aler (multip
plicador de
e tempo de
e geralmennte 4 ou 16
6). Quando
o
o timer 2 quando chega ao va
alor de PR
R2, seta o flip-flop
f
do
o CCP para gerar o período (T0)
e consequentemente
e a frequên
ncia desejaada do PW
WM (freqPW
WM).
O valor digital (Vd
dig) de 10 bits do cic lo de traba
alho, obtido do valor percentua
al (0 a 100))
inserido pe
elo usuário
o. O Vdig O Vdig é carregado em CCPR
R1L, que guuarda os 8 bits maiss
significativvos do valo
or digital, e nos bitss 5 e 4 do
o CCP1CON são carrregados os
o dois bitss
menos sig
gnificativos do valor digital,
d
e sserve de re
eferência para
p
o timeer2 resetarr o ciclo de
e
trabalho.
etalhes no vídeo:
v
http
p://www.yo
outube.com
m/watch?v
v=lB21b3zA
A4Ac
Mais de
[ 66 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
CONTR
ROLE PW
WM POR SO
OFTWARE
E DE VELO
OCIDADE DE UM M
MOTOR CC
C
A fina
alidade desste controle de veloccidade com
m a modulação de teensão por largura de
e
pulsos (PW
WM) é realizar uma conversão
c
d
digital-ana
alógica que
e acontece devido à impedância
a
inerente do circuito em
e alta fre
equência.
ura 7. 2: PWM.
P
Figu
O pro
ograma abaixo mostrra o contro
ole de velocidade de
e um motrro CC por PWM com
m
período co
onstante de
d 20ms, onde cad
da increme
ento ou de
ecrementoo da onda quadrada
a
correspond
de a 1ms,, ou seja, ou seja, um acrésccimo ou decréscimo
d
o de 5% no
n ciclo de
e
trabalho.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
#define m
motor pin_b
b7
#define le
ed pin_b0
unsigned iint ton,tofff,incton,incctoff,guard aton,guard
datoff;
int1 flag1, flag2;
main() {
clock_int_4
4MHz();
port_b_pu
ullups(true));
incton=2; inctoff=18
8; //Períod
do de 20m s - Passo mínimo de
e tempo = 1ms (5%
% (1/20) do
o
duty cicle )
guardaton
n=read_eep
prom(10);g
guardatofff=read_eep
prom(11);
n<=20) {in
ncton=guarrdaton; inc
ctoff=guard
rdatoff;}
if (guardatton>0 && guardaton
while (1) {
ton=incton
n; toff=incctoff;
if (!input(p
pin_b1)) {fflag1=1;}
[ 67 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
if
(incto
on<20
&&
flag
g1==1
&&
inp
put(pin_b1))
)
{{flag1=0;+
++incton;--inctoff;outtput_high(lled);//se não chegou
u no máxim
mo (incton<
<50),
write_eeprrom(10,inccton);write
e_eeprom(1
11,inctoff);
//se
e o botãão foi pressionado
p
o
(flag1==1
1) e se o bo
otão já foi solto (inpu
ut(pin_b1)) incremen
nte
}// a onda qua
adrada e gu
uarde os va
valores na eeprom
e
if (!input(p
pin_b2)) {fflag2=1;}
if
(incto
off<20
&&
flag
g2==1
&&
inp
put(pin_b2))
)
{{flag2=0;+
++inctoff;--incton;outtput_low(le
ed);
write_eeprrom(10,inccton);write
e_eeprom(1
11,inctoff);
}
ou
utput_high
h(motor);
w
while(ton) {--ton;delay
{
y_ms(1); } //Parte alta da onda quadradaa
ou
utput_low((motor);
w
while(toff) {--toff;dela
{
ay_ms(1); } //Parte baixa
b
da on
nda quadraada
}}
}
---------------------------------------------------------------------------------------------------------------------
A figura aabaixo mosstra o circu
uito montaado para com
co este exemplo.
e
V
Veja o funccionamento
to
desse circu
cuito no víd
deo http:/
//www.yo
outube.co
om/watch
h?v=6IIH
H02dbboE
E.
Figura 7. 3
3: PWM co
om Mosfe
et.
INTER
RRUPÇÕ
ÕES E TEMPOR
RIZADO
ORES
INTERRU
UPÇÕES
As interrupçõ
ões são ca
ausadas attravés de eventos assíncrono
a
os (podem ocorrer a
momento) causando um desvio
o no proce
essamento. Este desvvio tem com
mo destino
o
qualquer m
um endere
eço para trratamento da interru
upção. Uma
a boa analogia para melhor en
ntendermoss
[ 68 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
o conceito de interrupção é a seguinte: você está trabalhando digitando uma carta no
computador quando o seu telefone toca. Neste momento você, interrompe o que está
fazendo, para atender ao telefone e verificar o que a pessoa do outro lado da linha está
precisando. Terminada a conversa, você coloca o telefone no gancho novamente e retoma
o seu trabalho do ponto onde havia parado. Observe que não precisamos verificar a todo
instante, se existe ou não alguém na linha, pois somente quando o ramal é chamado, o
telefone toca avisando que existe alguém querendo falar com você.
Após do atendimento das interrupções, o microcontrolador retorna exatamente ao
ponto onde parou no programa antes de atendê-la. As interrupções mais comuns na família
PIC18F são:
- pela interrupção externa 0 (Pino B0) -> enable_interrupts(int_ext);
- pela interrupção externa 1 (Pino B1) -> enable_interrupts(int_ext1);
- pela interrupção externa 2 (Pino B2) -> enable_interrupts(int_ext2);
- pelo contador/temporizador 0 -> enable_interrupts(int_timer0);
- pelo contador/temporizador 1 -> enable_interrupts(int_timer1);
- pelo contador/temporizador 2 -> enable_interrupts(int_timer2);
- pelo canal de comunicação serial -> enable_interrupts(int_rda); //serial
As interrupções do PIC são vetorizadas, ou seja, têm endereços de início da
interrupção fixos para a rotina de tratamento. No PIC18F2550 o endereço de tratamento é
0x08. No programa em C basta escrever a função de tratamento da interrupção após #, e
o compilador fará o direcionamento do códico automaticamente para essa posição.
INTERRUPÇÕES EXTERNAS
O modelo PIC18F2550 possui três interrupções externas, habilitadas nos pinos B0
(ext) , B1 (ext1) e B2 (ext2), que atuam (modo default) quando os pinos são aterrados.
Quandos atuados o processamento é desviado para #int_ext, #int_ext1 ou #int_ext2,
respectivamente, para que a interrupção possa ser tratada por uma função específica, que
no caso do exemplo é void bot_ext().
Dentro da função principal deve-se habilitar o “disjuntor” geral das interrupções,
enable_interrupts(global); e depois a interrupção específica, por exemplo
enable_interrupts(int_ext); como mostra o exemplo com aplicação de interrupção externa e
também interrução do temporizador 1.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
BYTE comando;
short int led;
int x;
#int_timer1
void trata_t1 ()
{
led = !led; // inverte o led - pisca a cada 0,5 seg.
output_bit (pin_b7,led);
set_timer1(3036 + get_timer1());
}
[ 69 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#int_ext
void bot_ext()
{
for(x=0;x<5;x++) // pisca 5 vezes após o pino ser aterrado (botão pressionado)
{
output_high(pin_B5); // Pisca Led em B5
delay_ms(1000);
output_low(pin_B5);
delay_ms(1000);
}
}
main() {
clock_int_4MHz();
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_ext); // Habilita interrupcao externa 0 no pino B0
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// configura o timer 1 em 8 x 62500 = 0,5s
set_timer1(3036);
// Conta 62.500us x 8 para estourar= 0,5s
while (1){}; //Loop infinito (parado aqui)
}
--------------------------------------------------------------------------------------------------------------Para habilitar a nomenclatura das as interrupções estão disponíveis em view > valid
interrupts.
Quando for utilizada alguma interrupção externa, é necessário inserir um resistor de pull-up
externo de 1K a 10K para elevar o nível lógico do pino quando o mesmo for liberado
evitando outra interrupção, pois o processador entende tristate e níveis intermediários de
tensão como nível lógico baixo.
INTERRUPÇÃO DOS TEMPORIZADORES
O microcontrolador PIC 18F2550 tem quatro temporizadores, que são os timers 0, 1,
2 e 3. O timer 0 tem 16 bits, ou seja, pode contar até 65535μs (216) e um prescaler
(divisor de frequência ou multiplicador de tempo) de até 256 (RTCC_DIV_256). Os timers
1 e 3 são idênticos com 16 bits e um prescaler de até 8 (RTCC_DIV_8). Por sua vez, O
timer 2 possui 8 bits e um prescaler de até 16 (RTCC_DIV_16).
Os timers incrementam até estourar, quando estouram, processamento é desviado para
#int_timer, para que a interrupção possa ser tratada por uma função específica, que no
caso do exemplo é void trata_t0 () e void trata_t1 ().
O programa a seguir pisca um led em b5 na função principal main(), outro pela
interrupção do timer 1 em b6 e um terceiro led em b7 pela interrupção do timer0.
-------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
short int led0, led1;
int vart1=2, vart3=4; // multiplicador de tempo
[ 70 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#int_timer0
void trata_t0 () //Função de taratamento, o Timer0 é configurado com o nome RTCC
{
led0 = !led0; // inverte o led a cada 4 seg pois tem prescaler igual a 64 (RTCC_DIV_64)
output_bit (pin_b7,led0);
set_timer0(3036 + get_timer0()); // get_timer() carrega o timer compensando o tempo
gasto no tratamento da interrupção
}
#int_timer1 //O timer 1 e o timer 3 são idênticos, só basta modificar 1 por 3 na
configuração
void trata_t1 ()
{
--vart1;
if(vart1==0)
{
led1 = !led1; // inverte o led - pisca a cada 1 seg (vart1=2 x 0,5 seg)
output_bit (pin_b6,led1);
vart1=2; // necessita de multiplicador de tempo, pois o prescaler máximo é 8
(T1_DIV_BY_8)
set_timer1(3036 + get_timer1()); // get_timer() carrega o timer compensando o tempo
gasto no tratamento da interrupção
}
}
main(){
clock_int_4MHz();
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_timer0); // Habilita interrupcao do timer 0
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64);// configura o prescaler do timer
0 em 64, tem prescaler até 256
set_timer0(3036);
// Conta 62.500us x 64 para
estourar= 4 seg
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8); // configura o prescaler do timer 1
em 8 x 62500us = 0,5 seg
set_timer1(3036);
// Conta 62.500us x 8 para
estourar= 0,5 seg
while (1){
//Função principal pisca led em a5
output_high(pin_b5);
delay_ms(500);
output_low(pin_b5);
delay_ms(500);
[ 71 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
}
}
--------------------------------------------------------------------------------------------------------------MULTIPLEXAÇÃO POR INTERRUPÇÃO DE TEMPORIZADORES
O programa abaixo mostra uma multiplexação de displays de 7 segmentos por
interrupção dos temporizadores 0 e 1. O timer 0 incrmena a variável a ser multiplexada
pelos displays e o timer 1 multiplexa a porta B dígitos de dezenas e dígitos de unidades até
99.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#byte port_b = 0xf81//Atribuição do nome portb para o registro da porta B localizado na
posição 0xf81
int setseg[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com 10
elementos
int flag=0;
int i=0, z, dezena, unidade; //índice dezena,unidade (ponteiro)
//******************************************
#int_timer0
void trata_t0 () //O Timer0 é configurado com o nome RTCC
{
if(i<=99) {++i;}
if(i>99) {i=0;}
set_timer0(3036 + get_timer0()); // get_timer() carrega o timer compensando o tempo
gasto na interrupção
}
//*********************************************
#int_timer1 //O timer 1 e o timer 3 são idênticos, só basta modificar 1 por 3 na
configuração
//void trata_t1 ()
{
dezena=i/10; //dezena recebe o número inteiro da divisão por 10
unidade=i%10; //unidade recebe o resto da divisão por 10
switch(flag)
{
case 0: {
output_high(pin_a0); //pin_a0 aciona transistor do comum das dezenas
output_low(pin_a1); //pin_a3 aciona transistor do comum das unidades
port_b = setseg[dezena]; //A porta B recebe o desenho do número das dezenas
apontado pela variável dezena
flag=1; break;}
[ 72 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
case 1: {
output_high(pin_a1); //selecionei a unidade
output_low(pin_a0);
port_b = setseg[unidade]; //A porta B recebe o desenho do número das unidades
apontado pela variável unidade
flag=0; break;}
}
set_timer1(55536 + get_timer1());
}
main(){
clock_int_4MHz();
set_tris_b(0b00000000);// Define os pinos da porta B como saída
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_timer0); // Habilita interrupcao do timer 0
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_8);// configura o prescaler do timer
0 em 64, prescaler até 256
set_timer0(3036);
// Conta 62.500us x 8 para
estourar= 0,5 seg
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1);
set_timer1(55536);
estourar
while (1){
// Conta 10000 us (10ms) para
//Função principal
}
output_high(pin_a5);
delay_ms(300);
output_low(pin_a5);
delay_ms(300);
}
--------------------------------------------------------------------------------------------------------------------
EMULAÇÃO DE PORTAS LÓGICAS
Os operadores lógicos descritos abaixo adotam o padrão ANSI C, ou seja, podem ser
utilizados por qualquer compilador em linguagem C direcionado à microcontroladores.
[ 73 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
5.1
I
INSTRUÇ
ÇÕES LÓG
GICAS PARA
P
TESTES CO
ONDICION
NAIS DE
E
NÚME
EROS
Nessse caso, os opera
adores sã o utilizado
os para realizar ooperações de testess
condionaiss geralmen
nte entre números intteiros.
OPER
RADOR
&
&&
ll
!
CO
OMANDO
Operaçção E (AND)
Operaçção OU (OR))
Operaçã
ão NÃO (NOT
T)
Exemplos:
dodec==05
5 && (min
nutodec==
=00|| minu
utodec==30)) {flagw
write=1;}//Analisando
o
if (segund
um relógio
o para seta
ar a flagwrite
if (x>0 &
&& x<20) (y=x;) // Estabeleceendo faixa de valoress para y.
5.2
I
INSTRUÇ
ÇÕES LÓG ICAS BOO
OLANAS BIT
B A BIT
T
Considere as portas lógicas abaixo:
Figura 5. 1: Portas Lógicas
s.
É im
mportante salientar que
q emulaçção é a rep
produção via
v softwarre das funçções de um
m
determinado sistema
a real. Atra
avés do ci rcuito SanUSB, é possível emuular as porrtas lógicass
físicas e a
as diversa
as combina
ações das mesmas com apen
nas uma ffunção bo
ooleana no
o
programa..
[ 74 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
OPER
RAÇÃO
EXPR
RESSÃO B
BOOLEANA
A
EXPR
RESSÃO B
BOOLEANA
A
LITERA
AL
EM C
Operação E (AND)
S= A . B
S= A & B
Operação
o OU (OR))
S= A + B
S= A l B
Operação
o NÃO (NO
O)
S= !A
A
S=
OU exclusivo (XOR))
S= A
B
S= A ^ B
O ccircuito aba
aixo mostra
a as possívveis entrad
das boolea
anas nos p inos B1, B2
B e B3 e a
saída do ccircuito lógiico boolean
no é expreessa de forma real através do LLED no pino
o B7.
Figura
a 5. 2: Us
so de resis
stores de
e pull dow
wn para ap
plicar fun ção lógica
a 0/1.
É im
mportante
e salientar que atraavés das operações
o
E, OU, NÃ
ÃO e OU-básicas E
Exclusivo é possível construir outras opeerações co
omo NAND, NOR e C
Coincidência, que é o
inverso do
o OU-Exclu
usivo. Isto é realizad
do transforrmando a expressãoo booleana
a literal em
m
uma expre
essão boole
eana em C e apresen
ntando o re
esultado em um LED
D de saída.
Figura 5.. 3: Outra
as funçõess lógicas a partir de
d NOT, O
OR e AND.
Exemplo 1: Elaborre um prog
grama paraa emular uma
u
porta lógica OU--Exclusivo através do
o
microcontrrolador.
[ 75 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
--------------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emu
ulação de ccircuitos lóg
gicos boole
eanos (OU -Exclusivo))
short int A
A, B, saida,, ledpisca;
main(){
clock_int_4
4MHz();
while (TRU
UE)
{
A=input(p
pin_b1); //e
entrada com pull-dow
wn externo
o (resistor conectado ao Terra)
B=input(p
pin_b2); //e
entrada com pull-dow
wn externo
o (resistor conectado ao Terra)
A^B; //sa
aida é igual ao resu
ultado do
o OU-Exclu
usivo obttida pelas
s entradas
s
saida = A
dos pinos
sAeB
output_bitt(pin_b7,sa
aida); //O pino_b7 mostra o resultado
o do circuuito lógico
o booleano
o
alocado em
m saida
ledpisca=!!ledpisca; //
/ ledpisca é igual ao
o inverso de ledpisca
output_bitt(pin_b0,le
edpisca); /// b0 recebee o valor de ledpisca
delay_ms((500);
}
}
-------------------------------------------------------------------------------------------------------------------------Exemplo 2: Elabore um programa e a tabela ve
erdade para emular uuma o circcuito lógico
o
abaixo.
booleano a
Fig
gura 5. 4: Exemplo de circuito combin
nacional ((1).
O program
ma para em
mular de fo
orma real eesse circuito é mostra
ado abaixoo:
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h> // Emulação de ciircuitos lóg
gicos booleanos
short int A
A, B, C, said
da, ledpiscca;
main(){
clock_int_4
4MHz();
while (TRU
UE)
{
A=input(p
pin_b1); //e
entrada com pull-dow
wn externo
o (resistor conectado ao Terra)
B=input(p
pin_b2); //e
entrada com pull-dow
wn externo
o (resistor conectado ao Terra)
C=input(p
pin_b3); //e
entrada com pull-dow
wn externo
o (resistor conectadoo ao Terra)
[ 76 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
saida = !(!A & B) & !C; //sa
aida do ciircuito bo
ooleano obtida pela
as entrad
das de b1,,
b2 e b3
output_bitt(pin_b7,sa
aida); //O pino_b7
p
m
mostra o ressultado do circuito lóógico boole
eano
ledpisca=!!ledpisca; //
/ ledpisca é igual ao
o inverso de ledpisca
output_bitt(pin_b0,le
edpisca); /// b0 recebee o valor de ledpisca
delay_ms((500);
}
}
-------------------------------------------------------------------------------------------------------------------------Note que para emular qualque
er outro cirrcuito booleano com três entraadas, basta
a modificar
o em negritto (saida = !(!A & B)) & !C). A ttabela verd
dade desse
e
apenas a ffunção de conversão
circuito bo
ooleano é mostarada
m
abaixo:
RADAS
ENTR
B
0
0
1
1
0
0
1
1
A
0
0
0
0
1
1
1
1
C
0
1
0
1
0
1
0
1
SA
AIDA
S
1
0
0
0
1
0
1
0
Exemplo 3: Elabore um programa e a tabela ve
erdade para emular uuma o circcuito lógico
o
abaixo.
booleano a
S= (A & B)) | !C | !(C & D)
Fig
gura 5. 5: Exemplo de circuito combin
nacional ((2).
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h> // Emulação de ciircuitos lóg
gicos booleanos
short int A
A, B, C, D, saida, ledp
pisca;
main(){
clock_int_4
4MHz();
while (TRU
UE)
[ 77 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
{
A=input(pin_b1); //entrada com pull-down externo (resistor conectado ao Terra)
B=input(pin_b2); //entrada com pull-down externo (resistor conectado ao Terra)
C=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra)
D=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra)
saida= (A & B) | !C | !(C & D);
output_bit(pin_b7,saida); //O pino_b7 mostra o resultado do circuito lógico booleano
ledpisca=!ledpisca; // ledpisca é igual ao inverso de ledpisca
output_bit(pin_b0,ledpisca); // b0 recebe o valor de ledpisca
delay_ms(500);
}
}
-------------------------------------------------------------------------------------------------------------------A tabela verdade deste circuito lógico é mostrada abaixo:
ENTRADAS
A
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
B
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
C
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
D
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
SAIDA
S
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
A tabela verdade pode ser facilmente comprovada de forma real montando o circuito
proposto.
5.3
EMULAÇÃO
SEGMENTOS
DE
DECODIFICADOR
PARA
DISPLAY
DE
7
Antes de comentar sobre os decodificadores, vamos definir o que é um display de
sete segmentos. O display de sete segmentos, é formado por sete leds. Quando necessitase acender o número “0”, liga-se os leds correspondentes ao digito “0”, por exemplo, os
segmentos a, b, c, d, e, f. Na figura abaixo, é mostrado um display de sete-segmentos e a
[ 78 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
respectivo
os pinos. No
N lado direito,
d
os dois tiposs de displlays, anoddo comum
m e catodo
o
Não esqueçça que no anodo com
mum o led liga com Gnd e no catodo comum o led
d
comum. N
liga com V
Vcc.
Figurra 5. 6: Diisplay de 7 segmen
ntos e con
nexão intterna.
Com
mo os seg
gmentos são
s
leds, eentão é necessário
n
limitar a corrente, para isso
o
devemos u
usar um re
esistor em cada segm
mento (catodo comu
um), ou appenas um no comum
m
(anodo co
omum), sen
não serão queimado
os. Normalmente se utilizam reesistores entre 220 e
560 ohms para uma
a fonte de 5Volts. U ma dica, se
s for usarr um displ ay, teste antes
a
cada
a
segmentoss, para te
er certeza que não está usa
ando um display
d
coom algum segmento
o
queimado..
Os decodificad
dores, inve
erso dos co
odificadore
es, tem a função
f
de converter um código
o
“desconhe
ecido” de linguagem
m de máqu
uina, como
o o binário de entrrada mostrrado neste
e
exemplo, em um có
ódigo compreensível,, como o código de
ecimal ou uum desenho em um
m
display de 7 segmen
ntos. Os de
ecodificado
ores fixos podem
p
ser construídoos com porrtas lógicass
reais ou em
mulados, ou
o seja, reproduzidoss via softw
ware, como é o caso pproposto.
Os decodificadores de displays
d
dee 7 segme
entos, com
mo o 9317 (anodo co
omum) e o
9307 (cato
odo comum
m), recebe
em 4 bits de entrada
a para a decodificaç
d
ção do núm
mero a ser
“desenhad
do” pelos segmentos
s
dos displaays.
[ 79 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
CI - 9317
Entradas
/L
T
L
H
H
H
H
H
H
H
H
H
H
H
/RB
I
X
L
H
X
X
X
X
X
X
X
X
X
Saídas
Desen
ho
A0
A1
A2
A3
a
b
c
d
e
f
g
X
L
L
H
L
H
L
H
L
H
L
H
X
L
L
L
H
H
L
L
H
H
L
L
X
L
L
L
L
L
H
H
H
H
L
L
X
L
L
L
L
L
L
L
L
L
H
H
L
H
L
H
L
L
H
L
L
L
L
L
L
H
L
L
L
L
L
H
H
L
L
L
L
H
L
L
H
L
L
L
L
L
L
L
L
H
L
H
L
L
H
L
L
H
L
L
L
H
L
H
L
H
H
H
L
H
L
H
L
H
L
H
H
H
L
L
L
H
L
L
L
H
H
H
L
L
L
L
L
H
L
L
pont
o
H
teste
L
apaga
H
0
H
1
H
2
H
3
H
4
H
5
H
6
H
7
H
8
H
9
Para a emulação, ou seja, reprodução via software, de decodificadores de displays
de sete segmentos, os pinos do microcontrolador devem apresentar os seguintes valores
mostrados na tabela abaixo:
TABELA (Anodo comum – zero no pino acende segmento)
NÚMERO
B6 B5 B4
B3
B2
B1
B0
Porta B
DISPLAY
Hexadeci
g
f
e
d
c
b
a
mal
0
1
0
0
0
0
0
0
0x40
1
1
1
1
1
0
0
1
0x79
2
0
1
0
0
1
0
0
0x24
3
0
1
1
0
0
0
0
0x30
4
0
0
1
1
0
0
1
0x19
5
0
0
1
0
0
1
0
0x12
6
0
0
0
0
0
1
0
0x02
7
1
1
1
1
0
0
0
0x78
8
0
0
0
0
0
0
0
0x00
9
0
0
1
0
0
0
0
0x10
Abaixo é mostrado um programa exemplo para contar de 0 a 9 com um display de
sete segmentos anodo comum. Dependendo dos display anodo ou catodo comum, como
também dos pinos do microcontrolador ligados ao displays, é possível utilizar o mesmo
programa abaixo, alterando apenas os valores dos elementos da matriz setseg[10].
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#byte port_b = 0xf81//Atribuição do nome portb para o registro da porta B localizado na
posição 0xf81 da memória de dados
[ 80 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
int setseg[10] = {0xx40,0x79,0
0x24,0x30,,0x19,0x12
2,0x02,0x7
78,0x00,0x 10}; //Vettor com 10
0
elementoss que desen
nham de 0 a 9
int i; //índ
dice i (pontteiro)
void main ()
{
clock_intt_4MHz();
set_tris_b(0b00000
0000);// De
efine os pin
nos da porrta B como
o saída
while(1)
{
for (i=0
0;i<10;i++
+)
{
port_b
b = setseg[i];
delay_
_ms(500);
}
}
}
---------------------------------------------------------------------------------------------------------------------------Exemplo:: Construa
a um deco
odificador eemulado atarvés
a
de diagramaas de Karn
naugh para
a
escrever, letra por letra,
l
a ca
ada segund
do, a palavra StoP. É importaante salientar que oss
pinos do m
microcontrolador e os
o pinos do
o display em
e anodo comum deevem ser conectados
c
s
com um rresistor de
e 220Ω a 1KΩ
1
para não queim
mar os seg
gmentos ddo display. O circuito
o
abaixo mo
ostra a ligação do display de 7 ssegmentoss.
Figura
a 5. 7: Co
onexão do
o display 7 seg na porta
p
B d o PIC.
[ 81 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Os segmentos ascendem com zero no pino do microcontrolador (anodo comum).
Note que como são somente quatro letras só é necessário duas entradas (Xe Y) para a
decodificação.
Entradas Pin_b0 Pin_b1 Pin_b2 Pin_b3 Pin_b4 Pin_b5 Pin_b6
X
Y
a
b
c
d
e
f
g
0
0
0
1
0
0
1
0
0
0
1
1
1
1
0
0
0
0
1
0
1
1
0
0
0
1
0
1
1
0
0
1
1
0
0
0
S
t
o
P
Após a definição de cada segmento do display para representar os caracteres da palavra, é
feita a simplicação de cada segmento através dos diagramas de Karnaugh abaixo para a
construção da função de emulação do decodificador fixo.
a
/Y
Y
b
/Y
Y
c
/Y
Y
d
/Y
Y
/X
0
1
/X
1
1
/X
0
1
/X
0
0
X
1
0
X
1
0
X
0
1
X
0
1
e
/Y
Y
f
/Y
Y
g
/Y
Y
/X
1
0
/X
0
0
/X
0
0
X
0
0
X
1
0
X
0
0
O programa abaixo mostra as funções de emulação do decodificador fixo para a palavra
StoP obtidas dos diagramas de Karnaugh.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emulação de decodificador para display de 7 segmentos - palavra
StoP
short int X, Y; //Entradas
short int a, b, c, d, e, f, g; //saídas
void decodificador(short int X, short int Y) //Função auxiliar do decodificador fixo para StoP
{
a=X ^ Y; output_bit(pin_b0,a);
//Anodo comum
b=!X | !Y; output_bit(pin_b1,b);
c=Y;
output_bit(pin_b2,c);
d=X & Y; output_bit(pin_b3,d);
e=!X & !Y; output_bit(pin_b4,e);
f=X & !Y; output_bit(pin_b5,f);
g=0 ;
output_bit(pin_b6,g);
}
main(){
[ 82 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
clock_int_4MHz();
while (1)
{
decodificador(0,0); // Insere as entradas X=0 e Y=0 no decodiicador fixo – Saída letra S
delay_ms(1000);
decodificador(0,1); // Saída letra t
delay_ms(1000);
decodificador(1,0); // Saída letra o
delay_ms(1000);
decodificador(1,1); // Saída letra P
delay_ms(1000);
}}
--------------------------------------------------------------------------------------------------------------Exemplo 2: Construa um decodificador emulado para escrever, letra por letra no mesmo
display de 7 segmentos, a cada segundo, a palavra USb2. Como o display é anodo comum
(+5V no anodo do display), os segmentos ascendem com zero no pino do
microcontrolador.
Entradas Pin_b0 Pin_b1 Pin_b2 Pin_b3 Pin_b4 Pin_b5 Pin_b6
X
Y
a
b
c
d
e
f
g
0
0
1
0
0
0
0
0
1
0
1
0
1
0
0
1
0
0
1
0
1
1
0
0
0
0
0
1
1
0
0
1
0
0
1
0
U
S
b
2
Após a definição de cada segmento do display para representar os caracteres da palavra, é
feita a simplicação de cada segmento através dos diagramas de Karnaugh abaixo para a
construção da função de emulação do decodificador fixo.
a
/Y
Y
b
/Y
Y
c
/Y
Y
d
/Y
Y
/X
1
0
/X
0
1
/X
0
0
/X
0
0
X
1
0
X
1
0
X
0
1
X
0
0
e
/Y
Y
f
/Y
Y
g
/Y
Y
/X
0
1
/X
0
0
/X
1
0
X
0
0
X
0
1
X
0
0
[ 83 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
O programa abaixo mostra as funções de emulação do decodificador fixo para a palavra
USb2 obtidas dos diagramas de Karnaugh.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emulação de decodificador para display de 7 segmentos - palavra
Usb2
short int X, Y; //Entradas
short int a, b, c, d, e, f, g; //saídas
void decodificador(short int X, short int Y) //Função auxiliar do decodificador fixo para USb2
{
a=!Y;
output_bit(pin_b0,a); //Anodo comum
b=X^Y;
output_bit(pin_b1,b);
c=X&Y;
output_bit(pin_b2,c);
d=0;
output_bit(pin_b3,d);
e=!X&Y;
output_bit(pin_b4,e);
f=X&Y;
output_bit(pin_b5,f);
g=!X&!Y;
output_bit(pin_b6,g);
}
main(){
clock_int_4MHz();
while (1)
{
decodificador(0,0); // Insere as entradas X=0 e Y=0 no decodiicador fixo – Saída letra S
delay_ms(1000);
decodificador(0,1); // Saída letra t
delay_ms(1000);
decodificador(1,0); // Saída letra o
delay_ms(1000);
decodificador(1,1); // Saída letra P
delay_ms(1000);
}}
--------------------------------------------------------------------------------------------------------------5.4
MULTIPLEXAÇÃO COM DISPLAYS DE 7 SEGMENTOS
Como a economia de consumo e de componentes são sempre fatores importantes a
serem considerados em projetos de sistemas digitais, uma técnica bastante utilizada é a
multiplexação de displays. Esta técnica permite que um só decodificador de displays como
o 9317 (anodo comum), o 9307 (catodo comum) ou apenas sete pinos de um
microcontrolador, que emulam as saídas do decodificador, possam controlar uma série de
displays em paralelo.
Estes são ciclicamente acesos e apagados numa frequência acima de 20Hz de tal
forma que, para o olho humano, todos os displays estejam acesos permanentemente. Para
[ 84 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
isso, são colocados transistores de corte que atuam em sequência sobre cada terminal
comum dos displays em paralelo.
O programa abaixo mostra um exemplo para contar de 0 a 99 multiplexando dois displays
de sete segmentos anodo comum.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#byte port_b = 0xf81//Atribuição do nome portb para o registro da porta B localizado na
posição //0xf81 da memória de dados
int setseg[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //Vetor com 10
//elementos que desenham de 0 a 9
int i, z, dezena, unidade; //índice dezena,unidade (ponteiro)
void main ()
{
clock_int_4MHz();
set_tris_b(0b00000000);// Define os pinos da porta B como saída
while(1)
{
for (i=0;i<99;i++)
{
for(z=0;z<20;z++){
dezena=i/10; //dezena recebe o número inteiro da divisão por 10
unidade=i%10; //unidade recebe o resto da divisão por 10
output_high(pin_a0); //pin_a0 aciona transistor do comum das dezenas
output_low(pin_a1); //pin_a3 aciona transistor do comum das unidades
port_b = setseg[dezena]; //A porta B recebe o desenho do número das dezenas
apontado pela //variável dezena
delay_ms(10);
output_high(pin_a1); //selecionei a unidade
output_low(pin_a0);
port_b = setseg[unidade]; //A porta B recebe o desenho do número das unidades
apontado //pela variável unidade
delay_ms(10);
}}
}
}
[ 85 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figu
ura 5. 811
1: Multiple
exação de
e display 7 segmen
ntos.
---------------------------------------------------------------------------------------------------------------------
COMUNICAÇÃ
ÃO SER
RIAL EIA
A/RS-2
232
A comu
unicação serial
s
teve início com
m a invenção do telé
égrafo. Deppois teve um
u grande
e
desenvolviimento com a invenção do Teeletype (te
eletipo) pelo Francêss Jean Mau
urice Émile
e
Baudot, em
m 1871, da
aí o nome Baud Rate
te. Baudot, além de criar
c
toda a mecânica
a e elétrica
a
do Teletyype, criou também uma tabeela de códigos (Código de B
Baudot) com letras,
números, e símbolo
os para a transferên
ncia serial assíncron
na digital dde informações. Da
aí
adrão de comunicaçã
c
ão RS-232,, que significa Padrão
ão Recomen
endado verssão 232.
surgiu o Pa
Na tra
ansmissão dos caraccteres atraavés da linha teleg
gráfica, o sinal de Marca era
a
representa
ado pela presença
p
de
e corrente elétrica, e o Espaço
o pela ausêência desta
a corrente.
Para que o Teletype
e conseguissse disting uir o início
o e o final de um carractere, o mesmo
m
era
a
precedido com um sinal
s
Espaçço (start b
bit) e finalizado com um sinal de Marca (stop bit).
que o estado da linh
ha ociosa ((sem transsmissão de
e dados) eera o sinal de Marca
a
Entenda q
(presença de corren
nte elétrica
a). Foi basseado nessse sistema que o paadrão de trransmissão
o
RS-232 evvoluiu e se
e tornou um
m padrão muito utiliizado nos computadoores e equ
uipamentoss
digitais.
Algu
umas
in
nterfaces
EIA/RS-2
232
noss
compu
utadores
atuais
fornecem
m
aproximad
damente -1
10v e +10v
v, mas sup
portam mín
nimas de -2
25v e máxiimas de +2
25v.
A Comuniicação serial é feita
a pela tran
nsmissão de bits em
m seqüênccia. É um
m modo de
e
comunicaçção muito recomenda
r
ado para trransmissão
o de dadoss a longa ddistância. Nesse
N
caso,
a comunicação serrial aprese
enta um menor cu
usto pelo número reduzido de fios e
conseqüen
ntemente menor
m
velo
ocidade em
m relação à comunica
ação paraleela.
[ 86 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Para
a a transm
missão de dados
d
por d
distâncias maiores e com poucca interferê
ência pode-se utilizarr uma inte
erface com
m outros p
c
o EIIA/RS-232 e o EIA//RS-485. A
padrões como
comunicaçção serial pode
p
ser síncrona
s
ou
u assíncrona. Na primeira, alé m dos bitss de dadoss
são envia
ados tamb
bém bits de sincro
onismo, ou
u seja, o receptor fica em constante
e
sincronism
mo com o Transmisso
T
or. Na com
municação assíncrona
a, que é o modo ma
ais utilizado
o
de comun
nicação entre
e
siste
emas de controle e automa
ação por não necessitar de
e
sincronism
mo, existe um bit que
e indica o início da transmissã
ão, chamaddo de starrt bit (níve
el
lógico baix
ixo) e um bit
b que ind
dica o finall da transm
missão cha
amado de stop bit (nível
(n
lógico
o
alto). Nesssa transmiissão, o Re
eceptor em
m sincronissmo com o Transmisssor apena
as no início
o
da transm
missão de dados.
d
Dev
ve-se consiiderar que
e o transmiissor e o rreceptor de
evem estar
na mesma
a velocidad
de de transsmissão.
Qua
ando o canal serial está em rrepouso, o sinal corrresponden te no canal tem um
m
nível lógico
o ‘1’. Um pacote
p
de dados sem
mpre começça com um
m nível lógiico ‘0’ (start bit) para
a
sinalizar a
ao recepttor que um
u
transm
missão foii iniciada. O “startt bit” iniccializa um
m
temporizad
dor interno
o no recep
ptor avisan
ndo que a transmissã
ão. Seguiddo do startt bit, 8 bitss
de dados d
de mensag
gem são en
nviados co
om a velocidade de trransmissãoo pré-programada no
o
emissor e no recepttor. O paco
ote é conccluído com
m os bits de paridadee e de parrada (“stop
p
bit”).
O b
bit de pariidade é ussado como
o nono bitt com o propósito dde detecçã
ão de erro.
Nessa con
nvenção, quando o número
n
tottal de dígittos ‘1’ , o valor do bbit de parid
dade é 1 e
quando for ímpar é 0.
0
do em com
municação
o serial.
Figura 6. 1: Dad
A interrupçã
ão do canal seria
al é utiliz
zada quan
ndo se e
espera rec
eceber um
m
e
sse executa outro pro
ograma. Quuando o da
ado chega,
dado em tempo aleatório enquanto
o start bit (nível lógico baix
xo) acionaa a interrupção, pre
eviamentee habilitada
a, onde a
e
recepção da comunicação serrial é execcutada. Caso o canal serial seeja utilizado somente
para transsmissão de dados, nã
ão é necesssário habiliitar a interrupção serrial.
[ 87 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
6.1
C
CÓDIGO
ASCII
A
Um dos fo
ormatos mais utilizad
dos em com
municação serial, com
mo no paddrão EIA/R
RS-232, é o
ASCII (Am
merican Sta
andard Cod
de for Info rmation In
nterchange
e). Este forrmato utilizza sete bitss
de cada byyte (valor máximo
m
0x
x7F) e o oi tavo bit de
e paridade que pode ou não ser utilizado..
Se o núme
ero de “1s”” for par, o bit de paaridade X7 é zero e, se
s for ímpaar, X7 é um
m. A Tabela
a
de Caracte
eres ASCII é mostrad
da abaixo:
Figura 6. 2
2: Caracte
eres ASCI
II.
6.2
I
INTERFAC
CE USART
T DO MIC
CROCONTROLADOR
R
A in
nterface se
erial USART
T (transmiissor-recep
ptor univerrsal síncronno e assíncrono) doss
microcontrroladores pode ser síncrona o
ou assíncro
ona, sendo
o esta últiima a mais utilizada
a
para comu
unicação com o mun
ndo extern o utilizand
do o padrão EIA/RS-2232, onde cada byte
e
serial é prrecedido por
p um sta
art-bit de n
nível lógico
o baixo e encerradoo por um stop-bit
s
de
e
nível lógicco alto. Oss conectorres utilizad
dos são o DB9 e o DB25, coomo mostrra a figura
a
abaixo:
[ 88 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Fig
gura 6. 3 : Conecto
ores USAR
RT.
Em suma, os
o pinos utilizados na comu
unicação serial
s
enttre compu
utadores e
microcontrroladores são
s o TXD,, o RXD e o Terra (GND).
On
nível lógico alto no pa
adrão RS23
32 está enttre –3 e –25V
–
e o nnível lógico baixo está
á
entre +3 e +25V. Para a co
omunicação
o entre um
m PC e um
m PIC são utilizados chips que
e
convertem
m os níveis de tensão TTL/RS23
32.
Figura 6. 4: Sinal eléttrico RS-2
232.
Par converter os padrõe
es TTL/RS2
232, o chip
p mais utilizzado é o M
MAX232, o qual utiliza
a
quatro invversores pa
ara convertter entre –
–10V (RS23
32) em +5V
V (TTL), e entre +10
0V (RS232))
em 0V (TT
TL). Compu
utadores apresentam
m cerca de –10V e +1
10V, mas ssuportam mínimas
m
de
e
-25v e m
máximas de +25v. Assim
A
Com
mo o MAX
X232 existem outroos converssores, tipo
o
ICL3232, e
etc. O esqu
uema de lig
gação do M
MAX232 é mostrado a seguir:
[ 89 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 6. 5: Circuito de conexão MAX 232.
6.3
COMUNICAÇÃO SERIAL EIA/RS-485
No padrão EIA/RS-232, os sinais são representados por níveis de tensão referentes ao
Gnd. Há um fio para transmissão, outro para recepção e o fio terra para referência dos
níveis de tensão. Este tipo de interface é útil em comunicações ponto-a-ponto e baixas
velocidades de transmissão. Visto a necessidade de um terra comum entre os dispositivos,
há limitações do comprimento do cabo a apenas algumas dezenas de metros. Os principais
problemas são a interferência e a resistência do cabo. Mais detalhes, bem como um projeto
sobre diagnóstico microcontrolado de transceptor no padrão EIA/RS-485 podem ser
conferidos no livro disponível no link: https://www.agbook.com.br/book/140210-Diagnostico_microcontrolado_de_transceptor_no_padrao_EIARS485 .
6.4 APLICAÇÃO DE COMUNICAÇÃO SERIAL VIA BLUETOOTH OU ZIGBEE
Para a comunicação entre os modem bluetooth ou Zigbee, com um aplicativo serial
instalado no PC ou em algum dispositivo móvel com Android, basta gravar o firmware
abaixo no microcontrolador. Quando o microcontrolador recebe L, liga o led e comunica,
quando recebe D desliga e comunica e quando recebe P, pisca em alta frequência. Mais
detalhes
podem
ser
vistos
no
vídeo
com
link
descrito
abaixo:
http://www.youtube.com/watch?v=aTe7G__9_us .
ACIONAMENTO DE MOTORES MICROCONTROLADOS
Os motores mais utilizados com sistemas microcontrolados são os motores CC ,
motores de passo e servo-motores.
[ 90 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
ACIONAM
MENTO DE
D MOTOR
RES CC DE
E BAIXA TENSÃO
T
Os motorees CC são abundantees no me
ercado em
m função dda ampla gama de
e
üentementte, existeem em várias dimensões,
d
utilização, conseqü
, tensões, pesos,
característticas e são fáceis de
d encontrrar em su
ucatas com
mo video-ccassete, brinquedos
b
,
impressora
as, etc. e geralmente
g
e vêm asso
ociados a uma
u
caixa de engrennagem parra aumento
o
do torque e redução
o de velocid
dade.
Figura 7
7. 4: Moto
ores CC.
MOTORES
S ELÉTRIC
COS UTIL
LIZADOS EM AUTO
OMÓVEIS
Os motores utilizados em automó
óveis são to
odos com tensão nom
minal a 12
2 volts, são
o
robustos e normalm
mente projjetados paara condiçções extremas, tais como poe
eira, calor,
variações de tensão e corrente
e, entre ou
utros. Algu
umas opçõe
es são ideaais para ap
plicação no
o
mpactos, fortes, altaa rotação e leves, allém de seerem muito
o fáceis de
e
robô por sserem com
conseguir em oficina
as e empresas do raamo. Os motores
m
ma
ais usadoss em proje
etos são de
e
p
bom
mba do li mpador de
d para-brisa e de gasolina, bomba de
e
trava-elétrrica das portas,
motor doo ventilado
combustívvel, motor do vidro-elétrico, m
motor da ventoínha,
v
or interno,
limpador d
de para-briisa dianteirro e traseirro, bomba hidráulica do freio A
ABS.
[ 91 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 7. 5: Motorr CC com caixa de redução.
Além
m do acio
onamento elétrico, o
es CC de baixa pottência utilizados em
m
os motore
automação
o e robótica, apre
esentam g
geralmente
e uma ca
aixa de reedução, que
q
é um
m
equipamen
nto compo
osto por en
ngrenagenss, com o in
ntuito de reduzir
r
a vvelocidade de rotação
o
do eixo (o
ou angularr) e aumen
ntar o torq
que do mo
otor. O torrque varia em funçã
ão da força
a
aplicada ((F) e do raio
r
de giiro (nas eengrenagen
ns é a metade do diâmetro primitivo),
segundo a equação T = F.r.
Sen
ndo:
F = força (em
m Newtons)), r = raio de giro (em
m metros) e T = torqque (em N.m).
Figura 7. 6: R
Relação de
e transmissão.
m
imprime umaa força co
onstante, a variaçãão do torrque entre
e
Já que o motor
ens ocorre devido ao
o raio de giro. Na prática
p
em um sistem
ma de eng
grenagens,
engrenage
comprovad
da pelas eq
quações abaixo, quaanto maior o diâmetro
o da engreenagem movida (D2),
maior o to
orque (T2) proporcio
onal e men
nor a velo
ocidade de rotação ((n2). Considerando a
engrenage
em 1 com motora
m
e a engrenag
gem 2 com
mo movida, tem-se:
Fconst -> T1/r1 = T2/r2 ->
> T1/D1 = T2/D2
T2 . D1 = T1 .D2
n2 . D2 = n1. d1
[ 92 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
COROA E O PARA
AFUSO CO
OM ROSCA
A SEM-FIM
M
A co
oroa e o pa
arafuso com rosca seem-fim com
mpõem um
m sistema dde transmissão muito
o
utilizado p
principalme
ente nos ca
asos em q ue é necessária elev
vada reduçção de velo
ocidade ou
u
um elevad
do aumento
o de força,, como no
os redutore
es de velocidade.
Figura
F
7. 7
7: Coroa e sem-fim
m.
On
número de entradas do
d parafusso tem influ
uência no sistema dee transmisssão. Se um
m
parafuso ccom rosca sem-fim tem apenaas uma en
ntrada (ma
ais comum
m) e está acoplado
a
a
uma coroa
a de 60 dentes, em cada voltta dada no
o parafuso
o a coroa vai girar apenas
a
um
m
dente. Com
mo a coroa
a tem 60 dentes,
d
serrá necessá
ário dar 60 voltas no parafuso para que a
coroa gire uma volta
a. Assim, a rpm da ccoroa é 60 vezes men
nor que a do parafusso. Se, por
exemplo, o parafuso
o com roscca sem-fim
m está girando a 1.80
00 rpm, a coroa gira
ará a 1.800
0
rpm, divididas por 60
0, que resu
ultará em 3
30 rpm.
Sup
ponhamos, agora, qu
ue o paraffuso com rosca sem
m-fim tenhaa duas entradas e a
coroa tenh
ha 60 denttes. Assim,, a cada vo
olta dada no parafusso com rossca sem-fim, a coroa
a
girará doiss dentes. Portanto,
P
será
s
necesssário dar 30 voltas no parafu so para qu
ue a coroa
a
gire uma vvolta.
Assim, a rrpm da corroa é 30 vezes
v
meno
or que a rpm
r
do parafuso com
m rosca se
em-fim. Se,
por exemp
plo, o para
afuso com
m rosca sem
m-fim está
á girando a 1.800 rppm, a coro
oa girará a
1.800 divid
didas por 30, que re
esultará em
m 60 rpm. A rpm da
a coroa podde ser exp
pressa pela
a
equação:
i=N
Nc . Zc =Np. Zp
Ncc=Np. Zp /Zc
/
de:
ond
Nc = número de rotaçõe
es da coroaa (rpm)
Zc = número de dentes da coroa
Np = número de rotações do paraafuso com rosca sem-fim (rpm))
Zp=
= número de
d entrada
as do paraffuso
As p
possibilidad
des mais comuns
c
de controle digital
d
de motores
m
CC
C são:
[ 93 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
CHAVEAM
MENTO DE
E MOTOR
RES CC CO
OM TRANS
SISTORES
S MOSFET
T
Os ttransistore
es de efeito
o de campo
o MOSFET
T executam
m o chavea mento porr tensão na
a
base e po
odem ser utilizados no lugar dos transistores Da
arlington ppara aciona
amento de
e
dispositivo
os de média potência
a, devido p
principalme
ente à men
nor queda de tensão e à menor
dissipação
o em forma
a de calor.
Os MOSFETs apresentam
m alta taxaa de velocidade no chaveamen
c
nto e uma resistência
a
uito baixa (décimos de
d ohms). Deesa form
ma, a qued
da de tenssão nesse transistor
t
é
interna mu
muito baixxa, o que não acon
ntece com transistorres Darling
gton. A fguura abaixo
o mostra a
configuraçção dos pin
nos de um MOSFET, onde o pin
no 1 é o Gate
G
(base)), o pinos 2 é o Drain
n
e o pino 3 é o Sourcce.
Figura
F
7. 8
8: Mosfett – IRF540
0.
Om
modelo IRF
F540 suporrta tensõess de chaveamento en
ntre o drain
in e o sourc
rce de 100V
V
e corrente
e de até 22
2A. A figura
a abaixo m
mostra o cirrcuito com MOSFET ppara acionamento de
e
quatro mo
otores com
m MOSFETss. A etapa de potênccia é comp
posta peloss MOSFETss IRF530 e
diodos de roda lvre para prote
eção de teensão reverrsa. O func
cionamentto é simple
es. Quando
o
o microcontrolador coloca na saída dass portas de
e controle um ‘1’ lóógico, os transistores
t
s
MOSFET e
entram em
m conduçã
ão e uma tensão de
d 12V é aplicada ssobre as cargas.
c
Oss
resistores e LEDs se
ervem som
mente paraa visualiza
ação do ch
haveamentto. Note que
q
o pino
o
Source do
o MOSFET
T é conecttado ao G
Gnd do miicrocontrolador paraa gerar a tensão de
e
chaveamento no gatte (VG).
namento d
de um mottor CC de 3V
3 utilizaddo em robó
ótica móve
el
A figura abaixo mosstra o acion
através de
e um mosfe
et IRF540.
[ 94 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 7. 9:
9 Acionam
mento de
e motor co
om Mosfe
et.
EXEMPLO
O: SEGUID
DOR ÓTIC
CO DE LAB
BIRINTO
Neste caso
o é interesssante deffinir que no
o princípio
o seguidor de paredee o robô considera
c
o
obstáculo como refe
erência a qual
q
ele vaai seguir em
e movime
ento de avvanço norm
mal. Nesse
e
exemplo e
ele “cola” do
d lado esquerdo, ou
u seja, o motor
m
direiito deve seer mais rápido que o
motor esquerdo, qua
ando os do
ois estivereem acionad
dos.
Seguindo a
as paredess do labirin
nto até finaal encontra
am-se quattro situaçõees:
Fig
gura 7. 10
0: Situaçõ
ões encon
ntradas em
m labirinttos.
É importan
nte salienttar que no
o princípio de seguirr o obstácu
ulo, o robôô não pode tocar no
o
outro lado
o, em verm
melho, poiss ele podee tomá-lo como
c
referrência e vooltar, o qu
ue fará sair
por onde e
entrou. Ma
ais detalhess: http://w
www.youtu
ube.com/w
watch?v=QR
RDrG2iEFp
pM .
O CONTRO
OLE DE M
MOVIMENT
TO
ESTABILIIDADE DO
Para
a garantir estabilidade do con
ntrole de movimento
m
, ou seja, garantir que
q
o robô
ô
está seguindo correttamente a referênciaa (o obstácculo), o sen
nsor ótico lateral (L), com sina
al
[ 95 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
analógico, deve ser lido freque
entementee e estar com valoress que garaantam a prresença do
o
obstáculo.
Casso seja acu
usada a au
usência de obstáculo, o microcontroladorr deve parar o motor
esquerdo e acionar o motor direito, um
m determin
nado temp
po, suficie nte para garantir
g
ass
situações 3 e 4. Notte que o tempo
t
de 4 é maior que o de 3, mas coom o temp
po de 4 na
a
situação 3
3, o robô va
ai ser segu
uro pelo ob
bstáculo atté acabar o tempo dee desvio e seguir em
m
frente até encontrar obstáculo frontal ou
u lateral.
Casso o sen
nsor frontal verifiq
que obsttáculo, mostrado nna situaçção 2, o
microcontrrolador para o moto
or direito, aciona o motor esq
querdo e ssegue em frente até
é
encontrar obstáculo lateral, o que garaante a esta
abilidade do
d movimeento. Note
e que se o
a for pouco
o, o guia o
oval frontall do robô conduzirá
c
o robô à estabilidade
e
e
desvio parra a direita
ao tocar no obstáculo com o av
vanço fron
ntal. O circu
uito é mosstrado abaiixo:
Figura 7.
7 11: Uso
o de senso
ores ótico
os para co
ontrolar m
motores.
Programa::
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h> //Leiturra de tensãão em mV com variaç
ção de um potenciôm
metro
#define essquerdo pin_b6
#define diireito pin_
_b5
int32 ten
nsaofrente,, tensaola
ateral, ap
proximacao
o=4790; //int32
/
deevido aoss cálculoss
intermediá
ários
short int le
edpisca;
unsigned iint flagnao
osensor=0, flagfrentee=0, flaggiro=1;
main() {
clock_int_4
4MHz();
[ 96 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
setup_adc_ports(AN0_TO_AN1); //Habilita entrada analógica - A0
setup_adc(ADC_CLOCK_INTERNAL);
while(1){
output_high(esquerdo);output_high(direito); //Os dois motores em frente
//************************************************************************
*****
set_adc_channel(1);
delay_ms(10);
tensaolateral= (5000*(int32)read_adc())/1023;
if (tensaolateral<=4790) { flagnaosensor=0; flagfrente=0; flaggiro=0; }
// Estabilizou, Habilita o giro e a virada de //frente para a direita
//************************************************************************
*****
if (flagnaosensor>=3 && flaggiro==0) {flagnaosensor=0; flaggiro=1;
// Sem barreira (flagnaosensor>=3) gire 170 ///graus
output_low(esquerdo);output_low(direito); output_high(pin_b7);delay_ms(500);//pára
output_low(esquerdo);output_high(direito); output_low(pin_b7);delay_ms(2000); //só gira
de //novo se tiver //estabilizado na lateral (flaggiro==0)
output_high(esquerdo);output_high(direito); // Segue em frente
while (tensaofrente>4790 && tensaolateral>4790)
//Espera até encontrar barreira frontal ou //lateral
{set_adc_channel(0);
delay_ms(10);
tensaofrente= (5000*(int32)read_adc())/1023;
set_adc_channel(1);
delay_ms(10);
tensaolateral= (5000*(int32)read_adc())/1023;
}}
//************************************************************************
*****
//ANALÓGICO
DIGITAL(10 bits)
set_adc_channel(0);
// 5000 mV
1023
delay_ms(10);
// tensao
read_adc()
tensaofrente= (5000*(int32)read_adc())/1023;
//************************************************************************
*****
if (tensaofrente<=4790 && flagfrente==0) { flagnaosensor=0; flagfrente=1; //encontrou
barreira frontal
output_low(direito);delay_ms(500);//vira para a direita
output_high(esquerdo);output_high(direito); // Segue em frente até estabilizar
while (tensaolateral>4790) //Espera até estabilizar a lateral
{set_adc_channel(1);
//Colado no canto frontal e lateral também estabiliza
delay_ms(10);
tensaolateral= (5000*(int32)read_adc())/1023;
[ 97 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
}}
osensor;
++flagnao
output_hig
gh(esquerd
do);output_
_high(dire ito); //Os dois moto
ores em freente
ledpisca=!!ledpisca;
output_bitt(pin_b7,le
edpisca);
delay_ms((20);
}}
--------------------------------------------------------------------------------------------------------------------O fluxogra
ama do pro
ograma do microconttrolador é mostrado
m
abaixo:
a
Figurra 7. 12: Fluxogram
F
ma de fun
ncionamen
nto de rob
bô móvel com sens
sores.
[ 98 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
PONTE H
O acio
onamento da ponte H permite o movime
ento do mo
otor nos doois sentido
os. A ponte
e
H pode se
er feita com transisttores MOSFFETs, maiss aconselh
hável deviddo a baixa
a queda de
e
ou
de
tensão,
potência
a
Darllin
ngton
TIIP
ou
BD.
Maais
deta
alhes
em
m
outube.com
m/watch?v=6IIH02db
bboE .
://www.yo
Fig
gura 7. 13
3: Motor em
e Ponte
e H.
--------------------------------------------------------------------------------------------------------------------DRIVER P
PONTE H L293D
Uma das solu
uções maiis simples e barata em atuaç
ção de ro bôs móvéis consiste
e
utilizar um
m integrado
o motor driver
dr
como
o o L293D. Este inte
egrado posssibilita o controle
c
de
e
dois motorres CC, utilizando quatro pinos de saída do
d microco
ontrolador.
O circuito inte
egrado L293D deve ter duas alimentaçõe
es. Uma paara comando (5V) no
o
pino 16 e outra para potência
a (por exem
mplo 9,6 V ou 5V) no
o pino 8. O
Os motoress percebem
m
uma queda de 0,7V em relação
o à tensão da fonte externa.
e
As e
entradas nos
n pinos 2 e 7 são para acion
nar o moto
or A e entrradas nos pinos 10 e
15 são para acionar o motor B.
B O pino 8 é conecttado à fontte de alimeentação do
os motoress
que tem o mesmo Gnd
G do circuito de con
ntrole.
Figura 7. 14 : CI Ponte
e H – L29
93D.
[ 99 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Am
mudança do
os sinais nos
n pinos d
de entrada
a tem o efe
eito de prooduzir a alteração do
o
sentido da
a corrente no enrola
amento do motor, lo
ogo do seu
u sentido dde rotação
o. A Tabela
a
permite prrogramar o movimen
nto em quaalquer direçção (conjugando 2 m
motores).
Se a primeira entrada alta,
a
segun
nda entrada baixa , então
e
om
motor se de
esloca para
a
frente, se a primeira
a entrada baixa
b
e a ssegunda entrada alta
a , o moto r se movim
menta para
a
trás. Se am
mbas as en
ntradas baixas ou alttas, o motor pára.
SOLENÓIIDES E RE
ELÉS
Uma solenóid
de consiste
e num êmb
bolo de fe
erro coloca
ado no inteerior de uma bobina
a
a) elétrica,, enrolada em torno
o de um tu
ubo. Quand
do se alim enta eletriicamente a
(indutância
bobina, crria-se um campo ma
agnético q ue atrai o êmbolo (núcleo
(
móóvel) para dentro da
a
bobina como é mosstrado na figura
f
aba ixo. No caso
c
de um
m relé, feccha um co
ontato para
a
circulação de outro nivel
n
maiorr de corren
nte.
Figura 7
7. 15: Sollenóide.
Os relés são dispositivo
os comutaadores elettromecânic
cos (Figuraa 2.14). A estrutura
a
simplificad
da de um relé é mo
ostrada naa figura ab
baixo e a partir delaa é expliccado o seu
u
princípio d
de funciona
amento.
[ 100 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figurra 7. 16: Relés.
R
O ccontrole de uma so
olenóide o
ou relé po
ode ser feito pelo cchaveamen
nto de um
m
transistor Darlington
n ou de um
m MOSFET mostrado abaixo.
a
nterruptor acionado eletricame
ente que ppermite o isolamento
o
O rrelé é um tipo de in
elétrico de
e dois circu
uitos. O re
elé é formaado por um
m eletroím
mã (uma boobina enro
olada sobre
e
um núcle
eo de ma
aterial ferrromagnéticco) que quando acionado,
a
através da
d atração
o
eletromagnética, feccha os con
ntatos de u
um interru
uptor. Norm
malmente o interrup
ptor de um
m
relé tem d
duas posiçções, com isso existeem dois tipos, os NF(normalm
mente fechado) e NA
A
(normalme
ente aberto
o), como mostra
m
a fiigura abaix
xo. A bobina do relé é acionad
da por uma
a
tensão con
ntínua que
e é especificada de accordo com o fabrican
nte, bobinaas de 5, 12
2 e 24 Voltss
são as mais comuns.
Figura 7.
7 17: Acio
onamento
o de moto
or 12V com
m relé bo
obina 5V.
[ 101 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Uma das cara
acterísticass do relé é que ele pode
p
ser en
nergizado com corre
entes muito
o
ão à corrente que o circuito
o controlad
do exige ppara funciionar. Isso
o
pequenas em relaçã
significa a possibilida
ade de con
ntrolar circ uitos de alltas correntes como motores, lâmpadas e
ente a part ir de micro
ocontrolado
ores.
máquinas industriaiss, diretame
Figu
ura 7. 18 Aplicação
o de um relé.
r
DE POTÊN
NCIA ULN
N2803
DRIVER D
Um driver de potência é utilizado sempre quando se necessita
n
aacionar um
m hardware
e
especifico de maior potência.
p
Esse
E
driverr pode ser usado parra controla r motores de passos,
solenóidess, relés, motores
m
CC
C e várioss outros dispositivos
d
s. Ele conttém intern
namente 8
transistore
es Darlingtton NPN de potênciaa, oito resiistores de base de 22K7 e oito diodos de
e
roda livre
e, para de
escarregar no Vcc (pino 10)) a corren
nte reverssa da força contra-eletromotrriz gerada no chaveamento doss transistorres, proteg
gendo os m
mesmos.
Qua
ando o miccrocontrola
ador colocaa +5V (níve
el lógico 1)) no pino 1 do driverr ULN2803,
ele conectta o pino 18
1 do outro
o lado, ond
de está liga
a um pólo do motor,, ao Gnd (n
nível lógico
o
0, por isso
o a simbolo
ogia de porta inverso
ora na figu
ura abaixo). Como o outro lado
o da bobina
a
(o comum
m) ou do motor
m
deve
e estar ligaado ao Vccc da fonte de até 300V, esse co
omando irá
á
energizar a bobina ou
o o motor.
Figura 7
7. 19: ULN 2803.
[ 102 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
PONTE H COM MIC
CRORELÉ
ÉS
Como
o foi visto,, acioname
ento da p onte H pe
ermite o movimento
m
o do moto
or nos doiss
sentidos. A ponte H pode ser feita
f
tamb ém com apenas doiss microreléés. Neste caso,
c
pode-se utilizar também o driver ULN2803 para a en
nergização das bobinnas, pois já contém
m
b
e oito diodos dee roda livre
e. Esse tipo
o
internamente oito transistores com resisttores de base
de ponte H, mostrrada na figura
f
abaaixo, não causa qu
ueda de ttensão na fonte de
e
ão do mottor, porqu
ue as fonttes de ene
ergização da bobinaa do micro
orelé e de
e
alimentaçã
alimentaçã
ão do moto
or devem ser
s diferen
ntes, ou se
eja, isolada
as uma da outra, parra que seja
a
possível o chaveame
ento do relé
é.
Figura
a 7. 20: Acionamen
A
nto de mo
otor nos 2 sentidos
s com relé
és em Po
onte H.
Notte que iniccialmente os
o dois reelés estão conectado
os ao V-Mootor. Ao energizar
e
a
bobina do relé da essquerda, conectando
o o V+Moto
or, a corre
ente da fonnte passa pelo motor
no sentido
o da esque
erda para a direita o que deterrmina o se
entido de rrotação do motor. Ao
o
desligar o relé da essquerda e acionar o relé da direita ocorrre o sentiddo de rotaçção inverso
o
do motor.
Qua
ando se uttiliza moto
or CC em p
ponte H para atuado
ores robótticos, como
o rodas de
e
veículos o
ou braços mecânicoss, o que deetermina o torque e a velociddade do attuador é a
relação de
e transmisssão da caix
xa de engreenagens co
onectada ao
a motor.
ACIONAM
MENTO DE
E MOTOR
RES DE PA
ASSO
Mottores de pa
assos são dispositivo
d
s mecânico
os eletromagnéticos que podem
m ser
controlado
os digitalmente.
[ 103 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
A crrescente popularidad
de dos mottores de pa
asso se dev
ve à total aadaptação desses
dispositivo
os à lógica digital. São encontraados não só em aparelhos ondee a precisã
ão é um
fator muito
o importan
nte como im
mpressorass, plotters,, scanners,, drivers dee disquetes, discos
rígidos, ma
as também
m, como intterface enttre CPUs e movimen
nto mecâniico, constittuindo, em
m
suma, a ch
have para a Robótica
a.
MOTORES
S DE PASSO UNIPO
OLARES
Os motores de
d passo unipolaress são facilmente reconhecidoss pela derivação ao
o
centro dass bobinas. O motor de
d passo teem 4 fasess porque o número dde fases é duas
d
vezess
o número
o de bobin
nas, uma vez que cada bobiina se enc
contra divvidida em duas pela
a
derivação ao centro das bobina
as (comum
m).
Norrmalmente, a derivaçção centraal das bob
binas está ligada ao terminal positivo
p
da
a
fonte de a
alimentaçã
ão (Vcc) e os termin
nais de cad
da bobina são ligadoos alternad
damente à
terra atravvés de chavveamento eletrônico produzind
do movimento.
As b
bobinas se
e localizam
m no estato
or e o roto
or é um im
mã permaneente com 6 pólos ao
o
longo da ccircunferên
ncia. Para que
q haja u
uma maior resolução angular, o rotor dev
verá conter
mais póloss.
Figura
a 7. 21: M
Motor de passo
p
unipolar.
Os motores de passo un
nipolares m
mais encon
ntrados possuem 5 oou 6 fios. Os
O motoress
s comuns (derivaçã
ão centra
al). Para o
de passo unipolaress de 6 fioss possuem dois fios
acionamen
nto do motor
m
de passo,
p
esttes fio co
omuns devem ser ligados à fonte de
e
alimentaçã
ão (+5V ou
u +12V) e os termin
nais da bob
bina ligado
os ao contrrole de cha
aveamento
o
do motor d
de passo.
M
Motor
de 5 fios
Motor de 6 fioss
[ 104 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 7. 22: Mo
otores de passo un
nipolar – conexão
c
iinterna.
Para
a descobrir os termin
nais de um
m motor de passo, deve-se conssiderar que
e:
Para moto
ores de 6 fios,
f
a resistência en
ntre os fioss comuns (Fio
(
1 e Fioo 2) é infinita por se
e
tratarem d
de bobinas diferentess.
A re
esistência entre o fio
o comum ((Fio 1) e o terminal de uma boobina é a metade da
a
resistência
a entre dois terminaiss desta bob
bina.
Para
a encontra
ar a seqüên
ncia corretta dos fios para chav
veamento ddas bobina
as, pode-se
e
ligar manu
ualmente o fio comum ao Vcc,, e de form
ma alternad
da e seqüeencial, o GND
G
(terra))
da fonte a
aos termina
ais das bob
binas, verifficando o movimento
m
do motor de passo.
MODOS D
DE OPERA
AÇÃO DE UM
U MOTO
OR DE PAS
SSO UNIP
POLAR
1
(FUL
PAS
SSO
COMPL
LETO
LL-STEP)
-So
omente m
meia bobiina é ene
ergizada a cada passo
p
a
parrtir
do
comum;
-Menor
torque;
-Pou
uco
consu
umo
de
energia.
Nº do
passo
1-->
2-->
3-->
4-->
1a
a 2a 1b 2b
2 Decima
al
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
8
4
2
1
SSO
COMPLET
TO
2
(FU
ULL-STEP
PAS
2)
-Du
uas meia
a-bobinas são ene
ergizadass a cada
a passo;
-Maior
torque;
-Con
nsome m
mais energia que o Passso comp
pleto 1.
Nº do
1a
a 2a 1b 2b
2 Decima
al
passo
1--> 1 1 0 0
8
2--> 0 1 1 0
4
3--> 0 0 1 1
2
4--> 1 0 0 1
1
Figurra 7. 23: Caracterís
C
sticas e Ló
ógica de acioname
a
ento de m
motor de passo.
p
[ 105 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
ACIONAMENTO BIDIRECIONAL DE DOIS MOTORES DE PASSO
Como o driver de potência ULN2803 ou ULN2804 possui internamente 8 transistores
de potência ele é capaz de manipular dois motores de passo ao mesmo tempo. Ele contém
internamente oito diodos de roda livre e oito resistores de base dos transistores, o que
possibilita a ligação direta ao microcontrolador e aos motores de passo.
Figura 7. 24: Conexão do motor de passo no PIC.
A bateria para motores de passo deve ter uma corrente suficiente para energizar as
bobinas do motor de passo. Dessa forma, é possível associar baterias 9V em paralelo para
aumentar a corrente de energização ou utilizar baterias de No-Breaks. O link abaixo mostra
esse
motor
utilizando
a
ferramenta
SanUSB
http://www.youtube.com/watch?v=vaegfA65Hn8.
SERVO-MOTORES
Há dois tipos de servos: os de posição, com giro de 180º, e o de rotação, que possui
o giro contínuo. O Servo de Posição é utilizado em antenas parabólicas, em braços
robóticos, na robótica móvel terrestre com o controle de pernas mecânicas e no controle de
câmeras. O Servo de Rotação é prioritariamente escolhido para a locomoção por rodas.
Trata-se de dispositivos muito precisos que giram sempre o mesmo ângulo para um
dado sinal. Um servo típico possui três fios de ligação, normalmente preto, vermelho e
branco (ou amarelo). O condutor preto é a referência de massa da alimentação (0 volts), o
condutor vermelho é a alimentação e o condutor branco (ou amarelo) é o sinal de
posicionamento, como é mostrado na figura abaixo que é um carro para desvio de
obstáculos, acionado por dois servo-motores de rotação. O sinal do servo-motor de posição
é normalmente um pulso de 1 a 2 milisegundos (ms), repetido depois de um pulso de 10 a
20ms. Com o pulso de aproximadamente 1 ms o servo move-se para um sentido e com o
impulso de 2 ms para o sentido oposto. Desse modo, com um impulso de 1,5 ms, o servo
roda para a posição central.
[ 106 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 7. 25: Ap
plicação d
de servo-motores em robô m
móvel.
A te
ensão de alimentaçã
a
ão do servo
omotor é tipicament
t
te de 5V, ppodendo variar
v
entre
e
4,5V e 6V. Devido à alta redução do jog
go de engrrenagens, o torque qque se obttém de um
m
servo é ba
astante alto, considerando o seeu tamanh
ho reduzido
o. Lamentaavelmente,, os servoss
consomem
m corrente
es elevada
as (de 20
00 mA a 1 A) e introduzem
m ruído ellétrico noss
condutores de alime
entação, ne
ecessitand o a aplicaçção de cap
pacitores dde filtro. O programa
a
abaixo mo
ove um serrvo-motor de rotação
o para fren
nte e um outro
o
paraa trás. Note
e que essa
a
operação é utilizada por robôs móveis qu
ue possuem
m dois mottores em aanti-paralelo.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
#define m
motor1 pin_
_b5
#define m
motor2 pin_
_b6
int16 frentte=50;
short int le
ed;
main(){
clock_int_4
4MHz();
UE)
while (TRU
{
while (fren
nte>0)
{ output_hiigh(motor2
2);
//Inicialiiza o pulso do motor 1
output_high(motor1
1);
//Inicializza o pulso do motor 2
delay_ms((1);
output_low
w(motor1)); //Termiina o pulso
o de 1ms do
d motor1–– sentido horário
h
delay_ms((1);
output_low
w(motor1));
output_low
w(motor2));
horário
///Termina o pulso de 2ms do m
motor2 – se
entido anti--
delay_ms((10);
--frente;
[ 107 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
}
frrente=50;
led=!led; //pica led
d a cada 50
5 ciclos do
o servo-mo
otor, ou sejja a cada 112ms*50 = 600ms
output_bitt(pin_b7,leed);
}}
-----------------------------------------------------------------------------------------------------------------------
Figura 7. 26: Visualiza ção interna de um
m servo-m
motor.
O programa abaixo move um
m servo-m
motor de posição. Com o pulso de
e
aproximad
damente 1 ms, o serrvo move-sse para 0 graus,
g
e com o pulsoo de 1,2 ms
m para 90
0
graus e co
om o pulso
o de 2 ms para 180 g
graus. Notte que este
e motor é utilizado em
e antenass
parabólicas, em siste
emas robótticos e no controle de câmeras.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h> //Servo
o-motor d e parabóliica - 3 po
osições deffinidas: 0, 90 e 180
0
graus.
NTE=200, TRAS=200
0; //no serrvo de testte 200 passsos correspponderam a aprox. 1
int16 FREN
volta
void main(()
{
clock_int_4
4MHz();
while (1)
{
while (FRENTE>0))
{
FRENTE--;
output_high(pin_b0);
delay_ms((1);
/// tempo dee busca de
e 0 graus
output_low
w(pin_b0);
delay_ms((10);
}
FR
RENTE=20
00;
while (TR
RAS>0)
[ 108 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
{
TRAS--;
output_high(pin_b0);
/// tempo dee busca de 180 grauss
delay_ms((2);
output_low
w(pin_b0);
delay_ms((10);
}
TR
RAS=200;
output_to
oggle(pin_b
b7);
}
}
---------------------------------------------------------------------------------------------------------------------
FOTOA
ACOPLA
ADORES
S E SEN
NSORES
S INFRA
AVERM ELHOS
S
Fotoacopladores ou optoiso
oladores p
proporciona
am a isola
ação de sinnais em um
ma grande
e
variedade de aplica
ações. Tam
mbém chaamados de
e acoplado
ores óticoss, eles comutam ou
u
transmitem
m sinais e informaçõ
ões ao meesmo tempo que iso
olam diferrentes parttes de um
m
circuito.
Optoiso
oladores liineares são usados para isola
ar sinais análogos atté 10MHz,, enquanto
o
optoisoladores digita
ais são usados para ccontrole, in
ndicação de
e estados, isolação de
d sinais de
e
comando e mudança
as de níveis lógicos.
Existem
m fotoacop
pladores de
e diversos tipos e co
om constru
uções interrnas diversas, como,
por exemp
plo, acopladores onde
e a constru
ução intern
na é basea
ada em um
m diodo infrravermelho
o
e um fotottransistor. Como exemplo podeemos citar o 4N25 e o TIL111:
Figurra 8. 1: Viisualizaçã
ão interna
a de um Fotoacopl
F
ador.
Esse
e disposittivo pode ser utilizaado por um
u
microc
controladoor para identificar a
presença d
de tensão 220VAC em
e um detterminado ponto. A potência
p
m
máxima disssipada por
esse comp
ponente é de 250mW
W em 25 grraus Celsiu
us. Dessa forma, devee-se dimen
nsionar um
m
resistor em
m série com
m o foto-diiodo intern
no para pro
otegê-lo.
Esco
olhendo re
esistores são
s
de 33 3mW, ou seja, a po
otência mááxima que
e pode ser
dissipada em cada um deles. É interesssante que exista um
m certo inttervalo de segurança
a
entre a po
otência máxima do co
omponentee e a potên
ncia máxim
ma dissipadda. Então, a potência
a
máxima esscolhida pa
ara os resiistores é d
de 200mW.. Na Equaç
ção (6.1) é calculado
o o resistor
que será utilizado no
n circuito, consideraando a te
ensão de pico.
p
Consiidere 311V
V como a
tensão de pico.
P=V
V2/R -> 0,2
2W = (311
1)2/R -> R
R=483 KΩ.
O re
esistor com
mercial mais próximo
o desse valo
or é 470KΩ
Ω.
[ 109 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 8.
8 2: Aplica
ação de um
u fotoac
coplador.
TRANSM
MISSOR E RECEPT
TOR IR
Os transmisso
ores e rece
eptores IR
R (infrared ou Infrave
ermellhos) são muito
o utilizadoss
como senssor ótico por
p reflexã
ão difusa p
para registtro de posiição. A figgura abaixo
o mostra o
circuito do
o sensor e um gráficco do sinaal de saída (em mV) do recepttor IR em função da
a
distância p
perceptívell pelo rece
eptor IR co
om resistorr de elevaç
ção de tennsão para 5V
5 (pull-up
p
2K2). O vvídeo http
p://www.yo
outube.com
m/watch?v
v=18w0Oeaco4U moostra essa
a variação,
com o acionamento
o de um le
ed pela q ueda do sinal
s
analó
ógico atarvvés da condução do
o
receptor IR
R.
xão do pa
ar infraverrmelho: TIL
T 32 (em
missor) e TIL 78 (rreceptor)..
Figura 8.. 3: Conex
Para
a ter um maior alca
ance e perrceber um
ma maior variação
v
dee posição, com esse
e
sensor, é aconselhá
ável utiliza
ar o convversor AD de 10 bits
b
do m icrocontrolador para
a
identificar variações de até 5m
mV no sinall do sensor. A distância ótima é a distânccia em que
e
[ 110 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
incide no receptor a maior parte do feixe de luz emitido pelo transmissor. Nessa distância
ocorre a maior variação (queda) do sinal de saída analógico do receptor IR.
Utilizando o princípio on/off, só há identificação de posição quando o sinal do
receptor for menor ou igual a 2,5V (nível lógico baixo), o que torna o sensoreamento muito
limitado.
Durante os testes desse circuito foi verificado que, devido a resistência de 390Ω em
paralelo com 2K2, quando o led é conectado no circuito, há uma diminuição na variação do
sinal de saída analógico do receptor IR. O programa abaixo mostra a leitura em mV do
sensor ótico via emulação serial.
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h> //Leitura de tensão em mV com variação de um potenciômetro
#include <usb_san_cdc.h>// Biblioteca para comunicação serial virtual
int32 tensao;
main() {
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
setup_adc_ports(AN0); //Habilita entrada analógica - A0
setup_adc(ADC_CLOCK_INTERNAL);
while(1){
//ANALÓGICO
DIGITAL(10 bits)
set_adc_channel(0);
// 5000 mV
1023
delay_ms(10);
// tensao
read_adc()
tensao= (5000*(int32)read_adc())/1023;
printf (usb_cdc_putc,"\r\nA tensao e' = %lu mV\r\n",tensao); // Imprime pela serial virtual
output_toggle(pin_b7);
delay_ms(500);
}}
-------------------------------------------------------------------------------------------------------------AUTOMAÇÃO E DOMÓTICA COM CONTROLE REMOTO UNIVERSAL
A comunicação entre uma unidade remota e um eletrodoméstico, como uma TV, se
dá geralmente por emissão de radiação infravermelha modulada por pulsos.
[ 111 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
F
Figura 8. 4: Diagra
ama de bllocos de comunica
c
ção infrav
vermelha
a.
Para
a tornar o sistema in
nsensível a interferên
ncias e filtrrar os ruídoos, aceitan
ndo apenass
as ordens do controlle remoto, o código d
de pulsos do emissor contém uum dado binário,
b
que
e
é identifica
ado pelo decodificado
or do recep
ptor.
As interferênccias podem
m se origiinar de fontes estátticas, isto é, que nã
ão pulsam,
como o so
ol, lâmpadas incande
escentes, aaquecedorres, e de fontes
f
dinââmicas que
e são maiss
intensas e geram maior
m
interrferência, como lâm
mpadas fluo
orescentess, a image
em da TV
V,
outros tran
nsmissoress de infrave
ermelho e etc.
O rreceptor, geralmente
g
e contido n
num único invólucro montado no painel frontal do
o
televisor, entrega ao
a decodifiicador apeenas os pulsos retangulares ccorrespond
dentes aoss
códigos de
e identifica
ação e dados, eliminaando a ma
aioria das fontes
f
de i nterferênccias, exceto
o
as que ten
nham a me
esma frequ
uência de p
pulsos, cab
bendo a rejjeição desttas ao Deccodificadorr,
se não tive
erem o me
esmo códig
go de pulso
os.
Para
a acionar uma carg
ga à distâância bastta ter o controle
c
reemoto e o receptor
infraverme
elho, pois ao invés de
d capturaar o código
o em bits emitidos ppelo contro
ole remoto
o
para deco
odificação, é possível identificaar apenas o start bit desse cóódigo que apresenta
a
nível lógicco baixo (0V) que
e, conectaado ao pino
p
de interrupção
i
o externa
a (B0) do
o
microcontrrolador com
m um resisstor de pul
ull-up de 2K
K2, executa
ará uma taarefa desejjada como,
por exemp
plo, o chavveamento de
d um reléé para acio
onamento de uma m
máquina. Um
m exemplo
o
de circuito
o para aciionamento de cargaas remotass com con
ntrole univversal pode
e ser vista
a
abaixo e e
em http://
/www.yo
outube.co m/watch
h?v=1l6s9
9xtrJl0 .
[ 112 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 8.
8 5: Conexão de re
eceptor in
nfraverme
elho de TV
V no PIC.
Notte que, se nesse casso não hou
uver um sisstema de decodificaçção, o receptor deve
e
ter um invvólucro parra proteção
o contra in
nterferência
as, pois esstá sujeito às fontes estáticas e
dinâmicas. Abaixo um
u progra
ama exem
mplo de accionamento
o de um relé atrav
vés de um
m
controle re
emoto univversal.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
short int re
ele;
#int_ext
ext()
void bot_e
{
rele=!rele;;
output_bitt(pin_b5,re
ele);
delay_ms((1000); ///Tempo pa
ara deixar o recepto
or cego por 1 seg appós a 1ª atuação
a
da
a
interrupção
}
main() {
clock_int_4
4MHz();
enable_intterrupts (global); // Possibilita
P
ttodas interrrupcoes
enable_intterrupts (int_ext);//Habilita in
nt. ext. 0 no pino
o B0 ondde está o receptor
infraverme
elho
while (TRU
UE)
{
output_tog
ggle(pin_B
B7);
[ 113 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
delay_ms((500);
}}
--------------------------------------------------------------------------------------------------------------------Para
a filtrar as interferên
ncias dinâm
micas é neccessário co
olocar o recceptor em uma caixa
a
preta com
m um pequ
ueno orifício ou em um tubo feito de caneta com
m cola que
ente, como
o
mostra a ffigura abaixxo, para re
eceber som
mente a luzz IR direcio
onal.
Figura 8. 6: Exem
mplo de prroteção do
o recepto
or contra emissões
e
s externas
s de raios
s
IR.
CODIFIC
CAÇÃO DE
E RECEPTO
OR INFRA
AVERMEL
LHO UTILI
IZANDO A NORMA
A RC5
RC5
5 é uma no
orma unive
ersal desen
nvolvida pe
ela Phillips para comaandos a disstância por
infraverme
elho utilizzada prin
ncipalmentte em equipamen
e
ntos de áudio, televisores
t
,
videocasse
etes e outros
o
ap
parelhos d
domésticos, com uma áreea de allcance de
e
aproximad
damente 10
0m.
A n
norma RC5
5 usa mo
odulação b
bifásica, ou
u seja, có
ódigo Man
nchester. Cada
C
bit é
separado por dois se
emi-ciclos;; a metadee esquerda
a e direita têm níveiss opostos. Se o bit a
ser transm
mitido for zero
z
(0), o seu lado esquerdo (primeiro semi-cicloo) é um e o seu lado
o
direito é zzero (segu
undo semi-ciclo). See o bit a ser transm
mitido for um (1), o seu lado
o
esquerdo é zero qua
ando o seu lado direitto é um.
Fig
gura 8. 7:: Modulaç
ção Bifásica.
O código ttransmitido
o consiste de
d uma paalavra de 14 bits, sen
ndo eles :
- 2 bits pa
ara ajuste do nível (2
2 start bits)). O primeiro e o seg
gundo correesponde a 1;
- 1 bit para controle
e (toggle bit
b ou flip) q
que muda de estado
o lógico cadda vez que
e um botão
o
é pression
nado na un
nidade de comando a distância. Isto serrve para inndicar se o botão fo
oi
pressionad
do uma vezz ou se con
ntinua sen do pressio
onado;
[ 114 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
- 5 bits d
de endereçço do siste
ema para sseleção de
e 1 dos 32 sistemas possíveis listados na
a
tabela 7. IIsso define
e o tipo de aparelho q
que se prettende conttrolar;
- 6 bits de
e comando
o representtando 1 do
os 128 com
mandos possíveis. Issso define a ação que
e
se pretend
de executar em um determinad
d
do aparelho
o (sistema)) selecionaado.
Na figura aba
aixo vemoss os bits dee 1 a 14 e sua identificação: eem azul cla
aro os startt
bits 1 e 2 de equaliização; o bit
b 3, FLIP
P, em ama
arelo; bits de 4 a 8 em azul in
ndicando o
endereçam
mento; e oss bits de 9 a 14, indi cando o co
omando a executar.
Figura 8. 8
8: Sinal trransmitido.
Na norma RC5, os dado
os são mod
dulados nu
uma frequê
ência portaadora de 30
0 a 40KHz,
indicados pelos doiis últimos números do recep
ptor TSOP
P1740, TSO
OP4836, TSOP4830
T
.
de 36 kHzz, o período de cada bit correspponde a 64
Consideran
ndo uma modulação
m
4 pulsos de
e
1/36 kHz,, ou seja,, 64 vezzes 27,7 μ
μs (micro segundoss), o em que corre
esponde a
aproximad
damente 1772us. O programaa abaixo id
dentifica o o enderreço do sistema e o
comando d
das teclas pressionad
das por um
m controle remoto RC
C5.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h> //Progra
ama com p
protocolo RC5
R da Phiilllips de coontrole rem
moto
#include <
<usb_san_
_cdc.h>// Biblioteca
B
p
para comunicação se
erial virtuall
char chego
oupc, coma
mando, siste
ema, bit_rxx;
int32 i;
void identiifica_bit(vo
oid)
{
bit_rx=0;
_rx=1;} ///identifica 0 ou 1
if (input(pin_b0))==1) {bit_
delay_
_us(860); //
/ //pula para o próxximo períod
do para outra leitura
}
#int_ext
void san_e
ext()
{
output_tog
ggle(pin_b
b6);
sistema=0
0;
comando=
=0;
//*******
******************
*********
*********
*********
**
delay_us(7
750); //Tempo do sttart bit 1 ccom a perrda do tem
mpo do prim
mi-ciclo alto
o
meiro sem
pela interrrupção
delay_us(1
1720); //Te
empo do start
s
bit 2
delay_us(1
1720); //Te
empo do to
oogle bit
[ 115 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=16; //Bit 5 do byte sistema 0b00010000
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=8; //Bit 4 do byte sistema 0b00001000
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=4; //Bit 3 do byte sistema 0b00000100
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=2; //Bit 2 do byte sistema 0b00000010
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=1; //Bit 1 do byte sistema 0b00000001
//*************************************************
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=32; //Bit 4 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=16; //Bit 5 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=8; //Bit 4 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=4; //Bit 3 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=2; //Bit 2 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=1; //Bit 1 do byte comando
//*************************************************
[ 116 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
write_eeprrom(0x10,sistema); write_eep
prom(0x11
1,comando);
////gguarda ass variáveiss
decodificad
das
while(read
d_eeprom(0xfd));
printf (usb
b_cdc_putcc,"comando
o: %x\r\n"",read_eep
prom(0x11)));
delay_ms((500); //Te
empo para
a deixar o receptor cego por um segunndo após a primeira
a
atuação da
a interrupçção
}
main() {
clock_int_4
4MHz();
usb_cdc_in
nit(); // Inicializa o protocolo
p
C
CDC
usb_init();; // Inicializza o protoccolo USB
usb_task()); // Une o periférico com US B do PC //Para
/
depurar o proograma em
m aplicação
o
real
b_enumera
ated()); //A
Aguarda recconhecime
ento da em
mulação serrial via USB
B
while(!usb
enable_intterrupts (global); // Possibilita
P
ttodas interrrupcoes
enable_intterrupts (in
nt_ext); // Habilita in
nterrupcao externa 0 no pino B
B0 onde esstá ligado o
receptor in
nfravermelho
while(1)
{
if (usb_cdcc_kbhit(1))) //avisa se
e chegou d
dados do PC
P
{
chegoupc=
=usb_cdc_
_getc(); //sse chegou, retém o caractere
c
e compara com 'L' ou 'D'
if (chegoupc=='L') {output_tog
{
ggle(pin_b
b6); printf(usb_cdc_p
putc, "\r\nT
Testa led!\\r\n");}
}
++i; if (i>
>=10000) {i=0;
{
outpu
ut_toggle( pin_b7);} //Led de visualização
v
o
}}
--------------------------------------------------------------------------------------------------------------------O resultad
do dos co
omandos gerados
g
q ue correspondem às
à teclas ppressionad
das de um
m
controle rremoto Ph
hillips RC5
5 é mostrrado na figura abaixo. Mais detalhes no vídeo:
http://w
www.youtu
ube.com/
/watch?v
v=9VG7Ro
okuDTs.
Figura 8. 9: Leitura da te
ecla pressionada via monito r serial.
[ 117 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
ACIONAM
MENTO DE
D CARGA
AS CA COM
M TRIAC
Com
mo a maiorria dos sisttemas auto
omáticos é acionada em corrennte alterna
ada, para o
controle d
de fluxo de
d energia de tais ssistemas é muito uttilizada um
ma chave eletrônica,
chamada TRIAC (trriode for Alternating
A
g Current) da família dos tirisstores, ou
u seja, um
m
nte eletrônico equivalente a do
ois retificad
dores contrrolados dee silício (SC
CR) ligadoss
componen
em antiparalelo que permite conduzir
c
a corrente elétrica
e
nos dois senntidos quan
ndo recebe
e
um pulso n
na base (d
disparo).
TRIACS E RELÉS DE
D ESTAD
DO SÓLIDO
O
Os Triacs optto-isoladoss, geralmen
nte utilizad
dos em ca
argas CA, podem co
onduzir noss
dois semi--ciclos de uma onda
a senoidal. Dessa forma, são utilizados tanto com
mo relés de
e
estado sóllido sem controle
c
de
e fase da ttensão, co
omo també
ém no conttrole de te
ensão para
a
uma carga
a CA atravvés de pu
ulsos no gaatilho do triac em períodos
p
ddeterminad
dos após a
passagem pelo zero realizando
o o controlee de fase da
d tensão, que prom
movem a co
ondução de
e
tensão parra a carga até a nova
a passagem
m pelo zero
o.
Os relés de estado só
ólido (Solid
id State Relay
R
), que
e não aprresentam comutação
o
eletromecâ
ânica, por isso o no
ome, conssistem na alternativa
a modernaa ideal para uso em
m
lugar dos relés eletrromecânico
os com seu
us contato
os ruidososs e seus prroblemas mecânicos
m
.
Na verdad
de, a tendê
ência é um
ma substitu
uição gradativa dos relés eletroomecânico
os pelos de
e
estado sólido a base
e de tiristorres como o
os triacs.
DIMMER ANALÓGICO
Durrante a varriação da onda
o
seno idal na alim
mentação do dimmeer mostrado
o na figura
a
abaixo, esste disposittivo aprese
enta um m
momento zero
z
volt e,
e conseqüüentemente
e, corrente
e
nula passa
ando pelo triac, que o trava no
ovamente até o próx
ximo dispaaro no próx
ximo semi-ciclo, cujo tempo de
epende o tempo
t
de ccarregame
ento do capacitor dee 220nF lim
mitado pelo
o
potenciôm
metro em sé
érie.
Figura 8. 10: Cirrcuito dim
mmer ana
alógico.
As ffiguras abaixo mostram o com
mportamen
nto das correntes em
m cargas resistivas
r
e
indutivas a
após o cha
aveamento do triac.
[ 118 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 8. 11: Co
omportam
mento dass corrente
es em carg
gas resisttivas e ind
dutivas
após
a
o cha
aveamentto do triac.
Sup
ponha que o TRIAC esteja
e
cond
duzindo. Quando
Q
a corrente
c
invverte, passando pelo
o
zero, o triiac corta a alimentaçção da carrga pela fo
onte CA e a partir ddaí a tensã
ão sobre o
capacitor ccomeça a crescer
c
no
ovamente eem função do valor da
d capacitâância e da resistência
a
em série, até atingirr a tensão de disparro (VD) no DIAC (exe
emplos: 1N
N5411 e 40583)
4
que
e
dispara o gatilho do triac. Note
e que sem
mpre que a corrente passa
p
peloo zero, o trriac corta a
ão da carga e só voltta a condu
uzir quando
o o capacittor atinge a tensão de
d disparo,
alimentaçã
O
víídeo
gerando
uma
onda
senoidaal
“fattiada”.
no
n
linkk
http://w
www.youtu
ube.com/
/watch?v
v=u1HwZLRcrYQ mostra
m
a ooperação de
e um triac..
CONTROL
LE DIGITA
AL DE DIS
SPARO DE UM TRI
IAC
Para
a de realizzar o conttrole digitaal do dispa
aro de um
m triac é nnecessário identificar
iniciamentte a passa
agem pelo zero da ssenóide da
a rede (ze
ero-crossingg), para a partir da
aí
decidir qua
ando, em cada
c
semi--ciclo da seenóide da rede, será
á realizado o chaveam
mento pelo
o
triac da re
ede para a carga CA. Para identtificar a pa
assagem pelo zero daa senóide da rede fo
oi
utilizado o métod
do simple
es do o
opto-acoplador, com interruupção ex
xterna do
o
microcontrrolador por bordas de subida e descida, e o método do transsformador com ponte
e
de diodo com interrrupção ex
xterna por borda de
e subida. As
A figuras abaixo mostram
m
ass
forma de o
ondas obtid
das pelos dois
d
métod
dos de sen
nsoriamento
o da rede.
[ 119 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 8. 12: Ze
ero-cross
sing: form
ma de ond
das obtida
as pelos d
dois métodos de
sensoriiamento da
d rede.
Notta-se que a forma de
e onda pelo
o cruzamen
nto do zero
o com senssoriamento
o por opto-acoplador não é exa
ata, sendo adequadaa para uso
o por exem
mplo, com sistemas de
d controle
e
de ilumina
ação. Nestte caso, pode
p
ser que os te
empos t1 e t2, obttidos nos semi-cicloss
simétricos negativo e positivo, respectivvamente, são
s diferen
ntes. Um eexemplo de placa de
e
mpressa com
m o respecctivo circuitto é mostrrada na fgu
ura abaixo..
circuito im
Figura 8.
8 13: PCB
B do circuito zero-c
crossing.
[ 120 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
No caso do transforma
t
dor e da ponte de diodo, que diminui o nível de
e tensão e
rebate o ssemi-ciclo negativo para posittivo, é posssível identtificar na base do transistor o
momento em que a onda se
enoidal vai a zero, pois
p
neste curto perríodo, o transistor á
d coletor é levado a 5V, ou seja,
s
nível lógico altto, identificcando com
m
cortado e a saída do
elo zero.
maior exattidão a passsagem pe
Fig
gura 8. 14
4: Passage
em da on
nda pelo zero
z
da re
ede.
Mais
detalhe
es
podem
ser
vistos
no
http://w
www.youtu
ube.com/
/watch?v
v=u1HwZLRcrYQ.
A fo
orma de on
nda pode ser
s vista co
om mais de
etalhes na figura abaaixo:
vídeo:
Figura
a 8. 15: Fo
orma de onda
o
de e
entrada e saída do circuito d
detector de
d zero
O P
Programa abaixo
a
iden
ntifica a paassagem pelo
p
zero de
d tensão e determina a partir
daí, com d
dois botõess, o ângulo
o de fase ((atraso de chaveame
ento) entree 300 valorres de uma
a
tabela, em
m que cada
a atraso co
orrespondee a variação de 0,3%
% da potênncia conced
dida para a
carga.
---------------------------------------------------------------------------------------------------------------------
[ 121 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#include
<SanUSB.h>
//Mais
http://www.youtube.com/watch?v=7O9a0E_WXPA
detalhes
#define button PIN_E3
#define button1 PIN_B1
int16 pointer=0;
int16 CONST table[300] =
{
500, 482, 474, 468,
442, 439, 436, 433,
417, 415, 413, 411,
398, 396, 394, 392,
381, 379, 378, 376,
366, 365, 363, 362,
352, 351, 350, 348,
340, 338, 337, 336,
327, 326, 325, 324,
315, 314, 313, 312,
304, 303, 302, 301,
293, 292, 291, 290,
282, 281, 280, 279,
271, 270, 269, 268,
261, 260, 258, 257,
250, 249, 248, 247,
239, 238, 237, 236,
229, 228, 227, 225,
218, 217, 216, 215,
207, 206, 205, 204,
196, 195, 194, 193,
185, 183, 182, 181,
173, 172, 170, 169,
160, 159, 158, 157,
148, 146, 145, 144,
134, 132, 131, 130,
119, 117, 116, 114,
102, 101, 99,
97,
83,
81,
79,
77,
58,
55,
52,
49,
};//*/
463,
431,
409,
391,
375,
361,
347,
335,
323,
311,
300,
289,
278,
267,
256,
246,
235,
224,
214,
203,
191,
180,
168,
155,
142,
128,
113,
95,
74,
45,
459,
428,
407,
389,
373,
359,
346,
333,
321,
310,
298,
287,
277,
266,
255,
245,
234,
223,
213,
202,
190,
179,
167,
154,
141,
127,
111,
93,
72,
41,
455,
426,
405,
387,
372,
358,
345,
332,
320,
309,
297,
286,
276,
265,
254,
244,
233,
222,
211,
200,
189,
177,
165,
153,
139,
125,
109,
91,
69,
37,
451,
423,
403,
386,
370,
356,
343,
331,
319,
307,
296,
285,
275,
264,
253,
243,
232,
221,
210,
199,
188,
176,
164,
152,
138,
124,
108,
89,
67,
32,
448,
421,
401,
384,
369,
355,
342,
330,
318,
306,
295,
284,
273,
263,
252,
242,
231,
220,
209,
198,
187,
175,
163,
150,
137,
122,
106,
87,
64,
26,
int16 i, phase_count=0;
signed int j=0, disparo=0;
#int_TIMER2
void function_t0 ()
{
// set_timer2(239); //es zählt 20 us bis interrupt, d.h. 50kHz
++phase_count;
[ 122 ]
445,
419,
399,
383,
368,
354,
341,
328,
317,
305,
294,
283,
272,
262,
251,
240,
230,
219,
208,
197,
186,
174,
162,
149,
135,
121,
104,
85,
61,
18
em
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
if(table[pointer]==phase_count){
output_high(PIN_B6); //triac an
}
}
#INT_EXT
void Crossing0()
{
output_low(PIN_B6); //triac aus
phase_count=0;
}
void main(void)
{
clock_int_4MHz(); //Função necessária para habilitar o dual clock (48MHz para USB e 4MHz
para CPU)
//setup_wdt(WDT_ON); //Watch dog timer an
disparo=read_eeprom(10); //carrega o último valo ajustado
if (disparo>9) {disparo=0; write_eeprom(10,0);} //inicio de operação após gravação
setup_adc_ports(AN0); //Habilita entradas analógicas - A0
setup_adc(ADC_CLOCK_INTERNAL); //Configuração do clock do conversor AD
enable_interrupts (global);
enable_interrupts (int_timer2);
//enable_interrupts (int_timer1);
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
//setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1);// inicia o timer 1 em 8 x 62500 = 0,5s
setup_timer_2(T2_DIV_BY_1,239,1);
while(1)
{
++i; if (i>=20000) {i=0; restart_wdt(); // must clear WDT flag in 16 sec.
output_toggle(pin_b7);} //Led
if(!input(button))
{ delay_ms(30); //while(!input(button)) delay_ms(50); //filter
pointer++; //
if(pointer>=299) {pointer=299;} //o botão no pino E3 regula o ângulo de disparo
write_eeprom(10, pointer);
[ 123 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
}
if(!inputt(button1))
{ delay_ms(3
30); //whiile(!input(b
button1)) delay_ms((50);
poin
nter--;
if(po
ointer<=1)) {pointer=
=0;}
writte_eeprom(10, pointe
er);
}
}
}
--------------------------------------------------------------------------------------------------------------------DIMMER DIGITAL
L COM CO NTROLE REMOTO
R
IR
A fig
gura abaixxo apresenta um um circuito de
e controle digital
d
de lluminosidade de uma
a
lâmpada C
CA por um
m microcontrolador attravés de comandos de um coontrole rem
moto IR de
e
TV utilizan
ndo detector de passagem p
pelo zero. O comand
do do conntrole rem
moto IR do
o
upção no pino B0, altera
optoisolador, que é recebido por interru
a
o â ngulo de disparo do
o
MOC3020,, após a detecção
d
de passageem pelo ze
ero por intterrupção nno pino B1 realizada
a
pelo optoa
acoplador e, consequ
uentementte, altera o tempo de conduçãão do TRIA
AC BT, que
e
conduz pa
ara a carga a tensão até
a o final do semicicclo da onda senoidal..
Fig
gura 8. 16: Contro
ole digitall de lumin
nosidade de
d uma lâ
âmpada CA.
C
É
p
possível
veer
mais
deetalhes
em
m
http://w
www.youtu
ube.com/
/watch?v
v=7O9a0E
E_WXPA . Abaixo o firmware do dimmer
digital com
m controle remoto IR
R.
--------------------------------------------------------------------------------------------------------------------#include
B.h>
//M
Mais
detaalhes
m
<SanUSB
em
http://www
w.youtube
e.com/watcch?v=7O9aa0E_WXPA
A
otao PIN_E
E3
#define bo
#define bo
otao1 PIN_
_A0
[ 124 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
int16 i;
signed int j=0, disparo=0;
char chegoupc, comando, sistema, bit_rx, flag;
void identifica_bit(void)
{
bit_rx=0;
if (input(pin_b0)==1) {bit_rx=1;} //identifica 0 ou 1
delay_us(860); // //pula para o próximo período para outra leitura
}
#int_ext
void san_ext()
{
disable_interrupts(INT_EXT1);
sistema=0;
comando=0;
//*************************************************
delay_us(700); //Diminuir de 750 pelo break etc. Tempo do start bit 1 com a perda do
tempo do primeiro semi-ciclo alto pela interrupção
delay_us(1720); //Tempo do start bit 2
delay_us(1720); //Tempo do toogle bit
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=16; //Bit 5 do byte sistema 0b00010000
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=8; //Bit 4 do byte sistema 0b00001000
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=4; //Bit 3 do byte sistema 0b00000100
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=2; //Bit 2 do byte sistema 0b00000010
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) sistema|=1; //Bit 1 do byte sistema 0b00000001
//*************************************************
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
[ 125 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
if (bit_rx) comando|=32; //Bit 4 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=16; //Bit 5 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=8; //Bit 4 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=4; //Bit 3 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=2; //Bit 2 do byte comando
delay_us(860); //pula o primeiro semi-ciclo
identifica_bit();
if (bit_rx) comando|=1; //Bit 1 do byte comando
//*************************************************
while(read_eeprom(0xfd));
if (comando==1) {output_toggle(pin_b7); disparo++; if(disparo>=8) {disparo=8;}}
if (comando==2) {output_toggle(pin_b7); disparo--; if(disparo<=0) {disparo=0;}}
enable_interrupts(INT_EXT1);
}
#INT_EXT1
void CruzaPor0()
{
if (!input(pin_b0)) break;
delay_us(500); //devido a detecção de interrup. já com 2,5V como zero,
//o inicio para o disparo se encontra ainda no semi-ciclo anterior, por isso,
//o delay de inicial para entrar no próximo semi-ciclo
delay_ms(disparo); //Para 60 Hz cada semi-ciclo aprox. 4,33ms e o ciclo 8,66ms
if(flag==0){ output_high(PIN_B6); //dispara triac
delay_us(300);
output_low(PIN_B6); }
if (j==0){
j=1;
ext_int_edge(H_TO_L); // Muda a interrupção da borda de subida para descida da
senóide
}
else {
[ 126 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
j=0;
ext_int_edge(L_TO_H); // Muda a interrupção da borda de descida para subida da
senóide
}
}
void main()
{
clock_int_4MHz(); //Função necessária para habilitar o dual clock (48MHz para USB e 4MHz
para CPU)
disparo=read_eeprom(10); //carrega o último valo ajustado
if (disparo==0xff) {disparo=0; write_eeprom(10,0);} //inicio de operação após gravação
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
ext_int_edge(L_TO_H);
while(true)
{
++i; if (i>=50000) {i=0; output_toggle(pin_b7);} //Led de visualização
if(!input(botao))//botão de incremento manual de fase
{ delay_ms(100); while(!input(botao)) delay_ms(100); //filtro botão
disparo++; // na prática está identificando o zero só uma vez por ciclo
if(disparo>=8) {disparo=8;} //o botão no pino E3 regula o ângulo de disparo
write_eeprom(10, disparo);
enable_interrupts(INT_EXT1);
}
if(!input(botao1))
{ delay_ms(100); while(!input(botao1)) delay_ms(100);
disparo--;
if(disparo<=0) {disparo=0;}
write_eeprom(10, disparo);
enable_interrupts(INT_EXT1);
}
}
}
--------------------------------------------------------------------------------------------------------------Alguns modelos comerciais de triac são o BT e o TIC. Com eles é possível construir
dimmers (controladores de luminosidade de lâmpadas) e também controladores de
velocidade de motores CA como ventiladores.
Este princípio de controle possibilita também economia de energia, pois, enquanto
ele não recebe o disparo, não há condução de corrente para a carga. Outra característica
importante é a causa pela qual passou a substituir o reostato original, que acompanha os
[ 127 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
motores das máquinas de costura. Como o controle de velocidade é feito pela parcela do
semiciclo aplicado e não pela tensão, o torque se mantém mesmo em baixas velocidades.
A outra série de MOC3041, já é projetada com circuito interno fixo para detecção de
passagem por zero, assim o chaveamento é automático e não é possível nenhum controle
do ângulo de disparo.
LCD (DISPLAY DE CRISTAL LÍQUIDO)
O LCD, ou seja, display de cristal líquido, é um dos periféricos mais utilizados como
dispositivo de saída em sistemas eletrônicos. Ele contém um microprocessador de controle,
uma RAM interna que mantém escritos no display (DDRAM) os dados enviados pelo
microcontrolador e uma RAM de construção de caracteres especiais (CGRAM). Os LCDs são
encontrados nas configurações previstas na Tabela abaixo.
Número de
Colunas
8
12
16
16
16
20
20
20
24
24
40
40
Número de
Linhas
2
2
1
2
4
1
2
4
2
4
2
4
Quantidade de
pinos
14
14/15
14/16
14/16
14/16
14/16
14/16
14/16
14/16
14/16
16
16
Os displays mais comuns apresentam 16 colunas e duas linhas. Eles têm
normalmente 14 pinos ou 16 pinos. Destes, oito pinos são destinados para dados ou
instrução, seis são para controle e alimentação do periférico e dois para backlight. O LED
backlight (iluminação de fundo) serve para facilitar as leituras durante a noite. Neste caso,
a alimentação deste led faz-se normalmente pelos pinos 15 e 16, sendo o pino 15 para
ligação ao anodo e o pino 16 para o catodo. A ferramenta SanUSB tem uma biblioteca em
C para este periférico que utiliza somente o nibble superior do barramento de dados
(D7, D6, D5 e D4), como é o caso da biblioteca MOD_LCD_SANUSB.c com a seguinte
configuração:
[ 128 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 9. 1: C onexão do
d LCD no
o PIC.
AT
Tabela abaixo traz um
m resumo d
das instruçções mais usadas
u
na comunicaçção com oss
módulos LLCD.
Tab
bela - Insstruções mais
m
comuns
DESCRIÇ
ÇÃO
MODO
O
R
R/
Código
o
S
W
(Hex)
Display
Liga ((sem curso
or)
0
0
0C
Deslig
ga
0
0
0A / 08
8
Limpa Disp
play com Home
H
curso
or
0
0
01
Controle d
do Cursor
Liga
0
0
0E
Deslig
ga
0
0
0C
Deslocca para Essquerda 0
0
10
Deslocca para Direita
0
0
14
Curso
or Home
0
0
02
Curso
or Piscante
0
0
0D
Curso
or com Alte
ernância 0
0
0F
Sentido de
e deslocam
mento
Para a esquerda
a
0
0
04
cursor ao entrar com
m caractere
e
Para a direita
0
0
06
ento da me
ensagem
Para a esquerda
a
0
0
07
Deslocame
ao entrar ccom caracttere
Para a direita
0
0
05
Deslocam
mento da mensage
em Para a esquerda
0
0
18
sem entrrada de ca
aractere
Para a direita
0
0
1C
End. da prrimeira possição
primeeira linha
0
0
80
segun
nda linha
0
0
C0
Utilizando
o as instruçções do LC
CD:
a rolar o conteúdo do LCD um caracctere para a direita,, utilize o comando
o
Para
lcd_envia
a_byte(0,, instruçã
ão), por exxemplo, lc
cd_envia_
_byte(0,0
0x1C) e pa
ara rolar o
conteúdo do LC
CD um caracteree para a esquerda, uttilize o comando
o
lcd_envia
a_byte(0,,0x18).
Exe
emplo de uso do recu
urso de rolaagem do display:
d
[ 129 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
A seguinte seqüência de comandos, gera o efeito de uma mensagem rolando no
display. Para isso, será necessário declarar uma variável do tipo INT x.
--------------------------------------------------------------------------------------------------------------////////////////////////////Cabeçalho Padrão////////////////////////////////
#include <SanUSB.h>
#include <MOD_LCD_SANUSB.c> // RB0-RS, RB1-EN, RB2-D4, RB3-D5, RB4-D6, RB5-D7
int16 temperatura;
int8 x;
int1 led;
main() {
clock_int_4MHz();
lcd_ini(); // Configuração inicial do LCD
setup_adc_ports(AN0); //Habilita entradas analógicas - A0
setup_adc(ADC_CLOCK_INTERNAL);
delay_ms(100);
printf(lcd_escreve,"AUTOMACAO FERRAMENTA SanUSB ");
while (1) {
set_adc_channel(0);
delay_ms(10);
temperatura=500*read_adc()/1023;
lcd_pos_xy(1,2); // Posiciona segunda linha
printf(lcd_escreve,"TEMPERATURA ATUAL=%lu C",temperatura); //Com LM35
for (x = 0; x < 15; x ++) // repete o bloco abaixo por 15 vezes
{
lcd_envia_byte(0,0x18); // rola display um caractere para esquerda
lcd_envia_byte(0,0x0C); //Apaga o cursor
led=!led; output_bit(pin_b7,led);
delay_ms(500);
}
}}
--------------------------------------------------------------------------------------------------------------Para ativar o cursor, utilize o comando lcd_envia_byte(0,0x0E). Para ativar o
cursor piscante, utilize o comando lcd_envia_byte(0,0x0F), e para desativar o cursor,
use lcd_envia_byte(0,0x0C);
Posicionando o cursor:
Para posicionar o cursor no LCD, podemos usar a função lcd_pos_xy(x,y),
onde x e y são, respectivamente, a coluna e a linha onde o cursor deve ser reposicionado.
[ 130 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Desta forma, caso deseje escrever algo na primeira linha do display, sem apagar a
segunda linha, basta inserir o comando lcd_pos_xy(1,1). Isso irá posicionar o cursor na
primeira linha, e primeira coluna. No entanto, tome cuidado, pois uma vez que o display
não foi apagado, as informações antigas permanecerão na primeira linha, a menos que
você as sobrescreva.
STRING : É o trecho de caracteres delimitado por aspas duplas, que irá definir como será
a seqüência de caracteres a ser gerada. Dentro das aspas, podem ser inseridos caracteres
de texto, caracteres especiais e especificadores de formato.
No caso dos caracteres especiais, por não possuírem uma representação impressa, são
compostos por uma barra invertida seguida de um símbolo, geralmente uma letra.
Exemplo de caracteres especiais : \f (limpar display), \n (nova linha), \b (voltar um
caractere), \r (retorno de carro), \g (beep), etc...
Obs: alguns caracteres especiais somente resultarão efeito em terminais seriais.
Já os especificadores de formato são os locais, em meio ao texto, onde serão
inseridas as variáveis que aparecerão após a STRING. Desta forma, estes especificadores
devem obedecer algumas regras, de acordo com o tipo da variável a ser impressa.
Observe a seguinte tabela :
Tipo
de Especificador de formato e exemplos de uso
variável
%u  valor decimal (ex: 30)
%x  valor em hexadecimal (ex: 1D)
int
%3u  valor decimal alinhado com três dígitos (ex: _30)
%03u
 valor decimal alinhado 3 dígitos c/ zero (ex: 030)
%i  valor decimal com sinal. (ex: -2)
signed int
%02i
 decimal com sinal, 2 casas e zeros a esq. (ex: -02)
%lu  valor decimal (ex: 32345675);
long
%05lu
 valor decimal 5 casas c/ zeros a esquerda. (ex:
int32
01000)
signed
%li  valor decimal c/ sinal (ex: -500)
long
%4li  valor decimal c/ sinal alinhado a esquerda (ex: -_500)
signed
int32
%f  valor real. Ex: (23.313451)
float
%2.3f
 valor real c/ 2 casas inteiras, 3 decimais. Ex:
(23.313)
%c  caractere. Ex: (A)
char
EXEMPLO: CONTROLE DE TENSÃO DE UMA SOLDA CAPACITIVA COM LCD
O princípio de uma solda capacitiva acontece através da descarga instantânea de
capacitores previamente carregados por dois terminais de solda em um ponto específico.
Este projeto consiste em realizar o controle de tensão de uma solda capacitiva em
baixo custo, através de um sistema microcontrolado utilizando o PIC18F2550. Para a leitura
da tensão CC nos terminais da solda capacitiva, na ordem de 300V, é necessário
[ 131 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
inicialmentte utilizar um divisorr de tensãão para ad
dequação à tensão m
máxima do
o conversor
AD do m
microcontrolador de 5V. Esta relação do
d divisor é compe nsada via software,
multiplican
ndo o valo
or de tensã
ão lido pelaa mesma relação de
e divisão. O
Os valores de tensão
o
real e te
ensão de referência
a na ordeem de 270V,
2
que pode seer increme
entada ou
u
decrementtada por dois
d
botõe
es de ajusste, são mostrados
m
em
e um diisplay LCD
D. A última
a
tensão de referência
a ajustada é guardad
da na mem
mória. Desssa forma, quando o sistema é
reiniciado a tensão de
d referênccia assumee o último valor
v
ajustado.
Qua
ando a tensão real e a de referrência são iguais, a alimentação
a
o de 220V do circuito
o
de potênccia é cortad
da pela ab
bertura de um relé NF
N (normalmente fecchado) e um
u LED de
e
atuação a
ascende indicando que a tenssão de refferência fo
oi atingida.. O LED de
d atuação
o
indica a p
presença ou não de tensão ressidual noss capacitores de cargga e apaga somente
e
após a desscarga de tensão noss terminaiss de solda, o que con
ntribui paraa evitar de
escargas de
e
tensão noss operadorres durante
e o manuseeio da sold
da.
Para
a regular esse
e
sistem
ma embarccado é neccessário medir a tenssão nos te
erminais da
a
solda capa
acitiva com
m o multím
metro e igu
ualar com o valor atu
ual indicad o no LCD através do
o
potenciôm
metro de ajuste do div
visor de te nsão. O circuito do sistema
s
de controle de
d tensão e
a foto do LCD apóss a montagem em p
protoboard
d indicando
o a tensãoo de referrência para
a
desligamento (Vref) e a tensão
o atual (Vaat) podem ser vistos na figura aabaixo.
Figura 9.
9 2: Exem
mplo de aplicação
a
do LCD.
-----------------------------------------------------------------------------------------------------------------------//////////////////////////////Cabeça
alho Padrãão//////////////////////////////////
#include <
<SanUSB.h
h>
#include <
<MOD_LCD
D_SANUSB
B.c> // RB0
0-RS, RB1--E, RB2-D4
4, RB3-D5, RB4-D6, RB5-D7
R
#define bo
otaoinc pin
n_a4
[ 132 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#define botaodec pin_a5
#define rele pin_b7
#define ledrele pin_b6
unsigned int16 vref=270, guardavref, constante=100;
unsigned int32 vatual, valorAD;//Deve ser de 32 bits devido ao cálculo do AD que esoura
65536
unsigned int8 baixovref, altovref; // Como vref> 256 guardar o valor em 2 bytes, posições
10 e 11 //da EEPROM interna
int1 flag1, flag2;
main() {
clock_int_4MHz();
lcd_ini(); // Configuração inicial do LCD
output_low(rele);
output_low(ledrele);
guardavref=(256*read_eeprom(10))+read_eeprom(11)+1; //+1 para compensar um bug
de //decremento no reinício
if (guardavref>=100 && guardavref<=500) {vref=guardavref;} // Resgata o último valor
de //referência adotado
setup_ADC_ports (AN0); //(Selecao_dos_pinos_analogicos)
setup_adc(ADC_CLOCK_INTERNAL ); //(Modo_de_funcionamento)
set_adc_channel(0); //(Qual_canal_vai_converter)
delay_ms(10);
printf(lcd_escreve,"SOLDA CAPACITIVA");
while (1) {
//********************************BOTÕES**********************************
***
if (!input(botaoinc)) {flag1=1;}
if (flag1==1 && input(botaoinc) ) {flag1=0;++vref; //se o botão foi pressionado
(flag1==1) e se o botão já foi solto (input(botao)) incremente vref
altovref=vref/256; baixovref=vref%256;
write_eeprom(10,altovref); write_eeprom(11,baixovref);
}// Como Vref>256, guarde o
valor de vref nas posicões 10 e 11 da eeprom interna
if (!input(botaodec)) {flag2=1;}
if (flag2==1 && input(botaodec) ) {flag2=0;--vref; //se o botão foi pressionado (flag2==1)
e se o botão já foi solto (input(botao)) decremente vref
altovref=vref/256; baixovref=vref%256;
write_eeprom(10,altovref); write_eeprom(11,baixovref);
}// guarde o valor na de vref
nas posicões 10 e 11 da eeprom interna
//************************************************************************
*****
if (vatual>=vref) {output_high(rele); output_high(ledrele); } //Abre o relé, avisa com led
[ 133 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
if (vatual<=20) {output_low(rele); output_low(ledrele);} //Só desliga depois da descarga
//************************************************************************
*****
valorAD = read_adc(); // efetua a conversão A/D
vatual=((constante*5*valorAD)/1023);
//Regra de três:
5
--------1023
//
Tensão real (mV) -------ValorAD
lcd_pos_xy(1,2);
printf(lcd_escreve,"Vref=%lu Vat=%lu ",vref, vatual);
delay_ms(300);
}}
---------------------------------------------------------------------------------------------------------------
MODELAGEM DE SINAIS DE SENSORES
Uma das formas utilizadas para modelar sinais lineares e não lineares de sensores é
utilizando funções de aproximação por equação da reta. Esta técnica consiste em obter o
gráfico de resposta real tensão do sensor para diversas situações. Após a obtenção do
gráfico real, gerar funções lineares deste gráfico através da equação da reta, traçando
retas lineares próximas a curva real do gráfico não linear.
Esta técnica pode ser utilizada para diversos tipos de sensores, como LDR,
acelerômetro, etc.
EXEMPLO: MODELAGEM DE UM LUXÍMETRO MICROCONTROLADO COM LDR
LDR significa Light Dependent Resistor, ou seja, Resistor Variável Conforme Incidência
de Luz. Esse resistor varia sua resistência conforme a intensidade de radiação
eletromagnética do espectro visível que incide sobre ele.
Um LDR é um transdutor de entrada (sensor) que converte a (luz) em valores de
resistência. É feito de sulfeto de cádmio (CdS) ou seleneto de cádmio (CdSe). Sua
resistência diminui quando a luz é intensa, e quando a luz é baixa, a resistência no LDR
aumenta.
Um multímetro pode ser usado para encontrar a resistência na escuridão (geralmente
acima de 1MΩ) ou na presença de luz intensa (aproximadamente 100Ω).
O LDR é muito frequentemente utilizado nas chamadas fotocélulas que controlam o
acendimento de poste de iluminação e luzes em residências. Também é utilizado em
sensores foto-elétricos.
Este luxímetro tem em seu circuito sensor um LDR, um resistor divisor de tensão e
uma fonte de tensão estabilizada, como mostra a figura abaixo.
[ 134 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 10. 1: C
Circuito se
ensor com
m LDR.
Para
a obter este
e
circuito e os valores de
e tensão na saída para as diferentess
luminosida
ades, form
ma tidos po
or ANTON
NIETI, B. Em
E que ass mediçõess da tensão de saída
a
foram feita
as e colocadas em uma
u
tabelaa juntamen
nte com ass iluminânccias medid
das por um
m
luxímetro comercial da marca MINIPA, m
modelo ML
LM-1010, de
d 3 ½ díígitos , com
m precisão
o
de 4% da
a leitura + 0.5% do
o fundo dee escala, na faixa de
d 1 a 500000 Lux. Os valoress
encontrado
os são visttos na tab
bela abaixo
o. Os valorres em neg
grito foram
m considera
ados como
o
limite de ccada equaçção da reta
a.
Co
orrespondência entre a tensão da
d saída e a iluminânncia
Lux
2
5
12
20
36
60
94
130
1
180
2240
338
430
4
530
674
6
827
11000
1183
1404
1651
1923
Volt
4,9
9
4,9
4,8
4,7
4,5
4,3
4,1
4
3,8
33,6
3,3
3,1
3
3
2,8
2
2,7
22,5
2,4
2,3
2,1
2
Com base na tabela,, foi constrruído o grááfico da figura abaixo
o.
2500
(Lux)
2000
1500
1000
500
0
2
2,3
2,5
2
2,8
3,1
3,6
4
4,3
3
4,7
4,9
(V))
Fig
gura 10. 2
2: Gráfico
o Lux x Vo
olt.
Para simp
plificar o programa do
o PIC, foi modelado a curva do
o gráfico accima, divid
dindo-a em
m
três retas com o mostra a figura abaixo.
[ 135 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 10. 3: Mo
odelagem
m matemá
ática dos valores
v
o
obtidos.
programa funciona da
a seguinte maneira: lê o conversor A/D e multiplica esse valor
Op
por sua resolução (no caso
o de um converso
o AD de 10 bits, a resolução é de
e
aproximad
damente 5 mV), enco
ontrando eentão a ten
nsão (V), de
epois são ffeitas 3 comparaçõess
(IF) para ssaber qual das três equações
e
aacima deve
e ser utiliza
ada para ccalcular a iluminância
i
a
(Lux). A fiigura abaixxo mostra
a o novo g
gráfico lux versus vo
olts, utilizanndo as equações 03,
04 e 05.
Os ccálculos da
a equação geral de ccada reta são mostrad
dos a seguuir:
2500
0
(Lux)
2000
0
1500
0
1000
0
500
0
0
2 2,2 2,,4 2,6 2,8
3 3,2 3,4 3,6 3,8
4
4,2 4,4 4,6
6 4,8
5
(V
V)
F
Figura 10.. 4: Gráfic
co lux x te
ensão utillizando as
s equaçõe
es 3, 4 e 5.
5
[ 136 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
SUPERVISÓRIO
Esta
a interface
e foi dese
envolvida utilizando ambiente
e de prog ramação Delphi® e
através da
a emulaçã
ão via USB
B de um caanal serial COM virtual. A figura
ra 8 mostra
a a tela do
o
supervisórrio para iluminância e temperattura.
[ 137 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 10. 5: Fig
gura da te
ela do sup
pervisório
o para Iluminância
a e Tempe
eratura.
Veja
a abaixo, na
n figura abaixo,
a
o eesquema circuito
c
ele
etrônico moontado e a na figura
a
10, a foto
o do circuitto montado em operração. No final do tra
abalho é m
mostrado o programa
a
completo p
para ler a iluminância no canall AD 1 e a temperatu
ura do ambbiente com
m um LM35
5
no canal A
AD 0.
Figurra 10. 6: Esquema
E
eletrônic
co do circuito luxím
metro.
[ 138 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 10. 7: F
Foto do cirrcuito mo
ontado.
O lu
uxímetro mostrado
m
neste
n
trabaalho apressenta como
o uma sollução de baixo
b
custo
o
para apliccações ond
de não é necessáriio haver uma
u
grand
de precisãão nas me
edições. O
método do
o modelagem de currva pode seer aplicado
o em várias ocasiõess onde não
o se sabe a
equação que gero
ou o gráffico propo
osto. Isto
o ratifica a versatiilidade de
e sistemass
microcontrrolados.
// Program
ma Luxíme
etro digital + termôm
metro digita
al c/ comun
nicação viaa USB//
------------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
float tens,lux,temp;
main()
{
clock_int_4
4MHz();
lcd_ini();
usb_cdc_in
nit(); // Inicializa o protocolo
p
C
CDC
usb_init();; // Inicializza o protoccolo USB
usb_task()); // Une o periférico com a usb
b do PC
//while(!ussb_cdc_connected())) {} // espeera o proto
ocolo CDC se conectaar com o driver
d
CDC
//usb_waitt_for_enum
meration();; //espera até que a USB do Pic
c seja recoonhecida pelo
p
PC
1);
setup_adcc_ports(AN0_TO_AN1
setup_adcc(ADC_CLO
OCK_INTER
RNAL);
output_low
w(pin_b6);;
printf (lcd_
_escreve," \f ");
[ 139 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
while(1)
{
set_adc_channel(1);
delay_ms(20);
tens=5*(float)read_adc()/1023;
if (tens>2 && tens<2.8) {
lux=(3936.4-(1249*tens))/0.8; }
if (tens>=2.8 && tens<=3.8) {
if (tens>3.8) {
lux=2057.2-494*tens; }
lux=(900-180*tens)/1.2; }
if (tens>2) { //Leitura válida
lcd_pos_xy(1,1);
printf (usb_cdc_putc,"%.0f",lux);
delay_ms(50);
printf (usb_cdc_putc,"L");
printf (lcd_escreve,"Iluminancia: %.0f lux
",lux );
lcd_envia_byte(0,0x0C); //Apaga o cursor }
if (tens<=2)
//Leitura não válida
{
lcd_pos_xy(1,1);
printf (usb_cdc_putc,"Erro");
delay_ms(50);
printf (usb_cdc_putc,"L");
printf (lcd_escreve,"valor fora da faixa! ");
lcd_envia_byte(0,0x0C); //Apaga o cursor
}
delay_ms(30);
set_adc_channel(0);
delay_ms(20);
temp=500*(float)read_adc()/1023;
lcd_pos_xy(1,2);
printf (usb_cdc_putc,"%.1f",temp);
delay_ms(50);
printf (usb_cdc_putc,"T");
printf (lcd_escreve,"Temperatura: %.1f oC ",temp);
lcd_envia_byte(0,0x0C); //Apaga o cursor
delay_ms(800);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b6);
}
}
---------------------------------------------------------------------------------------------------------------
[ 140 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
INTER
RFACE I2C
I2C significa Inter-IC
I
(IIntegrated Circuit). Este barra
amento seerial foi de
esenvolvido
o
pela Philip
ps como o objetivo de conectarr CIs e perriféricos de
e diferentees fabricantes em um
m
mesmo cirrcuito, com
mo microco
ontroladorres, memórias extern
nas e relóógio em te
empo real,
usando o m
menor núm
mero de pinos possívvel. Este prrotocolo se
erial necesssita somen
nte de duass
linhas: um
ma linha se
erial de dados (SDA)) e uma de
e clock (SC
CL). Quanddo o baramento não
o
está em usso, as duas linhas ficcam em nívvel lógico alto
a forçada
as pelos reesistores de pull-up.
Figura
F
11.. 1: Barramento I2C.
C
O b
barramento
o serial, co
om transfeerência de
e 8 bits po
or vez, posssibilita co
omunicação
o
bidireciona
al com velo
ocidade de
e 100 Kbpss no modo
o Padrão, 400
4 Kbps nno modo Fast, ou até
é
3,4 Mbits/s no modo
o High-spee
ed.
Esta
a interface
e apresen
nta a filossofia multti-master onde
o
todoo CI da rede pode
e
transmitir ou recebe
er um dado
o, e o transsmissor ge
era o seu próprio
p
clocck de transmissão. O
número m
máximo de CIs que podem seer conectad
dos é limittado apennas pela ca
apacitância
a
máxima do
o barramento de 400
0pF.
Um exemplo típico
t
de co
onfiguraçã o I2C em TVs
T é mosttrado na figgura abaix
xo:
[ 141 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 11. 2: Configuraç
ção I2C em
m TVs.
REGRAS PARA TR
RANSFERÊ
ÊNCIA DE
E DADOS
alto.
Cad
da bit da liinha de da
ados só é llido quand
do o nível da
d linha de clock esttá em níveel
Figura 11. 3: Leiturra de dado
os em com
municaçã o.
As ccondições de partida
a e parada de transm
missão são sempre geeradas pelo
o MASTER
R.
O barrame
ento é con
nsiderado como
c
ocup
pado após a condiçã
ão de part ida, e livre
e um certo
o
período de
e tempo ap
pós a condição de paarada.
Uma transição
o de H pa
ara L da linha SDA
DA (start bit
bi ) durantee o tempo em que a
linha SCL permanecce em H, ou seja, um dado válido, é definido como con
ndição de
e
nsição de L para H da linha
a SDA (sto
op bit) duraante o período H daa
partida e uma tran
linha SCL, define um
ma condiçã
ão de para
rada.
Figurra 11. 4: Comandos
C
s de início
o e fim de
e comuniccação.
da byte é acompa
anhado d
de um bit
b de rec
conhecimeento obrig
gatório. O
Cad
reconhecim
mento é gerado pelo
o MASTER no décim
mo bit libe
erando a liinha SDA (nível alto))
durante a ocorrênciia do pulso de clockk de recon
nhecimento
o. Por suaa vez, o CI
C receptor
(SLAVE) é obrigado a levar a linha SDA
A a nível baixo durante o peeríodo H do clock de
e
reconhecim
mento.
Figura
a 11. 5: re
econhecim
mento do
o byte.
Se o SLAVE reconhecer
r
r o endereeço, mas depois
d
de algum tem
mpo na tra
ansferência
a
não receber mais ne
enhum bytte de dado
os, o MAST
TER deverá abortar a transferê
ência. Esta
a
[ 142 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
condição é indicada pelo SLAVE, devido à não geração do reconhecimento logo após a
recepção do primeiro byte de dados. O SLAVE deixa a linha de dados em nível H e o
MASTER gera a condição de parada.
Caso haja uma interrupção interna no SLAVE durante a transmissão, ele deverá levar
também a linha de clock SCL a nível L, forçando o MASTER a entrar em um modo de
espera.
Para escrever um dado nos escravos é necessário enviar um byte de endereço do
escravo, onde os 4 bits mais significativos identificam o tipo de escravo (por exemplo,
memórias EEPROM é 1010 ou 0xa0 e RTC é 1101 ou 0xd0 (com exceção do RTC
PCF8583 cujo endereço também é 0xa0). Os 3 bits intermediários especificam de um
até 8 dispositivos, que são discriminados nos pinos de endereço de cada escravo, e o bit
menos significativo R/W indica se a operação é de leitura (1) ou escrita (0). Após isso,
deve-se enviar uma palavra de 8 ou16 bits de endereço onde se quer escrever e depois o
dado. No final do pacote uma condição de parada (i2c_stop).
Figura 11. 6: Escrita de dados.
Função da biblioteca I2C que descreve essa operação de escrita em memória EEPROM:
--------------------------------------------------------------------------------------------------------------void escreve_eeprom(byte dispositivo, long endereco, byte dado)
// Escreve um dado em um endereço do dispositivo
// dispositivo - é o endereço do dispositivo escravo (0 - 7)
// endereco - é o endereço da memória a ser escrito
// dado - é a informação a ser armazenada
{
if (dispositivo>7) dispositivo = 7;
i2c_start();
i2c_escreve_byte(0xa0 | (dispositivo << 1)); // endereça o dispositivo livrando o LSB que
é o R\W
i2c_le_ack();
// Lê reconhecimento do escravo
i2c_escreve_byte(endereco >> 8); // parte alta do endereço de 16 bits
i2c_le_ack();
i2c_escreve_byte(endereco); // parte baixa do endereço de 16 bits
i2c_le_ack();
i2c_escreve_byte(dado);
// dado a ser escrito
i2c_le_ack();
i2c_stop();
delay_ms(10); // aguarda a programação da memória
[ 143 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
--------------------------------------------------------------------------------------------------------------Para a operação de leitura de um escravo é necessário um start repetido e no final do
pacote um sinal de não-reconhecimento (nack) e uma condição de parada (i2c_stop).
Figura 11. 7: Recepção e transmissão de dado.
A Função da biblioteca I2C que descreve este protocolo de operação de leitura de
memória EEPROM é a seguinte:
--------------------------------------------------------------------------------------------------------------byte le_eeprom(byte dispositivo, long int endereco)
// Lê um dado de um endereço especificado no dispositivo
// dispositivo - é o endereço do dispositivo escravo (0 - 7)
// endereco - é o endereço da memória a ser escrito
{
byte dado;
if (dispositivo>7) dispositivo = 7;
i2c_start();
i2c_escreve_byte(0xa0 | (dispositivo << 1)); // endereça o dispositivo
i2c_le_ack();
i2c_escreve_byte((endereco >> 8)); // envia a parte alta do endereço de 16 bits
i2c_le_ack();
i2c_escreve_byte(endereco); // envia a parte baixa do endereço de 16 bits
i2c_le_ack();
i2c_start();
//repetido start
// envia comando para o escravo enviar o dado
i2c_escreve_byte(0xa1 | (dispositivo << 1)); endereça o dispositivo e colocando em
leitura 0xa1
i2c_le_ack();
dado = i2c_le_byte()
// lê o dado
i2c_nack();
i2c_stop();
return dado;
---------------------------------------------------------------------------------------------------------------
[ 144 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
MEMÓRIA
A EEPROM
M EXTERN
NA I2C
Para
a sistemass embarcad
dos em qu e são nece
essários a aquisição dde dados de
d mais de
e
256 bytess (capacid
dade da EEPROM
E
i nterna do
os microco
ontroladorees), é necessária a
utilização de memórrias EEPRO
OM externaals. Os mod
delos maiss comuns ssão o 24LC
C e 24C256
6
(256 Kbitts que co
orresponde
e a 32Kb
bytes). Esstas memó
órias posssuem oito
o pinos e
apresentam
m, entre outras
o
característicass, interfacce de comunicação II2C. A figura abaixo
o
mostra o ccircuito sim
mples de um
ma EEPRO
OM I2C ligada nn ferra
amenta SaanUSB.
Figurra 11. 8: Uso
U de me
emória EE
EPROM ex
xterna via
a I2C.
O p
programa abaixo
a
mo
ostra o arm
mazenamento de valores digittal de tenssão de 0 a
5000mV de um pote
enciômetro, a cada seegundo, em
m um buffe
er (região de memórria circular))
de 150 re
egistros de
e 16 bits na memó
ória EEPRO
OM externa
a, ou sejaa, 300 byttes, que é
mostrado via emulaçção serial somente
s
qu
uando a te
ecla ‘L’ é pressionada
p
a.
--------------------------------------------------------------------------------------------------------------------#include <
<SanUSB.h
h>
#include <
<usb_san_
_cdc.h>// Biblioteca
B
p
para emula
ação da co
omunicaçãoo serial
#include <
<i2c_sanussb.c>
unsigned iint16 i,j,en
ndereco=0
0, posicao=
=0, valorgrravado;
int32 tenssao_lida32; //Varia de 0 a 5
5000mV (16bits), mas
m
é int332 porque o cãlculo
o
ultrapassa 65536
int8 byte1,byte2,byte
e3,byte4; //
/ 4 Partess do valor int32
i
tensa
ao_lida32
ando;
char coma
[ 145 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
int conv_dec_4bytes(int32 valor32) //Converte decimal de 32 bits em 4 bytes
{
int32 resultado1=0,resultado2=0;
resultado1 = valor32/256; byte1 = valor32%256; //o que for resto (%) é menos
significativo
resultado2 = resultado1/256; byte2= resultado1%256;
byte3= resultado2%256; byte4 = resultado2/256;
return(byte4,byte3,byte2,byte1);
}
main() {
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
setup_adc_ports(AN0); //Habilita entradas analógicas - A0
setup_adc(ADC_CLOCK_INTERNAL);
while(1){
set_adc_channel(0);
delay_ms(10); //Tensão é 32bis porque o produto 5000* read_adc() de 10 bits (1023)
pode ser maior que 65536
tensao_lida32=(5000*(int32)read_adc())/1023; //Calcula a tensão Trimpot em mV:
5000mV
- 1023 (10bis)
printf (usb_cdc_putc,"\r\n tensao do Trimpot = %lu mV\r\n",tensao_lida32);//
tensao_lida - read_adc();
conv_dec_4bytes(tensao_lida32);
//printf
(usb_cdc_putc,"\r\nVariavel
em
%x\r\n",byte4,byte3,byte2,byte1);//Debug
Hexadecimal
=
%x
%x
posicao=2*endereco; //Endereço é o ponteiro de cada valor de 2 bytes (16 bits)
escreve_eeprom( 0, posicao, byte2); //segundo Byte menos significativo do int32
escreve_eeprom( 0, posicao+1, byte1 ); //Byte menos significativo do int32
//printf
(usb_cdc_putc,"\r\nEndereco
=
%lu
Posicao
%lu\r\n",endereco,posicao);//Debug
%x
=
++endereco; if (endereco>=150){endereco=0;} //Buffer de 300 bytes posicao<=300
//****************LEITURA
DO
BUFFER
DA
EEPROM
EXTERNA***************************
if (usb_cdc_kbhit(1)) //Se existe carater digitado entre na função
{comando=usb_cdc_getc();
if (comando=='L'){
printf(usb_cdc_putc, "\r\n\nEEPROM:\r\n"); // Display contém os primeiros 64 bytes em
hex da eeprom externa i2c
[ 146 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
for(i=0; i<10; ++i)) { //10lin
nhas * 30ccolunas = 300
3 bytes (int16 i,j)
or(j=0; j<1
15; ++j) {
fo
ado= 256*
*le_eeprom
m(0,(i*30)+
+2*j) + le_
_eeprom(0
0,(i*30)+2 *j+1); //150 Valoress
valorgrava
de 16 bits ou 300 de
e 8 bits.
printf(usb
b_cdc_putcc, "%lu ", vvalorgravad
do );
}
printtf(usb_cdc_putcc, "\n\r");
}}}
//***********
**************
*************
***************************************
*****
output_toggle(p
pin_b7);
delay_ms((1000);
}}
Figura 11
1. 9: Leitu
ura de valores da memória.
m
.
RTC (R
RELÓGIIO EM TEMPO
T
REAL)
O R
Real Timee Clock I2C DS13077 é um relógio/cale
endário seerial de baixo custo
o
controlado
o por um cristal exterrno de 32.7
768 Hz. A comunicaç
ção com o DS1307 é através de
e
2
interface sserial I C (SCL e SDA). Oito bytes de RAM do RTC são usados pa
ara função
o
relógio/callendário e são config
gurados naa forma Binary Code
ed Decimal – BCD. É possível a
retenção dos dadoss na falta
a de enerrgia utiliza
ando uma
a bateria de lítio de 3V 500mA/h
h conectad
da ao pino 3.
[ 147 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Figura 12. 1: RTC DS1307 e similar.
Para representar números decimais em formato binário, o relógio DS1307, bem
como calculadoras e computadores utilizam o código BCD, que incrementa a parte alta do
byte hexadecimal quando o número da parte baixa é maior que 9. Isto é possível somando
6 (0110b) ao resultado maior que 9. Este código facilita a transmissão de dados e a
compreensão do tempo, tendo em vista que em formato hexadecimal, apresenta o valor
em decimal.
Para transformar decimal em BCD, é possível dividir o número binário (byte) por 10
e colocar o resultado isolado das dezenas no nibble alto do byte BCD e o resto, ou seja, as
unidades, no nibble baixo do byte BCD.
Para iniciar o relógio DS1307, após o power-on, é necessário incrementar os
segundos quando estiverem todos os registros da RAM em zero. A bateria GP 3.6V garante
o funcionamento do relógio e também o processamento do PIC16F877A. Testes indicaram
que a bateria suportou o processamento e incremento automático do relógio por cerca de
sete horas sem alimentação externa.
Figura 12. 2: Registros de tempo DS1307.
[ 148 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
//PROGRAMA PARA CONFIGURAR E LER UM RELÓGIO RTC I2C VIA MONITOR
SERIAL/////////////////////
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para emulação da comunicação serial
#include <i2c_sanusb.c>
Char entrada,funcao,endrtc,valorrtc1,valorrtc2;
unsigned int endereco, valor,valorbcd, numquant;
boolean led;
/*************************************************************************
****
* Conversão BCD P/ DECIMAL
**************************************************************************
**/
int bcd_to_dec(int valorb)
{
int temp;
temp = (valorb & 0b00001111);
temp = (temp) + ((valorb >> 4) * 10);
return(temp);
}
/*************************************************************************
****
* Conversão DECIMAL p/ BCD
**************************************************************************
***/
int dec_para_bcd(unsigned int valord)
{
return((0x10*(valord/10))+(valord%10));//Coloca a parte alta da divisão por 10 no nibble
mais significativo
}
//////////////////////////////////////////////////////////////////////////////////
main() {
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
while (1) {
//************************************************************************
*****
if (usb_cdc_kbhit(1)) { //verifica se acabou de chegar um novo dado no buffer de
recepção, depois o kbhit é zerado
entrada=usb_cdc_getc(); //comando é o Byte recebido pela serial usb_cdc_putc,
[ 149 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
if (entrada=='A')
{ funcao=usb_cdc_getc();
switch (funcao) //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06 ou 23 ou 15
{
////////////////////////FUNCAO 4: CONFIGURA RELÓGIO//////////////////////////////Ex: A4H09
case '4':
{
endrtc=usb_cdc_getc();
valorrtc1=usb_cdc_getc();
valorrtc2=usb_cdc_getc(); //Ex: A4M43 - Altera os minutos para 43
if (endrtc=='H') { endereco=2;} //Escreve o endereco das horas
if (endrtc=='M') { endereco=1;} //Escreve o endereco dos minutos
if (endrtc=='S') { endereco=0;} //Escreve o endereco dos segundos
if (endrtc=='D') { endereco=4;} //Escreve o endereco do dia
if (endrtc=='N') { endereco=5;} //Escreve o endereco do mes
if (endrtc=='Y') { endereco=6;} //Escreve o endereco do ano
if (valorrtc1>='0'&&valorrtc1<='9') {numquant=(valorrtc1-0x30);}
if (valorrtc2>='0'&&valorrtc2<='9') {numquant=numquant*10+(valorrtc2-0x30);
valor=numquant;
if (endereco==0) { if(valor>59) {valor=0;}}
if (endereco==1) { if(valor>59) {valor=0;}}
if (endereco==2) { if(valor>23) {valor=0;}}
if (endereco==4) { if(valor>31) {valor=1;}}
if (endereco==5) { if(valor>12) {valor=1;}}
if (endereco==6) { if(valor>99) {valor=0;}}
//---------Converte byte hexadecimal para byte BCD decimal -------------valorbcd=dec_para_bcd(valor);
//----------------------------------------------------------------------escreve_rtc(endereco,valorbcd); //Valor1 é byte BCD (decimal).
printf(usb_cdc_putc,"\r\nA5 %2x:%2x:%2x",le_rtc(2), le_rtc(1),le_rtc(0)); //BCD em
hexadecimal representa o decimal
printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6));
}
}
break;
//////////////////////FUNCAO 5: LÊ RELÓGIO/////////////////////Ex: A5- Lê o relógio e o
calendário
case '5':
printf(usb_cdc_putc,"\r\nA5 %2x:%2x:%2x",le_rtc(2), le_rtc(1),le_rtc(0));//BCD em
hexadecimal representa o decimal
printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6));
break;
}}}
//************************************************************************
*****
led = !led; // inverte o led de teste
output_bit (pin_b7,led);
delay_ms(500);
[ 150 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
}
}
--------------------------------------------------------------------------------------------------------------------
EXEMPLO
O: PROTÓ
ÓTIPO DAT
TALOGGE
ER USB DE
E BAIXO C
CUSTO
Em muitos siistemas de
e aquisição
o de dado
os e contro
ole é neceessária a medida de
e
algumas g
grandezas físicas, como
c
exem
mplo, tem
mperatura, pressão e velocida
ade, entre
e
outras. Ta
ais grandezzas são ine
erentes a aalguns fenô
ômenos físsicos e, em
m geral, sua natureza
a
é analógicca. Isto é, trata-se
t
de
e variáveis que assum
mem valore
es contínuoos e reais,, diferentess
de sinais digitais que são de
escontínuo
os e expre
essados se
egundo reepresentaçã
ão binária.
Comumente quando
o as saída
as analógi cas dos sensores
s
são
s
processsadas por sistemass
digitais, há
á a necesssidade do condicionam
c
mento do sinal para que os sinnais proven
nientes doss
sensores ssejam adeq
quados às característticas de um
m converso
or AD. Assiim, com o uso de um
m
microcontrrolador do
otado de um
u converrsor interno AD para
a aquisiçãoo de dado
os, o valor
analógico convertido
o para digital é proccessado pe
elo software de conttrole de acordo com
m
decisões ló
ógicas base
eadas em comparaçõ
ões ou em operaçõess matemátticas.
A bateria em paralelo co
om a fontee de alimentação tem
m uma graande relevâ
ância neste
e
projeto de
e aquisição
o de dadoss. Além dee evitar re
eset por qu
ueda de teensão, ela permite a
mudança da fonte de alimen
ntação da USB para
a a fonte externa ssem desco
onexão do
o
sistema.
O cconversor TTL/EIA-2
232 Max23
32 é utiliza
ado para conexão ddo módulo
o GPRS ao
o
sistema, cujos comandos AT sã
ão descrito
os no próxiimo tópico.
Figura 1
13. 3: Dattalogger.
[ 151 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Este sistema de aquisição de dados USB é Dual Clock, ou seja, utiliza duas fontes de
clock, uma para o canal USB de 48MHz, proveniente do oscilador externo de 20MHz, e
outra para o processador na execução do protocolo i2c, proveniente do oscilador RC
interno de 4 MHz. (#byte OSCCON=0XFD3 //Aponta o registro do oscilador interno para
configuração de 4MHz na função Main -> OSCCON=0B01100110;).
Figura 12. 4: Comunicação PIC com PC e via I2C.
--------------------------------------------------------------------------------------------------------------/////////////////////////////////////////////////////////////////////////
//// Este programa utiliza duas fontes de clock, uma para o canal USB////
//// de 48MHz proveniente do oscilador externo de 20MHz e outra para ////
//// o processador na execução do protocolo i2c, proveniente do
////
//// oscilador interno 4 de MHz//////////////////////////////////////////
//// O Watch Dog Timer (WDT) protege contra travamento do programa /////
////////////////////////////Cabeçalho Padrão/////////////////////////////
#include <SanUSB.h>
//#device ADC=8
#include ".\include\usb_san_cdc.h"// Biblioteca para comunicação serial
#include <i2c_dll16sanc.c>
char escravo,funcao,sensor,endrtc,
valorrtc1,valorrtc2,posmeme1,posmeme2,posmeme3,posmeml1,posmeml2,posmeml3,posq
uant1,posquant2;
unsigned int ender, endereco, val, valor,valorbcd;
unsigned int mult=2,end=0, reg, numquant;
unsigned
int16
hora,horadec,minuto,minutodec,segundo,segundodec,dia,diadec,mes,mesdec,ano,anodec;
unsigned int16 i, j,numpose, numposl,num16,endpromext,k,puloext,bufferdia;
int8 regi[2];
boolean led,ledint,flagwrite;
/*************************************************************************
****
* Conversão BCD P/ DECIMAL
*******************************************************************/
int bcd_to_dec(int valorb)
[ 152 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
{
int temp;
temp = (valorb & 0b00001111);
temp = (temp) + ((valorb >> 4) * 10);
return(temp);
}
/*************************************************************************
****
* Conversão DECIMAL p/ BCD
***************************************************************/
int dec_para_bcd(unsigned int valord)
{
return((0x10*(valord/10))+(valord%10));//Coloca a parte alta da divisão por 10 no
nibble mais significativo
}
//////////////////////////////////////////////////////////////////////////////////
#int_timer1
void trata_t1 ()
{--mult;
if (!mult)
{mult=2; // 2 *(48MHz/4MHz) - 4 seg
hora=le_rtc(2);
minuto=le_rtc(1);
segundo=le_rtc(0);
dia=le_rtc(4);
mes=le_rtc(5);
ano=le_rtc(6);
ledint = !ledint; // inverte o led de teste - pisca a cada 2 *12 interrupcoes = 1 seg.
output_bit (pin_b0,ledint);
reg= read_adc(); //Tensão e corrente
//escreve_eeprom(0,end,reg); não funciona a escrita i2c dentro da interrupção do timer
write_eeprom( end, reg );
++end; if(end>=127){end=0;}
segundodec=bcd_to_dec(segundo);minutodec=bcd_to_dec(minuto);horadec=bcd_to_dec(
hora);
diadec=bcd_to_dec(dia);mesdec=bcd_to_dec(mes);anodec=bcd_to_dec(ano);
if (segundodec==05 &&
(minutodec==00||minutodec==10||minutodec==20||minutodec==30||minutodec==40||
minutodec==50))
//if
((segundodec==00||segundodec==10||segundodec==20||segundodec==30||segundodec
==40||segundodec==50))
{flagwrite=1;}
//endpromext=(minutodec/10)+(horadec*6)+((diadec-1)*24*6*2)+24*6*k;
//endpromext=(segundodec/10)+(minutodec*6); }//Não aceita
DE JEITO NENHUM
escrever na eeprom ext por interrupção do timer via i2c
[ 153 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
//printf(usb_cdc_putc,"\n\rEndpromext = %lu e reg = %u \n\r, segundodec =
%lu\n\r",endpromext,reg,segundodec); //Aceita imprimir via USB
set_timer1(3036 + get_timer1()); }} // Conta 62.500 x 8 = 0,5s
//////////////////////////////////////////////////////////////////////////////////
main() {
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
OSCCON=0B01100110; //Clock interno do processador de 4MHZ
setup_adc_ports(AN0_TO_AN1); //Habilita entradas analógicas - A0 A1
setup_adc(ADC_CLOCK_INTERNAL); //Configuração do clock do conversor AD
enable_interrupts (global); // Possibilita todas interrupcoes
enable_interrupts (int_timer1); // Habilita interrupcao do timer 1
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8);// inicia o timer 1 em 8 x 62500 = 0,5s
set_timer1(3036);
setup_wdt(WDT_ON); //Habilita o temporizador cão de guarda - resseta se travar o
programa principal ou ficar em algum usb_cdc_getc();
while (1) {
//************************************************************************
*****
if (flagwrite==1) {flagwrite=0; //Flag de gravação setada na interrupção do timer quando
chega a hora de gravar
k=0;
for(k=0;k<2;k++)
{
set_adc_channel(k);
delay_ms(20);
regi[k]= read_adc(); //Tensão M1[0], correnteM1[1]
endpromext=(minutodec/10)+(horadec*6)+((diadec-1)*24*6*2)+24*6*k;
//endpromext=(segundodec/10)+(minutodec*6)+((diadec-1)*60*6*2)+60*6*k;
//Para
teste 60 em vez de 24
escreve_eeprom(0,endpromext, regi[k]);
printf(usb_cdc_putc,"\r\nPosicao = %lu -> Sensor[%lu] = %u\r\n",endpromext,k,regi[k]);
}
}
//************************************************************************
*****
led = !led; // inverte o led de teste
output_bit (pin_b7,led);
restart_wdt(); // Limpa a flag do WDT para que não haja reset
[ 154 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
delay_ms(500);
//************************************************************************
*****
if (usb_cdc_kbhit(1)) { //verifica se acabou de chegar um novo dado no buffer de
recepção, //depois o kbhit é zerado para próximo dado
escravo=usb_cdc_getc(); //comando é o Byte recebido pela serial usb_cdc_putc,
if (escravo=='A')
{ funcao=usb_cdc_getc();
switch (funcao) //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06 ou 23 ou 15
{
//************************************************************************
*****
case '4':
{
endrtc=usb_cdc_getc();
valorrtc1=usb_cdc_getc();
valorrtc2=usb_cdc_getc();
//Ex: A4M43 - Altera os minutos para 43
if
if
if
if
if
if
(endrtc=='H') { endereco=2;}
(endrtc=='M') { endereco=1;}
(endrtc=='S') { endereco=0;}
(endrtc=='D') { endereco=4;}
(endrtc=='N') { endereco=5;}
(endrtc=='Y') { endereco=6;}
//Escreve o endereco das horas
//Escreve o endereco dos minutos
//Escreve o endereco dos segundos
//Escreve o endereco do dia
//Escreve o endereco do mes
//Escreve o endereco do ano
if (valorrtc1>='0'&&valorrtc1<='9') {numquant=(valorrtc1-0x30);}
if (valorrtc2>='0'&&valorrtc2<='9') {numquant=numquant*10+(valorrtc2-0x30);
valor=numquant;
if
if
if
if
if
if
(endereco==0)
(endereco==1)
(endereco==2)
(endereco==4)
(endereco==5)
(endereco==6)
{
{
{
{
{
{
if(valor>59)
if(valor>59)
if(valor>23)
if(valor>31)
if(valor>12)
if(valor>99)
{valor=0;}}
{valor=0;}}
{valor=0;}}
{valor=1;}}
{valor=1;}}
{valor=0;}}
//---------Converte byte hexadecimal para byte BCD decimal -------------valorbcd=dec_para_bcd(valor);
//----------------------------------------------------------------------escreve_rtc(endereco,valorbcd); //Valor1 é byte BCD (decimal).
//printf(usb_cdc_putc,"\r\nVALOR ESCRITO = %2x\r\n",valorbcd);
//printf(usb_cdc_putc,"\r\nPOSICAO = %2x\r\n",endereco);
[ 155 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
hora=le_rtc(2);minuto=le_rtc(1);segundo=le_rtc(0);
printf(usb_cdc_putc,"\r\nA4%2x:%2x:%2x",hora, minuto,segundo);
printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6));
}
}
break;
//////////////////////FUNCAO 5: LÊ RELÓGIO////////////////////////Ex: A5- Lê o relógio e o
calendário
case '5':
printf(usb_cdc_putc,"\r\nA5 %2x:%2x:%2x",le_rtc(2), le_rtc(1),le_rtc(0));
printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6));
break;
//////////////////////FUNCAO 6: LÊ BUFFER EEPROM/////////////////////Ex: A6 09(DIA)
0(SENSOR)
case '6':{
posmeme1=usb_cdc_getc();
posmeme2=usb_cdc_getc();
sensor=usb_cdc_getc();
0x30);}
if (posmeme1>='0' && posmeme1<='9') {bufferdia=(posmeme1-0x30);}
if (posmeme2>='0' && posmeme2<='9') {bufferdia=bufferdia*10+(posmeme2if (sensor>='0' && sensor<='1') {k=(sensor-0x30);}
printf(usb_cdc_putc,"Buffer Sensor %lu - Dia %lu\r\n",k,bufferdia);
delay_ms(10);
//puloext=((bufferdia-1)*60*6*2)+60*6*k;// Seleciona buffer de teste de tensao
puloext=((bufferdia-1)*24*6*2)+24*6*k;// Seleciona buffer
for(i=0; i<6; ++i)
{
//for(j=0;
j<60;
++j)
{printf(usb_cdc_putc,"%2u
le_eeprom(0,puloext+(i*60+j)) );}
//"%2u\n\r" para gerar gráfico no excell
for(j=0;
j<24;
++j){printf(usb_cdc_putc,"%2u
le_eeprom(0,puloext+(i*24+j)) );}
delay_ms(15);
}
printf(usb_cdc_putc,"\r\n"); //posiciona próxima linha
}
break;
",
",
}}}
}
}
---------------------------------------------------------------------------------------------------------------
[ 156 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
TRANSMISSÃO DE DADOS VIA GSM
A sigla GSM significa Global Standard Mobile ou Global System for Mobile
Communications que quer dizer Sistema Global para Comunicações Móveis. O GSM é um
sistema de celular digital baseado em divisão de tempo, como o TDMA, e é considerado a
evolução deste sistema, pois permite, entre outras coisas, a troca dos dados do usuário
entre telefones através do SIM Card e acesso mais rápido a serviços WAP e Internet,
através do sistema GPRS.
A transmissão de dados GSM pode ser feita por:
- GPRS (General Package Radio Service): É uma conexão em uma rede de pacote de
dados. Uma vez conectado nessa rede, o sistema estará sempre on line, podendo transferir
dados imediatamente. O GPRS é compatível com o protocolo de rede TCP/IP e as
operadoras de GSM disponibilizam um gateway para a Internet, possibilitando conectar e
controlar equipamentos wireless através da Internet. Como o GPRS é baseado no protocolo
IP, ele necessita de autenticação de um servidor da internet.
- SMS (Short Message Service): É o serviço de envio/recebimento de pequenas mensagens
de texto do tipo datagrama, sem autenticação de um servidor de internet.
Os Modems GSM são controlados através de comandos AT. Esses comandos são
normalizados pelas normas GSM 07.07 e GSM 07.05.
A manipulação do modem pode ser realizada em algum emulador de comunicação
serial como o Hyperterminal, nele deve-se ajustar para 9600 bps,e não esquecendo de
instalar o SIM Card no modem.
COMANDOS AT PARA ENVIAR MENSAGENS SMS DE UM COMPUTADOR PARA UM
CELULAR OU MODEM GSM
A seguinte tabela lista os commandos AT para escrever e enviar mensagens SMS:
Comando AT
Significado
+CMGS
Envia mensagem
+CMSS
Envia uma mensagem armazenada
+CMGW
Escreve uma mensagem na memória
+CMGD
Apaga mensagem
+CMGC
Envia comando
+CMMS
Envia mais mensagens
Exemplo feito com um computador:
1-AT
2-OK
3- AT+CMGF=1
4- OK
[ 157 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
5-AT+CMGS="+558588888888" //<ctrl + z (minúsculo)> digita-se o texto após >
6->
Teste
de
mensagem
7- OK
+CMGS:
170
OK
Abaixo está o significado de cada linha:
1- Testa conexão com o modem.
2- Modem conectado.
3- Coloca o celular no modo texto.
4- Modo texto confirmado.
5- Número do telefone que irá receber a mensagem.
6- O modem retorna o caractere “>” solicitando a mensagem a ser enviada (ao final: “ctrl
z”).
7- Mensagem enviada.
COMANDOS AT PARA RECEBER MENSAGENS SMS EM UM COMPUTADOR
ENVIADAS POR UM CELULAR OU MODEM GSM
A seguinte tabela lista os commandos AT para receber e enivair mensagens SMS:
Comando AT
Significado
+CNMI
New message indications
+CMGL
Lista mensagens
+CMGR
Lê menssagens
+CNMA
Reconhecimento de nova menssagem
Exemplo feito com um computador:
AT
OK
AT+CMGF=1
OK
AT+CMGL="ALL"
+CMGL: 1,"REC READ","+85291234567",,"06/11/11,00:30:29+32"
Hello, welcome to our SMS tutorial.
+CMGL: 2,"REC READ","+85291234567",,"06/11/11,00:32:20+32"
A simple demo of SMS text messaging.
Adiante é apresentado um exemplo de como enviar uma mensagem SMS do modem
GSM para um celular com uso do PC. Os comandos enviados ao modem estão em negrito
para diferenciar de suas respostas.
[ 158 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
1-AT
2-OK
3- AT+CM
MGF=1
4- OK
5-AT+CM
MGS="+55
58588888
8888"
6->Intrus
são
7- OK
As figu
uras abaixxo apresen
ntam a fotto em pro
otoboard e o circuitto esquem
mático para
a
transmissã
ão GPRS/G
GSM. A conexão
c
U
USB observado no esquemaa, foi utiliizada pela
a
ferramenta
a SanUSB para a alim
mentação d
do circuito
o e gravaçã
ão do proggrama no PIC
P atravéss
do PC. O LED verde
e foi usado por estaa ferramen
nta para sinalizar o momento em que o
sistema esstava no modo
m
de gravação. O vermelho simulou o acionameento do alarme, como
o
descrito a
anteriormen
nte. As ch
haves coneectadas aos pinos 23, 24 e 25, representam ass
chaves sin
nalizadorass dos três sensore s utilizado
os. A figu
ura abaixoo mostra também
t
o
dispositivo
o MAX232 usado na interface RS/EIA-23
32 entre o microconttrolador e o modem.
Este, repre
esentado na
n figura apenas
a
pello conector DB9, posssui o pinoo 2 para trransmissão
o
de dados e o 3 parra recepçã
ão, já que se trata de um equipamentoo do tipo DCE (Data
ta
Comunicattion Equipm
ment).
[ 159 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 14. 1: Esque
emático e foto do datalogge
d
er conecta
ado ao PIC.
#include <
<SanUSB.h
h>
short int lledpisca;
#USE RS2
232 (BAUD=9600,XMIT=PIN_C6
6,RCV=PIN
N_C7,strea
am=PC)
main(){
clock_int_4
4MHz();
printf("AT+
+CMGF=1\\r"); //configura mod
do texto pa
ara o mode
em
/ ledpisca é igual ao
o inverso de ledpisca
ledpisca=!!ledpisca; //
output_bitt(pin_b7,le
edpisca); /// b7 recebee o valor de ledpisca
delay_ms((2000);
printf("AT+
+CMGS=\""+5585888
888888\"\rr"); //5- En
nvia para o numero dde destino
ledpisca=!!ledpisca;
output_bitt(pin_b7,le
edpisca);
delay_ms((2000);
do\r"); //6 - escreve a mensage
em para o modem GSSM
printf("Alarme atuad
putc(0x1A
A); // contro
ol z
[ 160 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
ledpisca=!ledpisca;
output_bit(pin_b7,ledpisca);
delay_ms(2000);
putc(0x0D);
while(TRUE){
output_high(pin_B7);
delay_ms(500);
output_low(pin_B7);
delay_ms(500);
}}
O PROTOCOLO MODBUS EMBARCADO
O protocolo Modbus foi desenvolvido pela Modicon Industrial Automation Systems,
hoje Schneider, para comunicar um dispositivo mestre com outros dispositivos escravos.
Embora seja utilizado normalmente sobre conexões seriais padrão EIA/RS-232 e EIA/RS485, ele também pode ser usado como um protocolo da camada de aplicação de redes
industriais tais como TCP/IP sobre Ethernet.
Este é talvez o protocolo de mais utilizado em automação industrial, pela sua
simplicidade e facilidade de implementação.
A motivação para embarcar um microcontrolador em uma rede MODBUS pode ser
por:
- Baixo custo;
- Tamanho reduzido;
- Alta velocidade de processameto (1 a 12 MIPs);
- Possuir 10 canais ADs internos com resolução de 10 bits;
- Ferramentas de desenvolvimento gratuitas e possibilidade de programação da memória
de programa sem necessidade de hardware adicional, bastando uma porta USB;
- Estudo das características construtivas de hardware e de software de uma rede MODBUS.
MODELO DE COMUNICAÇÃO
O protocolo Modbus é baseado em um modelo de comunicação mestre-escravo,
onde um único dispositivo, o mestre, pode iniciar transações denominadas queries. O
demais dispositivos da rede (escravos) respondem, suprindo os dados requisitados pelo
mestre ou executando uma ação por ele comandada. Geralmente o mestre é um sistema
supervisório e os escravos são controladores lógico-programáveis. Os papéis de mestre e
escravo são fixos, quando se utiliza comunicação serial, mas em outros tipos de rede, um
dispositivo pode assumir ambos os papéis, embora não simultaneamente.
[ 161 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figu
ura 14. 1:: Checage
em de dad
dos.
DETECÇÃ
ÃO DE ERR
ROS
Há dois meca
anismos para detecçção de errros no pro
otocolo Moodbus serial: bits de
e
paridade e
em cada ca
aractere e o frame ch
heck seque
ence ao fin
nal da men
nsagem. O modo RTU
U
utiliza com
mo frame check seq
quence um
m valor de 16 bits para
p
o CR
RC (ciclic redundance
r
e
16
15
1
2
check), utilizando co
omo polinô
ômio, P(x) = x + x + x + 1.
1 O registrro de cálcu
ulo do CRC
C
deve ser in
nicializado com o valor 0xffff.
MODOS DE
D TRANS
SMISSÃO
Exisstem doiss modos de transm
missão: ASCII
A
(American Coode for Information
n
Interchang
ge) e RTU (Remote Terminal
T
U
Unit), que são selecio
onados duurante a co
onfiguração
o
dos parâm
metros de comunicaçã
c
ão.
Com
mo a comu
unicação ge
eralmente utilizada em
e automação industtrial é em modo
m
RTU,
o projeto p
proposto fo
oi desenvo
olvido nestaa forma de
e comunica
ação.
A implementação prática
p
de um proj eto com o modbuss embarcaado é mo
ostrada no
o
diagrama d
de blocos abaixo.
[ 162 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura
a 14. 2: Diagrama
D
de blocos comunicação Mo
odBus.
Para
a testar a comunica
ação com escravo Modbus
M
(m
microcontroolador) em
m protocolo
o
RTU, atravvés da porrta serial emulada
e
peela USB do
o PC, é po
ossível utilizzar o Modbus Tester
que é um software livre de Mestre
M
MOD
DBUS escrrito em C+
++. Ele podde ser utillizado para
a
testar se o desenvolvimento das
d rotinass de proce
essamento do protoccolo Modbu
us contidass
no microcontroladorr. Durante o teste é possível utilizar
u
tam
mbém um sistema supervisório
o
real como o Elipse SCADA.
Figura
a 14. 3: So
oftware d
de teste de
d comunicação Mo
odBus.
Os sistemas supervisórrios são so
oftwares que
q
permittem que ssejam mon
nitoradas e
rastreadass informaçõ
ões de um processo produtivo ou instalaç
ção física. T
Tais inform
mações são
o
coletadas através de
e equipam
mentos de aquisição de dadoss e, em seeguida, ma
anipuladas,
analisadass, armazen
nadas e posteriorm
mente aprresentadas ao usuáário. Estess sistemass
também sã
ão chamad
dos de SCA
ADA (Superrvisory Con
ntrol and Data
D
Aquisiition).
[ 163 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Para comunicar com o supervisório Elipse é necessário instalar um driver dedicado a
comunicação ModBus RTU, que é fornecido gratuitamente pela própria Elipse.
O modo Modbus RTU com microcontrolador PIC desse projeto, mostrado no link
http://www.youtube.com/watch?v=KUd1JkwGJNk , suporta funções de leitura (3)
e escrita (16).
--------------------------------------------------------------------------------------------------------------#include <SanUSB.h>
#include <usb_san_cdc.h>// Biblioteca para comunicação serial
#byte port_a = 0xf80
#byte port_b = 0xf81
long int checksum = 0xffff;
unsigned int x,i,y,z;
unsigned char lowCRC;
unsigned char highCRC;
int tamanhodata;
int32 buffer[100];
void CRC16 (void) //Modo RTU
{
for (x=0; x<tamanhodata; x++)
{
checksum = checksum^(unsigned int)buffer[x];
for(i=8;i>0;i--)
{
if((checksum)&0x0001)
checksum = (checksum>>1)^0xa001;
else
checksum>>=1;
}
}
highCRC = checksum>>8;
checksum<<=8;
lowCRC = checksum>>8;
buffer[tamanhodata] = lowCRC;
buffer[tamanhodata+1] = highCRC;
checksum = 0xffff;
}
void ler (void)
{
buffer[2]=usb_cdc_getc();
buffer[3]=usb_cdc_getc();
buffer[4]=usb_cdc_getc();
buffer[5]=usb_cdc_getc();
buffer[6]=usb_cdc_getc();
buffer[7]=usb_cdc_getc();
delay_ms(3);
[ 164 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
buffer[2]=0x02;
buffer[3]=0x00;
buffer[4]=port_a; //o buffer[4] leva o valor de entrada da porta A do microcontrolador
para o SCADA
tamanhodata = 5;
CRC16();
}
void rxler (void) //Leu a porta a no buffer[4] e escreve o CRC no buffer[5] e [6], pois
tamanhodata = 5
{
printf(usb_cdc_putc,"%c%c%c%c%c%c%c",buffer[0],buffer[1],buffer[2],buffer[3],buffer[
4],buffer[5],buffer[6]); // 6 bytes
}
void escrever (void)
{
buffer[2]=usb_cdc_getc();
buffer[3]=usb_cdc_getc();
buffer[4]=usb_cdc_getc();
buffer[5]=usb_cdc_getc();
buffer[6]=usb_cdc_getc();
buffer[7]=usb_cdc_getc();
buffer[8]=usb_cdc_getc();
buffer[9]=usb_cdc_getc();
buffer[10]=usb_cdc_getc();
delay_ms(3);
tamanhodata = 6;
CRC16();
port_b = buffer[8]; //A porta B do microcontrolador recebe o valor enviado pelo SCADA
}
void rxescrever (void)
{
printf(usb_cdc_putc,"%c%c%c%c%c%c%c%c",buffer[0],buffer[1],buffer[2],buffer[3],buff
er[4],buffer[5],buffer[6],buffer[7]); //7 bytes
}
main()
{
clock_int_4MHz();
usb_cdc_init(); // Inicializa o protocolo CDC
usb_init(); // Inicializa o protocolo USB
usb_task(); // Une o periférico com a usb do PC
set_tris_b(0b00000000);
while(1)
[ 165 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
{
if (usb_cdc_kbhit(1))
{
//verifica se acabou de chegar um novo dado no buffer USB, depois o kbhit é zerado para
próximo dado
buffer[0]=usb_cdc_getc();
z = buffer[0];
if (z==1) //verifica se o endereco do slave e igual a 1
{
buffer[1]=usb_cdc_getc(); //verifica a função contida no segundo byte buffer[1]
y = buffer[1];
}
if (y==3) //verifica se a função é para leitura e encaminha para leitura de variável do
microcontrolador
{
}
ler();
rxler();
if (y==16) //verifica se a função é para escrita no microcontrolador, ou seja, comando de
atuação do uC
{
escrever();
rxescrever();
}
}
}
}
--------------------------------------------------------------------------------------------------------------O fluxograma desse firmware é mostrado abaixo:
[ 166 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Figura 14
4. 4: Flux
xograma d
do sistema de comunicação
o ModBus..
Notte que a co
omunicação
o serial dessse projeto
o foi emula
ada via USB
B, para ap
plicação em
m
um processso real é necessário
n
utilizar um
m transcepttor ou TTL
L/EIA-232 ((MAX232) ou
transcepto
or ou TTL/E
EIA-485 (M
MAX485). C
Com o MOD
DBUS emb
barcado é ppossível inttegrar um
microcontrrolador, prreservando
o as limitaçções de fun
nções, em um processso de auto
omação
industrial q
que utiliza esse proto
ocolo.
INTRODU
UÇÃO À SISTEMAS
S
S OPERAC
CIONAIS EM
E TEMPO REAL (R
RTOS)
Um sistem
ma operacio
onal em te
empo real (RTOS) é um progrrama (geraalmente ch
hamado de
e
kernel), qu
ue controla a alocaçção de tareefas quand
do o proce
essador esstá operando em um
m
ambiente multitarefa
as (multita
asking) con correntes.
O uso de
d um sisttema operaacional em
m tempo real (RTOS) para proccessamento
o
de multita
arefas é uma realidade cadaa vez ma
ais presente nos prrojetos de
e sistemass
embarcado
os. A fe
erramenta computaacional Sa
anUSB im
mplementaa um RT
TOS livre,
desenvolviido pelo russo Victo
or Timofeeev, atravéss dos compiladores M
MPLABX C18
C
e CCS,
baseado e
em interrup
pção de tem
mporizadorres.
[ 167 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
Uma das principais cara
acterísticass de um RT
TOS é a ca
apacidade de processsar tarefass
eja, tarefass paralelass. Dessa forma, o RTOS
R
tornaa a progra
amação de
e
concorrenttes, ou se
projetos rreais mais simples, pois bastaa descreve
er cada ta
arefa em uuma funçã
ão task do
o
firmware, que o RTO
OS se enca
arrega do gerenciam
mento do processo. D
Dessa forma, O RTOS
S
é baseado
o na ideia de
d multitarrefas (multtithread), onde cada
a tarefa é uuma funçã
ão em C do
o
firmware e
em laço inffinito.
Em um sistem
ma multitarrefa, inúmeeras tarefa
as exigem tempo da CPU, e um
ma vez que
e
existe ape
enas uma CPU, é ne
ecessária aalguma forrma de organização e coorden
nação pelo
o
RTOS para
a que cada
a tarefa te
enha o tem
mpo que ne
ecessita. Na
N prática, cada tare
efa tem um
m
intervalo d
de tempo muito currto, assim parece que as tare
efas são eexecutadass de forma
a
paralela e simultânea
a.
Com
mo
exxemplo,
estão
dispon
níveis
uma
vídeo-aula
em
m
http://www
w.youtube
e.com/watcch?v=s6BG
G8ZN0aDk
as
em
m
e
os
programa
https://dl.dropbox.co
om/u/1019
922388/RT
TOSB.zip pa
ara os com
mpiladores CCS e MP
PLABX C18.
As duas práticas desscritas aba
aixo de RT
TOS foram desenvolvidas com a placa Sa
anUSB, que
e
ser
c
construída
os
o
tuttoriais
disponíve
eis
em
m
pode
seguiindo
https://dl.dropbox.co
om/u/1019
922388/12 1007SanUSBOrig.zip .
Prática 1
1: Nesta prrática o RT
TOS execu
uta em paralelo 3 ta
arefas conccorrentes e paralelass
em loop infinito pa
ara aciona
ar 3 leds, conectados nos pinos B7, B
B6 e B5, de forma
a
independe
ente.
Prática 2: Nesta prá
ática o RTO
OS executaa em parallelo:
1Tare
efa de leitu
ura do AD com poten
nciômetro para modificar a veloocidade de
e brilho doss
leds;
2Tare
efa de rota
ação de oitto leds na porta B; e
3Tare
efa que in
nverte o sentido
s
de rotação dos
d leds por
p botão no pino 1 (PIN_E3))
utilizando display de sete segm
mentos com
mo leds.
OBS: Dentro de cad
da projeto
o ‚ necessáário inserir o cabeç
çalho OSAccfg.h, com
mo descrito
o
abaixo, q
que deve in
ndicar a quantidade de tarefass e as característicass do proje
eto como a
prioridade das tarefa
as.
#ifndef _OS
SACFG_H
#define _OS
SACFG_H
_TASKS
3
#define OS_
#define OS_
_DISABLE_PR
PRIORITY
[ 168 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
#define OS_
_ENABLE_TT
TIMERS
Qua
ase todos os sistema
as baseado
os em miccrocontrola
adores exeecutam ma
ais de uma
a
atividade e trabalha
am em tem
mpo real. Por exem
mplo, um sistema
s
dee monitora
amento da
a
temperatu
ura é com
mposto de três tareffas que, normalmente, que se repete
e após um
m
pequeno in
ntervalo de
e tempo, a saber:
- Tarefa 1 lê a tempe
eratura;
- Tarefa 2 Formata o valor da temperatu
t
ra;
emperatura
a;
- Tarefa 3 exibe a te
MÁQUINA
AS DE EST
TADO
As máquinas de estado são sim
mples consstruções usadas
u
parra executa
ar diversass
atividades, geralmen
nte em um
ma sequênccia. Muitos sistemas da
d vida reaal que se enquadram
e
m
nesta cate
egoria. Po
or exemplo
o, o funciionamento
o de uma máquina de lavar roupa ou
u
máquina d
de lavar louça é facillmente desscrito com uma máq
quina de esstado de construção
c
.
Talvez o m
método ma
ais simpless de impleementar um
ma máquin
na de estaado em C é usar um
m
switch-casse. Por exxemplo, no
osso siste ma de monitoramento de teemperatura
a tem trêss
tarefas, no
omeado Ta
arefa 1, Tarefa 2, Tarrefa 3 e, co
omo mostrrado na Figgura abaixo.
Figu
ura 15. 1:: Impleme
entação de
d máquin
na de esta
ado.
A m
máquina de
d estado executa as três ta
arefas usa
ando declaarações sw
witch-case.
O estado inicial é 1, é inccrementad o a cada
a tarefa do
d Estadoo para se
elecionar o
próximo estado a se
er executad
do. O últim
mo estado seleciona o estado 11, e há um
m atraso no
o
final do sswitch-casse. A máq
quina de estado é executad
da continuuamente no
n interior
de um laço
o infinito.
[ 169 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
F
Figura 15.. 2: Máquina de esttado implementad
da em Ling
guagem C.
C
Em muitas ap
plicações, os
o estadoss não precisam ser executados
e
s em seqüê
ência. Pelo
o
contrário, o próximo
o estado é selecionad
do direto pelo
p
estado
o atual ou baseado em
e alguma
a
condição.
Figura 15. 3: Selecion
nando o p
próximo estado
e
a partir
p
do e
estado attual.
[ 170 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
O RTOS também
m é o respo
onsável porr decidir o agendame
ento (scheeduling) da sequência
a
as a serem
m executa
adas consiiderando os
o níveis de prioriddade ou pelo
p
tempo
o
das tarefa
máximo de
e execução
o de cada tarefa.
t
UTILIZ
ZANDO
O COPILA
C
ADOR C18
E A IDE MPLABX
M
X
MUL
LTIPLAT
TAFORM
MA COM
M FUNÇ
ÇÕES EM PORT
TUGUÊS
1) Insttale o MPLLABX e o co
ompilador C18. É posssível baixa
ar gratuita mente o MPLABX
M
ea
verssão
C1
18
Lite
e
para
a
o
sistema
operaccional
desejado
o
(htttp://www.m
microchip.com/page
ehandler/en-us/fam
mily/mplab
bx/#downlo
oads)
2) Para compilarr os progra
amas com o C18 e o SanUSB, basta
b
abrir o Projeto1
1C18.X em
m
http
ps://dl.dropbox.com//u/1019223
388/ProjSa
anUSB1_MPLABX/Proojeto1C18.X
X.zip
.
Tod
dos
essses
prog
gramas
estão
disponíve
eis
no
Grupo
SanUSB
B
(ww
ww.tinyurl.com/Sa
anUSB).
Dep
pois de instalado é possív el abrir o projeto MPLAX cclicando em Open
n
projecct e escolh
her o proje
eto Projeto
o1C18.X. É possível visualizar o program
ma com um
m
duplo cclique sobrre pisca.c. Para comp
pilar presssione Build
d and Cleann (ícone co
om martelo
o
e vasso
oura). Parra compilar outros p
programas..c basta modifica-lo
m
os ou criá--los com a
extensã
ão .c dentrro da mesm
ma pasta d
do projeto Projeto1C
C18.X.
Fig
gura 16. 1:
1 Projeto
o pisca LED
D no com
mpilador C
C18.
[ 171 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
FUNÇÕES EM PORTUGUÊS
Este capítulo descreve todas as funções em português da biblioteca SanUSB no C18.
É importante salientar que além dessas funções, são válidas as funções padrões ANSI C e
também as funções do compilador C18 detalhadas na pasta instalada C:\MCC18\doc. A fim
de facilitar o entendimento, as funções SanUSB foram divididas em oito grupos, definidos
por sua utilização e os periféricos do hardware que estão relacionadas.
FUNÇÕES BÁSICAS DA APLICAÇÃO DO USUÁRIO
Este grupo de funções define a estrutura do programa uma vez que o usuário deve
escrever o programa.c de sua aplicação.
O microcontrolador possui um recurso chamado watchdog timer (wdt) que nada
mais é do que um temporizador cão-de-guarda contra travamento do programa. Caso seja
habilitado habilita_wdt() na função principal main(), este temporizador está configurado
para contar aproximadamente um intervalo de tempo de 16 segundos. Ao final deste
intervalo, se a flag limpa_wdt() não for zerada, ele provoca um reset do microcontrolador e
conseqüentemente a reinicialização do programa. A aplicação deve permanentemente zerar
a flag limpa_wdt() dentro do laço infinito (while(1)) na função principal main() em
intervalos de no máximo 16 segundos. Este recurso é uma segurança contra qualquer
possível falha que venha travar o programa e paralisar a aplicação. Para zerar o wdt, o
usuário pode também utilizar a função ClrWdt() do compilador C18.
A seguir estão as características detalhadas destas funções.
clock_int_4MHz()
Função: Habilita o clock para a processador do oscilador interno de 4MHz.
Argumentos de entrada: Não há.
Argumentos de saída: Não há.
Observações: O clock padrão proveniente do sistema USB interno do PIC é de 48MHz
gerado a partir do cristal de 20 MHz. Isto é possível através de um multiplicador interno de
clock do PIC. A função _int_4MHz() habilita, para o processador do microcontrolador, o
oscilador RC interno em 4 MHz que adéqua o período de incremento dos temporizadores
em 1us. É aconselhável que seja a primeira declaração da função principal main().
Exemplo:
#include “SanUSB1.h”
void main (void) {
clock_int_4MHz();
nivel_alto()
[ 172 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Função: Força nível lógico alto (+5V) em uma saída digital.
Argumentos de entrada: Nome da saída digital que irá para nível lógico alto. Este nome é
construído pelo inicio pin_ seguido da letra da porta e do número do pino. Pode ser
colocado também o nome de toda a porta, como por exemplo, portb.
Argumentos de saída: Não há.
Observações: Não há.
Exemplo:
nivel_alto(pin_b7); //Força nível lógico 1 na saída do pino B7
nivel_alto(portb); //Força nível lógico 1 em toda porta b
nivel_baixo()
Função: Força nível lógico baixo (0V) em uma saída digital.
Argumentos de entrada: Nome da saída digital que irá para nível lógico baixo. Este nome é
construído pelo inicio pin_ seguido da letra da porta e do número do pino. Pode ser
colocado também o nome de toda a porta, como por exemplo, portc.
Argumentos de saída: Não há.
Observações: Não há.
Exemplo:
nivel_baixo(pin_b7); //Força nível lógico 0 na saída do pino B7
nivel_baixo(portc); //Força nível lógico 0 em toda porta c
saída_pino(pino,booleano)
Função: Acende um dos leds da placa McData.
Argumentos de entrada: Pino que irá receber na saída o valor booleano, valor booleano 0
ou 1.
Argumentos de saída: Não há.
Observações: Não há.
Exemplo:
ledpisca=!ledpisca;
saida_pino(pin_b0,ledpisca);
// ledpisca é igual ao inverso de ledpisca
// b0 recebe o valor de ledpisca
tempo_us()
Função: Tempo em múltiplos de 1us.
Argumentos de entrada: Tempo de delay que multiplica 1 us.
Argumentos de saída: Não há.
Observações: Esta instrução só é finalizada ao final do tempo determinado, ou seja, esta
função “paralisa” a leitura do programa durante a execução. Exemplo:
tempo_us(200); //Delay de 200 us
[ 173 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
tempo_ms()
Função: Tempo em múltiplos de 1 ms.
Argumentos de entrada: Tempo de delay que multiplica 1 ms.
Argumentos de saída: Não há.
Observações: Esta instrução só é finalizada ao final do tempo determinado, ou seja, esta
função “paralisa” a leitura do programa durante a execução. Exemplo:
tempo_ms(500);
//Delay de 500 ms
entrada_pin_xx
Função: Lê nível lógico de entrada digital de um pino.
Argumentos de entrada: Não há.
Observações: Este nome é construído pelo inicio entrada_pin_ seguido da letra da porta e
do número do pino.
Exemplo:
ledXOR = entrada_pin_b1^entrada_pin_b2;
pinos b1 e b2
//OU Exclusivo entre as entradas dos
habilita_interrupcao()
Função: Habilita as interrupções mais comuns do microcontrolador na função main().
Argumentos de entrada: Tipo de interrupção: timer0, timer1, timer2, timer3, ext0, ext1,
ext2, ad e recep_serial.
Argumentos de saída: Não há.
Observações: As interrupções externas já estão habilitadas com borda de descida. Caso se
habilite qualquer interrução deve-se inserir o desvio _asm goto interrupcao _endasm na
função void _high_ISR (void){ } da biblioteca SanUSB.h
Exemplo:
habilita_interrupcao(timer0);
habilita_interrupcao(ext1);
if(xxx_interrompeu)
Função: Flag que verifica, dentro da função de tratamento de interrupções, se uma
interrupção específica ocorreu.
Complemento: timer0, timer1, timer2, timer3, ext0, ext1, ext2, ad e serial.
Argumentos de saída: Não há.
Observações: A flag deve ser zerada dentro da função de interrupção.
Exemplo:
#programa interrupt interrupcao
void interrupcao()
{
if (ext1_interrompeu)
{
//espera a interrupção externa 1 (em B1)
[ 174 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
ext1_interrompeu = 0;
//limpa a flag de interrupção
PORTBbits.RB0 =! PORTBbits.RB0;} //inverte o LED em B0
if (timer0_interrompeu)
{
//espera o estouro do timer0
timer0_interrompeu = 0;
//limpa a flag de interrupção
PORTBbits.RB0 =! PORTBbits.RB0; //inverte o LED em B7
tempo_timer16bits(0,62500); } }
liga_timer16bits(timer,multiplicador)
Função: Liga os timers e ajusta o multiplicador de tempo na função main().
Argumentos de entrada: Timer de 16 bits (0,1ou 3) e multiplica que é o valor do prescaler
para multiplicar o tempo.
Argumentos de saída: Não há.
Observações: O timer 0 pode ser multiplicado por 2, 4, 6, 8, 16, 32, 64, 128 ou 256. O
Timer 1 e o Timer 3 podem ser multiplicados por 1, 2, 4 ou 8.
Exemplo:
liga_timer16bits(0,16); //Liga timer 0 e multiplicador de tempo igual a 16
liga_timer16bits(3,8); //Liga timer 0 e multiplicador de tempo igual a 8
tempo_timer16bits(timer,conta_us)
Função: Define o timer e o tempo que será contado em us até estourar.
Argumentos de entrada: Timer de 16 bits (0,1ou 3) e tempo que será contado em us (valor
máximo 65536).
Argumentos de saída: Não há.
Observações: O Não há.
Exemplo:
habilita_interrupcao(timer0);
liga_timer16bits(0,16);
//liga timer0 - 16 bits com multiplicador (prescaler) 16
tempo_timer16bits(0,62500);
//Timer 0 estoura a cada 16 x 62500us = 1
seg.
habilita_wdt()
Função: Habilita o temporizador cão-de-guarda contra travamento do programa.
Argumentos de entrada: Não há.
Argumentos de saída: Não há.
Observações: O wdt inicia como padrão sempre desabilitado. Caso seja habilitado na
função principal main(), este temporizador está configurado para contar aproximadamente
um intervalo de tempo de 16 segundos. Ao final deste intervalo, se a flag limpa_wdt() não
for zerada, ele provoca um reset do microcontrolador e conseqüentemente a reinicialização
do programa. Exemplo:
#include “SanUSB1.h”
[ 175 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
void main (void) {
clock_int_4MHz();
habilita_wdt();
//Habilita o wdt
limpaflag_wdt()
Função: limpa a flag do wdt
Argumentos de entrada: Não há.
Argumentos de saída: Não há.
Observações: Caso o wdt seja habilitado, a flag deve ser limpa em no máximo 16 segundos
para que não haja reinicializaçção do programa. Geralmente esta função é colocada dentro
do laço infinito while(1) da função principal main(). É possível ver detalhes no programa
exemplowdt.c e utilizar também a função ClrWdt() do compilador C18 .
Exemplo:
#include “SanUSB1.h”
void main (void) {
clock_int_4MHz();
habilita_wdt();
while(1) {
limpaflag_wdt();
.....
.....
tempo_ms(500);
}
escreve_eeprom(posição,valor)
Função: Escrita de um byte da memória EEPROM interna de 256 bytes do
microcontrolador.
Argumentos de entrada: Endereço da memória entre 0 a 255 e o valor entra 0 a 255.
Argumentos de saída: Não há.
Observações: O resultado da leitura é armazenado no byte EEDATA.
Exemplo:
escreve_eeprom(85,09); //Escreve 09 na posição 85
le_eeprom()
Função: Leitura de um byte da memória EEPROM interna de 256 bytes do
microcontrolador.
Argumentos de entrada: Endereço da memória entre 0 a 255.
Argumentos de saída: Não há.
Observações: O resultado da leitura é armazenado no byte EEDATA.
Exemplo:
dado=le_eeprom(85);
[ 176 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
FUNÇÕES DO CONVERSOR ANALÓGICO DIGITAL (A/D)
As funções a seguir são utilizadas para a aquisição de dados utilizando as entradas
analógicas.
habilita_canal_AD()
Função: Habilita entradas analógicas para conversão AD.
Argumentos de entrada: Número do canal analógico que irá ser lido. Este dado habilita um
ou vários canais AD e pode ser AN0, AN0_a_AN1 , AN0_a_AN2 , AN0_a_AN3,
AN0_a_AN4, AN0_a_AN8, AN0_a_AN9, AN0_a_AN10, AN0_a_AN11, ou AN0_a_AN12.
Argumentos de saída: Não há.
Observações: Não há.
Exemplo:
habilita_canal_AD(AN0); //Habilita canal 0
le_AD8bits()
Função: Leitura de uma entrada analógica com 8 bits de resolução.
Prototipagem: unsigned char analog_in_8bits(unsigned char).
Argumentos de entrada: Número do canal analógico que irá ser lido. Este número pode ser
0, 1 , 2 , 3, 4, 8, 9, 10, 11 ou 12.
Argumentos de saída: Retorna o valor da conversão A/D da entrada analógica com
resolução de 8 bits.
Observações: Não há.
Exemplo:
PORTB = le_AD8bits(0); //Lê canal 0 da entrada analógica com resolução de 8 bits e
coloca na porta B
le_AD10bits()
Função: Leitura de uma entrada analógica com 8 bits de resolução.
Prototipagem: unsigned char analog_in_8bits(unsigned char).
Argumentos de entrada: Número do canal analógico que irá ser lido. Este número pode ser
0, 1 , 2 , 3, 4, 8, 9, 10, 11 ou 12.
Argumentos de saída: Retorna o valor da conversão A/D da entrada analógica com
resolução de 10 bits.
Observações: Não há.
Exemplo:
resultado = le_AD10bits(0);//Lê canal 0 da entrada analógica com resolução de 10 bits
[ 177 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
FUNÇÕES DA COMUNICAÇÃO SERIAL RS-232
As funções a seguir são utilizadas na comunicação serial padrão RS-232 para enviar
e receber dados, definir a velocidade da comunicação com o oscilador interno 4MHz.
As configurações da comunicação são: sem paridade, 8 bits de dados e 1 stop bit. Esta
configuração é denominada 8N1 e não pode ser alterada pelo usuário.
taxa_serial();
Função: Configura a taxa de transmissão/recepção (baud rate) da porta RS-232
Argumentos de entrada: Taxa de transmissão/recepção em bits por segundo (bps)
Argumentos de saída: Não há.
Observações: O usuário deve obrigatoriamente configurar taxa_rs232() da comunicação
assíncrona antes de utilizar as funções le_serial e escreve_serial. As taxas programáveis
são 1200 bps, 2400 bps, 9600 bps, 19200 bps.
Exemplo:
void main() {
clock_int_4MHz();
habilita_interrupcao(recep_serial);
taxa_rs232(2400); // Taxa de 2400 bps
while(1);
//programa normal parado aqui
}
le_serial();
Função: Lê o primeiro caractere recebido que está no buffer de recepção RS-232.
Argumentos de entrada: Não há.
Argumentos de saída: Não há.
Observações: Quando outro byte é recebido, ele é armazenado na próxima posição livre do
buffer de recepção, cuja capacidade é de 16 bytes. Exemplo:
#pragma interrupt interrupcao
void interrupcao()
{ unsigned char c;
if (serial_interrompeu) {
serial_interrompeu=0;
c = le_serial();
if (c >= '0' && c <= '9')
{ c -= '0';
PORTB = c;} }}
escreve_serial();
Função: Transmite um byte pela RS-232.
Argumentos de entrada: O dado a ser transmitido deve ser de 8 bits do tipo char.
Argumentos de saída: Não há.
Observações: A função escreve_serial não aguarda o fim da transmissão do byte. Como
não existe um buffer de transmissão o usuário deve garantir a transmissão com a função
[ 178 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
envia_byte( ) para enviar o próximo byte.
Exemplo:
escreve_serial(PORTC); //escreve o valor da porta C
while (envia_byte());
escreve_serial('A'); // escreve A
while (envia_byte());
EXEMPLOS DE PROGRAMAS
//1- Programa para piscar 3 leds na porta B
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao() {}
void main(){
clock_int_4MHz();
while (1)
{
nivel_alto(pin_b0); // Pisca Led na função principal
tempo_ms(500);
nivel_baixo(pin_b0);
nivel_alto(pin_b6);
tempo_ms(500);
nivel_baixo(pin_b6);
nivel_alto(pin_b7);
tempo_ms(500);
nivel_baixo(pin_b7);
tempo_ms(500);
}
}
//2- Programa de aplicação da função OU Exclusivo e NOT
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao() {}
short int ledXOR, ledpisca;
void main(void){
clock_int_4MHz();
[ 179 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
while(1)
{
ledXOR = entrada_pinb1^entrada_pinb2; //OU exclusivo entre os pinos b1 e b2 ->input
saida_pino(pin_b7,ledXOR);
//O pino B7 recebe o valor de LedXOR
ledpisca=!ledpisca;
saida_pino(pin_b0,ledpisca);
tempo_ms(500);
}
}
// ledpisca é igual ao inverso de ledpisca
// b0 recebe o valor de ledpisca
//3- Utiliza a interrupção externa 1, do timer 0 e do timer3
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao()
{
if (timer0_interrompeu)
{
//espera o estouro do timer0
timer0_interrompeu = 0;
//limpa a flag de interrupção
PORTBbits.RB0 =! PORTBbits.RB0; //Pisca o LED em B7
tempo_timer16bits(0,62500); }
if (timer3_interrompeu)
{
//espera o estouro do timer0
timer3_interrompeu=0;
//limpa a flag de interrupção
PORTBbits.RB7 =! PORTBbits.RB7; //Pisca o LED em B7
tempo_timer16bits(3,50000); }
if (ext1_interrompeu)
{
//espera a interrupção externa 1 (em B1)
ext1_interrompeu = 0;
//limpa a flag de interrupção
PORTBbits.RB0 =! PORTBbits.RB0; //altera o LED em B0
tempo_ms(100);
}
//Delay para mascarar o ruido do botão(Bouncing)
}
void main()
{
clock_int_4MHz();
TRISB = 0b01111110;
//B0 e B7 como Saída
habilita_interrupcao(timer0);
liga_timer16bits(0,16);
//liga timer0 - 16 bits com multiplicador (prescaler) 8
tempo_timer16bits(0,62500);
//Conta 16 x 62500us = 1 seg.
habilita_interrupcao(timer3);
liga_timer16bits(3,8);
//liga timer1 - 16 bits com multiplicador (prescaler) 8
tempo_timer16bits(3,50000);
//Conta 8 x 50000us = 0,4 seg.
[ 180 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
habilita_interrupcao(ext1);
// habilita a interrupção externa 1 com borda de descida
while(1);
}
//4- Programa que utiliza o wdt, reseta em 16 seg. se a limpaflag_wdt() não for limpa
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao() {}
void main(){
clock_int_4MHz();
habilita_wdt(); // Se a flag wdt não foor limpa (limpaflag_wdt();) reseta em 16 segundos.
nivel_alto(pin_b0);
nivel_alto(pin_b7);
tempo_ms(3000);
}
while (1)
{
//limpaflag_wdt();
nivel_alto(pin_b0); // Pisca Led na função principal
nivel_baixo(pin_b7);
tempo_ms(500);
nivel_baixo(pin_b0);
nivel_alto(pin_b7);
tempo_ms(500);
}
//5- Lê o canal AD em 8 e 10 bits e grava o resultado na EEPROM interna
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao() {}
unsigned int resultado; //16 bits
int b1=0,b2=0,endprom,endereco=0;
void main(){
clock_int_4MHz();
TRISB=0x00; //Porta B saída
habilita_canal_AD(AN0);
while(1){
PORTB = le_AD8bits(0);//Lê canal 0 da entrada analógica com resolução de 8 bits e coloca
na porta B escreve_eeprom(endprom, PORTB);
[ 181 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
resultado = le_AD10bits(0);//Lê canal 0 da entrada analógica com resolução de 10 bits
(ADRES)
b1=resultado/256; b2=resultado%256; //Quebra o resultado em 2 bytes
escreve_eeprom( endprom+1, b1); escreve_eeprom( endprom+2, b2 );
++endereco; //Incrementa endereco
if(endereco>=75){endereco=0;}
endprom=3*endereco;
tempo_ms(1000); }
}
//6 - Utiliza interrupção serial por recepção de caractere e interrupção do timer0
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao()
{
unsigned char c;
if (serial_interrompeu) {
serial_interrompeu=0;
c = le_rs232();
if (c >= '0' && c <= '9')
{ c -= '0'; PORTA = c;}
PORTBbits.RB0 =! PORTBbits.RB0; //Inverte o LED em B0
tempo_ms(500);
if (timer0_interrompeu)
{
//espera o estouro do timer0
timer0_interrompeu = 0;
//limpa a flag de interrupção
PORTBbits.RB7 =! PORTBbits.RB7; //Inverte o LED em B7
tempo_timer16bits(0,62500); }
}
}
void main()
{
clock_int_4MHz();
TRISB = 0b01111110;
//B0 e B7 como Saída
habilita_interrupcao(recep_serial);
taxa_rs232(9600);
habilita_interrupcao(timer0);
liga_timer16bits(0,16);
//liga timer0 - 16 bits com multiplicador (prescaler) 16
tempo_timer16bits(0,62500);
//Conta 16 x 62500us = 1 seg.
putrsUSART ( (const far rom char *) "\n\rDigite um numero de 0 a 9!\n\r");
[ 182 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
escreve_rs232(PORTC); //escreve valor da PORTC
while (envia_byte());
escreve_rs232('A'); // escreve A
while (envia_byte());
while(1);
}
7 - Abaixo é mostrado um programa com a configuração para a interrupção do timer 0, em
que pisca alera o estado de um LED a cada 0,5 segundo no pino B7 e também a
interrupção externa 1 (com pull-up externo no pino B1) em que muda e estado de outro
LED no pino B0. Em seguida são mostrados os registros de configuração do timer 0 e das
interrupções.
#include <SanUSB1.h>
#pragma interrupt interrupcao
void interrupcao()
{
if (INTCONbits.TMR0IF)
{
//espera o estouro do timer0
INTCONbits.TMR0IF = 0;
//limpa a flag de interrupção
PORTBbits.RB7 =! PORTBbits.RB7; //Pisca o LED EM B7
TMR0H=0X0B ; TMR0L=0xDC ; }
//Carrega 3036 = 0x0BDC (65536-3036 -> conta
62500us x 8 = 0,5seg)
if (INTCON3bits.INT1IF)
{
//espera a interrupção externa 1 (em B1)
INTCON3bits.INT1IF = 0;
//limpa a flag de interrupção
PORTBbits.RB0 =! PORTBbits.RB0; }
//altera o LED em B0
delay_ms(100);
//Delay para mascarar o ruido do botão(Bouncing)
}
void main()
{
clock_int_4MHz();
TRISB = 0b01111110;
//B0 e B7 como Saída
RCONbits.IPEN = 1;
INTCONbits.GIEH = 1;
INTCONbits.TMR0IE = 1;
T0CON = 0b10000010;
interno
//apenas interrpções de alta prioridade (desvio 0x808)
//Habilita interrupções de alta prioridade (0x808)
// habilita a interrupção do TMR0
//setup_timer0 - 16 bits com prescaler 1:8 e oscilador
INTCON3bits.INT1IE = 1;
INTCON2bits.INTEDG1 = 0;
borda de descida
// habilita a interrupção externa 1 (pino B1)
// habilita que a interrupção externa 1 ocorra somente na
while (1);
}
[ 183 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
RCONbits.IPEN = 1;
INTCONbitts.GIEH = 1;
INTCONbit
its.TMR0IE
E = 1;
INTCON2b
bits.INTEDG
DG1 = 0;
descida
INTCON3b
bits.INT1IE
E = 1;
if (INTCO
ON3bits.INT
NT1IF)
INTCON3b
bits. INT1IF = 0;
//Habilita
/
in
nterrupçõe
es de alta prioridade
p
(0x808)
/// habilita a interrupçã
ão do TMR
R0
// habilit
ita que a interrupção
in
o externa 1 ocorra na borda dee
// habilita a interrupçã
ção externa
a1
{
//espera o estouro do
d timer0
//lim
mpa a flag de
d interruppção
[ 184 ]
Aplicações práticas
p
de Eletrrônica e microcoontroladores em
m sistemas comp
putacionais, porr Sandro Jucá
T0CON = 0b10000010;
interno
INTCON3b
bits.INT1IE
E = 1;
if (INTCO
ON3bits.INT
NT1IF)
INTCON3b
bits. INT1IF = 0;
T0CON = 0b10000010;
interno
//seetup_timerr0 - 16 bitss com presscaler 1:8 e oscilador
// habilita a interrupçã
ção externa
a1
{
//espera o estouro do
d timer0
//lim
mpa a flag de
d interruppção
//seetup_timerr0 - 16 bitss com presscaler 1:8 e oscilador
[ 185 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
APÊNDICE I: CABEÇALHOS
DIVERSOS COMPILADORES
DA
FERRAMENTA
CCS C Compiler
#include <18F4550.h> //This library 18F4550.h is valid for the whole family USB PIC18Fx5xx
#device ADC=10
#fuses HSPLL,PLL5, USBDIV,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG
#byte OSCCON=0XFD3
#use delay(clock=48000000)// USB standard frequency (cpu and timers 12 MIPS = 4/48MHz)
//#use delay(clock=4000000) // internal Oscillator Clock of 4MHz
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
//SanUSB program memory allocation
#define CODE_START 0x1000
#build(reset=CODE_START, interrupt=CODE_START+0x08)
#org 0, CODE_START-1 {}
void clock_int_4MHz(void)
{
//OSCCON=0B01100110; //with dual clock -> cpu and timers #use delay(clock=4000000)
while(read_eeprom(0xfd));
}
C18 compiler
/* www.tinyurl.com/SanUSB
*/
[ 186 ]
PARA
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#include "p18F4550.h"
void low_isr(void);
void high_isr(void);
#pragma code low_vector=0x1018
void interrupt_at_low_vector(void)
{
_asm GOTO low_isr _endasm
}
#pragma code
#pragma code high_vector=0x1008
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
#pragma code
#pragma interruptlow low_isr
void low_isr (void)
{
return;
}
[ 187 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
#pragma interrupt high_isr
void high_isr (void)
{
return;
}
void main( void )
{
...;
}
SDCC
Example Format
/* www.tinyurl.com/SanUSB
*/
#include <pic18f4550.h>
#pragma code _reset 0x001000
void _reset( void ) __naked
{
__asm
EXTERN __startup
goto __startup
__endasm;
[ 188 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
}
#pragma code _high_ISR 0x001008
void _high_ISR( void ) __naked
{
__asm
retfie
__endasm;
}
#pragma code _low_ISR 0x001018
void _low_ISR( void ) __naked
{
__asm
retfie
__endasm; }
void main() { }
MikroC
Example Format for Bootloader
/* www.tinyurl.com/SanUSB
*/
#pragma orgall 0x1000
void interrupt(void) org 0x1008
{
;
[ 189 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
}
void interrupt_low(void) org 0x1018
{
;
}
void main()
{
......;
}
Hi-Tech C Compiler
step1:goto Build option
step2:linker tap
step3:set offset : 1000
Microchip ASM compiler
/* www.tinyurl.com/SanUSB
*/
processor PIC18F4550
#include"p18f4550.inc"
org 0x1000
goto init
org 0x1020
goto int_isr
init
...
; initialization
[ 190 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
loop
...
; code
goto loop
int_isr
...
; interrupt code
retfie
end
REFERÊNCIAS BIBLIOGRÁFICAS
Grupo SanUSB (2013). Arquivos do Grupo SanUSB. Retirado em 05/01/13, no World Wide
Web: http://br.groups.yahoo.com/group/GrupoSanUSB/.
Jucá, S. et al. (2013). Projeto e implementação de dispositivo de controle de alta
temperatura aplicado a microgeradores termoelétricos. Anais do Congresso Brasileiro de
Automática
(CBA
2012).
Retirado
em
05/01/13,
no
World
Wide
Web:
http://www.maracanau.ifce.edu.br/~sandrojuca/MicroGTE1.pdf/.
Jornal O Povo (2011). Da escola pública para o mundo. Retirado em 05/01/11, no World
Wide Web: http://publica.opovo.com.br/page,493,109.html?i=2086691 .
Jucá, S. et al. (2011). A low cost concept for data acquisition systems applied to
decentralized renewable energy plants. Retirado em 05/01/11, no World Wide Web:
http://www.mdpi.com/1424-8220/11/1/743 .
Jucá, S. et al. (2011). Gravação de microcontroladores PIC via USB pelo terminal do Linux.
Retirado
em
05/03/11,
no
World
Wide
Web:
http://www.vivaolinux.com.br/artigo/Gravacao-de-microcontroladores-PIC-via-USB-peloterminal-do-Linux/.
Grupo SanUSB (2011). Participação do Grupo SanUSB em Eventos. Retirado em 05/01/11,
no World Wide Web: http://sanusb-laese.wix.com/robotica#!premios/.
[ 191 ]
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
Jornal O Povo (2010). De Maracanaú para Eslováquia. Retirado em 05/01/11, no World
Wide Web: http://publica.hom.opovo.com.br/page,489,109.html?i=2051467 .
Diário do Nordeste (2010). Robô cearense. Retirado em 05/01/11, no World Wide Web:
http://diariodonordeste.globo.com/materia.asp?codigo=861891.
TV Diário (2010). Feira do Empreendedorismo SEBRAE. Retirado em 05/01/11, no World
Wide Web: http://www.youtube.com/watch?v=8Y7gOPd_zN4.
TV Cidade (2009). Projetos na Mostra Nacional de Robótica 2012. Retirado em 05/01/12,
no World Wide Web: http://www.youtube.com/watch?v=lG_O8OsW_sY .
Jucá, S. et al. (2009). SanUSB: software educacional para o ensino da tecnologia de
microcontroladores.
Retirado
em
05/01/11,
no
World
Wide
Web:
http://www.cienciasecognicao.org/pdf/v14_3/m254.pdf .
Diário do Nordeste (2007). Alunos estimulados a construir robôs. Retirado em 05/01/11, no
World Wide Web: http://diariodonordeste.globo.com/materia.asp?codigo=491710.
[ 192 ]