apostila_cpic
TRANSCRIPT
Apm
Aprend
plicaçmicro
nda de f
ções ocont
c
forma s
práttroladomp
simples microc
Sa
ticas dore
putac
s a gravocontrola
andro Juc
de Es emionai
vação wladores
cá
Eletrôm sistis
wireless
ônicatema
s e via U
a e s
USB de e
[ 2 ]
INTRODUÇÃO..................................................................................................................................................................6ASSEMBLY X LINGUAGEM C.........................................................................................................................................................6VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA MICROCONTROLADORES..............................8ARQUITETURAS DOS MICROCONTROLADORES..............................................................................................................8O CONTADOR DE PROGRAMA (PC).........................................................................................................................................9BARRAMENTOS.....................................................................................................................................................................................9A PILHA (STACK)..............................................................................................................................................................................10CICLO DE MÁQUINA.......................................................................................................................................................................10MATRIZ DE CONTATOS OU PROTOBOARD.....................................................................................................................11RESISTORES........................................................................................................................................................................................12CAPACITORES.....................................................................................................................................................................................13FONTES DE ALIMENTAÇÃO........................................................................................................................................................15PROTOCOLO DE COMUNICAÇÃO USB.................................................................................................................................16MÉTODOS DE COMUNICAÇÃO USB......................................................................................................................................16
FERRAMENTA DE GRAVAÇÃO VIA USB........................................................................................................182.1 GRAVAÇÃO DE MICROCONTROLADORES........................................................................................................192.2 GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS.........................................................242.3 GRAVAÇÃO WIRELESS DE MICROCONTROLADORES...............................................................................272.4 SISTEMA DUAL CLOCK.................................................................................................................................................352.5 EMULAÇÃO DE COMUNICAÇÃO SERIAL NO WINDOWS..........................................................................352.6 GRAVANDO O MICROCONTROLADOR VIA USB NO LINUX...................................................................422.7 GRAVANDO O PIC VIA USB PELO TERMINAL DO LINUX OU MAC OSX.........................................432.8 SISTEMA DUAL CLOCK.................................................................................................................................................452.9 EMULAÇÃO DE COMUNICAÇÃO SERIAL NO LINUX....................................................................................452.10 PROGRAMA COM INTERRUPÇÃO EXTERNA POR BOTÃO E DO TIMER 1.....................................492.11 OBTENÇÃO DE UM VOLTÍMETRO ATRAVÉS DO CONVERSOR AD COM A VARIAÇÃO DE UM POTENCIÔMETRO............................................................................................................................................................................502.12 CIRCUITO COM84 PARA GRAVAÇÃO DO gerenciador.hex.....................................................................51
PERIFÉRICOS INTERNOS DO MICROCONTROLADOR.........................................................................533.1 CONVERSOR A/D.............................................................................................................................................................533.1.1 AJUSTE DE RESOLUÇÃO DO SENSOR E DO CONVERSOR AD DE 8 BITS.....................................543.1.2 AJUSTE DA TENSÃO DE FUNDO DE ESCALA COM AMPOP....................................................................543.1.3 AJUSTE DA TENSÃO DE REFERÊNCIA COM POTENCIÔMETRO..........................................................553.1.4 CONVERSOR AD DE 10 BITS....................................................................................................................................553.1.5 OBTENÇÃO DE UM VOLTÍMETRO ATRAVÉS DO CONVERSOR AD COM A VARIAÇÃO DE UM POTENCIÔMETRO............................................................................................................................................................................563.1.6 LEITURA DE TEMPERATURA COM O LM35 ATRAVÉS DO CONVERSOR AD................................573.1.7 TERMISTOR.........................................................................................................................................................................583.2 MEMÓRIAS DO MICROCONTROLADOR.............................................................................................................593.2.1 MEMÓRIA DE PROGRAMA..........................................................................................................................................593.2.2 MEMÓRIA DE INSTRUÇÕES......................................................................................................................................593.2.3 MEMÓRIA EEPROM INTERNA...................................................................................................................................603.2.4 MEMÓRIA DE DADOS (RAM)....................................................................................................................................603.2.5 EXEMPLO DE APLICAÇÃO...........................................................................................................................................613.2.5.1 CONTROLE DE ACESSO COM TECLADO MATRICIAL...........................................................................613.3 MODULAÇÃO POR LARGURA DE PULSO PELO CCP....................................................................................65CONTROLE PWM POR SOFTWARE DE VELOCIDADE DE UM MOTOR CC......................................................67
INTERRUPÇÕES E TEMPORIZADORES.........................................................................................................68INTERRUPÇÕES.................................................................................................................................................................................68INTERRUPÇÕES EXTERNAS.......................................................................................................................................................69INTERRUPÇÃO DOS TEMPORIZADORES...........................................................................................................................70MULTIPLEXAÇÃO POR INTERRUPÇÃO DE TEMPORIZADORES............................................................................72
EMULAÇÃO DE PORTAS LÓGICAS...................................................................................................................735.1 INSTRUÇÕES LÓGICAS PARA TESTES CONDICIONAIS DE NÚMEROS..........................................745.2 INSTRUÇÕES LÓGICAS BOOLANAS BIT A BIT..............................................................................................745.3 EMULAÇÃO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS.............................................785.4 MULTIPLEXAÇÃO COM DISPLAYS DE 7 SEGMENTOS...............................................................................84
COMUNICAÇÃO SERIAL EIA/RS-232............................................................................................................866.1 CÓDIGO ASCII...................................................................................................................................................................886.2 INTERFACE USART DO MICROCONTROLADOR............................................................................................886.3 COMUNICAÇÃO SERIAL EIA/RS-485....................................................................................................................90
ACIONAMENTO DE MOTORES MICROCONTROLADOS........................................................................90ACIONAMENTO DE MOTORES CC DE BAIXA TENSÃO..............................................................................................91MOTORES ELÉTRICOS UTILIZADOS EM AUTOMÓVEIS...........................................................................................91COROA E O PARAFUSO COM ROSCA SEM-FIM..............................................................................................................93CHAVEAMENTO DE MOTORES CC COM TRANSISTORES MOSFET....................................................................94EXEMPLO: SEGUIDOR ÓTICO DE LABIRINTO................................................................................................................95ESTABILIDADE DO CONTROLE DE MOVIMENTO.........................................................................................................95PONTE H................................................................................................................................................................................................99DRIVER PONTE H L293D.............................................................................................................................................................99SOLENÓIDES E RELÉS.................................................................................................................................................................100DRIVER DE POTÊNCIA ULN2803..........................................................................................................................................102PONTE H COM MICRORELÉS...................................................................................................................................................103ACIONAMENTO DE MOTORES DE PASSO.......................................................................................................................103MOTORES DE PASSO UNIPOLARES....................................................................................................................................104MODOS DE OPERAÇÃO DE UM MOTOR DE PASSO UNIPOLAR.........................................................................105ACIONAMENTO BIDIRECIONAL DE DOIS MOTORES DE PASSO......................................................................106SERVO-MOTORES...........................................................................................................................................................................106
FOTOACOPLADORES E SENSORES INFRAVERMELHOS....................................................................109TRANSMISSOR E RECEPTOR IR..........................................................................................................................................110AUTOMAÇÃO E DOMÓTICA COM CONTROLE REMOTO UNIVERSAL.............................................................111CODIFICAÇÃO DE RECEPTOR INFRAVERMELHO UTILIZANDO A NORMA RC5.......................................114ACIONAMENTO DE CARGAS CA COM TRIAC................................................................................................................118TRIACS E RELÉS DE ESTADO SÓLIDO..............................................................................................................................118DIMMER ANALÓGICO...................................................................................................................................................................118CONTROLE DIGITAL DE DISPARO DE UM TRIAC......................................................................................................119DIMMER DIGITAL COM CONTROLE REMOTO IR........................................................................................................124
LCD (DISPLAY DE CRISTAL LÍQUIDO)......................................................................................................128EXEMPLO: CONTROLE DE TENSÃO DE UMA SOLDA CAPACITIVA COM LCD...........................................131
MODELAGEM DE SINAIS DE SENSORES...................................................................................................134EXEMPLO: MODELAGEM DE UM LUXÍMETRO MICROCONTROLADO COM LDR......................................134SUPERVISÓRIO................................................................................................................................................................................137
INTERFACE I2C.......................................................................................................................................................141REGRAS PARA TRANSFERÊNCIA DE DADOS.................................................................................................................142MEMÓRIA EEPROM EXTERNA I2C.........................................................................................................................................145
RTC (RELÓGIO EM TEMPO REAL)................................................................................................................147EXEMPLO: PROTÓTIPO DATALOGGER USB DE BAIXO CUSTO.........................................................................151
TRANSMISSÃO DE DADOS VIA GSM..........................................................................................................157COMANDOS AT PARA ENVIAR MENSAGENS SMS DE UM COMPUTADOR PARA UM CELULAR OU MODEM GSM.....................................................................................................................................................................................157COMANDOS AT PARA RECEBER MENSAGENS SMS EM UM COMPUTADOR ENVIADAS POR UM CELULAR OU MODEM GSM.......................................................................................................................................................158
O PROTOCOLO MODBUS EMBARCADO.....................................................................................................161MODELO DE COMUNICAÇÃO..................................................................................................................................................161DETECÇÃO DE ERROS.................................................................................................................................................................162MODOS DE TRANSMISSÃO......................................................................................................................................................162
INTRODUÇÃO À SISTEMAS OPERACIONAIS EM TEMPO REAL (RTOS)...................................167MÁ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.......................................................................................................................................................172FUNÇÕES BÁSICAS DA APLICAÇÃO DO USUÁRIO.....................................................................................................172FUNÇÕES DO CONVERSOR ANALÓGICO DIGITAL (A/D)......................................................................................177FUNÇÕES DA COMUNICAÇÃO SERIAL RS-232.............................................................................................................178EXEMPLOS DE PROGRAMAS....................................................................................................................................................179
APÊNDICE I: CABEÇALHOS DA FERRAMENTA PARA DIVERSOS COMPILADORES............186CCS C Compiler................................................................................................................................................................................186C18 compiler......................................................................................................................................................................................186SDCC......................................................................................................................................................................................................188MikroC....................................................................................................................................................................................................189Hi-Tech C Compiler........................................................................................................................................................................190Microchip 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á
[ 6 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 7 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 8 ]
VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA MICROCONTROLADORES
- 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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 9 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 10 ]
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
MHz) e toque geramda memór
MATR
Para duilização dque é umeletrônicosfacilidade
Na centenas mediante eletricameDe cada laespaço livhorizontaisfigura aba
Aplicações p
rnando o sm “saltos” ria de prog
RIZ DE CO
desenvolvede uma Maa placa cos. A grandde inserçã
superfície de orifíciofios. Em
ente os comado da plavre no meis (pequenaixo.
práticas de Eletr
sistema muno contadrama e os
ONTATOS
er os projeatriz de Conom diversode vantageo de comp
de uma mos onde s
sua partemponentesaca, ao lonio da placaas fileiras)
rônica e microco
uito mais ror de progretornos d
OU PROT
etos e exentatos (ou os furos e em do Protponentes (n
Figura 1
matriz de csão encaixe inferior s inseridos ngo de seua e de cad), cada um
ontroladores em
[ 11 ]
rápido. As grama, comdessas fun
TOBOARD
ercícos proProtoboarconexões
otoboard nanão necess
1. 4: Prot
contatos hxados os
são instana placa q
u comprimeda lado de
m com 05
m sistemas comp
únicas exemo chamações.
D
opostos nerd em inglêcondutora
a montagesita soldag
toboard.
á uma bascomponen
alados conque são orgento, há desse espaçorifícios d
putacionais, por
eções refedas de fun
ssa apostiês), mostraas para moem de circem).
se de plásntes ou tantatos metganizados uas colunaço há váride acordo
r Sandro Jucá
erem-se às nções em
ila será neada na figuontagem dcuitos eletr
stico em quambém potálicos quem colunaas completios gruposcomo é ilu
instruçõesoutro loca
ecessário aura abaixode circuitosrônicos é a
ue existemor ligaçõese interliga
as e canaistas. Há ums de canaisustrado na
s al
a , s a
m s a .
m s a
Em Para fazermenor é a
RESIS
Os um resisto
Aplicações p
Fig
alguns por isso utiliza corrente e
STORES
resistores or específic
práticas de Eletr
gura 1. 5:
ontos do cizamos um elétrica qu
geralmentco, compar
rônica e microco
Contatos
rcuito é necomponen
e passa nu
te são feitoramos ele c
ontroladores em
[ 12 ]
s internos
ecessário lnte chamaum condut
os de carbocom a segu
m sistemas comp
s de uma
imitar a inado resistoor.
ono. Para uinte tabel
putacionais, por
protoboa
ntensidade or. Quanto
identificar a:
r Sandro Jucá
ard.
da corren maior a r
qual a res
te elétricaresistência
sistência de
. ,
e
CAPA
Capelétrico. coplacas sãoutilizados computadopara compporte.
A fuabsorvend
Aplicações p
CITORES
pacitor ou onsistem eo condutor
desde aores, até cpensar a re
unção maido os picos
práticas de Eletr
Figura 1
S
condensaem dois eleras e são armazenar corrigir o faeatância in
is comum s e preench
rônica e microco
1. 6: Códi
dor é um etrodos ou
separadasbits na
ator de potndutiva pro
é filtrar ruhendo os v
ontroladores em
[ 13 ]
igo de cor
componeplacas que
s por um as memórtência de iovocada po
uídos em cvales de te
m sistemas comp
res de res
ente que ae armazenisolante o
rias volátndústrias for bobinas
circuitor elensão. Os
putacionais, por
sistores.
armazena nam cargasou por umteis dinâmfornecendoe motores
létricos e ecapacitore
r Sandro Jucá
energia ns opostas.
m dielétricomicas (DRo reatâncias elétricos
estabilizar es descarre
um campoEstas duas
o. Eles sãoRAM) dosa capacitiva
de grande
as fontesegados são
o s o s a e
, o
um curto eCC.
Os são utilzacarregam toda a capode tornatambém eenergizada
As (nF) e Picabaixo, os
A fig
A fig
Aplicações p
e carregad
capacitoreados tambo capacitorga no buar um capem paralelas possam Unidades
cofarad (pFs cerâmicos
gura abaix
Fig
gura abaix
práticas de Eletr
dos abrem
Figura
es podem sbém no flor do flash
ulbo do flapacitor grano com movencer a ide MedidaF). Os caps e os de p
Figur
xo mostra a
ura 1. 9:
xo mostra a
rônica e microco
o circuito,
1. 7: Form
ser carregalash eletrôh durante sh quase nde e carrotores elétinércia quaa de capacacitores m
poliéster.
ra 1. 8: Ex
a identifica
Cálculo d
a identifica
ontroladores em
[ 14 ]
, por isso
ma de on
ados e desônico em vários segque instan
regado exttricos paraando os mocitância sã
mais comun
xemplos d
ação de cap
demonstra
ação de cap
m sistemas comp
são utiliza
nda de cap
scarregadouma câm
gundos, e ntaneamentremamenta fornecer otores são o Farad (Fns são os
de Capaci
pacitores c
ativo de c
pacitores d
putacionais, por
dos també
pacitor.
os muito ramera fotog
então o cnte gerandte perigosoenergia pligados.
F), Microfaeletrolítico
tores.
cerâmicos.
capacitân
de poliéste
r Sandro Jucá
ém para is
apidamentgráfica, oncapacitor ddo o alto bo. Eles sãopara que a
arad (μF), os, lstrados
ncia.
er.
olar fontes
te, por issonde pilhasdescarregabrilho. Istoo utilizadosas bobinas
Nanofarads na figura
s
o s a o s s
d a
FONT
As baterias reAs bateriana forma d
A cmultiplicaçhora (1 Ah(não recaristo leva apodem serlimite redu
As baté 10,5V tempo queComo o cdescarga m100Ah. Decom tensãhoras, qua
Oute vida útil T=20°C, q
1.12.
Em na transiçevento, po(Debounci
Aplicações p
Fig
TES DE AL
fontes mecarregáves ou pilhasde energiacapacidade ção da corh= 3600 Crregáveis),ao final prr descarreguz a vida úbaterias di(tensão de
e deve ser comportammenor seráeve-se falaão de corteando a battro fator imdependem
que é a tem
RUÍDO (Boperaçõesão que, caode provocing) são vi
práticas de Eletr
ura 1. 10
LIMENTAÇ
ais comuneis ou convs são dispo elétrica. de armaz
rente de dCoulombs), as bateriematuro dgadas, chatil da bateitas 12V, pe corte), qmedido co
mento das á a autono
ar, por exee 10,5V. Eeria irá ati
mportante ém dela. Usumperatura
BOUNCINs de Liga/Daso uma icar várias a software
rônica e microco
: Código d
ÇÃO
ns em sisversores CAositivos qu
zenamentodescarga p. Deve-se as recarre
da vida da amado de tria.
por exempluando 100omo autonbaterias n
omia e a cemplo, em sta bateriangir 10,5Vé a temperualmente aideal para
NG) E FILT
Desliga e mnterrupçãointerrupçõ
e, program
ontroladores em
[ 15 ]
de cores C
stemas emA-CC comoue armazen
o de energpelo tempo
observar egáveis não
bateria. Ntensão de c
lo, devem 0% de sua omia da banão é linecapacidadeuma bate
a permitiráV. ratura de oas informamaximizar
TRO (DEBmudança do esteja haões ou conmando um t
m sistemas comp
Capacitor
mbarcados o carregadonam energ
gia de umao de autonoque, ao coo podem sNa verdadecorte. Desc
operar decapacidadateria. ar, isto é,
e, não é coria 100Ah
á descarga
operação dações são fr a vida úti
BOUNCINe nível lógabilitada otagens. Astempo (em
putacionais, por
res Poliés
com micores de celia química
a bateria éomia, sendontrário daser descare elas têmcarregar a
13,8V (tede terá sido
, quando morreto falarpadrão de de 100 /
da bateria,fornecidas il.
NG)
ico, surge u até mess formas m
m torno de
r Sandro Jucá
ster.
crocontrolalulares.
a e a torna
é medida do dado emas bateriasrregadas a
m um limite bateria ab
ensão a pleo utilizada,
maior a cr em uma e descarga20 = 5A d
, pois sua csupondo T
um ruído smo um comais comun
100ms, de
adores são
a disponíve
através dam ampére-s primáriasaté 0V poise até ondebaixo deste
ena carga), e é este o
orrente debateria de
a 20 horasdurante 20
capacidadeT=25°C ou
(Bouncing)ontador dens de filtroependendo
o
el
a -s s e e
, o
e e , 0
e u
g) e o o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 16 ]
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
fosse umabidireciona14,4 kB/shttp://wcomunicaçhttp://w
Mass armazenamapenas peutilizado pferramentaMais http://w
Como computadode disposclasse de (MSD). Casistemas ocompatíve
NosPIC USB comunicaçno Linux edriver no s
Aplicações p
a porta de al com velos. Mais de
www.youtução
www.youtu
Storage mento emela própriapor pen-da SanUSB
detalhwww.youtu
foi visto,or enumeritivos comdispositivoada uma operacionael com uma
s sitemas oé o CDC, ção via pore o HID nsistema op
práticas de Eletr
comunicaçocidade deetalhes emube.com/
ube.com/
Device m massa q
a velocidarives, scpara comhes ube.com/, a comunra os dispo
mumente aos de comudessas cl
ais. Portanta dessas cl
Figur
operacionapor uma
rta serial, no Windowperacional p
rônica e microco
ção serial e comunicam uma ap/watch?v
bidirecio/watch?v
(MSD) -que permitade do bacanners, câunicação c
na /watch?vnicação Uositivos USassociados unicação (asses já to, se adeasses, não
ra 1. 12: D
is Window razão simo que torn
ws@ são napara que o
ontroladores em
[ 17 ]
padrão. É ação é de plicação Wv=KUd1Jkonal
v=cRW99T
Método te alta vearramento âmeras dicom softwa
videv=Ak9RAlUSB é basSB conecta
a USB: d(CDC) e dipossui umquarmos o
o haverá ne
Drivers e
ws@ e Linuxmples, os na o proceativos, ou
o PC reconh
m sistemas comp
o métodoaté 115 kb
Windows@ kwGJNk
T_qa7o.
customizalocidade dUSB 2.0
igitais. Foiare de supeo-aula 2YTr4.
seada em dos a ele.
dispositivosspositivos
m driver imo firmwareecessidade
comunica
x, o modo programa
esso ainda seja, não
heça o disp
putacionais, por
o mais simpbps, ou sej
com prote em u
no
ado para de comuni
(480 Mbpi utilizado pervisão p
dis
uma cen Existem
s de interfde armazemplementae de nossoe de implem
ação.
mais fácil as para PC
mais simpé necessá
positivo.
r Sandro Jucá
ples de coja, aproximtocolo Mouma apli
dispocação USBps). Este
juntamenrogramado
sponível
ntral (hosttrês grandface humaenamento ado na mo dispositivmentar um
de comunCs são baples. O mário instala
omunicaçãomadamenteodbus RTUicação de
Linux
sitivos deB, limitadométodo é
nte com ao em Java
em
t), onde odes classesana (HID)em massa
maioria dosvo para se
m driver.
nicar com oaseados naétodo CDCar nenhum
o e U e x
e o é a .
m
o s , a s r
o a C m
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 18 ]
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.
UtilCompetiçãda Feira Categoria TecnológicCategoria lugar em ie Cultura d
2.1 GRA
A tratravés deefetuar a de qualquePara que tsomente uUSB Gerentambém énovos prog
Cassuporte adisponível i586-s.hthttp://w
ParanecessárioExistem di
Aplicações p
izando estão de RobóBrasileira Engenhari
ca na FerSupraniveinovação ndo Ceará n
AVAÇÃO
ransferênce um harddescarga der PC. todas essauma vez, cnciador.he
é possível bgramas: hso o compu programaem: http
tml www.java.
a que os po compilá-iversos com
práticas de Eletr
Figu
ta ferrameótica do IFde Ciênciia (2009), ria Explorael do Foro na Semantena categori
DE MICRO
cia de progdware de de program
s funcionacom um grex disponívbaixar periottp://wwutador ainas executáp://www
ou.com/pt_programaslos, ou sempiladores
rônica e microco
ra 2. 1: G
nta, estudFCE (2007, as e Engecomo tam
a 2009 emInternacioec 2011 doia robótica
OCONTRO
gramas pagravação
mas para o
lidades sejravador esvel na pasodicament
ww.4shareda não o táveis dese
w.4sharedu BR/down
s em C poseja, transfos que pode
ontroladores em
[ 19 ]
Gravação d
antes fora 2008 e 20enharia (F
mbém obtivm Medelinnal de Cieo IFCE e ca educacion
OLADORE
ra os micrespecífico
o microcon
jam possívspecífico pasta complete as atualied.com/fitenha o apenvolvidos
d.com/fileatra
nload/massam ser gormá-los eem ser util
m sistemas comp
do PIC via
am três ve009) na caFEBRACE09veram Prêmn na Colôencia e Ingampeões nnal em 201
ES
rocontrolado. Através ntrolador d
veis, é neceara PIC, o
eta da ferrizações deile/sIZwBplicativo Jas em Javae/WKDhQvés
anual.jsp.gravados nem linguaglizados por
putacionais, por
a PC.
zes consecategoria Lo9) da USPmio de Inoômbia e fgeniería 20na V Feira 11.
dores é nodesta fer
diretament
essário gra gerenciadamenta nossa ferram
BP4r/100ava JRE oua, baixe aQwZK/jre-
do
no microcogem de mr esta ferra
r Sandro Jucá
cutivas camocalização,P em Sãoovação emforam Cam010 no ChiEstadual d
ormalmentrramenta, te de uma
avar, anterdor de grao link ab
menta e a i0727SanUu SDK insta Versão W-6u21-Wio
ontrolador áquina heamenta, e
mpeões da campeões
o Paulo nam Aplicaçãompeões nale, terceirode Ciências
e efetuadaé possíveporta USB
riormente evação pelaaixo, ondenclusão de
USB.htmltalado paraWindows@indows@-
link
via USB, éexadecimalntre eles o
a s a o a o s
a el B
e a e e
a @ -:
é . o
SDCC, o disponíveisutilizados pasta de dde suhttp://w
As vtenham sidNeste casnovo sourc
CasGerenciadodentro da(C:\Arquivmontado e
Fig
Para um m
Aplicações p
C18, o Hs para emcom bom
desenvolvimporte
www.4shaversões 4 do testadao, é recom
rce file. so grave orPlugandP
a pasta Exvos de proem protobo
ura 2. 2:
microcontro
práticas de Eletr
Hi-Tech e ulação serrendiment
mento, é oa USB
ared.com/deste com
as algumasmendado c
no microPlay.hex, xemploseBogramas\P
board é mos
Esquemá
olador de 4
rônica e microco
o CCS. Drial, diversoto, além do CCS na vB pod/file/Mo6mpilador aps versões ecriar, para
controladonão esque
BibliotecasCICC\Driverstrada a se
ático de m
40 pinos, o
ontroladores em
[ 20 ]
Devido à dos periféric
do C18, coversão 3.24e ser
6sQJs2/10presentam
e funcionara cada firm
or o novoeça de colCCS localizrs ). A reeguir:
montagem
o circuito é
m sistemas comp
didática dacos e mult
om exempl45. Esta ve
obtida00511Com
m bugs em ram satisfamware (pro
o gerencialar o novozada na pepresentaçã
m da Ferra
mostrado
putacionais, por
as funçõestitasking, uos de aplicersão funca atrampilador.
funções etoriamenteograma a
ador de o arquivo pasta instaão básica
amenta pa
abaixo:
r Sandro Jucá
s e biblioum dos cocação disp
cional com avés dhtml . e aplicaçõee até a verser comp
gravação cabeçalho alada do cdo circuit
ara 28 pin
otecas USBmpiladoresponíveis nabibliotecaso link
es, emborarsão 4.084pilado), um
pela USBSanUSB.h
compiladoto SanUSB
nos.
B s a s :
a .
m
B h r B
j
Fig
Os com 1 m 1 cr 2 ca 2 ca 3 le 1 re 1 d 1 C
NotcompatívLinux e desenvolbotão de alimentar simples fioaceso) e qjump), encompilado
O cmicrocontr(+5V) do co D- é am19 e 20 eporta USB direto no cortá-lo, e
Aplicações p
ura 2. 3:
mponentes microcontroristal de 20apacitores apacitores eds e 3 resesistor de 2iodo qualqabo USB q
te que, esvel com oMac OSX
lvimento reset, no o microco
o, o microque, após ontra em Eo. cabo USB arolador nocabo USB
marelo ou be dos barra
do compuprotoboard
em um pro
práticas de Eletr
Esquemá
básicos doolador da f0MHz; de 22pF; de 1uF (u
sistores de 2k2 e um b
quer entre qualquer.
ste sistemo softwarX, pode de micropino 1, co
ontrolador,ocontroladoo reset comEstado pa
apresenta os pontos é vermelho
branco. Notamentos vutador. Parrd, com fiotoboard o
rônica e microco
tico de m
o circuito sfamília PIC
m no pino390 (só é botão ou fio +5V e o
ma multipre de gra
e ser impocontrolaomo botão com o p
or entra emm o pino 1 ara Operaç
normalmemostradoso, o Gnd (te que a fovermelho (ra ligar o cos rígidos ou numa p
ontroladores em
[ 21 ]
montagem
são: C USB (18F
o 14 Vusb necessárioio para grao pino Vdd
iplataformavação HIplementadadores PI de gravaç
pino 1 no m Estado no Vcc (+ção do p
nte quatros na figur(Vusb-) é monte de ali(+5V) e azcabo USB n
soldados,placa de c
m sistemas comp
m da ferra
F2550, 18F
e outro eno um led coavação no d;
ma (WindHID USB d
do tambéIC com inção via USGnd (0V),para Grav
+5V atravéprograma
o fios, que ra acima, marrom ouimentação zul (Gnd) no circuito
como tamcircuito imp
putacionais, por
menta pa
F2455, 18F
tre o +5V om resistopino 1;
dows@, Lda Microcém em qinterface SB. Ao con, através d
vação via Us do resistaplicativo
são coneconde norm preto, o Ddo microcdo circuitoé possível
mbém é popresso, uti
r Sandro Jucá
ara 40 pin
F4550, etc
e o Gnd ) r no pino B
Linux e Mchip tambqualquer USB, poi
nectar o cado botão USB (led ntor fixo de
(firmware
ctados ao malmente,D+ é azul controladoro provem cortá-lo e
ossível conilizando um
nos.
.);
; B7);
Mac OSX),bém paraplaca des utiliza oabo USB eou de um
no pino B72K2 sem o
e) que fo
circuito doo fio Vcc
ou verde er nos pinosda própriaconectá-lo
nectar semm conecto
), a e o e m 7 o oi
o c e s a o m r
USB fêmeado microcUSB esteja
A ficircuito anterminal écorrespond
É imcircuito dealimentaçã
Cassistema dealimentaçãA figura aesta ferramo sistema de circuitocontato co
Se abaixo, em
Aplicações p
a. O diodoontroladora polarizadigura abaixnterior e aé conectadentes do
Figura 2.
mportante esta ferraão que vemso o sisteme aquisiçãoão externabaixo mosmenta compronto pa
o impressoom o grupo
preferir com folha ap
práticas de Eletr
o de proteçr serve parda de formaxo mostra posição d
ado diretacado USB.
. 4: Esque
salientar qamenta dem da USB, ma microcoo de dado, que pode
stra o PCB,m entrada ra um apreo da ferramo SanUSB a
Figura
onfeccionapropriada,
rônica e microco
ção colocadra protegea inversa.a ferrame
de cada temente no.
ema mont
que, para eve conterou seja, co
ontrolado ss ou um ce ser uma disponívepara fonteendizado mmenta Sanatravés do
a 2. 5: Esq
ar a placa,corroer, f
ontroladores em
[ 22 ]
do no pinoer contra c
enta SanUerminal no os pinos
tado em p
o perfeitor um capolocado enseja embacontrole debateria co
el nos Arque de alimenmais rápidonUSB, com e-mail: sa
quema mo
, é possívfurar (pon
m sistemas comp
o 20 entre corrente re
USB montaconector
do microc
protoboar
o funcionampacitor de ntre os pinorcado come acesso, emum de 9Vuivos do Gntação exto, é possív
mo a foto anusb_laes
ontado em
vel tambémtos marro
putacionais, por
o Vcc da eversa cas
ada em proUSB a ser
controlador
rd e conec
mento da filtro ent
os 20 (+5Vmo, por exeele necessV ou um crupo SanUerna. Para
vel tambémda placa a
se@yahoo.
m PCB.
m imprimirns) e sold
r Sandro Jucá
USB e a aso a tensão
rotoboard sr ligado nor pelos q
ctor USB.
gravação tre 0,1uf V) e 19 (Gemplo, umsita de umcarregador USB, e o cia quem de
m encomenabaixo, encom.br .
r o PCB (dar os com
limentaçãoo da porta
seguindo oo PC. Cadaquatro fios
.
via USB, oe 1uF nand).
m robô, uma fonte dede celularrcuito paraeseja obtendar placasntrando em
(em preto)mponentes
o a
o a s
o a
m e . a r s
m
) .
Mais http://wvideo disp
Para
comunicaçwww.tiny
DurC, a biblExemploseinstalada dinstruçõeshabilitaçãooscilador eatravés de
Como temporizadum led con
-------------#include < void main( clock_int_4para CPU) while (1)
Aplicações p
www.4shaonível em:
a obter vção e alimyurl.com/
rante a proioteca cabeBibliotecado compilas do PIC1o do sistemexterno de
e prescaler
a frequêdores corrnectado no
-------------<SanUSB.h
()
4MHz();//F
práticas de Eletr
ared.com/: http://w
Figura
vários promentação /SanUSB
ogramaçãobeçalho SsCCS e q
ador ( C:\A18F2550 pma Dual Cloe 20 MHzr multiplica
ência do responde ao pino B7 a
-------------h>
Função nec
rônica e microco
/get/ithqwww.yout
2. 6: PCB
gramas-fovia USB, e clicar no
o do microcSanUSB (#que você jArquivos depara o sisock, ou sej
para gerdor de freq
oscilador a um microa cada 0,5
-------------
cessária pa
ontroladores em
[ 23 ]
detalhes Lbiq/Fazetube.com
B da Ferra
nte e vídbasta se
o item Arqu
controlado#include <á adicionoe programastema opja, osciladorar a freququência.
interno rossegundosegundo.
-------------
ara habilita
m sistemas comp
endoPCBtm/watch?v
amenta Sa
deos destee cadastrauivos.
r basta ins<SanUSB.hou dentro as\PICC\Deracional, or RC interuência de
é de 4 o. O progr
-------------
ar o dual c
putacionais, por
termico.hv=8NhNs
anUSB.
e sistema ar no gru
serir, no inh>) contidda Driversrivers ). Esconfigura
rno de 4 M48MHz da
MHz, cadrama exem
-------------
clock (48M
r Sandro Jucá
html ou asNw5BfU.
livre de upo de ac
nicio do proda dentro s localizadasta biblioteações de Hz para CPa comunic
da incremmplo1 abai
-------------
Hz para U
ematravés do
gravaçãocesso livre
ograma emda pasta
a na pastaeca contémfusíveis e
PU e cristacação USB
mento dosxo comuta
-------------
SB e 4MHz
: o
, e
m a a
m e al ,
s a
z
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 24 ]
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:
http://wda pasta S
F
6. Clique e
programa
Gravar. Es
7. Após a
gravação
novamente
Para protebasta ir em
Aplicações p
www.java.SanUSBwin
Figura 2.
em Abrir
compilado
ste program
gravação d
e clique e
e, repita o
eger o exem Proteçã
práticas de Eletr
.com/pt_nPlugandPla
7: Interfa
r e escolha
o exemplo
ma pisca o
do program
em Reseta
s passos a
ecutável saãoResiden
rônica e microco
BR/downay. Surgirá
ace de gra
o program
o1.hex da
led conect
ma, lembre
r. Pronto o
nteriores a
anusb de ente do ant
ontroladores em
[ 25 ]
nload/maá a seguint
avação do
ma .hex q
pasta Ex
tado no pi
e-se de so
o program
a partir do
exclusão doti-virus AVG
m sistemas comp
anual.jsp ete tela:
o microco
que deseja
xemploseBi
no B7;
ltar o botã
ma estará
passo 3.
o anti-viruG:
putacionais, por
e execute
ontrolado
gravar, co
ibliotecasS
ão ou retira
em operaç
s, como p
r Sandro Jucá
o aplicativ
or via USB
como por e
SanUSB e
ar o jump
ção. Para
por exempl
o SanUSB
B.
exemplo, o
clique em
do pino de
programa
o, o AVG
B
o
m
e
r
,
Clicar em g
Clicar em que é em OK.
Aplicações p
gereciar ex
Gerenciar C:\Progra
práticas de Eletr
xecessões,
Exceções m Files\Sa
rônica e microco
, como na
e adicionaanUSB ou
ontroladores em
[ 26 ]
figura aba
ar caminhoem C:\Arq
m sistemas comp
ixo:
o. Então inquivos de P
putacionais, por
nserir o camProgramas
r Sandro Jucá
minho do
s\SanUSB eexecutávee clicar em
el m
Pronto é instalá-lo d
2.3
A g
Bluetooth.
um lado, u
através do
outro lado
final. Esta
disponíveis
Aba
com tensã
Aplicações p
isso. Parade dentro d
3 GRAV
gravação w
Para a gr
um módul
o chip FTD
o da rede,
a conexão
s em: http
aixo uma il
ão de alime
práticas de Eletr
reinstalardo arquivo
VAÇÃO WI
wireless de
ravação Zig
o é conect
DI FT232RL
, um mód
o permite a
://www.4s
lustração p
entação de
rônica e microco
r o executo .zip ou .ra
IRELESS D
scrita nest
gbee são u
tado a um
L ou atrav
ulo Zigbee
a program
shared.com
para realiza
e 3,3V.
ontroladores em
[ 27 ]
tável da sar.
DE MICRO
ta apostila
utlizados d
m PC coord
vés de uma
e é conec
mação sem
m/get/aP17
ar gravaçã
m sistemas comp
subpasta S
OCONTRO
a pode ser
dois módu
denador co
a porta se
tado ao m
fio no mic
7n4FT/sanu
ão de micro
putacionais, por
SanUSBwin
OLADORE
feita com
los XBee®
onectado a
rial real co
microcontro
crocontrola
usbee.htm
ocontrolad
r Sandro Jucá
nPlugandPl
ES
m modems
® da Série
ao PC via U
om o MAX
olador do
ador PIC.
l
dor de form
ay , basta
Zigbee ou
1 (S1). De
USB do PC
X-232 e, do
dispositivo
Programas
ma wireless
a
u
e
C
o
o
s
s
Para mais
http://w
microcontr
Procedime
1- Circuit
(www.tiny
Gnd, Tx e
(Vcc) do m
(Gnd) do m
pino 18 (R
ligado ao 1
2- Config
Xbee® da
baud rate
coordenad
qual firmw
pino B7 irá
Aplicações p
Figura 2.
detalhes
www.youtu
roladores
ento para g
to básico
yurl.com/Sa
Rx, como
microcontr
microcontr
Rx) do mic
17 (Tx) do
guração d
a série 1 (c
do microc
dor ao micr
ware (Conf
á piscar int
práticas de Eletr
8: Ilustra
basta aco
ube.com/
via Zigbe
gravação w
o: Conecte
anUSB), co
o mostra a
olador e a
rolador e a
crocontrola
o microcont
dos Módu
coordenad
controlador
rocontrolad
nfigCoord96
termitente
rônica e microco
ação do c
mpanhar o
/watch?v
e: http:/
wireless:
e o módu
om aliment
figura aba
ao pino 1 (
ao pino 10
ador e ao
trolador e
ulos: A gr
dor e dispo
r (19200 b
dor, ver cir
600to19200
mente. Se
ontroladores em
[ 28 ]
circuito de
os vídeos
v=_Pbq2e
//www.yo
lo Xbee®
tação entr
aixo. Na fi
(Vcc) do m
(Gnd) do
pino 2 (DO
ao pino 3
ravação w
ositivo fina
ps). Para o
rcuito bási
00.hex ou C
o led não
m sistemas comp
e gravaçã
Gravação
eYha_c
outube.co
ao micro
re 3V e 3,6
gura, o fio
modem Zig
modem Z
OUT) do mo
(DIN) do m
wireless só
l) estivere
o coordena
co acima,
ConfigCoor
piscar, pr
putacionais, por
ão wireles
sem fio de
e Gravaç
om/watch
ocontrolado
6V e apena
o vermelho
gbee, o fio
igbee, o fi
odem Zigbe
modem Zigb
vai acont
m configu
ador, basta
gravar via
rd19200to1
ovavelmen
r Sandro Jucá
ss Zigbee
e microcon
ção sem
h?v=BlRj
or da plac
as 4 fios: V
o é ligado
o azul é lig
o laranja é
ee, e o fio
bee.
tecer se o
rados com
a conectar
a USB e ex
o19200.hex
nte existe u
.
ntroladores
m fio de
KbXpepg
ca SanUSB
Vcc (3,3V)
ao pino 20
gado ao 19
é ligado ao
amarelo é
os módulos
m o mesmo
, o módulo
xaminar em
x) o led no
um erro na
s
e
.
B
,
0
9
o
é
s
o
o
m
o
a
ligação do
serial e co
Faça post
(ConfigDis
conectado
módulos e
3- Adap
Adaptador
apresentar
necessário
tutorial), e
Adaptador
para grava
Aplicações p
o circuito. A
necte ao P
teriormente
spFinal9600
o ao microc
estão conec
Figura
ptador W
rSerial.hex
r o erro O
o gravar n
e em segu
rSerial.hex
ação wirele
práticas de Eletr
Após a con
PC.
e o mesm
00to19200.h
controlado
ctados cor
a 2. 9: Gr
Wireless:
x da pasta
Odd addres
novamente
uida, reali
. Após a t
ess.
rônica e microco
nfiguração,
mo para o
hex ou
r. Quando
retamente
ravação v
Agora
a Adaptad
ss at begin
o gerenc
zar novam
transferên
ontroladores em
[ 29 ]
coloque o
o módulo
ConfigDi
o led do p
e estão ap
ia USB de
grave,
orWireless
inning of H
ciador.hex,
mente a g
cia deste
m sistemas comp
o módulo C
Dispositivo
DispFinal192
pino B7 es
ptos para g
e Configu
novament
s. Se, apó
HEX file er
com qua
ravação vi
firmware,
putacionais, por
Coordenado
o final, g
200to19200
tiver pisca
gravação w
ração wir
te via
ós a grava
rror, como
lquer grav
ia USB do
o microco
r Sandro Jucá
or no conv
ravando o
00.hex) e
ando, signif
wireless.
reless.
USB, o
ação do A
o na figura
vador espe
o firmware
ontrolador
versor USB-
o firmware
e deixe-o
fica que os
firmware
Adaptador
a abaixo, é
ecifico (ve
e aplicativo
está apto
-
e
o
s
e
,
é
r
o
o
Ago
Pesquisar
vídeo Grav
transferir
sanusbee.
Exe
san
F
A g
Bluetooth
laptops e
Aplicações p
Figur
ora basta
-> Promp
vação sem
os progra
emplo:
nusbee Exe
Figura 2.
gravação
conectado
desktops,
práticas de Eletr
ra 2. 10: G
acessar a
pt de Coma
m fio de m
amas aplic
emplo1Wire
11: Grava
wireless
o ao microc
já existe u
rônica e microco
Gravação
a pasta sa
ando), com
microcontro
ativos.hex
eless.hex –
ação wire
s Bluetoo
controlado
um módulo
ontroladores em
[ 30 ]
o via USB
anusbee p
mo na figu
oladores v
como o
–p COM2
eless zigbe
oth pode
or, pois nor
o bluetooth
m sistemas comp
de Adapt
pelo Prom
ura abaixo
via Zigbee,
Exemplo1w
ee pelo p
ser realiza
rmalmente
h interno.
putacionais, por
tador wire
pt do Wi
, e digitar,
, as linhas
wireless.he
rompt do
ada com
e no PC coo
A tensão d
r Sandro Jucá
eless.
ndows@ (
r, como mo
s de coma
ex contido
o Window
apenas u
ordenador
do módulo
(Iniciar ->
ostrado no
ando, para
o na pasta
ws.
m módulo
r, como em
o Bluetooth
>
o
a
a
o
m
h
encapsulad
que supor
microcontr
De
conectado
sem fio
http://www
http://san
adquirido o
Aba
Bluetooth
Fig
Para mais
http://w
microcontr
Bluetooth.
1- Circuit
(www.tiny
Gnd, Tx e
Aplicações p
do, mostra
rta de 3,3V
rolador alim
um lado u
o ao microc
no m
w.4shared
usb-laese.w
o modem
aixo uma il
com tensã
gura 2. 12
detalhes
www.youtu
roladores
Procedime
to básico
yurl.com/Sa
Rx, como
práticas de Eletr
ado na figu
V. Dessa fo
mentado p
um PC coo
controlado
microcontro
.com/get/a
wix.com/ro
Bluetooth
lustração p
ão de alime
2: Ilustra
basta aco
ube.com/
http:/
ento para
o: Conecte
anUSB), co
mostra a f
rônica e microco
ura abaixo,
orma, pod
pela tensão
ordenador
or do dispo
lador PI
aP17n4FT/
obotica#!p
mostrado
para realiza
entação de
ção do Ci
mpanhar o
/watch?v
//www.yo
gravação w
o módulo
om alimen
figura acim
ontroladores em
[ 31 ]
, suporta a
de-se cone
o da porta
e, do outr
ositivo fina
IC. Os
/sanusbee.
produtos/p
neste tuto
ar gravaçã
e 5V.
ircuito de
os vídeos
v=_Pbq2e
outube.co
wireless:
o bluetooth
ntação entr
ma do circu
m sistemas comp
até 6V, dife
ectar o mó
USB de 5V
ro lado da
l. Esta co
Programa
.html. N
roductssta
rial.
ão de micro
e gravação
Gravação
eYha_c e G
om/watch
h ao micro
re 3V e 6V
uito. Na fig
putacionais, por
erentement
dulo Bluet
V.
rede, um
onexão per
as estão
Neste li
ckergallery
ocontrolad
o wireless
sem fio de
Gravação s
h?v=0PcC
ocontrolad
V e apena
gura, o fio v
r Sandro Jucá
te do mód
tooth diret
módulo b
rmite a pro
disponív
ink em
yv20=1,
dor de form
s Bluetoo
de microcon
sem fio (w
CQtsO1Bw
dor da plac
s 4 fios: V
vermelho é
ulo Xbee®
amente ao
bluetooth é
ogramação
íveis em
anexo
pode se
ma wireless
oth.
ntroladores
wireless) de
wg via
ca SanUSB
Vcc (3,3V)
é ligado ao
®
o
é
o
:
:
r
s
es
e
a
B
,
o
pino 20 (V
ao 19 (Gn
ao pino 18
ligado ao 1
2- Parearconectado2.1- Iniciasenha pad2.2- Após dispositivo
1.3- Clicarmodem Bl
Figu
O npor exempclicando co> Avançad
Aplicações p
Vcc) do mi
d) do micr
8 (Rx) do
17 (Tx) do
r o modeo ao microcar -> Paindrão: 1234;
o pareamos. Irá apar
F
r em cima,uetooth, e
ura 2. 14:
número da plo, para om o botãdo -> Núm
práticas de Eletr
icrocontrol
rocontrolad
o microcon
o microcont
em Bluetocontroladornel de con;
mento, cliqurecer o mo
Figura 2. 1
, por exemem Hardwa
: Verificaç
porta SerCOM9 como direito e
mero da Por
rônica e microco
ador e ao
dor e ao p
ntrolador e
trolador e
ooth: Apósr, realizar ntrole -> A
ue em Inicodem parea
13: Parea
mplo, do mare, que se
ção da po
rial Padrão mo neste em cima darta COM.
ontroladores em
[ 32 ]
pino Vcc
pino Gnd d
e ao pino
ao pino Rx
s alimentao pareame
Adicionar u
ciar -> Paado, como
mento do
modem de erá utilizada
orta serial
o por Link tutorial,
a porta ->
m sistemas comp
do modem
o modem
Tx modem
x do modem
ar o modeento com oum disposi
ainel de coo, por exem
o modem
linvor, e va para a gr
l criada pe
Bluetooth através dopropriedad
putacionais, por
m bluetooth
bluetooth,
m bluetooth
m bluetoot
m Bluetooo PC indo etivo de blu
ontrole -> mplo, o linv
bluetooth
verificar quravação wi
elo mode
(COM37) po Gerenciades -> Con
r Sandro Jucá
h, o fio az
, o fio verd
h, e o fio
th.
oth com 3,em: uetooth ->
exibir impvor.
h.
ual porta cireless.
em blueto
pode ser mador de Dnfiguração
zul é ligado
de é ligado
amarelo é
,3V ou 5V
> linvor ->
pressoras e
criada pelo
ooth.
modificadaispositivos de Porta -
o
o
é
V,
>
e
o
, , -
3- Config
módulo Bl
bps). Para
acima, gra
pino B7 irá
ligação do
Quando o
corretame
4- Adap
Adaptador
apresentar
necessário
tutorial), e
Adaptador
para grava
Aplicações p
guração d
uetooth es
a isto, bast
avar via US
á piscar int
circuito.
o led do p
ente e estão
Figura
ptador W
rSerial.hex
r o erro O
o gravar n
e em segu
rSerial.hex
ação wirele
práticas de Eletr
do Módul
stiver confi
a conectar
SB o firmw
termitente
pino B7 es
o aptos pa
a 2. 15: G
Wireless:
x da pasta
Odd addres
novamente
uida, reali
. Após a t
ess.
rônica e microco
lo blueto
igurado co
r, o módulo
ware Config
mente. Se
stiver pisca
ara gravaçã
ravação v
Agora
a Adaptad
ss at begin
o gerenc
zar novam
transferên
ontroladores em
[ 33 ]
ooth: A gr
om o mesm
o bluetooth
figbluetotth
o led não
ando, sign
ão wireless
via USB d
grave,
orWireless
inning of H
ciador.hex,
mente a g
cia deste
m sistemas comp
ravação w
mo baud ra
h ao micro
h9600to192
piscar, pr
nifica que
s.
e Configu
novament
s. Se, apó
HEX file er
com qua
ravação vi
firmware,
putacionais, por
wireless só
ate do micr
ocontrolado
200.hex e
ovavelmen
os módulo
uração wi
te via
ós a grava
rror, como
lquer grav
ia USB do
o microco
r Sandro Jucá
vai acont
rocontrolad
or, ver circ
verificar s
nte existe u
os estão c
ireless.
USB, o
ação do A
o na figura
vador espe
o firmware
ontrolador
tecer se o
dor (19200
cuito básico
se o led no
um erro na
conectados
firmware
Adaptador
a abaixo, é
ecifico (ve
e aplicativo
está apto
o
0
o
o
a
s
e
,
é
r
o
o
Ago
Pesquisar
vídeo PIC
programas
Exe
Fig
As vantagde modecomputadogravação d
Aplicações p
Figur
ora basta
-> Promp
C wireless
s aplicativo
emplo: san
gura 2. 17
ens do moems Bluetores e cede microco
práticas de Eletr
ra 2. 16: G
acessar a
pt de Coma
Zigbee p
os.hex com
nusbee Exe
7: Gravaçã
odem Bluetooth já elulares. Aontroladore
rônica e microco
Gravação
a pasta sa
ando), com
programmin
mo o Exemp
emplo1Wir
ão wirele
tooth em disponíve
A desvantaes máxima
ontroladores em
[ 34 ]
o via USB
anusbee p
mo na figu
ng II, as
plo1wireles
reless.hex
ess blueto
relação aoeis em vagem em de 10 me
m sistemas comp
de Adapt
pelo Prom
ura abaixo
linhas de
ss.hex con
–p COM9
ooth pelo
o Zigbee, svários sist
relação atros.
putacionais, por
tador wire
pt do Wi
, e digitar,
comando
tido na pa
prompt d
são o preçotemas coao Zigbee
r Sandro Jucá
eless.
ndows@ (
r, como mo
o, para tra
sta sanusb
do Window
o e a dispomputacion
é a distâ
(Iniciar ->
ostrado no
ansferir os
bee.
ws.
ponibilidadenais comoância para
>
o
s
e o a
2.4
Devemulação interface Iclock, umamultiplicadoscilador R
Esseque um daMHz via U4 MHz via
2.5
Nes
canal USBCommunicdo canal Uatravés deCCS® Comprograma são os res
A bexemplos,a emulaçãbiblioteca EEPROM inusb_san_c
usb_cdc_Ex.: prinusb_cdc_Ex.: dado
Aplicações p
4 SISTE
vido à incserial via
I2C, esta fea para o cada por umRC interno
Fi
e princípioado digitadSB, depoisI2C e vice-
5 EMULA
ste tópico B do PICcations DevUSB 2.0. De qualquermpiler ou oaplicativo
sponsáveis biblioteca C a qual devão da comusb_san_cnterna do cdc.h para
_putc() – ntf(usb_cd_getc() – o = usb_c
práticas de Eletr
MA DUAL
compatibilida USB e aerramenta anal USB d
m prescalede 4 MHz,
igura 2. 1
o de clock do no teclas para perif-versa.
AÇÃO DE
é mostrad18F2550.
evices ClassDessa formr softwareo ambientegravado npor esta e
CDC para ve estar namunicaçãocdc.h, commicrocontrcomunicaç
o microcodc_putc, "retém um
cdc_getc(
rônica e microco
L CLOCK
dade entrea frequêncadota o p
de 48MHz, er interno, , como é il
18: Comun
paralelo, rado do comféricos com
COMUNIC
do um métUma das
ss (CDC), qma, é poss
monitor se de prograno PIC, coemulação do programa mesma p serial RS
mo mostra rolador. Asção com a
ntrolador e"\r\nEndercaractere
(); //retém
ontroladores em
[ 35 ]
e as frequcia padrãoprincípio D proveniene outra p
ustrado na
nicação P
realizado pmputador, mo um reló
CAÇÃO SE
todo de cos formas que emula sível se coserial RS-2amação Deom a biblioda porta RSma.c do mpasta ondeS-232. Aléa o exem
s funções CCOM virtu
envia caracreco para eASCII emu
m um carac
m sistemas comp
uências neo utilizada
Dual Clock, nte do cristpara o CPa figura ab
PIC com P
pela instrutrafegue p
ógio RTC o
ERIAL NO
omunicaçãomais simpuma port
omunicar c232 como elphi®. O oteca CDC S-232 virtuicrocontrole está o prém disso, plo de leitCDC mais uual são:
cteres ASCescrever: "ulado pela tere na va
putacionais, por
ecessárias pela CPU
ou seja, utal osciladoPU de 4 Maixo.
PC e via I2
ção clock_para o micou para a m
O WINDOW
o serial bidples, é ata COM RScom caraco HyperTdriver CDC(#include
ual através lador está ograma.c ao programura e escrutilizadas c
CII emulado); USB. riável dado
r Sandro Jucá
para a gU, temporutiliza duasor externoMHz, prove
2C.
k_int_4MHz(crocontrolamemória EE
WS
direcional través do
S-232 virtucteres ASCTerminal, oC instaladoe <usb_sa da USB. dentro da
a ser compma.c deverita em umcontidas na
os via USB
o
gravação erizadores es fontes de de 20MHzeniente do
z(), permiteador em 48EPROM em
através doprotocolo
ual, atravésII via USB
o SIOW doo no PC e on_cdc.h>)
a pasta depilado parae inserir a
m buffer daa biblioteca
B.
e e e z o
e 8 m
o o s B o o ,
e a a a a
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 36 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 37 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 38 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 39 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 40 ]
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
//verificapróximo bycomando=ASCII if (comandif (comand output_higdelay_ms(output_lowdelay_ms( -------------
Paraentre o coem http://wml . Após execvirtual gerItens do Dispositivo
Aplicações p
a se tem yte
=usb_cdc_g
do==’L’) odo==’D’)
gh(pin_B6)(500); w(pin_B6);(500);
-------------
Figur
a utilizar oomputador
www.4sha
cutar o prrada (COMPainel de
os e depois
práticas de Eletr
um novo
getc(); //s
output_higoutput_low
); // Pisca
;
-------------
ra 2. 26: V
o programar e o micro
ared.com/
rograma dM3,COM4,Ce Controles clique em
rônica e microco
byte no b
se chegou,
gh(pin_b7)w(pin_b7);
Led na fun
-------------
Visualizaç
a de comuocontrolado
/file/1itVI
e comunicOM11,etc.\Sistema
m Conectar
ontroladores em
[ 41 ]
buffer de
, retém o
; printf(us; printf(usb
nção princi
-------------
ção de tex
unicação Jor, é nece
Iv9s/101
cação seri) no Winde altere
r, como mo
m sistemas comp
recepção,
caractere
b_cdc_putb_cdc_putc
pal
-------------
xtos via s
ava-SanUSssário baix
1009Softw
al Java-Sadows@, emno prograostra a figu
putacionais, por
depois o
e compar
c, “\r\nLedc, “\r\nLed
-------------
serial emu
SB para emxá-lo atrav
wareComS
anUSB, verm Painel dama serialura abaixo.
r Sandro Jucá
kbhit é ze
ra com ‘L’
d Ligado\r\d Desligado
-------------
ulada.
mulação sevés do link
Serial_W
rifique a pde Controlel Java- Sa.
erado para
ou ‘D’ em
\n”); o\r\n”);
-------------
erial virtuak disponíve
indow.ht
porta COMe\Todos osanUSB em
a
m
al el
M s
m
2.6
Esta
mais simpSanUSB.de10.04, equem Aplicat Se atualizadohttp://wpasta gera Se com http://w A fmicrocontr
Aplicações p
Figur
6 GRAVA
a aplicaçãoples e direeb é possíuivalente otivos -> acvocê já te
www.4shaal http://ainda não
o www.4shafigura abairoladores v
práticas de Eletr
ra 2. 27: I
ANDO O M
o substitui eta de graível instalaou posteriocessórios. em o Java
ared.com//www.4sh
tem o JavJava
ared.com/ixo mostravia USB:
rônica e microco
Interface
MICROCO
a gravaçãoavação. Coar este apor). Depois
a instaladodisponíve
/file/RN4hared.comva (JRE oua /file/3mha a interfa
ontroladores em
[ 42 ]
e em Java
ONTROLAD
o via USB om apenaslicativo ems de instala
o (JRE ou el
4xpF_T/sam/file/sIZu SDK), ba
JRE hWZS5g/sace gráfica
m sistemas comp
de comu
DOR VIA
pelo termis dois cliq
m qualquerado, a inte
SDK) baix
anusb_LinZwBP4r/aixe o inst
e sanusb.hta desenvo
putacionais, por
nicação s
USB NO L
nal do Linuques no inr máquinaerface de g
xe o instalano
nux.html 100727Saalador San
disptml . lvida para
r Sandro Jucá
serial.
LINUX
ux, pois é nstalador aa com Linugravação é
ador auto
contido taanUSB.htnUSB, já cponível
gravação
uma formaautomáticoux (Ubuntué localizada
mático.deblink
ambém natml. configurado
em
o direta de
a o u a
b : a
o :
e
NescompiladoResetar o ainda um
É imlogado comsu), e quanteriormepara PIC, SanUSB ouApós gravcircuito Sabotão ou correto, amicrocontrutilizando Para progrconecte opressione
2.7
Aplicações p
F
ste aplicatio, para Gr
microconbotão paramportante m permisse para esente no mo gerencia
u em httpvar o GereanUSB em fio ) e conacenderá rolador, da interfaceramar novao cabo USo botão Gr
7 GRAVA
práticas de Eletr
Figura 2. 2
ivo, estão ravar o prtrolador na gravar e salientar q
são para acstabelecer
microcontroador de gr://www.nciadorLinmodo de
necte o caá o led do de forma e USB. amente, b
SB de alimravar&Rese
ANDO O P
rônica e microco
28: Mensa
disponíverograma hno intuito resetar auque para ucessar a pcomunicaç
olador, somravação pe4shared.cux.hex cogravação
abo USB dpino B7. simples e
asta pressmentação, etar.
PIC VIA U
ontroladores em
[ 43 ]
agem de
is botões hexadecimade colocá-
utomaticamutilizar estaporta USB cção com
mente umaela USB Gecom/file/m um grapela USB
o circuito Pronto, o s
e direta,
ionar o boselecione
USB PELO
m sistemas comp
programa
para Abriral no micr-lo em op
mente. a ferramencomo, poro microcoa vez, comerenciador/HGrf9nDvador con
B (pino 1 lno PC. Sesistema já quantos p
otão de grao progra
TERMINA
putacionais, por
a gravado
r o prograrocontrolad
peração. A
nta no Linuexemplo,
ntrolador m qualquerrLinux.hex,
Dz/Gerencvencional igado ao Ge o circuitestá prepa
programas
avação no ma.hex d
AL DO LIN
r Sandro Jucá
o.
ama em hedor via U
A interface
ux é necessuper-usué necessá
r gravador, disponíveciador.htmpara PIC, Gnd (0V) ito SanUSarado para
.hex voc
pino 1, deesejado e
NUX OU M
exadecimaSB e paraapresenta
ssário estauário (sudoário gravar específicoel na pastaml . coloque o
através deSB estivera gravar nocê deseja
esconecte eem Abrir e
MAC OSX
al a a
r o r o a
o e
er o r
e e
EstaMac OSX. instale http://wPara inicia1. Grave com o cirqualquer, (Linux, Ma2. Pelo Tepelo arqSanUSBMahttp://www 3. Após earquivo dig. / sanus
A fie também
4. Com o ccom botão 5. Para gestar mesm
Aplicações p
a aplicaçãoPara abrir
www.4shaar a gravaçno microcorcuito simpo gerenci
ac OSX e Werminal doquivo sanacPlugandPw.youtube
entrar na gitando: b-h gura abaix do proces
Figu
circuito Sao pressiona
gravar no mo diretór
práticas de Eletr
o é realizar o termina
o ared.com/ão com linontroladorples de giador de g
Windows@)o Linux ou nusb.deb, Play, onde.com/watc
pasta do
xo mostra sso de grav
ura 2. 29:
nUSB monado ou jum
microcontio do exec
rônica e microco
ada de foral é necess
san/file/sIZwhas de com
r, somenteravação Cgravação p). Mac OSX e no
de está ch?v=rSg_
exectável
o printscrevação pelo
Acesso à
ntado, colomp ) e cone
trolador, outável san
ontroladores em
[ 44 ]
rma simplesário baixanusb.deb wBP4r/10mando é ime uma vezCOM84 despela USB
X acesse onMac Oo exec
i3gHF3U .
sanusb,
een de exeo terminal:
à pasta pe
oque-o em ecte o cabo
o firmwareusb, então
m sistemas comp
es em linhar e instala
00727Sanmportante z, com umscrito nestGerenciado
nde está oSX acess
cutável sa
acesse inf
emplo de u
elo termin
modo de go USB do c
desejadoo para a gr
putacionais, por
a de comaar o softwa
disponívnUSB.htm
seguir os s gravador ta apostila
dor.hex, qu
o executávse a panusb. M
formações
um process
nal do LIN
gravação (circuito no
, como o ravação via
r Sandro Jucá
ando no tare Xcode.ível
ml . seguintes
r específicoa ou outroue é multi
vel sanusbpasta de Mais dea
do conte
so de aces
NUX.
(pino 1 ligaPC.
exemplo1a USB, digi
erminal do. No Linux
em
passos: o para PICo gravadoplataforma
b, instaladoarquivos
lhes em
eúdo deste
sso à pasta
ado ao Gnd
.hex, deveta-se:
o x, m
C r a
o s :
e
a
d
e
. / sanus 6. Depois . / sanus ou simplem
Paraconecte o microcontroutra portpasso 3.
2.8
Devemulação interface Iclock_int_4provenientoutra parailustrado n
Essecomputadocomo um
2.9
Nes
canal USBCommunicRS-232 vircomunicar
Aplicações p
b –w exe
de gravar,b –r
mente: . /
a programcabo USB rolador nãta USB, ab
8 SISTE
vido à incserial via
I2C, esta fe4MHz(), oute do cristaa o CPU dna figura a
Fi
e princípioor, trafegurelógio RT
9 EMULA
ste tópico B do PICcations Devrtual com r com cara
práticas de Eletr
mplo1.he
remova o
/ sanusb –
mar novamde alimen
ão for recobra um no
MA DUAL
compatibilida USB e aerramentau seja, utial osciladode 4 MHzbaixo.
igura 2. 3
o de clockue para o mC ou para
AÇÃO DE
é mostrad18F2550.
evices Classo microco
acteres ASC
rônica e microco
ex
botão ou j
–w exem
mente, basntação, e reonecido, f
ovo termina
L CLOCK
dade entrea frequênc pode adoliza duas f
or externo z, provenie
30: Comun
ck paralelomicrocontra memória
COMUNIC
do um métUma das
s (CDC), quntrolador, CII via US
ontroladores em
[ 45 ]
jump de g
plo1 –r
sta colocaepita os pafeche o teal e repita
e as frequcia padrãootar o prinfontes de de 20MHz
ente do os
nicação P
, permite rolador ema EEPROM
CAÇÃO SE
todo de cos formas ue é padrãatravés do
SB através
m sistemas comp
gravação, e
ar o jumpassos anteerminal, coa repita os
uências neo utilizadacípio Dual clock, uma multiplicascilador R
PIC com P
que um 48 MHz vem 4 MHz
ERIAL NO
omunicaçãomais simp
ão no Linuxo canal USde qualqu
putacionais, por
então reset
p de gravriores a paonecte o ms passos a
ecessárias pela CPU
l Clock reaa para o cda por umC interno
PC e via I2
dado digivia USB, dez via I2C e
O LINUX
o serial bidples, é atx e que emSB. Dessa uer softwar
r Sandro Jucá
t digitando
vação, desartir do pasmicrocontrnteriores a
para a gU, temporalizado pelacanal USB m prescaler
de 4 MH
2C.
itado no tepois para vice-versa
direcional través do mula uma forma, é re monitor
o:
sconecte esso 6. Se orolador ema partir do
gravação erizadores ea instruçãode 48MHzr interno, ez, como é
teclado doperiféricos.
através doprotocolo
porta COMpossível ser serial RS-
e o m o
e e o , e é
o s
o o M e -
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 46 ]
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)
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 47 ]
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 .
É pemulação
É pem http:Após coneem AplicatDispositivodigitar ls /como mos
Fig
Aplicações p
possível taserial virtu
possível ba://www.4ectar o mictivos -> Oos. Para li/dev/ttyAstra a figur
gura 2. 3
práticas de Eletr
mbém utiual entre o ixar esta f4shared.ccrocontrolaOutros, apstar a port
ACM* . É pa abaixo.
2: Interfa
rônica e microco
Figura
lizar o procomputad
ferramentacom/file/ador e abrparecerá a ta serial vipossível re
ace de com
ontroladores em
[ 48 ]
2. 31: Cu
ograma dedor e o mica de comu/5emc7knrir o prograporta seri
irtual geradealizar a co
municaçã
m sistemas comp
uteCOM.
e comuniccrocontrolaunicação senO/SerialJama de coal virtual gda, utilizan
omunicação
ão serial e
putacionais, por
ação seriador. erial atravéJava-sanu
omunicaçãogerada no ndo o Termo depois de
em Java p
r Sandro Jucá
al Java-Sa
és do link usb_10_ao serial JavLinux (tty
minal do Lie clicar em
para LINU
nUSB para
disponíveall.html va-SanUSB
yACM0) eminux, basta
m Conectar
UX.
a
el . B m a ,
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 49 ]
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);
----------------------
2.1
------------#include <#include < int32 tensa main() clock_int_4 usb_cdc_inusb_init();usb_task() setup_adc_setup_adc while(1) set_adc_cdelay_ms(tensao= (5printf (usb output_higdelay_ms(output_lowdelay_ms(
Para
em wwwTTP://www
Aplicações p
------------------
11 OBTENA VARIA
-------------<SanUSB.h<usb_san_
sao;
4MHz();
init(); // In; // Inicializ(); // Une o
c_ports(ANc(ADC_CLO
channel(0);(10); (5000*(int3b_cdc_putc
gh(pin_b7)(500); w(pin_b7);(500);
Figura 2
a obter no.tinyurl.cw.4shared
práticas de Eletr
-----------
NÇÃO DE AÇÃO DE U
--------------h> //Leitur_cdc.h>// B
nicializa o piza o protoco periférico
N0); //HabOCK_INTER
/;
32)read_adc,"\r\nA ten
);
;
2. 33: Uso
ovos prograom/SanU.com/docu
rônica e microco
-----------
UM VOLTUM POTEN
-------------ra de tensãBiblioteca p
protocolo Cocolo USB o com a usb
bilita entradRNAL);
//ANALÓGI // 5000 m // tensao
dc())/1023;nsao e' = %
o de poten
amas e proUSB como ument/Qst_
ontroladores em
[ 50 ]
-----------
TÍMETRONCIÔMET
-------------ão em mV para comu
CDC
sb do PC
da analógic
ICO mV o
3; %lu mV\r\
nciômetro
ojetos, bastambém b
_pem-/100
m sistemas comp
-----------
ATRAVÉSTRO
--------------com variaç
unicação se
ca - A0
DIGITAL(1 1023 read_
n",tensao)
o no conv
sta acessarbaixar a ap0923Aposti
putacionais, por
-----------
S DO CON
-------------ção de um erial virtual
10 bits) 3 _adc()
); // Imprim
versor AD
r os arquivpostila comla_CPIC.ht
r Sandro Jucá
-----------
NVERSOR
-------------m potenciôm
l
me pela se
D do PIC.
vos do grupmpleta disptml .
-----------
R AD COM
--------------metro
erial virtual
po SanUSBponível em
-
M
-
l
B m
2.1
Para
serial DB9circuito e a
F
Este circui
EstProgrammmais estámicrocontrgerenciadomicrocontr
O sdisponível
Aplicações p
12 CIRCU
a este circ9 (RS-232)a foto abai
Figura 2.
to a partir
Figu
te circuito mer) ou comável, poisrolador, eor.hex mrolador pelsoftware dem http:/
práticas de Eletr
UITO COM
cuito simple) e uma foixo mostra
34: Circu
da porta C
ura 2. 35:
de gravaçm WinPic (s após ae mesmo
mostrou-se la porta USde gravaç//www.4
rônica e microco
M84 PARA
es de gravonte exterm o esque
uito COM8
COM DB9 p
: Esquema
ção funcion(detectado a detecção indican
gravado SB nos sistção do ge4shared.co
ontroladores em
[ 51 ]
A GRAVAÇ
vação só é rna de 5V,ema simple
84 para g
pode ser v
a de ligaç
na com o como COM
ão do mndo ERRO
corretamtemas opererenciador.om/get/1
m sistemas comp
ÇÃO DO ge
necessário, que podes de ligaçã
ravação d
isualizado
ção do co
software M84 Progra
microcontroOR: Progmente paracionais W.hex pode1uP85Xru
putacionais, por
erenciado
o 3 resistoe ser obtião dos pino
do gerenc
na figura a
nector se
PICPgm (dammer). Elador, é
gramming ra geren
Windows@® ser baix
u/winpicp
r Sandro Jucá
or.hex
ores de 10kda da poros.
ciador.hex
abaixo.
erial.
detectado Este último
possível failed, o
ciar grav®, Linux e
xado atrvéprCOM84.
k, um caborta USB. O
x
como JDMo se mostra
gravar oo arquivovações noe Mac OSXés do link.html.
o O
M a o o o .
k,
Apómicrocontrpinos do pressione o programgravação, gerenciadoapareça “corretame
Aplicações p
Figura 2
ós a instarolador. UmPC, vá p"Initialize"
ma está pselecione
or.hex. Co“Programmente.
práticas de Eletr
2. 36: Tel
alação, exma vez quara "Inter". Se o softpronto pare em Fileomo citadomed Failed
rônica e microco
a de conf
ecute o pue o microcrface", seletware dissera gravar e Load &o anteriormd”, é prová
ontroladores em
[ 52 ]
figuração
programa. controladoecione " er que a ino gerenc
& Programmente, mesável que
m sistemas comp
do softw
Na guia or é conectCOM84 prnicializaçãociador.hex
mDevice e smo que, o gerenci
putacionais, por
ware de gr
"Device, tado à portrogrammero foi um êx
no microdepois s
após a griador.hex
r Sandro Jucá
ravação.
Config", rta COM RSr for seriaxito "Succe
ocontroladoselecione ravação e tenha sid
escolha oS-232 de 9al port", eess", entãoor. Para ao arquivoverificaçãoo gravado
o 9 e o a o o o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 53 ]
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..
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 54 ]
Figura 3. 2: Uso de periféricos no conversor A/D.
Para utilizar este periférico interno, basta:
setup_adc_ports (AN0_TO_AN2); //(Seleção dos pinos analógicos 18F2550)
setup_adc(ADC_CLOCK_INTERNAL ); //(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 /
(2n-1). Dessa forma, como a Resolução do sensor é 10mV/°C (RS), é necessário aplicar um
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 55 ]
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 DIGITAL 5V = 5000mV -> 1023
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 56 ]
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); ---------------------------------------------------------------------------------------------------------------
3.1.6 LEI
-------------#include < #include < int16 temp main() clock_int_4usb_cdc_inusb_init();usb_task() setup_adcsetup_adc while(1) set_adc_cdelay_ms(temperatu(430*tempprintf (usb output_higdelay_ms(output_lowdelay_ms(-------------
Aplicações p
Figura
ITURA DE
-------------<SanUSB.h
<usb_san_
peratura;
4MHz(); nit(); // In; // Inicializ); // Une o
c_ports(NAc(ADC_CLO
hannel(0);(10); ura=430*rep) b_cdc_putc
gh(pin_b7)(500); w(pin_b7);(500); -------------
práticas de Eletr
a 3. 4: Con
E TEMPER
-------------h>
_cdc.h>// B
icializa o pza o protoc
o periférico
A0); //HabOCK_INTER
;
ead_adc()/
c,”\r\nTem
); // Pisc
;
-------------
rônica e microco
nexão do
RATURA CO
-------------
Biblioteca p
protocolo Ccolo USB com a US
ilita entradRNAL);
/1023; //V
peratura d
a Led em o
-------------
ontroladores em
[ 57 ]
potenciô
OM O LM
-------------
para comu
CDC
SB do PC
da analógic
Vref = 4,
do LM35 =
operação n
-------------
m sistemas comp
metro no
35 ATRAV
-------------
nicação se
ca – A0
,3V devido
%lu C\r\n
normal
-------------
putacionais, por
converso
VÉS DO C
-------------
erial virtual
o à qued
”,temperat
-------------
r Sandro Jucá
or A/D.
ONVERSO
-------------
l
da no dio
tura);
-------------
OR AD
-------------
odo, então
-------------
o
3.1.7 TER
Um termiresistênciagrande vasimples, co
Convém le
LINEARIZ
Um onde um tde tensão
Aplicações p
Figu
RMISTOR
stor é umas variam ariação comomo mostr
embrar que
ZAÇÃO
forma mutermistor N. O circuit
práticas de Eletr
ra 3. 5: Le
R
ma resistêcom a temm a tempera a figura
Figu
e a respost
Figu
uito comumNTC é coneo do diviso
rônica e microco
eitura de
ncia variámperatura, eratura. A baixo.
ura 3. 6: C
ta de um te
ura 3. 7: R
m de lineaectado em or contém
ontroladores em
[ 58 ]
tempera
ável com só que os
A ligação d
Conexão
ermistor n
Resposta
arização dosérie com
m uma font
m sistemas comp
tura via m
a temperas termistor
do termisto
do termis
ão é linear
do termis
o termistor um resistote de tensã
putacionais, por
monitor se
atura. Na res são feior ao micr
stor.
r, como mo
stor.
r é por moor normal ão de refe
r Sandro Jucá
erial.
realidadeitos para trocontolado
ostra a figu
odalidade formando
erência (Vr
e todas asterem umaor é muito
ura abaixo
da tensãoum diviso
ref) igual a
s a o
.
, r a
2,5V. Isto Se o valor ambiente ambiente
3.2 ME
O m
3.2.1 ME
A m
programa apagável ea byte, o q
3.2.2 ME
A msystem), programa
Aplicações p
tem o efe do resisto(250 C), en(como vist
MÓRIAS
microcontro
MÓRIA D
memória decompilado
eletronicamque a torna
MÓRIA D
memória dse localizaque está s
práticas de Eletr
ito de prodor R25C escontão a regto em figur
Figura
DO MICR
olador apre
DE PROGR
e programao. Essa memente), maa mais eco
DE INSTRU
de instruçõa dentro sendo proc
rônica e microco
duzir uma tolhida for i
gião de tenra abaixo).
a 3. 8: Lin
ROCONTRO
esenta dive
RAMA
a flash, é oemória é uas só podeonômica.
UÇÕES
ões, que éda CPU p
cessado e e
ontroladores em
[ 59 ]
tensão na igual ao da
nsão linear
nearizaçã
OLADOR
ersos tipos
o local onduma espéce ser grava
é uma esppara compexecução d
m sistemas comp
saída que a resistêncserá simé
ão do term
s de memó
de são gravcie de EEPda e apag
pécie de Bparação code uma açã
putacionais, por
seja linearcia do termétrica em to
mistor.
ria, entre e
vados o cóROM (memada compl
BIOS (binaom o códão corresp
r Sandro Jucá
r com a temmistor na tetorno da te
elas:
ódigo hexamória progletamente
ary input adigo hexadpondente.
mperaturaemperaturaemperatura
decimal dogramável ee não byte
and outputdecimal do
. a a
o e e
ut o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 60 ]
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).
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 61 ]
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.
Paraarmazenarexemplo, disponíveiscontida na
Fig
Notpossibilitarnovamente PONTEIRPonteirosExemplo p unsigned*p='7'; //++p; //In Programa próprio tec
Aplicações p
a reconher o valor na memós entre 0a memória
gura 3. 1
te que o prr a inserçe a memór
ROS s guardampara declar
d int16 p=/ Conteúdoncrementa
de controeclado atrav
práticas de Eletr
Fi
ecer uma das teclasria de dad
000h a 7Fde progra
1: Formas
rograma deção de noria de prog
m endereçrar um pon
=100; o endereçaa posição
ole de acesvés de uma
rônica e microco
gura 3. 1
senha ds digitadasdos RAM FFh), depoma flash (“
s de comp
e controle ovas senhgrama do m
ços de menteiro:
//ponteirado por p épara receb
sso com ara senha de
ontroladores em
[ 62 ]
0: Teclad
digitada es em seqü(pode-se
ois compa“ROM”) ou
paração c
de acessohas na EEmicrocontro
emória de
ro igual a pé igual a ‘7ber próxim
rmazenamee administr
m sistemas comp
do Matrici
m um teüência emutilizar qurá-la com
u na EEPRO
com a sen
o em anexoEPROM, seolador.
e program
posição 107’(ASC II) omo dado.
mento de setrador (mes
putacionais, por
al.
eclado mam alguma uaisquer po uma sen
OM interna
nha pré-p
o utiliza a Eem a nec
ma.
0 ou 0x37.
enhas na Estre):
r Sandro Jucá
atricial é memória, osições donha pré-pa.
rogramad
EEPROM incessidade
EEPROM in
necessáriocomo po
os 2Kbytesrogramada
da.
nterna parade grava
nterna pelo
o r s a
a r
o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 63 ]
///////////////////////////////////////////////////////////////////////// ///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);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 64 ]
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 );
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 65 ]
++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
realizar o emulação
A geramplitude pulsos emsaturação chaveame
O peré o ciclo damplitude
No módo timer 2 do timer 2 e consequ
O valor inserido pesignificativmenos sigtrabalho.
Mais de
Aplicações p
PWM pelo pelo proce
ração do Pconstante
mitidos na do transisnto.
ríodo T0 é ode trabalhem nível l
dulo CCP, ode 8 bits cquando centementedigital (Vdelo usuáriovos do valognificativos
etalhes no v
práticas de Eletr
periférico essador doPWM é proe (+5V por
base de stor e, cons
o intervalo ho (duty-ciógico alto.
F
o registro com prescahega ao vae a frequêndig) de 10 o. O Vdig or digital, do valor d
vídeo: http
rônica e microco
interno CCmicrocont
oduzida, ger exemplo)uma chav
sequentem
de tempo icle), ou se
Figura 7. 1
PR2 é carraler (multipalor de PRncia desejabits do cicO Vdig é e nos bits
digital, e s
p://www.yo
ontroladores em
[ 66 ]
CP do micrtrolador, coeralmente,), tendo emve eletrôn
mente, men
que se regeja, o tem
1: Ciclo de
regado parplicador de
R2, seta o fada do PWlo de trabacarregado s 5 e 4 do
serve de re
outube.com
m sistemas comp
rocontroladomo mostr, pelo chavm vista qunica, comonor a tensã
gistra o pempo em q
e trabalho
ra servir de tempo deflip-flop do
WM (freqPWalho, obtidem CCPR
o CCP1COeferência p
m/watch?v
putacionais, por
dor ou porrado no iteveamento ue quanto o um traão lado da
eríodo repeque o puls
o.
e referênce geralmeno CCP para WM). o do valor
R1L, que guN são car
para o time
v=lB21b3zA
r Sandro Jucá
r software em 3.3.1. de uma temenor a laansistor, m carga, res
etitivo do pso perman
cia de contnte 4 ou 16 gerar o p
percentuauarda os 8rregados oer2 resetar
A4Ac
através de
ensão comargura dosmenor é asultante do
pulso e o τ0ece com a
tagem para6). Quandoeríodo (T0)
al (0 a 100)8 bits maisos dois bitsr o ciclo de
e
m s a o
0 a
a o )
) s s e
CONTR
A finapulsos (PWinerente d
O pro
período cocorrespondtrabalho. -------------#include < #define m#define le unsigned iint1 flag1, main() clock_int_4 port_b_puincton=2; duty cicle guardatonif (guardat while (1) ton=incton if (!input(p
Aplicações p
ROLE PW
alidade desWM) é realo circuito e
ograma abonstante dde a 1ms,
-------------<SanUSB.h
motor pin_bed pin_b0
int ton,toff flag2;
4MHz();
ullups(true)inctoff=18)
n=read_eepton>0 &&
n; toff=inc
pin_b1)) f
práticas de Eletr
WM POR SO
ste controlizar uma cem alta fre
aixo mostrde 20ms, , ou seja,
-------------h>
b7
f,incton,inc
); 8; //Períod
prom(10);gguardaton
ctoff;
flag1=1;
rônica e microco
OFTWARE
e de velocconversão dequência.
Figu
ra o controonde cadou seja,
-------------
ctoff,guard
do de 20m
guardatoffn<=20) in
ontroladores em
[ 67 ]
E DE VELO
cidade comdigital-ana
ura 7. 2: P
ole de velda incremeum acrésc
-------------
aton,guard
s - Passo
f=read_eepncton=guar
m sistemas comp
OCIDADE
m a modulalógica que
PWM.
ocidade deento ou decimo ou d
-------------
datoff;
mínimo de
prom(11);rdaton; inc
putacionais, por
DE UM M
ação de tee acontece
e um motrecremento
decréscimo
-------------
e tempo =
ctoff=guard
r Sandro Jucá
MOTOR CC
ensão por devido à i
ro CC por o da ondao de 5% n
-------------
= 1ms (5%
rdatoff;
C
largura dempedância
PWM com quadrada
no ciclo de
-------------
% (1/20) do
e a
m a e
o
if (inctoinctoff;outwrite_eepr(flag1==1 if (!input(pif (inctoincton;outwrite_eepr ou w ou w -------------A figura adesse circu
INTER
As qualquer mum endere
Aplicações p
on<20 tput_high(lrom(10,inc
1) e se o bo
pin_b2)) foff<20 tput_low(lerom(10,inc
utput_highwhile(ton)
utput_low(while(toff)
-------------
abaixo moscuito no víd
RRUPÇÕ
INTERRU
interrupçõmomento) eço para tr
práticas de Eletr
&& flagled);//se ncton);writeotão já foi
flag2=1; && flag
ed); cton);write
h(motor); --ton;delay
(motor); --toff;dela
-------------stra o circudeo http:/
F
ÕES E T
UPÇÕES
ões são cacausando
ratamento
rônica e microco
g1==1 ão chegou
e_eeprom(1solto (inpu // a
g2==1
e_eeprom(1
y_ms(1);
ay_ms(1); -------------
uito monta//www.yo
igura 7. 3
EMPOR
ausadas atum desvioda interru
ontroladores em
[ 68 ]
&& inpu no máxim11,inctoff)ut(pin_b1)a onda qua
&& inp
11,inctoff)
//Parte a
//Parte b
-------------ado para cooutube.co
3: PWM co
RIZADO
través de o no proceupção. Uma
m sistemas comp
put(pin_b1)mo (incton<; //se) incremen
adrada e gu
put(pin_b2)
;
lta da ond
baixa da on
-------------com este eom/watch
om Mosfe
ORES
eventos aessamento.a boa anal
putacionais, por
) ) <50), e o botãnte uarde os va
) )
a quadrada
nda quadra -------------
exemplo. Vh?v=6IIH
et.
assíncrono Este desvogia para
r Sandro Jucá
flag1=0;+
ão foi p
valores na e
flag2=0;+
a
ada
-------------Veja o funcH02dbboE
os (podemvio tem commelhor en
++incton;--
pressionado
eeprom
++inctoff;--
-------------cionamentoE .
ocorrer amo destino
ntendermos
-
o
-
to
a o s
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 69 ]
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());
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 70 ]
#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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 71 ]
#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);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 72 ]
---------------------------------------------------------------------------------------------------------------
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;
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 73 ]
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); // Conta 10000 us (10ms) para estourar while (1) //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.
Nescondionais
OPER&
Exemplos:if (segundum relógio if (x>0 &
Considere
É im
determinafísicas e aprograma.
Aplicações p
5.1 INÚME
sse caso, s geralmen
RADOR && ll !
dodec==05o para seta&& x<20)
5.2 I
as portas
mportante do sistemaas diversa.
práticas de Eletr
INSTRUÇEROS
os operante entre n
5 && (minar a flagwr(y=x;) //
INSTRUÇ
lógicas ab
salientar qa real. Atraas combina
rônica e microco
ÇÕES LÓG
adores sãúmeros int
nutodec==ite Estabelece
ÇÕES LÓG
aixo:
Figura 5.
que emulaçavés do ciações das
ontroladores em
[ 74 ]
GICAS P
o utilizadoteiros.
COOperaçOperaç
Operaçã
=00|| minu
endo faixa
ICAS BOO
1: Porta
ção é a reprcuito San mesmas
m sistemas comp
PARA TE
os para
OMANDO ção E (AND)ção OU (OR)ão NÃO (NOT
utodec==3
de valores
OLANAS B
s Lógicas
produção vUSB, é pocom apen
putacionais, por
STES CO
realizar o
) T)
0)) flagw
s para y.
BIT A BIT
s.
via softwarssível emunas uma f
r Sandro Jucá
ONDICION
operações
write=1;//
T
re das funçular as porfunção bo
NAIS DE
de testes
Analisando
ções de umrtas lógicasooleana no
E
s
o
m s o
OPER
OperaçãOperação
OperaçãoOU exclu
O csaída do c
Figura
É imExclusivo éinverso douma expre
Exemplo microcontr
Aplicações p
RAÇÃO
o E (AND)o OU (OR)
o NÃO (NOsivo (XOR)
circuito abacircuito lógi
a 5. 2: Us
mportanteé possível o OU-Excluessão boole
Figura 5.
1: Elaborrolador.
práticas de Eletr
EXPR
)
O) ) aixo mostraico boolean
so de resis
e salientar construir
usivo. Isto eana em C
. 3: Outra
re um prog
rônica e microco
RESSÃO BLITERAS= A . S= A +
S= S= A
a as possívno é expre
stores de
que atraoutras opeé realizad
C e apresen
as funções
grama para
ontroladores em
[ 75 ]
BOOLEANAAL B
+ B B
veis entradessa de for
e pull dow
avés das oerações codo transforntando o re
s lógicas
a emular u
m sistemas comp
A EXPR
das booleama real at
wn para ap
operações omo NANDrmando a esultado e
a partir d
uma porta
putacionais, por
RESSÃO BEM C
S= A &S= A l S= !A
S= A ^anas nos pravés do L
plicar fun
básicas E, NOR e Cexpressãom um LED
de NOT, O
lógica OU-
r Sandro Jucá
BOOLEANAC & B B A ^ B inos B1, B
LED no pino
ção lógica
E, OU, NÃCoincidêncio booleanaD de saída.
OR e AND.
-Exclusivo
A
B2 e B3 e ao B7.
a 0/1.
ÃO e OU-a, que é o
a literal em
através do
a
-o m
o
------------- #include short int A main() clock_int_4 while (TRU A=input(pB=input(p saida = Ados pinosoutput_bitalocado em ledpisca=!output_bitdelay_ms( ------------------- Exemplo booleano a
O program-------------#include <short int A main() clock_int_4 while (TRU A=input(pB=input(pC=input(p
Aplicações p
-------------<SanUSB.
A, B, saida,
4MHz();
UE)
pin_b1); //epin_b2); //e
A^B; //sas A e B t(pin_b7,sam saida
!ledpisca; /t(pin_b0,le(500);
-------------
2: Elaboabaixo.
Fig
ma para em-------------<SanUSB.hA, B, C, said
4MHz();
UE)
pin_b1); //epin_b2); //epin_b3); //e
práticas de Eletr
-------------h> // Emu, ledpisca;
entrada coentrada co
aida é igu
aida); //O
// ledpisca edpisca); //
-------------
re um pro
gura 5. 4:
mular de fo-------------h> // Emulda, ledpisc
entrada coentrada coentrada co
rônica e microco
-------------ulação de c
m pull-dowm pull-dow
al ao resu
pino_b7
é igual ao/ b0 recebe
-------------
grama e a
Exemplo
orma real e-------------ação de ci
ca;
m pull-dowm pull-dowm pull-dow
ontroladores em
[ 76 ]
-------------circuitos lóg
wn externown externo
ultado do
mostra o
o inverso de o valor d
-------------
a tabela ve
de circui
esse circuit-------------ircuitos lóg
wn externown externown externo
m sistemas comp
-------------gicos boole
o (resistor o (resistor
o OU-Exclu
o resultado
e ledpiscae ledpisca
-------------
erdade par
to combin
o é mostra-------------gicos boole
o (resistor o (resistor o (resistor
putacionais, por
-------------eanos (OU
conectado conectado
usivo obt
o do circu
-------------
a emular u
nacional (
ado abaixo-------------anos
conectado conectado conectado
r Sandro Jucá
--------------Exclusivo)
ao Terra) ao Terra)
tida pelas
uito lógico
-------------
uma o circ
(1).
o: -------------
ao Terra) ao Terra)
o ao Terra)
-------------)
s entradas
o booleano
-------------
cuito lógico
-------------
s
o
o
saida = !b2 e b3 output_bit ledpisca=!output_bitdelay_ms( ------------------- Note que apenas a fcircuito bo
A00001111
Exemplo booleano a
-------------#include <short int A main() clock_int_4 while (TRU
Aplicações p
(!A & B) &
t(pin_b7,sa
!ledpisca; /t(pin_b0,le(500);
-------------
para emulfunção de ooleano é m
A 0 0 0 0
3: Elaboabaixo.
Fig
-------------<SanUSB.hA, B, C, D,
4MHz();
UE)
práticas de Eletr
& !C; //sa
aida); //O p
// ledpisca edpisca); //
-------------
ar qualqueconversão
mostarada
ENTRB00
00
re um pro
gura 5. 5:
-------------h> // Emulsaida, ledp
rônica e microco
aida do ci
pino_b7 m
é igual ao/ b0 recebe
-------------
er outro ciro em negrit
abaixo:
RADAS B 0 0 1 1 0 0 1 1
grama e a
Exemplo
-------------ação de ci
pisca;
ontroladores em
[ 77 ]
ircuito bo
mostra o res
o inverso de o valor d
-------------
rcuito booto (saida =
a tabela ve
S=
de circui
-------------ircuitos lóg
m sistemas comp
ooleano o
sultado do
e ledpiscae ledpisca
-------------
leano com= !(!A & B)
C 0 1 0 1 0 1 0 1
erdade par
S= (A & B)
to combin
-------------gicos boole
putacionais, por
btida pela
circuito ló
-------------
três entra) & !C). A t
SA
a emular u
) | !C |
nacional (
-------------anos
r Sandro Jucá
as entrad
ógico boole
-------------
adas, bastatabela verd
AIDA S 1 0 0 0 1 0 1 0
uma o circ
!(C & D)
(2).
-------------
das de b1,
eano
-------------
a modificadade desse
cuito lógico
-------------
,
r e
o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 78 ]
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 SAIDA A B C D S 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1
A tabela verdade pode ser facilmente comprovada de forma real montando o circuito proposto.
5.3 EMULAÇÃO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS
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 necessita-se 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
respectivocomum. Nliga com V
Com
devemos u(anodo co560 ohms segmentosqueimado.
Os “desconheexemplo, display de reais ou em
Os 9307 (cato“desenhad
Aplicações p
os pinos. NNão esqueçVcc.
Figur
mo os segusar um re
omum), sen para umas, para te. decodificad
ecido” de em um có7 segmen
mulados, odecodificaodo comumdo” pelos s
práticas de Eletr
No lado dça que no
ra 5. 6: Di
gmentos sesistor emnão serão a fonte de er certeza
dores, invelinguagemódigo comntos. Os deou seja, redores de dm), recebesegmentos
rônica e microco
direito, os anodo com
isplay de
são leds, ecada segmqueimado5Volts. Uque não
erso dos com de máqu
preensível,ecodificadoproduzidosdisplays deem 4 bits dos displa
ontroladores em
[ 79 ]
dois tiposmum o led
7 segmen
então é nmento (ca
os. Normalma dica, sestá usa
odificadoreuina, como, como o
ores fixos ps via softwe 7 segmede entrada
ays.
m sistemas comp
s de displ liga com
ntos e con
necessário todo comumente se se for usarando um d
es, tem a fo o bináricódigo de
podem ser ware, como entos, coma para a d
putacionais, por
lays, anodGnd e no
nexão int
limitar a um), ou aputilizam rer um displdisplay co
função de o de entr
ecimal ou uconstruídoé o caso p
mo o 9317 decodificaç
r Sandro Jucá
do comumcatodo co
terna.
corrente, penas um esistores eay, teste a
om algum
converter rada mostrum desenos com porproposto. (anodo co
ção do núm
m e catodomum o led
para issono comumntre 220 eantes cadasegmento
um códigorado nesteho em umrtas lógicas
omum) e omero a se
o d
o m e a o
o e m s
o r
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 80 ]
CI - 9317 Entradas Saídas Desen
ho /LT
/RBI
A0 A1 A2 A3 a b c d e f g ponto
L X X X X X L L L L L L L H teste H L L L L L H H H H H H H L apagaH H L L L L L L L L L L H H 0 H X H L L L H L L H H H H H 1 H X L H L L L L H L L H L H 2 H X H H L L L L L L H H L H 3 H X L L H L H L L H H L L H 4 H X H L H L L H L L H L L H 5 H X L H H L L H L L L L L H 6 H X H H H L L L L H H H H H 7 H X L L L H L L L L L L L H 8 H X H L L H L L L L H L L 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 DISPLAY
B6 B5 B4 B3 B2 B1 B0 Porta B Hexadeci
mal g f e d c b a
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
int setsegelementosint i; //índ void main clock_int set_tris_ while(1) for (i=0 port_b delay_ ----------------------Exemplo:escrever, pinos do mcom um rabaixo mo
Aplicações p
[10] = 0xs que desendice i (pont
()
t_4MHz(); b(0b00000
0;i<10;i++
b = setseg_ms(500);
----------------------: Construaletra por lmicrocontrresistor deostra a liga
Figura
práticas de Eletr
x40,0x79,0nham de 0teiro)
0000);// De
+)
[i];
-------------- a um decoletra, a caolador e o
e 220Ω a 1ção do dis
a 5. 7: Co
rônica e microco
0x24,0x30,0 a 9
efine os pin
-----------
odificador eada segundos pinos do1KΩ para play de 7 s
onexão do
ontroladores em
[ 81 ]
,0x19,0x12
nos da por
-----------
emulado ado, a palao display enão queimsegmentos
o display 7
m sistemas comp
2,0x02,0x7
rta B como
-----------
atarvés de vra StoP.
em anodo mar os segs.
7 seg na p
putacionais, por
78,0x00,0x
o saída
-----------
diagramaÉ importacomum de
gmentos d
porta B d
r Sandro Jucá
10; //Vet
-----------
as de Karnante salienevem ser cdo display.
o PIC.
tor com 10
-----------
naugh paratar que osconectadosO circuito
0
-
a s s o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 82 ]
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
S 0 0 0 1 0 0 1 0 0 t 0 1 1 1 1 0 0 0 0 o 1 0 1 1 0 0 0 1 0 P 1 1 0 0 1 1 0 0 0
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()
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 83 ]
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
U 0 0 1 0 0 0 0 0 1 S 0 1 0 1 0 0 1 0 0 b 1 0 1 1 0 0 0 0 0 2 1 1 0 0 1 0 0 1 0
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 84 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 85 ]
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);
------------- COMU
A comudesenvolviBaudot, emdo Teletynúmeros, surgiu o Pa
Na trarepresentaPara que oprecedido Entenda q(presença RS-232 evdigitais.
AlguaproximadA Comunicomunicaça comuniconseqüen
Aplicações p
Figu
-------------
NICAÇÃ
unicação simento com 1871, daype, criou
e símboloadrão de c
ansmissão ado pela po Teletypecom um s
que o estade corren
voluiu e se
umas indamente -1icação serção muito rcação serntemente m
práticas de Eletr
ura 5. 811
-------------
ÃO SER
serial teve m a invenaí o nome também
os para a comunicaçãdos carac
presença dee conseguissinal Espaçdo da linh
nte elétricae tornou um
nterfaces 10v e +10vial é feitarecomendarial apresemenor velo
rônica e microco
1: Multiple
-------------
RIAL EIA
início comção do TeBaud Rateuma tabetransferên
ão RS-232,cteres atrae corrente sse distingço (start bha ociosa (a). Foi basm padrão
EIA/RS-2v, mas supa pela tranado para trenta um ocidade em
ontroladores em
[ 86 ]
exação de
-------------
A/RS-2
m a invençeletype (tete. Baudot, ela de cóncia serial, que signiavés da l elétrica, euir o iníciobit) e final(sem transseado nessmuito utili
232 nosportam mínnsmissão ransmissãomenor cu
m relação à
m sistemas comp
e display
-------------
232
ão do teléeletipo) pe
além de cdigos (Cóassíncron
fica Padrãoinha telege o Espaçoo e o final izado comsmissão dese sistema izado nos
s compunimas de -2de bits emo de dadosusto pelo à comunica
putacionais, por
7 segmen
-------------
égrafo. Deplo Francêscriar toda adigo de B
na digital dão Recomengráfica, o o pela ausêde um carum sinal
e dados) eque o pa
computado
utadores 25v e máxim seqüêncs a longa d
número ação parale
r Sandro Jucá
ntos.
-------------
pois teve us Jean Maua mecânicaBaudot) cde inform
endado verssinal de
ência destaractere, o mde Marca
era o sinaadrão de trores e equ
atuais imas de +2cia. É um
distância. Nreduzido
ela.
-------------
um grandeurice Émilea e elétricaom letrasações. Dasão 232. Marca eraa correntemesmo era(stop bit)
l de Marcaransmissãouipamentos
fornecem25v.
m modo deNesse casode fios e
e e a ,
aí
a . a . a o s
m
e , e
Parase utilizarcomunicaçsão enviasincronismde comunsincronismlógico baixalto). Nessda transmna mesma
Quanível lógicosinalizar atemporizadde dados demissor e bit”).
O bNessa conquando fo
A idado em o start brecepção para trans
Aplicações p
a a transmr uma inteção serial pados tambmo com o Tnicação e
mo, existe ixo) e um bsa transmi
missão de da velocidadando o cao ‘1’. Um pao receptdor internode mensagno recept
bit de parinvenção, qr ímpar é 0
nterrupçãtempo a
it (nível lda comun
smissão de
práticas de Eletr
missão de derface compode ser sbém bits Transmisso
entre sisteum bit quebit que indissão, o Redados. Devde de transnal serial pacote de tor que uo no recepgem são entor. O paco
idade é usuando o n0.
Figura
ão do caleatório eógico baixicação ser dados, nã
rônica e microco
dados por dm outros psíncrona oude sincro
or. Na comemas de e indica o dica o finaleceptor emve-se consismissão. está em rdados semum transmptor avisannviados coote é conc
sado comonúmero tot
6. 1: Dad
nal seriaenquanto sxo) acionarial é execão é necess
ontroladores em
[ 87 ]
distâncias padrões cu assíncro
onismo, oumunicação
controle início da
l da transmm sincronisiderar que
repouso, ompre começmissão foindo que a om a veloccluído com
o nono bittal de dígit
do em com
al é utilizse executaa a interrcutada. Casário habili
m sistemas comp
maiores e como o EIna. Na priu seja, o assíncronae automatransmissãmissão chasmo com oe o transmi
o sinal corrça com umi iniciada.transmissãidade de tr
m os bits d
t com o ptos ‘1’ , o
municação
zada quan outro proupção, preso o canaitar a inter
putacionais, por
com poucIA/RS-232 meira, alé
receptor a, que é o ação por ão, chamadamado de o Transmisissor e o r
respondenm nível lógi O “startão. Seguidransmissãoe paridade
ropósito dvalor do b
o serial.
ndo se eograma. Queviamentel serial serupção ser
r Sandro Jucá
ca interferêe o EIA/
m dos bitsfica em modo manão nec
do de starstop bit (n
ssor apenareceptor de
te no canico ‘0’ (stat bit” inic
do do starto pré-proge e de par
de detecçãbit de parid
espera recuando o dae habilitadaeja utilizadrial.
ência pode-/RS-485. As de dados
constanteais utilizadoessitar dert bit (níve
(nível lógicoas no inícioevem esta
al tem umrt bit) paracializa umt bit, 8 bitsramada norada (“stop
ão de errodade é 1 e
eceber umado chegaa, onde ao somente
-A s e o e el o o r
m a
m s o p
. e
m , a e
Um dos foASCII (Amde cada by
Se o númede Caracte
A inmicrocontrpara comuserial é prnível lógicabaixo:
Aplicações p
6.1 C
ormatos mmerican Stayte (valor m
ero de “1s”eres ASCII
6.2 I
nterface seroladores unicação crecedido pco alto. Os
práticas de Eletr
CÓDIGO A
ais utilizadandard Codmáximo 0x
” for par, oé mostrad
F
INTERFAC
erial USARTpode ser om o mun
por um stas conector
rônica e microco
ASCII
dos em comde for Infox7F) e o oi
o bit de pada abaixo:
igura 6. 2
CE USART
T (transmisíncrona o
ndo externart-bit de nres utilizad
ontroladores em
[ 88 ]
municaçãormation Intavo bit de
aridade X7
2: Caracte
T DO MIC
issor-recepou assíncroo utilizandnível lógicodos são o
m sistemas comp
serial, comnterchangee paridade
é zero e, s
eres ASCI
CROCONT
ptor univerona, sendodo o padrão baixo e DB9 e o
putacionais, por
mo no pade). Este for
que pode
se for ímpa
II.
ROLADOR
rsal síncrono esta últio EIA/RS-2encerradoDB25, co
r Sandro Jucá
drão EIA/Rrmato utilizou não se
ar, X7 é um
R
no e assínima a ma232, onde
o por um somo mostr
RS-232, é oza sete bitsr utilizado.
m. A Tabela
crono) dosis utilizada cada bytestop-bit dera a figura
o s .
a
s a e e a
Em microcontr
O nentre +3 convertem
Par quatro invem 0V (TT-25v e mICL3232, e
Aplicações p
suma, oroladores s
nível lógico e +25V.
m os níveis
converter versores paTL). Compu
máximas detc. O esqu
práticas de Eletr
Fig
os pinos são o TXD,alto no paPara a code tensão
Fig
os padrõeara convertutadores ae +25v. Auema de lig
rônica e microco
gura 6. 3
utilizados , o RXD e oadrão RS23omunicação
TTL/RS23
ura 6. 4:
es TTL/RS2ter entre –presentamAssim Comgação do M
ontroladores em
[ 89 ]
: Conecto
na comuo Terra (G32 está ento entre um32.
Sinal elét
232, o chip–10V (RS23m cerca de mo o MAXMAX232 é
m sistemas comp
ores USAR
unicação sND). tre –3 e –m PC e um
trico RS-2
p mais utiliz32) em +5V–10V e +1X232 exismostrado
putacionais, por
RT.
serial ent
–25V e o nm PIC são
232.
zado é o MV (TTL), e 10V, mas stem outroa seguir:
r Sandro Jucá
tre compu
nível lógico utilizados
MAX232, o entre +10suportam mos convers
utadores e
baixo estáchips que
qual utiliza0V (RS232)mínimas desores, tipo
e
á e
a ) e o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 90 ]
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.
ACIONAM
Os utilização, característimpressorado torque
MOTORES
Os robustos evariações robô por sconseguir trava-elétrcombustívlimpador d
Aplicações p
MENTO D
motorees conseqü
ticas e sãas, etc. e ge redução
S ELÉTRIC
motores ue normalmde tensão serem comem oficina
rica das pvel, motor de para-bri
práticas de Eletr
DE MOTOR
CC são üentemento fáceis dgeralmente
o de velocid
COS UTIL
tilizados emente proj
e correntempactos, fas e emprportas, bom
do vidro-isa dianteir
rônica e microco
RES CC DE
abundantete, existede encontre vêm assodade.
Figura 7
LIZADOS
m automójetados pae, entre ouortes, altaesas do ramba do lielétrico, mro e traseir
ontroladores em
[ 91 ]
E BAIXA T
es no meem em rar em suociados a u
7. 4: Moto
EM AUTO
óveis são toara condiçutros. Algua rotação eamo. Os mmpador d
motor da vro, bomba
m sistemas comp
TENSÃO
ercado emvárias d
ucatas comuma caixa
ores CC.
OMÓVEIS
odos com ções extreumas opçõee leves, al
motores made para-brventoínha,hidráulica
putacionais, por
m função ddimensões,mo video-cde engren
tensão nommas, tais es são idealém de seais usadosisa e de motor dodo freio A
r Sandro Jucá
da ampla , tensõecassete, bnagem par
minal a 12como poe
ais para aperem muitos em projegasolina, o ventilado
ABS.
gama des, pesos
brinquedosra aumento
2 volts, sãoeira, calorplicação noo fáceis deetos são debomba deor interno
e , , o
o , o e e e ,
Alémautomaçãoequipamendo eixo (oaplicada (segundo a
SenF =
Já
engrenagecomprovadmaior o toengrenage
Aplicações p
m do acioo e robónto compoou angular(F) e do ra equação Tndo: força (em
que o mens ocorreda pelas eqorque (T2)em 1 com m
práticas de Eletr
Figura 7
onamento tica, apre
osto por enr) e aumenraio de giT = F.r.
m Newtons)
Figu
motor imp devido aoquações a) proporciomotora e a
Fcon
rônica e microco
. 5: Motor
elétrico, oesentam gngrenagensntar o torqiro (nas e
), r = raio
ra 7. 6: R
rime umao raio de baixo, quaonal e mena engrenag
st -> T1/r1
T2n2
ontroladores em
[ 92 ]
r CC com
os motoregeralmentes, com o inque do moengrenagen
de giro (em
Relação de
a força cogiro. Na p
anto maior nor a velogem 2 com
1 = T2/r2 ->2 . D1 = T1 .. D2 = n1.
m sistemas comp
caixa de
es CC de e uma cantuito de rotor. O torns é a m
m metros)
e transmi
onstante, prática emo diâmetro
ocidade demo movida,
> T1/D1 = .D2 . d1
putacionais, por
redução.
baixa potaixa de rereduzir a vrque varia etade do
e T = torq
ssão.
a variaçã um sistemo da engre rotação (tem-se:
T2/D2
r Sandro Jucá
tência utiledução, q
velocidade em funçãdiâmetro
que (em N
ão do torma de engenagem m(n2). Cons
izados emque é umde rotação
ão da forçaprimitivo)
.m).
rque entregrenagensovida (D2)iderando a
m m o a ,
e , , a
COROA
A co
utilizado pum elevad
O nparafuso cuma coroadente. Comcoroa gire exemplo, orpm, divid
Supcoroa tenhgirará doisgire uma vAssim, a rpor exemp1.800 dividequação:
ondNc Zc =Np Zp=
As p
Aplicações p
E O PARA
oroa e o paprincipalmedo aumento
número de com roscaa de 60 dmo a coroa uma voltao parafusoidas por 60
ponhamos,ha 60 dents dentes. Pvolta. rpm da corplo, o paradidas por
de: = número = número = número
= número d
possibilidad
práticas de Eletr
AFUSO CO
arafuso coente nos cao de força,
F
entradas d sem-fim entes, ema tem 60 da. Assim, ao com rosc0, que resu agora, qutes. Assim,Portanto, s
roa é 30 vafuso com30, que re
de rotaçõede dentes de rotaçõ
de entrada
des mais c
rônica e microco
OM ROSCA
m rosca seasos em q, como no
Figura 7. 7
do parafustem apena cada voltdentes, sera rpm da cca sem-fimultará em 3ue o paraf, a cada voserá neces
vezes menom rosca semesultará em
i = NNc
es da coroada coroaes do para
as do paraf
comuns de
ontroladores em
[ 93 ]
A SEM-FIM
em-fim comue é nece
os redutore
7: Coroa e
so tem influas uma enta dada norá necessácoroa é 60 m está gira30 rpm. fuso com olta dada ssário dar
or que a rm-fim estám 60 rpm.
Nc . Zc =Nc=Np. Zp /
a (rpm)
afuso com fuso
controle d
m sistemas comp
M
mpõem umssária elev
es de veloc
e sem-fim
uência no ntrada (mao parafusoário dar 60
vezes menndo a 1.80
rosca semno parafus30 voltas
rpm do paá girando a
A rpm da
p. Zp /Zc
rosca sem
digital de m
putacionais, por
m sistema dvada reduçidade.
m.
sistema deais comumo a coroa
voltas no nor que a 00 rpm, a
m-fim tenhaso com rosno parafu
rafuso coma 1.800 rp
a coroa pod
-fim (rpm)
motores CC
r Sandro Jucá
de transmição de velo
e transmissm) e está a
vai girar aparafuso do parafuscoroa gira
a duas ensca sem-fiso para qu
m rosca sepm, a corode ser exp
)
C são:
ssão muitoocidade ou
são. Se umacoplado aapenas umpara que aso. Se, po
ará a 1.800
tradas e am, a coroaue a coroa
em-fim. Seoa girará apressa pela
o u
m a
m a r 0
a a a
, a a
CHAVEAM
Os tbase e podispositivodissipação
Os interna mumuito baixconfiguraçe o pino 3
O m
e correntequatro modiodos de o microcoMOSFET eresistores Source dochaveame
A figura aatravés de
Aplicações p
MENTO DE
transistoreodem ser os de médio em formaMOSFETs uito baixa xa, o que ção dos pin
é o Sourc
modelo IRFe de até 22otores comroda lvre ntrolador entram eme LEDs se
o MOSFETnto no gat
baixo mose um mosfe
práticas de Eletr
E MOTOR
es de efeitoutilizados a potência
a de calor. apresentam(décimos dnão acon
nos de um ce.
F
F540 supor2A. A figuram MOSFETs
para protecoloca na
m conduçãervem som
T é conectte (VG).
stra o acionet IRF540.
rônica e microco
RES CC CO
o de campono lugar
a, devido p m alta taxade ohms). ntece com
MOSFET,
Figura 7. 8
rta tensõesa abaixo ms. A etapa eção de tesaída das
ão e uma mente paratado ao G
namento d
ontroladores em
[ 94 ]
OM TRANS
o MOSFETdos trans
principalme
a de velocDeesa formtransistoronde o pin
8: Mosfet
s de chavemostra o cir
de potêncensão revers portas de
tensão da visualiza
Gnd do mi
de um mot
m sistemas comp
SISTORES
T executamistores Da
ente à men
idade no cma, a quedres Darlingno 1 é o G
t – IRF540
amento enrcuito comcia é comprsa. O funce controle
de 12V é ação do chicrocontrol
tor CC de 3
putacionais, por
S MOSFET
m o chaveaarlington pnor queda
chaveamenda de tensgton. A fguGate (base)
0.
ntre o drain MOSFET p
posta peloscionamentum ‘1’ ló
aplicada shaveamentador para
3V utilizad
r Sandro Jucá
T
mento porpara acionade tensão
nto e uma são nesse tura abaixo), o pinos 2
in e o sourcpara acions MOSFETsto é simpleógico, os tsobre as cto. Note q
a gerar a
do em robó
r tensão naamento dee à meno
resistênciatransistor éo mostra a2 é o Drain
rce de 100Vamento des IRF530 ees. Quandotransistorescargas. Osque o pinotensão de
ótica móve
a e r
a é a n
V e e o s s o e
el
Neste casoobstáculo exemplo emotor esqSeguindo a
É importanoutro ladopor onde e
ESTABILI
Para
está segui
Aplicações p
F
EXEMPLO
o é interescomo refe
ele “cola” duerdo, quaas paredes
Fig
nte saliento, em vermentrou. Ma
IDADE DO
a garantir ndo corret
práticas de Eletr
igura 7. 9
O: SEGUID
ssante deferência a qdo lado esando os dos do labirin
gura 7. 10
tar que nomelho, poisais detalhes
O CONTRO
estabilidatamente a
rônica e microco
9: Acionam
DOR ÓTIC
finir que noqual ele vaquerdo, ou
ois estiverento até fina
0: Situaçõ
o princípio s ele podes: http://w
OLE DE M
de do conreferência
ontroladores em
[ 95 ]
mento de
CO DE LAB
o princípioai seguir eu seja, o mem acionadal encontra
ões encon
de seguire tomá-lo cwww.youtu
MOVIMENT
ntrole de ma (o obstác
m sistemas comp
e motor co
BIRINTO
o seguidor em movimemotor direidos. am-se quat
ntradas em
r o obstácucomo referube.com/w
TO
movimentoculo), o sen
putacionais, por
om Mosfe
de paredeento de avito deve se
tro situaçõe
m labirint
ulo, o robôrência e vo
watch?v=QR
, ou seja, nsor ótico
r Sandro Jucá
et.
e o robô cvanço normer mais rá
es:
tos.
ô não podoltar, o quRDrG2iEFp
garantir qlateral (L)
considera omal. Nessepido que o
e tocar noue fará saipM .
que o robô, com sina
o e o
o r
ô al
analógico,obstáculo.
Casesquerdo situações situação 3frente até
Casmicrocontrencontrar desvio parao tocar n
Programa:-------------#include < #define es#define di int32 tenintermediáshort int leunsigned i main() clock_int_4
Aplicações p
deve ser
so seja acue acionar 3 e 4. Not
3, o robô vaencontrar
so o senrolador paobstáculo
ra a direitao obstácul
Figura 7
: -------------<SanUSB.h
squerdo piireito pin_
nsaofrente,ários edpisca; int flagnao
4MHz();
práticas de Eletr
lido freque
usada a auo motor
te que o tai ser seguobstáculo
nsor fronra o motolateral, o
a for poucoo com o av
7. 11: Uso
-------------h> //Leitur
n_b6 _b5
, tensaola
osensor=0,
rônica e microco
entemente
usência de direito, umtempo de 4uro pelo obfrontal outal verifiq
or direito, que garao, o guia ovanço fron
o de senso
-------------ra de tensã
ateral, ap
flagfrente
ontroladores em
[ 96 ]
e e estar c
obstáculom determin4 é maior bstáculo at
u lateral. que obst aciona o
ante a estaoval frontalntal. O circu
ores ótico
-------------ão em mV
proximacao
e=0, flaggi
m sistemas comp
om valores
, o microcnado tempque o de
té acabar o
táculo, mmotor esq
abilidade dl do robô cuito é mos
os para co
-------------com variaç
o=4790; /
ro=1;
putacionais, por
s que gara
ontroladorpo, suficie3, mas co
o tempo de
ostrado nquerdo e sdo movimeconduzirá ostrado abai
ontrolar m
-------------ção de um
//int32 de
r Sandro Jucá
antam a pr
r deve parnte para gom o tempe desvio e
na situaçsegue em ento. Noteo robô à eixo:
motores.
------------- potenciôm
evido aos
resença do
ar o motogarantir aspo de 4 nae seguir em
ção 2, ofrente até
e que se oestabilidade
-------------metro
s cálculos
o
r s a
m
o é o e
s
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 97 ]
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;
++flagnaooutput_higledpisca=!output_bitdelay_ms( -------------O fluxogra
Figur
Aplicações p
osensor; gh(esquerd!ledpisca; t(pin_b7,le(20);
-------------ama do pro
ra 7. 12: F
práticas de Eletr
do);output_
edpisca);
-------------ograma do
Fluxogram
rônica e microco
_high(dire
-------------microcont
ma de fun
ontroladores em
[ 98 ]
ito); //Os
-------------trolador é m
ncionamen
m sistemas comp
dois moto
-------------mostrado a
nto de rob
putacionais, por
ores em fre
-------------abaixo:
bô móvel
r Sandro Jucá
ente
-------------
com sens
-------------
sores.
O acioH pode setensão, ://www.yo
-------------
DRIVER P
Umutilizar umdois motor
O cpino 16 euma qued
As e15 são paque tem o
Aplicações p
PONTE H
onamento er feita coou de
outube.com
-------------
PONTE H
a das solum integradores CC, utiircuito inte
e outra para de 0,7V
entradas nra acionar
o mesmo G
práticas de Eletr
da ponte m transist
potênciam/watch?v
Fig
-------------
L293D
uções maio motor drlizando qu
egrado L2a potênciaem relação
nos pinos 2o motor B
Gnd do circ
Fig
rônica e microco
H permite tores MOSFa Darllin=6IIH02db
gura 7. 13
-------------
is simples driver como
atro pinos 93D deve
a (por exemo à tensão
2 e 7 são B. O pino 8uito de con
ura 7. 14
ontroladores em
[ 99 ]
o movimeFETs, maisngton TIbboE .
3: Motor e
-------------
e barata o o L293Dde saída dter duas a
mplo 9,6 V da fonte e
para acion8 é conectntrole.
: CI Ponte
m sistemas comp
ento do mos aconselhIP ou
em Ponte
-------------
em atuaç. Este intedo microcolimentaçõe
V ou 5V) noexterna.
nar o mototado à font
e H – L29
putacionais, por
otor nos dohável devid
BD. Ma
e H.
-------------
ção de roegrado posontrolador. es. Uma pao pino 8. O
or A e entrte de alime
93D.
r Sandro Jucá
ois sentidodo a baixaais deta
-------------
bôs móvéssibilita o c
ara coman
Os motores
radas nos entação do
os. A pontea queda dealhes em
-------------
is consistecontrole de
do (5V) nos percebem
pinos 10 eos motores
e e m
e e
o m
e s
A msentido dapermite pr
Se afrente, se trás. Se am
SOLENÓI
Um
(indutânciabobina, crbobina cocirculação
Os simplificadprincípio d
Aplicações p
mudança doa corrente rogramar o
a primeiraa primeira
mbas as en
IDES E RE
a solenóida) elétrica,ria-se um mo é mosde outro n
relés são da de um de funciona
práticas de Eletr
os sinais nno enrola
o movimen
entrada aa entrada bntradas ba
ELÉS
de consiste, enroladacampo ma
strado na fnivel maior
dispositivorelé é mo
amento.
rônica e microco
nos pinos damento do nto em qua
alta, segunbaixa e a sixas ou alt
e num êmbem torno
agnético qfigura abar de corren
Figura 7
os comutaostrada na
ontroladores em
[ 100 ]
de entradamotor, lo
alquer direç
nda entradsegunda etas, o mot
bolo de feo de um tuue atrai oixo. No c
nte.
7. 15: Sol
adores eleta figura ab
m sistemas comp
a tem o efeogo do seução (conju
a baixa , entrada altaor pára.
erro colocaubo. Quando êmbolo (caso de um
lenóide.
tromecânicbaixo e a
putacionais, por
eito de prou sentido dgando 2 m
então o ma , o moto
ado no intedo se alim(núcleo móm relé, fec
cos (Figurapartir dela
r Sandro Jucá
oduzir a alde rotação
motores).
motor se der se movim
erior de uenta eletrióvel) para cha um co
a 2.14). Aa é explic
teração doo. A Tabela
esloca paramenta para
ma bobinaicamente adentro da
ontato para
A estruturacado o seu
o a
a a
a a a a
a u
O ctransistor
O relétrico deum núcleeletromagrelé tem d(normalmetensão consão as ma
Aplicações p
controle dDarlington
relé é um e dois circueo de manética, fecduas posiçente abertontínua queis comuns
Figura 7
práticas de Eletr
e uma son ou de um
tipo de inuitos. O reaterial ferrcha os conções, com o), como m
e é especifi.
7. 17: Acio
rônica e microco
Figur
olenóide om MOSFET nterruptor elé é formaromagnéticntatos de uisso existe
mostra a ficada de ac
onamento
ontroladores em
[ 101 ]
ra 7. 16: R
ou relé pomostrado aacionado ado por umco) que um interruem dois tiigura abaixcordo com
o de moto
m sistemas comp
Relés.
ode ser feabaixo. eletricamem eletroímquando a
uptor. Normpos, os Nxo. A bobio fabrican
or 12V com
putacionais, por
ito pelo c
ente que pmã (uma boacionado, malmente F(normalmna do relé
nte, bobina
m relé bo
r Sandro Jucá
chaveamen
permite o obina enroatravés do interrup
mente fech é acionad
as de 5, 12
obina 5V.
nto de um
isolamentoolada sobreda atraçãoptor de umado) e NA
da por uma2 e 24 Volts
m
o e o m A a s
Umpequenas significa a máquinas
DRIVER D
Um especifico solenóidestransistoreroda livreeletromotr
Quaele conect0, por isso(o comumenergizar a
Aplicações p
a das caraem relaçãpossibilidaindustriais
DE POTÊN
driver de de maior p
s, relés, mes Darlingte, para deriz gerada ando o micta o pino 1o a simbolo
m) ou do ma bobina o
práticas de Eletr
acterísticasão à corrade de cons, diretame
Figu
NCIA ULN
potência épotência. E
motores CCton NPN descarregar no chaveacrocontrola18 do outroogia de po
motor deveou o motor
rônica e microco
s do relé é ente que ntrolar circente a part
ura 7. 18
N2803
é utilizado Esse driverC e váriose potência
no Vcc mento dos
ador colocao lado, ondrta inverso
e estar liga.
Figura 7
ontroladores em
[ 102 ]
que ele po circuitouitos de alir de micro
Aplicação
sempre qr pode ser s outros da, oito resi(pino 10)
s transistora +5V (nívede está ligaora na figuado ao Vcc
7. 19: UL
m sistemas comp
pode ser eno controladltas correnocontrolado
o de um r
uando se nusado par
dispositivosistores de ) a correnres, protegel lógico 1)a um pólo
ura abaixo)c da fonte
N 2803.
putacionais, por
nergizado do exige ptes como ores.
relé.
necessita ara controlas. Ele contbase de 2
nte reversgendo os m) no pino 1do motor,. Como o de até 30
r Sandro Jucá
com correpara funcimotores, l
acionar umr motores tém intern2K7 e oitosa da formesmos. 1 do driver, ao Gnd (noutro lado
0V, esse co
entes muitoionar. Issoâmpadas e
m hardwarede passos
namente 8diodos de
ça contra-
r ULN2803nível lógico
o da bobinaomando irá
o o e
e , 8 e -
, o a á
Comosentidos. Ase utilizar internamede ponte alimentaçãalimentaçãpossível o
Figura
Notbobina do no sentidodesligar o do motor. Quaveículos orelação de
Motcontrolado
Aplicações p
PONTE H
o foi visto,A ponte H
também nte oito trH, mostr
ão do motão do motochaveame
a 7. 20: A
te que inicrelé da es
o da esquerelé da es
ando se utou braços e transmiss
ACIONAM
tores de paos digitalm
práticas de Eletr
COM MIC
, acionamepode ser fo driver ansistores rada na ftor, porquor devem sento do relé
Acionamen
cialmente osquerda, cerda para asquerda e
tiliza motomecânicossão da caix
MENTO DE
assos são dente.
rônica e microco
CRORELÉ
ento da pfeita tambULN2803 com resist
figura abaue as fontser diferené.
nto de mo
os dois reonectandoa direita o acionar o
or CC em ps, o que dexa de engre
E MOTOR
dispositivo
ontroladores em
[ 103 ]
ÉS
onte H peém com apara a entores de baixo, não tes de enentes, ou se
otor nos 2
elés estão o o V+Moto
que deterrelé da di
ponte H petermina oenagens co
RES DE PA
s mecânico
m sistemas comp
ermite o mpenas doisnergização base e oito
causa quergização eja, isolada
2 sentidos
conectadoor, a corrermina o sereita ocorr
ara atuadoo torque eonectada a
ASSO
os eletrom
putacionais, por
movimentos microrelé
das bobindiodos de
ueda de tda bobina
as uma da
s com relé
os ao V-Moente da fonentido de rre o sentid
ores robóte a velocidao motor.
agnéticos
r Sandro Jucá
o do motoés. Neste cnas, pois
e roda livretensão naa do microoutra, par
és em Po
otor. Ao ente passa rotação do do de rotaç
ticos, comodade do at
que podem
or nos doiscaso, pode-já contém
e. Esse tipo fonte deorelé e dera que seja
onte H.
energizar apelo motomotor. Ao
ção inverso
o rodas detuador é a
m ser
s -
m o e e a
a r o o
e a
A crdispositivofator muitorígidos, masuma, a ch
MOTORES
Os centro daso númeroderivação
Norfonte de aterra atrav As blongo da cmais pólos
Os de passo acionamenalimentaçãdo motor d
Aplicações p
rescente pos à lógica o importanas tambémhave para
S DE PAS
motores ds bobinas. o de bobinao centro
rmalmentealimentaçãvés de chavbobinas secircunferêns.
motores dunipolaresnto do mão (+5V oude passo.
M
práticas de Eletr
opularidaddigital. Sã
nte como imm, como inta Robótica
SO UNIPO
de passo O motor d
nas, uma das bobina, a derivaç
ão (Vcc) e veamento e localizamncia. Para q
Figura
e passo uns de 6 fios
motor de pu +12V) e
Motor de
rônica e microco
de dos moto encontrampressorasterface enta.
OLARES
unipolaresde passo tevez que
as (comumção centraos termineletrônico
m no estatoque haja u
a 7. 21: M
nipolares ms possuem passo, est
e os termin
5 fios
ontroladores em
[ 104 ]
tores de paados não ss, plotters,tre CPUs e
s são faciem 4 fasescada bobi
m). al das bobnais de cad
produzindor e o rotouma maior
Motor de p
mais encon dois fiostes fio conais da bob
m sistemas comp
asso se devó em apar, scanners,e movimen
lmente res porque o ina se enc
binas está da bobina do movimeor é um imresolução
passo uni
ntrados pos comuns omuns debina ligado
Motor
putacionais, por
ve à total aelhos onde, drivers dento mecâni
conhecidosnúmero d
contra div
ligada ao são ligado
nto. mã permane
angular, o
polar.
ssuem 5 o(derivaçãvem ser
os ao contr
de 6 fios
r Sandro Jucá
adaptação e a precisãe disqueteico, constit
s pela dede fases é dvidida em
terminal pos alternad
ente com o rotor dev
ou 6 fios. Oão centraligados àrole de cha
s
desses ão é um s, discos tuindo, em
rivação aoduas vezesduas pela
positivo dadamente à
6 pólos aoverá conte
Os motoresal). Para o
fonte deaveamento
m
o s a
a à
o r
s o e o
ParaPara mototratarem d
A reresistência
Paraligar manuda fonte a
MODOS D
Figur
Aplicações p
Figura
a descobriores de 6 fde bobinas esistência a entre doia encontraualmente oaos termina
DE OPERA
ra 7. 23: C
práticas de Eletr
7. 22: Mo
r os terminfios, a residiferentesentre o fios terminaisar a seqüêno fio comuais das bob
AÇÃO DE U
PAS-Sopar-Me-Pou
PAS-Du-Ma-Con
Caracterís
rônica e microco
otores de
nais de umstência ens. o comum (s desta bobncia corretm ao Vcc,
binas, verif
UM MOTO
SSO omente mrtir nor uco
Nº do passo 1a
1--> 12--> 03--> 04--> 0
SSO uas meiaior nsome m
Nº do passo 1a
1--> 12--> 03--> 04--> 1
sticas e Ló
ontroladores em
[ 105 ]
passo un
m motor de ntre os fios
(Fio 1) e obina. ta dos fios , e de formficando o m
OR DE PAS
COMPLmeia bobi
consu
a 2a 1b 2
0 0 01 0 00 1 00 0 1
COMPLETa-bobinas
mais ene
a 2a 1b 2
1 0 01 1 00 1 10 0 1
ógica de a
m sistemas comp
nipolar – c
passo, des comuns (
o terminal
para chavma alternadmovimento
SSO UNIP
LETO ina é ene
do
umo
2b Decima
0 8 0 4 0 2 1 1
TO 2são ene
rgia que
2b Decima
0 8 0 4 1 2 1 1 acioname
putacionais, por
conexão i
ve-se cons(Fio 1 e Fio
de uma bo
veamento dda e seqüe do motor
POLAR
1 ergizada
de
al
2 (FUergizadas
o Pas
al
ento de m
r Sandro Jucá
interna.
siderar queo 2) é infi
obina é a
das bobinaencial, o Gde passo.
(FULa cada p
ULL-STEP s a cada
sso comp
motor de p
e: nita por se
metade da
as, pode-seGND (terra)
LL-STEP)passo acomum;
torque;energia.
2) a passo;
torque;pleto 1.
passo.
e
a
e )
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 106 ]
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.
A te4,5V e 6Vservo é baconsomemcondutoreabaixo mooperação é-------------#include <#define m#define m int16 frentshort int lemain() clock_int_4 while (TRU while (fren horário
Aplicações p
Figura
ensão de a. Devido àastante altm correntes de alime
ove um seré utilizada -------------<SanUSB.h
motor1 pin_motor2 pin_
te=50; ed;
4MHz();
UE)
nte>0) output_hioutput_hidelay_ms(output_lowdelay_ms(
output_lowoutput_low
delay_ms(--frente;
práticas de Eletr
a 7. 25: Ap
alimentaçãà alta reduo, conside
es elevadaentação, nervo-motor por robôs
-------------h> _b5 _b6
igh(motor2gh(motor1(1); w(motor1)(1);
w(motor1)w(motor2)
(10);
rônica e microco
plicação d
ão do servoção do jogrando o se
as (de 20ecessitandde rotaçãomóveis qu-------------
2); 1);
); //Termi
); ); //
ontroladores em
[ 107 ]
de servo-
omotor é tgo de engreu tamanh00 mA a o a aplicaço para frenue possuem-------------
//Iniciali //Inicializ
ina o pulso
/Termina o
m sistemas comp
motores
tipicamentrenagens, ho reduzido1 A) e ição de capnte e um om dois mot-------------
iza o pulsoza o pulso
o de 1ms d
o pulso de
putacionais, por
em robô m
te de 5V, po torque q
o. Lamentantroduzempacitores doutro paratores em a-------------
do motor do motor
do motor1–
2ms do m
r Sandro Jucá
móvel.
podendo vque se obtavelmente,
m ruído elde filtro. Oa trás. Noteanti-paralel-------------
1 2
– sentido h
motor2 – se
variar entretém de um, os servoslétrico nos
O programae que essao. -------------
horário
entido anti-
e m s s a a
-
frled=!led; output_bit ------------
O aproximadgraus e coparabólica-------------#include <graus. int16 FRENvolta void main( clock_int_4while (1) while (F FR while (TR
Aplicações p
rente=50; //pica led
t(pin_b7,le
-------------
Figu
programa damente 1 om o pulsos, em siste-------------<SanUSB.h
NTE=200,
()
4MHz();
RENTE>0) FRENTE--output_hidelay_ms(output_lowdelay_ms(
RENTE=20
RAS>0)
práticas de Eletr
d a cada 5ed);
-------------
ra 7. 26:
abaixo ms, o ser
o de 2 ms emas robót-------------h> //Servo
TRAS=200
)
; gh(pin_b0(1); //w(pin_b0)(10);
00;
rônica e microco
50 ciclos do
-------------
Visualiza
move umrvo move-spara 180 gticos e no -------------o-motor d
0; //no ser
); / tempo de;
ontroladores em
[ 108 ]
o servo-mo
--------------
ção inter
m servo-mse para 0 ggraus. Notcontrole d-------------e parabóli
rvo de test
e busca de
m sistemas comp
otor, ou sej
-------------
na de um
motor de graus, e cte que estee câmeras-------------ica - 3 po
te 200 pass
e 0 graus
putacionais, por
ja a cada 1
-------------
m servo-m
posição. om o pulsoe motor é . -------------
osições def
sos corresp
r Sandro Jucá
12ms*50 =
--------------
motor.
Com o o de 1,2 mutilizado e
-------------finidas: 0,
ponderam
= 600ms
-------------
pulso dems para 90em antenas
-------------90 e 180
a aprox. 1
-
e 0 s
0
1
TR output_to ------------- FOTOA
Fotoacvariedade transmitemcircuito.
Optoisooptoisoladcomando e
Existempor exempe um fotot
Essepresença desse compresistor em
Escodissipada entre a pomáxima esque será tensão de
P=VO re
Aplicações p
TRAS--; output_hidelay_ms(output_lowdelay_ms(
RAS=200;
oggle(pin_b
-------------
ACOPLA
opladores de aplica
m sinais e
oladores liores digitae mudançam fotoacopplo, acoplatransistor.
Figur
e dispositde tensão ponente é m série comolhendo reem cada
otência máscolhida pautilizado npico.
V2/R -> 0,2esistor com
práticas de Eletr
gh(pin_b0(2); //w(pin_b0)(10);
b7);
-------------
ADORES
ou optoisoações. Tame informaçõ
ineares sãais são usaas de níveipladores dedores ondeComo exe
ra 8. 1: Vi
tivo pode 220VAC ede 250mWm o foto-diesistores sum deles. xima do coara os resino circuito
2W = (311mercial ma
rônica e microco
); / tempo de;
-------------
S E SEN
oladores pmbém chaões ao me
o usados dos para cs lógicos.e diversos e a construmplo pode
isualizaçã
ser utilizaem um detW em 25 griodo internsão de 33É interess
omponenteistores é d, considera
1)2/R -> Ris próximo
ontroladores em
[ 109 ]
e busca de
-------------
NSORES
proporcionaamados deesmo tem
para isolacontrole, in
tipos e coução internemos citar
ão interna
ado por uterminado raus Celsiuno para pro3mW, ou sante que e e a potênde 200mW.ando a te
R=483 KΩ.o desse valo
m sistemas comp
180 graus
-------------
S INFRA
am a isolae acopladopo que iso
ar sinais andicação de
om construna é baseao 4N25 e o
a de um F
um microcponto. A p
us. Dessa fotegê-lo. seja, a poexista um
ncia máxim. Na Equaç
ensão de p
or é 470KΩ
putacionais, por
s
-------------
AVERM
ação de sinores óticosolam difer
nálogos ate estados,
uções interada em umo TIL111:
Fotoacopl
controladopotência morma, deve
otência mám certo intma dissipadção (6.1) épico. Consi
Ω.
r Sandro Jucá
-------------
ELHOS
nais em ums, eles corentes part
té 10MHz,isolação d
rnas diverm diodo infr
ador.
or para idmáxima dise-se dimen
áxima quetervalo de da. Então, é calculadoidere 311V
-------------
S
ma grandemutam outes de um
, enquantode sinais de
sas, comoravermelho
entificar assipada ponsionar um
e pode sesegurançaa potência
o o resistoV como a
e u m
o e
, o
a r
m
r a a r a
TRANSM
Os como senscircuito dodistância p2K2). O vcom o acreceptor IR
Figura 8.
Para
sensor, é identificar
Aplicações p
MISSOR E
transmissosor ótico po sensor eperceptívelvídeo httpionamentoR.
. 3: Conex
a ter um aconselhá
variações
práticas de Eletr
Figura 8
E RECEPT
ores e recepor reflexãe um gráficl pelo recep://www.yoo de um le
xão do pa
maior alcaável utilizade até 5m
rônica e microco
8. 2: Aplica
TOR IR
eptores IRão difusa pco do sinaeptor IR cooutube.comed pela q
ar infraver
ance e perar o conv
mV no sinal
ontroladores em
[ 110 ]
ação de u
R (infraredpara registal de saídaom resistorm/watch?vueda do s
rmelho: T
rceber umversor ADl do senso
m sistemas comp
um fotoac
ou Infravetro de posi (em mV) r de elevaçv=18w0Oesinal analó
TIL 32 (em
ma maior vde 10 b
r. A distân
putacionais, por
coplador.
ermellhos) ição. A figdo recept
ção de tenaco4U mo
ógico atarv
missor) e
variação debits do mcia ótima é
r Sandro Jucá
são muitogura abaixotor IR em
nsão para 5ostra essavés da co
TIL 78 (r
e posição,icrocontroé a distânc
o utilizadoso mostra ofunção da
5V (pull-upa variaçãondução do
receptor).
com esselador paracia em que
s o a p , o
.
e a e
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 111 ]
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.
F
Paraas ordens é identifica
As como o sointensas eoutros tran
O rtelevisor, códigos deas que tense não tive
Parainfravermepara deconível lógicmicrocontrpor exempde circuitoabaixo e e
Aplicações p
Figura 8.
a tornar o do control
ado pelo dinterferêncol, lâmpade geram mnsmissoresreceptor, gentrega a
e identificanham a meerem o mea acionar elho, pois odificação, co baixo rolador complo, o chavo para aciem http://
práticas de Eletr
4: Diagra
sistema inle remoto, ecodificadocias podemas incande
maior inters de infravegeralmenteao decodifiação e dadesma frequesmo códig
uma cargao invés dé possíve(0V) que
m um resisveamento dionamento/www.yo
rônica e microco
ama de bl
nsensível ao código d
or do recepm se origiescentes, arferência, ermelho e
e contido nicador apeos, elimina
uência de pgo de pulsoga à distâde captural identificae, conectastor de pulde um relé de carga
outube.co
ontroladores em
[ 112 ]
locos de c
a interferênde pulsos ptor. inar de foaquecedorcomo lâmetc.
num únicoenas os pando a mapulsos, cabos. ância bastar o códigoar apenas ado ao p
ull-up de 2Ké para acioas remotasm/watch
m sistemas comp
comunica
ncias e filtrdo emisso
ntes estátres, e de f
mpadas fluo
invólucro ulsos reta
aioria das fbendo a rej
ta ter o co em bits o start bi
pino de iK2, executaonamento s com conh?v=1l6s9
putacionais, por
ção infrav
rar os ruídor contém u
ticas, isto fontes dinâorescentes
montado ngulares cfontes de ijeição dest
controle reemitidos pt desse cóinterrupçãoará uma tade uma m
ntrole univ9xtrJl0 .
r Sandro Jucá
vermelha
os, aceitanum dado b
é, que nãâmicas ques, a image
no painel correspondnterferênctas ao Dec
emoto e opelo controódigo que o externaarefa desej
máquina. Umversal pode
a.
ndo apenasbinário, que
ão pulsame são maisem da TV
frontal dodentes aoscias, excetocodificador
o receptoole remotoapresenta
a (B0) dojada comom exemploe ser vista
s e
, s
V,
o s o r,
r o a o , o a
Notter um invdinâmicascontrole re-------------#include <short int re #int_ext void bot_e rele=!rele;output_bitdelay_ms(interrupçã main() clock_int_4enable_intenable_intinfraverme while (TRU output_tog
Aplicações p
Figura 8
te que, se vólucro par. Abaixo uemoto univ-------------<SanUSB.hele;
ext()
; t(pin_b5,re(1000); //o
4MHz(); terrupts (gterrupts (elho
UE)
ggle(pin_B
práticas de Eletr
8. 5: Cone
nesse casra proteçãoum prograversal. -------------h>
ele); /Tempo pa
lobal); // Pint_ext);//
B7);
rônica e microco
xão de re
so não houo contra inama exem
-------------
ara deixar
Possibilita tHabilita in
ontroladores em
[ 113 ]
eceptor in
uver um sisnterferência
mplo de ac
-------------
o recepto
todas internt. ext. 0
m sistemas comp
nfraverme
stema de as, pois escionamento
-------------
or cego po
rrupcoes 0 no pino
putacionais, por
elho de TV
decodificaçstá sujeito o de um
-------------
r 1 seg ap
o B0 ond
r Sandro Jucá
V no PIC.
ção, o recàs fontes relé atrav
-------------
pós a 1ª a
de está o
eptor deveestáticas e
vés de um
-------------
atuação da
o recepto
e e
m
a
r
delay_ms( -------------
Parapreta commostra a f
Figura 8
CODIFIC
RC5infravermevideocasseaproximad
A nseparado ser transmdireito é zesquerdo é
O código t - 2 bits pa - 1 bit paé pressionpressionad
Aplicações p
(500);
-------------a filtrar as
m um pequfigura abaix
. 6: Exem
CAÇÃO DE
5 é uma noelho utilizetes e odamente 10norma RC5por dois se
mitido for zzero (segué zero qua
transmitidoara ajuste ra controle
nado na undo uma vez
práticas de Eletr
-------------interferên
ueno orifícxo, para re
mplo de pr
E RECEPTO
orma univezada prinoutros ap0m. 5 usa moemi-ciclos;zero (0), oundo semiando o seu
Fig
o consiste ddo nível (2
e (toggle bnidade de z ou se con
rônica e microco
-------------ncias dinâmio ou em eceber som
roteção do
OR INFRA
ersal desenncipalmentparelhos d
odulação b; a metadeo seu lado -ciclo). Selado direit
gura 8. 7:
de uma pa2 start bits)bit ou flip) q
comando ntinua sen
ontroladores em
[ 114 ]
-------------micas é nec
um tubo mente a luz
o receptoIR.
AVERMEL
nvolvida pete em edoméstico
bifásica, oue esquerdaesquerdo
e o bit a to é um.
: Modulaç
alavra de 1). O primeque muda a distâncido pressio
m sistemas comp
-------------cessário cofeito de cz IR direcio
or contra e
LHO UTILI
ela Phillips equipamens, com
u seja, cóa e direita (primeiro ser transm
ção Bifási
4 bits, seniro e o segde estado
a. Isto seronado;
putacionais, por
-------------olocar o recaneta comonal.
emissões
IZANDO A
para comantos de uma áre
ódigo Mantêm níveissemi-ciclo
mitido for
ca.
ndo eles : gundo correo lógico cadrve para in
r Sandro Jucá
-------------ceptor em
m cola que
s externas
A NORMA
andos a disáudio, t
ea de al
nchester. Cs opostos.
o) é um e um (1), o
esponde ada vez quendicar se o
-------------uma caixa
ente, como
s de raios
A RC5
stância potelevisoreslcance de
Cada bit éSe o bit ao seu ladoo seu lado
1; e um botãoo botão fo
a o
s
r , e
é a o o
o oi
- 5 bits dtabela 7. I- 6 bits dese pretend
Na bits 1 e 2endereçam
Na indicados Consideran1/36 kHz,aproximadcomando d-------------#include <#include < char chegoint32 i; void identi bit_rx if (inp delay_ #int_ext void san_e output_tog sistema=0comando=//*******delay_us(7pela interrdelay_us(1delay_us(1
Aplicações p
de endereçIsso definee comandode executafigura aba de equali
mento; e os
norma RCpelos doi
ndo uma m, ou seja,damente 1das teclas -------------<SanUSB.h<usb_san_
oupc, coma
ifica_bit(vo
=0; ut(pin_b0)_us(860); /
ext()
ggle(pin_b
0; =0; *********750); //Terupção 1720); //Te1720); //Te
práticas de Eletr
ço do sistee o tipo de o representr em um d
aixo vemosização; o bs bits de 9
F
5, os dadois últimos modulação , 64 vez772us. O pressionad-------------h> //Progra_cdc.h>// B
mando, siste
oid)
)==1) bit_// //pula p
b6);
*********mpo do st
empo do sempo do to
rônica e microco
ema para saparelho qtando 1 dodeterminads os bits debit 3, FLIP a 14, indi
igura 8. 8
os são modnúmeros
de 36 kHzzes 27,7 μprograma
das por um-------------ama com pBiblioteca p
ema, bit_rx
_rx=1; //ara o próx
*********tart bit 1 c
start bit 2 oogle bit
ontroladores em
[ 115 ]
seleção deque se pretos 128 comdo aparelhoe 1 a 14 eP, em amacando o co
8: Sinal tr
dulados nudo recep
z, o períodμs (micro
a abaixo idm controle -------------protocolo Rpara comu
x;
/identifica 0ximo períod
*********com a per
m sistemas comp
e 1 dos 32 tende cont
mandos poo (sistema)e sua identarelo; bits omando a
ransmitid
uma frequêptor TSOPo de cada segundos
dentifica oremoto RC-------------RC5 da Phinicação se
0 ou 1 do para ou
*********rda do tem
putacionais, por
sistemas trolar; ssíveis. Iss) selecionaificação: ede 4 a 8 executar.
o.
ência portaP1740, TSObit corresps), o em
o enderC5. -------------illlips de coerial virtual
tra leitura
** mpo do prim
r Sandro Jucá
possíveis
so define aado. em azul claem azul in
adora de 30OP4836, Tponde a 64que corre
reço do si
-------------ontrole reml
meiro sem
listados na
a ação que
aro os startndicando o
0 a 40KHzTSOP48304 pulsos deesponde astema e o
-------------moto
mi-ciclo alto
a
e
t o
, . e a o
o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 116 ]
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 //*************************************************
write_eeprdecodificadwhile(readprintf (usbdelay_ms(atuação da main() clock_int_4 usb_cdc_inusb_init();usb_task()real while(!usb enable_intenable_intreceptor in while(1) if (usb_cdc chegoupc=if (chegou ++i; if (i> ------------- O resultadcontrole rhttp://w
Aplicações p
rom(0x10,das
d_eeprom(b_cdc_putc(500); //Tea interrupç
4MHz();
nit(); // In; // Inicializ); // Une o
b_enumera
terrupts (gterrupts (innfravermel
c_kbhit(1))
=usb_cdc_pc=='L')
>=10000)
-------------
do dos coremoto Ph
www.youtu
Figura
práticas de Eletr
sistema);
0xfd)); c,"comandoempo paração
icializa o pza o protoco periféric
ated()); //A
lobal); // Pnt_ext); // ho
) //avisa se
_getc(); //soutput_tog
i=0; outpu
-------------
omandos ghillips RC5ube.com/
8. 9: Leit
rônica e microco
write_eep
o: %x\r\n"a deixar o
protocolo Ccolo USB o com US
Aguarda rec
Possibilita tHabilita in
e chegou d
se chegou,ggle(pin_b
ut_toggle(
-------------
gerados q5 é mostr/watch?v
ura da te
ontroladores em
[ 117 ]
prom(0x11
",read_eepo receptor
CDC
B do PC /
conhecime
todas internterrupcao
dados do P
retém o cb6); printf(
pin_b7);
-------------
ue corresrado na fv=9VG7Ro
ecla press
m sistemas comp
1,comando
prom(0x11)cego por
//Para dep
ento da em
rrupcoes externa 0
PC
caractere eusb_cdc_p
//Led de v
-------------
pondem àigura abaokuDTs.
ionada vi
putacionais, por
); ////g
)); um segun
urar o pro
mulação ser
no pino B
compara putc, "\r\nT
visualização
-------------
às teclas pixo. Mais
a monito
r Sandro Jucá
guarda as
ndo após
ograma em
rial via USB
B0 onde es
com 'L' ouTesta led!\
o
-------------
pressionaddetalhes
r serial.
s variáveis
a primeira
m aplicação
B
stá ligado o
'D' \r\n");
-------------
das de umno vídeo
s
a
o
o
m :
ACIONAM
Comcontrole dchamada componenem antipaum pulso n
Os dois semi-estado sóluma cargapassagem tensão par
Os eletromecâlugar dos Na verdadestado sól
Durabaixo, esnula passaciclo, cujopotenciôm
As findutivas a
Aplicações p
MENTO D
mo a maiorde fluxo dTRIAC (tr
nte eletrônralelo quena base (d
TRIACS E
Triacs opt-ciclos de lido sem ca CA atravpelo zero
ra a carga relés de
ânica, por relés eletr
de, a tendêido a base
DIMMER
rante a varste dispositando pelo tempo de
metro em sé
figuras abapós o cha
práticas de Eletr
DE CARGA
ria dos sistde energia riode for Aico equiva permite c
disparo).
E RELÉS D
to-isoladosuma onda
controle devés de purealizandoaté a novaestado só isso o noromecânicoência é ume de tiristor
ANALÓG
riação da otivo apresetriac, que
epende o térie.
Figura
aixo mostaveamento
rônica e microco
AS CA COM
temas autode tais s
Alternatinglente a do
conduzir a
DE ESTAD
s, geralmena senoidal.e fase da tulsos no gao o controlea passagemólido (Solidome, consos com seuma substitures como o
ICO
onda senoenta um mo trava no
tempo de c
8. 10: Cir
ram o comdo triac.
ontroladores em
[ 118 ]
M TRIAC
omáticos ésistemas ég Current) ois retificad
corrente e
DO SÓLIDO
nte utilizad Dessa fotensão, coatilho do e de fase dm pelo zeroid State Rsistem na us contatouição grados triacs.
idal na alimmomento zovamente carregame
rcuito dim
mportamen
m sistemas comp
é acionadaé muito ut
da famílidores contrelétrica no
O
dos em carma, são
omo tambétriac em pda tensão, o.
Relay), quealternativa
os ruidososativa dos
mentação zero volt eaté o próx
ento do ca
mmer ana
nto das co
putacionais, por
em correntilizada uma dos tirisrolados des dois sen
argas CA, utilizados
ém no contperíodos dque prom
e não apra modernas e seus prrelés eletro
do dimmee, conseqüximo dispapacitor de
alógico.
rrentes em
r Sandro Jucá
nte alternama chave stores, ou
e silício (SCntidos quan
podem cotanto comtrole de te
determinadmovem a co
resentam a ideal paroblemas momecânico
er mostradoüentementearo no próxe 220nF lim
m cargas r
ada, para oeletrônica
u seja, umCR) ligadosndo recebe
onduzir nosmo relés deensão parados após aondução de
comutaçãora uso emmecânicosos pelos de
o na figurae, correnteximo semi-
mitado pelo
resistivas e
o ,
m s e
s e a a e
o m . e
a e -o
e
Figura
Supzero, o tricapacitor cem série, dispara o alimentaçãgerando http://w
Parainiciamentdecidir quatriac da reutilizado microcontrde diodo forma de o
Aplicações p
8. 11: Co
ponha que iac corta acomeça a caté atingirgatilho do ão da carg
uma www.youtu
CONTROL
a de realizte a passaando, em c
ede para a o métod
rolador pocom interondas obtid
práticas de Eletr
omportama
o TRIAC ea alimentaçcrescer nor a tensãotriac. Notea e só volt
onda ube.com/
LE DIGITA
zar o contagem pelo cada semi-carga CA.
do simpler bordas drrupção exdas pelos d
rônica e microco
mento dasapós o cha
esteja condção da car
ovamente e de dispare que semta a condu
senoida/watch?v
AL DE DIS
trole digitazero da s
-ciclo da sePara ident
es do oe subida e
xterna por dois métod
ontroladores em
[ 119 ]
s correnteaveament
duzindo. Qrga pela foem função ro (VD) no
mpre que a uzir quandoal “fat
v=u1HwZ
SPARO D
al do dispasenóide daenóide da tificar a paopto-acople descida,
borda dedos de sen
m sistemas comp
es em cargto do tria
Quando a conte CA edo valor dDIAC (execorrente p
o o capacittiada”. LRcrYQ m
E UM TRI
aro de uma rede (zerede, será
assagem pador, coe o métod
e subida. Ansoriamento
putacionais, por
gas resistc.
corrente inva partir d
da capacitâemplos: 1Npassa pelotor atinge
O vímostra a o
IAC
m triac é nero-crossingá realizado elo zero dam interruo do transAs figuras o da rede.
r Sandro Jucá
tivas e ind
verte, pasdaí a tensãância e da N5411 e 4
o zero, o tra tensão dídeo n
operação de
necessário g), para ao chaveam
a senóide upção exsformador
abaixo m
dutivas
sando peloão sobre oresistência
40583) queriac corta ade disparono linke um triac.
identificaa partir damento peloda rede foxterna docom ponte
mostram as
o o a e a , k .
r aí o oi o e s
Figura
Notacoplador de iluminasimétricos circuito im
Aplicações p
a 8. 12: Ze
ta-se que anão é exa
ação. Nestnegativo
mpressa com
práticas de Eletr
ero-cross
a forma deata, sendo te caso, pe positivo
m o respec
Figura 8
rônica e microco
sing: formsensori
e onda peloadequada
pode ser , respectivctivo circuit
8. 13: PCB
ontroladores em
[ 120 ]
ma de ondiamento d
o cruzamena para usoque os te
vamente, sto é mostr
B do circu
m sistemas comp
das obtidada rede.
nto do zeroo por exemempos t1 são diferenrada na fgu
ito zero-c
putacionais, por
as pelos d
o com sensmplo, com
e t2, obtntes. Um eura abaixo.
crossing.
r Sandro Jucá
dois méto
soriamentosistemas d
tidos nos exemplo d.
dos de
o por opto-de controlesemi-ciclose placa de
-e s e
No rebate o smomento cortado e maior exat
Mais http://w
A fo
Figura
O Pdaí, com dtabela, emcarga. -------------
Aplicações p
caso do tsemi-ciclo em que aa saída d
tidão a pas
Fig
detalhewww.youtuorma de on
a 8. 15: Fo
Programa adois botõesm que cada
-------------
práticas de Eletr
transformanegativo
a onda sedo coletor ssagem pe
gura 8. 14
es ube.com/nda pode s
orma de o
abaixo idens, o ânguloa atraso co
-------------
rônica e microco
dor e da para posit
enoidal vaié levado a
elo zero.
4: Passage
podem /watch?vser vista co
onda de e
ntifica a pao de fase (orresponde
-------------
ontroladores em
[ 121 ]
ponte de tivo, é pos a zero, pa 5V, ou s
em da on
ser v=u1HwZom mais de
entrada e
assagem p(atraso de e a variaçã
-------------
m sistemas comp
diodo, qussível identpois nesteseja, nível
nda pelo z
viLRcrYQ.etalhes na
saída do
pelo zero dchaveameo de 0,3%
-------------
putacionais, por
e diminui tificar na curto perlógico alt
zero da re
stos
figura aba
circuito d
de tensão ento) entre
% da potên
-------------
r Sandro Jucá
o nível debase do tríodo, o tto, identific
ede.
no
aixo:
detector d
e determie 300 valorncia conced
-------------
e tensão eransistor oransistor ácando com
vídeo
de zero
na a partires de umadida para a
-------------
e o á
m
:
r a a
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 122 ]
#include <SanUSB.h> //Mais detalhes em http://www.youtube.com/watch?v=7O9a0E_WXPA #define button PIN_E3 #define button1 PIN_B1 int16 pointer=0; int16 CONST table[300] = 500, 482, 474, 468, 463, 459, 455, 451, 448, 445, 442, 439, 436, 433, 431, 428, 426, 423, 421, 419, 417, 415, 413, 411, 409, 407, 405, 403, 401, 399, 398, 396, 394, 392, 391, 389, 387, 386, 384, 383, 381, 379, 378, 376, 375, 373, 372, 370, 369, 368, 366, 365, 363, 362, 361, 359, 358, 356, 355, 354, 352, 351, 350, 348, 347, 346, 345, 343, 342, 341, 340, 338, 337, 336, 335, 333, 332, 331, 330, 328, 327, 326, 325, 324, 323, 321, 320, 319, 318, 317, 315, 314, 313, 312, 311, 310, 309, 307, 306, 305, 304, 303, 302, 301, 300, 298, 297, 296, 295, 294, 293, 292, 291, 290, 289, 287, 286, 285, 284, 283, 282, 281, 280, 279, 278, 277, 276, 275, 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, 263, 262, 261, 260, 258, 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 240, 239, 238, 237, 236, 235, 234, 233, 232, 231, 230, 229, 228, 227, 225, 224, 223, 222, 221, 220, 219, 218, 217, 216, 215, 214, 213, 211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 200, 199, 198, 197, 196, 195, 194, 193, 191, 190, 189, 188, 187, 186, 185, 183, 182, 181, 180, 179, 177, 176, 175, 174, 173, 172, 170, 169, 168, 167, 165, 164, 163, 162, 160, 159, 158, 157, 155, 154, 153, 152, 150, 149, 148, 146, 145, 144, 142, 141, 139, 138, 137, 135, 134, 132, 131, 130, 128, 127, 125, 124, 122, 121, 119, 117, 116, 114, 113, 111, 109, 108, 106, 104, 102, 101, 99, 97, 95, 93, 91, 89, 87, 85, 83, 81, 79, 77, 74, 72, 69, 67, 64, 61, 58, 55, 52, 49, 45, 41, 37, 32, 26, 18 ;//*/ 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;
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 123 ]
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);
if(!input d poin if(po writ -------------
A figlâmpada CTV utilizanoptoisoladMOC3020,pelo optoaconduz pa
Fig
É http://wdigital com-------------#include http://www #define bo#define bo
Aplicações p
t(button1)elay_ms(3
nter--; ointer<=1)te_eeprom
-------------
DIMMER
gura abaixCA por umndo detecor, que é , após a dacoplador ara a carga
gura 8. 1
pwww.youtum controle -------------
w.youtube
otao PIN_Eotao1 PIN_
práticas de Eletr
) 30); //whi
) pointer=(10, pointe
-------------
DIGITAL
xo apresenm microcon
tor de parecebido
detecção de, consequ a tensão a
6: Contro
possível ube.com/remoto IR-------------
<SanUSBe.com/watc
E3 _A0
rônica e microco
ile(!input(b
=0; er);
-------------
L COM CO
ta um um trolador atssagem ppor interrue passageuentementaté o final
ole digital
ve/watch?vR. -------------B.h> ch?v=7O9a
ontroladores em
[ 124 ]
button1))
-------------
NTROLE R
circuito detravés de
pelo zero. upção no
em pelo zete, altera odo semicic
l de lumin
er v=7O9a0E
-------------//M
a0E_WXPA
m sistemas comp
delay_ms(
-------------
REMOTO
e controle dcomandosO comandpino B0, a
ero por into tempo dclo da ond
nosidade d
mais E_WXPA .
-------------Mais A
putacionais, por
(50);
-------------
IR
digital de l de um codo do conaltera o âterrupção ne conduçãa senoidal.
de uma lâ
de. Abaixo o
-------------deta
r Sandro Jucá
-------------
luminosidaontrole remntrole remngulo de no pino Bão do TRIA.
âmpada C
etalhes firmware
-------------alhes
-------------
de de umamoto IR de
moto IR dodisparo do1 realizadaAC BT, que
CA.
emdo dimme
-------------em
a e o o a e
m r
m
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 125 ]
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();
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 126 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 127 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 128 ]
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
Número de Linhas
Quantidade de pinos
8 2 14 12 2 14/15 16 1 14/16 16 2 14/16 16 4 14/16 20 1 14/16 20 2 14/16 20 4 14/16 24 2 14/16 24 4 14/16 40 2 16 40 4 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:
A Tmódulos L
DESCRIÇ
Display Limpa DispControle d Sentido decursor ao Deslocameao entrar cDeslocamsem entrEnd. da pr Utilizando Paralcd_enviaconteúdo lcd_envia Exe
Aplicações p
Tabela abaiLCD.
ÇÃO
play com Hdo Cursor
e deslocamentrar comento da mecom caract
mento da rada de carimeira pos
o as instruç
a rolar o a_byte(0,
do LCa_byte(0,
emplo de u
práticas de Eletr
Figu
xo traz um
Tab
Home curso
mento m caractereensagem tere mensage
aractere sição
ções do LC
conteúdo, instruçãCD um ,0x18).
so do recu
rônica e microco
ra 9. 1: C
m resumo d
bela - InsMODO
Liga (Deslig
or Liga DesligDeslocDeslocCursoCursoCursoPara a
e Para aPara aPara a
em Para Para primesegun
CD:
do LCD ão), por ex
caractere
urso de rola
ontroladores em
[ 129 ]
onexão d
das instruç
struções mO
(sem cursoga
ga ca para Esca para Di
or Home or Piscanteor com Altea esquerdaa direita a esquerdaa direita a esquera direita
eira linha nda linha
um caracxemplo, lce para
agem do d
m sistemas comp
do LCD no
ções mais u
mais comRS
or) 00000
squerda 0reita 0
00
ernância 0a 0
0a 0
0da 0
000
ctere para cd_envia_
a esqu
display:
putacionais, por
o PIC.
usadas na
uns RS
R/W
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
a direita,_byte(0,0erda, ut
r Sandro Jucá
comunicaç
Código(Hex)
0C 0A / 08
01 0E 0C 10 14 02 0D 0F 04 06 07 05 18 1C 80 C0
, utilize o0x1C) e patilize o
ção com os
o
8
o comandoara rolar o
comando
s
o o o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 130 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 131 ]
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 variável
Especificador de formato e exemplos de uso
int
%u valor decimal (ex: 30) %x valor em hexadecimal (ex: 1D) %3u valor decimal alinhado com três dígitos (ex: _30) %03u valor decimal alinhado 3 dígitos c/ zero (ex: 030)
signed int %i valor decimal com sinal. (ex: -2) %02i decimal com sinal, 2 casas e zeros a esq. (ex: -02)
long int32
%lu valor decimal (ex: 32345675); %05lu valor decimal 5 casas c/ zeros a esquerda. (ex: 01000)
signed long signed int32
%li valor decimal c/ sinal (ex: -500) %4li valor decimal c/ sinal alinhado a esquerda (ex: -_500)
float %f valor real. Ex: (23.313451) %2.3f valor real c/ 2 casas inteiras, 3 decimais. Ex: (23.313)
char %c caractere. Ex: (A)
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
inicialmentAD do mmultiplicanreal e tedecrementtensão de reiniciado
Quade potêncatuação aindica a papós a destensão nos
Parasolda capapotenciôma foto do desligame
------------////////////#include < #include < #define bo
Aplicações p
te utilizar microcontrondo o valoensão de tada por dreferênciaa tensão dando a tencia é cortadascende inpresença oscarga de s operadora regular eacitiva com
metro de ajLCD após
nto (Vref)
--------------/////////////<SanUSB.h
<MOD_LCD
otaoinc pin
práticas de Eletr
um divisorlador de
or de tensãreferência
dois botõea ajustada de referêncsão real e da pela abdicando qu não de tensão nosres duranteesse sistem
m o multímuste do divs a montae a tensão
Figura 9
-------------/////Cabeçah>
D_SANUSB
n_a4
rônica e microco
r de tensã5V. Esta
ão lido pelaa na ordees de ajus
é guardadcia assumea de refer
bertura de ue a tenstensão ress terminaise o manusema embarc
metro e iguvisor de tegem em p
o atual (Va
9. 2: Exem
-------------alho Padrã
B.c> // RB0
ontroladores em
[ 132 ]
ão para adrelação d
a mesma em de 2
ste, são mda na meme o último vrência são um relé N
são de refsidual noss de solda,eio da soldcado é necualar com onsão. O ciprotoboardat) podem
mplo de a
--------------ão//////////
0-RS, RB1-
m sistemas comp
dequação àdo divisor relação de
270V, que mostrados emória. Desvalor ajustiguais, a a
NF (normaferência fos capacitor o que con
da. cessário mo valor aturcuito do sd indicandoser vistos
aplicação
-------------/////////////
-E, RB2-D4
putacionais, por
à tensão mé compe
e divisão. Opode se
em um dissa forma, ado.
alimentaçãolmente fec
oi atingida.es de cargntribui para
edir a tensual indicadsistema de o a tensãona figura a
do LCD.
-------------///////////
4, RB3-D5,
r Sandro Jucá
máxima donsada viaOs valores er incremeisplay LCDquando o
o de 220V chado) e u. O LED dga e apaga evitar de
são nos teo no LCD controle d
o de referabaixo.
--------------
RB4-D6, R
o converso softwarede tensão
entada ouD. A últimao sistema é
do circuitoum LED dede atuaçãoa somente
escargas de
erminais daatravés do
de tensão erência para
-------------
RB5-D7
r , o u a é
o e o e e
a o e a
-
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 133 ]
#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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 134 ]
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.
Lux 2
Volt 4,9
Paraluminosidaforam feitaluxímetro de 4% daencontradolimite de c
5 12
9 4,9 4,8
Com base
Para simp
Aplicações p
a obter eades, formas e coloccomercial
a leitura +os são vist
cada equaçCo
20 36
4,7 4,5
na tabela,
plificar o pr
(Lu
x)
práticas de Eletr
Figura
este circuima tidos po
adas em uda marca
+ 0.5% dotos na tabção da retaorrespondê
60 94 1
4,3 4,1 4
, foi constr
Fig
ograma dotrês
0
500
1000
1500
2000
2500
2
(Lu
x)
rônica e microco
a 10. 1: C
to e os or ANTONuma tabela
MINIPA, mo fundo debela abaixoa. ncia entre
130 180 2
4 3,8 3
ruído o grá
gura 10. 2
o PIC, foi retas com
2,3 2,5 2
ontroladores em
[ 135 ]
Circuito se
valores de
NIETI, B. Ea juntamenmodelo MLe escala, o. Os valor
a tensão d
240 338 4
3,6 3,3 3
áfico da fig
2: Gráfico
modelado o mostra a
2,8 3,1 3
(V)
m sistemas comp
ensor com
e tensão Em que asnte com asLM-1010, dna faixa dres em neg
da saída e
430 530 6
3,1 3 2
ura abaixo
o Lux x Vo
a curva doa figura ab
,6 4 4,3
)
putacionais, por
m LDR.
na saída s mediçõess iluminâncde 3 ½ díde 1 a 500grito foram
a iluminân
674 827 1
2,8 2,7 2
o.
olt.
o gráfico acaixo.
3 4,7 4,9
r Sandro Jucá
para as s da tensãcias medidígitos , com000 Lux.
m considera
ncia
1000 1183
2,5 2,4
cima, divid
diferenteso de saída
das por umm precisãoOs valoresados como
1404 165
2,3 2,1
dindo-a em
s a
m o s o
1 1923
2
m
O ppor sua aproximad(IF) para s(Lux). A fi04 e 05.
Os c
F
Aplicações p
Figura
programa fresolução
damente 5 saber qualigura abaix
cálculos da
Figura 10.
0
500
1000
1500
2000
2500
(Lu
x)
práticas de Eletr
10. 3: Mo
unciona da(no caso
mV), enco das três exo mostra
a equação
. 4: Gráfic
0
0
0
0
0
0
2 2,2 2,
rônica e microco
odelagem
a seguinte o de um ontrando eequações aa o novo g
geral de c
co lux x te
,4 2,6 2,8
ontroladores em
[ 136 ]
m matemá
maneira: converso
então a tenacima devegráfico lux
cada reta s
ensão util
3 3,2 3,4
(V
m sistemas comp
ática dos v
lê o conveo AD de nsão (V), dee ser utilizaversus vo
ão mostrad
lizando as
3,6 3,8 4
V)
putacionais, por
valores o
rsor A/D e 10 bits,
epois são fada para c
olts, utilizan
dos a segu
s equaçõe
4,2 4,4 4,6
r Sandro Jucá
obtidos.
e multiplicaa resolu
feitas 3 cocalcular a indo as eq
uir:
es 3, 4 e 5
6 4,8 5
esse valoção é demparaçõesiluminânciauações 03
5.
r e s a ,
SUPERVI
Estaatravés dasupervisór
Aplicações p
SÓRIO
a interfacea emulaçãrio para ilu
práticas de Eletr
e foi deseão via USBminância e
rônica e microco
envolvida B de um cae temperat
ontroladores em
[ 137 ]
utilizando anal serial tura.
m sistemas comp
ambienteCOM virtu
putacionais, por
e de progal. A figura
r Sandro Jucá
ramação ra 8 mostra
Delphi® ea a tela do
e o
Figura
Veja10, a fotocompleto pno canal A
Aplicações p
10. 5: Fig
a abaixo, no do circuitpara ler a
AD 0.
Figur
práticas de Eletr
gura da te
na figura ato montadiluminânci
ra 10. 6: E
rônica e microco
ela do sup
abaixo, o eo em opera no canal
Esquema
ontroladores em
[ 138 ]
pervisório
esquema cração. No l AD 1 e a
eletrônic
m sistemas comp
o para Ilu
circuito elefinal do tratemperatu
co do circ
putacionais, por
minância
etrônico moabalho é mura do amb
uito luxím
r Sandro Jucá
a e Tempe
ontado e amostrado obiente com
metro.
eratura.
a na figurao programam um LM35
a a 5
O lupara aplicmétodo doequação microcontr // Program ------------------ #include <float tens,main() clock_int_4lcd_ini(); usb_cdc_inusb_init();usb_task()//while(!us//usb_wait setup_adcsetup_adcoutput_lowprintf (lcd_
Aplicações p
uxímetro mcações ondo modelagque gerorolados.
ma Luxíme-------------
<SanUSB.hlux,temp;
4MHz();
nit(); // In; // Inicializ); // Une osb_cdc_cot_for_enum
c_ports(ANc(ADC_CLOw(pin_b6);_escreve,"
práticas de Eletr
Figura
mostrado nde não é em de cur
ou o gráf
etro digital -------------
h>
icializa o pza o protoc
o perifériconnected())meration();
0_TO_AN1OCK_INTER; \f ");
rônica e microco
a 10. 7: F
neste trabanecessári
rva pode sefico propo
+ termôm-------------
protocolo Ccolo USB com a usb) // espe; //espera
1); RNAL);
ontroladores em
[ 139 ]
Foto do cir
alho apresio haver uer aplicadoosto. Isto
metro digita-------------
CDC
b do PC era o protoaté que a
m sistemas comp
rcuito mo
senta comouma grando em váriao ratifica
al c/ comun-------------
ocolo CDC USB do Pic
putacionais, por
ontado.
o uma solde precisãs ocasiõesa versati
nicação via-------------
se conectac seja reco
r Sandro Jucá
lução de bão nas mes onde nãoilidade de
a USB// -------------
ar com o donhecida p
baixo custoedições. Oo se sabe ae sistemas
-------------
driver CDCpelo PC
o O a s
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 140 ]
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) lux=2057.2-494*tens; if (tens>3.8) 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);
---------------------------------------------------------------------------------------------------------------
INTER
I2C pela Philipmesmo cirusando o mlinhas: umestá em us
O b
bidireciona3,4 Mbits/
Estatransmitir número mmáxima do
Um
Aplicações p
RFACE I
significa Ips como o rcuito, commenor núm
ma linha seso, as dua
barramentoal com velos no modoa interfaceou recebe
máximo deo barrame exemplo t
práticas de Eletr
2C
Inter-IC (Iobjetivo d
mo microcomero de pierial de das linhas fic
F
o serial, coocidade deo High-speee apresen
er um dado CIs que nto de 400típico de co
rônica e microco
Integratede conectarontroladornos possívdos (SDA)
cam em nív
Figura 11.
om transfee 100 Kbpsed. nta a filoso, e o transpodem se
0pF. onfiguraçã
ontroladores em
[ 141 ]
Circuit). r CIs e perres, memóvel. Este pr) e uma devel lógico a
. 1: Barra
erência des no modo
sofia multsmissor ge
er conectad
o I2C em T
m sistemas comp
Este barrariféricos derias externrotocolo see clock (SCalto forçada
mento I2C
e 8 bits poo Padrão, 4
ti-master oera o seu pdos é limit
TVs é most
putacionais, por
amento see diferentenas e relóerial necessCL). Quandas pelos re
C.
or vez, pos400 Kbps n
onde todopróprio cloctado apen
trado na fig
r Sandro Jucá
erial foi dees fabricanógio em tesita somendo o baraesistores d
ssibilita cono modo F
o CI da ck de tran
nas pela ca
gura abaix
esenvolvidotes em umempo real
nte de duasmento nãoe pull-up.
omunicaçãoast, ou até
rede podesmissão. Oapacitância
xo:
o m , s o
o é
e O a
REGRAS
Cad
alto.
As cO barrameperíodo de
Umlinha SCL partida elinha SCL,
Cadreconhecimdurante a (SLAVE) éreconhecim
Se não receb
Aplicações p
PARA TR
da bit da li
F
condições ento é cone tempo apa transiçãopermanec
e uma trandefine um
Figur
da byte mento é g ocorrênci
é obrigadomento.
o SLAVE rer mais ne
práticas de Eletr
Figura
RANSFERÊ
inha de da
igura 11.
de partidansiderado cpós a condo de H pace em H, nsição de L
ma condiçã
ra 11. 4: C
é acompaerado peloia do puls a levar a
Figura
reconhecerenhum byt
rônica e microco
a 11. 2: C
ÊNCIA DE
ados só é l
3: Leitur
a e parada como ocupição de paara L da ou seja,
L para H ão de para
Comandos
anhado do MASTER o de clock
a linha SDA
a 11. 5: re
r o enderete de dado
ontroladores em
[ 142 ]
onfiguraç
E DADOS
lido quand
ra de dado
de transmpado apósarada. linha SDAum dado
H da linha rada.
s de início
de um bno décim
k de reconA a nível
econhecim
eço, mas dos, o MAST
m sistemas comp
ção I2C em
do o nível d
os em com
missão são a condiçã
DA (start biválido, é
a SDA (sto
o e fim de
bit de recmo bit libenhecimentobaixo dur
mento do
depois de TER dever
putacionais, por
m TVs.
da linha de
municaçã
sempre geão de part
bit) durantedefinido
op bit) dura
e comunic
conhecimeerando a lio. Por suaante o pe
o byte.
algum temá abortar
r Sandro Jucá
de clock est
o.
eradas peloida, e livre
e o tempo como conante o pe
cação.
ento obriginha SDA a vez, o Ceríodo H d
mpo na traa transferê
tá em níve
o MASTERe um certo
em que andição deríodo H da
gatório. O(nível alto)CI receptoo clock de
ansferênciaência. Esta
el
R. o
a e a
O ) r e
a a
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 143 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 144 ]
--------------------------------------------------------------------------------------------------------------- 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; ---------------------------------------------------------------------------------------------------------------
Para256 bytesutilização (256 Kbitapresentammostra o c
O p5000mV dde 150 remostrado -------------#include <#include <#include < unsigned iint32 tensultrapassaint8 byte1char coma
Aplicações p
MEMÓRIA
a sistemass (capacidde memórts que com, entre ocircuito sim
Figur
programa ae um poteegistros devia emulaç-------------<SanUSB.h<usb_san_<i2c_sanus
int16 i,j,ensao_lida32 65536 ,byte2,byte
ando;
práticas de Eletr
A EEPROM
s embarcaddade da Erias EEPROorrespondeoutras car
mples de um
ra 11. 8: U
abaixo moenciômetroe 16 bits ção serial s-------------h> _cdc.h>// Bsb.c>
ndereco=0; //Varia
e3,byte4; /
rônica e microco
M EXTERN
dos em quEEPROM i
OM externae a 32Kbacterísticasma EEPRO
Uso de me
ostra o arm, a cada sena memó
somente qu-------------
Biblioteca p
0, posicao=de 0 a 5
// 4 Partes
ontroladores em
[ 145 ]
NA I2C
e são necenterna do
als. Os modbytes). Ess, interfac
OM I2C liga
emória EE
mazenameegundo, emória EEPROuando a te-------------
para emula
=0, valorgr5000mV (
s do valor i
m sistemas comp
essários a os microcodelos maisstas memóce de comda nn ferra
EPROM ex
nto de vam um buffeOM externaecla ‘L’ é p-------------
ação da co
ravado; 16bits), m
int32 tensa
putacionais, por
aquisição dontroladores comuns sórias possunicação Iamenta Sa
xterna via
lores digiter (região a, ou sejapressionada-------------
omunicação
mas é int3
ao_lida32
r Sandro Jucá
de dados des), é nesão o 24LCsuem oitoI2C. A fig
anUSB.
a I2C.
tal de tensde memór
a, 300 byta. -------------
o serial
32 porque
de mais decessária a
C e 24C256o pinos eura abaixo
são de 0 aria circular)tes, que é
-------------
o cãlculo
e a 6 e o
a ) é
o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 146 ]
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 Hexadecimal = %x %x %x %x\r\n",byte4,byte3,byte2,byte1);//Debug 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 ++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
for(i=0; fo valorgravade 16 bits print //***********output_toggle(p
delay_ms(
RTC (R
O Rcontroladointerface srelógio/calretenção 500mA/h
Aplicações p
i<10; ++i)or(j=0; j<1
ado= 256*ou 300 deprintf(usb
tf(usb_cdc_putc
**************pin_b7);
(1000);
RELÓGIReal Timeo por um cserial I2C lendário e dos dados
h conectad
práticas de Eletr
) //10lin15; ++j)
*le_eeprome 8 bits. b_cdc_putc
c, "\n\r");
*************
Figura 11
IO EM Te Clock I2
ristal exter(SCL e Ssão configs na falta
da ao pino
rônica e microco
nhas * 30c
m(0,(i*30)+
c, "%lu ", v
*************
1. 9: Leitu
TEMPO 2C DS1307rno de 32.7DA). Oito gurados naa de ener3.
ontroladores em
[ 147 ]
colunas = 3
+2*j) + le_
valorgravad
*************
ura de va
REAL)7 é um r768 Hz. A bytes de
a forma Birgia utiliza
m sistemas comp
300 bytes
_eeprom(0
do );
*************
lores da m
elógio/calecomunicaçRAM do
nary Codeando uma
putacionais, por
(int16 i,j)
0,(i*30)+2
*****
memória.
endário seção com o RTC são
ed Decimala bateria
r Sandro Jucá
*j+1); //1
.
erial de bDS1307 é usados pa – BCD. Éde lítio
50 Valores
aixo custoatravés de
ara função possível ade 3V -
s
o e o a -
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 148 ]
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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 149 ]
//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,
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 150 ]
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);
-------------------
Em algumas goutras. Taé analógicde sinais Comumendigitais, hásensores smicrocontranalógico decisões ló
A bprojeto demudança sistema.
O csistema, c
Aplicações p
-------------------
EXEMPLO
muitos sigrandezas
ais grandezca. Isto é, t
digitais qte quandoá a necesssejam adeqrolador doconvertido
ógicas baseateria em e aquisiçãoda fonte
conversor ujos coma
práticas de Eletr
--------------------
O: PROTÓ
istemas defísicas, c
zas são inetrata-se deue são deo as saídasidade do cquados às otado de uo para digeadas em paralelo co
o de dadosde alimen
TTL/EIA-2ndos AT sã
rônica e microco
-------------------
ÓTIPO DAT
e aquisiçãocomo exemerentes a ae variáveisescontínuoas analógicondicionamcaracteríst
um converital é proccomparaçõom a fontes. Além dentação da
232 Max23ão descrito
Figura 1
ontroladores em
[ 151 ]
--------------------
TALOGGE
o de dadomplo, temalguns fenôque assum
os e exprecas dos smento do ticas de umrsor interncessado peões ou em e de alimee evitar re
USB para
32 é utilizaos no próxi
13. 3: Dat
m sistemas comp
-------------------
ER USB DE
os e contromperatura, ômenos físmem valoreessados sesensores ssinal para
m conversoo AD paraelo softwaoperaçõesntação tem
eset por qua a fonte
ado para imo tópico
talogger.
putacionais, por
E BAIXO C
ole é necepressão
sicos e, emes contínuoegundo resão procesque os sin
or AD. Assia aquisiçãore de conts matemátm uma graueda de te
externa s
conexão d.
r Sandro Jucá
CUSTO
essária a e velocida
m geral, suos e reais,
epresentaçãssadas ponais provenim, com o o de dadotrole de aticas. ande relevâensão, elasem desco
do módulo
medida deade, entrea natureza, diferentesão bináriar sistemasnientes dosuso de um
os, o valocordo com
ância neste permite aonexão do
o GPRS ao
e e a s . s s
m r
m
e a o
o
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 152 ]
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,posquant1,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)
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 153 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 154 ]
//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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 155 ]
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 (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\nVALOR ESCRITO = %2x\r\n",valorbcd); //printf(usb_cdc_putc,"\r\nPOSICAO = %2x\r\n",endereco);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 156 ]
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(); if (posmeme1>='0' && posmeme1<='9') bufferdia=(posmeme1-0x30); if (posmeme2>='0' && posmeme2<='9') bufferdia=bufferdia*10+(posmeme2-0x30); if (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; ---------------------------------------------------------------------------------------------------------------
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 157 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 158 ]
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.
1-AT 2-OK 3- AT+CM4- OK 5-AT+CM6->Intrus7- OK
As figutransmissãferramentado PC. O sistema esdescrito achaves sindispositivoEste, reprede dados Comunicat
Aplicações p
MGF=1
MGS="+55são
uras abaixão GPRS/Ga SanUSB LED verde
stava no manteriormennalizadoraso MAX232 esentado ne o 3 par
tion Equipm
práticas de Eletr
58588888
xo apresenGSM. A cpara a alime foi usad
modo de grnte. As chs dos trêusado na na figura ara recepçãment).
rônica e microco
8888"
ntam a fotconexão Umentação do por estaavação. O haves cones sensoreinterface
apenas pelão, já que
ontroladores em
[ 159 ]
to em proUSB obsedo circuitoa ferramenvermelho ectadas as utilizadoRS/EIA-23lo conecto se trata
m sistemas comp
otoboard e rvado no
o e gravaçãnta para ssimulou o os pinos os. A figu32 entre o r DB9, posde um eq
putacionais, por
o circuitesquema
ão do proginalizar o acioname
23, 24 e ura abaixo
microcontssui o pinouipamento
r Sandro Jucá
to esquema, foi utiligrama no Pmomento
ento do ala25, repre
o mostra ttrolador e o 2 para tro do tipo
mático paraizada pelaPIC atravésem que orme, comosentam astambém oo modem
ransmissãoDCE (Data
a a s o o s o . o
ta
F
#include <short int l #USE RS2 main() clock_int_4 printf("AT+ ledpisca=!output_bitdelay_ms( printf("AT+ ledpisca=!output_bitdelay_ms( printf("Alaputc(0x1A
Aplicações p
igura 14.
<SanUSB.hledpisca;
232 (BAUD
4MHz();
+CMGF=1\
!ledpisca; /t(pin_b7,le(2000);
+CMGS=\"
!ledpisca; t(pin_b7,le(2000);
rme atuadA); // contro
práticas de Eletr
1: Esque
h>
=9600,XM
\r"); //con
// ledpisca edpisca); //
"+5585888
edpisca);
do\r"); //6 ol z
rônica e microco
emático e
IT=PIN_C6
figura mod
é igual ao/ b7 recebe
888888\"\r
- escreve a
ontroladores em
[ 160 ]
foto do d
6,RCV=PIN
do texto pa
o inverso de o valor d
r"); //5- En
a mensage
m sistemas comp
datalogge
N_C7,strea
ara o mode
e ledpiscae ledpisca
nvia para o
em para o
putacionais, por
er conecta
am=PC)
em
numero d
modem GS
r Sandro Jucá
ado ao PI
de destino
SM
C.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 161 ]
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/RS-485, 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.
Há paridade eutiliza comcheck), utdeve ser in
ExisInterchangdos parâm Como projeto p
A implemdiagrama d
Aplicações p
DETECÇÃ
dois mecaem cada camo frame ilizando conicializado
MODOS D
stem doisge) e RTU
metros de cmo a comuproposto fo
entação pde blocos
práticas de Eletr
Figu
ÃO DE ERR
anismos paractere e check seq
omo polinôcom o val
DE TRANS
s modos (Remote T
comunicaçãunicação geoi desenvo
prática de abaixo.
rônica e microco
ura 14. 1:
ROS
ara detecço frame ch
quence umômio, P(x) or 0xffff.
SMISSÃO
de transmTerminal Uão. eralmente olvido nesta
um proj
ontroladores em
[ 162 ]
: Checage
ção de errheck seque
m valor de= x16 + x1
missão: AUnit), que
utilizada ea forma de
eto com
m sistemas comp
em de dad
ros no proence ao fin 16 bits p
15 + x2 + 1
ASCII (Amsão selecio
em automae comunica
o modbus
putacionais, por
dos.
otocolo Monal da menpara o CR1. O registr
erican Coonados du
ção industação.
s embarca
r Sandro Jucá
odbus serinsagem. O RC (ciclic rro de cálcu
ode for Iurante a co
trial é em m
ado é mo
al: bits demodo RTU
redundanceulo do CRC
nformationonfiguração
modo RTU
ostrada no
e U e C
n o
,
o
ParaRTU, atravque é um testar se ono microcreal como
Os
rastreadascoletadas analisadastambém sã
Aplicações p
Figura
a testar avés da porsoftware
o desenvoontroladoro Elipse S
Figura
sistemas s informaçõatravés de
s, armazenão chamad
práticas de Eletr
a 14. 2: D
comunicarta serial elivre de Mlvimento d
r. Durante CADA.
a 14. 3: So
supervisórões de um e equipamnadas e dos de SCA
rônica e microco
Diagrama
ação com emulada peMestre MODdas rotinaso teste é
oftware d
rios são soprocesso
mentos de posteriorm
ADA (Super
ontroladores em
[ 163 ]
de bloco
escravo Mela USB doDBUS escrs de proce
possível u
de teste d
oftwares qprodutivo aquisição
mente aprrvisory Con
m sistemas comp
s comuni
Modbus (mo PC, é porito em C+essamento utilizar tam
de comun
que permitou instalaçde dados
resentadas ntrol and D
putacionais, por
cação Mo
microcontroossível utiliz++. Ele pod
do protocmbém um
icação Mo
tem que sção física. Ts e, em se
ao usuáData Aquisi
r Sandro Jucá
odBus.
olador) emzar o Modde ser util
colo Modbusistema s
odBus.
sejam monTais informeguida, maário. Estesition).
m protocolobus Testelizado paraus contidasupervisório
nitoradas emações sãoanipuladass sistemas
o r a s o
e o , s
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 164 ]
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);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 165 ]
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],buffer[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)
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 166 ]
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:
Notum procestransceptomicrocontrindustrial q
INTRODU
Um sistemkernel), quambiente
de multitaembarcadodesenvolvibaseado e
Aplicações p
Figura 14
te que a cosso real é nor ou TTL/Erolador, prque utiliza
UÇÃO À S
ma operacioue controlmultitarefa
O uso darefas é os. A feido pelo r
em interrup
práticas de Eletr
4. 4: Flux
omunicaçãonecessário EIA-485 (Mreservandoesse proto
SISTEMAS
onal em tea a alocaças (multitade um sistuma realierramenta usso Victopção de tem
rônica e microco
xograma d
o serial desutilizar um
MAX485). Co as limitaçocolo.
S OPERAC
empo real ção de tareasking) contema operadade cada
computaor Timofeemporizador
ontroladores em
[ 167 ]
do sistem
sse projetom transceptCom o MODções de fun
CIONAIS E
(RTOS) éefas quandcorrentes.acional ema vez maacional Saev, atravésres.
m sistemas comp
a de com
o foi emulator ou TTLDBUS embnções, em
EM TEMP
é um progrdo o proce
m tempo reais presenanUSB ims dos com
putacionais, por
unicação
ada via USBL/EIA-232 (barcado é pum proces
O REAL (R
rama (geraessador es
al (RTOS) te nos pr
mplementapiladores M
r Sandro Jucá
o ModBus.
B, para ap(MAX232) possível intsso de auto
RTOS)
almente chstá operan
para procrojetos de
a um RTMPLABX C
.
plicação emou tegrar um omação
hamado dedo em um
cessamentoe sistemasTOS livreC18 e CCS
m
e m
o s , ,
Umconcorrentprojetos rfirmware, é baseadofirmware e Em existe apeRTOS paraintervalo dparalela e Comhttp://wwwhttps://dl.As duas ppode https://dl. Prática 1em loop independePrática 21- Tareleds; 2- Tare3- Tareutilizando
OBS: Denabaixo, qprioridade #ifndef _OS#define _OS #define OS_#define OS_
Aplicações p
a das printes, ou sereais mais que o RTO
o na ideia dem laço infum sistem
enas uma a que cadade tempo simultânea
mo exw.youtubedropbox.coráticas desser cdropbox.co
1: Nesta prinfinito pa
ente. : Nesta práefa de leitu
efa de rotaefa que indisplay de
tro de cadque deve in
das tarefa
SACFG_H SACFG_H
_TASKS _DISABLE_PR
práticas de Eletr
cipais caraeja, tarefas
simples, OS se encade multitarfinito. ma multitarCPU, é nea tarefa temuito cur
a. xemplo, e.com/watcom/u/1019scritas abaconstruída om/u/1019
rática o RTara aciona
ática o RTOura do AD
ação de oitnverte o s sete segm
da projetondicar a qas.
3 PRIORITY
rônica e microco
acterísticass paralelaspois bastaarrega do refas (mult
refa, inúmeecessária aenha o temrto, assim
estão ch?v=s6BG922388/RTaixo de RT
segui922388/12
TOS execuar 3 leds,
OS executacom poten
to leds na sentido de mentos com
o ‚ necessáuantidade
ontroladores em
[ 168 ]
s de um RTs. Dessa fa descrevegerenciamtithread),
eras tarefaalguma for
mpo que neparece q
disponG8ZN0aDkTOSB.zip paTOS foram indo o1007SanU
uta em paconectad
a em paralnciômetro
porta B; e rotação d
mo leds.
ário inseride tarefas
m sistemas comp
TOS é a caorma, o Rer cada ta
mento do ponde cada
as exigem rma de orecessita. Nue as tare
níveis e
ara os comdesenvolvos tutSBOrig.zip
ralelo 3 taos nos p
lelo: para modi
dos leds p
r o cabeçs e as car
putacionais, por
apacidade RTOS tornaarefa em urocesso. D
a tarefa é u
tempo da ganização
Na prática, efas são e
uma os
mpiladores idas com atoriais .
arefas concinos B7, B
ficar a velo
por botão
çalho OSAcacterísticas
r Sandro Jucá
de procesa a prograuma funçã
Dessa formuma funçã
CPU, e ume coordencada tare
executadas
vídeo-auprogramaCCS e MP
a placa Sadisponíve
correntes eB6 e B5,
ocidade de
no pino 1
cfg.h, coms do proje
ssar tarefasamação deão task doa, O RTOS
ão em C do
ma vez quenação peloefa tem ums de forma
la emas emPLABX C18anUSB, queeis em
e paralelasde forma
e brilho dos
1 (PIN_E3)
mo descritoeto como a
s e o S o
e o m a
m m . e
m
s a
s
)
o a
#define OS_ Qua
atividade temperatupequeno in- Tarefa 1 - Tarefa 2 - Tarefa 3
As atividadesnesta catemáquina dTalvez o mswitch-castarefas, no
A mO estado próximo efinal do sde um laço
Aplicações p
_ENABLE_TT
ase todos e trabalha
ura é comntervalo delê a tempeFormata oexibe a te
MÁQUINA
máquinas , geralmenegoria. Pode lavar lométodo mase. Por exomeado Ta
Figu
máquina dinicial é
stado a seswitch-caso infinito.
práticas de Eletr
TIMERS
os sistemaam em tem
mposto de e tempo, aeratura; o valor da temperatura
AS DE EST
de estadnte em umor exemplouça é facilais simplesxemplo, noarefa 1, Ta
ura 15. 1:
de estado 1, é inc
er executadse. A máq
rônica e microco
as baseadompo real. três taref
a saber:
temperatua;
TADO
o são simma sequênco, o funcilmente dess de impleosso sisterefa 2, Tar
: Impleme
executa crementaddo. O últimquina de
ontroladores em
[ 169 ]
os em micPor exem
fas que,
ra;
mples conscia. Muitos ionamentoscrito comementar umma de mrefa 3 e, co
entação d
as três tao a cada
mo estado estado é
m sistemas comp
crocontrolamplo, um snormalme
struções usistemas d
o de uma uma máqma máquinonitorameomo mostr
de máquin
arefas usaa tarefa dseleciona executad
putacionais, por
adores exesistema dente, que
usadas parda vida rea
máquina quina de esna de estanto de terado na Fig
na de esta
ando declado Estadoo estado 1
da continu
r Sandro Jucá
ecutam mae monitorase repete
ra executaal que se ede lavar
stado de cado em C emperaturagura abaix
ado.
arações swo para se1, e há umuamente n
ais de umaamento da
e após um
ar diversasenquadram
roupa ouconstruçãoé usar um
a tem trêso.
witch-caseelecionar om atraso nono interio
a a
m
s m u .
m s
. o o r
F
Em contrário, condição.
Fig
Aplicações p
Figura 15.
muitas apo próximo
ura 15. 3
práticas de Eletr
. 2: Máqu
plicações, oo estado é
: Selecion
rônica e microco
ina de est
os estadosselecionad
nando o p
ontroladores em
[ 170 ]
tado imp
s não precdo direto p
próximo e
m sistemas comp
lementad
isam ser epelo estado
estado a p
putacionais, por
da em Ling
executadoso atual ou
partir do e
r Sandro Jucá
guagem C
s em seqüêbaseado e
estado at
C.
ência. Peloem alguma
tual.
o a
O RTOdas tarefamáximo de
UTILIZMUL
1) Instvers(htt
2) ParhttpTod(ww Dep
projecduplo ce vassoextensã
Aplicações p
S tambémas a sereme execução
ZANDOLTIPLAT
tale o MPLsão C1tp://www.m
a compilarps://dl.drodos essww.tinyu
pois de ict e escolhclique sobroura). Parão .c dentr
Fig
práticas de Eletr
m é o respom executao de cada t
O CTAFORM
LABX e o co18 Litemicrochip
r os prograpbox.com/
ses progrl.com/Sa
nstalado her o projere pisca.c. ra compilaro da mesm
gura 16. 1
rônica e microco
onsável poradas consitarefa.
COPILAMA COM
ompilador e para.com/page
amas com o/u/1019223gramas anUSB).
é possíveto ProjetoPara compr outros pma pasta d
1: Projeto
ontroladores em
[ 171 ]
r decidir o iderando o
ADOR M FUNÇ
C18. É posa o ehandler/
o C18 e o 388/ProjSa
estão
el abrir oo1C18.X. pilar press
programas.do projeto
o pisca LED
m sistemas comp
agendameos níveis
C18 ÇÕES E
ssível baixasistema
en-us/fam
SanUSB, banUSB1_M
disponíve
o projeto É possível
sione Build .c basta mProjeto1C
D no com
putacionais, por
ento (schede priorid
E A M PORT
ar gratuitaoperac
mily/mplab
basta abrir PLABX/Pro
eis no
MPLAX c visualizar
d and Cleanmodifica-loC18.X.
mpilador C
r Sandro Jucá
eduling) dadade ou p
IDE MTUGUÊ
mente o Mcional
bx/#downlo
o Projeto1ojeto1C18.X
Grupo
clicando o program
n (ícone coos ou criá-
C18.
sequênciapelo tempo
MPLABXS
MPLABX e adesejado
oads)
1C18.X emX.zip
SanUSB
em Openma com umom martelo-los com a
a o
X
a o
m . B
n m o a
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 172 ]
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()
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 173 ]
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; // ledpisca é igual ao inverso de ledpisca saida_pino(pin_b0,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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 174 ]
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; //OU Exclusivo entre as entradas dos pinos b1 e b2 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)
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 175 ]
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”
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 176 ]
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);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 177 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 178 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 179 ]
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();
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 180 ]
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; // ledpisca é igual ao inverso de ledpisca saida_pino(pin_b0,ledpisca); // b0 recebe o valor de ledpisca tempo_ms(500); //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.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 181 ]
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);
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 182 ]
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");
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 183 ]
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; //apenas interrpções de alta prioridade (desvio 0x808) INTCONbits.GIEH = 1; //Habilita interrupções de alta prioridade (0x808) INTCONbits.TMR0IE = 1; // habilita a interrupção do TMR0 T0CON = 0b10000010; //setup_timer0 - 16 bits com prescaler 1:8 e oscilador interno INTCON3bits.INT1IE = 1; // habilita a interrupção externa 1 (pino B1) INTCON2bits.INTEDG1 = 0; // habilita que a interrupção externa 1 ocorra somente na borda de descida while (1);
RCONbits.
INTCONbitINTCONbit
INTCON2bdescida
INTCON3b if (INTCOINTCON3b
Aplicações p
IPEN = 1;
ts.GIEH = its.TMR0IE
bits.INTEDG
bits.INT1IE
ON3bits.INTbits. INT1I
práticas de Eletr
1; /E = 1; //
DG1 = 0;
E = 1; //
NT1IF) F = 0;
rônica e microco
//Habilita in/ habilita a
// habilit
// habilita a
ontroladores em
[ 184 ]
nterrupçõea interrupçã
ita que a in
a interrupçã
//espera o //lim
m sistemas comp
es de alta pão do TMR
interrupção
ção externa
o estouro dmpa a flag d
putacionais, por
prioridade R0
o externa 1
a 1
do timer0 de interrup
r Sandro Jucá
(0x808)
1 ocorra na
pção
na borda dee
T0CON = interno
INTCON3b if (INTCOINTCON3b
T0CON = interno
Aplicações p
0b100000
bits.INT1IE
ON3bits.INTbits. INT1I
0b100000
práticas de Eletr
10;
E = 1; //
NT1IF) F = 0;
10;
rônica e microco
//se
// habilita a
//se
ontroladores em
[ 185 ]
etup_timer
a interrupçã
//espera o //lim
etup_timer
m sistemas comp
r0 - 16 bits
ção externa
o estouro dmpa a flag d
r0 - 16 bits
putacionais, por
s com pres
a 1
do timer0 de interrup
s com pres
r Sandro Jucá
scaler 1:8
pção
scaler 1:8
e oscilado
e oscilado
r
r
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 186 ]
APÊNDICE I: CABEÇALHOS DA FERRAMENTA PARA DIVERSOS COMPILADORES
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 */
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 187 ]
#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;
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 188 ]
#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;
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 189 ]
#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
;
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 190 ]
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
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 191 ]
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-pelo-
terminal-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/.
Aplicações práticas de Eletrônica e microcontroladores em sistemas computacionais, por Sandro Jucá
[ 192 ]
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.