You are on page 1of 192

Ap plica es prt ticas de Eletr E nica ae m micro ocont trolad dores em m sist temas comp putacionai is

Aprend nda de forma f simples s s a grav vao wireless w s e via USB U de e ocontrola ladores microc

Sa andro Juc c

INTRODUO .................................................................................................................................................................. 6 ASSEMBLY X LINGUAGEM C ......................................................................................................................................................... 6 VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA MICROCONTROLADORES .............................. 8 ARQUITETURAS DOS MICROCONTROLADORES .............................................................................................................. 8 O CONTADOR DE PROGRAMA (PC) ......................................................................................................................................... 9 BARRAMENTOS ..................................................................................................................................................................................... 9 A PILHA (STACK) .............................................................................................................................................................................. 10 CICLO DE MQUINA ....................................................................................................................................................................... 10 MATRIZ DE CONTATOS OU PROTOBOARD ..................................................................................................................... 11 RESISTORES ........................................................................................................................................................................................ 12 CAPACITORES ..................................................................................................................................................................................... 13 FONTES DE ALIMENTAO ........................................................................................................................................................ 15 PROTOCOLO DE COMUNICAO USB ................................................................................................................................. 16 MTODOS DE COMUNICAO USB ...................................................................................................................................... 16 FERRAMENTA DE GRAVAO VIA USB ........................................................................................................ 18 2.1 GRAVAO DE MICROCONTROLADORES ........................................................................................................ 19 2.2 GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS ......................................................... 24 2.3 GRAVAO WIRELESS DE MICROCONTROLADORES ............................................................................... 27 2.4 SISTEMA DUAL CLOCK ................................................................................................................................................. 35 2.5 EMULAO DE COMUNICAO SERIAL NO WINDOWS .......................................................................... 35 2.6 GRAVANDO O MICROCONTROLADOR VIA USB NO LINUX ................................................................... 42 2.7 GRAVANDO O PIC VIA USB PELO TERMINAL DO LINUX OU MAC OSX ......................................... 43 2.8 SISTEMA DUAL CLOCK ................................................................................................................................................. 45 2.9 EMULAO DE COMUNICAO SERIAL NO LINUX .................................................................................... 45 2.10 PROGRAMA COM INTERRUPO EXTERNA POR BOTO E DO TIMER 1 ..................................... 49

2.11 OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A VARIAO DE UM POTENCIMETRO ............................................................................................................................................................................ 50 2.12 CIRCUITO COM84 PARA GRAVAO DO gerenciador.hex ..................................................................... 51

PERIFRICOS INTERNOS DO MICROCONTROLADOR ......................................................................... 53 3.1 CONVERSOR A/D ............................................................................................................................................................. 53 3.1.1 AJUSTE DE RESOLUO DO SENSOR E DO CONVERSOR AD DE 8 BITS..................................... 54 3.1.2 AJUSTE DA TENSO DE FUNDO DE ESCALA COM AMPOP .................................................................... 54 3.1.3 AJUSTE DA TENSO DE REFERNCIA COM POTENCIMETRO .......................................................... 55 3.1.4 CONVERSOR AD DE 10 BITS .................................................................................................................................... 55

3.1.5 OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A VARIAO DE UM POTENCIMETRO ............................................................................................................................................................................ 56 3.1.6 LEITURA DE TEMPERATURA COM O LM35 ATRAVS DO CONVERSOR AD ................................ 57 3.1.7 TERMISTOR ......................................................................................................................................................................... 58 3.2 MEMRIAS DO MICROCONTROLADOR ............................................................................................................. 59 3.2.1 MEMRIA DE PROGRAMA .......................................................................................................................................... 59 3.2.2 MEMRIA DE INSTRUES ...................................................................................................................................... 59 3.2.3 MEMRIA EEPROM INTERNA ................................................................................................................................... 60 3.2.4 MEMRIA DE DADOS (RAM) .................................................................................................................................... 60 3.2.5 EXEMPLO DE APLICAO ........................................................................................................................................... 61 3.2.5.1 CONTROLE DE ACESSO COM TECLADO MATRICIAL ........................................................................... 61 3.3 MODULAO POR LARGURA DE PULSO PELO CCP .................................................................................... 65 CONTROLE PWM POR SOFTWARE DE VELOCIDADE DE UM MOTOR CC ...................................................... 67

[2]

INTERRUPES E TEMPORIZADORES ......................................................................................................... 68 INTERRUPES ................................................................................................................................................................................. 68 INTERRUPES EXTERNAS ....................................................................................................................................................... 69 INTERRUPO DOS TEMPORIZADORES ........................................................................................................................... 70 MULTIPLEXAO POR INTERRUPO DE TEMPORIZADORES ............................................................................ 72 EMULAO DE PORTAS LGICAS ................................................................................................................... 73 5.1 INSTRUES LGICAS PARA TESTES CONDICIONAIS DE NMEROS .......................................... 74 5.2 INSTRUES LGICAS BOOLANAS BIT A BIT .............................................................................................. 74 5.3 EMULAO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS ............................................. 78 5.4 MULTIPLEXAO COM DISPLAYS DE 7 SEGMENTOS ............................................................................... 84 COMUNICAO SERIAL EIA/RS-232 ............................................................................................................ 86 6.1 CDIGO ASCII ................................................................................................................................................................... 88 6.2 INTERFACE USART DO MICROCONTROLADOR ............................................................................................ 88 6.3 COMUNICAO SERIAL EIA/RS-485 .................................................................................................................... 90 ACIONAMENTO DE MOTORES MICROCONTROLADOS ........................................................................ 90 ACIONAMENTO DE MOTORES CC DE BAIXA TENSO .............................................................................................. 91 MOTORES ELTRICOS UTILIZADOS EM AUTOMVEIS ........................................................................................... 91 COROA E O PARAFUSO COM ROSCA SEM-FIM .............................................................................................................. 93 CHAVEAMENTO DE MOTORES CC COM TRANSISTORES MOSFET .................................................................... 94 EXEMPLO: SEGUIDOR TICO DE LABIRINTO ................................................................................................................ 95 ESTABILIDADE DO CONTROLE DE MOVIMENTO ......................................................................................................... 95 PONTE H ................................................................................................................................................................................................ 99 DRIVER PONTE H L293D ............................................................................................................................................................. 99 SOLENIDES E RELS ................................................................................................................................................................. 100 DRIVER DE POTNCIA ULN2803 .......................................................................................................................................... 102 PONTE H COM MICRORELS ................................................................................................................................................... 103 ACIONAMENTO DE MOTORES DE PASSO ....................................................................................................................... 103 MOTORES DE PASSO UNIPOLARES .................................................................................................................................... 104 MODOS DE OPERAO DE UM MOTOR DE PASSO UNIPOLAR ......................................................................... 105 ACIONAMENTO BIDIRECIONAL DE DOIS MOTORES DE PASSO ...................................................................... 106 SERVO-MOTORES ........................................................................................................................................................................... 106 FOTOACOPLADORES E SENSORES INFRAVERMELHOS .................................................................... 109 TRANSMISSOR E RECEPTOR IR .......................................................................................................................................... 110 AUTOMAO E DOMTICA COM CONTROLE REMOTO UNIVERSAL ............................................................. 111 CODIFICAO DE RECEPTOR INFRAVERMELHO UTILIZANDO A NORMA RC5 ....................................... 114 ACIONAMENTO DE CARGAS CA COM TRIAC ................................................................................................................ 118 TRIACS E RELS DE ESTADO SLIDO .............................................................................................................................. 118 DIMMER ANALGICO................................................................................................................................................................... 118 CONTROLE DIGITAL DE DISPARO DE UM TRIAC ...................................................................................................... 119 DIMMER DIGITAL COM CONTROLE REMOTO IR ........................................................................................................ 124 LCD (DISPLAY DE CRISTAL LQUIDO) ...................................................................................................... 128 EXEMPLO: CONTROLE DE TENSO DE UMA SOLDA CAPACITIVA COM LCD ........................................... 131 MODELAGEM DE SINAIS DE SENSORES ................................................................................................... 134 EXEMPLO: MODELAGEM DE UM LUXMETRO MICROCONTROLADO COM LDR ...................................... 134 SUPERVISRIO ................................................................................................................................................................................ 137 INTERFACE I2C ....................................................................................................................................................... 141 REGRAS PARA TRANSFERNCIA DE DADOS ................................................................................................................. 142 MEMRIA EEPROM EXTERNA I2C ......................................................................................................................................... 145

RTC (RELGIO EM TEMPO REAL) ................................................................................................................ 147 EXEMPLO: PROTTIPO DATALOGGER USB DE BAIXO CUSTO ......................................................................... 151 TRANSMISSO DE DADOS VIA GSM .......................................................................................................... 157

COMANDOS AT PARA ENVIAR MENSAGENS SMS DE UM COMPUTADOR PARA UM CELULAR OU MODEM GSM ..................................................................................................................................................................................... 157 COMANDOS AT PARA RECEBER MENSAGENS SMS EM UM COMPUTADOR ENVIADAS POR UM CELULAR OU MODEM GSM ....................................................................................................................................................... 158

O PROTOCOLO MODBUS EMBARCADO ..................................................................................................... 161 MODELO DE COMUNICAO .................................................................................................................................................. 161 DETECO DE ERROS ................................................................................................................................................................. 162 MODOS DE TRANSMISSO ...................................................................................................................................................... 162 INTRODUO SISTEMAS OPERACIONAIS EM TEMPO REAL (RTOS) ................................... 167 MQUINAS DE ESTADO .............................................................................................................................................................. 169 UTILIZANDO O COPILADOR C18 E A IDE MPLABX MULTIPLATAFORMA COM FUNES EM PORTUGUS ..................................................................................................................................................... 171 FUNES EM PORTUGUS ....................................................................................................................................................... 172 FUNES BSICAS DA APLICAO DO USURIO ..................................................................................................... 172 FUNES DO CONVERSOR ANALGICO DIGITAL (A/D) ...................................................................................... 177 FUNES DA COMUNICAO SERIAL RS-232 ............................................................................................................. 178 EXEMPLOS DE PROGRAMAS .................................................................................................................................................... 179 APNDICE I: CABEALHOS DA FERRAMENTA PARA DIVERSOS COMPILADORES ............ 186 CCS C Compiler ................................................................................................................................................................................ 186 C18 compiler ...................................................................................................................................................................................... 186 SDCC ...................................................................................................................................................................................................... 188 MikroC .................................................................................................................................................................................................... 189 Hi-Tech C Compiler ........................................................................................................................................................................ 190 Microchip ASM compiler .............................................................................................................................................................. 190

Dedico este trabalho a Deus e minha famlia.

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

INTRODUO
Um microcontrolador um sistema computacional completo, no qual esto includos internamente uma CPU (Central Processor Unit), memrias RAM (dados), flash (programa) e E2PROM, pinos de I/O (Input/Output), alm de outros perifricos internos, tais como, osciladores, canal USB, interface serial assncrona USART, mdulos de temporizao 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 Amrica), possui uma boa diversidade de recursos, capacidades de processamento, custo e flexibilidade de aplicaes. ASSEMBLY X LINGUAGEM C A principal diferena entre uma linguagem montada (como assembly) e a linguagem de programao 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 compilao um processo mais complexo do que a montagem. Na montagem, uma linha de instruo traduzida para uma instruo em cdigo de mquina. J em uma linguagem de programao, no existem linhas de instruo, e sim estruturas de linguagem e expresses. Uma estrutura pode ser condicional, incondicional, de repetio, etc... As expresses podem envolver operandos e operadores mais complexos. Neste caso, geralmente, a locao dos registros de dados da RAM feita pelo prprio compilador. Por isso, existe a preocupao, por paret do compilador, de demonstrar, aps a compilao, o percentual de memria RAM ocupado, pois neste caso relevante, tendo em vista que cada varivel pode ocupar at 8 bytes (tipo double). Para edio e montagem (gerao do cdigo HEX) de um programa em assembly, os softwares mais utilizados so o MPASMWIN (mais simples) e o MPLAB. Para edio e compilao em linguagem C (gerao do cdigo HEX), o programa mais utilizado o PIC C Compiler CCS. Os microcontroladores PIC possuem apenas 35 instrues em assembly para a famlia de 12 bits (PIC12) e 14 bits (PIC16), descritas nas tabelas abaixo, e 77 instrues para a famlia de 16 bits (PIC18). A tabela abaixo mostra algumas instrues em assembly.

[6]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 1. 1: Instrues em assembly. Como pode ser visto, a famlia PIC16F (14 bits com aproximadamente 35 instrues) no possui uma instruo em assembly que realize multiplicao ou diviso de dois operandos, o que curiosamente presente na linguagem assembly da famlia MCS51 (256 instrues que satisfazem a maioria das aplicaes industriais). Portanto, para realizar uma multiplicao, necessrio realizar somas sucessivas, ou seja, em vez de multiplicar uma varivel por outra, realizar somas de uma varivel em uma terceira rea de memria, tantas vezes quando for o valor da segunda varivel. (X * 5 = X + X + X + X + X). Mas em linguagem C possvel se utilizar o operador de multiplicao (*), de forma simples e prtica. Ao compilar, a linguagem gerada ir converter a multiplicao em somas sucessivas sem que o programador se preocupe com isso.

[7]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

VANTAGENS X DESVANTAGENS MICROCONTROLADORES

DA

LINGUAGEM

PARA

- O compilador C ir realizar o processo de traduo, permitindo uma programao mais amigvel e mais fcil para desenvolvimento de aplicaes mais complexas como, por exemplo, uso do canal USB e aplicaes 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 mnimo de alteraes, ao contrrio do ASSEMBLY, onde as instrues mudam muito entre os diversos modelos de microcontroladores existentes como PIC e 8051. - Em C para microcontroladores PIC, no necessrio se preocupar com a mudana 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 prprio compilador atravs das bibliotecas. - possvel 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 compilao em C que o cdigo gerado, muitas vezes, maior do que um cdigo gerado por um montador (assembler), ocupando uma memria maior de programa e tambm uma memria maior de dados. No entanto, para a maioria das aplicaes sugeridas na rea de automao industrial, a linguagem C para PIC se mostra a mais adequada, tendo em vista que a memria de programa tem espao suficiente para estas aplicaes. - Outra desvantagem que o programador no forado a conhecer as caractersticas internas do hardware, j que o mesmo se acostuma a trabalhar em alto nvel, o que compromete a eficincia do programa e tambm o uso da capacidade de todos os perifricos internos do microcontrolador. Isso provoca, em alguns casos, o aumento do custo do sistema embarcado projetado com a aquisio de novos perifricos externos. ARQUITETURAS DOS MICROCONTROLADORES A arquitetura de um sistema digital define quem so e como as partes que compe o sistema esto interligadas. As duas arquiteturas mais comuns para sistemas computacionais digitais so as seguintes: - Arquitetura de Von Neuman: A Unidade Central de Processamento interligada memria por um nico barramento (bus). O sistema composto por uma nica memria onde so armazenados dados e instrues; - Arquitetura de Harvard: A Unidade Central de Processamento interligada a memria de dados e a memria de programa por barramentos diferentes, de dados e de endereo. O PIC possui arquitetura Harvard com tecnologia RISC, que significa Reduced Instruction Set Computer (Computador com Conjunto de Instrues Reduzido). O barramento de dados de 8 bits e o de endereo pode variar de 13 a 21 bits dependendo do modelo. Este

[8]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

tipo de arquitetura permite que, enquanto uma instruo executada, uma outra seja buscada na memria, ou seja, um PIPELINE (sobreposio), o que torna o processamento mais rpido. O CONTADOR DE PROGRAMA (PC) O contador de programa responsvel de indicar o endereo da memria de programa para que seu contedo seja transportado para a CPU para ser executado. Na famlia PIC16F ele contm normalmente 13 bits, por isso, pode enderear os 8K words de 14 bits (o PIC16F877A possui exatamente 8K words de 14 bits, ou seja, 14 Kbytes de memria de programa). A famlia 18F ele possui normalmente 21 bits e capaz e enderear at 2 Megas words de 16 bits (o PIC18F2550 possui 16K words de 16 bits, ou seja, 32 Kbytes de memria de programa). Cada Word de 14 ou 16 bits pode conter um cdigo de operao (opcode) com a instruo e um byte de dado. BARRAMENTOS Um barramento um conjunto de fios que transportam informaes com um propsito comum. A CPU pode acessar trs barramentos: o de endereo, o de dados e o de controle. Como foi visto, cada instruo possui duas fases distintas: o ciclo de busca, quando a CPU coloca o contedo do PC no barramento de endereo e o contedo da posio de memria colocado no Registro de instruo da CPU, e o ciclo de execuo, quando a CPU executa o contedo colocado no registro de instruo e coloca-o na memria de dados pelo barramento de dados. Isso significa que quando a operao do microcontrolador iniciada ou resetada, o PC carregado com o endereo 0000h da memria de programa.

Figura 1. 2: Memrias. As instrues de um programa so gravadas em linguagem de mquina hexadecimal na memria de programa flash (ROM). No incio da operao do microcontrolador, o contador de programa (PC) indica o endereo da primeira instruo da memria de programa, esta instruo carregada, atravs do barramento de dados, no Registro de Instruo da CPU. Um opcode (cdigo de instruo), gerado na compilao em hexadecimal, contm uma instruo e um operando. No processamento, a CPU compara o cdigo da instruo

[9]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

alocada no registro de instruo com o Set de Instrues do modelo fabricado e executa a funo correspondente. Aps o processamento, o operando dessa instruo indica para a CPU qual a posio da memria de dados que deve ser acessada e, atravs do barramento de controle, a CPU comanda a leitura ou a escrita nesta posio. Aps o processamento de uma instruo, o PC incrementado para indicar o endereo do prximo cdigo de instruo (opcode), da memria de programa, que deve ser carregado no registro de instruo. A PILHA (STACK) A pilha um local da RAM ( no PIC18F2550 localizada no final dos Registros de Funo Especial entre FFDh e FFFh) onde guardado o endereo da memria de programa antes de ser executado um pulo ou uma chamada de funo localizada em outra posio de memria. CICLO DE MQUINA O oscilador externo (geralmente um cristal) ou o interno (circuito RC) usado para fornecer um sinal de clock ao microcontrolador. O clock necessrio para que o microcontrolador possa executar as instrues de um programa. Nos microcontroladores PIC, um ciclo de mquina (CM) possui quatro fases de clock que so Q1, Q2, Q3 e Q4. Dessa forma, para um clock externo de 4MHz, temos um ciclo de mquina (CM=4 x 1/F) igual a 1s.

Figura 1. 3: Ciclo de mquina. O Contador de Programa (PC) incrementado automaticamente na fase Q1 do ciclo de mquina e a instruo seguinte resgatada da memria de programa e armazenada no registro de instrues da CPU no ciclo Q4. Ela decoficada e executada no prximo ciclo, no intervalo de Q1 e Q4. Essa caracterstica de buscar a informao em um ciclo de mquina e execut-la no prximo, ao mesmo tempo em que outra instruo buscada, chamada de PIPELINE (sobreposio). Ela permite que quase todas as instrues sejam executadas em apenas um ciclo de mquina, gastando assim 1 s (para um clock de 4

[ 10 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

MHz) e tornando o sistema s mu uito mais r rpido. As nicas exe ees refe erem-se s instrues s m saltos no contador de prog grama, com mo chamadas de fun nes em outro loca al que geram da memr ria de programa e os retornos d dessas funes. MATR RIZ DE CO ONTATOS OU PROT TOBOARD D Para d desenvolve er os proje etos e exe erccos pro opostos nessa apostiila ser ne ecessrio a uilizao d de uma Ma atriz de Con ntatos (ou Protoboar rd em ingl s), mostra ada na figu ura abaixo, que uma placa co om diverso os furos e conexes condutora as para mo ontagem de d circuitos s eletrnicos s. A grand de vantage em do Prot otoboard na a montage em de circ cuitos eletr rnicos a facilidade de insero de comp ponentes (n no necess sita soldagem).

Figura 1 1. 4: Prot toboard.

Na superfcie de uma matriz m de c contatos h uma bas se de pls stico em qu ue existem m centenas de orifcio os onde so s encaix xados os componen ntes ou ta ambm po or ligaes s e inferior so insta alados con ntatos met tlicos que interliga a mediante fios. Em sua parte eletricame ente os com mponentes s inseridos na placa que q so org ganizados em coluna as e canais. De cada la ado da pla aca, ao lon ngo de seu u comprime ento, h duas coluna as complet tas. H um m espao liv vre no mei io da placa a e de cad da lado de esse espa o h vriios grupos s de canais s horizontais s (pequena as fileiras) ), cada um m com 05 orifcios de d acordo como ilu ustrado na a figura abaixo.

[ 11 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Fig gura 1. 5: Contatos s internos s de uma protoboa ard. Em alguns po ontos do circuito ne ecessrio limitar a in ntensidade da corrente eltrica. Para fazer , r isso utiliz zamos um componen nte chama ado resisto or. Quanto maior a resistncia r menor a corrente eltrica e que passa nu um condutor. RESIS STORES Os resistores geralment te so feito os de carbo ono. Para identificar qual a res sistncia de e um resisto or especfic co, compar ramos ele c com a segu uinte tabela:

[ 12 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 1. 1 6: Cdi igo de cor res de res sistores. CAPACITORES S Cap pacitor ou condensador um compone ente que armazena a energia num campo o eltrico. co onsistem em e dois ele etrodos ou placas que e armazen nam cargas s opostas. Estas duas s placas so o condutor ras e so separadas s por um isolante ou o por um m dieltrico o. Eles so o utilizados desde armazenar a bits na as memr rias volt teis dinm micas (DR RAM) dos s computado ores, at corrigir c o fa ator de pot tncia de indstrias fornecendo f o reatncia a capacitiva a para comp pensar a re eatncia in ndutiva pro ovocada po or bobinas e motores s eltricos de grande e porte. uno mai is comum filtrar ru udos em circuitor c el ltricos e e A fu estabilizar as fontes, absorvend do os picos s e preench hendo os v vales de te enso. Os capacitore es descarre egados so o

[ 13 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

um curto e carregad dos abrem o circuito, , por isso so utilizados tamb m para isolar fontes s CC.

Figura 1. 7: Form ma de on nda de cap pacitor. Os capacitore es podem ser s carrega ados e des scarregado os muito ra apidament te, por isso o so utilza ados tamb bm no fl lash eletr nico em uma cm mera fotog grfica, on nde pilhas s carregam o capacito or do flash h durante vrios seg gundos, e ento o c capacitor descarrega d a toda a carga no bu ulbo do flash quase que instan ntaneamen nte gerand do o alto brilho. b Isto o pode torna ar um cap pacitor gran nde e carr regado ext tremament te perigoso o. Eles so o utilizados s tambm e em paralelo com mo otores elt tricos para a fornecer energia p para que as a bobinas s energizada as possam vencer a inrcia i qua ando os mo otores so ligados. As Unidades de Medida a de capac citncia so Farad (F F), Microfa arad (F), Nanofarad d (nF) e Pic cofarad (pF F). Os capacitores m mais comun ns so os eletroltico os, lstrados s na figura a abaixo, os s cermicos s e os de polister. p

Figur ra 1. 8: Ex xemplos de d Capacitores. A fig gura abaix xo mostra a identifica ao de cap pacitores cermicos. c

Figura 1. 9: Clculo d demonstra ativo de capacitn c ncia. gura abaix xo mostra a identifica ao de cap pacitores de d poliste er. A fig

[ 14 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 1. 10: Cdigo d de cores Capacitor C res Polis ster.

FONT TES DE AL LIMENTA O As fontes mais comun ns em sis stemas em mbarcados com mic crocontrola adores so o baterias re ecarregve eis ou conv versores CA A-CC como o carregado ores de cellulares. As baterias ou pilhas s so dispo ositivos qu ue armazen nam energia qumica a e a torna a disponve el na forma d de energia eltrica. A c capacidade de armaz zenamento o de energ gia de uma a bateria medida atravs da a multiplica o da corrente de descarga d p pelo tempo o de autono omia, send do dado em m amprehora (1 Ah h= 3600 Coulombs) C . Deve-se observar que, ao co ontrrio da as baterias s primrias s (no recar rregveis), , as baterias recarre egveis no o podem ser s descar rregadas at a 0V pois s isto leva a ao final prematuro da d vida da bateria. Na N verdade e elas tm m um limite e at onde e podem ser r descarreg gadas, cha amado de t tenso de corte. c Desc carregar a bateria ab baixo deste e limite redu uz a vida til da bateria. As b baterias di itas 12V, por p exempllo, devem operar de 13,8V (te enso a ple ena carga), at 10,5V (tenso de e corte), quando 100 0% de sua capacidad de ter sido o utilizada, , e este o tempo que e deve ser medido co omo auton omia da ba ateria. Como o c comportam mento das baterias n no linear, isto , , quando m maior a corrente de e descarga m menor ser a autono omia e a c capacidade e, no co orreto falar e r em uma bateria de 100Ah. De eve-se fala ar, por exe emplo, em uma bateria 100Ah padro de e descarga a 20 horas, com tens o de corte e 10,5V. Esta bateria a permitir descarga de 100 / 20 = 5A durante d 20 0 horas, qua ando a bateria ir atingir 10,5V V. Out tro fator im mportante a temper ratura de operao o da d bateria, , pois sua capacidade c e e vida til dependem m dela. Usu ualmente a as informa aes so fornecidas f supondo T=25C T ou u T=20C, q que a tem mperatura ideal para maximizar r a vida ti il. 1.12. RUDO (BOUNCIN B NG) E FILT TRO (DEB BOUNCIN NG) Em operaes s de Liga/D Desliga e m mudana de nvel lgico, surge um rudo (Bouncing g) na transio que, ca aso uma interrupo o esteja ha abilitada ou at mes smo um co ontador de e evento, po ode provoc car vrias interrup es ou contagens. As s formas m mais comun ns de filtro o (Debounci ing) so via software e, program mando um tempo t (em m torno de 100ms, de ependendo o

[ 15 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

da chave) aps as transies, de modo a eliminar o rudo antes de efetuar uma instruo, ou via hardware, utilizando um capacitor de filtro em paralelo com a chave.

Figura 1. 11: Rudo.

PROTOCOLO DE COMUNICAO USB A USB, sigla para Universal Serial Bus, o padro de interface para perifricos 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 perifrico. Todas as transferncias USB so administradas e iniciadas pelo host. Mesmo que um dispositivo queira enviar dados, necessrio que o host envie comandos especficos para receb-los. A fase de preparao, conhecida como enumerao, acontece logo depois de quando o dispositivo USB fisicamente conectado ao computador. Nesse momento, o sistema operacional realiza vrios pedidos ao dispositivo para que as caractersticas de funcionamento sejam reconhecidas. O sistema operacional, com a obtida noo do perifrico USB, atribui-lhe um endereo e seleciona a configurao mais apropriada de acordo com certos critrios. Com mensagens de confirmao do dispositivo indicando que essas duas ltimas operaes foram corretamente aceitas, a enumerao finalizada e o sistema fica pronto para o uso. MTODOS DE COMUNICAO USB Os mtodos mais comuns de comunicao USB, tambm utilizados pela ferramenta SanUSB, so: Human Interface Device (HID) - O dispositivo USB reconhecido automaticamente pelo sistema operacional Windows@ ou linux como um Dispositivo de Interface Humana (HID), no sendo necessrio a instalao de driver especiais para a aplicao. Este mtodo apresenta velocidade de comunicao de at 64 kB/s e utilizado pelo gerenciador de gravao da ferramenta SanUSB no linux. Mais detalhes na video-aula disponvel em http://www.youtube.com/watch?v=h6Lw2qeWhlM . Communication Device Class (CDC) Basicamente o driver emula uma porta COM, fazendo com que a comunicao entre o software e o firmware seja realizada como se

[ 16 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

fosse uma a porta de comunica o serial padro. o mtodo o mais simp ples de co omunicao o bidireciona al com velo ocidade de e comunica ao de at 115 kb bps, ou sej ja, aproxim madamente e 14,4 kB/s s. Mais de etalhes em m uma ap plicao Windows@ W com prot tocolo Mo odbus RTU U http://w www.youtu ube.com/ /watch?v v=KUd1Jk kwGJNk e em u uma apli icao de e comunica o bidirecio onal no Linux x http://w www.youtu ube.com/ /watch?v v=cRW99T T_qa7o. Mass Storage Device (MSD) - Mtodo customiza ado para dispositivos de e mento em m massa que q permit te alta velocidade de d comuni cao USB B, limitado o armazenam apenas pe ela prpria a velocida ade do ba arramento USB 2.0 (480 Mbp ps). Este mtodo utilizado p por pen-drives, sc canners, c meras di igitais. Foi i utilizado juntamen nte com a ferramenta a SanUSB para comunicao c com softwa are de sup perviso p rogramado o em Java. Mais hes na vide eo-aula sponvel m detalh dis em http://w www.youtu ube.com/ /watch?v v=Ak9RAl2YTr4. Como foi visto, , a comun nicao U USB bas seada em uma cen ntral (host t), onde o or enumer ra os dispo ositivos US SB conectados a ele. Existem trs grand des classes s computado de dispositivos com mumente associados a a USB: dispositivos d s de interf face huma ana (HID), classe de dispositivo os de comu unicao ( (CDC) e dispositivos de armaze enamento em massa a (MSD). Ca ada uma dessas classes j possui um m driver im mplementa ado na maioria m dos s sistemas o operaciona ais. Portant to, se ade quarmos o firmware e de nosso o dispositiv vo para ser compatve el com uma a dessas classes, no o haver ne ecessidade e de implem mentar um m driver.

Figur ra 1. 12: D Drivers e comunica ao. Nos s sitemas operaciona o is Window ws@ e Linux x, o modo mais fcil de comun nicar com o PIC USB o CDC, por uma razo sim mples, os programa as para PC Cs so ba aseados na a comunica o via por rta serial, o que torn na o proce esso ainda mais simp ples. O mtodo CDC C no Linux e o HID no n Window ws@ so na ativos, ou seja, no necess rio instala ar nenhum m driver no s sistema op peracional para p que o PC reconh hea o disp positivo.

[ 17 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

FERRAMENTA DE GRAVAO VIA USB


O sistema de desenvolvimento SanUSB uma ferramenta composta de software e hardware bsico da famlia PIC18Fxx5x com interface USB. Esta ferramenta livre se mostra eficiente no desenvolvimento rpido de projetos reais, pois no h necessidade de remover o microcontrolador para a atualizao do firmware. Alm disso, esta ferramenta se mostra eficaz no ensino e na difuso de microcontroladores, bem como em projetos de eletrnica e informtica, pois todos os usurios podem desenvolver projetos reais no ambiente de ensino ou na prpria residncia sem a necessidade de um equipamento para gravao de microcontroladores. Alm disso, o software de gravao de microcontroladores USB multiplataforma, pois executvel no Windows@, Mac OSX e no Linux e tambm 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 especfico para gravao de um programa no microcontrolador; conversor TTL - RS-232 para comunicao serial bidirecional, emulado via USB pelo protocolo CDC, que permite tambm a depurao do programa atravs da impresso via USB das variveis do firmware; fonte de alimentao, j que a alimentao do PIC provm 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 alimentao externa.

Conversor analgico-digital (AD) externo, tendo em vista que ele dispe internamente de 10 ADs de 10 bits; software de simulao, considerando que a simulao do programa e do hardware podem ser feitas de forma rpida e eficaz no prprio circuito de desenvolvimento ou com um protoboard auxiliar.

Alm de todas estas vantagens, os laptops e alguns computadores atuais no apresentam mais interface de comunicao paralela e nem serial EIA/RS-232, somente USB. Como pode ser visto, esta ferramenta possibilita que a compilao, a gravao e a simulao real de um programa, como tambm a comunicao serial atravs da emulao de uma porta COM virtual, possam ser feitos de forma rpida e eficaz a partir do momento em o microcontrolador esteja conectado diretamente a um computador via USB.

[ 18 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 2. 1: G Gravao do d PIC via a PC. Utilizando est ta ferramenta, estud antes fora am trs vezes consec cutivas cam mpees da a Competi o de Rob tica do IF FCE (2007, 2008 e 20 009) na ca ategoria Lo ocalizao, campees s da Feira Brasileira de Cincias e Enge enharia (F FEBRACE09 9) da USP P em So o Paulo na a Categoria Engenhari ia (2009), como tam mbm obtiv veram Prm mio de Ino ovao em m Aplicao o Tecnolgic ca na Fer ria Explora a 2009 em m Medelin n na Col mbia e f foram Cam mpees na a Categoria Supranive el do Foro Internacio nal de Cie encia e Ing geniera 20 010 no Chile, terceiro o lugar em i inovao na n Semante ec 2011 do o IFCE e ca ampees na n V Feira Estadual de d Cincias s e Cultura d do Cear na n categori ia robtica educacion nal em 201 11. 2.1 GRA AVAO DE MICRO OCONTRO OLADORE ES

A tr ransfernc cia de prog gramas pa ra os micr rocontrolad dores no ormalmente efetuada a atravs de e um hard dware de gravao especfico o. Atravs desta fer rramenta, possve el efetuar a descarga de d program mas para o microcon ntrolador diretament d te de uma porta USB B er PC. de qualque Para que t todas essas funcionalidades sej jam possv veis, nece essrio gra avar, anter riormente e somente u uma vez, com c um gr ravador es specfico pa ara PIC, o gerenciad dor de gravao pela a USB Geren nciador.he ex disponv vel na pas sta comple eta da ferramenta no o link abaixo, onde e tambm possvel baixar b perio odicament te as atuali izaes dessa ferram menta e a incluso de e novos prog gramas: http://ww ww.4share ed.com/fi ile/sIZwB BP4r/100 0727SanU USB.html Cas so o compu utador ainda no o t tenha o ap plicativo Ja ava JRE ou u SDK inst talado para a suporte a programa as execut veis dese envolvidos s em Java a, baixe a Verso Windows@ W @ disponvel em: http p://www w.4shared d.com/file e/WKDhQ QwZK/jre-6u21-Wi indows@tml ou u atravs do o link: i586-s.ht http://w www.java. .com/pt_BR/down nload/ma anual.jsp. Para a que os programas p s em C pos ssam ser gravados g no n microco ontrolador via USB, necessrio o compil-los, ou se eja, transfo orm-los em e linguag gem de m quina he exadecimal. Existem di iversos com mpiladores s que pode em ser util lizados por r esta ferra amenta, entre eles o

[ 19 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

SDCC, o C18, o Hi-Tech H e o CCS. D Devido didtica d da as funes s e biblio otecas USB B s para emulao ser rial, diverso os perifric cos e mult titasking, u um dos compiladores s disponveis cao disp utilizados com bom rendiment to, alm d do C18, co om exemplos de aplic ponveis na a desenvolvim mento, o CCS na v verso 3.24 45. Esta ve erso func cional com bibliotecas s pasta de d de suporte a USB B pod e ser obtida a atra avs do link: http://w www.4sha ared.com/ /file/Mo6 6sQJs2/10 00511Com mpilador. html . As v verses 4 deste com mpilador ap presentam m bugs em funes e aplicae es, embora a tenham sid do testada as algumas s verses e funcionar ram satisfatoriamente e at a ver rso 4.084. Neste caso, recom mendado criar, c para a cada firm mware (pro ograma a ser comp pilado), um m novo sourc rce file. Cas so grave no microcontrolado or o novo o gerencia ador de gravao pela USB B Gerenciado orPlugandP Play.hex, no esque ea de col lar o novo o arquivo cabealho SanUSB.h h dentro da a pasta Ex xemploseB BibliotecasC CCS localiz zada na pasta p insta alada do compilado c r (C:\Arquiv vos de pro ogramas\PICC\Driver rs ). A re epresenta o bsica do circuit to SanUSB B montado e em protobo board mos strada a se eguir:

Figura 2. 2: Esquem tico de m montagem m da Ferra amenta pa ara 28 pin nos. Para um m microcontro olador de 40 4 pinos, o circuito mostrado abaixo:

[ 20 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 2. 3: Esquemtico de m montagem m da ferramenta pa ara 40 pin nos. Os com mponentes bsicos do o circuito s so: 1m microcontro olador da famlia f PIC C USB (18F F2550, 18F F2455, 18F F4550, etc.); 1 cr ristal de 20 0MHz; 2 ca apacitores de 22pF; 2 ca apacitores de 1uF (um no pino o 14 Vusb e outro entre o +5V e o Gnd ) ; 3 le eds e 3 res sistores de 390 (s necessrio o um led co om resisto r no pino B7); B 1 re esistor de 2k2 2 e um boto b ou fiio para gra avao no pino 1; 1 diodo qualq quer entre o +5V e o o pino Vdd d; 1 Cabo USB qualquer. q Not te que, es ste sistem ma multip iplataform ma (Wind dows@, L Linux e Mac M OSX), ),

compatv vel com o softwar re de gra avao HID HI USB da d Microc chip tamb bm para a Linux e Mac OSX X, pode e ser imp plementad do tamb m em q qualquer placa de e desenvol lvimento de micro ocontrola adores PI IC com interface in USB, pois utiliza o boto de reset, no pino 1, co omo boto de grava o via US SB. Ao con nectar o ca abo USB e

ontrolador, com o p pino 1 no Gnd (0V), , atravs d do boto ou de um m alimentar o microco simples fio o, o micro ocontrolado or entra em m Estado para Grav vao via U USB (led no n pino B7 7 aceso) e q que, aps o reset com m o pino 1 no Vcc (+ +5V atravs do resist tor fixo de 2K2 sem o jump j ), en ntra em Estado E pa ara Opera o do programa p aplicativo (firmware e) que fo oi compilado o. cabo USB apresenta a normalme nte quatro o fios, que so conec ctados ao circuito do o Oc microcontr rolador no os pontos mostrados s na figur ra acima, onde norm malmente, o fio Vcc c (+5V) do c cabo USB vermelho o, o Gnd ( (Vusb-) marrom m ou preto, o D D+ azul ou verde e o D- am marelo ou branco. b Not te que a fo onte de ali imentao do microc controlador r nos pinos s 19 e 20 e dos barra amentos vermelho v ( (+5V) e az zul (Gnd) do circuito o provem da prpria a porta USB do compu utador. Par ra ligar o c cabo USB no n circuito possvel cort-lo e conect-lo o direto no protoboard rd, com fios rgidos soldados, como tam mbm po ossvel con nectar sem m em um pro otoboard ou o numa p placa de circuito c imp presso, utiilizando um m conector cort-lo, e

[ 21 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

USB fmea a. O diodo o de prote o colocad do no pino o 20 entre o Vcc da USB e a alimentao o do microcontrolador r serve par ra protege er contra corrente c re eversa cas so a tenso o da porta a USB esteja a polarizad da de forma a inversa. A fi igura abaix xo mostra a ferrame enta SanU USB monta ada em pro rotoboard seguindo s o circuito an nterior e a posio de d cada te erminal no conector USB a ser r ligado no o PC. Cada a terminal conecta ado diretamente no os pinos do microc controlador r pelos quatro q fios s correspond dentes do cado USB. .

Figura 2. . 4: Esque ema mont tado em protoboar p rd e conec ctor USB. . im mportante salientar que, q para o perfeito o funcionam mento da gravao via USB, o esta ferra circuito de amenta de eve conter r um cap pacitor de filtro ent tre 0,1uf e 1uF na a alimenta o que vem m da USB, ou seja, co olocado en ntre os pino os 20 (+5V V) e 19 (Gnd). Cas so o sistem ma microco ontrolado s seja embarcado com mo, por exe emplo, um m rob, um m sistema de e aquisio o de dados ou um c controle de e acesso, ele e necess sita de uma fonte de e alimenta o externa, que pode e ser uma bateria comum de 9V V ou um c carregador de celular. A figura abaixo mos stra o PCB, disponve el nos Arqu uivos do Grupo SanU USB, e o circuito para a esta ferram menta com m entrada para fonte e de alimen ntao externa. Para a quem de eseja obter o sistema pronto para um apre endizado m mais rpido o, possv vel tambm m encomen ndar placas s de circuito o impresso o da ferram menta San nUSB, com mo a foto da placa a abaixo, en ntrando em m contato co om o grupo o SanUSB atravs a do e-mail: sa anusb_laes se@yahoo. com.br .

Figura a 2. 5: Esq quema mo ontado em m PCB. r o PCB (em Se preferir co onfecciona ar a placa, , possv vel tambm m imprimir ( preto) ) abaixo, em m folha ap propriada, corroer, f furar (pontos marrons) e sold dar os com mponentes.

[ 22 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Mais detalhes em: www.4sha ared.com/ /get/ithq Lbiq/Faze endoPCBt termico.h html ou atravs a do o http://w video disponvel em: : http://w www.yout tube.com m/watch?v v=8NhNs sNw5BfU.

Figura 2. 6: PCB B da Ferra amenta Sa anUSB. Para a obter vrios v programas-fo nte e vd deos deste e sistema livre de gravao, comunica o e alim mentao via USB, basta se e cadastra ar no gru upo de ac cesso livre e www.tiny yurl.com/ /SanUSB e clicar no o item Arqu uivos. Dur rante a pro ogramao o do microc controlador basta ins serir, no in nicio do pro ograma em m C, a biblioteca cab bealho SanUSB S (# #include <SanUSB.h < h>) contid da dentro da pasta a Exemplose eBibliotecasCCS e que q voc j adiciono ou dentro da Drivers s localizada a na pasta a instalada d do compila ador ( C:\A Arquivos de e programa as\PICC\Drivers ). Es sta bibliote eca contm m instrues s do PIC1 18F2550 para p o sis stema operacional, configura aes de fusveis e habilitao o do sistem ma Dual Clo ock, ou sej ja, oscilado or RC inter rno de 4 M Hz para CP PU e crista al oscilador e externo de e 20 MHz para ger rar a frequ uncia de 48MHz da a comunic cao USB, atravs de e prescaler r multiplicador de freq quncia. Como a frequ ncia do oscilador interno de 4 MHz, cad da increm mento dos s temporizad dores corr responde a um micro rossegundo o. O progr rama exem mplo1 abaixo comuta a um led con nectado no o pino B7 a cada 0,5 segundo. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> void main( () { clock_int_4 4MHz();//F Funo nec cessria pa ara habilita ar o dual clock c (48M Hz para USB e 4MHz z para CPU) while (1)

[ 23 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

{ output_toggle(pin_B7); // comuta Led na funo principal delay_ms(500); } } O programa pisca3 abaixo pisca trs leds conectados nos pinos B5, B6 e B7. #include <SanUSB.h> main(){ clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU) while (1) { output_high(pin_B5); // Pisca Led na funo 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 esto disponveis em http://www.4shared.com/file/sIZwBP4r/100727SanUSB.html. 2.2 GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS

Para executar a gravao com a ferramenta SanUSB, importante seguir os seguintes passos: 1. Baixe o a pasta da ferramenta de desenvolvimento SanUSB, para um diretrio 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 especfico para PIC ou com um circuito simples de gravao ICSP mostrado nas prximas sees, o novo gerenciador de gravao pela USB GerenciadorPlugandPlay.hex disponvel na pasta Gerenciador, compatvel com os sistemas operacionais Windows@, Linux e Mac OSX. 3. Pressione o boto ou conecte o jump de gravao do pino 1 no Gnd para a transferncia de programa do PC para o microcontrolador. 4. Conecte o cabo USB, entre o PIC e o PC, e solte o boto ou retire o jump. Se o circuito SanUSB estiver correto acender o led do pino B7. 5. Caso o computador ainda no o tenha o aplicativo Java JRE ou SDK instalado para suporte a programas executveis desenvolvidos em Java, baixe a Verso Windows@ disponvel em: http://www.4shared.com/file/WKDhQwZK/jre-6u21-Windows@i586-s.html ou atravs do link:

[ 24 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

http://w www.java. .com/pt_BR/down nload/ma anual.jsp e execute o aplicativo SanUSB B da pasta S SanUSBwin nPlugandPla ay. Surgir a seguint te tela:

F Figura 2. 7: Interfa ace de gra avao do o microco ontrolado or via USB B. 6. Clique e em Abrir r e escolha o program ma .hex que q deseja gravar, co como por exemplo, e o programa compilado o exemplo o1.hex da pasta Ex xemploseBi ibliotecasS SanUSB e clique em m

Gravar. Es ste program ma pisca o led conect tado no pino B7;


7. Aps a gravao do d program ma, lembre e-se de soltar o bot o ou retira ar o jump do pino de e gravao e clique em e Resetar. Pronto o program ma estar em opera o. Para programar novamente e, repita os passos anteriores a partir do passo 3. Para prote eger o exe ecutvel sa anusb de e excluso do o anti-virus, como p por exemplo, o AVG, basta ir em m Prote oResiden nte do ant ti-virus AVG G:

[ 25 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Clicar em g gereciar ex xecesses, , como na figura abaixo:

Clicar em Gerenciar Excees e adiciona ar caminho o. Ento in nserir o cam el minho do executve que em C:\Program Files\Sa anUSB ou em C:\Arq quivos de Programas P s\SanUSB e clicar em m OK.

[ 26 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Pronto isso. Para reinstalar r o execut tvel da subpasta s SanUSBwin S nPlugandPlay , basta a instal-lo d de dentro do d arquivo o .zip ou .ra ar.

2.3 3

GRAV VAO WI IRELESS D DE MICRO OCONTRO OLADORE ES

A g gravao wireless w descrita nest ta apostila a pode ser feita com m modems Zigbee ou u Bluetooth. Para a gr ravao Zig gbee so u utlizados dois d mdulos XBee da Srie 1 (S1). De e um lado, u um mdulo conect tado a um m PC coord denador co onectado a ao PC via USB U do PC C atravs do o chip FTD DI FT232RL L ou atrav vs de uma a porta serial real co om o MAX X-232 e, do o outro lado o da rede, , um mdulo Zigbee e conectado ao microcontro m olador do dispositivo o final. Esta a conexo o permite a program mao sem fio no mic crocontrola ador PIC. Programas s disponveis s em: http://www.4s shared.com m/get/aP17 7n4FT/sanu usbee.htm l Aba aixo uma il lustrao para p realiza ar grava o de micro ocontrolad dor de form ma wireless s com tens o de alime entao de e 3,3V.

[ 27 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 2. 8: Ilustra ao do c circuito de e grava o wireles ss Zigbee.

Para mais detalhes basta acompanhar o os vdeos Gravao sem fio de e microcon ntroladores s http://w www.youtu ube.com/ /watch?v v=_Pbq2e eYha_c Procedime ento para gravao g wireless: w 1- Circuit to bsico o: Conecte e o mdu lo Xbee ao micro ocontrolado or da plac ca SanUSB B (www.tiny yurl.com/Sa anUSB), co om aliment tao entr re 3V e 3,6 6V e apena as 4 fios: Vcc V (3,3V), Gnd, Tx e Rx, como o mostra a figura aba aixo. Na figura, o fio o vermelho o ligado ao pino 20 0 (Vcc) do m microcontrolador e ao a pino 1 ( (Vcc) do modem m Zig gbee, o fio o azul lig gado ao 19 9 (Gnd) do m microcontr rolador e ao a pino 10 (Gnd) do modem Zigbee, o fi o laranja ligado ao o pino 18 (R Rx) do mic crocontrola ador e ao pino 2 (DOUT odem Zigbe ee, e o fio amarelo O ) do mo ligado ao 1 17 (Tx) do o microcont trolador e ao pino 3 (DIN) do modem m Zigb bee. 2- Config gurao dos d Mdu ulos: A gr ravao wireless w s vai acont tecer se os o mdulos s Xbee da a srie 1 (c coordenad dor e dispo ositivo final) estiverem configu rados com m o mesmo o e Grava o sem m fio de e microcontr roladores via Zigbee: http:/ //www.yo outube.co om/watch h?v=BlRjKbXpepg.

baud rate do microc controlador r (19200 b ps). Para o coordena ador, basta a conectar, o mdulo o
coordenad dor ao micr rocontrolad dor, ver cir rcuito bsico acima, gravar via a USB e ex xaminar em m qual firmw ware (Conf nfigCoord96 600to19200 00.hex ou ConfigCoor C rd19200to1 o19200.hex x) o led no o pino B7 ir piscar int termitentemente. Se o led no piscar, provavelmen nte existe um u erro na a

[ 28 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

ligao do o circuito. Aps A a con nfigurao, coloque o mdulo Coordenado C or no conv versor USBserial e conecte ao PC. P Faa post teriormente e o mesm mo para o mdulo Dispositivo o final, g ravando o firmware e (ConfigDis spFinal9600 00to19200.h hex

ou

ConfigDi DispFinal192 200to19200 00.hex)

deixe-o o

conectado o ao microc controlador. Quando o led do pino p B7 estiver pisca ando, signif fica que os s mdulos e esto conec ctados corretamente e esto ap ptos para gravao g w wireless.

Figura a 2. 9: Gr ravao v ia USB de e Configurao wir reless. 3Adap ptador W Wireless : Agora grave, novament te via USB, o firmware e

Adaptador rSerial.hex x da pasta a Adaptad orWireless s. Se, ap s a grava ao do Adaptador A ,


apresentar r o erro Odd O addres ss at begin inning of HEX H file er rror, como o na figura a abaixo, necessrio o gravar novamente n o gerenc ciador.hex, com qualquer grav vador espe ecifico (ver tutorial), e em segu uida, realizar novam mente a gravao vi ia USB do o firmware e aplicativo o Adaptador rSerial.hex. Aps a transfern t cia deste firmware, o microco ontrolador est apto o para grava ao wirele ess.

[ 29 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figur ra 2. 10: Gravao G o via USB de Adapt tador wire eless. Ago ora basta acessar a pasta sa anusbee pelo p Prompt do Wi ndows@ (Iniciar ( -> > Pesquisar -> Promp pt de Coma ando), com mo na figu ura abaixo, e digitar, r, como mo ostrado no o vdeo Grav vao sem m fio de microcontro m oladores via v Zigbee, , as linhas s de coma ando, para a transferir os progra amas aplicativos.hex como o Exemplo1w wireless.he ex contido o na pasta a sanusbee. Exe emplo:

san nusbee Exe emplo1Wire eless.hex p COM2

F Figura 2. 11: Grava ao wire eless zigbe ee pelo prompt do o Window ws. A g gravao wireless s Bluetoo oth pode ser realiza ada com apenas um mdulo o Bluetooth conectado o ao microc controlado or, pois nor rmalmente e no PC coo ordenador r, como em m

laptops e desktops, j existe um u mdulo o bluetooth h interno. A tenso d do mdulo o Bluetooth h


[ 30 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

encapsulad do, mostra ado na figu ura abaixo, , suporta at a 6V, dife erentement te do mdulo Xbee que supor rta de 3,3V V. Dessa fo orma, pod de-se cone ectar o mdulo Bluet tooth diretamente ao o microcontr rolador alim mentado pela p tenso o da porta USB de 5V V. De um lado um u PC coo ordenador e, do outr ro lado da rede, um mdulo bluetooth b conectado o ao microc controlado or do dispo ositivo final. Esta co onexo per rmite a pro ogramao o sem fio no m microcontro lador PI IC. Os Programa as esto liink disponv veis em pode em: anexo: ser http://www w.4shared.com/get/a aP17n4FT/ /sanusbee. .html. adquirido o modem Bluetooth mostrado neste tutorial. Aba aixo uma il lustrao para p realiza ar grava o de micro ocontrolad dor de form ma wireless s Bluetooth com tens o de alime entao de e 5V. Neste N

http://sanusb-laese.w wix.com/ro obotica#!p produtos/productsstackergallery yv20=1,

Fig gura 2. 12 2: Ilustrao do Ci ircuito de e gravao o wireless s Bluetoo oth.

Para mais detalhes basta acompanhar o os vdeos Gravao sem fio de microcon ntroladores es http://w www.youtu ube.com/ /watch?v v=_Pbq2e eYha_c e Gravao G s sem fio (w wireless) de e microcontr roladores http:/ //www.yo outube.co om/watch h?v=0PcC CQtsO1Bw wg via a Bluetooth. Procedime ento para gravao w wireless: 1- Circuit to bsico o: Conecte o mdulo o bluetooth h ao micro ocontrolad dor da plac ca SanUSB B (www.tiny yurl.com/Sa anUSB), co om alimen ntao entr re 3V e 6V V e apena s 4 fios: Vcc V (3,3V), Gnd, Tx e Rx, como mostra a figura f acim ma do circu uito. Na fig gura, o fio v vermelho ligado ao o

[ 31 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

pino 20 (V Vcc) do mi icrocontrolador e ao pino Vcc do modem m bluetooth h, o fio az zul ligado o ao 19 (Gnd) do micr rocontrolad dor e ao p pino Gnd do modem bluetooth, , o fio verd de ligado o ao pino 18 8 (Rx) do o microcon ntrolador e ao pino Tx modem m bluetooth h, e o fio amarelo ligado ao 1 17 (Tx) do o microcont trolador e ao pino Rx x do modem m bluetoot th. 2- Parear r o mode em Blueto ooth: Aps s alimenta ar o modem Bluetoo oth com 3, ,3V ou 5V V, conectado o ao microc controlador r, realizar o pareame ento com o PC indo e em: 2.1- Inicia ar -> Pain nel de con ntrole -> A Adicionar um u dispositivo de blu > linvor -> > uetooth -> senha pad dro: 1234; ; 2.2- Aps o paream mento, cliqu ue em Inic ciar -> Pa ainel de co ontrole -> exibir imp pressoras e os. Ir apar recer o mo odem parea ado, como o, por exem mplo, o linv vor. dispositivo

h. F Figura 2. 13: 1 Pareamento do o modem bluetooth 1.3- Clicar r em cima, , por exem mplo, do m modem de linvor, e verificar v qu ual porta criada c pelo o modem Bluetooth, em e Hardwa are, que se er utilizada a para a gr ravao wiireless.

Figu ura 2. 14: : Verifica o da po orta serial l criada pe elo mode em blueto ooth. On nmero da porta Ser rial Padro o por Link Bluetooth (COM37) p pode ser modificada m , por exemp plo, para COM9 com mo neste tutorial, atravs do o Gerencia ador de Dispositivos, clicando co om o boto direito em e cima da a porta -> propriedad des -> Con nfigurao de Porta > Avanad do -> Nm mero da Por rta COM.

[ 32 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

3- Config gurao do d Mdul lo blueto ooth: A gr ravao wireless w s vai acont tecer se o mdulo Bluetooth es stiver confi igurado co om o mesm mo baud ra ate do micr rocontrolad dor (19200 0 bps). Para a isto, basta conectar r, o mdulo o bluetooth h ao micro ocontrolado or, ver circ cuito bsico o acima, gra avar via US SB o firmw ware Config figbluetotth h9600to192 200.hex e verificar se s o led no o pino B7 ir piscar int termitentemente. Se o led no piscar, provavelmen nte existe um u erro na a ligao do circuito. Quando o led do pino p B7 es stiver pisca ando, sign nifica que os mdulo os esto conectados c s corretame ente e esto o aptos pa ara grava o wireless s.

Figura a 2. 15: Gravao v via USB de Configu urao wi ireless.

4-

Adap ptador

W Wireless :

Agora

grave,

novament te

via

USB,

firmware e

Adaptador rSerial.hex x da pasta a Adaptad orWireless s. Se, ap s a grava ao do Adaptador A ,


apresentar r o erro Odd O addres ss at begin inning of HEX H file er rror, como o na figura a abaixo, necessrio o gravar novamente n o gerenc ciador.hex, com qualquer grav vador espe ecifico (ver tutorial), e em segu uida, realizar novam mente a gravao vi ia USB do o firmware e aplicativo o Adaptador rSerial.hex. Aps a transfern t cia deste firmware, o microco ontrolador est apto o para grava ao wirele ess.

[ 33 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figur ra 2. 16: Gravao G o via USB de Adapt tador wire eless.

Ago ora basta acessar a pasta sa anusbee pelo p Prompt do Wi ndows@ (Iniciar ( -> > Pesquisar -> Promp pt de Coma ando), com mo na figu ura abaixo, e digitar, r, como mo ostrado no o vdeo PIC C wireless Zigbee programmin p ng II, as linhas de comando o, para tra ansferir os s programas s aplicativo os.hex com mo o Exemp plo1wireles ss.hex contido na pa sta sanusb bee. Exe emplo: san nusbee Exe emplo1Wir reless.hex p COM9

Fig gura 2. 17 7: Grava o wirele ess blueto ooth pelo prompt d do Window ws.

As vantagens do mo odem Bluetooth em relao ao o Zigbee, so s o preo o e a disp ponibilidade e de mode ems Bluet tooth j disponve eis em vrios v sist temas co omputacion nais como o computado ores e ce elulares. A desvanta agem em relao ao a Zigbee a dist ncia para a gravao d de microco ontroladore es mxima de 10 metros.

[ 34 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

2.4 4

SISTEMA DUAL L CLOCK

Dev vido inc compatibilid dade entre e as frequ uncias ne ecessrias para a gravao g e emulao serial via a USB e a frequnc cia padro o utilizada pela CPU U, tempor rizadores e interface I2C, esta fe erramenta adota o p princpio Dual D Clock, ou seja, u utiliza duas s fontes de e clock, uma a para o ca anal USB de d 48MHz, provenien nte do crist tal oscilado or externo de 20MHz z multiplicad da por um m prescale er interno, e outra para p o CP PU de 4 M MHz, prove eniente do o oscilador R RC interno de 4 MHz, , como ilustrado na a figura abaixo.

Fi igura 2. 18: 1 Comun nicao PIC P com PC P e via I2 C. Esse e princpio o de clock paralelo, r realizado pela p instruo clock_ k_int_4MHz( z(), permite e que um da ado digitad do no tecla ado do com mputador, trafegue para p o mic crocontrola ador em 48 8 MHz via USB, depois s para perif fricos com mo um rel gio RTC ou o para a m memria EE EPROM em m 4 MHz via I2C e vice-versa. 2.5 5 EMULA AO DE COMUNIC CAO SE ERIAL NO O WINDOW WS

ste tpico mostrad do um mt todo de co omunicao o serial bid direcional atravs do o Nes canal USB B do PIC18F2550. Uma das s formas mais simp ples, at travs do protocolo o Communic cations Dev evices Class ss (CDC), q que emula uma porta COM RS S-232 virtu ual, atravs s do canal U USB 2.0. Dessa D form ma, poss svel se co omunicar com c carac cteres ASCII via USB B atravs de e qualquer r software monitor s serial RS-2 232 como o HyperT Terminal, o SIOW do o CCS Com mpiler ou o ambiente e de progra amao De elphi. O driver CDC C instalado o no PC e o programa aplicativo gravado no n PIC, co om a biblio oteca CDC (#include e <usb_san_cdc.h>), so os res sponsveis por esta emulao e d da porta RS S-232 virtu ual atravs da USB. biblioteca CDC C para o program ma.c do microcontrol lador est dentro da a pasta de e A b exemplos, a qual dev ve estar na a mesma p pasta onde e est o programa.c a ser comp pilado para a a emula o da com municao serial RS S-232. Al m disso, o program ma.c deve e inserir a biblioteca usb_san_c cdc.h, com mo mostra a o exemplo de leitura e escr rita em um m buffer da a EEPROM in nterna do microcontr rolador. As s funes CDC C mais utilizadas u c contidas na a biblioteca a usb_san_c cdc.h para comunica o com a COM virtu ual so: usb_cdc_ _putc() o microcontrolador e envia carac cteres ASC CII emulado os via USB B. Ex.: prin ntf(usb_cd dc_putc, "\r\nEnder " reco para escrever: e "); usb_cdc_ _getc() retm um caractere ASCII emu ulado pela USB. Ex.: dado o = usb_c cdc_getc( (); //retm m um caractere na varivel dado o

[ 35 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

gethex_usb() retm um nmero hexadecimal digitado no teclado. Ex.: valor = gethex_usb();//retm um nmero hexadecimal na varivel valor usb_cdc_kbhit( ) Avisa com TRUE (1) se acabou de chegar um novo caractere no buffer de recepo 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 emulao da serial atravs da USB: --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao 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 perifrico com a usb do PC output_high(pin_b7); // Sinaliza comunicao USB Ok while (1) { printf(usb_cdc_putc, "\r\n\nEEPROM:\r\n"); // Display contm 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); }} --------------------------------------------------------------------------------------------------------------Aps gravao de um programa que utilize comunicao serial CDC no microcontrolador pelo SanUSB e resetar o microcontrolador, v, se for o Windows 7, em propriedades do sistema -> Configuraes avanadas do sistema -> Hardware -> Gerenciador de

[ 36 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

dispositivos e clique com boto direito no driver CDC do microcontrolador e atualizar Driver, apontando para a pasta DriverCDCwinSerial. No Windows@ XP, aps a gravao de um programa que utilize comunicao serial CDC no microcontrolador pelo SanUSB e resetar o microcontrolador, o sistema vai pedir a instalao do driver CDC (somente na primeira vez).

Figura 2. 19: Instalao do driver CDC (1). Escolha a opo Instalar de uma lista ou local especifico (avanado). Aps Avanar, selecione a opo Incluir este local na pesquisa e selecione a pasta DriverSanWinCDC, onde est o driver CDC.

Figura 2. 20: Instalao do driver CDC (2). Aps Avanar, clique em Continuar assim mesmo.

[ 37 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 2. 21: Instalao do driver CDC (3). Aguarde enquanto o Driver CDC instalado no Windows@.

Figura 2. 22: Instalao do driver CDC (4). Clique em Concluir para terminar a instalao.

[ 38 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 2. 23: Instalao 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: Verificao 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 atravs da emulao serial via USB.

[ 39 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 2. 25: Utilizao da porta COM pelo CCS. Para utilizar uma funo que necessite de atendimento imediato quando um caractere for digitado como, por exemplo o caractere L ou D, necessrio inserir no firmware do microcontrolador a condio para verificar de forma constante e reter o caractere emulado que chegou pela USB S (SB_cdc_kbhit( )) {dado=usb_cdc_getc();} no lao infinito da funo 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 funo 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 comunicao serial virtual BYTE comando; void main() { clock_int_4MHz();//Funo necessria 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 perifrico com USB do PC while (TRUE) { if (usb_cdc_kbhit( )) //avisa se chegou dados do PC

---------------------------------------------------------------------------------------------------------------

[ 40 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

{ //verifica a se tem um novo byte no b buffer de recepo, depois o kbhit ze erado para a prximo by yte comando= =usb_cdc_g getc(); //s se chegou, , retm o caractere e compar ra com L ou D em m ASCII if (comand do==L) {o output_hig gh(pin_b7); printf(usb_cdc_putc, \r\nLed d Ligado\r\ \n);} if (comand do==D) {output_low { w(pin_b7); ; printf(usb b_cdc_putc c, \r\nLed d Desligado o\r\n);} } gh(pin_B6) ); // Pisca Led na fun no principal output_hig delay_ms( (500); output_low w(pin_B6); ; delay_ms( (500); }} ---------------------------------------------------------------------------------------------------------------

Figur ra 2. 26: Visualiza V o de tex xtos via serial s emu ulada. Para a utilizar o programa a de comu unicao Java-SanUS SB para em mulao se erial virtua al entre o co omputador r e o micro ocontrolado or, necessrio baix x-lo atrav vs do link k disponve el em http://w www.4sha ared.com/ /file/1itVI Iv9s/101 1009Softw wareComS Serial_Window.ht ml . Aps exec cutar o pr rograma de comunic cao serial Java-Sa anUSB, ver rifique a porta p COM M virtual ger rada (COM M3,COM4,COM11,etc. ) no Wind dows@, em m Painel d de Controle e\Todos os s Itens do Painel de e Controle\Sistema e altere no progra ama seriall Java- Sa anUSB em m os e depois s clique em m Conectar r, como mo ostra a figu ura abaixo. . Dispositivo

[ 41 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figur ra 2. 27: Interface I e em Java de comunicao s serial.

2.6 6

GRAVA ANDO O MICROCO M ONTROLAD DOR VIA USB NO L LINUX

Esta a aplicao o substitui a gravao o via USB pelo terminal do Linu ux, pois uma forma a mais simp ples e dire eta de gra avao. Co om apenas s dois cliq ques no in nstalador automtico a o SanUSB.de eb poss vel instala ar este ap licativo em m qualquer r mquina a com Linu ux (Ubuntu u 10.04, equ uivalente ou o posterio or). Depois s de instala ado, a inte erface de g gravao localizada a em Aplicat tivos -> ac cessrios. Se voc j te em o Java a instalado o (JRE ou SDK) baix xe o instala ador automtico.deb b atualizado disponve el no link: www.4sha ared.com/ /file/RN4 4xpF_T/sa anusb_Lin nux.html contido ta ambm na a http://w pasta gera al http:// /www.4sh hared.com m/file/sIZ ZwBP4r/100727Sa anUSB.ht tml. Se ainda no tem o Jav va (JRE ou u SDK), ba aixe o instalador San nUSB, j configurado c o Java a JRE e disp ponvel em: com o http://w www.4sha ared.com/ /file/3mh hWZS5g/s sanusb.ht tml . A f figura abai ixo mostra a a interfa ace grfica a desenvolvida para gravao o direta de e microcontr roladores via v USB:

[ 42 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

agem de programa F Figura 2. 28: 2 Mensa a gravado o. Nes ste aplicati ivo, esto disponve is botes para Abrir r o progra ama em he exadecima al compilado o, para Gr ravar o pr rograma h hexadecima al no micr rocontrolad dor via USB e para a Resetar o microcontrolador no n intuito de coloc-lo em op perao. A interface apresenta a a gravar e resetar au utomaticam mente. ainda um boto para im mportante salientar que q para u utilizar esta a ferramen nta no Linu ux neces ssrio estar logado com m permiss so para ac cessar a p porta USB como, c por exemplo, super-usu urio (sudo o su), e que para es stabelecer comunica o com o microcontrolador necess rio gravar anteriorme ente no microcontro m olador, som mente uma a vez, com m qualquer r gravador r especfico o para PIC, o gerencia ador de gr ravao pe ela USB Ge erenciador rLinux.hex, , disponve el na pasta a SanUSB ou u em http://www.4shared.c com/file/ /HGrf9nD Dz/Gerenc ciador.htm ml . Aps grav var o GerenciadorLinux.hex co m um gravador convencional para PIC, coloque o circuito Sa anUSB em modo de gravao pela USB B (pino 1 ligado ao G Gnd (0V) atravs de e boto ou fio ) e con necte o ca abo USB d o circuito no PC. Se e o circuit ito SanUS SB estiver er correto, a acender o led do pino B7. Pronto, o sistema s j est prepa arado para a gravar no o microcontr rolador, de d forma simples e direta, quantos programas p .hex voc c desejar utilizando a interface e USB. Para progr ramar nova amente, basta press ionar o bo oto de gra avao no pino 1, de esconecte e conecte o cabo US SB de alim mentao, selecione o programa.hex d esejado em e Abrir e pressione o boto Gr ravar&Rese etar. 2.7 7 GRAVA ANDO O PIC P VIA U USB PELO TERMINA AL DO LIN NUX OU MAC M OSX

[ 43 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Esta a aplicao o realiza ada de for rma simple es em linha de coma ando no terminal do o Mac OSX. Para abrir r o termina al necess srio baixa ar e instala ar o softwa are Xcode. . No Linux x, instale o san nusb.deb disponv vel em m http://w www.4sha ared.com/ /file/sIZw wBP4r/10 00727San nUSB.htm ml . Para inicia ar a gravao com linhas de com mando im mportante seguir os s seguintes passos: 1. Grave no microco ontrolador r, somente e uma vez z, com um gravador r especfico o para PIC C com o cir rcuito simp ples de gravao C COM84 des scrito nest ta apostila a ou outro o gravador qualquer, o gerenci iador de gravao g p pela USB Gerenciado dor.hex, qu ue multiplataforma a ac OSX e Windows@) W ). (Linux, Ma 2. Pelo Te erminal do o Linux ou Mac OSX X acesse on nde est o executv vel sanusb b, instalado o pelo arq quivo san nusb.deb, e no Mac OSX acess se a p pasta de arquivos s SanUSBMa acPlugandP Play, ond de est o exec cutvel sa anusb. M Mais dealhes em: http://www w.youtube e.com/watc ch?v=rSg_ i3gHF3U . 3. Aps e entrar na pasta do exectvel sanusb, acesse inf formaes do conte edo deste e arquivo dig gitando: . / sanusb-h A figura abaix xo mostra o printscre een de exe emplo de um u process so de aces sso pasta a e tambm do proces sso de grav vao pelo o terminal:

Figu ura 2. 29: Acesso pasta pe elo termin nal do LIN NUX. circuito SanUSB mon ntado, colo oque-o em modo de gravao g ( (pino 1 liga ado ao Gnd d 4. Com o c com boto o pressiona ado ou jum mp ) e cone ecte o cabo o USB do circuito c no PC. 5. Para g gravar no microcont trolador, o firmware desejado, como o exemplo1.hex, deve e estar mesm mo diretrio do executvel sanusb, ento o para a gr ravao via a USB, digita-se:

[ 44 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

. / sanusb w exemplo1.he ex 6. Depois de gravar, remova o boto ou j jump de gravao, g ento e reset t digitando o: . / sanusb r ou simplem mente: . / sanusb w exem plo1 r Para a program mar novam mente, bas sta coloca ar o jump p de grav vao, des sconecte e conecte o cabo USB de alimen ntao, e re epita os pa assos anteriores a pa artir do pas sso 6. Se o rolador n o for reco onecido, f feche o te erminal, co onecte o m microcontr rolador em m microcontr outra port ta USB, ab bra um no ovo termina al e repita a repita os s passos a nteriores a partir do o passo 3. 2.8 8 SISTEMA DUAL L CLOCK

Dev vido inc compatibilid dade entre e as frequ uncias ne ecessrias para a gravao g e emulao serial via a USB e a frequnc cia padro o utilizada pela CPU U, tempor rizadores e interface I2C, esta fe erramenta pode ado otar o princpio Dual l Clock rea alizado pela a instruo o clock_int_4 4MHz(), ou u seja, utiliza duas f fontes de clock, uma a para o c canal USB de 48MHz, provenient te do crista al oscilado or externo de 20MHz multiplicada por um m prescaler r interno, e outra para a o CPU de d 4 MHz z, provenie ente do os scilador RC interno de 4 MHz, como ilustrado n na figura abaixo.

igura 2. 30: 3 Comun nicao PIC P com PC P e via I2 C. Fi Esse e princpio o de clock ck paralelo, permite que um dado digiitado no teclado t do o computado or, trafegu ue para o microcontr m rolador em 48 MHz via v USB, de epois para perifricos s como um relgio RTC ou para a memria a EEPROM em 4 MHz z via I2C e vice-versa. 2.9 9 EMULA AO DE COMUNIC CAO SE ERIAL NO O LINUX

ste tpico mostrad do um mt todo de co omunicao o serial bid direcional atravs do o Nes canal USB B do PIC18F2550. Uma das s formas mais simp ples, at travs do protocolo o Communic cations Dev evices Class s (CDC), qu ue padr o no Linux x e que em mula uma porta COM M RS-232 vir rtual com o microcontrolador, atravs do o canal US SB. Dessa forma, possvel se e comunicar r com cara acteres ASC CII via US SB atravs de qualqu uer softwar re monitor r serial RS[ 45 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

232 como o Cutecom, o minicom ou outros aplicativos com interface serial. A biblioteca CDC_ACM padro no Linux e o programa aplicativo gravado no PIC com a biblioteca CDC (#include <usb_san_cdc.h>), so os responsveis por esta emulao da porta RS-232 virtual atravs da USB. A emulao serial muito utilizada tambm para debugar, ou seja, depurar as variveis de um programa.c, imprimindo-as pela USB durante a execuo real do programa. Dessa forma, o programador pode encontrar possveis erros na programao do firmware. A biblioteca CDC (#include <usb_san_cdc.h>) est dentro da mesma pasta de ExemploseBibliotecas. Para a compilao de um programa aplicativo com emulao 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 funo principal e comanda, via USB atravs emulao serial, o estado de outro led no pino B7 com as teclas L e D do teclado de um PC. As funes CDC mais utilizadas para comunicao com a COM virtual so: usb_cdc_putc() o microcontrolador envia caracteres ASCII emulados via USB. Ex.: printf(usb_cdc_putc, "\r\nEndereco para escrever: "); usb_cdc_getc() retm um caractere ASCII emulado pela USB. Ex.: dado = usb_cdc_getc(); //retm um caractere na varivel dado gethex_usb() retm um nmero hexadecimal digitado no teclado. Ex.: valor = gethex_usb();//retm um nmero hexadecimal na varivel valor usb_cdc_kbhit( ) Avisa com TRUE (1) se acabou de chegar um novo caractere no buffer de recepo USB do PIC. Ex.: if (usb_cdc_kbhit( )) {dado = usb_cdc_getc();} Outras funes do protocolo so: 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 noremovido literalmente; usb_detach(): Desconecta o dispositivo. Deve ser usada antes de sua remoo fsica do computador; usb_enumerated(): Verifica se o dispositivo est pronto para a comunicao. #include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao serial virtual via USB BYTE comando; main() { clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU)

[ 46 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico 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 recepo, depois o kbhit zerado para prximo byte comando=usb_cdc_getc(); //se chegou, retm 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 funo principal delay_ms(300); output_low(pin_B6); delay_ms(300); }} Este firmware realiza a comunicao serial virtual com o protocolo CDC inserido no firmware do microcontrolador atravs da biblioteca usb_san_cdc.h. Este protocolo padro no sistema operacional Linux. Aps gravar o firmware via USB com o executvel linux sanusb, instale o software de comunicao 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 informaes podem ser obtidas no video: http://www.youtube.com/watch?v=cRW99T_qa7o .

[ 47 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 2. 31: Cu uteCOM. p possvel tambm utilizar o pro ograma de e comunicao seria al Java-SanUSB para a emulao serial virtu ual entre o computad dor e o mic crocontrolador. p possvel baixar esta ferramenta f a de comu unicao se erial atrav s do link disponve el usb_10_a em http: ://www.4 4shared.c com/file/ /5emc7kn nO/SerialJ Java-sanu all.html . Aps cone ectar o mic crocontrola ador e abr rir o progra ama de co omunicao o serial Jav va-SanUSB B em Aplicat tivos -> Outros, O ap parecer a porta serial virtual gerada g no Linux (tty yACM0) em m Dispositivo os. Para listar a port ta serial viirtual gerad da, utilizan ndo o Term minal do Li inux, basta a digitar ls / /dev/ttyA ACM* . possvel p re ealizar a co omunicao o depois de e clicar em m Conectar, como mos stra a figura abaixo.

Fig gura 2. 32: Interfa ace de com munica o serial em e Java p para LINU UX.

[ 48 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

2.10 PROGRAMA COM INTERRUPO EXTERNA POR BOTO 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 aps o pino ser aterrado (boto 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 funo principal delay_ms(500); output_low(pin_B6); delay_ms(500); }}

[ 49 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

-------------------------------------------------------------------------------------------------------------2.1 11 OBTEN NO DE UM VOLT TMETRO ATRAVS S DO CON NVERSOR R AD COM M A VARIA AO DE UM U POTEN NCIMET TRO

#include < <SanUSB.h h> //Leitur ra de tens o em mV com varia o de um m potencim metro #include < <usb_san_ _cdc.h>// Biblioteca B p para comu unicao se erial virtuall int32 tensa sao; main() { 4MHz(); clock_int_4 usb_cdc_in init(); // In nicializa o protocolo p C CDC usb_init(); ; // Inicializ iza o protoc ocolo USB usb_task() (); // Une o perifrico o com a usb sb do PC setup_adc_ c_ports(AN N0); //Hab bilita entrad da analgic ca - A0 setup_adc c(ADC_CLO OCK_INTER RNAL);

---------------------------------------------------------------------------------------------------------------

while(1){ //ANALGI / ICO DIGITAL(1 10 bits) set_adc_c channel(0); ; // 5000 m mV 1023 3 delay_ms( (10); // tensao o read_ _adc() tensao= (5 (5000*(int3 32)read_ad dc())/1023; 3; printf (usb b_cdc_putc c,"\r\nA ten nsao e' = % %lu mV\r\n",tensao) ); // Imprim me pela se erial virtual l output_hig gh(pin_b7) ); delay_ms( (500); output_low w(pin_b7); ; delay_ms( (500);

}}

Figura 2. 2 33: Uso o de poten ncimetro o no conv versor AD D do PIC. Para a obter no ovos progra amas e pro ojetos, bas sta acessar r os arquiv vos do grup po SanUSB B em www.tinyurl.com/SanU USB como tambm baixar b a ap postila com mpleta disp ponvel em m TTP://www w.4shared.com/docu ument/Qst_ _pem-/100 0923Apostila_CPIC.ht tml .

[ 50 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

2.1 12 CIRCU UITO COM M84 PARA A GRAVA O DO ge erenciado or.hex a este circ cuito simple es de grav vao s necessrio o 3 resisto ores de 10k k, um cabo o Para serial DB9 9 (RS-232) ) e uma fo onte exter rna de 5V, , que pode ser obti da da por rta USB. O circuito e a foto abai ixo mostram o esque ema simple es de liga o dos pino os.

F Figura 2. 34: Circu uito COM8 84 para gravao do d gerenc ciador.hex x Este circuito a partir da porta COM C DB9 p pode ser visualizado na figura a abaixo.

ura 2. 35: : Esquema a de liga o do conector se erial. Figu Est te circuito de grava o funcion na com o software PICPgm (d detectado como JDM M Programm mer) ou com m WinPic (detectado ( M84 Progra ammer). E Este ltimo o se mostra a como COM mais est vel, pois s aps a detec o do microcontro m lador, possvel gravar o microcontr rolador, e mesmo o indican ndo ERRO OR: Prog gramming failed, o arquivo o gerenciado or.hex mostrou-se m gravado corretam mente para geren ciar grav vaes no o microcontr rolador pel la porta US SB nos sist temas oper racionais Windows@ W , Linux e Mac OSX. O s software de d grava o do ge erenciador. .hex pode ser baix xado atrv s do link k, disponvel em http:/ //www.4 4shared.co om/get/1 1uP85Xru u/winpicp prCOM84. .html.

[ 51 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 2. 2 36: Tela de conf figurao do softw ware de gr ravao. Ap s a insta alao, execute o p programa. Na guia "Device, Config", escolha o microcontr rolador. Um ma vez qu ue o microc controlado or conect tado port rta COM RS S-232 de 9 pinos do PC, v para "Inter rface", sele ecione " COM84 pr rogrammer r for seria al port", e pressione "Initialize" ". Se o soft tware disse er que a in nicializao o foi um x xito "Succe ess", ento o o program ma est pronto p par ra gravar o gerenc ciador.hex no micro ocontrolado or. Para a gravao, selecione e em File e Load & Program mDevice e depois s selecione o arquivo o gerenciado or.hex. Co omo citado o anteriorm mente, mes smo que, aps a gr ravao e verificao o aparea Programm med Failed d, prov vel que o gerenci iador.hex tenha sido gravado o corretame ente.

[ 52 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 2. 37: Tela de confirmao de reconhecimento do circuito.

PERIFRICOS INTERNOS DO MICROCONTROLADOR


3.1 CONVERSOR A/D

O objetivo do conversor analgico-digital (AD) converter um sinal analgico, geralmente de 0 a 5V, em equivalentes digitais. Como pode ser visto, algumas configuraes permitem ainda que os pinos A3 e A2 sejam usados como referncia externa positiva e negativa, fazendo com que uma leitura seja feita em uma faixa de tenso 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 resoluo 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 resoluo de 10 bits e tenso de referncia padro 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 tenso de 100* 4,8876 mV = 0,48876 V. Note que a tenso de referncia padro (Vref) depende da tenso de alimentao do PIC que normalmente 5V. Se a tenso de alimentao for 4V, logo a tenso de referncia (Vref) tambm ser 4V. Para um conversor A/D com resoluo de 10 bits e tenso de referncia 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), necessrio uma tenso 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), presso (STRAIN-GAGE), tenso, corrente, humidade, etc..

[ 53 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 3. 2: Uso de perifricos no conversor A/D. Para utilizar este perifrico interno, basta: setup_adc_ports (AN0_TO_AN2); setup_adc(ADC_CLOCK_INTERNAL ); //(Seleo dos pinos analgicos 18F2550) //(selecionar o clock interno)

Veja a nomenclatura dos canais analgicos de cada modelo, dentro da biblioteca do CCS na pasta Device. Depois, no lao infinito, basta selecionar o canal para leitura, esperar um tempo para a seleo fsica e ento 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 converso A/D e guarda na varivel valor 3.1.1 AJUSTE DE RESOLUO DO SENSOR E DO CONVERSOR AD DE 8 BITS O ajuste da resoluo do conversor AD se d aproximando a tenso de fundo de escala do sensor (VFS) tenso de referencia do conversor (VREF). Para isso existem duas tcnicas de ajuste por Hardware:

Para este tpico utilizado como exemplo de ajuste da resoluo do conversor AD, o sensor de temperatura LM35 que fornece uma sada de tenso linear e proporcional com uma resoluo de 10mV a cada C. 3.1.2 AJUSTE DA TENSO DE FUNDO DE ESCALA COM AMPOP Para conversores AD de 8 bits e VREF de 5V, a resoluo mxima de 19,6mV (R= VREF / (2 -1). Dessa forma, como a Resoluo do sensor 10mV/C (RS), necessrio aplicar um
n

[ 54 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

ajuste de resoluo com um ganho na tenso de fundo de escala do sensor para que cada grau possa ser percebido pelo conversor do microcontrolador. A forma mais comum de ganho a utilizao de amplificadores operacionais no inversores. Veja mais detalhes no material de apoio no final dessa apostila. A tenso de fundo de escala (VFS) est relacionada Temperatura Mxima desejada de medio (TMAX), onde VFS = RS(10mV/C) * TMAX e o Ganho (G) de aproximao da tenso de fundo de escala (VFS) tenso de referencia (VREF) dado por G = VREF / VFS, ou seja, para uma Temperatura Mxima desejada de 100C, o ganho deve ser aproximadamente 5.

Figura 3. 3: AMP-OP no inversor. A aproximao da tenso de fundo de escala (VFS) tenso de referencia (VREF) realizada para diminuir a relevncia de rudos em determinadas faixas de temperatura. 3.1.3 AJUSTE DA TENSO DE REFERNCIA COM POTENCIMETRO Outra forma mais simples de ajuste por Hardware (aumento da resoluo do conversor AD) a aproximao da tenso de referencia (VREF) tenso de fundo de escala (VFS) atravs da diminuio da tenso de referncia (VREF) com o uso de um potencimetro (divisor de tenso). Por exemplo, um conversor AD de 8 bits com uma tenso de referncia (VREF) de 2,55V no pino A3, apresenta uma resoluo de 10mV por bit (2,55/(28-1)), ou seja, a mesma sensibilidade do sensor LM35 de 10mV/C . Percebe variao de cada C. 3.1.4 CONVERSOR AD DE 10 BITS Para conversores de 10 bits, com maior resoluo (4,89 mV), o ajuste (escalonamento) realizado geralmente por software, em linguagem C, que possui um elevado desempenho em operaes aritmticas. OBS.: O ganho de tenso de um circuito poderia ser simulado por software com os comandos: Int32 valorsensor= read_adc(); Int32 VFS = 4 * Valorsensor; A frmula utilizada pelo programa no PIC para converter o valor de tenso fornecido pelo sensor LM35 em uma temperatura : ANALGICO 5V = 5000mV -> DIGITAL 1023

[ 55 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

T(C)* 10mV/C

->

(int32)read_adc()

T (C) = 500 * (int32)read_adc()/1023 onde (int32)read_adc() o valor digital obtido a partir da temperatura (T(C)) analgica medida. Esta varivel configurada com 32 bits (int32), porque ela recebe os valores dos clculos intermedirios e pode estourar se tiver menor nmero de bits, pois uma varivel de 16 bits s suporta valores de at 65.535. A tenso de referncia do conversor 5V e como o conversor possui 10 bits de resoluo, ele pode medir 1023 variaes. 3.1.5 OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A VARIAO DE UM POTENCIMETRO --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> //Leitura de tenso em mV com variao de um potencimetro #include <usb_san_cdc.h>// Biblioteca para comunicao 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 perifrico com a usb do PC setup_adc_ports(AN0); //Habilita entrada analgica - A0 setup_adc(ADC_CLOCK_INTERNAL); while(1){ //ANALGICO DIGITAL(10 bits) set_adc_channel(0); // 5000 mV 1023 delay_ms(10); // tensao read_adc() tensao= (5000*(int32)read_adc())/1023; printf (usb_cdc_putc,"\r\nA tensao e' = %lu C\r\n",tensao); // Imprime pela serial virtual output_high(pin_b7); delay_ms(500); output_low(pin_b7); delay_ms(500); }} ---------------------------------------------------------------------------------------------------------------

[ 56 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 3. 4: Con nexo do potencimetro no converso or A/D. 3.1.6 LEI ITURA DE E TEMPER RATURA CO VS DO C ONVERSO OR AD OM O LM35 ATRAV --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> #include < <usb_san_ _cdc.h>// Biblioteca B p para comunicao se erial virtuall int16 temp peratura; main() { clock_int_4 4MHz(); usb_cdc_in nit(); // Inicializa o protocolo p C CDC usb_init(); ; // Inicializ za o protoc colo USB usb_task() ); // Une o perifrico com a US SB do PC setup_adc c_ports(NA A0); //Habilita entrad da analgic ca A0 setup_adc c(ADC_CLO OCK_INTER RNAL); while(1){ ; set_adc_channel(0); delay_ms( (10); temperatu ura=430*re ead_adc()/ /1023; //V Vref = 4, ,3V devido o qued da no dio odo, ento o (430*temp p) printf (usb b_cdc_putc c,\r\nTemperatura d do LM35 = %lu C\r\n,temperat tura); gh(pin_b7) ); // Pisca Led em o n operao normal output_hig delay_ms( (500); output_low w(pin_b7); ; delay_ms( (500); }} ---------------------------------------------------------------------------------------------------------------

[ 57 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 3. 5: Le eitura de temperatura via monitor m se erial.

3.1.7 TER RMISTOR R Um termistor um ma resistncia vari vel com a tempera atura. Na realidade e todas as s resistncia as variam com a tem mperatura, s que os s termistor res so feiitos para terem t uma a grande va ariao com m a tempe eratura. A ligao do d termisto or ao micr rocontolado or muito o simples, co omo mostr ra a figura baixo.

ura 3. 6: C Conexo do termis stor. Figu Convm le embrar que e a respost ta de um te ermistor no linear r, como mo ostra a figu ura abaixo.

Figu ura 3. 7: R Resposta do termis stor. LINEARIZ ZAO uito comum m de linea arizao do o termistor r por mo odalidade da tenso, Um forma mu onde um t termistor NTC N cone ectado em srie com um resisto or normal formando um divisor de tenso. O circuito do diviso or contm m uma font te de tens o de refe erncia (Vr ref) igual a

[ 58 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

2,5V. Isto tem o efeito de prod duzir uma t tenso na sada que seja linear r com a tem mperatura. or R25C esco olhida for iigual ao da a resistnc cia do term mistor na te emperatura a Se o valor do resisto 0 ambiente (25 C), en nto a reg gio de ten nso linear ser sim trica em to torno da te emperatura a to em figur ra abaixo). ambiente (como vist

Figura a 3. 8: Lin neariza o do term mistor.

3.2

MEMRIAS DO MICR ROCONTRO OLADOR Om microcontro olador apre esenta dive ersos tipos s de memria, entre e elas:

3.2.1 MEMRIA DE D PROGR RAMA Am memria de e programa a flash, o local ond de so grav vados o c digo hexadecimal do o programa compilado o. Essa me emria u uma espc cie de EEPROM (mem mria prog gramvel e apagvel e eletronicam mente), ma as s pode e ser gravada e apagada complletamente e no byte e a byte, o q que a torna a mais eco onmica. 3.2.2 MEMRIA DE D INSTRU UES A m memria de d instru es, que uma esp pcie de BIOS B (bina ary input and a output ut system), se localiza a dentro da CPU p para comp parao co om o cd digo hexad decimal do o programa que est sendo s proc cessado e e execuo de d uma a o corresp pondente.

[ 59 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

3.2.3 MEMRIA EEPROM INTERNA

A maioria dos modelos da famlia PIC apresenta memria EEPROM interna, com dimenses de 128 ou 256 bytes. Em algumas aplicaes, a EEPROM interna muito til para guardar parmetros de inicializao ou reter valores medidos durante uma determinada operao de sensoreamento. O PIC18F2550 contm 256 bytes (posies 0 a 255) de EEPROM interna, que podem ser escritas facilmente utilizando a instruo write_eeprom(posicao, valor); e lidas com a instruo valor2=read_eeprom (posicao);. O projeto de controlde de acesso com teclado matricial abaixo mostra o uso desta memria.
3.2.4 MEMRIA DE DADOS (RAM) A memria RAM do microcotrolador 18F2550 possui 2Kbytes disponveis para propsito geral (entre 000h a 7FFh). No final da RAM (entre F60h e FFFh) esto localizados os registros de funes especiais (SFR), que servem para configurar os perifricos internos do microcontrolador. Esses registros podem ser configurados bit a bit atravs do seu endereo com a diretiva #byte que funciona para apontar uma posio de memria (#byte OSCCON=0XFD3 -> OSCCON=0B01100110; //Configura oscilador interno para 4MHz) ou por funes proprietrias do compilador (setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); set_timer1(3036); // configura o timer 1 com clock interno e dividido por 8 para contar 62500 = 65536-3036 Tempo total = 62500 x 8us = 0,5 segundos).

[ 60 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 3. 9: Registros de funes especiais. 3.2.5 EXEMPLO DE APLICAO

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 tambm ser aterrado e indicar a tecla digitada.

[ 61 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 3. 1 0: Teclad do Matricial.

Para a reconhe ecer uma senha d digitada em um te eclado ma atricial necessrio o armazenar r o valor das teclas s digitadas s em seq ncia em m alguma memria, como por exemplo, na memria de dad dos RAM (pode-se utilizar qu uaisquer po osies do os 2Kbytes s disponveis s entre 000h 0 a 7F FFh), depo ois compar-la com uma sen nha pr-programada a contida na a memria de programa flash ( ROM) ou u na EEPRO OM interna a.

gura 3. 11: Formas s de comp parao com c a sen nha pr-p rogramad da. Fig

Not te que o pr rograma de e controle de acesso o em anexo o utiliza a E EEPROM in nterna para a possibilitar r a inser o de no ovas senh has na EE EPROM, se em a nec cessidade de gravar novamente e a memr ria de prog grama do m microcontro olador. PONTEIR ROS Ponteiros s guardam m endere os de me emria de e program ma. Exemplo p para declar rar um pon nteiro: unsigned d int16 p= =100; //ponteir ro igual a posio p 100 *p='7'; // / Contedo o enderea ado por p igual a 7 7(ASC II) ou o 0x37. ++p; //In ncrementa a posio para receb ber prxim mo dado.

Programa de contro ole de aces sso com ar rmazename mento de se enhas na E EEPROM in nterna pelo o prprio tec eclado atrav vs de uma a senha de e administr trador (mes stre):
[ 62 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

///////////////////////////////////////////////////////////////////////// ///Teclado Matricial insere novas senhas pelo teclado com a senha mestre// /////oscilador interno 4 de MHz////////////////////////////////////////// //Se faltar energia ou existir um reset, as senhas armazenadas no so //perdidas e possivel armazenar novas senhas aps a ltima senha gravada // possvel apagar senhas lendo a EEPROM e zerando as posies da senha ex.:write_eeprom( endereco, 0 ); #include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao 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 // Interrupo 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 posio 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 perifrico 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 memria de senhas zerando k if(read_eeprom(239)>0 && read_eeprom(239)<40) {k=read_eeprom(239);} // Carrega a tima posio livre da eeprom (k) antes do reset armazenada em 239 while (1) { // Reconhecimento de tecla por varredura output_low(pin_b0);output_high(pin_b1);output_high(pin_b2); if(input(pin_b3)==0) {*p='1'; flag=1; while(input(pin_b3)==0);delay_ms(200);}

[ 63 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if(input(pin_b4)==0) {*p='4'; flag=1; while(input(pin_b4)==0);delay_ms(200);} if(input(pin_b5)==0) {*p='7'; flag=1; while(input(pin_b5)==0);delay_ms(200);} if(input(pin_b6)==0) {*p='*'; flag=1; while(input(pin_b6)==0);delay_ms(200);} output_high(pin_b0);output_low(pin_b1);output_high(pin_b2); if(input(pin_b3)==0) {*p='2'; flag=1; while(input(pin_b3)==0);delay_ms(200);} if(input(pin_b4)==0) {*p='5'; flag=1; while(input(pin_b4)==0);delay_ms(200);} if(input(pin_b5)==0) {*p='8'; flag=1; while(input(pin_b5)==0);delay_ms(200);} if(input(pin_b6)==0) {*p='0'; flag=1; while(input(pin_b6)==0);delay_ms(200);} output_high(pin_b0);output_high(pin_b1);output_low(pin_b2); if(input(pin_b3)==0) {*p='3'; flag=1; while(input(pin_b3)==0);delay_ms(200);} if(input(pin_b4)==0) {*p='6'; flag=1; while(input(pin_b4)==0);delay_ms(200);} if(input(pin_b5)==0) {*p='9'; flag=1; while(input(pin_b5)==0);delay_ms(200);} if(input(pin_b6)==0) {*p='!'; flag=1; while(input(pin_b6)==0);delay_ms(200);} // Guarda tecla pressionada if (flag==1) { if(p==100){tecla0=*p;} if(p==101){tecla1=*p;} if(p==102){tecla2=*p;} if(p==103){tecla3=*p;flag2=1;} //A flag2 avisa que senha foi digitada completamente mult=4; //cada tecla tem 2 seg para ser pressionada a partir da primeira printf (usb_cdc_putc,"\r\nValor das teclas digitadas: %c %c %c %c\r\n",tecla0,tecla1,tecla2,tecla3); printf (usb_cdc_putc,"Endereco para onde o ponteiro p aponta: %lu\r\n",p); ++p; // Incrementa posio para prxima 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 prxima 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 usurio tambm foi digitada (flag2) write_eeprom( 4*k, tecla0 ); //Grave a nova senha write_eeprom( (4*k)+1, tecla1 ); write_eeprom( (4*k)+2, tecla2 ); write_eeprom( (4*k)+3, tecla3 );

[ 64 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

++k; // incremente as posies 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 posio livre antes do reset na posio 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 operao output_bit (pin_b7,led); delay_ms(100); }} --------------------------------------------------------------------------------------------------------------valor = read_adc(); // efetua a leitura da converso A/D e guarda na varivel valor

3.3

MODULAO POR LARGURA DE PULSO PELO CCP

O Perifrico interno independente CCP (Capture/Compare/PWM) responsvel por comparao de sinais, bem como, gerar um sinal de sida em PWM (CCP1CON=0x0C), ou seja, modulao por largura de pulso (pulse width modulation). Dessa forma, possvel

[ 65 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

realizar o PWM pelo perifrico interno CC CP do micr rocontrolad dor ou por r software atravs de e essador do microcont trolador, co omo mostr rado no ite em 3.3.1. emulao pelo proce A ger rao do PWM P pro oduzida, ge eralmente, , pelo chav veamento de uma te enso com m amplitude constante e (+5V por r exemplo) ), tendo em m vista qu ue quanto menor a la argura dos s pulsos em mitidos na base de uma chav ve eletrn nica, como o um tra ansistor, menor m a saturao do transis stor e, cons sequentem mente, men nor a tens o lado da carga, res sultante do o chaveamento. O per rodo T0 o intervalo de tempo que se reg gistra o pe erodo repe etitivo do pulso p e o 0 o ciclo d de trabalh ho (duty-ci icle), ou se eja, o tem mpo em que q o puls so permanece com a amplitude em nvel lgico alto.

Figura F 7. 1 1: Ciclo de e trabalho o. dulo CCP, o registro PR2 carr regado par ra servir de refernc cia de cont tagem para a No md o timer 2 d de 8 bits com c presca aler (multip plicador de e tempo de e geralmen nte 4 ou 16 6). Quando o o timer 2 quando chega ao va alor de PR R2, seta o flip-flop f do o CCP para gerar o perodo (T0) e consequentemente e a frequn ncia deseja ada do PW WM (freqPW WM). O valor digital (Vd dig) de 10 bits do cic lo de traba alho, obtido do valor percentua al (0 a 100) ) inserido pe elo usurio o. O Vdig O Vdig carregado em CCPR R1L, que gu uarda os 8 bits mais s significativ vos do valo or digital, e nos bits s 5 e 4 do o CCP1CON so car rregados os o dois bits s menos sig gnificativos do valor digital, d es serve de re eferncia para p o time er2 resetar r o ciclo de e trabalho.

etalhes no vdeo: v http p://www.yo outube.com m/watch?v v=lB21b3zA A4Ac Mais de

[ 66 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

CONTR ROLE PW WM POR SO OFTWARE E DE VELO OCIDADE DE UM M MOTOR CC C A fina alidade des ste controle de veloc cidade com m a modulao de te enso por largura de e pulsos (PW WM) realizar uma converso c d digital-ana algica que e acontece devido impedncia a inerente do circuito em e alta fre equncia.

ura 7. 2: PWM. P Figu

O pro ograma abaixo mostr ra o contro ole de velocidade de e um motr ro CC por PWM com m perodo co onstante de d 20ms, onde cad da increme ento ou de ecremento o da onda quadrada a correspond de a 1ms, , ou seja, ou seja, um acrsc cimo ou decrscimo d o de 5% no n ciclo de e trabalho. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> #define m motor pin_b b7 #define le ed pin_b0 unsigned i int ton,toff f,incton,inc ctoff,guard aton,guard datoff; int1 flag1, flag2; main() { clock_int_4 4MHz(); port_b_pu ullups(true) ); incton=2; inctoff=18 8; //Perod do de 20m s - Passo mnimo de e tempo = 1ms (5% % (1/20) do o duty cicle ) guardaton n=read_eep prom(10);g guardatoff f=read_eep prom(11); ton>0 && guardaton n<=20) {in ncton=guar rdaton; inc ctoff=guard rdatoff;} if (guardat while (1) { ton=incton n; toff=inc ctoff; if (!input(p pin_b1)) {f flag1=1;}

[ 67 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

if (incto on<20 && flag g1==1 && inp put(pin_b1) ) ) { {flag1=0;+ ++incton;-inctoff;out tput_high(l led);//se no chegou u no mxim mo (incton< <50), write_eepr rom(10,inc cton);write e_eeprom(1 11,inctoff); //se e o bot o foi pressionado p o (flag1==1 1) e se o bo oto j foi solto (inpu ut(pin_b1)) incremen nte }// a onda qua adrada e gu uarde os va valores na eeprom e if (!input(p pin_b2)) {f flag2=1;} if (incto off<20 && flag g2==1 && inp put(pin_b2) ) ) { {flag2=0;+ ++inctoff;-incton;out tput_low(le ed); write_eepr rom(10,inc cton);write e_eeprom(1 11,inctoff); } ou utput_high h(motor); w while(ton) {--ton;delay { y_ms(1); } //Parte alta da onda quadrada a ou utput_low( (motor); w while(toff) {--toff;dela { ay_ms(1); } //Parte baixa b da on nda quadra ada }} } ---------------------------------------------------------------------------------------------------------------

A figura a abaixo mos stra o circu uito monta ado para com co este exemplo. e V Veja o func cionamento to desse circu cuito no vd deo http:/ //www.yo outube.co om/watch h?v=6IIH H02dbboE E.

Figura 7. 3 3: PWM co om Mosfe et.

INTER RRUP ES E TEMPOR RIZADO ORES


INTERRU UPES As interrup es so ca ausadas at travs de eventos assncrono a os (podem ocorrer a momento) causando um desvio o no proce essamento. Este desv vio tem com mo destino o qualquer m um endere eo para tr ratamento da interru upo. Uma a boa analogia para melhor en ntendermos s

[ 68 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

o conceito de interrupo 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 no precisamos verificar a todo instante, se existe ou no algum na linha, pois somente quando o ramal chamado, o telefone toca avisando que existe algum querendo falar com voc. Aps do atendimento das interrupes, o microcontrolador retorna exatamente ao ponto onde parou no programa antes de atend-la. As interrupes mais comuns na famlia PIC18F so: - pela interrupo externa 0 (Pino B0) -> enable_interrupts(int_ext); - pela interrupo externa 1 (Pino B1) -> enable_interrupts(int_ext1); - pela interrupo 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 comunicao serial -> enable_interrupts(int_rda); //serial As interrupes do PIC so vetorizadas, ou seja, tm endereos de incio da interrupo fixos para a rotina de tratamento. No PIC18F2550 o endereo de tratamento 0x08. No programa em C basta escrever a funo de tratamento da interrupo aps #, e o compilador far o direcionamento do cdico automaticamente para essa posio. INTERRUPES EXTERNAS O modelo PIC18F2550 possui trs interrupes externas, habilitadas nos pinos B0 (ext) , B1 (ext1) e B2 (ext2), que atuam (modo default) quando os pinos so aterrados. Quandos atuados o processamento desviado para #int_ext, #int_ext1 ou #int_ext2, respectivamente, para que a interrupo possa ser tratada por uma funo especfica, que no caso do exemplo void bot_ext(). Dentro da funo principal deve-se habilitar o disjuntor geral das interrupes, enable_interrupts(global); e depois a interrupo especfica, por exemplo enable_interrupts(int_ext); como mostra o exemplo com aplicao de interrupo externa e tambm interruo do temporizador 1. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> BYTE comando; short int led; int x; #int_timer1 void trata_t1 () { led = !led; // inverte o led - pisca a cada 0,5 seg. output_bit (pin_b7,led); set_timer1(3036 + get_timer1()); }

[ 69 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#int_ext void bot_ext() { for(x=0;x<5;x++) // pisca 5 vezes aps o pino ser aterrado (boto 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 interrupes esto disponveis em view > valid interrupts. Quando for utilizada alguma interrupo externa, necessrio inserir um resistor de pull-up externo de 1K a 10K para elevar o nvel lgico do pino quando o mesmo for liberado evitando outra interrupo, pois o processador entende tristate e nveis intermedirios de tenso como nvel lgico baixo. INTERRUPO DOS TEMPORIZADORES O microcontrolador PIC 18F2550 tem quatro temporizadores, que so os timers 0, 1, 2 e 3. O timer 0 tem 16 bits, ou seja, pode contar at 65535s (216) e um prescaler (divisor de frequncia ou multiplicador de tempo) de at 256 (RTCC_DIV_256). Os timers 1 e 3 so idnticos 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 interrupo possa ser tratada por uma funo especfica, que no caso do exemplo void trata_t0 () e void trata_t1 (). O programa a seguir pisca um led em b5 na funo principal main(), outro pela interrupo do timer 1 em b6 e um terceiro led em b7 pela interrupo do timer0. -------------------------------------------------------------------------------------------------------------#include <SanUSB.h> short int led0, led1; int vart1=2, vart3=4; // multiplicador de tempo

[ 70 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#int_timer0 void trata_t0 () //Funo 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 interrupo } #int_timer1 //O timer 1 e o timer 3 so idnticos, s basta modificar 1 por 3 na configurao 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 mximo 8 (T1_DIV_BY_8) set_timer1(3036 + get_timer1()); // get_timer() carrega o timer compensando o tempo gasto no tratamento da interrupo } } 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){ output_high(pin_b5); delay_ms(500); output_low(pin_b5); delay_ms(500); //Funo principal pisca led em a5

[ 71 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

} --------------------------------------------------------------------------------------------------------------MULTIPLEXAO POR INTERRUPO DE TEMPORIZADORES O programa abaixo mostra uma multiplexao de displays de 7 segmentos por interrupo dos temporizadores 0 e 1. O timer 0 incrmena a varivel a ser multiplexada pelos displays e o timer 1 multiplexa a porta B dgitos de dezenas e dgitos de unidades at 99. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #byte port_b = 0xf81//Atribuio do nome portb para o registro da porta B localizado na posio 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 interrupo } //********************************************* #int_timer1 //O timer 1 e o timer 3 so idnticos, s basta modificar 1 por 3 na configurao //void trata_t1 () { dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10 unidade=i%10; //unidade recebe o resto da diviso 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 nmero das dezenas apontado pela varivel dezena flag=1; break;}

[ 72 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

case 1: { output_high(pin_a1); //selecionei a unidade output_low(pin_a0); port_b = setseg[unidade]; //A porta B recebe o desenho do nmero das unidades apontado pela varivel unidade flag=0; break;} } set_timer1(55536 + get_timer1()); } main(){ clock_int_4MHz(); set_tris_b(0b00000000);// Define os pinos da porta B como sada enable_interrupts (global); // Possibilita todas interrupcoes enable_interrupts (int_timer0); // Habilita interrupcao do timer 0 enable_interrupts (int_timer1); // Habilita interrupcao do timer 1 setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_8);// configura o prescaler do timer 0 em 64, prescaler at 256 set_timer0(3036); // Conta 62.500us x 8 para estourar= 0,5 seg setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1); set_timer1(55536); estourar while (1){ output_high(pin_a5); delay_ms(300); output_low(pin_a5); delay_ms(300); // Conta 10000 us (10ms) para

//Funo principal

} --------------------------------------------------------------------------------------------------------------------

EMULAO DE PORTAS LGICAS


Os operadores lgicos descritos abaixo adotam o padro ANSI C, ou seja, podem ser utilizados por qualquer compilador em linguagem C direcionado microcontroladores.

[ 73 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

5.1 I INSTRU ES LG GICAS PARA P TESTES CO ONDICION NAIS DE E NME EROS Nes sse caso, os opera adores s o utilizado os para realizar o operaes de testes s condionais s geralmen nte entre nmeros int teiros.
OPER RADOR & && ll ! CO OMANDO Opera o E (AND) Opera o OU (OR) ) Opera o NO (NOT T)

Exemplos: dodec==05 5 && (min nutodec== =00|| minu utodec==30)) {flagw write=1;}//Analisando o if (segund um relgio o para seta ar a flagwrite if (x>0 & && x<20) (y=x;) // Estabelece endo faixa de valores s para y. 5.2 I INSTRU ES LG ICAS BOO OLANAS BIT B A BIT T

Considere as portas lgicas abaixo:

Figura 5. 1: Portas Lgicas s. im mportante salientar que q emula o a rep produo via v softwar re das fun es de um m determinado sistema a real. Atra avs do ci rcuito SanUSB, possvel emu ular as por rtas lgicas s fsicas e a as diversa as combina aes das mesmas com apen nas uma f funo bo ooleana no o programa. .

[ 74 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

EXPR RESSO B BOOLEANA A EXPR RESSO B BOOLEANA A LITERA AL EM C Operao E (AND) S= A . B S= A & B Operao o OU (OR) ) S= A + B S= A l B Operao o NO (NO O) S= !A A S= OU exclusivo (XOR) ) S= A B S= A ^ B Oc circuito aba aixo mostra a as possv veis entrad das boolea anas nos p inos B1, B2 B e B3 e a sada do c circuito lgi ico boolean no expre essa de forma real atravs do L LED no pino o B7.

OPER RAO

Figura a 5. 2: Us so de resis stores de e pull dow wn para ap plicar fun o lgica a 0/1. im mportante e salientar que atra avs das operaes o E, OU, N O e OUbsicas E Exclusivo possvel construir outras ope eraes co omo NAND, NOR e C Coincidncia, que o inverso do o OU-Exclu usivo. Isto realizad do transfor rmando a expresso o booleana a literal em m uma expre esso boole eana em C e apresen ntando o re esultado em um LED D de sada.

Figura 5. . 3: Outra as funes s lgicas a partir de d NOT, O OR e AND. Exemplo 1: Elabor re um prog grama para a emular uma u porta lgica OU-Exclusivo atravs do o microcontr rolador.

[ 75 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

--------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emu ulao de c circuitos lg gicos boole eanos (OU -Exclusivo) ) short int A A, B, saida, , ledpisca; main(){ clock_int_4 4MHz(); while (TRU UE) { A=input(p pin_b1); //e entrada com pull-dow wn externo o (resistor conectado ao Terra) B=input(p pin_b2); //e entrada com pull-dow wn externo o (resistor conectado ao Terra) A^B; //sa aida igual ao resu ultado do o OU-Exclu usivo obt tida pelas s entradas s saida = A dos pinos sAeB output_bit t(pin_b7,sa aida); //O pino_b7 mostra o resultado o do circu uito lgico o booleano o alocado em m saida ledpisca=! !ledpisca; // / ledpisca igual ao o inverso de ledpisca output_bit t(pin_b0,le edpisca); // / b0 recebe e o valor de ledpisca delay_ms( (500); } } -------------------------------------------------------------------------------------------------------------------Exemplo 2: Elabore um programa e a tabela ve erdade para emular u uma o circ cuito lgico o abaixo. booleano a

Fig gura 5. 4: Exemplo de circuito combin nacional ( (1). O program ma para em mular de fo orma real e esse circuito mostra ado abaixo o: --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> // Emulao de ciircuitos lg gicos booleanos short int A A, B, C, said da, ledpisc ca; main(){ clock_int_4 4MHz(); while (TRU UE) { A=input(p pin_b1); //e entrada com pull-dow wn externo o (resistor conectado ao Terra) B=input(p pin_b2); //e entrada com pull-dow wn externo o (resistor conectado ao Terra) C=input(p pin_b3); //e entrada com pull-dow wn externo o (resistor conectado o ao Terra)

[ 76 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

saida = !(!A & B) & !C; //sa aida do ci ircuito bo ooleano obtida pela as entrad das de b1, , b2 e b3 output_bit t(pin_b7,sa aida); //O pino_b7 p m mostra o res sultado do circuito l gico boole eano ledpisca=! !ledpisca; // / ledpisca igual ao o inverso de ledpisca output_bit t(pin_b0,le edpisca); // / b0 recebe e o valor de ledpisca delay_ms( (500); } } -------------------------------------------------------------------------------------------------------------------Note que para emular qualque er outro cir rcuito booleano com trs entra adas, basta a modificar funo de converso o em negrit to (saida = !(!A & B) ) & !C). A t tabela verd dade desse e apenas a f circuito bo ooleano mostarada m abaixo: A 0 0 0 0 1 1 1 1 RADAS ENTR B 0 0 1 1 0 0 1 1 C 0 1 0 1 0 1 0 1 SA AIDA S 1 0 0 0 1 0 1 0

Exemplo 3: Elabore um programa e a tabela ve erdade para emular u uma o circ cuito lgico o abaixo. booleano a

S= (A & B) ) | !C | !(C & D)


Fig gura 5. 5: Exemplo de circuito combin nacional ( (2). --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> // Emulao de ciircuitos lg gicos booleanos short int A A, B, C, D, saida, ledp pisca; main(){ clock_int_4 4MHz(); while (TRU UE)

[ 77 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

{ A=input(pin_b1); //entrada com pull-down externo (resistor conectado ao Terra) B=input(pin_b2); //entrada com pull-down externo (resistor conectado ao Terra) C=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra) D=input(pin_b3); //entrada com pull-down externo (resistor conectado ao Terra) saida= (A & B) | !C | !(C & D); output_bit(pin_b7,saida); //O pino_b7 mostra o resultado do circuito lgico 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 lgico mostrada abaixo: ENTRADAS A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 B 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 C 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 D 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 SAIDA S 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1

A tabela verdade pode ser facilmente comprovada de forma real montando o circuito proposto. 5.3 EMULAO SEGMENTOS DE DECODIFICADOR PARA DISPLAY DE 7

Antes de comentar sobre os decodificadores, vamos definir o que um display de sete segmentos. O display de sete segmentos, formado por sete leds. Quando necessitase acender o nmero 0, liga-se os leds correspondentes ao digito 0, por exemplo, os segmentos a, b, c, d, e, f. Na figura abaixo, mostrado um display de sete-segmentos e a

[ 78 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

respectivo os pinos. No N lado direito, d os dois tipos s de displ lays, anod do comum m e catodo o No esque a que no anodo com mum o led liga com Gnd e no catodo comum o led d comum. N liga com V Vcc.

Figur ra 5. 6: Di isplay de 7 segmen ntos e con nexo int terna. Com mo os seg gmentos so s leds, e ento necessrio n limitar a corrente, para isso o devemos u usar um re esistor em cada segm mento (catodo comu um), ou ap penas um no comum m (anodo co omum), sen no sero queimado os. Normalmente se utilizam re esistores entre 220 e 560 ohms para uma a fonte de 5Volts. U ma dica, se s for usar r um displ ay, teste antes a cada a segmentos s, para te er certeza que no est usa ando um display d co om algum segmento o queimado. . Os decodificad dores, inve erso dos co odificadore es, tem a funo f de converter um cdigo o desconhe ecido de linguagem m de mqu uina, como o o binrio de entr rada mostr rado neste e exemplo, em um c digo compreensvel, , como o cdigo de ecimal ou u um desenho em um m display de 7 segmen ntos. Os de ecodificado ores fixos podem p ser construdo os com por rtas lgicas s reais ou em mulados, ou o seja, reproduzidos s via softw ware, como o caso p proposto. Os decodificadores de displays d de e 7 segme entos, com mo o 9317 (anodo co omum) e o 9307 (cato odo comum m), recebe em 4 bits de entrada a para a decodifica d o do nm mero a ser desenhad do pelos segmentos s dos displa ays.

[ 79 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

CI - 9317 Entradas /L T L H H H H H H H H H H H /RB I X L H X X X X X X X X X A0 X L L H L H L H L H L H A1 X L L L H H L L H H L L A2 X L L L L L H H H H L L A3 X L L L L L L L L L H H a L H L H L L H L L L L L b L H L L L L L H H L L L c L H L L H L L L L L L L Sadas d L H L H L L H L L H L L e L H L H L H H H L H L H f L H L H H H L L L H L L g L H H H L L L L L H L L Desen ho pont o H teste L apaga H 0 H 1 H 2 H 3 H 4 H 5 H 6 H 7 H 8 H 9

Para a emulao, ou seja, reproduo 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) NMERO B6 B5 B4 B3 B2 B1 B0 Porta B DISPLAY Hexadeci g f e d c b a mal 0 1 0 0 0 0 0 0 0x40 1 1 1 1 1 0 0 1 0x79 2 0 1 0 0 1 0 0 0x24 3 0 1 1 0 0 0 0 0x30 4 0 0 1 1 0 0 1 0x19 5 0 0 1 0 0 1 0 0x12 6 0 0 0 0 0 1 0 0x02 7 1 1 1 1 0 0 0 0x78 8 0 0 0 0 0 0 0 0x00 9 0 0 1 0 0 0 0 0x10 Abaixo mostrado um programa exemplo para contar de 0 a 9 com um display de sete segmentos anodo comum. Dependendo dos display anodo ou catodo comum, como tambm dos pinos do microcontrolador ligados ao displays, possvel utilizar o mesmo programa abaixo, alterando apenas os valores dos elementos da matriz setseg[10]. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #byte port_b = 0xf81//Atribuio do nome portb para o registro da porta B localizado na posio 0xf81 da memria de dados

[ 80 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

int setseg[10] = {0x x40,0x79,0 0x24,0x30, ,0x19,0x12 2,0x02,0x7 78,0x00,0x 10}; //Vet tor com 10 0 elementos s que desen nham de 0 a 9 int i; //nd dice i (pont teiro) void main () { clock_int t_4MHz(); set_tris_b(0b00000 0000);// De efine os pin nos da por rta B como o sada while(1) { for (i=0 0;i<10;i++ +) { port_b b = setseg[i]; delay_ _ms(500); } }

} -------------------------------------------------------------------------------------------------------------------Exemplo: Construa a um deco odificador e emulado atarvs a de diagrama as de Karn naugh para a escrever, letra por letra, l a ca ada segund do, a palavra StoP. importa ante salientar que os s pinos do m microcontrolador e os o pinos do o display em e anodo comum de evem ser conectados c s com um r resistor de e 220 a 1K 1 para no queim mar os seg gmentos d do display. O circuito o abaixo mo ostra a ligao do display de 7 s segmentos s.

Figura a 5. 7: Co onexo do o display 7 seg na porta p B d o PIC.

[ 81 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Os segmentos ascendem com zero no pino do microcontrolador (anodo comum). Note que como so somente quatro letras s necessrio duas entradas (Xe Y) para a decodificao. Entradas Pin_b0 Pin_b1 Pin_b2 Pin_b3 Pin_b4 Pin_b5 Pin_b6 X Y a b c d e f g 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 1 1 0 0 1 1 0 0 0

S t o P

Aps a definio de cada segmento do display para representar os caracteres da palavra, feita a simplicao de cada segmento atravs dos diagramas de Karnaugh abaixo para a construo da funo de emulao do decodificador fixo.

a /X X e /X X

/Y 0 1 /Y 1 0

Y 1 0 Y 0 0

b /X X f /X X

/Y 1 1 /Y 0 1

Y 1 0 Y 0 0

c /X X g /X X

/Y 0 0 /Y 0 0

Y 1 1 Y 0 0

d /X X

/Y 0 0

Y 0 1

O programa abaixo mostra as funes de emulao do decodificador fixo para a palavra StoP obtidas dos diagramas de Karnaugh. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emulao de decodificador para display de 7 segmentos - palavra StoP short int X, Y; //Entradas short int a, b, c, d, e, f, g; //sadas void decodificador(short int X, short int Y) //Funo auxiliar do decodificador fixo para StoP { a=X ^ Y; output_bit(pin_b0,a); //Anodo comum b=!X | !Y; output_bit(pin_b1,b); c=Y; output_bit(pin_b2,c); d=X & Y; output_bit(pin_b3,d); e=!X & !Y; output_bit(pin_b4,e); f=X & !Y; output_bit(pin_b5,f); g=0 ; output_bit(pin_b6,g); } main(){

[ 82 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

clock_int_4MHz(); while (1) { decodificador(0,0); // Insere as entradas X=0 e Y=0 no decodiicador fixo Sada letra S delay_ms(1000); decodificador(0,1); // Sada letra t delay_ms(1000); decodificador(1,0); // Sada letra o delay_ms(1000); decodificador(1,1); // Sada 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.

U S b 2

Entradas Pin_b0 Pin_b1 Pin_b2 Pin_b3 Pin_b4 Pin_b5 Pin_b6 X Y a b c d e f g 0 0 1 0 0 0 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 1 0

Aps a definio de cada segmento do display para representar os caracteres da palavra, feita a simplicao de cada segmento atravs dos diagramas de Karnaugh abaixo para a construo da funo de emulao do decodificador fixo. a /X X e /X X /Y 1 1 /Y 0 0 Y 0 0 Y 1 0 b /X X f /X X /Y 0 1 /Y 0 0 Y 1 0 Y 0 1 c /X X g /X X /Y 0 0 /Y 1 0 Y 0 1 Y 0 0 d /X X /Y 0 0 Y 0 0

[ 83 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

O programa abaixo mostra as funes de emulao do decodificador fixo para a palavra USb2 obtidas dos diagramas de Karnaugh. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> // Emulao de decodificador para display de 7 segmentos - palavra Usb2 short int X, Y; //Entradas short int a, b, c, d, e, f, g; //sadas void decodificador(short int X, short int Y) //Funo 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 Sada letra S delay_ms(1000); decodificador(0,1); // Sada letra t delay_ms(1000); decodificador(1,0); // Sada letra o delay_ms(1000); decodificador(1,1); // Sada letra P delay_ms(1000); }} --------------------------------------------------------------------------------------------------------------5.4 MULTIPLEXAO COM DISPLAYS DE 7 SEGMENTOS

Como a economia de consumo e de componentes so sempre fatores importantes a serem considerados em projetos de sistemas digitais, uma tcnica bastante utilizada a multiplexao de displays. Esta tcnica 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 sadas do decodificador, possam controlar uma srie de displays em paralelo. Estes so ciclicamente acesos e apagados numa frequncia acima de 20Hz de tal forma que, para o olho humano, todos os displays estejam acesos permanentemente. Para

[ 84 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

isso, so colocados transistores de corte que atuam em sequncia 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//Atribuio do nome portb para o registro da porta B localizado na posio //0xf81 da memria 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 sada while(1) { for (i=0;i<99;i++) { for(z=0;z<20;z++){ dezena=i/10; //dezena recebe o nmero inteiro da diviso por 10 unidade=i%10; //unidade recebe o resto da diviso 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 nmero das dezenas apontado pela //varivel 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 nmero das unidades apontado //pela varivel unidade delay_ms(10); }} } }

[ 85 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figu ura 5. 811 1: Multiple exao de e display 7 segmen ntos. ---------------------------------------------------------------------------------------------------------------

COMUNICA O SER RIAL EIA A/RS-2 232


A comu unicao serial s teve incio com m a inveno do tel grafo. Dep pois teve um u grande e desenvolvi imento com a inveno do Te eletype (te eletipo) pelo Francs s Jean Mau urice mile e Baudot, em m 1871, da a o nome Baud Rate te. Baudot, alm de criar c toda a mecnica a e eltrica a do Telety ype, criou tambm uma tabe ela de cdigos (Cdigo de B Baudot) com letras, nmeros, e smbolo os para a transfern ncia serial assncron na digital d de informaes. Da a adro de comunica c o RS-232, , que significa Padro o Recomen endado vers so 232. surgiu o Pa Na tra ansmisso dos carac cteres atra avs da linha teleg grfica, o sinal de Marca era a representa ado pela presena p de e corrente eltrica, e o Espao o pela aus ncia desta a corrente. Para que o Teletype e conseguis sse disting uir o incio o e o final de um car ractere, o mesmo m era a precedido com um sinal s Espa o (start b bit) e finalizado com um sinal de Marca (stop bit). que o estado da linh ha ociosa ( (sem trans smisso de e dados) e era o sinal de Marca a Entenda q (presena de corren nte eltrica a). Foi bas seado ness se sistema que o pa adro de tr ransmisso o RS-232 ev voluiu e se e tornou um m padro muito utili izado nos computado ores e equ uipamentos s digitais. Algu umas in nterfaces EIA/RS-2 232 nos s compu utadores atuais fornecem m aproximad damente -1 10v e +10v v, mas sup portam mn nimas de -2 25v e mxiimas de +2 25v. A Comuni icao serial feita a pela tran nsmisso de bits em m seqnc cia. um m modo de e comunica o muito recomenda r ado para tr ransmisso o de dados s a longa d distncia. Nesse N caso, a comunicao ser rial aprese enta um menor cu usto pelo nmero reduzido de fios e conseqen ntemente menor m velo ocidade em m relao comunica ao parale ela.
[ 86 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Para a a transm misso de dados d por d distncias maiores e com pouc ca interfer ncia podese utilizar r uma inte erface com m outros p c o EI IA/RS-232 e o EIA/ /RS-485. A padres como comunica o serial pode p ser sncrona s ou u assncrona. Na primeira, al m dos bits s de dados s so envia ados tamb bm bits de sincro onismo, ou u seja, o receptor fica em constante e sincronism mo com o Transmisso T or. Na com municao assncrona a, que o modo ma ais utilizado o de comun nicao entre e siste emas de controle e automa ao por no necessitar de e sincronism mo, existe um bit que e indica o incio da transmiss o, chamad do de star rt bit (nve el lgico baix ixo) e um bit b que ind dica o finall da transm misso cha amado de stop bit (nvel (n lgico o alto). Ness sa transmi isso, o Re eceptor em m sincronis smo com o Transmis ssor apena as no incio o da transm misso de dados. d Dev ve-se consiiderar que e o transmi issor e o r receptor de evem estar na mesma a velocidad de de trans smisso. Qua ando o canal serial est em r repouso, o sinal corr responden te no canal tem um m nvel lgico o 1. Um pacote p de dados sem mpre come a com um m nvel lgiico 0 (start bit) para a sinalizar a ao recept tor que um u transm misso foi i iniciada. O start t bit inic cializa um m temporizad dor interno o no recep ptor avisan ndo que a transmiss o. Seguid do do start t bit, 8 bits s de dados d de mensag gem so en nviados co om a velocidade de tr ransmisso o pr-programada no o emissor e no recept tor. O paco ote conc cludo com m os bits de paridade e e de par rada (stop p bit). O b bit de pari idade us sado como o nono bit t com o propsito d de detec o de erro. Nessa con nveno, quando o nmero n tot tal de dgit tos 1 , o valor do b bit de parid dade 1 e quando for mpar 0. 0

do em com municao o serial. Figura 6. 1: Dad A interrup o do canal seria al utiliz zada quan ndo se e espera rec eceber um m e s se executa outro pro ograma. Qu uando o da ado chega, dado em tempo aleatrio enquanto o start bit (nvel lgico baix xo) aciona a a interrupo, pre eviamente e habilitada a, onde a rial exec cutada. Caso o canal serial se eja utilizado somente e recepo da comunicao ser para trans smisso de dados, n o necess srio habili itar a interrupo ser rial.

[ 87 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

6.1

C CDIGO ASCII A

Um dos fo ormatos mais utilizad dos em com municao serial, com mo no pad dro EIA/R RS-232, o ASCII (Am merican Sta andard Cod de for Info rmation In nterchange e). Este for rmato utiliz za sete bits s de cada by yte (valor mximo m 0x x7F) e o oi tavo bit de e paridade que pode ou no ser utilizado. .

Se o nme ero de 1s for par, o bit de pa aridade X7 zero e, se s for mpa ar, X7 um m. A Tabela a de Caracte eres ASCII mostrad da abaixo:

Figura 6. 2 2: Caracte eres ASCI II. 6.2 I INTERFAC CE USART T DO MIC CROCONTROLADOR R

A in nterface se erial USART T (transmiissor-recep ptor univer rsal sncron no e assncrono) dos s microcontr roladores pode ser sncrona o ou assncro ona, sendo o esta ltiima a mais utilizada a para comu unicao com o mun ndo extern o utilizand do o padro EIA/RS-2 232, onde cada byte e serial pr recedido por p um sta art-bit de n nvel lgico o baixo e encerrado o por um stop-bit s de e nvel lgic co alto. Os s conector res utilizad dos so o DB9 e o DB25, co omo mostr ra a figura a abaixo:

[ 88 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Fig gura 6. 3 : Conecto ores USAR RT. Em suma, os o pinos utilizados na comu unicao serial s ent tre compu utadores e microcontr roladores so s o TXD, , o RXD e o Terra (GND). On nvel lgico alto no pa adro RS23 32 est ent tre 3 e 25V eon nvel lgico baixo est entre +3 e +25V. Para a co omunicao o entre um m PC e um m PIC so utilizados chips que e convertem m os nveis de tenso TTL/RS23 32.

Figura 6. 4: Sinal elt trico RS-2 232. Par converter os padre es TTL/RS2 232, o chip p mais utiliz zado o M MAX232, o qual utiliza a quatro inv versores pa ara convert ter entre 10V (RS23 32) em +5V V (TTL), e entre +10 0V (RS232) ) em 0V (TT TL). Compu utadores apresentam m cerca de 10V e +1 10V, mas s suportam mnimas m de e -25v e m mximas de +25v. Assim A Com mo o MAX X232 existem outro os convers sores, tipo o ICL3232, e etc. O esqu uema de lig gao do M MAX232 mostrado a seguir:

[ 89 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 6. 5: Circuito de conexo MAX 232.

6.3

COMUNICAO SERIAL EIA/RS-485

No padro EIA/RS-232, os sinais so representados por nveis de tenso referentes ao Gnd. H um fio para transmisso, outro para recepo e o fio terra para referncia dos nveis de tenso. Este tipo de interface til em comunicaes ponto-a-ponto e baixas velocidades de transmisso. Visto a necessidade de um terra comum entre os dispositivos, h limitaes do comprimento do cabo a apenas algumas dezenas de metros. Os principais problemas so a interferncia e a resistncia do cabo. Mais detalhes, bem como um projeto sobre diagnstico microcontrolado de transceptor no padro EIA/RS-485 podem ser conferidos no livro disponvel no link: https://www.agbook.com.br/book/140210-Diagnostico_microcontrolado_de_transceptor_no_padrao_EIARS485 . 6.4 APLICAO DE COMUNICAO SERIAL VIA BLUETOOTH OU ZIGBEE Para a comunicao entre os modem bluetooth ou Zigbee, com um aplicativo serial instalado no PC ou em algum dispositivo mvel 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 frequncia. Mais detalhes podem ser vistos no vdeo com link descrito abaixo: http://www.youtube.com/watch?v=aTe7G__9_us .

ACIONAMENTO DE MOTORES MICROCONTROLADOS


Os motores mais utilizados com sistemas microcontrolados so os motores CC , motores de passo e servo-motores.

[ 90 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

ACIONAM MENTO DE D MOTOR RES CC DE E BAIXA TENSO T Os motorees CC so abundante es no me ercado em m funo d da ampla gama de e entement te, existe em em vrias dimenses, d utilizao, conseq , tenses, pesos, caracterst rar em su ticas e so fceis de d encontr ucatas com mo video-c cassete, brinquedos b , impressora as, etc. e geralmente g e vm asso ociados a uma u caixa de engren nagem par ra aumento o do torque e reduo o de velocid dade.

Figura 7 7. 4: Moto ores CC. MOTORES S ELTRIC COS UTIL LIZADOS EM AUTO OMVEIS Os motores utilizados em autom veis so to odos com tenso nom minal a 12 2 volts, so o robustos e normalm mente proj jetados pa ara condi es extremas, tais como poe eira, calor, variaes de tenso e corrente e, entre ou utros. Algu umas ope es so idea ais para ap plicao no o serem com mpactos, fortes, alta a rotao e leves, al lm de se erem muito o fceis de e rob por s conseguir em oficina as e empresas do ra amo. Os motores m ma ais usados s em proje etos so de e rica das portas, p bom mba do li mpador de d para-brisa e de gasolina, bomba de e trava-eltr motor do combustv vel, motor do vidro-eltrico, m motor da ventonha, v o ventilado or interno, limpador d de para-bri isa dianteir ro e traseir ro, bomba hidrulica do freio A ABS.

[ 91 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 7. 5: Motor r CC com caixa de reduo. Alm m do acio onamento eltrico, o es CC de baixa pot tncia utilizados em m os motore automao o e robtica, apre esentam g geralmente e uma ca aixa de re eduo, que q um m equipamen nto compo osto por en ngrenagens s, com o in ntuito de reduzir r av velocidade de rotao o do eixo (o ou angular r) e aumen ntar o torq que do mo otor. O tor rque varia em fun o da fora a aplicada ( (F) e do raio r de gi iro (nas e engrenagen ns a metade do dimetro primitivo), segundo a equao T = F.r. Sen ndo: F = fora (em m Newtons) ), r = raio de giro (em m metros) e T = torq que (em N.m).

Figura 7. 6: R Relao de e transmisso. m imprime uma a fora co onstante, a varia o do tor rque entre e J que o motor ens ocorre devido ao o raio de giro. Na prtica p em um sistem ma de eng grenagens, engrenage comprovad da pelas eq quaes abaixo, qua anto maior o dimetro o da engre enagem movida (D2), maior o to orque (T2) proporcio onal e men nor a velo ocidade de rotao ( (n2). Considerando a engrenage em 1 com motora m e a engrenag gem 2 com mo movida, tem-se: Fconst -> T1/r1 = T2/r2 -> > T1/D1 = T2/D2 n2 . D2 = n1. d1

T2 . D1 = T1 .D2

[ 92 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

COROA E O PARA AFUSO CO OM ROSCA A SEM-FIM M A co oroa e o pa arafuso com rosca se em-fim com mpem um m sistema d de transmisso muito o utilizado p principalme ente nos ca asos em q ue necessria elev vada redu o de velo ocidade ou u um elevad do aumento o de fora, , como no os redutore es de velocidade.

Figura F 7. 7 7: Coroa e sem-fim m. On nmero de entradas do d parafus so tem influ uncia no sistema de e transmiss so. Se um m parafuso c com rosca sem-fim tem apena as uma en ntrada (ma ais comum m) e est acoplado a a uma coroa a de 60 dentes, em cada volt ta dada no o parafuso o a coroa vai girar apenas a um m dente. Com mo a coroa a tem 60 dentes, d ser r necess rio dar 60 voltas no parafuso para que a coroa gire uma volta a. Assim, a rpm da c coroa 60 vezes men nor que a do parafus so. Se, por exemplo, o parafuso o com rosc ca sem-fim m est girando a 1.80 00 rpm, a coroa gira ar a 1.800 0 rpm, divididas por 60 0, que resu ultar em 3 30 rpm. Sup ponhamos, agora, qu ue o paraf fuso com rosca sem m-fim tenha a duas entradas e a coroa tenh ha 60 dent tes. Assim, , a cada vo olta dada no parafus so com ros sca sem-fim, a coroa a girar dois s dentes. Portanto, P ser s neces ssrio dar 30 voltas no parafu so para qu ue a coroa a gire uma v volta. Assim, a r rpm da cor roa 30 vezes v meno or que a rpm r do parafuso com m rosca se em-fim. Se, por exemp plo, o para afuso com m rosca sem m-fim est girando a 1.800 rp pm, a coro oa girar a 1.800 divid didas por 30, que re esultar em m 60 rpm. A rpm da a coroa pod de ser exp pressa pela a equao: i=N Nc . Zc =Np. Zp Nc c=Np. Zp /Zc / de: ond Nc = nmero de rotae es da coroa a (rpm) Zc = nmero de dentes da coroa Np = nmero de rotaes do para afuso com rosca sem-fim (rpm) ) Zp= = nmero de d entrada as do paraf fuso As p possibilidad des mais comuns c de controle digital d de motores m CC C so:

[ 93 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

CHAVEAM MENTO DE E MOTOR RES CC CO OM TRANS SISTORES S MOSFET T Os t transistore es de efeito o de campo o MOSFET T executam m o chavea mento por r tenso na a base e po odem ser utilizados no lugar dos transistores Da arlington p para aciona amento de e dispositivo os de mdia potncia a, devido p principalme ente men nor queda de tenso e menor dissipao o em forma a de calor. Os MOSFETs apresentam m alta taxa a de velocidade no chaveamen c nto e uma resistncia a uito baixa (dcimos de d ohms). Deesa form ma, a qued da de tens so nesse transistor t interna mu muito baix xa, o que no acon ntece com transistor res Darling gton. A fgu ura abaixo o mostra a configura o dos pin nos de um MOSFET, onde o pin no 1 o Gate G (base) ), o pinos 2 o Drain n e o pino 3 o Sourc ce.

Figura F 7. 8 8: Mosfet t IRF540 0. Om modelo IRF F540 supor rta tenses s de chaveamento en ntre o drain in e o sourc rce de 100V V e corrente e de at 22 2A. A figura a abaixo m mostra o cir rcuito com MOSFET p para acionamento de e quatro mo otores com m MOSFETs s. A etapa de potnc cia comp posta pelos s MOSFETs s IRF530 e diodos de roda lvre para prote eo de te enso rever rsa. O func cionament to simple es. Quando o o microcontrolador coloca na sada das s portas de e controle um 1 l gico, os transistores t s MOSFET e entram em m condu o e uma tenso de d 12V aplicada s sobre as cargas. c Os s resistores e LEDs se ervem som mente para a visualiza ao do ch haveament to. Note que q o pino o Source do o MOSFET T conect tado ao G Gnd do mi icrocontrolador para a gerar a tenso de e chaveamento no gat te (VG). stra o acion namento d de um mot tor CC de 3V 3 utilizad do em rob tica mve el A figura abaixo mos atravs de e um mosfe et IRF540.

[ 94 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 7. 9: 9 Acionam mento de e motor co om Mosfe et.

EXEMPLO O: SEGUID DOR TIC CO DE LAB BIRINTO Neste caso o interes ssante def finir que no o princpio o seguidor de parede e o rob considera c o obstculo como refe erncia a qual q ele va ai seguir em e movime ento de av vano norm mal. Nesse e exemplo e ele cola do d lado esquerdo, ou u seja, o motor m direi ito deve se er mais rpido que o motor esquerdo, qua ando os do ois estivere em acionad dos. Seguindo a as paredes s do labirin nto at fina al encontra am-se quat tro situae es:

Fig gura 7. 10 0: Situa es encon ntradas em m labirint tos. importan nte salient tar que no o princpio de seguir r o obstcu ulo, o rob no pode tocar no o outro lado o, em verm melho, pois s ele pode e tom-lo como c refer rncia e vo oltar, o qu ue far sair por onde e entrou. Ma ais detalhes s: http://w www.youtu ube.com/w watch?v=QR RDrG2iEFp pM . IDADE DO O CONTRO OLE DE M MOVIMENT TO ESTABILI Para a garantir estabilidade do con ntrole de movimento m , ou seja, garantir que q o rob est seguindo corret tamente a referncia a (o obstc culo), o sen nsor tico lateral (L), com sina al

[ 95 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

analgico, deve ser lido freque entemente e e estar com valores s que gara antam a pr resena do o obstculo. Cas so seja acu usada a au usncia de obstculo, o microcontrolador r deve parar o motor esquerdo e acionar o motor direito, um m determin nado temp po, suficie nte para garantir g as s situaes 3 e 4. Not te que o tempo t de 4 maior que o de 3, mas co om o temp po de 4 na a situao 3 3, o rob va ai ser segu uro pelo ob bstculo at t acabar o tempo de e desvio e seguir em m frente at encontrar obstculo frontal ou u lateral. Cas so o sen nsor frontal verifiq que obst tculo, mostrado n na situa o 2, o microcontr rolador para o moto or direito, aciona o motor esq querdo e s segue em frente at encontrar obstculo lateral, o que gara ante a esta abilidade do d movime ento. Note e que se o ra a direita a for pouco o, o guia o oval frontal l do rob conduzir c o rob estabilidade e e desvio par ao tocar no obstculo com o av vano fron ntal. O circu uito mos strado abaiixo:

Figura 7. 7 11: Uso o de senso ores tico os para co ontrolar m motores. Programa: : --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> //Leitur ra de tens o em mV com varia o de um potencim metro squerdo pin_b6 #define es #define di ireito pin_ _b5 int32 ten nsaofrente, , tensaola ateral, ap proximacao o=4790; //int32 / de evido aos s clculos s intermedi rios short int le edpisca; unsigned i int flagnao osensor=0, flagfrente e=0, flaggiro=1; main() { clock_int_4 4MHz();

[ 96 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

setup_adc_ports(AN0_TO_AN1); //Habilita entrada analgica - 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);//pra 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; }} //************************************************************************ ***** //ANALGICO 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 tambm estabiliza delay_ms(10); tensaolateral= (5000*(int32)read_adc())/1023;

[ 97 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

}} osensor; ++flagnao output_hig gh(esquerd do);output_ _high(dire ito); //Os dois moto ores em fre ente ledpisca=! !ledpisca; output_bit t(pin_b7,le edpisca); delay_ms( (20); }} --------------------------------------------------------------------------------------------------------------O fluxogra ama do pro ograma do microcont trolador mostrado m abaixo: a

Figur ra 7. 12: Fluxogram F ma de fun ncionamen nto de rob b mvel com sens sores.

[ 98 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

PONTE H O acio onamento da ponte H permite o movime ento do mo otor nos do ois sentido os. A ponte e H pode se er feita com transist tores MOSF FETs, mais s aconselh hvel devid do a baixa a queda de e ou de tenso, potncia a Darllin ngton TI IP ou BD. Ma ais deta alhes em m outube.com m/watch?v=6IIH02db bboE . ://www.yo

Fig gura 7. 13 3: Motor em e Ponte e H. --------------------------------------------------------------------------------------------------------------DRIVER P PONTE H L293D Uma das solu ues mai is simples e barata em atua o de ro bs mvis consiste e utilizar um m integrado o motor driver dr como o o L293D. Este inte egrado pos ssibilita o controle c de e dois motor res CC, utilizando quatro pinos de sada do d microco ontrolador. O circuito inte egrado L293D deve ter duas alimentae es. Uma pa ara comando (5V) no o pino 16 e outra para potncia a (por exem mplo 9,6 V ou 5V) no o pino 8. O Os motores s percebem m uma queda de 0,7V em relao o tenso da fonte externa. e As e entradas nos n pinos 2 e 7 so para acion nar o moto or A e entr radas nos pinos 10 e 15 so para acionar o motor B. B O pino 8 conect tado font te de alime entao do os motores s que tem o mesmo Gnd G do circuito de con ntrole.

Figura 7. 14 : CI Ponte e H L29 93D.

[ 99 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Am mudana do os sinais nos n pinos d de entrada a tem o efe eito de pro oduzir a alterao do o sentido da a corrente no enrola amento do motor, lo ogo do seu u sentido d de rotao o. A Tabela a permite pr rogramar o movimen nto em qua alquer dire o (conjugando 2 m motores).

Se a primeira entrada alta, a segun nda entrada baixa , ento e om motor se de esloca para a frente, se a primeira a entrada baixa b eas segunda entrada alta a , o moto r se movim menta para a trs. Se am mbas as en ntradas baixas ou alt tas, o motor pra. SOLENI IDES E RE ELS Uma solenid de consiste e num mb bolo de fe erro coloca ado no inte erior de uma bobina a a) eltrica, , enrolada em torno o de um tu ubo. Quand do se alim enta eletri icamente a (indutncia bobina, cr ria-se um campo ma agntico q ue atrai o mbolo (ncleo ( m vel) para dentro da a bobina como mos strado na figura f aba ixo. No caso c de um m rel, fec cha um co ontato para a circulao de outro nivel n maior r de corren nte.

Figura 7 7. 15: Sol lenide. Os rels so dispositivo os comuta adores elet tromecnic cos (Figura a 2.14). A estrutura a simplificad da de um rel mo ostrada na a figura ab baixo e a partir dela a explic cado o seu u princpio d de funciona amento.

[ 100 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figur ra 7. 16: Rels. R O c controle de uma so olenide o ou rel po ode ser feito pelo c chaveamen nto de um m transistor Darlington n ou de um m MOSFET mostrado abaixo. a rel um tipo de in nterruptor acionado eletricame ente que p permite o isolamento o O r eltrico de e dois circu uitos. O re el forma ado por um m eletrom m (uma bo obina enro olada sobre e um ncle eo de ma aterial ferr romagntic co) que quando acionado, a atravs da d atrao o eletromagntica, fec cha os con ntatos de u um interru uptor. Norm malmente o interrup ptor de um m rel tem d duas posi es, com isso existe em dois tipos, os NF(normalm mente fechado) e NA A (normalme ente aberto o), como mostra m a fiigura abaix xo. A bobina do rel acionad da por uma a tenso con ntnua que e especificada de ac cordo com o fabrican nte, bobina as de 5, 12 2 e 24 Volts s so as mais comuns.

Figura 7. 7 17: Acio onamento o de moto or 12V com m rel bo obina 5V.

[ 101 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Uma das cara actersticas s do rel que ele pode p ser en nergizado com corre entes muito o o corrente que o circuito o controlad do exige p para funci ionar. Isso o pequenas em rela significa a possibilida ade de con ntrolar circ uitos de al ltas correntes como motores, lmpadas e s, diretame ente a part ir de micro ocontrolado ores. mquinas industriais

Figu ura 7. 18 Aplicao o de um rel. r

DE POTN NCIA ULN N2803 DRIVER D Um driver de potncia utilizado sempre quando se necessita n a acionar um m hardware e especifico de maior potncia. p Esse E driver r pode ser usado par ra controla r motores de passos, tm intern solenides s, rels, motores m CC C e vrios s outros dispositivos d s. Ele cont namente 8 transistore es Darlingt ton NPN de potncia a, oito resi istores de base de 2 2K7 e oito diodos de e roda livre e, para de escarregar no Vcc (pino 10) ) a corren nte revers sa da fora contraeletromotr riz gerada no chaveamento dos s transistor res, proteg gendo os m mesmos. Qua ando o mic crocontrola ador coloca a +5V (nve el lgico 1) ) no pino 1 do driver r ULN2803, ele conect ta o pino 18 1 do outro o lado, ond de est liga a um plo do motor, , ao Gnd (n nvel lgico o 0, por isso o a simbolo ogia de porta inverso ora na figu ura abaixo). Como o outro lado o da bobina a (o comum m) ou do motor m deve e estar liga ado ao Vcc c da fonte de at 30 0V, esse co omando ir energizar a bobina ou o o motor.

Figura 7 7. 19: ULN 2803.

[ 102 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

PONTE H COM MIC CROREL S Como o foi visto, , acioname ento da p onte H pe ermite o movimento m o do moto or nos dois s sentidos. A ponte H pode ser feita f tamb m com apenas dois s microrel s. Neste caso, c podese utilizar tambm o driver ULN2803 para a en nergizao das bobin nas, pois j contm m tores de base b e oito diodos de e roda livre e. Esse tipo o internamente oito transistores com resist de ponte H, mostr rada na figura f aba aixo, no causa qu ueda de t tenso na fonte de e o do mot tor, porqu ue as font tes de ene ergizao da bobina a do micro orel e de e alimenta alimenta o do moto or devem ser s diferen ntes, ou se eja, isolada as uma da outra, par ra que seja a possvel o chaveame ento do rel .

Figura a 7. 20: Acionamen A nto de mo otor nos 2 sentidos s com rel s em Po onte H. Not te que inic cialmente os o dois re els esto conectado os ao V-Mo otor. Ao energizar e a bobina do rel da es squerda, conectando o o V+Moto or, a corre ente da fon nte passa pelo motor no sentido o da esque erda para a direita o que deter rmina o se entido de r rotao do motor. Ao o desligar o rel da es squerda e acionar o rel da direita ocorr re o sentid do de rota o inverso o do motor. Qua ando se ut tiliza moto or CC em p ponte H para atuado ores robt ticos, como o rodas de e veculos o ou braos mecnicos s, o que de etermina o torque e a velocid dade do at tuador a relao de e transmiss so da caix xa de engre enagens co onectada ao a motor. ACIONAM MENTO DE E MOTOR RES DE PA ASSO Mot tores de pa assos so dispositivo d s mecnico os eletromagnticos que podem m ser controlado os digitalmente.

[ 103 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

A cr rescente popularidad de dos mot tores de pa asso se dev ve total a adaptao desses dispositivo os lgica digital. So encontra ados no s em aparelhos onde e a precis o um s, plotters, fator muito o importan nte como im mpressoras , scanners, , drivers de e disquetes, discos rgidos, ma as tambm m, como int terface ent tre CPUs e movimen nto mecniico, constit tuindo, em m suma, a ch have para a Robtica a. MOTORES S DE PASSO UNIPO OLARES Os motores de d passo unipolares s so facilmente reconhecidos s pela derivao ao o centro das s bobinas. O motor de d passo te em 4 fases s porque o nmero d de fases duas d vezes s o nmero o de bobin nas, uma vez que cada bobi ina se enc contra div vidida em duas pela a derivao ao centro das bobina as (comum m). Nor rmalmente, a deriva o centra al das bob binas est ligada ao terminal positivo p da a fonte de a alimenta o (Vcc) e os termin nais de cad da bobina so ligado os alternad damente terra atrav vs de chav veamento eletrnico produzind do movimento. As b bobinas se e localizam m no estato or e o roto or um im m permane ente com 6 plos ao o longo da c circunfern ncia. Para que q haja u uma maior resoluo angular, o rotor dev ver conter mais plos s.

Figura a 7. 21: M Motor de passo p unipolar. Os motores de passo un nipolares m mais encon ntrados possuem 5 o ou 6 fios. Os O motores s s de 6 fios s possuem dois fios s comuns (deriva o centra al). Para o de passo unipolares acionamen nto do motor m de passo, p est tes fio co omuns devem ser ligados fonte de e alimenta o (+5V ou u +12V) e os termin nais da bob bina ligado os ao contr role de cha aveamento o do motor d de passo. M Motor de 5 fios Motor de 6 fios s

[ 104 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 7. 22: Mo otores de passo un nipolar conexo c i interna. Para a descobrir os termin nais de um m motor de passo, deve-se cons siderar que e: Para moto ores de 6 fios, f a resistncia en ntre os fios s comuns (Fio ( 1 e Fio o 2) infinita por se e tratarem d de bobinas diferentes s. A re esistncia entre o fio o comum ( (Fio 1) e o terminal de uma bo obina a metade da a resistncia a entre dois terminais s desta bob bina. Para a encontra ar a seqn ncia corret ta dos fios para chav veamento d das bobina as, pode-se e ligar manu ualmente o fio comum ao Vcc, , e de form ma alternad da e seqe encial, o GND G (terra) ) da fonte a aos termina ais das bob binas, verif ficando o movimento m do motor de passo.

MODOS D DE OPERA AO DE UM U MOTO OR DE PAS SSO UNIP POLAR 1 (FUL PAS SSO COMPL LETO LL-STEP) -So omente m meia bobi ina ene ergizada a cada passo p a par rtir do comum; -Menor torque; -Pou uco consu umo de energia. N do passo 1--> 2--> 3--> 4-->

1a a 2a 1b 2b 2 Decima al 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 8 4 2 1

SSO COMPLET TO 2 (FU ULL-STEP PAS 2) -Du uas meia a-bobinas so ene ergizadas s a cada a passo; -Maior torque; -Con nsome m mais energia que o Pas sso comp pleto 1. N do 1a a 2a 1b 2b 2 Decima al passo 1--> 1 1 0 0 8 2--> 0 1 1 0 4 3--> 0 0 1 1 2 4--> 1 0 0 1 1 Figur ra 7. 23: Caracters C sticas e L gica de acioname a ento de m motor de passo. p

[ 105 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

ACIONAMENTO BIDIRECIONAL DE DOIS MOTORES DE PASSO

Como o driver de potncia ULN2803 ou ULN2804 possui internamente 8 transistores de potncia ele capaz de manipular dois motores de passo ao mesmo tempo. Ele contm internamente oito diodos de roda livre e oito resistores de base dos transistores, o que possibilita a ligao direta ao microcontrolador e aos motores de passo.

Figura 7. 24: Conexo 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, possvel associar baterias 9V em paralelo para aumentar a corrente de energizao 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 posio, com giro de 180, e o de rotao, que possui o giro contnuo. O Servo de Posio utilizado em antenas parablicas, em braos robticos, na robtica mvel terrestre com o controle de pernas mecnicas e no controle de cmeras. O Servo de Rotao prioritariamente escolhido para a locomoo por rodas. Trata-se de dispositivos muito precisos que giram sempre o mesmo ngulo para um dado sinal. Um servo tpico possui trs fios de ligao, normalmente preto, vermelho e branco (ou amarelo). O condutor preto a referncia de massa da alimentao (0 volts), o condutor vermelho a alimentao e o condutor branco (ou amarelo) o sinal de posicionamento, como mostrado na figura abaixo que um carro para desvio de obstculos, acionado por dois servo-motores de rotao. O sinal do servo-motor de posio 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 posio central.

[ 106 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 7. 25: Ap plicao d de servo-motores em rob m mvel. A te enso de alimenta a o do servo omotor tipicament t te de 5V, p podendo variar v entre e 4,5V e 6V. Devido alta reduo do jog go de engr renagens, o torque q que se obt tm de um m servo ba astante alto, considerando o se eu tamanh ho reduzido o. Lamenta avelmente, , os servos s consomem m corrente es elevada as (de 20 00 mA a 1 A) e introduzem m rudo el ltrico nos s condutores de alime entao, ne ecessitand o a aplica o de cap pacitores d de filtro. O programa a abaixo mo ove um ser rvo-motor de rotao o para fren nte e um outro o para a trs. Note e que essa a operao utilizada por robs mveis qu ue possuem m dois mot tores em a anti-paralelo. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> #define m motor1 pin_ _b5 #define m motor2 pin_ _b6 int16 frent te=50; short int le ed; main(){ clock_int_4 4MHz(); UE) while (TRU { while (fren nte>0) { output_hi igh(motor2 2); //Iniciali iza o pulso do motor 1 output_high(motor1 1); //Inicializ za o pulso do motor 2 (1); delay_ms( output_low w(motor1) ); //Termiina o pulso o de 1ms do d motor1 sentido horrio h delay_ms( (1); output_low w(motor1) ); output_low w(motor2) ); horrio delay_ms( (10); --frente; // /Termina o pulso de 2ms do m motor2 se entido anti-

[ 107 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

output_bit t(pin_b7,le ed); }} ---------------------------------------------------------------------------------------------------------------

} fr rente=50; led=!led; //pica led d a cada 50 5 ciclos do o servo-mo otor, ou sej ja a cada 1 12ms*50 = 600ms

Figura 7. 26: Visualiza o interna de um m servo-m motor. O programa abaixo move um m servo-m motor de posio. Com o pulso de e aproximad damente 1 ms, o ser rvo move-s se para 0 graus, g e com o pulso o de 1,2 ms m para 90 0 graus e co om o pulso o de 2 ms para 180 g graus. Not te que este e motor utilizado em e antenas s parablicas, em siste emas robt ticos e no controle de cmeras. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> //Servo o-motor d e parabli ica - 3 po osies def finidas: 0, 90 e 180 0 graus. NTE=200, TRAS=200 0; //no ser rvo de test te 200 pass sos corresp int16 FREN ponderam a aprox. 1 volta () void main( { clock_int_4 4MHz(); while (1) { while (FRENTE>0) ) { FRENTE--; output_high(pin_b0); delay_ms( (1); // / tempo de e busca de e 0 graus output_low w(pin_b0); delay_ms( (10); } FR RENTE=20 00; while (TR RAS>0)

[ 108 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

} TR RAS=200;

TRAS--; output_high(pin_b0); (2); // / tempo de e busca de 180 graus s delay_ms( output_low w(pin_b0); delay_ms( (10);

output_to oggle(pin_b b7);

---------------------------------------------------------------------------------------------------------------

FOTOA ACOPLA ADORES S E SEN NSORES S INFRA AVERM ELHOS S


Fotoacopladores ou optoiso oladores p proporciona am a isola ao de sin nais em um ma grande e variedade de aplica aes. Tam mbm cha amados de e acoplado ores ticos s, eles comutam ou u transmitem m sinais e informa es ao me esmo tempo que iso olam difer rentes part tes de um m circuito. Optoiso oladores li ineares so usados para isola ar sinais anlogos at t 10MHz, , enquanto o optoisoladores digita ais so usados para c controle, in ndicao de e estados, isolao de d sinais de e comando e mudana as de nveis lgicos. Existem m fotoacop pladores de e diversos tipos e co om constru ues inter rnas diversas, como, por exemp plo, acopladores onde e a constru uo intern na basea ada em um m diodo infr ravermelho o e um fotot transistor. Como exemplo pode emos citar o 4N25 e o TIL111:

Figur ra 8. 1: Vi isualiza o interna a de um Fotoacopl F ador. Esse e disposit tivo pode ser utiliza ado por um u microc controlado or para identificar a presena d de tenso 220VAC em e um det terminado ponto. A potncia p m mxima dis ssipada por esse comp ponente de 250mW W em 25 gr raus Celsiu us. Dessa forma, deve e-se dimen nsionar um m resistor em m srie com m o foto-di iodo intern no para pro oteg-lo. Esco olhendo re esistores so s de 33 3mW, ou seja, a po otncia m xima que e pode ser dissipada em cada um deles. interess sante que exista um m certo int tervalo de segurana a entre a po otncia mxima do co omponente e e a potn ncia mxim ma dissipad da. Ento, a potncia a mxima es scolhida pa ara os resi istores d de 200mW. . Na Equa o (6.1) calculado o o resistor que ser utilizado no n circuito, considera ando a te enso de pico. p Consiidere 311V V como a tenso de pico. P=V V2/R -> 0,2 2W = (311 1)2/R -> R R=483 K. O re esistor com mercial mais prximo o desse valo or 470K.

[ 109 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 8. 8 2: Aplica ao de um u fotoac coplador. TRANSM MISSOR E RECEPT TOR IR Os transmisso ores e rece eptores IR R (infrared ou Infrave ermellhos) so muito o utilizados s como sens sor tico por p reflex o difusa p para regist tro de posi io. A fig gura abaixo o mostra o circuito do o sensor e um grfic co do sina al de sada (em mV) do recept tor IR em funo da a distncia p perceptvel l pelo rece eptor IR co om resistor r de eleva o de ten nso para 5V 5 (pull-up p 2K2). O v vdeo http p://www.yo outube.com m/watch?v v=18w0Oeaco4U mo ostra essa a variao, com o acionamento o de um le ed pela q ueda do sinal s anal gico atarv vs da conduo do o receptor IR R.

. 3: Conex xo do pa ar infraver rmelho: TIL T 32 (em missor) e TIL 78 (r receptor). . Figura 8. Para a ter um maior alca ance e per rceber um ma maior variao v de e posio, com esse e sensor, aconselh vel utiliza ar o conv versor AD de 10 bits b do m icrocontrolador para a identificar variaes de at 5m mV no sinall do sensor. A distncia tima a distnc cia em que e

[ 110 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

incide no receptor a maior parte do feixe de luz emitido pelo transmissor. Nessa distncia ocorre a maior variao (queda) do sinal de sada analgico do receptor IR. Utilizando o princpio on/off, s h identificao de posio quando o sinal do receptor for menor ou igual a 2,5V (nvel lgico baixo), o que torna o sensoreamento muito limitado. Durante os testes desse circuito foi verificado que, devido a resistncia de 390 em paralelo com 2K2, quando o led conectado no circuito, h uma diminuio na variao do sinal de sada analgico do receptor IR. O programa abaixo mostra a leitura em mV do sensor tico via emulao serial. --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> //Leitura de tenso em mV com variao de um potencimetro #include <usb_san_cdc.h>// Biblioteca para comunicao 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 perifrico com a usb do PC setup_adc_ports(AN0); //Habilita entrada analgica - A0 setup_adc(ADC_CLOCK_INTERNAL); while(1){ //ANALGICO 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); }} -------------------------------------------------------------------------------------------------------------AUTOMAO E DOMTICA COM CONTROLE REMOTO UNIVERSAL A comunicao entre uma unidade remota e um eletrodomstico, como uma TV, se d geralmente por emisso de radiao infravermelha modulada por pulsos.

[ 111 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

F Figura 8. 4: Diagra ama de bl locos de comunica c o infrav vermelha a. Para a tornar o sistema in nsensvel a interfern ncias e filtr rar os rudo os, aceitan ndo apenas s as ordens do control le remoto, o cdigo d de pulsos do emissor contm u um dado binrio, b que e identifica ado pelo decodificado or do recep ptor. As interfernc cias podem m se origiinar de fontes estt ticas, isto , que n o pulsam, como o so ol, lmpadas incande escentes, a aquecedor res, e de fontes f din micas que e so mais s intensas e geram maior m inter rferncia, como lm mpadas fluo orescentes s, a image em da TV V, outros tran nsmissores s de infrave ermelho e etc. O r receptor, geralmente g e contido n num nico invlucro montado no painel frontal do o televisor, entrega ao a decodifi icador ape enas os pulsos retangulares c correspond dentes aos s cdigos de e identifica ao e dados, elimina ando a ma aioria das fontes f de i nterfernc cias, exceto o as que ten nham a me esma frequ uncia de p pulsos, cab bendo a rej jeio dest tas ao Dec codificador r, se no tive erem o me esmo cdig go de pulso os. Para a acionar uma carg ga dist ncia bast ta ter o controle c re emoto e o receptor infraverme elho, pois ao invs de d captura ar o cdigo o em bits emitidos p pelo contro ole remoto o para deco odificao, possvel identifica ar apenas o start bit desse c digo que apresenta a co baixo (0V) que nvel lgic e, conecta ado ao pino p de interrupo i o externa a (B0) do o microcontr rolador com m um resis stor de pul ull-up de 2K K2, executa ar uma ta arefa desej jada como, por exemp plo, o chav veamento de d um rel para acio onamento de uma m mquina. Um m exemplo o de circuito o para aci ionamento de carga as remotas s com con ntrole univ versal pode e ser vista a abaixo e e em http:// /www.yo outube.co m/watch h?v=1l6s9 9xtrJl0 .

[ 112 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 8. 8 5: Conexo de re eceptor in nfraverme elho de TV V no PIC. Not te que, se nesse cas so no hou uver um sis stema de decodifica o, o receptor deve e ter um inv vlucro par ra proteo o contra in nterferncia as, pois es st sujeito s fontes estticas e dinmicas. Abaixo um u progra ama exem mplo de ac cionamento o de um rel atrav vs de um m controle re emoto univ versal. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> short int re ele; #int_ext ext() void bot_e { ; rele=!rele; output_bit t(pin_b5,re ele); delay_ms( (1000); // /Tempo pa ara deixar o recepto or cego por 1 seg ap ps a 1 atuao a da a interrupo } main() { clock_int_4 4MHz(); enable_int terrupts (global); // Possibilita P t todas inter rrupcoes enable_int terrupts (int_ext);//Habilita in nt. ext. 0 no pino o B0 ond de est o receptor infraverme elho while (TRU UE) { output_tog ggle(pin_B B7);

[ 113 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

delay_ms( (500); }} --------------------------------------------------------------------------------------------------------------Para a filtrar as interfern ncias dinm micas nec cessrio co olocar o rec ceptor em uma caixa a preta com m um pequ ueno orifcio ou em um tubo feito de caneta com m cola que ente, como o mostra a f figura abaix xo, para re eceber som mente a luz z IR direcio onal.

Figura 8. 6: Exem mplo de pr roteo do o recepto or contra emisses e s externas s de raios s IR.

CODIFIC CAO DE E RECEPTO OR INFRA AVERMEL LHO UTILI IZANDO A NORMA A RC5 RC5 5 uma no orma unive ersal desen nvolvida pe ela Phillips para coma andos a dis stncia por infraverme elho utiliz zada prin ncipalment te em equipamen e ntos de udio, televisores t , videocasse etes e outros o ap parelhos d domsticos, com uma re ea de al lcance de e aproximad damente 10 0m. A n norma RC5 5 usa mo odulao b bifsica, ou u seja, c digo Man nchester. Cada C bit separado por dois se emi-ciclos; ; a metade e esquerda a e direita tm nveis s opostos. Se o bit a ser transm mitido for zero z (0), o seu lado esquerdo (primeiro semi-ciclo o) um e o seu lado o direito z zero (segu undo semi-ciclo). Se e o bit a ser transm mitido for um (1), o seu lado o esquerdo zero qua ando o seu lado direit to um.

Fig gura 8. 7: : Modula o Bifsica. O cdigo t transmitido o consiste de d uma pa alavra de 14 bits, sen ndo eles : esponde a 1; - 2 bits pa ara ajuste do nvel (2 2 start bits) ). O primeiro e o seg gundo corre - 1 bit para controle e (toggle bit b ou flip) q que muda de estado o lgico cad da vez que e um boto o pression nado na un nidade de comando a distncia. Isto ser rve para in ndicar se o boto fo oi pressionad do uma vez z ou se con ntinua sen do pressio onado;

[ 114 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

- 5 bits d de endere o do siste ema para s seleo de e 1 dos 32 sistemas possveis listados na a tabela 7. I Isso define e o tipo de aparelho q que se pret tende cont trolar; - 6 bits de e comando o represent tando 1 do os 128 com mandos possveis. Iss so define a ao que e se pretend de executar em um determinad d do aparelho o (sistema) ) seleciona ado. Na figura aba aixo vemos s os bits de e 1 a 14 e sua identificao: e em azul cla aro os start t bits 1 e 2 de equali izao; o bit b 3, FLIP P, em ama arelo; bits de 4 a 8 em azul in ndicando o endeream mento; e os s bits de 9 a 14, indi cando o co omando a executar.

Figura 8. 8 8: Sinal tr ransmitido. Na norma RC5, os dado os so mod dulados nu uma frequ ncia porta adora de 30 0 a 40KHz, indicados pelos doi is ltimos nmeros do recep ptor TSOP P1740, TSO OP4836, TSOP4830 T . de 36 kHz Consideran ndo uma modulao m z, o perodo de cada bit corresp ponde a 64 4 pulsos de e 1/36 kHz, , ou seja, , 64 vez zes 27,7 s (micro segundos s), o em que corre esponde a aproximad damente 1772us. O programa a abaixo id dentifica o o ender reo do sistema e o comando d das teclas pressionad das por um m controle remoto RC C5. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> //Progra ama com p protocolo RC5 R da Phi illlips de co ontrole rem moto #include < <usb_san_ _cdc.h>// Biblioteca B p para comunicao se erial virtuall

char chego oupc, coma mando, siste ema, bit_rx x;


int32 i; void identi ifica_bit(vo oid) { bit_rx=0; )==1) {bit_ _rx=1;} // /identifica 0 ou 1 if (input(pin_b0) delay_ _us(860); // / //pula para o prx ximo perod do para outra leitura } #int_ext void san_e ext() { output_tog ggle(pin_b b6); sistema=0 0; comando= =0; //******* ****************** ********* ********* ********* ** delay_us(7 750); //Tempo do st tart bit 1 c com a per rda do tem mpo do prim mi-ciclo alto o meiro sem pela interr rupo delay_us(1 1720); //Te empo do start s bit 2 delay_us(1 1720); //Te empo do to oogle bit
[ 115 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=16; //Bit 5 do byte sistema 0b00010000 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=8; //Bit 4 do byte sistema 0b00001000 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=4; //Bit 3 do byte sistema 0b00000100 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=2; //Bit 2 do byte sistema 0b00000010 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=1; //Bit 1 do byte sistema 0b00000001 //************************************************* delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=32; //Bit 4 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=16; //Bit 5 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=8; //Bit 4 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=4; //Bit 3 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=2; //Bit 2 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=1; //Bit 1 do byte comando //*************************************************

[ 116 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

write_eepr rom(0x10,sistema); write_eep prom(0x11 1,comando); ////g guarda as s variveis s decodificad das while(read d_eeprom(0xfd)); printf (usb b_cdc_putc c,"comando o: %x\r\n" ",read_eep prom(0x11) )); delay_ms( (500); //Te empo para a deixar o receptor cego por um segun ndo aps a primeira a atuao da a interrup o } main() { clock_int_4 4MHz(); usb_cdc_in nit(); // Inicializa o protocolo p C CDC usb_init(); ; // Inicializ za o protoc colo USB usb_task() ); // Une o perifrico com US B do PC //Para / depurar o pro ograma em m aplicao o real b_enumera ated()); //A Aguarda rec conhecime ento da em mulao ser rial via USB B while(!usb enable_int terrupts (global); // Possibilita P t todas inter rrupcoes enable_int terrupts (in nt_ext); // Habilita in nterrupcao externa 0 no pino B B0 onde es st ligado o receptor in nfravermelho while(1) { if (usb_cdc c_kbhit(1)) ) //avisa se e chegou d dados do PC P { chegoupc= =usb_cdc_ _getc(); //s se chegou, retm o caractere c e compara com 'L' ou 'D' if (chegoupc=='L') {output_tog { ggle(pin_b b6); printf(usb_cdc_p putc, "\r\nT Testa led!\ \r\n");} } ++i; if (i> >=10000) {i=0; { outpu ut_toggle( pin_b7);} //Led de visualizao v o }} --------------------------------------------------------------------------------------------------------------O resultad do dos co omandos gerados g q ue correspondem s teclas p pressionad das de um m controle r remoto Ph hillips RC5 5 mostr rado na figura abaixo. Mais detalhes no vdeo: http://w www.youtu ube.com/ /watch?v v=9VG7Ro okuDTs.

Figura 8. 9: Leitura da te ecla pressionada via monito r serial.

[ 117 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

ACIONAM MENTO DE D CARGA AS CA COM M TRIAC Com mo a maior ria dos sist temas auto omticos acionada em corren nte alterna ada, para o controle d de fluxo de d energia de tais s sistemas muito ut tilizada um ma chave eletrnica, stores, ou chamada TRIAC (tr riode for Alternating A g Current) da famlia dos tiris u seja, um m nte eletrnico equivalente a do ois retificad dores contr rolados de e silcio (SC CR) ligados s componen em antiparalelo que permite conduzir c a corrente eltrica e nos dois sen ntidos quan ndo recebe e um pulso n na base (d disparo). TRIACS E RELS DE D ESTAD DO SLIDO O Os Triacs opt to-isolados s, geralmen nte utilizad dos em ca argas CA, podem co onduzir nos s dois semi-ciclos de uma onda a senoidal. Dessa forma, so utilizados tanto com mo rels de e estado sl lido sem controle c de e fase da t tenso, co omo tamb m no cont trole de te enso para a uma carga a CA atrav vs de pu ulsos no ga atilho do triac em perodos p d determinad dos aps a passagem pelo zero realizando o o controle e de fase da d tenso, que prom movem a co onduo de e tenso par ra a carga at a nova a passagem m pelo zero o. Os rels de estado s lido (Solid id State Relay R ), que e no apr resentam comutao o eletromec nica, por isso o no ome, cons sistem na alternativa a moderna a ideal para uso em m lugar dos rels eletr romecnico os com seu us contato os ruidosos s e seus pr roblemas mecnicos m . Na verdad de, a tend ncia um ma substitu uio gradativa dos rels eletro omecnico os pelos de e estado slido a base e de tiristor res como o os triacs. DIMMER ANALGICO Dur rante a var riao da onda o seno idal na alim mentao do dimme er mostrado o na figura a abaixo, es ste disposit tivo aprese enta um m momento zero z volt e, e conseq entemente e, corrente e nula passa ando pelo triac, que o trava no ovamente at o prx ximo dispa aro no prx ximo semiciclo, cujo tempo de epende o tempo t de c carregame ento do capacitor de e 220nF lim mitado pelo o potencim metro em s rie.

Figura 8. 10: Cir rcuito dim mmer ana algico. As f figuras abaixo mostram o com mportamen nto das correntes em m cargas resistivas r e indutivas a aps o cha aveamento do triac.

[ 118 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 8. 11: Co omportam mento das s corrente es em carg gas resist tivas e ind dutivas aps a o cha aveament to do triac. Sup ponha que o TRIAC esteja e cond duzindo. Quando Q a corrente c inv verte, passando pelo o zero, o tri iac corta a alimenta o da car rga pela fo onte CA e a partir d da a tens o sobre o capacitor c comea a crescer c no ovamente e em funo do valor da d capacit ncia e da resistncia a em srie, at atingir r a tenso de dispar ro (VD) no DIAC (exe emplos: 1N N5411 e 40583) 4 que e dispara o gatilho do triac. Note e que sem mpre que a corrente passa p pelo o zero, o tr riac corta a o da carga e s volt ta a condu uzir quando o o capacit tor atinge a tenso de d disparo, alimenta O vdeo gerando uma onda senoida al fat tiada. no n link k http://w www.youtu ube.com/ /watch?v v=u1HwZLRcrYQ mostra m ao operao de e um triac. . CONTROL LE DIGITA AL DE DIS SPARO DE UM TRI IAC Para a de realiz zar o cont trole digita al do dispa aro de um m triac n necessrio identificar iniciament te a passa agem pelo zero da s senide da a rede (ze ero-crossing g), para a partir da a decidir qua ando, em cada c semi-ciclo da se enide da rede, ser realizado o chaveam mento pelo o triac da re ede para a carga CA. Para ident assagem pelo zero da a senide da rede fo oi tificar a pa utilizado o mtod do simple es do o opto-acoplador, com interru upo ex xterna do o microcontr rolador por bordas de subida e descida, e o mtodo do trans sformador com ponte e de diodo com inter rrupo ex xterna por borda de e subida. As A figuras abaixo mostram m as s forma de o ondas obtid das pelos dois d mtod dos de sen nsoriamento o da rede.

[ 119 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 8. 12: Ze ero-cross sing: form ma de ond das obtida as pelos d dois mtodos de sensori iamento da d rede. Not ta-se que a forma de e onda pelo o cruzamen nto do zero o com sens soriamento o por optoacoplador no exa ata, sendo adequada a para uso o por exem mplo, com sistemas de d controle e de ilumina ao. Nest te caso, pode p ser que os te empos t1 e t2, obt tidos nos semi-ciclos s simtricos negativo e positivo, respectiv vamente, so s diferen ntes. Um e exemplo de placa de e mpressa com m o respec ctivo circuit to mostr rada na fgu ura abaixo. . circuito im

Figura 8. 8 13: PCB B do circuito zero-c crossing.

[ 120 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

No caso do transforma t dor e da ponte de diodo, que diminui o nvel de e tenso e semi-ciclo negativo para posit tivo, pos ssvel ident tificar na base do transistor o rebate o s rodo, o transistor momento em que a onda se enoidal vai a zero, pois p neste curto per d coletor levado a 5V, ou seja, s nvel lgico alt to, identific cando com m cortado e a sada do tido a pas ssagem pe elo zero. maior exat

Fig gura 8. 14 4: Passage em da on nda pelo zero z da re ede. Mais detalhe es podem ser vistos no http://w www.youtu ube.com/ /watch?v v=u1HwZLRcrYQ. A fo orma de on nda pode ser s vista co om mais de etalhes na figura aba aixo: vdeo:

Figura a 8. 15: Fo orma de onda o de e entrada e sada do circuito d detector de d zero O P Programa abaixo a iden ntifica a pa p zero de d tenso e determina a partir assagem pelo da, com d dois botes s, o ngulo o de fase ( (atraso de chaveame ento) entre e 300 valor res de uma a tabela, em m que cada a atraso co orresponde e a variao de 0,3% % da potn ncia conced dida para a carga. ---------------------------------------------------------------------------------------------------------------

[ 121 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#include <SanUSB.h> //Mais 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, 442, 439, 436, 433, 417, 415, 413, 411, 398, 396, 394, 392, 381, 379, 378, 376, 366, 365, 363, 362, 352, 351, 350, 348, 340, 338, 337, 336, 327, 326, 325, 324, 315, 314, 313, 312, 304, 303, 302, 301, 293, 292, 291, 290, 282, 281, 280, 279, 271, 270, 269, 268, 261, 260, 258, 257, 250, 249, 248, 247, 239, 238, 237, 236, 229, 228, 227, 225, 218, 217, 216, 215, 207, 206, 205, 204, 196, 195, 194, 193, 185, 183, 182, 181, 173, 172, 170, 169, 160, 159, 158, 157, 148, 146, 145, 144, 134, 132, 131, 130, 119, 117, 116, 114, 102, 101, 99, 97, 83, 81, 79, 77, 58, 55, 52, 49, };//*/ int16 i, phase_count=0; signed int j=0, disparo=0; #int_TIMER2 void function_t0 () { // set_timer2(239); //es zhlt 20 us bis interrupt, d.h. 50kHz ++phase_count;

detalhes

em

463, 431, 409, 391, 375, 361, 347, 335, 323, 311, 300, 289, 278, 267, 256, 246, 235, 224, 214, 203, 191, 180, 168, 155, 142, 128, 113, 95, 74, 45,

459, 428, 407, 389, 373, 359, 346, 333, 321, 310, 298, 287, 277, 266, 255, 245, 234, 223, 213, 202, 190, 179, 167, 154, 141, 127, 111, 93, 72, 41,

455, 426, 405, 387, 372, 358, 345, 332, 320, 309, 297, 286, 276, 265, 254, 244, 233, 222, 211, 200, 189, 177, 165, 153, 139, 125, 109, 91, 69, 37,

451, 423, 403, 386, 370, 356, 343, 331, 319, 307, 296, 285, 275, 264, 253, 243, 232, 221, 210, 199, 188, 176, 164, 152, 138, 124, 108, 89, 67, 32,

448, 421, 401, 384, 369, 355, 342, 330, 318, 306, 295, 284, 273, 263, 252, 242, 231, 220, 209, 198, 187, 175, 163, 150, 137, 122, 106, 87, 64, 26,

445, 419, 399, 383, 368, 354, 341, 328, 317, 305, 294, 283, 272, 262, 251, 240, 230, 219, 208, 197, 186, 174, 162, 149, 135, 121, 104, 85, 61, 18

[ 122 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if(table[pointer]==phase_count){ output_high(PIN_B6); //triac an } } #INT_EXT void Crossing0() { output_low(PIN_B6); //triac aus phase_count=0; } void main(void) { clock_int_4MHz(); //Funo necessria 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 operao aps gravao setup_adc_ports(AN0); //Habilita entradas analgicas - A0 setup_adc(ADC_CLOCK_INTERNAL); //Configurao 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 boto no pino E3 regula o ngulo de disparo write_eeprom(10, pointer);

[ 123 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

} if(!input t(button1)) { delay_ms(3 30); //whi ile(!input(b button1)) delay_ms( (50); poin nter--; if(po ointer<=1) ) {pointer= =0;} writ te_eeprom(10, pointe er); } } } --------------------------------------------------------------------------------------------------------------DIMMER DIGITAL L COM CO NTROLE REMOTO R IR A fig gura abaix xo apresenta um um circuito de e controle digital d de lluminosidade de uma a lmpada C CA por um m microcontrolador at travs de comandos de um co ontrole rem moto IR de e TV utilizan ndo detector de passagem p pelo zero. O comand do do con ntrole rem moto IR do o upo no pino B0, altera optoisolador, que recebido por interru a o ngulo de disparo do o MOC3020, , aps a deteco d de passage em pelo ze ero por int terrupo n no pino B1 realizada a pelo optoa acoplador e, consequ uentement te, altera o tempo de condu o do TRIA AC BT, que e conduz pa ara a carga a tenso at a o final do semicic clo da onda senoidal. .

Fig gura 8. 16: Contro ole digital l de lumin nosidade de d uma l mpada CA. C p possvel ve er mais de etalhes em m http://w www.youtu ube.com/ /watch?v v=7O9a0E E_WXPA . Abaixo o firmware do dimmer digital com m controle remoto IR R. --------------------------------------------------------------------------------------------------------------#include B.h> //M Mais deta alhes m <SanUSB em http://www w.youtube e.com/watc ch?v=7O9a a0E_WXPA A otao PIN_E E3 #define bo #define bo otao1 PIN_ _A0

[ 124 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

int16 i; signed int j=0, disparo=0; char chegoupc, comando, sistema, bit_rx, flag; void identifica_bit(void) { bit_rx=0; if (input(pin_b0)==1) {bit_rx=1;} //identifica 0 ou 1 delay_us(860); // //pula para o prximo perodo 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 interrupo delay_us(1720); //Tempo do start bit 2 delay_us(1720); //Tempo do toogle bit delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=16; //Bit 5 do byte sistema 0b00010000 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=8; //Bit 4 do byte sistema 0b00001000 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=4; //Bit 3 do byte sistema 0b00000100 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=2; //Bit 2 do byte sistema 0b00000010 delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) sistema|=1; //Bit 1 do byte sistema 0b00000001 //************************************************* delay_us(860); //pula o primeiro semi-ciclo identifica_bit();

[ 125 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if (bit_rx) comando|=32; //Bit 4 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=16; //Bit 5 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=8; //Bit 4 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=4; //Bit 3 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=2; //Bit 2 do byte comando delay_us(860); //pula o primeiro semi-ciclo identifica_bit(); if (bit_rx) comando|=1; //Bit 1 do byte comando //************************************************* while(read_eeprom(0xfd)); if (comando==1) {output_toggle(pin_b7); disparo++; if(disparo>=8) {disparo=8;}} if (comando==2) {output_toggle(pin_b7); disparo--; if(disparo<=0) {disparo=0;}} enable_interrupts(INT_EXT1); } #INT_EXT1 void CruzaPor0() { if (!input(pin_b0)) break; delay_us(500); //devido a deteco 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 prximo 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 interrupo da borda de subida para descida da senide } else {

[ 126 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

j=0; ext_int_edge(L_TO_H); // Muda a interrupo da borda de descida para subida da senide } } void main() { clock_int_4MHz(); //Funo necessria 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 operao aps gravao 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 visualizao if(!input(botao))//boto de incremento manual de fase { delay_ms(100); while(!input(botao)) delay_ms(100); //filtro boto disparo++; // na prtica est identificando o zero s uma vez por ciclo if(disparo>=8) {disparo=8;} //o boto 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 so o BT e o TIC. Com eles possvel construir dimmers (controladores de luminosidade de lmpadas) e tambm controladores de velocidade de motores CA como ventiladores. Este princpio de controle possibilita tambm economia de energia, pois, enquanto ele no recebe o disparo, no h conduo de corrente para a carga. Outra caracterstica importante a causa pela qual passou a substituir o reostato original, que acompanha os

[ 127 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

motores das mquinas de costura. Como o controle de velocidade feito pela parcela do semiciclo aplicado e no pela tenso, o torque se mantm mesmo em baixas velocidades. A outra srie de MOC3041, j projetada com circuito interno fixo para deteco de passagem por zero, assim o chaveamento automtico e no possvel nenhum controle do ngulo de disparo.

LCD (DISPLAY DE CRISTAL LQUIDO)


O LCD, ou seja, display de cristal lquido, um dos perifricos mais utilizados como dispositivo de sada em sistemas eletrnicos. Ele contm um microprocessador de controle, uma RAM interna que mantm escritos no display (DDRAM) os dados enviados pelo microcontrolador e uma RAM de construo de caracteres especiais (CGRAM). Os LCDs so encontrados nas configuraes previstas na Tabela abaixo. Nmero de Colunas 8 12 16 16 16 20 20 20 24 24 40 40 Nmero de Linhas 2 2 1 2 4 1 2 4 2 4 2 4 Quantidade de pinos 14 14/15 14/16 14/16 14/16 14/16 14/16 14/16 14/16 14/16 16 16

Os displays mais comuns apresentam 16 colunas e duas linhas. Eles tm normalmente 14 pinos ou 16 pinos. Destes, oito pinos so destinados para dados ou instruo, seis so para controle e alimentao do perifrico e dois para backlight. O LED backlight (iluminao de fundo) serve para facilitar as leituras durante a noite. Neste caso, a alimentao deste led faz-se normalmente pelos pinos 15 e 16, sendo o pino 15 para ligao ao anodo e o pino 16 para o catodo. A ferramenta SanUSB tem uma biblioteca em C para este perifrico 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 configurao:

[ 128 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 9. 1: C onexo do d LCD no o PIC. AT Tabela abaixo traz um m resumo d das instru es mais usadas u na comunica o com os s mdulos L LCD. Tab bela - Ins strues mais m comuns DESCRI O MODO O R R/ Cdigo o S W (Hex) Display Liga ( (sem curso or) 0 0 0C Deslig ga 0 0 0A / 08 8 Limpa Disp play com Home H curso or 0 0 01 Controle d do Cursor Liga 0 0 0E Deslig ga 0 0 0C Desloc ca para Es squerda 0 0 10 Desloc ca para Direita 0 0 14 Curso or Home 0 0 02 Curso or Piscante 0 0 0D Curso or com Alte ernncia 0 0 0F Sentido de e deslocam mento Para a esquerda a 0 0 04 cursor ao entrar com m caractere e Para a direita 0 0 06 ento da me ensagem Para a esquerda a 0 0 07 Deslocame ao entrar c com caract tere Para a direita 0 0 05 Deslocam mento da mensage em Para a esquerda 0 0 18 sem entr rada de ca aractere Para a direita 0 0 1C End. da pr rimeira pos sio prime eira linha 0 0 80 segun nda linha 0 0 C0 Utilizando o as instru es do LC CD: a rolar o contedo do LCD um carac ctere para a direita, , utilize o comando o Para lcd_envia a_byte(0, , instru o), por ex xemplo, lc cd_envia_ _byte(0,0 0x1C) e pa ara rolar o contedo do LC CD um caractere e para a esquerda, ut tilize o comando o lcd_envia a_byte(0, ,0x18). Exe emplo de uso do recu urso de rola agem do display: d
[ 129 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

A seguinte seqncia de comandos, gera o efeito de uma mensagem rolando no display. Para isso, ser necessrio declarar uma varivel do tipo INT x. --------------------------------------------------------------------------------------------------------------////////////////////////////Cabealho Padro//////////////////////////////// #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(); // Configurao inicial do LCD setup_adc_ports(AN0); //Habilita entradas analgicas - 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 funo lcd_pos_xy(x,y), onde x e y so, respectivamente, a coluna e a linha onde o cursor deve ser reposicionado.

[ 130 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Desta forma, caso deseje escrever algo na primeira linha do display, sem apagar a segunda linha, basta inserir o comando lcd_pos_xy(1,1). Isso ir posicionar o cursor na primeira linha, e primeira coluna. No entanto, tome cuidado, pois uma vez que o display no foi apagado, as informaes antigas permanecero na primeira linha, a menos que voc as sobrescreva. STRING : o trecho de caracteres delimitado por aspas duplas, que ir definir como ser a seqncia 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 no possurem uma representao impressa, so compostos por uma barra invertida seguida de um smbolo, 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 resultaro efeito em terminais seriais. J os especificadores de formato so os locais, em meio ao texto, onde sero inseridas as variveis que aparecero aps a STRING. Desta forma, estes especificadores devem obedecer algumas regras, de acordo com o tipo da varivel a ser impressa. Observe a seguinte tabela : Tipo de Especificador de formato e exemplos de uso varivel %u valor decimal (ex: 30) %x valor em hexadecimal (ex: 1D) int %3u valor decimal alinhado com trs dgitos (ex: _30) %03u valor decimal alinhado 3 dgitos c/ zero (ex: 030) %i valor decimal com sinal. (ex: -2) signed int %02i decimal com sinal, 2 casas e zeros a esq. (ex: -02) %lu valor decimal (ex: 32345675); long %05lu valor decimal 5 casas c/ zeros a esquerda. (ex: int32 01000) signed %li valor decimal c/ sinal (ex: -500) long %4li valor decimal c/ sinal alinhado a esquerda (ex: -_500) signed int32 %f valor real. Ex: (23.313451) float %2.3f valor real c/ 2 casas inteiras, 3 decimais. Ex: (23.313) %c caractere. Ex: (A) char EXEMPLO: CONTROLE DE TENSO DE UMA SOLDA CAPACITIVA COM LCD O princpio de uma solda capacitiva acontece atravs da descarga instantnea de capacitores previamente carregados por dois terminais de solda em um ponto especfico. Este projeto consiste em realizar o controle de tenso de uma solda capacitiva em baixo custo, atravs de um sistema microcontrolado utilizando o PIC18F2550. Para a leitura da tenso CC nos terminais da solda capacitiva, na ordem de 300V, necessrio

[ 131 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

inicialment te utilizar um divisor r de tens o para ad dequao tenso m mxima do o conversor AD do m microcontrolador de 5V. Esta relao do d divisor compe nsada via software, multiplican ndo o valo or de tens o lido pela a mesma relao de e diviso. O Os valores de tenso o real e te enso de referncia a na orde 2 que pode se er increme entada ou u em de 270V, decrement tada por dois d bote es de ajus ste, so mostrados m em e um diisplay LCD D. A ltima a tenso de referncia a ajustada guardad da na mem mria. Des ssa forma, quando o sistema reiniciado a tenso de d refernc cia assume e o ltimo valor v ajustado. Qua ando a tenso real e a de refer rncia so iguais, a alimentao a o de 220V do circuito o de potnc cia cortad da pela ab bertura de um rel NF N (normalmente fec chado) e um u LED de e atuao a ascende indicando que a tens so de ref ferncia fo oi atingida. . O LED de d atuao o indica a p presena ou no de tenso res sidual nos s capacitores de carg ga e apaga somente e aps a des scarga de tenso nos s terminais s de solda, o que con ntribui para a evitar de escargas de e tenso nos s operador res durante e o manuse eio da sold da. Para a regular esse e sistem ma embarc cado nec cessrio medir a tens so nos te erminais da a solda capa acitiva com m o multm metro e igu ualar com o valor atu ual indicad o no LCD atravs do o potencim metro de ajuste do div visor de te nso. O circuito do sistema s de controle de d tenso e a foto do LCD aps s a montagem em p protoboard d indicando o a tenso o de refer rncia para a desligamento (Vref) e a tenso o atual (Va at) podem ser vistos na figura a abaixo.

Figura 9. 9 2: Exem mplo de aplicao a do LCD. --------------------------------------------------------------------------------------------------------------//////////// ///////////// /////Cabea alho Padr o////////// ///////////// /////////// #include < <SanUSB.h h> #include < <MOD_LCD D_SANUSB B.c> // RB0 0-RS, RB1-E, RB2-D4 4, RB3-D5, RB4-D6, RB5-D7 R #define bo otaoinc pin n_a4

[ 132 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#define botaodec pin_a5 #define rele pin_b7 #define ledrele pin_b6 unsigned int16 vref=270, guardavref, constante=100; unsigned int32 vatual, valorAD;//Deve ser de 32 bits devido ao clculo do AD que esoura 65536 unsigned int8 baixovref, altovref; // Como vref> 256 guardar o valor em 2 bytes, posies 10 e 11 //da EEPROM interna int1 flag1, flag2; main() { clock_int_4MHz(); lcd_ini(); // Configurao 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 reincio if (guardavref>=100 && guardavref<=500) {vref=guardavref;} // Resgata o ltimo valor de //referncia 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) { //********************************BOTES********************************** *** if (!input(botaoinc)) {flag1=1;} if (flag1==1 && input(botaoinc) ) {flag1=0;++vref; //se o boto foi pressionado (flag1==1) e se o boto 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 posices 10 e 11 da eeprom interna if (!input(botaodec)) {flag2=1;} if (flag2==1 && input(botaodec) ) {flag2=0;--vref; //se o boto foi pressionado (flag2==1) e se o boto 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 posices 10 e 11 da eeprom interna //************************************************************************ ***** if (vatual>=vref) {output_high(rele); output_high(ledrele); } //Abre o rel, avisa com led

[ 133 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if (vatual<=20) {output_low(rele); output_low(ledrele);} //S desliga depois da descarga //************************************************************************ ***** valorAD = read_adc(); // efetua a converso A/D vatual=((constante*5*valorAD)/1023); //Regra de trs: 5 --------1023 // Tenso 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 no lineares de sensores utilizando funes de aproximao por equao da reta. Esta tcnica consiste em obter o grfico de resposta real tenso do sensor para diversas situaes. Aps a obteno do grfico real, gerar funes lineares deste grfico atravs da equao da reta, traando retas lineares prximas a curva real do grfico no linear. Esta tcnica pode ser utilizada para diversos tipos de sensores, como LDR, acelermetro, etc. EXEMPLO: MODELAGEM DE UM LUXMETRO MICROCONTROLADO COM LDR LDR significa Light Dependent Resistor, ou seja, Resistor Varivel Conforme Incidncia de Luz. Esse resistor varia sua resistncia conforme a intensidade de radiao eletromagntica do espectro visvel que incide sobre ele. Um LDR um transdutor de entrada (sensor) que converte a (luz) em valores de resistncia. feito de sulfeto de cdmio (CdS) ou seleneto de cdmio (CdSe). Sua resistncia diminui quando a luz intensa, e quando a luz baixa, a resistncia no LDR aumenta. Um multmetro pode ser usado para encontrar a resistncia na escurido (geralmente acima de 1M) ou na presena de luz intensa (aproximadamente 100). O LDR muito frequentemente utilizado nas chamadas fotoclulas que controlam o acendimento de poste de iluminao e luzes em residncias. Tambm utilizado em sensores foto-eltricos. Este luxmetro tem em seu circuito sensor um LDR, um resistor divisor de tenso e uma fonte de tenso estabilizada, como mostra a figura abaixo.

[ 134 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 10. 1: C Circuito se ensor com m LDR. Para a obter este e circuito e os valores de e tenso na sada para as diferentes s luminosida ades, form ma tidos po or ANTON NIETI, B. Em E que as s medies s da tenso de sada a foram feita as e colocadas em uma u tabela a juntamen nte com as s iluminnc cias medid das por um m luxmetro comercial da marca MINIPA, m modelo ML LM-1010, de d 3 dgitos , com m preciso o de 4% da a leitura + 0.5% do o fundo de e escala, na faixa de d 1 a 500 000 Lux. Os valores s encontrado os so vist tos na tab bela abaixo o. Os valor res em neg grito foram m considera ados como o limite de c cada equa o da reta a. Co orrespondncia entre a tenso da d sada e a iluminn ncia
Lux Volt 2 4,9 9 5 4,9 12 4,8 20 4,7 36 4,5 60 4,3 94 4,1 130 1 4 180 3,8 2 240 3 3,6 338 3,3 430 4 3,1 3 530 3 674 6 2,8 2 827 2,7 1 1000 2 2,5 1183 2,4 1404 2,3 1651 2,1 1923 2

Com base na tabela, , foi constr rudo o gr fico da figura abaixo o.


2500 2000 1500 1000 500 0 2 2,3 2,5 2 2,8 3,1 3,6 ) (V) 4 4,3 3 4,7 4,9

(Lux)

Fig gura 10. 2 2: Grfico o Lux x Vo olt. Para simp plificar o programa do o PIC, foi modelado a curva do o grfico ac cima, divid dindo-a em m trs retas com o mostra a figura abaixo.

[ 135 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 10. 3: Mo odelagem m matem tica dos valores v o obtidos. programa funciona da a seguinte maneira: l o conversor A/D e multiplica esse valor Op por sua resoluo (no caso o de um converso o AD de 10 bits, a resoluo de e aproximad damente 5 mV), enco ontrando e ento a ten nso (V), de epois so f feitas 3 comparaes s (IF) para s saber qual das trs equaes e a acima deve e ser utiliza ada para c calcular a iluminncia i a (Lux). A fi igura abaix xo mostra a o novo g grfico lux versus vo olts, utilizan ndo as equaes 03, 04 e 05. Os c clculos da a equao geral de c cada reta so mostrad dos a segu uir:
2500 0 2000 0 1500 0 1000 0 500 0 0 2 2,2 2, ,4 2,6 2,8 3 3,2 3,4 3,6 3,8 (V V) 4 4,2 4,4 4,6 6 4,8 5

F Figura 10. . 4: Grfic co lux x te enso util lizando as s equae es 3, 4 e 5. 5

(Lux)

[ 136 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

SUPERVISRIO Esta a interface e foi dese envolvida utilizando ambiente e de prog ramao Delphi e atravs da a emula o via USB B de um ca anal serial COM virtual. A figura ra 8 mostra a a tela do o supervisr rio para iluminncia e temperat tura.

[ 137 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 10. 5: Fig gura da te ela do sup pervisrio o para Iluminncia a e Tempe eratura. Veja a abaixo, na n figura abaixo, a oe esquema circuito c ele etrnico mo ontado e a na figura a 10, a foto o do circuit to montado em oper rao. No final do tra abalho m mostrado o programa a completo p para ler a iluminncia no canall AD 1 e a temperatu ura do amb biente com m um LM35 5 no canal A AD 0.

Figur ra 10. 6: Esquema E eletrnic co do circuito luxm metro.

[ 138 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 10. 7: F Foto do cir rcuito mo ontado. O lu uxmetro mostrado m neste n traba alho apres senta como o uma solluo de baixo b custo o para aplic caes ond de no necessriio haver uma u grand de precis o nas me edies. O mtodo do o modelagem de cur rva pode se er aplicado o em vrias ocasies s onde no o se sabe a equao que gero ou o grf fico propo osto. Isto o ratifica a versatiilidade de e sistemas s microcontr rolados. // Program ma Luxme etro digital + termm metro digita al c/ comun nicao via a USB// ------------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> float tens,lux,temp; main() { clock_int_4 4MHz(); lcd_ini(); usb_cdc_in nit(); // Inicializa o protocolo p C CDC usb_init(); ; // Inicializ za o protoc colo USB usb_task() ); // Une o perifrico com a usb b do PC //while(!us sb_cdc_connected()) ) {} // espe era o proto ocolo CDC se conecta ar com o driver d CDC //usb_wait t_for_enum meration(); ; //espera at que a USB do Pic c seja reco onhecida pelo p PC c_ports(AN0_TO_AN1 1); setup_adc setup_adc c(ADC_CLO OCK_INTER RNAL); output_low w(pin_b6); ; printf (lcd_ _escreve," \f ");

[ 139 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

while(1) { set_adc_channel(1); delay_ms(20); tens=5*(float)read_adc()/1023; if (tens>2 && tens<2.8) { lux=(3936.4-(1249*tens))/0.8; } if (tens>=2.8 && tens<=3.8) { if (tens>3.8) { lux=2057.2-494*tens; }

lux=(900-180*tens)/1.2; }

if (tens>2) { //Leitura vlida 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 no vlida { lcd_pos_xy(1,1); printf (usb_cdc_putc,"Erro"); delay_ms(50); printf (usb_cdc_putc,"L"); printf (lcd_escreve,"valor fora da faixa! "); lcd_envia_byte(0,0x0C); //Apaga o cursor } delay_ms(30); set_adc_channel(0); delay_ms(20); temp=500*(float)read_adc()/1023; lcd_pos_xy(1,2); printf (usb_cdc_putc,"%.1f",temp); delay_ms(50); printf (usb_cdc_putc,"T"); printf (lcd_escreve,"Temperatura: %.1f oC ",temp); lcd_envia_byte(0,0x0C); //Apaga o cursor delay_ms(800); output_high(pin_b6); delay_ms(200); output_low(pin_b6); }

} ---------------------------------------------------------------------------------------------------------------

[ 140 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

INTER RFACE I2C


I2C significa Inter-IC I (I Integrated Circuit). Este barra amento se erial foi de esenvolvido o pela Philip ps como o objetivo de conectar r CIs e per rifricos de e diferente es fabricantes em um m mesmo cir rcuito, com mo microco ontrolador res, memrias extern nas e rel gio em te empo real, usando o m menor nm mero de pinos possv vel. Este pr rotocolo se erial necess sita somen nte de duas s linhas: um ma linha se erial de dados (SDA) ) e uma de e clock (SC CL). Quand do o baramento no o est em us so, as duas linhas fic cam em nv vel lgico alto a forada as pelos re esistores de pull-up.

Figura F 11. . 1: Barramento I2C. C O b barramento o serial, co om transfe erncia de e 8 bits po or vez, pos ssibilita co omunicao o bidireciona al com velo ocidade de e 100 Kbps s no modo o Padro, 400 4 Kbps n no modo Fast, ou at 3,4 Mbits/s no modo o High-spee ed. Esta a interface e apresen nta a filos sofia mult ti-master onde o todo o CI da rede pode e transmitir ou recebe er um dado o, e o trans smissor ge era o seu prprio p cloc ck de transmisso. O nmero m mximo de CIs que podem se er conectad dos limit tado apen nas pela ca apacitncia a mxima do o barramento de 400 0pF. Um exemplo tpico t de co onfigura o I2C em TVs T most trado na fig gura abaix xo:

[ 141 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 11. 2: Configura o I2C em m TVs. REGRAS PARA TR RANSFER NCIA DE E DADOS

alto.

Cad da bit da li inha de da ados s llido quand do o nvel da d linha de clock est t em nve el

Figura 11. 3: Leitur ra de dado os em com munica o. As c condies de partida a e parada de transm misso so sempre ge eradas pelo o MASTER R. O barrame ento con nsiderado como c ocup pado aps a condi o de part ida, e livre e um certo o perodo de e tempo ap ps a condio de pa arada. Uma transio o de H pa ara L da linha SDA DA (start bit bi ) durante e o tempo em que a linha SCL permanec ce em H, ou seja, um dado vlido, definido como con ndio de e nsio de L para H da linha a SDA (sto op bit) dura ante o perodo H da a partida e uma tran linha SCL, define um ma condi o de para rada.

Figur ra 11. 4: Comandos C s de incio o e fim de e comunic cao. da byte acompa anhado d de um bit b de rec conhecime ento obrig gatrio. O Cad reconhecim mento gerado pelo o MASTER no dcim mo bit libe erando a liinha SDA (nvel alto) ) durante a ocorrnci ia do pulso de clock k de recon nhecimento o. Por sua a vez, o CI C receptor (SLAVE) obrigado a levar a linha SDA A a nvel baixo durante o pe erodo H do clock de e reconhecim mento.

Figura a 11. 5: re econhecim mento do o byte. Se o SLAVE reconhecer r r o endere eo, mas depois d de algum tem mpo na tra ansferncia a no receber mais ne enhum byt te de dado os, o MAST TER dever abortar a transfer ncia. Esta a

[ 142 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

condio indicada pelo SLAVE, devido no gerao do reconhecimento logo aps a recepo do primeiro byte de dados. O SLAVE deixa a linha de dados em nvel H e o MASTER gera a condio de parada. Caso haja uma interrupo interna no SLAVE durante a transmisso, ele dever levar tambm a linha de clock SCL a nvel L, forando o MASTER a entrar em um modo de espera. Para escrever um dado nos escravos necessrio enviar um byte de endereo do escravo, onde os 4 bits mais significativos identificam o tipo de escravo (por exemplo, memrias EEPROM 1010 ou 0xa0 e RTC 1101 ou 0xd0 (com exceo do RTC PCF8583 cujo endereo tambm 0xa0). Os 3 bits intermedirios especificam de um at 8 dispositivos, que so discriminados nos pinos de endereo de cada escravo, e o bit menos significativo R/W indica se a operao de leitura (1) ou escrita (0). Aps isso, deve-se enviar uma palavra de 8 ou16 bits de endereo onde se quer escrever e depois o dado. No final do pacote uma condio de parada (i2c_stop).

Figura 11. 6: Escrita de dados. Funo da biblioteca I2C que descreve essa operao de escrita em memria EEPROM: --------------------------------------------------------------------------------------------------------------void escreve_eeprom(byte dispositivo, long endereco, byte dado) // Escreve um dado em um endereo do dispositivo // dispositivo - o endereo do dispositivo escravo (0 - 7) // endereco - o endereo da memria a ser escrito // dado - a informao a ser armazenada { if (dispositivo>7) dispositivo = 7; i2c_start(); i2c_escreve_byte(0xa0 | (dispositivo << 1)); // enderea o dispositivo livrando o LSB que o R\W i2c_le_ack(); // L reconhecimento do escravo i2c_escreve_byte(endereco >> 8); // parte alta do endereo de 16 bits i2c_le_ack(); i2c_escreve_byte(endereco); // parte baixa do endereo de 16 bits i2c_le_ack(); i2c_escreve_byte(dado); // dado a ser escrito i2c_le_ack(); i2c_stop(); delay_ms(10); // aguarda a programao da memria

[ 143 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

--------------------------------------------------------------------------------------------------------------Para a operao de leitura de um escravo necessrio um start repetido e no final do pacote um sinal de no-reconhecimento (nack) e uma condio de parada (i2c_stop).

Figura 11. 7: Recepo e transmisso de dado. A Funo da biblioteca I2C que descreve este protocolo de operao de leitura de memria EEPROM a seguinte: --------------------------------------------------------------------------------------------------------------byte le_eeprom(byte dispositivo, long int endereco) // L um dado de um endereo especificado no dispositivo // dispositivo - o endereo do dispositivo escravo (0 - 7) // endereco - o endereo da memria a ser escrito { byte dado; if (dispositivo>7) dispositivo = 7; i2c_start(); i2c_escreve_byte(0xa0 | (dispositivo << 1)); // enderea o dispositivo i2c_le_ack(); i2c_escreve_byte((endereco >> 8)); // envia a parte alta do endereo de 16 bits i2c_le_ack(); i2c_escreve_byte(endereco); // envia a parte baixa do endereo de 16 bits i2c_le_ack(); i2c_start(); //repetido start // envia comando para o escravo enviar o dado i2c_escreve_byte(0xa1 | (dispositivo << 1)); enderea o dispositivo e colocando em leitura 0xa1 i2c_le_ack(); dado = i2c_le_byte() // l o dado i2c_nack(); i2c_stop(); return dado;
---------------------------------------------------------------------------------------------------------------

[ 144 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

MEMRIA A EEPROM M EXTERN NA I2C Para a sistemas s embarcad dos em qu e so nece essrios a aquisio d de dados de d mais de e 256 bytes s (capacid dade da EEPROM E i nterna do os microco ontroladore es), necessria a utilizao de memr rias EEPRO OM externa als. Os mod delos mais s comuns s so o 24LC C e 24C256 6 (256 Kbit ts que co orresponde e a 32Kb bytes). Es stas mem rias poss suem oito o pinos e apresentam m, entre outras o caractersticas s, interfac ce de comunicao I I2C. A figura abaixo o mostra o c circuito sim mples de um ma EEPRO OM I2C ligada nn ferra amenta Sa anUSB.

Figur ra 11. 8: Uso U de me emria EE EPROM ex xterna via a I2C. O p programa abaixo a mo ostra o arm mazenamento de valores digit tal de tens so de 0 a 5000mV de um pote encimetro, a cada se egundo, em m um buffe er (regio de memr ria circular) ) de 150 re egistros de e 16 bits na mem ria EEPRO OM externa a, ou seja a, 300 byt tes, que mostrado via emula o serial somente s qu uando a te ecla L pressionada p a. --------------------------------------------------------------------------------------------------------------#include < <SanUSB.h h> #include < <usb_san_ _cdc.h>// Biblioteca B p para emula ao da co omunicao o serial #include < <i2c_sanus sb.c> unsigned i int16 i,j,en ndereco=0 0, posicao= =0, valorgr ravado; int32 tens sao_lida32; //Varia de 0 a 5 5000mV (16bits), mas m int3 32 porque o clculo o ultrapassa 65536 int8 byte1,byte2,byte e3,byte4; // / 4 Partes s do valor int32 i tensa ao_lida32 ando; char coma

[ 145 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

int conv_dec_4bytes(int32 valor32) //Converte decimal de 32 bits em 4 bytes { int32 resultado1=0,resultado2=0; resultado1 = valor32/256; byte1 = valor32%256; //o que for resto (%) menos significativo resultado2 = resultado1/256; byte2= resultado1%256; byte3= resultado2%256; byte4 = resultado2/256; return(byte4,byte3,byte2,byte1); } main() { clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico com a usb do PC setup_adc_ports(AN0); //Habilita entradas analgicas - A0 setup_adc(ADC_CLOCK_INTERNAL); while(1){ set_adc_channel(0); delay_ms(10); //Tenso 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 tenso Trimpot em mV: 5000mV - 1023 (10bis) printf (usb_cdc_putc,"\r\n tensao do Trimpot = %lu mV\r\n",tensao_lida32);// tensao_lida - read_adc(); conv_dec_4bytes(tensao_lida32); //printf (usb_cdc_putc,"\r\nVariavel em %x\r\n",byte4,byte3,byte2,byte1);//Debug Hexadecimal = %x %x %x

posicao=2*endereco; //Endereo 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 funo {comando=usb_cdc_getc(); if (comando=='L'){ printf(usb_cdc_putc, "\r\n\nEEPROM:\r\n"); // Display contm os primeiros 64 bytes em hex da eeprom externa i2c

[ 146 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

for(i=0; i<10; ++i) ) { //10lin nhas * 30c colunas = 300 3 bytes (int16 i,j) or(j=0; j<1 15; ++j) { fo ado= 256* *le_eeprom m(0,(i*30)+ +2*j) + le_ _eeprom(0 0,(i*30)+2 *j+1); //150 Valores s valorgrava de 16 bits ou 300 de e 8 bits. printf(usb b_cdc_putc c, "%lu ", v valorgravad do ); }
print tf(usb_cdc_putc c, "\n\r"); }}} //*********** ************** ************* ************* ************************** ***** output_toggle(p pin_b7);

delay_ms( (1000);
}}

Figura 11 1. 9: Leitu ura de valores da memria. m .

RTC (R RELGI IO EM TEMPO T REAL)


O R Real Time e Clock I2C DS1307 7 um relgio/cale endrio se erial de baixo custo o controlado o por um cristal exter rno de 32.7 768 Hz. A comunica o com o DS1307 atravs de e 2 interface s serial I C (SCL e SDA). Oito bytes de RAM do RTC so usados pa ara funo o relgio/cal lendrio e so config gurados na a forma Binary Code ed Decimal BCD. possvel a reteno dos dados s na falta a de ener rgia utiliza ando uma a bateria de ltio de 3V 500mA/h h conectad da ao pino 3.

[ 147 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Figura 12. 1: RTC DS1307 e similar. Para representar nmeros decimais em formato binrio, o relgio DS1307, bem como calculadoras e computadores utilizam o cdigo BCD, que incrementa a parte alta do byte hexadecimal quando o nmero da parte baixa maior que 9. Isto possvel somando 6 (0110b) ao resultado maior que 9. Este cdigo facilita a transmisso de dados e a compreenso do tempo, tendo em vista que em formato hexadecimal, apresenta o valor em decimal. Para transformar decimal em BCD, possvel dividir o nmero binrio (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 relgio DS1307, aps o power-on, necessrio incrementar os segundos quando estiverem todos os registros da RAM em zero. A bateria GP 3.6V garante o funcionamento do relgio e tambm o processamento do PIC16F877A. Testes indicaram que a bateria suportou o processamento e incremento automtico do relgio por cerca de sete horas sem alimentao externa.

Figura 12. 2: Registros de tempo DS1307.

[ 148 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

//PROGRAMA PARA CONFIGURAR E LER UM RELGIO RTC I2C VIA MONITOR SERIAL///////////////////// --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para emulao da comunicao serial #include <i2c_sanusb.c> Char entrada,funcao,endrtc,valorrtc1,valorrtc2; unsigned int endereco, valor,valorbcd, numquant; boolean led; /************************************************************************* **** * Converso BCD P/ DECIMAL ************************************************************************** **/ int bcd_to_dec(int valorb) { int temp; temp = (valorb & 0b00001111); temp = (temp) + ((valorb >> 4) * 10); return(temp); } /************************************************************************* **** * Converso DECIMAL p/ BCD ************************************************************************** ***/ int dec_para_bcd(unsigned int valord) { return((0x10*(valord/10))+(valord%10));//Coloca a parte alta da diviso 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 perifrico com a usb do PC while (1) { //************************************************************************ ***** if (usb_cdc_kbhit(1)) { //verifica se acabou de chegar um novo dado no buffer de recepo, depois o kbhit zerado entrada=usb_cdc_getc(); //comando o Byte recebido pela serial usb_cdc_putc,

[ 149 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if (entrada=='A') { funcao=usb_cdc_getc(); switch (funcao) //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06 ou 23 ou 15 { ////////////////////////FUNCAO 4: CONFIGURA RELGIO//////////////////////////////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 RELGIO/////////////////////Ex: A5- L o relgio e o calendrio case '5': printf(usb_cdc_putc,"\r\nA5 %2x:%2x:%2x",le_rtc(2), le_rtc(1),le_rtc(0));//BCD em hexadecimal representa o decimal printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6)); break; }}} //************************************************************************ ***** led = !led; // inverte o led de teste output_bit (pin_b7,led); delay_ms(500);

[ 150 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc } } ---------------------------------------------------------------------------------------------------------------

EXEMPLO O: PROT TIPO DAT TALOGGE ER USB DE E BAIXO C CUSTO Em muitos si istemas de e aquisio o de dado os e contro ole nece essria a medida de e algumas g grandezas fsicas, como c exem mplo, tem mperatura, presso e velocida ade, entre e outras. Ta ais grandez zas so ine erentes a a alguns fen menos fs sicos e, em m geral, sua natureza a analgic ca. Isto , trata-se t de e variveis que assum mem valore es contnuo os e reais, , diferentes s de sinais digitais que so de escontnuo os e expre essados se egundo re epresenta o binria. Comumente quando o as sada as analgi cas dos sensores s so s proces ssadas por sistemas s digitais, h a necess sidade do condicionam c mento do sinal para que os sin nais proven nientes dos s sensores s sejam adeq quados s caracterst ticas de um m converso or AD. Assiim, com o uso de um m microcontr rolador do otado de um u conver rsor interno AD para a aquisio os, o valor o de dado analgico convertido o para digital proc cessado pe elo software de cont trole de acordo com m decises l gicas base eadas em compara es ou em operaes s matemt ticas. A bateria em paralelo co om a fonte e de alimentao tem m uma gra ande relev ncia neste e projeto de e aquisio o de dados s. Alm de e evitar re eset por qu ueda de te enso, ela permite a sem desco mudana da fonte de alimen ntao da USB para a a fonte externa s onexo do o sistema. O c conversor TTL/EIA-2 232 Max23 32 utiliza ado para conexo d do mdulo o GPRS ao o sistema, cujos comandos AT s o descrito os no prxi imo tpico.

Figura 1 13. 3: Dat talogger.

[ 151 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Este sistema de aquisio 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 execuo do protocolo i2c, proveniente do oscilador RC interno de 4 MHz. (#byte OSCCON=0XFD3 //Aponta o registro do oscilador interno para configurao de 4MHz na funo Main -> OSCCON=0B01100110;).

Figura 12. 4: Comunicao 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 execuo do protocolo i2c, proveniente do //// //// oscilador interno 4 de MHz////////////////////////////////////////// //// O Watch Dog Timer (WDT) protege contra travamento do programa ///// ////////////////////////////Cabealho Padro///////////////////////////// #include <SanUSB.h> //#device ADC=8 #include ".\include\usb_san_cdc.h"// Biblioteca para comunicao serial #include <i2c_dll16sanc.c> char escravo,funcao,sensor,endrtc, valorrtc1,valorrtc2,posmeme1,posmeme2,posmeme3,posmeml1,posmeml2,posmeml3,posq uant1,posquant2; unsigned int ender, endereco, val, valor,valorbcd; unsigned int mult=2,end=0, reg, numquant; unsigned int16 hora,horadec,minuto,minutodec,segundo,segundodec,dia,diadec,mes,mesdec,ano,anodec; unsigned int16 i, j,numpose, numposl,num16,endpromext,k,puloext,bufferdia; int8 regi[2]; boolean led,ledint,flagwrite; /************************************************************************* **** * Converso BCD P/ DECIMAL *******************************************************************/ int bcd_to_dec(int valorb)
[ 152 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

} /************************************************************************* **** * Converso DECIMAL p/ BCD ***************************************************************/ int dec_para_bcd(unsigned int valord) { return((0x10*(valord/10))+(valord%10));//Coloca a parte alta da diviso 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(); //Tenso e corrente //escreve_eeprom(0,end,reg); no funciona a escrita i2c dentro da interrupo 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); }//No aceita DE JEITO NENHUM escrever na eeprom ext por interrupo do timer via i2c

int temp; temp = (valorb & 0b00001111); temp = (temp) + ((valorb >> 4) * 10); return(temp);

[ 153 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

//printf(usb_cdc_putc,"\n\rEndpromext = %lu e reg = %u \n\r, segundodec = %lu\n\r",endpromext,reg,segundodec); //Aceita imprimir via USB set_timer1(3036 + get_timer1()); }} // Conta 62.500 x 8 = 0,5s ////////////////////////////////////////////////////////////////////////////////// main() { usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico com a usb do PC OSCCON=0B01100110; //Clock interno do processador de 4MHZ setup_adc_ports(AN0_TO_AN1); //Habilita entradas analgicas - A0 A1 setup_adc(ADC_CLOCK_INTERNAL); //Configurao 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 co de guarda - resseta se travar o programa principal ou ficar em algum usb_cdc_getc(); while (1) { //************************************************************************ ***** if (flagwrite==1) {flagwrite=0; //Flag de gravao setada na interrupo 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(); //Tenso 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 no haja reset

[ 154 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

delay_ms(500); //************************************************************************ ***** if (usb_cdc_kbhit(1)) { //verifica se acabou de chegar um novo dado no buffer de recepo, //depois o kbhit zerado para prximo dado escravo=usb_cdc_getc(); //comando o Byte recebido pela serial usb_cdc_putc, if (escravo=='A') { funcao=usb_cdc_getc(); switch (funcao) //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06 ou 23 ou 15 { //************************************************************************ ***** case '4': { endrtc=usb_cdc_getc(); valorrtc1=usb_cdc_getc(); valorrtc2=usb_cdc_getc(); //Ex: A4M43 - Altera os minutos para 43 if if if if if if (endrtc=='H') { endereco=2;} (endrtc=='M') { endereco=1;} (endrtc=='S') { endereco=0;} (endrtc=='D') { endereco=4;} (endrtc=='N') { endereco=5;} (endrtc=='Y') { endereco=6;} //Escreve o endereco das horas //Escreve o endereco dos minutos //Escreve o endereco dos segundos //Escreve o endereco do dia //Escreve o endereco do mes //Escreve o endereco do ano

if (valorrtc1>='0'&&valorrtc1<='9') {numquant=(valorrtc1-0x30);} if (valorrtc2>='0'&&valorrtc2<='9') {numquant=numquant*10+(valorrtc2-0x30); valor=numquant; if if if if if if (endereco==0) (endereco==1) (endereco==2) (endereco==4) (endereco==5) (endereco==6) { { { { { { if(valor>59) if(valor>59) if(valor>23) if(valor>31) if(valor>12) if(valor>99) {valor=0;}} {valor=0;}} {valor=0;}} {valor=1;}} {valor=1;}} {valor=0;}}

//---------Converte byte hexadecimal para byte BCD decimal -------------valorbcd=dec_para_bcd(valor); //----------------------------------------------------------------------escreve_rtc(endereco,valorbcd); //Valor1 byte BCD (decimal). //printf(usb_cdc_putc,"\r\nVALOR ESCRITO = %2x\r\n",valorbcd); //printf(usb_cdc_putc,"\r\nPOSICAO = %2x\r\n",endereco);

[ 155 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

hora=le_rtc(2);minuto=le_rtc(1);segundo=le_rtc(0); printf(usb_cdc_putc,"\r\nA4%2x:%2x:%2x",hora, minuto,segundo); printf(usb_cdc_putc," %2x%2x%2x\r\n",le_rtc(4), le_rtc(5), le_rtc(6)); } break; //////////////////////FUNCAO 5: L RELGIO////////////////////////Ex: A5- L o relgio e o calendrio 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+(posmeme2if (sensor>='0' && sensor<='1') {k=(sensor-0x30);} printf(usb_cdc_putc,"Buffer Sensor %lu - Dia %lu\r\n",k,bufferdia); delay_ms(10); //puloext=((bufferdia-1)*60*6*2)+60*6*k;// Seleciona buffer de teste de tensao puloext=((bufferdia-1)*24*6*2)+24*6*k;// Seleciona buffer for(i=0; i<6; ++i) { //for(j=0; j<60; ++j) {printf(usb_cdc_putc,"%2u le_eeprom(0,puloext+(i*60+j)) );} //"%2u\n\r" para gerar grfico 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 prxima linha } break; }}} } } --------------------------------------------------------------------------------------------------------------}

0x30);}

", ",

[ 156 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

TRANSMISSO DE DADOS VIA GSM


A sigla GSM significa Global Standard Mobile ou Global System for Mobile Communications que quer dizer Sistema Global para Comunicaes Mveis. O GSM um sistema de celular digital baseado em diviso de tempo, como o TDMA, e considerado a evoluo deste sistema, pois permite, entre outras coisas, a troca dos dados do usurio entre telefones atravs do SIM Card e acesso mais rpido a servios WAP e Internet, atravs do sistema GPRS. A transmisso de dados GSM pode ser feita por: - GPRS (General Package Radio Service): uma conexo em uma rede de pacote de dados. Uma vez conectado nessa rede, o sistema estar sempre on line, podendo transferir dados imediatamente. O GPRS compatvel com o protocolo de rede TCP/IP e as operadoras de GSM disponibilizam um gateway para a Internet, possibilitando conectar e controlar equipamentos wireless atravs da Internet. Como o GPRS baseado no protocolo IP, ele necessita de autenticao de um servidor da internet. - SMS (Short Message Service): o servio de envio/recebimento de pequenas mensagens de texto do tipo datagrama, sem autenticao de um servidor de internet. Os Modems GSM so controlados atravs de comandos AT. Esses comandos so normalizados pelas normas GSM 07.07 e GSM 07.05. A manipulao do modem pode ser realizada em algum emulador de comunicao serial como o Hyperterminal, nele deve-se ajustar para 9600 bps,e no 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 +CMGS +CMSS +CMGW +CMGD +CMGC +CMMS Significado Envia mensagem Envia uma mensagem armazenada Escreve uma mensagem na memria Apaga mensagem Envia comando Envia mais mensagens

Exemplo feito com um computador: 1-AT 2-OK 3- AT+CMGF=1 4- OK

[ 157 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

5-AT+CMGS="+558588888888" //<ctrl + z (minsculo)> digita-se o texto aps > 6-> Teste de mensagem 7- OK +CMGS: 170 OK Abaixo est o significado de cada linha: 1- Testa conexo com o modem. 2- Modem conectado. 3- Coloca o celular no modo texto. 4- Modo texto confirmado. 5- Nmero 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 +CNMI +CMGL +CMGR +CNMA

Significado New message indications Lista mensagens L menssagens 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 esto em negrito para diferenciar de suas respostas.

[ 158 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

1-AT 2-OK 3- AT+CM MGF=1 4- OK 5-AT+CM MGS="+55 58588888 8888" 6->Intrus so 7- OK As figu uras abaix xo apresen ntam a fot to em pro otoboard e o circuit to esquem mtico para a transmiss o GPRS/G GSM. A conexo c U USB observado no esquema a, foi utili izada pela a ferramenta a SanUSB para a alim mentao d do circuito o e grava o do prog grama no PIC P atravs s do PC. O LED verde e foi usado por esta a ferramen nta para sinalizar o momento em que o sistema es stava no modo m de gravao. O vermelho simulou o acioname ento do alarme, como o descrito a anteriormen nte. As ch haves cone s ectadas aos pinos 23, 24 e 25, representam as chaves sin nalizadoras s dos trs sensore s utilizado os. A figu ura abaixo o mostra tambm t o dispositivo o MAX232 usado na interface RS/EIA-23 32 entre o microcont trolador e o modem. Este, repre esentado na n figura apenas a pello conector DB9, pos ssui o pino o 2 para tr ransmisso o de dados e o 3 par ra recep o, j que se trata de um equipamento o do tipo DCE (Data ta Comunicat tion Equipm ment).

[ 159 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 14. 1: Esque emtico e foto do datalogge d er conecta ado ao PIC. #include < <SanUSB.h h> short int l ledpisca; #USE RS2 232 (BAUD=9600,XMIT=PIN_C6 6,RCV=PIN N_C7,strea am=PC) main(){ clock_int_4 4MHz(); printf("AT+ +CMGF=1\ \r"); //configura mod do texto pa ara o mode em !ledpisca; // / ledpisca igual ao o inverso de ledpisca ledpisca=! output_bit t(pin_b7,le edpisca); // / b7 recebe e o valor de ledpisca delay_ms( (2000); printf("AT+ +CMGS=\" "+5585888 888888\"\r r"); //5- En nvia para o numero d de destino ledpisca=! !ledpisca; output_bit t(pin_b7,le edpisca); delay_ms( (2000); do\r"); //6 - escreve a mensage em para o modem GS SM printf("Alarme atuad putc(0x1A A); // contro ol z

[ 160 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

ledpisca=!ledpisca; output_bit(pin_b7,ledpisca); delay_ms(2000); putc(0x0D); while(TRUE){ output_high(pin_B7); delay_ms(500); output_low(pin_B7); delay_ms(500); }}

O PROTOCOLO MODBUS EMBARCADO


O protocolo Modbus foi desenvolvido pela Modicon Industrial Automation Systems, hoje Schneider, para comunicar um dispositivo mestre com outros dispositivos escravos. Embora seja utilizado normalmente sobre conexes seriais padro EIA/RS-232 e EIA/RS485, ele tambm pode ser usado como um protocolo da camada de aplicao de redes industriais tais como TCP/IP sobre Ethernet. Este talvez o protocolo de mais utilizado em automao industrial, pela sua simplicidade e facilidade de implementao. A motivao 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 resoluo de 10 bits; - Ferramentas de desenvolvimento gratuitas e possibilidade de programao da memria de programa sem necessidade de hardware adicional, bastando uma porta USB; - Estudo das caractersticas construtivas de hardware e de software de uma rede MODBUS. MODELO DE COMUNICAO O protocolo Modbus baseado em um modelo de comunicao mestre-escravo, onde um nico dispositivo, o mestre, pode iniciar transaes denominadas queries. O demais dispositivos da rede (escravos) respondem, suprindo os dados requisitados pelo mestre ou executando uma ao por ele comandada. Geralmente o mestre um sistema supervisrio e os escravos so controladores lgico-programveis. Os papis de mestre e escravo so fixos, quando se utiliza comunicao serial, mas em outros tipos de rede, um dispositivo pode assumir ambos os papis, embora no simultaneamente.

[ 161 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figu ura 14. 1: : Checage em de dad dos. DETEC O DE ERR ROS H dois meca anismos para detec o de err ros no pro otocolo Mo odbus serial: bits de e paridade e em cada ca aractere e o frame ch heck seque ence ao fin nal da men nsagem. O modo RTU U utiliza com mo frame check seq quence um m valor de 16 bits para p o CR RC (ciclic redundance r e 16 15 1 2 check), utilizando co omo polin mio, P(x) = x + x + x + 1. 1 O registr ro de clcu ulo do CRC C deve ser in nicializado com o valor 0xffff. MODOS DE D TRANS SMISSO Exis stem dois s modos de transm misso: ASCII A (American Co ode for Information n Interchang ge) e RTU (Remote Terminal T U Unit), que so selecio onados du urante a co onfigurao o dos parm metros de comunica c o. Com mo a comu unicao ge eralmente utilizada em e automao indust trial em modo m RTU, o projeto p proposto fo oi desenvo olvido nesta a forma de e comunica ao.

A implementao prtica p de um proj eto com o modbus s embarca ado mo ostrada no o diagrama d de blocos abaixo.

[ 162 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura a 14. 2: Diagrama D de blocos comunicao Mo odBus. Para a testar a comunica ao com escravo Modbus M (m microcontro olador) em m protocolo o RTU, atrav vs da por rta serial emulada e pe ela USB do o PC, po ossvel utiliz zar o Modbus Tester que um software livre de Mestre M MOD DBUS escr rito em C+ ++. Ele pod de ser util lizado para a testar se o desenvolvimento das d rotinas s de proce essamento do protoc colo Modbu us contidas s no microcontrolador r. Durante o teste possvel utilizar u tam mbm um sistema supervisrio o real como o Elipse SCADA.

Figura a 14. 3: So oftware d de teste de d comunicao Mo odBus. Os sistemas supervisr rios so so oftwares que q permit tem que s sejam mon nitoradas e rastreadas s informa es de um processo produtivo ou instala o fsica. T Tais inform maes so o coletadas atravs de e equipam mentos de aquisio de dados s e, em se eguida, ma anipuladas, analisadas s, armazen nadas e posteriorm mente apr resentadas ao usu rio. Estes s sistemas s tambm s o chamad dos de SCA ADA (Super rvisory Con ntrol and Data D Aquisiition).

[ 163 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Para comunicar com o supervisrio Elipse necessrio instalar um driver dedicado a comunicao ModBus RTU, que fornecido gratuitamente pela prpria Elipse. O modo Modbus RTU com microcontrolador PIC desse projeto, mostrado no link http://www.youtube.com/watch?v=KUd1JkwGJNk , suporta funes de leitura (3) e escrita (16). --------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao serial #byte port_a = 0xf80 #byte port_b = 0xf81 long int checksum = 0xffff; unsigned int x,i,y,z; unsigned char lowCRC; unsigned char highCRC; int tamanhodata; int32 buffer[100]; void CRC16 (void) //Modo RTU { for (x=0; x<tamanhodata; x++) { checksum = checksum^(unsigned int)buffer[x]; for(i=8;i>0;i--) { if((checksum)&0x0001) checksum = (checksum>>1)^0xa001; else checksum>>=1; } } highCRC = checksum>>8; checksum<<=8; lowCRC = checksum>>8; buffer[tamanhodata] = lowCRC; buffer[tamanhodata+1] = highCRC; checksum = 0xffff; } void ler (void) { buffer[2]=usb_cdc_getc(); buffer[3]=usb_cdc_getc(); buffer[4]=usb_cdc_getc(); buffer[5]=usb_cdc_getc(); buffer[6]=usb_cdc_getc(); buffer[7]=usb_cdc_getc(); delay_ms(3);

[ 164 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

buffer[2]=0x02; buffer[3]=0x00; buffer[4]=port_a; //o buffer[4] leva o valor de entrada da porta A do microcontrolador para o SCADA tamanhodata = 5; CRC16(); } void rxler (void) //Leu a porta a no buffer[4] e escreve o CRC no buffer[5] e [6], pois tamanhodata = 5 { printf(usb_cdc_putc,"%c%c%c%c%c%c%c",buffer[0],buffer[1],buffer[2],buffer[3],buffer[ 4],buffer[5],buffer[6]); // 6 bytes } void escrever (void) { buffer[2]=usb_cdc_getc(); buffer[3]=usb_cdc_getc(); buffer[4]=usb_cdc_getc(); buffer[5]=usb_cdc_getc(); buffer[6]=usb_cdc_getc(); buffer[7]=usb_cdc_getc(); buffer[8]=usb_cdc_getc(); buffer[9]=usb_cdc_getc(); buffer[10]=usb_cdc_getc(); delay_ms(3); tamanhodata = 6; CRC16(); port_b = buffer[8]; //A porta B do microcontrolador recebe o valor enviado pelo SCADA } void rxescrever (void) { printf(usb_cdc_putc,"%c%c%c%c%c%c%c%c",buffer[0],buffer[1],buffer[2],buffer[3],buff er[4],buffer[5],buffer[6],buffer[7]); //7 bytes } main() { clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico com a usb do PC set_tris_b(0b00000000); while(1)

[ 165 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

if (usb_cdc_kbhit(1)) { //verifica se acabou de chegar um novo dado no buffer USB, depois o kbhit zerado para prximo 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 funo contida no segundo byte buffer[1] } if (y==3) //verifica se a funo para leitura e encaminha para leitura de varivel do microcontrolador { y = buffer[1];

ler(); rxler();

if (y==16) //verifica se a funo para escrita no microcontrolador, ou seja, comando de atuao do uC { escrever(); rxescrever(); } } } }

--------------------------------------------------------------------------------------------------------------O fluxograma desse firmware mostrado abaixo:

[ 166 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Figura 14 4. 4: Flux xograma d do sistema de comunicao o ModBus. . Not te que a co omunicao o serial des o foi emula ada via USB B, para ap plicao em m sse projeto um proces sso real necessrio n utilizar um m transcept tor ou TTL L/EIA-232 ( (MAX232) ou transcepto or ou TTL/E EIA-485 (M MAX485). C Com o MOD DBUS emb barcado p possvel int tegrar um microcontr rolador, pr reservando o as limita es de fun nes, em um proces sso de auto omao industrial q que utiliza esse proto ocolo. INTRODU UO SISTEMAS S S OPERAC CIONAIS EM E TEMPO REAL (R RTOS) Um sistem ma operacio onal em te empo real (RTOS) um progr rama (gera almente ch hamado de e kernel), qu ue controla a aloca o de tare efas quand do o proce essador es st operando em um m ambiente multitarefa as (multita asking) con correntes. O uso de d um sist tema opera acional em m tempo real (RTOS) para proc cessamento o de multita arefas uma realidade cada a vez ma ais presente nos pr rojetos de e sistemas s embarcado os. A fe erramenta computa acional Sa anUSB im mplementa a um RT TOS livre, desenvolvi ido pelo russo Victo or Timofee ev, atravs s dos compiladores M MPLABX C18 C e CCS, baseado e em interrup po de tem mporizador res.

[ 167 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

Uma das principais cara actersticas s de um RT TOS a ca apacidade de proces ssar tarefas s tes, ou se eja, tarefas s paralelas s. Dessa forma, o RTOS R torna a a progra amao de e concorrent projetos r reais mais simples, pois basta a descreve er cada ta arefa em u uma fun o task do o firmware, que o RTO OS se enca arrega do gerenciam mento do processo. D Dessa forma, O RTOS S baseado o na ideia de d multitar refas (mult tithread), onde cada a tarefa u uma fun o em C do o firmware e em lao inf finito. Em um sistem ma multitar refa, inme eras tarefa as exigem tempo da CPU, e um ma vez que e existe ape enas uma CPU, ne ecessria a alguma for rma de organizao e coorden nao pelo o RTOS para a que cada a tarefa te enha o tem mpo que ne ecessita. Na N prtica, cada tare efa tem um m intervalo d de tempo muito cur rto, assim parece que as tare efas so e executadas s de forma a paralela e simultnea a. Com mo ex xemplo, esto dispon nveis uma vdeo-aula em m http://www w.youtube e.com/watc ch?v=s6BG G8ZN0aDk as em m e os programa https://dl.dropbox.co om/u/1019 922388/RT TOSB.zip pa ara os com mpiladores CCS e MP PLABX C18. As duas prticas des scritas aba aixo de RT TOS foram desenvolvidas com a placa Sa anUSB, que e ser c construda os o tut toriais disponve eis em m pode seguiindo https://dl.dropbox.co om/u/1019 922388/12 1007SanUSBOrig.zip . Prtica 1: Nesta pr rtica o RT TOS execu uta em paralelo 3 ta arefas conc correntes e paralelas s em loop infinito pa ara aciona ar 3 leds, conectados nos pinos B7, B B6 e B5, de forma a independe ente. Prtica 2: Nesta pr tica o RTO OS executa a em paral lelo: 1Tare efa de leitu ura do AD com poten ncimetro para modificar a velo ocidade de e brilho dos s leds; 2Tare efa de rota ao de oit to leds na porta B; e 3Tare efa que in nverte o sentido s de rotao dos d leds por p boto no pino 1 (PIN_E3) ) utilizando display de sete segm mentos com mo leds.

OBS: Dentro de cad da projeto o necess rio inserir o cabe alho OSAc cfg.h, com mo descrito o abaixo, q que deve in ndicar a quantidade de tarefas s e as caractersticas s do proje eto como a prioridade das tarefa as.
#ifndef _OS SACFG_H #define _OS SACFG_H _TASKS 3 #define OS_ #define OS_ _DISABLE_PR PRIORITY

[ 168 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

#define OS_ _ENABLE_TT TIMERS

Qua ase todos os sistema as baseado os em mic crocontrola adores exe ecutam ma ais de uma a atividade e trabalha am em tem mpo real. Por exem mplo, um sistema s de e monitora amento da a temperatu ura com mposto de trs taref fas que, normalmente, que se repete e aps um m pequeno in ntervalo de e tempo, a saber: - Tarefa 1 l a tempe eratura; - Tarefa 2 Formata o valor da temperatu t ra; emperatura a; - Tarefa 3 exibe a te MQUINA AS DE EST TADO As mquinas de estado so sim mples cons strues usadas u par ra executa ar diversas s atividades, geralmen nte em um ma sequnc cia. Muitos sistemas da d vida rea al que se enquadram e m nesta cate egoria. Po or exemplo o, o funciionamento o de uma mquina de lavar roupa ou u mquina d de lavar loua facil lmente des scrito com uma mq quina de es stado de construo c . Talvez o m mtodo ma ais simples s de imple ementar um ma mquin na de esta ado em C usar um m switch-cas se. Por ex xemplo, no osso siste ma de monitoramento de te emperatura a tem trs s tarefas, no omeado Ta arefa 1, Tarefa 2, Tar refa 3 e, co omo mostr rado na Fig gura abaixo.

Figu ura 15. 1: : Impleme entao de d mquin na de esta ado. A m mquina de d estado executa as trs ta arefas usa ando decla araes sw witch-case. O estado inicial 1, inc crementad o a cada a tarefa do d Estado o para se elecionar o prximo estado a se er executad do. O ltim mo estado seleciona o estado 1 1, e h um m atraso no o final do s switch-cas se. A mq quina de estado executad da continu uamente no n interior de um lao o infinito.

[ 169 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

F Figura 15. . 2: Mquina de est tado implementad da em Ling guagem C. C Em muitas ap plicaes, os o estados s no precisam ser executados e s em seq ncia. Pelo o contrrio, o prximo o estado selecionad do direto pelo p estado o atual ou baseado em e alguma a condio.

Figura 15. 3: Selecion nando o p prximo estado e a partir p do e estado at tual.


[ 170 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

O RTOS tambm m o respo onsvel por r decidir o agendame ento (sche eduling) da sequncia a as a serem m executa adas consiiderando os o nveis de priorid dade ou pelo p tempo o das tarefa mximo de e execuo o de cada tarefa. t

UTILIZ ZANDO O COPILA C ADOR C18 E A IDE MPLABX M X MUL LTIPLAT TAFORM MA COM M FUN ES EM PORT TUGUS
1) Inst tale o MPL LABX e o co ompilador C18. pos ssvel baixa ar gratuita mente o MPLABX M ea vers so C1 18 Lite e para a o sistema operac cional desejado o

(htt tp://www.m microchip.com/page ehandler/en-us/fam mily/mplab bx/#downlo oads)


2) Para compilar r os progra amas com o C18 e o SanUSB, basta b abrir o Projeto1 1C18.X em m http ps://dl.dropbox.com/ /u/1019223 388/ProjSa anUSB1_MPLABX/Pro ojeto1C18.X X.zip . Tod dos ess ses prog gramas esto disponve eis no Grupo SanUSB B (ww ww.tinyurl.com/Sa anUSB).

Dep pois de instalado possv el abrir o projeto MPLAX c clicando em Open n projec ct e escolh her o proje eto Projeto o1C18.X. possvel visualizar o program ma com um m duplo c clique sobr re pisca.c. Para comp pilar press sione Build d and Clean n (cone co om martelo o
e vasso oura). Par ra compilar outros p programas. .c basta modifica-lo m os ou cri-los com a extens o .c dentr ro da mesm ma pasta d do projeto Projeto1C C18.X.

Fig gura 16. 1: 1 Projeto o pisca LED D no com mpilador C C18.

[ 171 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

FUNES EM PORTUGUS Este captulo descreve todas as funes em portugus da biblioteca SanUSB no C18. importante salientar que alm dessas funes, so vlidas as funes padres ANSI C e tambm as funes do compilador C18 detalhadas na pasta instalada C:\MCC18\doc. A fim de facilitar o entendimento, as funes SanUSB foram divididas em oito grupos, definidos por sua utilizao e os perifricos do hardware que esto relacionadas.

FUNES BSICAS DA APLICAO DO USURIO Este grupo de funes define a estrutura do programa uma vez que o usurio deve escrever o programa.c de sua aplicao. O microcontrolador possui um recurso chamado watchdog timer (wdt) que nada mais do que um temporizador co-de-guarda contra travamento do programa. Caso seja habilitado habilita_wdt() na funo 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() no for zerada, ele provoca um reset do microcontrolador e conseqentemente a reinicializao do programa. A aplicao deve permanentemente zerar a flag limpa_wdt() dentro do lao infinito (while(1)) na funo principal main() em intervalos de no mximo 16 segundos. Este recurso uma segurana contra qualquer possvel falha que venha travar o programa e paralisar a aplicao. Para zerar o wdt, o usurio pode tambm utilizar a funo ClrWdt() do compilador C18. A seguir esto as caractersticas detalhadas destas funes. clock_int_4MHz() Funo: Habilita o clock para a processador do oscilador interno de 4MHz. Argumentos de entrada: No h. Argumentos de sada: No h. Observaes: O clock padro proveniente do sistema USB interno do PIC de 48MHz gerado a partir do cristal de 20 MHz. Isto possvel atravs de um multiplicador interno de clock do PIC. A funo _int_4MHz() habilita, para o processador do microcontrolador, o oscilador RC interno em 4 MHz que adqua o perodo de incremento dos temporizadores em 1us. aconselhvel que seja a primeira declarao da funo principal main(). Exemplo: #include SanUSB1.h void main (void) { clock_int_4MHz(); nivel_alto()

[ 172 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Funo: Fora nvel lgico alto (+5V) em uma sada digital. Argumentos de entrada: Nome da sada digital que ir para nvel lgico alto. Este nome construdo pelo inicio pin_ seguido da letra da porta e do nmero do pino. Pode ser colocado tambm o nome de toda a porta, como por exemplo, portb. Argumentos de sada: No h. Observaes: No h. Exemplo: nivel_alto(pin_b7); //Fora nvel lgico 1 na sada do pino B7 nivel_alto(portb); //Fora nvel lgico 1 em toda porta b nivel_baixo() Funo: Fora nvel lgico baixo (0V) em uma sada digital. Argumentos de entrada: Nome da sada digital que ir para nvel lgico baixo. Este nome construdo pelo inicio pin_ seguido da letra da porta e do nmero do pino. Pode ser colocado tambm o nome de toda a porta, como por exemplo, portc. Argumentos de sada: No h. Observaes: No h. Exemplo: nivel_baixo(pin_b7); //Fora nvel lgico 0 na sada do pino B7 nivel_baixo(portc); //Fora nvel lgico 0 em toda porta c sada_pino(pino,booleano) Funo: Acende um dos leds da placa McData. Argumentos de entrada: Pino que ir receber na sada o valor booleano, valor booleano 0 ou 1. Argumentos de sada: No h. Observaes: No h. Exemplo: ledpisca=!ledpisca; saida_pino(pin_b0,ledpisca); tempo_us() Funo: Tempo em mltiplos de 1us. Argumentos de entrada: Tempo de delay que multiplica 1 us. Argumentos de sada: No h. Observaes: Esta instruo s finalizada ao final do tempo determinado, ou seja, esta funo paralisa a leitura do programa durante a execuo. Exemplo: tempo_us(200); //Delay de 200 us // ledpisca igual ao inverso de ledpisca // b0 recebe o valor de ledpisca

[ 173 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

tempo_ms() Funo: Tempo em mltiplos de 1 ms. Argumentos de entrada: Tempo de delay que multiplica 1 ms. Argumentos de sada: No h. Observaes: Esta instruo s finalizada ao final do tempo determinado, ou seja, esta funo paralisa a leitura do programa durante a execuo. Exemplo: tempo_ms(500); entrada_pin_xx Funo: L nvel lgico de entrada digital de um pino. Argumentos de entrada: No h. Observaes: Este nome construdo pelo inicio entrada_pin_ seguido da letra da porta e do nmero do pino. Exemplo: ledXOR = entrada_pin_b1^entrada_pin_b2; pinos b1 e b2 habilita_interrupcao() Funo: Habilita as interrupes mais comuns do microcontrolador na funo main(). Argumentos de entrada: Tipo de interrupo: timer0, timer1, timer2, timer3, ext0, ext1, ext2, ad e recep_serial. Argumentos de sada: No h. Observaes: As interrupes externas j esto habilitadas com borda de descida. Caso se habilite qualquer interruo deve-se inserir o desvio _asm goto interrupcao _endasm na funo void _high_ISR (void){ } da biblioteca SanUSB.h Exemplo: habilita_interrupcao(timer0); habilita_interrupcao(ext1); if(xxx_interrompeu) Funo: Flag que verifica, dentro da funo de tratamento de interrupes, se uma interrupo especfica ocorreu. Complemento: timer0, timer1, timer2, timer3, ext0, ext1, ext2, ad e serial. Argumentos de sada: No h. Observaes: A flag deve ser zerada dentro da funo de interrupo. Exemplo: #programa interrupt interrupcao void interrupcao() { if (ext1_interrompeu) //OU Exclusivo entre as entradas dos //Delay de 500 ms

//espera a interrupo externa 1 (em B1)

[ 174 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

ext1_interrompeu = 0; //limpa a flag de interrupo PORTBbits.RB0 =! PORTBbits.RB0;} //inverte o LED em B0 if (timer0_interrompeu) { //espera o estouro do timer0 timer0_interrompeu = 0; //limpa a flag de interrupo PORTBbits.RB0 =! PORTBbits.RB0; //inverte o LED em B7 tempo_timer16bits(0,62500); } } liga_timer16bits(timer,multiplicador) Funo: Liga os timers e ajusta o multiplicador de tempo na funo main(). Argumentos de entrada: Timer de 16 bits (0,1ou 3) e multiplica que o valor do prescaler para multiplicar o tempo. Argumentos de sada: No h. Observaes: 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) Funo: 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 mximo 65536). Argumentos de sada: No h. Observaes: O No 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() Funo: Habilita o temporizador co-de-guarda contra travamento do programa. Argumentos de entrada: No h. Argumentos de sada: No h. Observaes: O wdt inicia como padro sempre desabilitado. Caso seja habilitado na funo 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() no for zerada, ele provoca um reset do microcontrolador e conseqentemente a reinicializao do programa. Exemplo: #include SanUSB1.h

[ 175 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

void main (void) { clock_int_4MHz();

habilita_wdt();

//Habilita o wdt

limpaflag_wdt() Funo: limpa a flag do wdt Argumentos de entrada: No h. Argumentos de sada: No h. Observaes: Caso o wdt seja habilitado, a flag deve ser limpa em no mximo 16 segundos para que no haja reinicializao do programa. Geralmente esta funo colocada dentro do lao infinito while(1) da funo principal main(). possvel ver detalhes no programa exemplowdt.c e utilizar tambm a funo ClrWdt() do compilador C18 . Exemplo: #include SanUSB1.h void main (void) { clock_int_4MHz(); while(1) { limpaflag_wdt(); ..... ..... tempo_ms(500); } escreve_eeprom(posio,valor) Funo: Escrita de um byte da memria EEPROM interna de 256 bytes do microcontrolador. Argumentos de entrada: Endereo da memria entre 0 a 255 e o valor entra 0 a 255. Argumentos de sada: No h. Observaes: O resultado da leitura armazenado no byte EEDATA. Exemplo: escreve_eeprom(85,09); //Escreve 09 na posio 85 le_eeprom() Funo: Leitura de um byte da memria EEPROM interna de 256 bytes do microcontrolador. Argumentos de entrada: Endereo da memria entre 0 a 255. Argumentos de sada: No h. Observaes: O resultado da leitura armazenado no byte EEDATA. Exemplo: dado=le_eeprom(85);

habilita_wdt();

[ 176 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

FUNES DO CONVERSOR ANALGICO DIGITAL (A/D) As funes a seguir so utilizadas para a aquisio de dados utilizando as entradas analgicas. habilita_canal_AD() Funo: Habilita entradas analgicas para converso AD. Argumentos de entrada: Nmero do canal analgico que ir ser lido. Este dado habilita um ou vrios 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 sada: No h. Observaes: No h. Exemplo: habilita_canal_AD(AN0); //Habilita canal 0 le_AD8bits() Funo: Leitura de uma entrada analgica com 8 bits de resoluo. Prototipagem: unsigned char analog_in_8bits(unsigned char). Argumentos de entrada: Nmero do canal analgico que ir ser lido. Este nmero pode ser 0, 1 , 2 , 3, 4, 8, 9, 10, 11 ou 12. Argumentos de sada: Retorna o valor da converso A/D da entrada analgica com resoluo de 8 bits. Observaes: No h. Exemplo: PORTB = le_AD8bits(0); //L canal 0 da entrada analgica com resoluo de 8 bits e coloca na porta B le_AD10bits() Funo: Leitura de uma entrada analgica com 8 bits de resoluo. Prototipagem: unsigned char analog_in_8bits(unsigned char). Argumentos de entrada: Nmero do canal analgico que ir ser lido. Este nmero pode ser 0, 1 , 2 , 3, 4, 8, 9, 10, 11 ou 12. Argumentos de sada: Retorna o valor da converso A/D da entrada analgica com resoluo de 10 bits. Observaes: No h. Exemplo: resultado = le_AD10bits(0);//L canal 0 da entrada analgica com resoluo de 10 bits

[ 177 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

FUNES DA COMUNICAO SERIAL RS-232 As funes a seguir so utilizadas na comunicao serial padro RS-232 para enviar e receber dados, definir a velocidade da comunicao com o oscilador interno 4MHz. As configuraes da comunicao so: sem paridade, 8 bits de dados e 1 stop bit. Esta configurao denominada 8N1 e no pode ser alterada pelo usurio. taxa_serial(); Funo: Configura a taxa de transmisso/recepo (baud rate) da porta RS-232 Argumentos de entrada: Taxa de transmisso/recepo em bits por segundo (bps) Argumentos de sada: No h. Observaes: O usurio deve obrigatoriamente configurar taxa_rs232() da comunicao assncrona antes de utilizar as funes le_serial e escreve_serial. As taxas programveis so 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(); Funo: L o primeiro caractere recebido que est no buffer de recepo RS-232. Argumentos de entrada: No h. Argumentos de sada: No h. Observaes: Quando outro byte recebido, ele armazenado na prxima posio livre do buffer de recepo, 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') escreve_serial(); Funo: Transmite um byte pela RS-232. Argumentos de entrada: O dado a ser transmitido deve ser de 8 bits do tipo char. Argumentos de sada: No h. Observaes: A funo escreve_serial no aguarda o fim da transmisso do byte. Como no existe um buffer de transmisso o usurio deve garantir a transmisso com a funo

{ c -= '0';

PORTB = c;} }}

[ 178 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

envia_byte( ) para enviar o prximo 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 funo 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 aplicao da funo OU Exclusivo e NOT #include <SanUSB1.h> #pragma interrupt interrupcao void interrupcao() {} short int ledXOR, ledpisca; void main(void){ clock_int_4MHz();

[ 179 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

while(1) { ledXOR = entrada_pinb1^entrada_pinb2; //OU exclusivo entre os pinos b1 e b2 ->input saida_pino(pin_b7,ledXOR); ledpisca=!ledpisca; saida_pino(pin_b0,ledpisca); tempo_ms(500); } } //O pino B7 recebe o valor de LedXOR // ledpisca igual ao inverso de ledpisca // b0 recebe o valor de ledpisca

//3- Utiliza a interrupo 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 interrupo 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 interrupo PORTBbits.RB7 =! PORTBbits.RB7; //Pisca o LED em B7 tempo_timer16bits(3,50000); } if (ext1_interrompeu) { //espera a interrupo externa 1 (em B1) ext1_interrompeu = 0; //limpa a flag de interrupo PORTBbits.RB0 =! PORTBbits.RB0; //altera o LED em B0 tempo_ms(100); } //Delay para mascarar o ruido do boto(Bouncing) } void main() { clock_int_4MHz(); TRISB = 0b01111110;

//B0 e B7 como Sada

habilita_interrupcao(timer0); liga_timer16bits(0,16); //liga timer0 - 16 bits com multiplicador (prescaler) 8 tempo_timer16bits(0,62500); //Conta 16 x 62500us = 1 seg. habilita_interrupcao(timer3); liga_timer16bits(3,8); //liga timer1 - 16 bits com multiplicador (prescaler) 8 tempo_timer16bits(3,50000); //Conta 8 x 50000us = 0,4 seg.

[ 180 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

habilita_interrupcao(ext1); while(1); }

// habilita a interrupo externa 1 com borda de descida

//4- Programa que utiliza o wdt, reseta em 16 seg. se a limpaflag_wdt() no for limpa #include <SanUSB1.h> #pragma interrupt interrupcao void interrupcao() {} void main(){ clock_int_4MHz(); habilita_wdt(); // Se a flag wdt no 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 funo 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 sada habilita_canal_AD(AN0); while(1){ PORTB = le_AD8bits(0);//L canal 0 da entrada analgica com resoluo de 8 bits e coloca na porta B escreve_eeprom(endprom, PORTB);

[ 181 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

resultado = le_AD10bits(0);//L canal 0 da entrada analgica com resoluo 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 interrupo serial por recepo de caractere e interrupo 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 interrupo PORTBbits.RB7 =! PORTBbits.RB7; //Inverte o LED em B7 tempo_timer16bits(0,62500); } } } void main() { clock_int_4MHz(); TRISB = 0b01111110;

//B0 e B7 como Sada

habilita_interrupcao(recep_serial); taxa_rs232(9600); habilita_interrupcao(timer0); liga_timer16bits(0,16); //liga timer0 - 16 bits com multiplicador (prescaler) 16 tempo_timer16bits(0,62500); //Conta 16 x 62500us = 1 seg. putrsUSART ( (const far rom char *) "\n\rDigite um numero de 0 a 9!\n\r");

[ 182 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

escreve_rs232(PORTC); //escreve valor da PORTC while (envia_byte()); escreve_rs232('A'); // escreve A while (envia_byte()); while(1); }

7 - Abaixo mostrado um programa com a configurao para a interrupo do timer 0, em que pisca alera o estado de um LED a cada 0,5 segundo no pino B7 e tambm a interrupo externa 1 (com pull-up externo no pino B1) em que muda e estado de outro LED no pino B0. Em seguida so mostrados os registros de configurao do timer 0 e das interrupes.

#include <SanUSB1.h> #pragma interrupt interrupcao void interrupcao() { if (INTCONbits.TMR0IF) { //espera o estouro do timer0 INTCONbits.TMR0IF = 0; //limpa a flag de interrupo 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 interrupo externa 1 (em B1) INTCON3bits.INT1IF = 0; //limpa a flag de interrupo PORTBbits.RB0 =! PORTBbits.RB0; } //altera o LED em B0 delay_ms(100); //Delay para mascarar o ruido do boto(Bouncing) } void main() { clock_int_4MHz(); TRISB = 0b01111110; RCONbits.IPEN = 1; INTCONbits.GIEH = 1; INTCONbits.TMR0IE = 1; T0CON = 0b10000010; interno INTCON3bits.INT1IE = 1; INTCON2bits.INTEDG1 = 0; borda de descida while (1); }

//B0 e B7 como Sada //apenas interrpes de alta prioridade (desvio 0x808) //Habilita interrupes de alta prioridade (0x808) // habilita a interrupo do TMR0 //setup_timer0 - 16 bits com prescaler 1:8 e oscilador // habilita a interrupo externa 1 (pino B1) // habilita que a interrupo externa 1 ocorra somente na

[ 183 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

RCONbits.IPEN = 1;

INTCONbit ts.GIEH = 1;

INTCONbit its.TMR0IE E = 1;

// / habilita a interrup o do TMR R0

//Habilita / in nterrupe es de alta prioridade p (0x808)

INTCON2b bits.INTEDG DG1 = 0; descida

// habilit ita que a interrupo in o externa 1 ocorra na borda de e

INTCON3b bits.INT1IE E = 1;
INTCON3b bits. INT1IF = 0;

// habilita a interrup o externa a1 { //espera o estouro do d timer0


//lim mpa a flag de d interrup po

if (INTCO ON3bits.INT NT1IF)

[ 184 ]

Aplicaes prticas p de Eletr rnica e microco ontroladores em m sistemas comp putacionais, por r Sandro Juc

T0CON = 0b10000010; interno

//se etup_timer r0 - 16 bits s com pres scaler 1:8 e oscilador

INTCON3b bits.INT1IE E = 1;
INTCON3b bits. INT1IF = 0;

// habilita a interrup o externa a1 { //espera o estouro do d timer0


//lim mpa a flag de d interrup po

if (INTCO ON3bits.INT NT1IF)

T0CON = 0b10000010; interno

//se etup_timer r0 - 16 bits s com pres scaler 1:8 e oscilador

[ 185 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

APNDICE I: CABEALHOS DIVERSOS COMPILADORES


CCS C Compiler

DA

FERRAMENTA

PARA

#include <18F4550.h> //This library 18F4550.h is valid for the whole family USB PIC18Fx5xx #device ADC=10 #fuses HSPLL,PLL5, USBDIV,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG #byte OSCCON=0XFD3 #use delay(clock=48000000)// USB standard frequency (cpu and timers 12 MIPS = 4/48MHz) //#use delay(clock=4000000) // internal Oscillator Clock of 4MHz #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7) //SanUSB program memory allocation #define CODE_START 0x1000 #build(reset=CODE_START, interrupt=CODE_START+0x08) #org 0, CODE_START-1 {}

void clock_int_4MHz(void) { //OSCCON=0B01100110; //with dual clock -> cpu and timers #use delay(clock=4000000) while(read_eeprom(0xfd)); }

C18 compiler

/* www.tinyurl.com/SanUSB

*/

[ 186 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#include "p18F4550.h" void low_isr(void); void high_isr(void);

#pragma code low_vector=0x1018 void interrupt_at_low_vector(void) { _asm GOTO low_isr _endasm } #pragma code #pragma code high_vector=0x1008 void interrupt_at_high_vector(void) { _asm GOTO high_isr _endasm } #pragma code

#pragma interruptlow low_isr void low_isr (void) { return; }

[ 187 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

#pragma interrupt high_isr void high_isr (void) { return; } void main( void ) { ...; }

SDCC
Example Format

/* www.tinyurl.com/SanUSB #include <pic18f4550.h>

*/

#pragma code _reset 0x001000 void _reset( void ) __naked { __asm EXTERN __startup goto __startup __endasm;

[ 188 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

} #pragma code _high_ISR 0x001008 void _high_ISR( void ) __naked { __asm retfie __endasm; } #pragma code _low_ISR 0x001018 void _low_ISR( void ) __naked { __asm retfie __endasm; } void main() { }

MikroC
Example Format for Bootloader

/* www.tinyurl.com/SanUSB #pragma orgall 0x1000 void interrupt(void) org 0x1008 { ;

*/

[ 189 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

} void interrupt_low(void) org 0x1018 { ; } void main() { ......; }

Hi-Tech C Compiler
step1:goto Build option step2:linker tap step3:set offset : 1000

Microchip ASM compiler

/* www.tinyurl.com/SanUSB

*/

processor PIC18F4550 #include"p18f4550.inc" org 0x1000 goto init org 0x1020 goto int_isr init ... ; initialization

[ 190 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

loop ... ; code goto loop int_isr ... retfie end ; interrupt code

REFERNCIAS BIBLIOGRFICAS 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 implementao de dispositivo de controle de alta

temperatura aplicado a microgeradores termoeltricos. Anais do Congresso Brasileiro de


Automtica (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 pblica 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). Gravao de microcontroladores PIC via USB pelo terminal do Linux. Retirado em 05/03/11, no World Wide Web: http://www.vivaolinux.com.br/artigo/Gravacao-de-microcontroladores-PIC-via-USB-peloterminal-do-Linux/. Grupo SanUSB (2011). Participao do Grupo SanUSB em Eventos. Retirado em 05/01/11, no World Wide Web: http://sanusb-laese.wix.com/robotica#!premios/.

[ 191 ]

Aplicaes prticas de Eletrnica e microcontroladores em sistemas computacionais, por Sandro Juc

Jornal O Povo (2010). De Maracana para Eslovquia. Retirado em 05/01/11, no World Wide Web: http://publica.hom.opovo.com.br/page,489,109.html?i=2051467 . Dirio do Nordeste (2010). Rob cearense. Retirado em 05/01/11, no World Wide Web: http://diariodonordeste.globo.com/materia.asp?codigo=861891. TV Dirio (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 Robtica 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 . Dirio do Nordeste (2007). Alunos estimulados a construir robs. Retirado em 05/01/11, no World Wide Web: http://diariodonordeste.globo.com/materia.asp?codigo=491710.

[ 192 ]

You might also like