You are on page 1of 113

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS

www.tinyurl.com/SanUSB

APOSTILA DE MICROCONTROLADORES PIC E PERIFRICOS


FERRAMENTA SanUSB

Sandro Juc Renata Pereira

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Contedo
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 INTRODUO ...................................................................................................................................... 8 ASSEMBLY X LINGUAGEM C ........................................................................................................... 8 VANTAGENS X DESVANTAGENS DA LINGUAGEM C PARA MICROCONTROLADORES ........ 10 ARQUITETURAS DOS MICROCONTROLADORES ....................................................................... 10 O CONTADOR DE PROGRAMA (PC) ............................................................................................. 11 BARRAMENTOS ............................................................................................................................... 11 A PILHA (STACK) ............................................................................................................................. 12 CICLO DE MQUINA ...................................................................................................................... 12 MATRIZ DE CONTATOS OU PROTOBOARD ................................................................................ 13 RESISTORES ..................................................................................................................................... 14 CAPACITORES ............................................................................................................................. 15 FONTES DE ALIMENTAO ...................................................................................................... 17 RUDO (BOUNCING) E FILTRO (DEBOUNCING) ................................................................... 17 PROTOCOLO DE COMUNICAO USB ................................................................................... 18 MTODOS DE COMUNICAO USB ........................................................................................ 18

2 2.1 2.2 2.3 2.4 2.5

FERRAMENTA SanUSB .................................................................................................................... 20 GRAVAO COM O SanUSB........................................................................................................... 21 GRAVANDO O MICROCONTROLADOR VIA USB NO WINDOWS ............................................... 26 EXERCCIO 1: .................................................................................................................................. 27 EXERCCIO 2: .................................................................................................................................. 29 GRAVAO WIRELESS DE MICROCONTROLADORES ............................................................... 31

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

2.5.1 ZIG BEE.............................................................................................................................................. 31 2.5.2 BLUETOOTH ..................................................................................................................................... 35 2.6 2.7 2.8 SISTEMA DUAL CLOCK .................................................................................................................. 39 SanUSB CDC EMULAO DE COMUNICAO SERIAL NO WINDOWS ................................ 39 SISTEMA DUAL CLOCK .................................................................................................................. 46

3 3.1 3.2 3.3 3.4 3.5 3.6

INTERRUPES E TEMPORIZADORES ..................................................................................... 47 INTERRUPES .............................................................................................................................. 47 INTERRUPES EXTERNAS .......................................................................................................... 48 INTERRUPO DOS TEMPORIZADORES .................................................................................... 49 PROGRAMA COM INTERRUPO EXTERNA POR BOTO E TIMER 1 ..................................... 50 EXERCCIO 3: .................................................................................................................................. 51 CIRCUITO COM84 PARA GRAVAO DO gerenciador.hex ......................................................... 53

4 4.1

ACIONAMENTO DE MOTORES MICROCONTROLADOS ...................................................... 56 ACIONAMENTO DE MOTORES CC DE BAIXA TENSO ............................................................. 56 MOTORES DE EQUIPAMENTOS ELETRNICOS .................................................................... 56 MOTORES ELTRICOS UTILIZADOS EM AUTOMVEIS ....................................................... 57 COROA E O PARAFUSO COM ROSCA SEM-FIM ..................................................................... 58 EXEMPLO: SEGUIDOR TICO DE LABIRINTO ........................................................................... 59 PONTE H........................................................................................................................................... 60 SOLENIDES E RELS ................................................................................................................... 60 EXERCCIO 4: .................................................................................................................................. 62 EXERCCIO 5: .................................................................................................................................. 64

4.1.1 4.1.2 4.1.3 4.2 4.3 4.4 4.5 4.6

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4.6.1 4.6.2

DRIVER DE POTNCIA ULN2803 .............................................................................................. 65 PONTE H COM MICRORELS ................................................................................................... 65

5 5.1 5.2

EMULAO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS ............................ 66 MULTIPLEXAO COM DISPLAYS DE 7 SEGMENTOS .............................................................. 72 EXERCCIO 6: .................................................................................................................................. 73

6 6.1

SENSORES INFRAVERMELHOS ................................................................................................... 75 TRANSMISSOR E RECEPTOR IR ................................................................................................... 75

6.2 EXERCCIO 7: ...................................................................................................................................... 76 6.3 AUTOMAO E DOMTICA COM CONTROLE REMOTO UNIVERSAL .................................... 78

7 7.1 7.2

LCD (DISPLAY DE CRISTAL LQUIDO) ...................................................................................... 80 EXEMPLO: CONTROLE DE TENSO DE UMA SOLDA CAPACITIVA COM LCD ..................... 84 OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A VARIAO DE UM

POTENCIMETRO ................................................................................................................................................ 86

8 8.1 8.2 8.3 8.4

CONVERSOR A/D .............................................................................................................................. 88 AJUSTE DE RESOLUO DO SENSOR E DO CONVERSOR AD DE 8 BITS ............................... 89 AJUSTE DA TENSO DE REFERNCIA COM POTENCIMETRO ............................................. 90 CONVERSOR AD DE 10 BITS .......................................................................................................... 90 OBTENO DE UM VOLTMETRO ATRAVS DO CONVERSOR AD COM A VARIAO DE UM

POTENCIMETRO ................................................................................................................................................ 90 8.5 EXERCCIO 8: .................................................................................................................................. 91

9 9.1

LDR E LM35 ........................................................................................................................................ 93 EXEMPLO: MODELAGEM DE LUXMETRO MICROCONTROLADO COM LDR ....................... 93

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

9.1.1 9.2

SUPERVISRIO ........................................................................................................................... 97 EXERCCIO 9: .................................................................................................................................. 98

10

REFERNCIAS BIBLIOGRFICAS ............................................................................................. 101

11

APNDICE I: FUNES SanUSB .................................................................................................. 101 11.1 11.2 FUNES BSICAS DA APLICAO DO USURIO ............................................................. 102 FUNES DO CONVERSOR ANALGICO DIGITAL (A/D) ................................................... 105

12

APNDICE II: AMBIENTES DE INTERFACE DELPHI E C++BUILDER ............................. 106 12.1 COMO CRIAR UMA COMUNICAO BIDIRECIONAL ENTRE O AMBIENTE DELPHI E O

PIC SANUSB USANDO O CPORT....................................................................................................................... 107 12.2 SUPERVISRIO EM DELPHI PARA CONTROLAR TRS LEDS............................................. 111

NDICE DE FIGURAS Figura 1. 1: Instrues em assembly. ............................................................................................... 9 Figura 1. 2: Memrias. ................................................................................................................... 11 Figura 1. 3: Ciclo de mquina. ....................................................................................................... 12 Figura 1. 4: Protoboard. ................................................................................................................. 13 Figura 1. 5: Contatos internos de uma protoboard. ........................................................................ 14 Figura 1. 6: Cdigo de cores de resistores. .................................................................................... 15 Figura 1. 7: Forma de onda de capacitor........................................................................................ 16 Figura 1. 8: Exemplos de Capacitores. .......................................................................................... 16 Figura 1. 9: Clculo demonstrativo de capacitncia. ..................................................................... 16 Figura 1. 10: Cdigo de cores Capacitores Polister. .................................................................... 17 Figura 1. 11: Rudo. ....................................................................................................................... 18 Figura 1. 12: Drivers e comunicao. ............................................................................................ 19

Figura 2. 1: Gravao do PIC via PC............................................................................................. 21 Figura 2. 2: Esquemtico de montagem da Ferramenta SanUSB - PIC18F2550. ......................... 22 Figura 2. 3: Esquemtico de montagem da Ferramenta SanUSB PIC18F4550. ........................ 23 Figura 2. 4: Esquema montado em protoboard e conector USB.................................................... 24 5

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 5: Esquema montado em PCB. ....................................................................................... 25 Figura 2. 6: Exemplo de PCB da Ferramenta SanUSB. ................................................................ 25 Figura 2. 7: Interface de gravao do PIC. .................................................................................... 27 Figura 2. 8: Esquemtico Exerccio 1. ........................................................................................... 29 Figura 2. 9: Esquemtico Exerccio 2. ........................................................................................... 31 Figura 2. 10: Circuito de Gravao com Modem Zig Bee Xbee ................................................... 32 Figura 2. 11: Circuito de Gravao com Mdulo Bluetooth ......................................................... 35 Figura 2. 12: Comunicao PIC com PC e via I2C. ....................................................................... 39 Figura 2. 13: Instalao do driver CDC (1). .................................................................................. 41 Figura 2. 14: Instalao do driver CDC (2). .................................................................................. 42 Figura 2. 15: Instalao do driver CDC (3). .................................................................................. 42 Figura 2. 16: Instalao do driver CDC (4). .................................................................................. 43 Figura 2. 17: Instalao do driver CDC (5). .................................................................................. 43 Figura 2. 18: Verificao de porta COM instalada. ....................................................................... 44 Figura 2. 19: Utilizao da porta COM pelo CCS. ........................................................................ 44 Figura 2. 20: Visualizao de textos via serial emulada. ............................................................... 45 Figura 2. 21: Interface em Java de comunicao serial. ................................................................ 46 Figura 2. 22: Comunicao PIC com PC e via I2C. ....................................................................... 47

Figura 3. 1: Esquemtico Exerccio 3. ........................................................................................... 53 Figura 3. 2: Circuito COM84 para gravao do gerenciador.hex .................................................. 54 Figura 3. 3: Esquema de ligao do conector serial. ..................................................................... 54 Figura 3. 4: Tela de configurao do software de gravao. ......................................................... 55 Figura 3. 5: Tela de confirmao de reconhecimento do circuito.................................................. 55

Figura 4. 1: Motor de passo. .......................................................................................................... 56 Figura 4. 2: Motor CC.................................................................................................................... 56 Figura 4. 3: Motor CC com caixa de reduo. ............................................................................... 57 Figura 4. 4: Relao de transmisso. ............................................................................................. 57 Figura 4. 5: Coroa e sem-fim. ........................................................................................................ 58 Figura 4. 6: Situaes encontradas em labirintos. ......................................................................... 59 Figura 4. 7: Motor em Ponte H. ..................................................................................................... 60 Figura 4. 8: Solenide. ................................................................................................................... 60 Figura 4. 9: Rels. .......................................................................................................................... 61 Figura 4. 10: Acionamento de motor 12V com rel bobina 5V. ................................................... 61 Figura 4. 11: Esquemtico Exerccio 4. ......................................................................................... 63 Figura 4. 12: Aplicao de um rel. ............................................................................................... 64 Figura 4. 13: ULN 2803. ................................................................................................................ 65 Figura 4. 14: Acionamento de motor nos 2 sentidos com rels em Ponte H. ................................ 66

Figura 5. 1: Display de 7 segmentos e conexo interna. ................................................................ 67 6

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 5. 2: Conexo do display 7 seg na porta B do PIC. ............................................................ 69 Figura 5. 3: Multiplexao de display 7 segmentos....................................................................... 73 Figura 5. 4: Esquemtico Exerccio 6. ........................................................................................... 75

Figura 6. 1: Conexo do par infravermelho: TIL 32 (emissor) e TIL 78 (receptor). ..................... 76 Figura 6. 2: Diagrama de blocos de comunicao infravermelha. ................................................. 78 Figura 6. 3: Conexo de receptor infravermelho de TV no PIC. ................................................... 79 Figura 6. 4: Exemplo de proteo do receptor contra emisses externas de raios IR.................... 80

Figura 7. 1: Conexo do LCD no PIC. .......................................................................................... 81 Figura 7. 2: Exemplo de aplicao do LCD. .................................................................................. 85 Figura 7. 3: Uso de potencimetro no conversor AD do PIC. ....................................................... 87

Figura 8. 1: Diagrama de blocos interno do conversor A/D. ......................................................... 88 Figura 8. 2: Uso de perifricos no conversor A/D. ........................................................................ 89 Figura 8. 3: Conexo do potencimetro no conversor A/D. .......................................................... 91 Figura 8. 4: Leitura de temperatura via monitor serial. ................................................................. 92 Figura 8. 5: Esquemtico Exerccio 8. ........................................................................................... 93

Figura 9. 1: Circuito sensor com LDR. .......................................................................................... 94 Figura 9. 2: Grfico Lux x Volt. .................................................................................................... 94 Figura 9. 3: Modelagem matemtica dos valores obtidos. ............................................................ 95 Figura 9. 4: Grfico lux x tenso utilizando as equaes 3, 4 e 5. ................................................. 96 Figura 9. 5: Figura da tela do supervisrio para Iluminncia e Temperatura. ............................... 97 Figura 9. 6: Esquema eletrnico do circuito luxmetro................................................................. 97 Figura 9. 7: Foto do circuito montado. ......................................................................................... 98 Figura 9. 8: Esquemtico Exerccio 9. ......................................................................................... 100

Figura 11. 1: Interface em Delphi para comunicar via serial. ...................................................... 107 Figura 11. 2: Selecionando a porta COM virtual. ........................................................................ 109 Figura 11. 3: Testando a comunicao. ....................................................................................... 110 Figura 11. 4: Teste de comunicao inserindo jump em porta serial........................................... 111 Figura 11. 5: Interface em Delphi para acessar 3 LEDS. ............................................................ 111

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

1 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. 1.1 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.

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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). 9

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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. 1.2 VANTAGENS X DESVANTAGENS MICROCONTROLADORES DA LINGUAGEM C 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. 1.3 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 tipo de arquitetura 10

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

permite que, enquanto uma instruo executada, uma outra seja buscada na memria, ou seja, um PIPELINE (sobreposio), o que torna o processamento mais rpido. 1.4 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. 1.5 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. 11

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 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. 1.6 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. 1.7 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 12

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 MHz) e tornando o sistema muito mais rpido. As nicas exees referem-se s instrues que geram saltos no contador de programa, como chamadas de funes em outro local da memria de programa e os retornos dessas funes. 1.8 MATRIZ DE CONTATOS OU PROTOBOARD Para desenvolver os projetos e exerccos propostos nessa apostila ser necessrio a uilizao de uma Matriz de Contatos (ou Protoboard em ingls), mostrada na figura abaixo, que uma placa com diversos furos e conexes condutoras para montagem de circuitos eletrnicos. A grande vantagem do Protoboard na montagem de circuitos eletrnicos a facilidade de insero de componentes (no necessita soldagem).

Figura 1. 4: Protoboard.

Na superfcie de uma matriz de contatos h uma base de plstico em que existem centenas de orifcios onde so encaixados os componentes ou tambm por ligaes mediante fios. Em sua parte inferior so instalados contatos metlicos que interliga eletricamente os componentes inseridos na placa que so organizados em colunas e canais. De cada lado da placa, ao longo de seu comprimento, h duas colunas completas. H um espao livre no meio da placa e de cada lado desse espao h vrios grupos de canais horizontais (pequenas fileiras), cada um com 05 orifcios de acordo como ilustrado na figura abaixo.

13

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 1. 5: Contatos internos de uma protoboard. Em alguns pontos do circuito necessrio limitar a intensidade da corrente eltrica. Para fazer isso utilizamos um componente chamado resistor. Quanto maior a resistncia, menor a corrente eltrica que passa num condutor.

1.9 RESISTORES Os resistores geralmente so feitos de carbono. Para identificar qual a resistncia de um resistor especfico, comparamos ele com a seguinte tabela:

14

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 1. 6: Cdigo de cores de resistores. 1.10 CAPACITORES

Capacitor ou condensador um componente que armazena energia num campo eltrico. consistem em dois eletrodos ou placas que armazenam cargas opostas. Estas duas placas so condutoras e so separadas por um isolante ou por um dieltrico. Eles so utilizados desde armazenar bits nas memrias volteis dinmicas (DRAM) dos computadores, at corrigir o fator de potncia de indstrias fornecendo reatncia capacitiva para compensar a reatncia indutiva provocada por bobinas e motores eltricos de grande porte.

15

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

A funo mais comum filtrar rudos em circuitor eltricos e estabilizar as fontes, absorvendo os picos e preenchendo os vales de tenso. Os capacitores descarregados so um curto e carregados abrem o circuito, por isso so utilizados tambm para isolar fontes CC.

Figura 1. 7: Forma de onda de capacitor. Os capacitores podem ser carregados e descarregados muito rapidamente, por isso so utilzados tambm no flash eletrnico em uma cmera fotogrfica, onde pilhas carregam o capacitor do flash durante vrios segundos, e ento o capacitor descarrega toda a carga no bulbo do flash quase que instantaneamente gerando o alto brilho. Isto pode tornar um capacitor grande e carregado extremamente perigoso. Eles so utilizados tambm em paralelo com motores eltricos para fornecer energia para que as bobinas energizadas possam vencer a inrcia quando os motores so ligados. As Unidades de Medida de capacitncia so Farad (F), Microfarad (F), Nanofarad (nF) e Picofarad (pF). Os capacitores mais comuns so os eletrolticos, lstrados na figura abaixo, os cermicos e os de polister.

Figura 1. 8: Exemplos de Capacitores. A figura abaixo mostra a identificao de capacitores cermicos.

Figura 1. 9: Clculo demonstrativo de capacitncia. A figura abaixo mostra a identificao de capacitores de polister.

16

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 1. 10: Cdigo de cores Capacitores Polister.

1.11

FONTES DE ALIMENTAO

As fontes mais comuns em sistemas embarcados com microcontroladores so baterias recarregveis ou conversores CA-CC como carregadores de celulares. As baterias ou pilhas so dispositivos que armazenam energia qumica e a torna disponvel na forma de energia eltrica. A capacidade de armazenamento de energia de uma bateria medida atravs da multiplicao da corrente de descarga pelo tempo de autonomia, sendo dado em ampre-hora (1 Ah= 3600 Coulombs). Deve-se observar que, ao contrrio das baterias primrias (no recarregveis), as baterias recarregveis no podem ser descarregadas at 0V pois isto leva ao final prematuro da vida da bateria. Na verdade elas tm um limite at onde podem ser descarregadas, chamado de tenso de corte. Descarregar a bateria abaixo deste limite reduz a vida til da bateria. As baterias ditas 12V, por exemplo, devem operar de 13,8V (tenso a plena carga), at 10,5V (tenso de corte), quando 100% de sua capacidade ter sido utilizada, e este o tempo que deve ser medido como autonomia da bateria. Como o comportamento das baterias no linear, isto , quando maior a corrente de descarga menor ser a autonomia e a capacidade, no correto falar em uma bateria de 100Ah. Deve-se falar, por exemplo, em uma bateria 100Ah padro de descarga 20 horas, com tenso de corte 10,5V. Esta bateria permitir descarga de 100 / 20 = 5A durante 20 horas, quando a bateria ir atingir 10,5V. Outro fator importante a temperatura de operao da bateria, pois sua capacidade e vida til dependem dela. Usualmente as informaes so fornecidas supondo T=25C ou T=20C, que a temperatura ideal para maximizar a vida til. 1.12 RUDO (BOUNCING) E FILTRO (DEBOUNCING)

Em operaes de Liga/Desliga e mudana de nvel lgico, surge um rudo (Bouncing) na transio que, caso uma interrupo esteja habilitada ou at mesmo um contador de evento, pode 17

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

provocar vrias interrupes ou contagens. As formas mais comuns de filtro (Debouncing) so via software, programando um tempo (em torno de 100ms, dependendo 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.

1.13

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. 1.14 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 18

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

ferramenta SanUSB no linux. Mais detalhes http://www.youtube.com/watch?v=h6Lw2qeWhlM .

na

video-aula

disponvel

em

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 fosse uma porta de comunicao serial padro. o mtodo mais simples de comunicao bidirecional com velocidade de comunicao de at 115 kbps, ou seja, aproximadamente 14,4 kB/s. Mais detalhes em uma aplicao Windows com protocolo Modbus RTU http://www.youtube.com/watch?v=KUd1JkwGJNk e em uma aplicao de comunicao bidirecional no Linux http://www.youtube.com/watch?v=cRW99T_qa7o. Mass Storage Device (MSD) - Mtodo customizado para dispositivos de armazenamento em massa que permite alta velocidade de comunicao USB, limitado apenas pela prpria velocidade do barramento USB 2.0 (480 Mbps). Este mtodo utilizado por pen-drives, scanners, cmeras digitais. Foi utilizado juntamente com a ferramenta SanUSB para comunicao com software de superviso programado em Java. Mais detalhes na video-aula disponvel em http://www.youtube.com/watch?v=Ak9RAl2YTr4. Como foi visto, a comunicao USB baseada em uma central (host), onde o computador enumera os dispositivos USB conectados a ele. Existem trs grandes classes de dispositivos comumente associados a USB: dispositivos de interface humana (HID), classe de dispositivos de comunicao (CDC) e dispositivos de armazenamento em massa (MSD). Cada uma dessas classes j possui um driver implementado na maioria dos sistemas operacionais. Portanto, se adequarmos o firmware de nosso dispositivo para ser compatvel com uma dessas classes, no haver necessidade de implementar um driver.

Figura 1. 12: Drivers e comunicao. Nos sitemas operacionais Windows e Linux, o modo mais fcil de comunicar com o PIC USB o CDC, por uma razo simples, os programas para PCs so baseados na comunicao via porta serial, o que torna o processo ainda mais simples. O mtodo CDC no Linux e o HID no 19

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Windows so nativos, ou seja, no necessrio instalar nenhum driver no sistema operacional para que o PC reconhea o dispositivo.

2 FERRAMENTA SanUSB 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 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.

20

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 1: Gravao do PIC via PC. Utilizando esta ferramenta, estudantes foram trs vezes consecutivas campees da Competio de Robtica do IFCE (2007, 2008 e 2009) na categoria Localizao, campees da Feira Brasileira de Cincias e Engenharia (FEBRACE09) da USP em So Paulo na Categoria Engenharia (2009), como tambm obtiveram Prmio de Inovao em Aplicao Tecnolgica na Feria Explora 2009 em Medelin na Colmbia e foram Campees na Categoria Supranivel do Foro Internacional de Ciencia e Ingeniera 2010 no Chile. 2.1 GRAVAO COM O SanUSB A transferncia de programas para os microcontroladores normalmente efetuada atravs de um hardware de gravao especfico. Atravs desta ferramenta, possvel efetuar a descarga de programas para o microcontrolador diretamente de uma porta USB de qualquer PC. Para que todas essas funcionalidades sejam possveis, necessrio gravar, anteriormente e somente uma vez, com um gravador especfico para PIC, o gerenciador de gravao pela USB Gerenciador.hex disponvel na pasta completa da ferramenta no link abaixo, onde tambm possvel baixar periodicamente as atualizaes dessa ferramenta e a incluso de novos programas: http://www.4shared.com/file/sIZwBP4r/100727SanUSB.html 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: http://www.java.com/pt_BR/download/manual.jsp. Para que os programas em C possam ser gravados no microcontrolador via USB, necessrio compil-los, ou seja, transform-los em linguagem de mquina hexadecimal. Existem diversos compiladores que podem ser utilizados por esta ferramenta, entre eles o SDCC, o C18, o Hi-Tech e o CCS. Devido didtica das funes e bibliotecas USB disponveis para emulao serial, diversos perifricos e multitasking, um dos compiladores utilizados com bom rendimento, 21

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

alm do C18, com exemplos de aplicao disponveis na pasta de desenvolvimento, o CCS na verso 3.245. Esta verso funcional com bibliotecas de suporte a USB pode ser obtida atravs do link: http://www.4shared.com/file/Mo6sQJs2/100511Compilador.html . As verses 4 deste compilador apresentam bugs em funes e aplicaes, embora tenham sido testadas algumas verses e funcionaram satisfatoriamente at a verso 4.084. Neste caso, recomendado criar, para cada firmware (programa a ser compilado), um novo source file. Caso grave no microcontrolador o novo gerenciador de gravao pela USB GerenciadorPlugandPlay.hex, no esquea de colar o novo arquivo cabealho SanUSB.h dentro da pasta ExemploseBibliotecasCCS localizada na pasta instalada do compilador (C:\Arquivos de programas\PICC\Drivers ). A representao bsica do circuito SanUSB montado em protoboard mostrada a seguir:

Figura 2. 2: Esquemtico de montagem da Ferramenta SanUSB - PIC18F2550. Para um microcontrolador de 40 pinos, o circuito mostrado a seguir:

22

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 3: Esquemtico de montagem da Ferramenta SanUSB PIC18F4550. Os componentes bsicos do circuito so: 1- 1 microcontrolador da famlia PIC USB (18F2550, 18F2455, 18F4550, etc.); 2- 1 cristal de 20MHz; 3- 2 capacitores de 22pF; 4- 2 capacitores de 1uF (um no pino 14 Vusb e outro entre o +5V e o Gnd ) ; 5- 3 leds e 3 resistores de 390 (s necessrio um led com resistor no pino B7); 6- 1 resistor de 2k2 e um boto ou fio para gravao no pino 1; 7- 1 diodo qualquer entre o +5V e o o pino Vdd; 8- 1 Cabo USB qualquer. Note que, este sistema multiplataforma (Windows, Linux e Mac OSX), compatvel com o software de gravao HID USB da Microchip tambm para Linux e Mac OSX, pode ser implementado tambm em qualquer placa de desenvolvimento de microcontroladores PIC com interface USB, pois utiliza o boto de reset, no pino 1, como boto de gravao via USB. Ao conectar o cabo USB e alimentar o microcontrolador, com o pino 1 no Gnd (0V), atravs do boto ou de um simples fio, o microcontrolador entra em Estado para Gravao via USB (led no pino B7 aceso) e que, aps o reset com o pino 1 no Vcc (+5V atravs do resistor fixo de 2K2 sem o jump), entra em Estado para Operao do programa aplicativo (firmware) que foi compilado. O cabo USB apresenta normalmente quatro fios, que so conectados ao circuito do microcontrolador nos pontos mostrados na figura acima, onde normalmente, o fio Vcc (+5V) do cabo USB vermelho, o Gnd (Vusb-) marrom ou preto, o D+ azul ou verde e o D- amarelo ou branco. Note que a fonte de alimentao do microcontrolador nos pinos 19 e 20 e dos barramentos vermelho (+5V) e azul (Gnd) do circuito provem da prpria porta USB do computador. Para ligar o cabo USB no circuito possvel cort-lo e conect-lo direto no protoboard, com fios rgidos soldados, como tambm possvel conectar sem cort-lo, em um protoboard ou numa placa de circuito impresso, utilizando um conector USB fmea. O diodo de 23

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

proteo colocado no pino 20 entre o Vcc da USB e a alimentao do microcontrolador serve para proteger contra corrente reversa caso a tenso da porta USB esteja polarizada de forma inversa. A figura abaixo mostra a ferramenta SanUSB montada em protoboard seguindo o circuito anterior e a posio de cada terminal no conector USB a ser ligado no PC. Cada terminal conectado diretamente nos pinos do microcontrolador pelos quatro fios correspondentes do cado USB.

Figura 2. 4: Esquema montado em protoboard e conector USB. importante salientar que, para o perfeito funcionamento da gravao via USB, o circuito desta ferramenta deve conter um capacitor de filtro entre 0,1uf e 1uF na alimentao que vem da USB, ou seja, colocado entre os pinos 20 (+5V) e 19 (Gnd). Caso o sistema microcontrolado seja embarcado como, por exemplo, um rob, um sistema de aquisio de dados ou um controle de acesso, ele necessita de uma fonte de alimentao externa, que pode ser uma bateria comum de 9V ou um carregador de celular. A figura abaixo mostra o PCB, disponvel nos Arquivos do Grupo SanUSB, e o circuito para esta ferramenta com entrada para fonte de alimentao externa. Para quem deseja obter o sistema pronto para um aprendizado mais rpido, possvel tambm encomendar placas de circuito impresso da ferramenta SanUSB, como a foto da placa abaixo, entrando em contato com o grupo SanUSB atravs do e-mail: sanusb_laese@yahoo.com.br .

24

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 5: Esquema montado em PCB. Se preferir confeccionar a placa, possvel tambm imprimir o PCB (em preto) abaixo em folha apropriada e em tamanho equivalente ao real, corroer, furar (pontos marrons) e soldar os componentes. Ou contactar Prof Renata (r.imaculada27@gmail.com) e solicitar o PCB atualizado. Mais detalhes em: http://www.4shared.com/get/ithqLbiq/FazendoPCBtermico.html ou atravs do video disponvel em: http://www.youtube.com/watch?v=8NhNsNw5BfU.

Figura 2. 6: Exemplo de PCB da Ferramenta SanUSB.

25

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Para obter vrios programas-fonte e vdeos deste sistema livre de gravao, comunicao e alimentao via USB, basta se cadastrar no grupo de acesso livre www.tinyurl.com/SanUSB e clicar no item Arquivos. Durante a programao do microcontrolador basta inserir, no inicio do programa em C, a biblioteca cabealho SanUSB (#include <SanUSB.h>) contida dentro da pasta ExemploseBibliotecasCCS e que voc j adicionou dentro da Drivers localizada na pasta instalada do compilador ( C:\Arquivos de programas\PICC\Drivers ). Essa biblioteca contm instrues do PIC18F2550 para o sistema operacional, configuraes de fusveis e habilitao do sistema Dual Clock, ou seja, oscilador RC interno de 4 MHz para CPU e cristal oscilador externo de 20 MHz para gerar a frequncia de 48MHz da comunicao USB, atravs de prescaler multiplicador de frequncia. Como a frequncia do oscilador interno de 4 MHz, cada incremento dos temporizadores corresponde a um microssegundo. O programa exemplo1 abaixo comuta um led conectado no pino B7 a cada 0,5 segundo. --------------------------------------------------------------------------------------------------------------------#include <SanUSB.h> void main() { clock_int_4MHz();//Funo necessria para habilitar o dual clock (48MHz para USB e 4MHz para CPU) while (1) { output_toggle(pin_B7); // comuta Led na funo principal delay_ms(500); } } --------------------------------------------------------------------------------------------------------------------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 26

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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: http://www.java.com/pt_BR/download/manual.jsp e execute o aplicativo SanUSB da pasta SanUSBwinPlugandPlay. Surgir a seguinte tela:

Figura 2. 7: Interface de gravao do PIC. 6. Clique em Abrir e escolha o programa .hex que deseja gravar, como por exemplo, o programa compilado exemplo1.hex da pasta ExemploseBibliotecasSanUSB e clique em Gravar. Este programa pisca o led conectado no pino B7; 7. Aps a gravao do programa, lembre-se de soltar o boto ou retirar o jump do pino de gravao e clique em Resetar. Pronto o programa estar em operao. Para programar novamente, repita os passos anteriores a partir do passo 3.

2.3 EXERCCIO 1:

27

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Pisca LEDs em trs pinos cabealho padro e funes: output_high, output_low, delay_ms.

28

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Verifique a conexo dos leds nos pinos B7, B6 e B5 de acordo com a programao. No esquea os resistores limitantes de corrente de 100 R a 1000 R.

Figura 2. 8: Esquemtico Exerccio 1. -----------------------------------------------------------------------------------------------------------

2.4 EXERCCIO 2:
Botes de entrada funo input e condio if:

OBS: Utilize esta configurao para o boto: resistor de pull-up.

; no se esquea do

29

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Complete o esquemtico abaixo conectando os dois botes nos pinos b0 e b1 e o LED de sada no pino b7.

30

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 9: Esquemtico Exerccio 2. ----------------------------------------------------------------------------------------------------------

2.5 GRAVAO WIRELESS DE MICROCONTROLADORES 2.5.1 ZIG BEE A gravao wireless realizada com dois mdulos XBee da Srie 1 (S1). De um lado, um mdulo conectado a um PC coordenador conectado ao PC via USB do PC atravs do chip FTDI FT232RL ou atravs de uma porta serial real com o MAX-232 e, do outro lado da rede, um mdulo Zigbee conectado ao microcontrolador do dispositivo final. Esta conexo permite a programao sem fio no microcontrolador PIC. Programas disponveis em:

http://www.4shared.com/get/aP17n4FT/sanusbee.html Abaixo uma ilustrao para realizar gravao de microcontrolador de forma wireless com tenso de alimentao de 3,3V.

31

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 10: Circuito de Gravao com Modem Zig Bee Xbee Para mais detalhes basta acompanhar os vdeos PIC wireless Zigbee programming http://www.youtube.com/watch?v=_Pbq2eYha_c e PIC wireless Zigbee programming II: http://www.youtube.com/watch?v=BlRjKbXpepg. Procedimento para gravao wireless:

1- Circuito bsico: Conecte o mdulo Xbee ao microcontrolador da placa SanUSB (www.tinyurl.com/SanUSB), com alimentao entre 3V e 3,6V e apenas 4 fios: Vcc (3,3V), Gnd, Tx e Rx, como mostra a figura abaixo. Na figura, o fio vermelho ligado ao pino 20 (Vcc) do microcontrolador e ao pino 1 (Vcc) do modem Zigbee, o fio azul ligado ao 19 (Gnd) do microcontrolador e ao pino 10 (Gnd) do modem Zigbee, o fio laranja ligado ao pino 18 (Rx) do microcontrolador e ao pino 2 (DOUT) do modem Zigbee, e o fio amarelo ligado ao 17 (Tx) do microcontrolador e ao pino 3 (DIN) do modem Zigbee. 2- Configurao dos Mdulos: A gravao wireless s vai acontecer se os mdulos Xbee da srie 1 (coordenador e dispositivo final) estiverem configurados com o mesmo baud rate do microcontrolador (19200 bps). Para o coordenador, basta conectar, o mdulo coordenador ao microcontrolador, ver circuito bsico acima, gravar via USB e examinar em qual firmware (ConfigCoord9600to19200.hex ou ConfigCoord19200to19200.hex) o led no pino B7 ir piscar

32

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

intermitentemente. Se o led no piscar, provavelmente existe um erro na ligao do circuito. Aps a configurao, coloque o mdulo Coordenador no conversor USB-serial e conecte ao PC. Faa posteriormente o mesmo para o mdulo Dispositivo final, gravando o firmware (ConfigDispFinal9600to19200.hex ou ConfigDispFinal19200to19200.hex) e deixe-o conectado ao microcontrolador. Quando o led do pino B7 estiver piscando, significa que os mdulos esto conectados corretamente e esto aptos para gravao wireless.

3- Adaptador Wireless: Agora grave, novamente via USB, o firmware AdaptadorSerial.hex da pasta AdaptadorWireless. Se, aps a gravao do Adaptador, apresentar o erro Odd address at beginning of HEX file error, como na figura abaixo, necessrio gravar novamente o gerenciador.hex, com qualquer gravador especifico (ver tutorial), e em seguida, realizar novamente a gravao via USB do firmware aplicativo AdaptadorSerial.hex. Aps a transferncia deste firmware, o microcontrolador est apto para gravao wireless.

33

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Agora basta acessar a pasta sanusbee pelo Prompt do Windows (Iniciar -> Pesquisar -> Prompt de Comando), como na figura abaixo, e digitar, como mostrado no vdeo PIC wireless Zigbee programming II, as linhas de comando, para transferir os programas aplicativos.hex como o Exemplo1wireless.hex contido na pasta sanusbee. Exemplo: sanusbee Exemplo1Wireless.hex p COM2

34

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

2.5.2 BLUETOOTH A gravao wireless Bluetooth pode ser realizada com apenas um mdulo Bluetooth conectado ao microcontrolador, pois normalmente no PC coordenador, como em laptops e desktops, j existe um mdulo bluetooth interno. A tenso do mdulo Bluetooth encapsulado, mostrado na figura abaixo, suporta at 6V, diferentemente do mdulo Xbee que suporta 3,3V. Dessa forma, pode-se conectar o mdulo Bluetooth diretamente ao microcontrolador alimentado pela tenso da porta USB de 5V. De um lado um PC coordenador e, do outro lado da rede, um mdulo bluetooth conectado ao microcontrolador do dispositivo final. Esta conexo permite a programao sem fio no microcontrolador PIC. Os Programas esto disponveis em:

http://www.4shared.com/get/aP17n4FT/sanusbee.html. Neste link em anexo: http://sanusblaese.wix.com/robotica#!produtos/productsstackergalleryv20=1, pode ser adquirido o modem Bluetooth mostrado neste tutorial. Abaixo uma ilustrao para realizar gravao de microcontrolador de forma wireless Bluetooth com tenso de alimentao de 5V.

Figura 2. 11: Circuito de Gravao com Mdulo Bluetooth

35

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Para mais detalhes basta acompanhar os vdeos PIC wireless Zigbee programming http://www.youtube.com/watch?v=_Pbq2eYha_c e PIC wireless Zigbee programming II: http://www.youtube.com/watch?v=BlRjKbXpepg. Procedimento para gravao wireless: 1- Circuito bsico: Conecte o mdulo bluetooth ao microcontrolador da placa SanUSB (www.tinyurl.com/SanUSB), com alimentao entre 3V e 6V e apenas 4 fios: Vcc (3,3V), Gnd, Tx e Rx, como mostra a figura acima do circuito. Na figura, o fio vermelho ligado ao pino 20 (Vcc) do microcontrolador e ao pino Vcc do modem bluetooth, o fio azul ligado ao 19 (Gnd) do microcontrolador e ao pino Gnd do modem bluetooth, o fio verde ligado ao pino 18 (Rx) do microcontrolador e ao pino Tx modem bluetooth, e o fio amarelo ligado ao 17 (Tx) do microcontrolador e ao pino Rx do modem bluetooth.

2- Parear o modem Bluetooth: Aps alimentar o modem bluetooth com 3,3V ou 5V, conectado ao microcontrolador, realizar o pareamento com o PC indo em: 2.1- Iniciar -> Painel de controle -> Adicionar um dispositivo de bluetooth -> linvor -> senha padro: 1234; 2.2- Aps o pareamento, clique em Iniciar -> Painel de controle -> exibir impressoras e dispositivos. Ir aparecer o modem pareado, como, por exemplo, o linvor.

2.3- Clicar em cima, por exemplo, do modem de linvor, e verificar qual porta criada pelo modem Bluetooth, em Hardware, que ser utilizada para a gravao wireless.

36

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

O nmero da porta Serial Padro por Link Bluetooth (COM37) pode ser modificada, por exemplo, para COM9 como neste tutorial, atravs do Gerenciador de Dispositivos, clicando com o boto direito em cima da porta -> propriedades -> Configurao de Porta -> Avanado -> Nmero da Porta COM. 3- Configurao do mdulo bluetooth: A gravao wireless s vai acontecer se o mdulo Bluetooth estiver configurado com o mesmo baud rate do microcontrolador (19200 bps). Para isto, basta conectar, o mdulo bluetooth ao microcontrolador, ver circuito bsico acima, gravar via USB o firmware Configbluetotth9600to19200.hex e verificar se o led no pino B7 ir piscar intermitentemente. Se o led no piscar, provavelmente existe um erro na ligao do circuito. Quando o led do pino B7 estiver piscando, significa que os mdulos esto conectados corretamente e esto aptos para gravao wireless.

4- Adaptador Wireless: Agora grave, novamente via USB, o firmware AdaptadorSerial.hex da pasta AdaptadorWireless. Se, aps a gravao do Adaptador, apresentar o erro Odd address at 37

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

beginning of HEX file error, como na figura abaixo, necessrio gravar novamente o gerenciador.hex, com qualquer gravador especifico (ver tutorial), e em seguida, realizar novamente a gravao via USB do firmware aplicativo AdaptadorSerial.hex. Aps a transferncia deste firmware, o microcontrolador est apto para gravao wireless.

Agora basta acessar a pasta sanusbee pelo Prompt do Windows (Iniciar -> Pesquisar -> Prompt de Comando), como na figura abaixo, e digitar, como mostrado no vdeo PIC wireless Zigbee programming II, as linhas de comando, para transferir os programas aplicativos.hex como o Exemplo1wireless.hex contido na pasta sanusbee. Exemplo: sanusbee Exemplo1Wireless.hex p COM9

38

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

As vantagens do modem Bluetooth em relao ao Zigbee, so o preo e a disponibilidade de modems Bluetooth j disponveis em vrios sistemas computacionais como computadores e celulares. A desvantagem em relao ao Zigbee a distncia para gravao de microcontroladores mxima de 10 metros. 2.6 SISTEMA DUAL CLOCK Devido incompatibilidade entre as frequncias necessrias para a gravao e emulao serial via USB e a frequncia padro utilizada pela CPU, temporizadores e interface I2C, esta ferramenta adota o princpio Dual Clock, ou seja, utiliza duas fontes de clock, uma para o canal USB de 48MHz, proveniente do cristal oscilador externo de 20MHz multiplicada por um prescaler interno, e outra para o CPU de 4 MHz, proveniente do oscilador RC interno de 4 MHz, como ilustrado na figura abaixo.

Figura 2. 12: Comunicao PIC com PC e via I2C. Esse princpio de clock paralelo, realizado pela instruo clock_int_4MHz(), permite que um dado digitado no teclado do computador, trafegue para o microcontrolador em 48 MHz via USB, depois para perifricos como um relgio RTC ou para a memria EEPROM em 4 MHz via I2C e vice-versa.

2.7 SanUSB CDC EMULAO DE COMUNICAO SERIAL NO WINDOWS

Neste tpico mostrado um mtodo de comunicao serial bidirecional atravs do canal USB do PIC18F2550. Uma das formas mais simples, atravs do protocolo Communications Devices Class (CDC), que emula uma porta COM RS-232 virtual, atravs do canal USB 2.0. Dessa forma, possvel se comunicar com caracteres ASCII via USB atravs de qualquer software monitor serial RS-232 como o HyperTerminal, o SIOW do CCS Compiler ou o ambiente de programao Delphi. O driver CDC instalado no PC 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. 39

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

A biblioteca CDC para o programa.c do microcontrolador est dentro da pasta de exemplos, a qual deve estar na mesma pasta onde est o programa.c a ser compilado para a emulao da comunicao serial RS-232. Alm disso, o programa.c deve inserir a biblioteca usb_san_cdc.h, como mostra a o exemplo de leitura e escrita em um buffer da EEPROM interna do microcontrolador. As funes CDC mais utilizadas contidas na biblioteca usb_san_cdc.h 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();} 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(); 40

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 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. 13: 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.

41

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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

Figura 2. 15: Instalao do driver CDC (3).

Aguarde enquanto o Driver CDC instalado no Windows.

42

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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

Figura 2. 17: 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.

43

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 18: 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.

Figura 2. 19: Utilizao da porta COM pelo CCS. 44

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 { //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 Desligado\r\n);} } output_high(pin_B6); // Pisca Led na funo principal delay_ms(500); output_low(pin_B6); delay_ms(500); }} ---------------------------------------------------------------------------------------------------------------------

Figura 2. 20: Visualizao de textos via serial emulada.

45

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Para utilizar o programa de comunicao Java-SanUSB para emulao serial virtual entre o computador e o microcontrolador, necessrio baix-lo atravs do link disponvel em http://www.4shared.com/file/1itVIv9s/101009SoftwareComSerial_Window.html . Aps executar o programa de comunicao serial Java-SanUSB, verifique a porta COM virtual gerada (COM3,COM4,COM11,etc.) no Windows, em Painel de Controle\Todos os Itens do Painel de Controle\Sistema e altere no programa serial Java- SanUSB em Dispositivos e depois clique em Conectar, como mostra a figura abaixo.

Figura 2. 21: Interface em Java de comunicao serial.

2.8 SISTEMA DUAL CLOCK Devido incompatibilidade entre as frequncias necessrias para a gravao e emulao serial via USB e a frequncia padro utilizada pela CPU, temporizadores e interface I2C, esta ferramenta adota o princpio Dual Clock, ou seja, utiliza duas fontes de clock, uma para o canal USB de 48MHz, proveniente do cristal oscilador externo de 20MHz multiplicada por um prescaler interno, e outra para o CPU de 4 MHz, proveniente do oscilador RC interno de 4 MHz, como ilustrado na figura abaixo.

46

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 2. 22: Comunicao PIC com PC e via I2C. Esse princpio de clock paralelo, realizado pela instruo clock_int_4MHz(), permite que um dado digitado no teclado do computador, trafegue para o microcontrolador em 48 MHz via USB, depois para perifricos como um relgio RTC ou para a memria EEPROM em 4 MHz via I2C e vice-versa.

INTERRUPES E TEMPORIZADORES

3.1 INTERRUPES As interrupes so causadas atravs de eventos assncronos (podem ocorrer a qualquer momento) causando um desvio no processamento. Este desvio tem como destino um endereo para tratamento da interrupo. Uma boa analogia para melhor entendermos 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

47

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

programa em C basta escrever a funo de tratamento da interrupo aps #, e o compilador far o direcionamento do cdico automaticamente para essa posio. 3.2 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()); } #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 48

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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. 3.3 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 #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) 49

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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); } } --------------------------------------------------------------------------------------------------------------------3.4 PROGRAMA COM INTERRUPO EXTERNA POR BOTO E 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. 50 //Funo principal pisca led em a5

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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); }} ---------------------------------------------------------------------------------------------------------------------

3.5 EXERCCIO 3:

Semforo com boto para pedestre interrupo:

51

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

52

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 3. 1: Esquemtico Exerccio 3.

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

3.6 CIRCUITO COM84 PARA GRAVAO DO gerenciador.hex

Para este circuito simples de gravao s necessrio 3 resistores de 10k, um cabo serial DB9 (RS-232) e uma fonte externa de 5V, que pode ser obtida da porta USB. O circuito e a foto abaixo mostram o esquema simples de ligao dos pinos. 53

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 3. 2: Circuito COM84 para gravao do gerenciador.hex Este circuito a partir da porta COM DB9 pode ser visualizado na figura abaixo.

Figura 3. 3: Esquema de ligao do conector serial. Este circuito de gravao funciona com o software PICPgm (detectado como JDM Programmer) ou com WinPic (detectado como COM84 Programmer). Este ltimo se mostra mais estvel, pois aps a deteco do microcontrolador, possvel gravar o microcontrolador, e mesmo indicando ERROR: Programming failed, o arquivo gerenciador.hex mostrou-se gravado corretamente para gerenciar gravaes no microcontrolador pela porta USB nos sistemas operacionais Windows, Linux e Mac OSX. O software de gravao do gerenciador.hex pode ser baixado atrvs do link, disponvel em http://www.4shared.com/get/1uP85Xru/winpicprCOM84.html.

54

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 3. 4: Tela de configurao do software de gravao. Aps a instalao, execute o programa. Na guia "Device, Config", escolha o microcontrolador. Uma vez que o microcontrolador conectado porta COM RS-232 de 9 pinos do PC, v para "Interface", selecione " COM84 programmer for serial port", e pressione "Initialize". Se o software disser que a inicializao foi um xito "Success", ento o programa est pronto para gravar o gerenciador.hex no microcontrolador. Para a gravao, selecione em File Load & ProgramDevice e depois selecione o arquivo gerenciador.hex. Como citado anteriormente, mesmo que, aps a gravao e verificao aparea Programmed Failed, provvel que o gerenciador.hex tenha sido gravado corretamente.

Figura 3. 5: Tela de confirmao de reconhecimento do circuito. 55

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

ACIONAMENTO DE MOTORES MICROCONTROLADOS

Os motores mais utilizados com sistemas microcontrolados so os motores CC , motores de passo e servo-motores. A figura abaixo mostra a disposio dos transistores de potncia para atuao bidirecional de motores de passo e motores CC.

Figura 4. 1: Motor de passo. 4.1 ACIONAMENTO DE MOTORES CC DE BAIXA TENSO 4.1.1 MOTORES DE EQUIPAMENTOS ELETRNICOS

So abundantes no mercado em funo da ampla gama de utilizao, conseqentemente, existem em vrias dimenses, tenses, pesos, caractersticas e so fceis de encontrar em sucatas como video-cassete, brinquedos, impressoras, etc. e geralemnte vm associados a uma caixa de engrenagem para aumento do torque e reduo de velocidade.

Figura 4. 2: Motor CC.

56

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4.1.2 MOTORES ELTRICOS UTILIZADOS EM AUTOMVEIS Os motores utilizados em automveis so todos com tenso nominal a 12 volts, so robustos e normalmente projetados para condies extremas, tais como poeira, calor, variaes de tenso e corrente, entre outros. Algumas opes so ideais para aplicao no rob por serem compactos, fortes, alta rotao e leves, alm de serem muito fceis de conseguir em oficinas e empresas do ramo. Os motores mais usados em projetos so de trava-eltrica das portas, bomba do limpador de para-brisa e de gasolina, bomba de combustvel, motor do vidro-eltrico, motor da ventonha, motor do ventilador interno, limpador de para-brisa dianteiro e traseiro, bomba hidrulica do freio ABS.

Figura 4. 3: Motor CC com caixa de reduo. Alm do acionamento eltrico, os motores CC de baixa potncia utilizados em automao e robtica, apresentam geralmente uma caixa de reduo, que um equipamento composto por engrenagens, com o intuito de reduzir a velocidade de rotao do eixo (ou angular) e aumentar o torque do motor. O torque varia em funo da fora aplicada (F) e do raio de giro (nas engrenagens a metade do dimetro primitivo), segundo a equao T = F.r. Sendo: F = fora (em Newtons), r = raio de giro (em metros) e T = torque (em N.m).

Figura 4. 4: Relao de transmisso. 57

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

J que o motor imprime uma fora constante, a variao do torque entre engrenagens ocorre devido ao raio de giro. Na prtica em um sistema de engrenagens, comprovada pelas equaes abaixo, quanto maior o dimetro da engrenagem movida (D2), maior o torque (T2) proporcional e menor a velocidade de rotao (n2). Considerando a engrenagem 1 com motora e a engrenagem 2 como movida, tem-se: Fconst -> T1/r1 = T2/r2 -> T1/D1 = T2/D2 T2 . D1 = T1 .D2 n2. D2 = n1. d1

4.1.3 COROA E O PARAFUSO COM ROSCA SEM-FIM

A coroa e o parafuso com rosca sem-fim compem um sistema de transmisso muito utilizado principalmente nos casos em que necessria elevada reduo de velocidade ou um elevado aumento de fora, como nos redutores de velocidade.

Figura 4. 5: Coroa e sem-fim. O nmero de entradas do parafuso tem influncia no sistema de transmisso. Se um parafuso com rosca sem-fim tem apenas uma entrada (mais comum) e est acoplado a uma coroa de 60 dentes, em cada volta dada no parafuso a coroa vai girar apenas um dente. Como a coroa tem 60 dentes, ser necessrio dar 60 voltas no parafuso para que a coroa gire uma volta. Assim, 58

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

a rpm da coroa 60 vezes menor que a do parafuso. Se, por exemplo, o parafuso com rosca semfim est girando a 1.800 rpm, a coroa girar a 1.800 rpm, divididas por 60, que resultar em 30 rpm. Suponhamos, agora, que o parafuso com rosca sem-fim tenha duas entradas e a coroa tenha 60 dentes. Assim, a cada volta dada no parafuso com rosca sem-fim, a coroa girar dois dentes. Portanto, ser necessrio dar 30 voltas no parafuso para que a coroa gire uma volta. Assim, a rpm da coroa 30 vezes menor que a rpm do parafuso com rosca sem-fim. Se, por exemplo, o parafuso com rosca sem-fim est girando a 1.800 rpm, a coroa girar a 1.800 divididas por 30, que resultar em 60 rpm. A rpm da coroa pode ser expressa pela equao: i = Nc . Zc =Np. Zp Nc=Np. Zp /Zc onde: Nc = nmero de rotaes da coroa (rpm) Zc = nmero de dentes da coroa Np = nmero de rotaes do parafuso com rosca sem-fim (rpm) Zp= nmero de entradas do parafuso As possibilidades mais comuns de controle digital de motores CC so:

4.2 EXEMPLO: SEGUIDOR TICO DE LABIRINTO

Neste caso interessante definir que no princpio seguidor de parede o rob considera o obstculo como referncia a qual ele vai seguir em movimento de avano normal. Nesse exemplo ele cola do lado esquerdo, ou seja, o motor direito deve ser mais rpido que o motor esquerdo, quando os dois estiverem acionados. Seguindo as paredes do labirinto at final encontram-se quatro situaes:

Figura 4. 6: Situaes encontradas em labirintos. importante salientar que no princpio de seguir o obstculo, o rob no pode tocar no outro lado, em vermelho, pois ele pode tom-lo como referncia e voltar, o que far sair por onde entrou. Mais detalhes: http://www.youtube.com/watch?v=QRDrG2iEFpM .

59

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4.3 PONTE H O acionamento da ponte H permite o movimento do motor nos dois sentidos. A ponte H pode ser feita com transistores MOSFETs, mais aconselhvel devido a baixa queda de tenso, ou de potncia Darllington TIP ou BD.

Figura 4. 7: Motor em Ponte H.

4.4 SOLENIDES E RELS

Uma solenide consiste num mbolo de ferro colocado no interior de uma bobina (indutncia) eltrica, enrolada em torno de um tubo. Quando se alimenta eletricamente a bobina, cria-se um campo magntico que atrai o mbolo (ncleo mvel) para dentro da bobina como mostrado na figura abaixo. No caso de um rel, fecha um contato para circulao de outro nivel maior de corrente.

Figura 4. 8: Solenide. Os rels so dispositivos comutadores eletromecnicos (Figura 2.14). A estrutura simplificada de um rel mostrada na figura abaixo e a partir dela explicado o seu princpio de funcionamento.

60

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 4. 9: Rels. O controle de uma solenide ou rel pode ser feito pelo chaveamento de um transistor Darlington ou de um MOSFET mostrado abaixo. O rel um tipo de interruptor acionado eletricamente que permite o isolamento eltrico de dois circuitos. O rel formado por um eletrom (uma bobina enrolada sobre um ncleo de material ferromagntico) que quando acionado, atravs da atrao eletromagntica, fecha os contatos de um interruptor. Normalmente o interruptor de um rel tem duas posies, com isso existem dois tipos, os NF(normalmente fechado) e NA (normalmente aberto), como mostra a figura abaixo. A bobina do rel acionada por uma tenso contnua que especificada de acordo com o fabricante, bobinas de 5, 12 e 24 Volts so as mais comuns.

Figura 4. 10: Acionamento de motor 12V com rel bobina 5V. 61

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4.5 EXERCCIO 4:
Acionamento temporizado de carga CC ou CA com microrrels 5V:

62

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 4. 11: Esquemtico Exerccio 4. 63

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Uma das caractersticas do rel que ele pode ser energizado com correntes muito pequenas em relao corrente que o circuito controlado exige para funcionar. Isso significa a possibilidade de controlar circuitos de altas correntes como motores, lmpadas e mquinas industriais, diretamente a partir de microcontroladores.

Figura 4. 12: Aplicao de um rel.

4.6 EXERCCIO 5:
Liga e desliga led/carga atravs de teclado de computador utiliza protocolo CDC: Aproveitando circuito montado no exerccio 4. (Programa na pgina 43).

--------------------------------------------------------------------------------------------------------------64

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4.6.1 DRIVER DE POTNCIA ULN2803 Um driver de potncia utilizado sempre quando se necessita acionar um hardware especifico de maior potncia. Esse driver pode ser usado para controlar motores de passos, solenides, rels, motores CC e vrios outros dispositivos. Ele contm internamente 8 transistores Darlington NPN de potncia, oito resistores de base de 2K7 e oito diodos de roda livre, para descarregar no Vcc (pino 10) a corrente reversa da fora contra-eletromotriz gerada no chaveamento dos transistores, protegendo os mesmos. Quando o microcontrolador coloca +5V (nvel lgico 1) no pino 1 do driver ULN2803, ele conecta o pino 18 do outro lado, onde est liga um plo do motor, ao Gnd (nvel lgico 0, por isso a simbologia de porta inversora na figura abaixo). Como o outro lado da bobina (o comum) ou do motor deve estar ligado ao Vcc da fonte de at 30V, esse comando ir energizar a bobina ou o motor.

Figura 4. 13: ULN 2803.

4.6.2 PONTE H COM MICRORELS Como foi visto, acionamento da ponte H permite o movimento do motor nos dois sentidos. A ponte H pode ser feita tambm com apenas dois microrels. Neste caso, pode-se utilizar tambm o driver ULN2803 para a energizao das bobinas, pois j contm internamente oito transistores com resistores de base e oito diodos de roda livre. Esse tipo de ponte H, mostrada na figura abaixo, no causa queda de tenso na fonte de alimentao do motor, porque as fontes de energizao da bobina do microrel e de alimentao do motor devem ser diferentes, ou seja, isoladas uma da outra, para que seja possvel o chaveamento do rel.

65

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 4. 14: Acionamento de motor nos 2 sentidos com rels em Ponte H. Note que inicialmente os dois rels esto conectados ao V-Motor. Ao energizar a bobina do rel da esquerda, conectando o V+Motor, a corrente da fonte passa pelo motor no sentido da esquerda para a direita o que determina o sentido de rotao do motor. Ao desligar o rel da esquerda e acionar o rel da direita ocorre o sentido de rotao inverso do motor. Quando se utiliza motor CC em ponte H para atuadores robticos, como rodas de veculos ou braos mecnicos, o que determina o torque e a velocidade do atuador a relao de transmisso da caixa de engrenagens conectada ao motor. 5 EMULAO DE DECODIFICADOR PARA DISPLAY DE 7 SEGMENTOS

Antes de comentar sobre os decodificadores, vamos definir o que um display de sete segmentos. O display de sete segmentos, formado por sete leds. Quando necessita-se acender o 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 respectivos pinos. No lado direito, os dois tipos de displays, anodo comum e catodo comum. No esquea que no anodo comum o led liga com Gnd e no catodo comum o led liga com Vcc.

66

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 5. 1: Display de 7 segmentos e conexo interna. Como os segmentos so leds, ento necessrio limitar a corrente, para isso devemos usar um resistor em cada segmento (catodo comum), ou apenas um no comum (anodo comum), seno sero queimados. Normalmente se utilizam resistores entre 220 e 560 ohms para uma fonte de 5Volts. Uma dica, se for usar um display, teste antes cada segmentos, para ter certeza que no est usando um display com algum segmento queimado. Os decodificadores, inverso dos codificadores, tem a funo de converter um cdigo desconhecido de linguagem de mquina, como o binrio de entrada mostrado neste exemplo, em um cdigo compreensvel, como o cdigo decimal ou um desenho em um display de 7 segmentos. Os decodificadores fixos podem ser construdos com portas lgicas reais ou emulados, ou seja, reproduzidos via software, como o caso proposto. Os decodificadores de displays de 7 segmentos, como o 9317 (anodo comum) e o 9307 (catodo comum), recebem 4 bits de entrada para a decodificao do nmero a ser desenhado pelos segmentos dos displays.

67

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

CI - 9317 Entradas /L T L H H H H H H H H H H H /RBI 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 d L H L H L L H L L H L L Sadas 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 pont o H L H H H H H H H H H H Desenh o

teste apaga 0 1 2 3 4 5 6 7 8 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 Hexadecimal g f e d c b a 1 0 0 0 0 0 0 0x40 0 1 1 1 1 0 0 1 0x79 1 0 1 0 0 1 0 0 0x24 2 0 1 1 0 0 0 0 0x30 3 0 0 1 1 0 0 1 0x19 4 0 0 1 0 0 1 0 0x12 5 0 0 0 0 0 1 0 0x02 6 1 1 1 1 0 0 0 0x78 7 0 0 0 0 0 0 0 0x00 8 0 0 1 0 0 0 0 0x10 9 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 68

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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; //ndice i (ponteiro) void main () { clock_int_4MHz(); set_tris_b(0b00000000);// Define os pinos da porta B como sada while(1) { for (i=0;i<10;i++) { port_b = setseg[i]; delay_ms(500); } } } --------------------------------------------------------------------------------------------------------------------Exemplo: Construa um decodificador emulado atarvs de diagramas de Karnaugh para escrever, letra por letra, a cada segundo, a palavra StoP. importante salientar que os pinos do microcontrolador e os pinos do display em anodo comum devem ser conectados com um resistor de 220 a 1K para no queimar os segmentos do display. O circuito abaixo mostra a ligao do display de 7 segmentos.

Figura 5. 2: Conexo do display 7 seg na porta B do PIC. 69

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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(){ 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); 70

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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

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 71

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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.1 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 isso, so colocados transistores de corte que atuam em sequncia sobre cada terminal comum dos displays em paralelo.

72

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 5. 3: Multiplexao de display 7 segmentos. ---------------------------------------------------------------------------------------------------------------------

5.2 EXERCCIO 6: Display de 7 segmentos 00 a 99 Multiplexao:

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 () { 73

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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); }} } } --------------------------------------------------------------------------------------------------------------------Faa jumps entre os pinos: a1 e a2 d1 e d2 b1 e b2 e1 e e2 c1 e c2 Complete a ligao do display 7 segmentos ao PIC conectando da seguinte forma: B0 B1 B2 B3 B4 B5 B6 B7 Segmento Segmento Segmento Segmento Segmento Segmento Segmento Segmento a b c d e f g ponto Insira um resistor de 100 R a 1000 R em cada pino comum e conecte: Comum 1 no pino a0 e Comum 2 no pino a1 de acordo com a programao. g1 e g2 f1 e f2

74

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 5. 4: Esquemtico Exerccio 6. 6 SENSORES INFRAVERMELHOS

6.1 TRANSMISSOR E RECEPTOR IR Os transmissores e receptores IR (infra-red ou Infravermellhos) so muito utilizados como sensor tico por reflexo difusa para registro de posio. A figura abaixo mostra o circuito do sensor e um grfico do sinal de sada (em mV) do receptor IR em funo da distncia perceptvel pelo receptor IR com resistor de elevao de tenso para 5V (pull-up 2K2). O vdeo

75

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

XXX mostra essa variao, com o acionamento de um led pela queda do sinal analgico atarvs da conduo do receptor IR.

Figura 6. 1: Conexo do par infravermelho: TIL 32 (emissor) e TIL 78 (receptor). Para ter um maior alcance e perceber uma maior variao de posio, com esse sensor, aconselhvel utilizar o conversor AD de 10 bits do microcontrolador para identificar variaes de at 5mV no sinal do sensor. A distncia tima a distncia em que 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. 6.2 EXERCCIO 7: Programao Sensor Infravermelho de forma analgica: --------------------------------------------------------------------------------------------------------------------#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(); 76

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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= (4700*(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); }} ---------------------------------------------------------------------------------------------------------------------

Programao do Sensor Infravermelho de forma digital:

77

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

6.3 AUTOMAO UNIVERSAL

DOMTICA

COM

CONTROLE

REMOTO

A comunicao entre uma unidade remota e um eletrodomstico, como uma TV, se d geralmente por emisso de radiao infravermelha modulada por pulsos.

Figura 6. 2: Diagrama de blocos de comunicao infravermelha. Para tornar o sistema insensvel a interferncias e filtrar os rudos, aceitando apenas as ordens do controle remoto, o cdigo de pulsos do emissor contm um dado binrio, que identificado pelo decodificador do receptor. As interferncias podem se originar de fontes estticas, isto , que no pulsam, como o sol, lmpadas incandescentes, aquecedores, e de fontes dinmicas que so mais intensas e geram maior interferncia, como lmpadas fluorescentes, a imagem da TV, outros transmissores de infravermelho e etc. O receptor, geralmente contido num nico invlucro montado no painel frontal do televisor, entrega ao decodificador apenas os pulsos retangulares correspondentes aos cdigos de identificao e dados, eliminando a maioria das fontes de interferncias, exceto as que tenham a mesma frequncia de pulsos, cabendo a rejeio destas ao Decodificador, se no tiverem o mesmo cdigo de pulsos. Para acionar uma carga distncia basta ter o controle remoto e o receptor infravermelho, pois ao invs de capturar o cdigo em bits emitidos pelo controle remoto para decodificao, possvel identificar apenas o start bit desse cdigo que apresenta nvel lgico baixo (0V) que, conectado ao pino de interrupo externa (B0) do microcontrolador com um resistor de pull-up de 2K2, executar uma tarefa desejada como, por exemplo, o chaveamento de um rel para acionamento de uma mquina. Um exemplo de circuito para acionamento de cargas remotas com controle universal pode ser vista abaixo e em http://www.youtube.com/watch?v=1l6s9xtrJl0 .

78

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 6. 3: Conexo de receptor infravermelho de TV no PIC. Note que, se nesse caso no houver um sistema de decodificao, o receptor deve ter um invlucro para proteo contra interferncias, pois est sujeito s fontes estticas e dinmicas. Abaixo um programa exemplo de acionamento de um rel atravs de um controle remoto universal. --------------------------------------------------------------------------------------------------------------------#include <SanUSB.h> short int rele; #int_ext void bot_ext() { rele=!rele; output_bit(pin_b5,rele); delay_ms(1000); //Tempo para deixar o receptor cego por 1 seg aps a 1 atuao da interrupo } main() { clock_int_4MHz(); enable_interrupts (global); // Possibilita todas interrupcoes enable_interrupts (int_ext);//Habilita int. ext. 0 no pino B0 onde est o receptor infravermelho while (TRUE) { output_toggle(pin_B7); 79

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

delay_ms(500); }} --------------------------------------------------------------------------------------------------------------------Para filtrar as interferncias dinmicas necessrio colocar o receptor em uma caixa preta com um pequeno orifcio ou em um tubo feito de caneta com cola quente, como mostra a figura abaixo, para receber somente a luz IR direcional.

Figura 6. 4: Exemplo de proteo do receptor contra emisses externas de raios IR. 7 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 80

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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:

Figura 7. 1: Conexo do LCD no PIC. A Tabela abaixo traz um resumo das instrues mais usadas na comunicao com os mdulos LCD. Tabela - Instrues mais comuns Cdigo DESCRIO MODO RS R/W (Hex) Display Liga (sem cursor) 0 0 0C Desliga 0 0 0A / 08 Limpa Display com Home cursor 0 0 01 Controle do Cursor Liga 0 0 0E Desliga 0 0 0C Desloca para Esquerda 0 0 10 Desloca para Direita 0 0 14 Cursor Home 0 0 02 Cursor Piscante 0 0 0D Cursor com Alternncia 0 0 0F Sentido de deslocamento Para a esquerda 0 0 04 cursor ao entrar com caractere Para a direita 0 0 06 Deslocamento da mensagem Para a esquerda 0 0 07 ao entrar com caractere Para a direita 0 0 05 81

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Deslocamento da mensagem sem entrada de caractere End. da primeira posio

Para a esquerda Para a direita primeira linha segunda linha

0 0 0 0

0 0 0 0

18 1C 80 C0

Utilizando as instrues do LCD: Para rolar o contedo do LCD um caractere para a direita, utilize o comando lcd_envia_byte(0, instruo), por exemplo, lcd_envia_byte(0,0x1C) e para rolar o contedo do LCD um caractere para a esquerda, utilize o comando lcd_envia_byte(0,0x18). Exemplo de uso do recurso de rolagem do display: 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

82

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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. 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: 01000) int32 %li valor decimal c/ sinal (ex: -500) signed long valor decimal c/ sinal alinhado a esquerda (ex: -_500) signed int32 %4li %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 83

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

7.1 EXEMPLO: CONTROLE CAPACITIVA COM LCD

DE

TENSO

DE

UMA

SOLDA

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 inicialmente utilizar um divisor de tenso para adequao tenso mxima do conversor AD do microcontrolador de 5V. Esta relao do divisor compensada via software, multiplicando o valor de tenso lido pela mesma relao de diviso. Os valores de tenso real e tenso de referncia na ordem de 270V, que pode ser incrementada ou decrementada por dois botes de ajuste, so mostrados em um display LCD. A ltima tenso de referncia ajustada guardada na memria. Dessa forma, quando o sistema reiniciado a tenso de referncia assume o ltimo valor ajustado. Quando a tenso real e a de referncia so iguais, a alimentao de 220V do circuito de potncia cortada pela abertura de um rel NF (normalmente fechado) e um LED de atuao ascende indicando que a tenso de referncia foi atingida. O LED de atuao indica a presena ou no de tenso residual nos capacitores de carga e apaga somente aps a descarga de tenso nos terminais de solda, o que contribui para evitar descargas de tenso nos operadores durante o manuseio da solda. Para regular esse sistema embarcado necessrio medir a tenso nos terminais da solda capacitiva com o multmetro e igualar com o valor atual indicado no LCD atravs do potencimetro de ajuste do divisor de tenso. O circuito do sistema de controle de tenso e a foto do LCD aps a montagem em protoboard indicando a tenso de referncia para desligamento (Vref) e a tenso atual (Vat) podem ser vistos na figura abaixo.

84

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 7. 2: Exemplo de aplicao do LCD. --------------------------------------------------------------------------------------------------------------------////////////////////////////Cabealho Padro//////////////////////////////// #include <SanUSB.h> #include <MOD_LCD_SANUSB.c> // RB0-RS, RB1-E, RB2-D4, RB3-D5, RB4-D6, RB5-D7 #define botaoinc pin_a4 #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 85

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 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); }} --------------------------------------------------------------------------------------------------------------------7.2 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; 86

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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_high(pin_b7); delay_ms(500); output_low(pin_b7); delay_ms(500);

}}

Figura 7. 3: Uso de potencimetro no conversor AD do PIC. Para obter novos programas e projetos, basta acessar os arquivos do grupo SanUSB em www.tinyurl.com/SanUSB como tambm baixar a apostila completa disponvel em http://www.4shared.com/document/Qst_pem-/100923Apostila_CPIC.html .

87

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 8. 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..

88

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 8. 2: Uso de perifricos no conversor A/D. Para utilizar este perifrico interno, basta: setup_adc_ports (AN0_TO_AN2); //(Seleo dos pinos analgicos 18F2550) setup_adc(ADC_CLOCK_INTERNAL ); //(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 8.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.

89

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

8.2 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.

8.3 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 T(C)* 10mV/C DIGITAL 1023 (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.

8.4 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; 90

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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); }} ---------------------------------------------------------------------------------------------------------------------

Figura 8. 3: Conexo do potencimetro no conversor A/D.

8.5 EXERCCIO 8:
Leitura de temperatura com o lm35 atravs do conversor AD: --------------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao serial virtual int16 temperatura; main() { clock_int_4MHz(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB 91

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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){ set_adc_channel(0); delay_ms(10); temperatura=430*read_adc()/1023; //Vref = 4,3V devido queda no diodo, ento (430*temp) printf (usb_cdc_putc,\r\nTemperatura do LM35 = %lu C\r\n,temperatura); output_toggle(pin_b7); // Pisca Led em operao normal delay_ms(500); }} ---------------------------------------------------------------------------------------------------------------------

Figura 8. 4: Leitura de temperatura via monitor serial.

92

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 8. 5: Esquemtico Exerccio 8. --------------------------------------------------------------------------------------------------------------------9 LDR E LM35 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. 9.1 EXEMPLO: MODELAGEM MICROCONTROLADO COM LDR DE LUXMETRO

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.

93

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 9. 1: Circuito sensor com LDR. Para obter este circuito e os valores de tenso na sada para as diferentes luminosidades, forma tidos por ANTONIETI, B. Em que as medies da tenso de sada foram feitas e colocadas em uma tabela juntamente com as iluminncias medidas por um luxmetro comercial da marca MINIPA, modelo MLM-1010, de 3 dgitos , com preciso de 4% da leitura + 0.5% do fundo de escala, na faixa de 1 a 50000 Lux. Os valores encontrados so vistos na tabela abaixo. Os valores em negrito foram considerados como limite de cada equao da reta. Correspondncia entre a tenso da sada e a iluminncia Lu x Vol t 2 4, 9 5 4, 9 12 4, 8 20 4, 7 36 4, 5 60 4, 3 94 4, 1 13 0 4 18 24 33 43 53 0 0 8 0 0 3,8 3,6 3,3 3,1 3 67 82 100 0 7 4 2,8 2,7 2,5 118 3 2,4 140 4 2,3 165 1 2,1 1923 2

Com base na tabela, foi construdo o grfico da figura abaixo.


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

(Lux)

Figura 9. 2: Grfico Lux x Volt. Para simplificar o programa do PIC, foi modelado a curva do grfico acima, dividindo-a em trs retas como mostra a figura abaixo.

94

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Diviso da curva em trs retas

Figura 9. 3: Modelagem matemtica dos valores obtidos. O programa funciona da seguinte maneira: l o conversor A/D e multiplica esse valor por sua resoluo (no caso de um converso AD de 10 bits, a resoluo de aproximadamente 5 mV), encontrando ento a tenso (V), depois so feitas 3 comparaes (IF) para saber qual das trs equaes acima deve ser utilizada para calcular a iluminncia (Lux). A figura abaixo mostra o novo grfico lux versus volts, utilizando as equaes 03, 04 e 05. Os clculos da equao geral de cada reta so mostrados a seguir:

95

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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

(Lux)

Figura 9. 4: Grfico lux x tenso utilizando as equaes 3, 4 e 5.

96

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

9.1.1 SUPERVISRIO Esta interface foi desenvolvida utilizando ambiente de programao Delphi e atravs da emulao via USB de um canal serial COM virtual. A figura 8 mostra a tela do supervisrio para iluminncia e temperatura.

Figura 9. 5: Figura da tela do supervisrio para Iluminncia e Temperatura. Veja abaixo, na figura abaixo, o esquema circuito eletrnico montado e a na figura 10, a foto do circuito montado em operao. No final do trabalho mostrado o programa completo para ler a iluminncia no canal AD 1 e a temperatura do ambiente com um LM35 no canal AD 0.

Figura 9. 6: Esquema eletrnico do circuito luxmetro. 97

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 9. 7: Foto do circuito montado. O luxmetro mostrado neste trabalho apresenta como uma soluo de baixo custo para aplicaes onde no necessrio haver uma grande preciso nas medies. O mtodo do modelagem de curva pode ser aplicado em vrias ocasies onde no se sabe a equao que gerou o grfico proposto. Isto ratifica a versatilidade de sistemas microcontrolados.

9.2 EXERCCIO 9: // Programa Luxmetro digital + termmetro digital c/ comunicao via USB// -------------------------------------------------------------------------------------------------------------------#include <SanUSB.h> #include <usb_san_cdc.h>// Biblioteca para comunicao serial virtual float tens,lux,temp; main() { clock_int_4MHz(); lcd_ini(); usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB usb_task(); // Une o perifrico com a usb do PC //while(!usb_cdc_connected()) {} // espera o protocolo CDC se conectar com o driver CDC //usb_wait_for_enumeration(); //espera at que a USB do Pic seja reconhecida pelo PC

98

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

setup_adc_ports(AN0_TO_AN1); setup_adc(ADC_CLOCK_INTERNAL); output_low(pin_b6); printf (lcd_escreve," \f "); 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); 99

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

output_low(pin_b6); } } ---------------------------------------------------------------------------------------------------------------------

Figura 9. 8: Esquemtico Exerccio 9.

100

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

10 REFERNCIAS BIBLIOGRFICAS Grupo SanUSB (2011). Arquivos do Grupo SanUSB. Retirado em 05/01/11, no World Wide Web: www.tinyurl.com/SanUSB/. Jornal O Povo (2011). Da escola pblica para o mundo. Retirado em 05/01/11, no World Wide Web: http://www.opovo.com.br/app/opovo/cienciaesaude/2011/01/08/noticiacienciaesaudejorna l,2086691/da-escola-publica-para-o-mundo.shtml. 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 Verdes Mares (2009). Estudantes competem com robs. Retirado em 05/01/11, no World Wide Web: http://tvverdesmares.com.br/bomdiaceara/estudantes-competem-com-robos/. TV Cidade (2009). Projetos Comsolid/Setapi IFCE. Retirado em 05/01/11, no World Wide Web: http://www.youtube.com/watch?v=i_waT0_201o. 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. Data Sheet do microcontrolador PIC18FXX50 disponvel em http://ww1.microchip.com/downloads/en/DeviceDoc/39632b.pdf. Acessado em 08/06/2009. Microchip Technology Inc.(2009), disponvel em http://www.microchip.com. Acessado em 08/06/2009. Stallings, William (2002). Arquitetura e Organizao de Computadores 5a Edio. So Paulo: Prentice Hall. USB.Org (2009), disponvel em http://www.usb.org/. Acessado em 08/06/2009. Ibrahim, Dagan (2008). Advanced PIC microcontroller Projects in C: from USB to RTOS with the PIC18F series, Newnes. CCS, Inc. (2009), disponvel em http://www.ccsinfo.com/. Acessado em 08/06/2009. Serial Port Terminal (2009) Test and debug drial port devices with advanced serial port terminal, disponvel em http://www.eltima.com/products/serial-port-terminal. Acessado em 08/06/2009. PEREIRA, Fbio (2003). Microcontroladores PIC: programao em C. 1. Ed. So Paulo: rica, 358p.

11 APNDICE I: FUNES SanUSB Este captulo descreve algumas 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 101

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

entendimento, as funes SanUSB foram divididas em oito grupos, definidos por sua utilizao e os perifricos do hardware que esto relacionadas. 11.1 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 inserindo o arquivo #include<SanUSB.h>. 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<SanUSB.h> void main (void) { clock_int_4MHz(); nivel_alto() 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: 102

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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 Observaes: Exemplo: de sada: No No h. h.

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); // ledpisca igual ao inverso de ledpisca // b0 recebe o valor de 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); 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: 103 //Delay de 200 us

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

tempo_ms(500); entrada_pin_xx

//Delay de 500 ms

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; 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) { //espera a interrupo externa 1 (em B1) 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); } } 104 //OU Exclusivo entre as entradas dos pinos b1 e

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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.

11.2 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() 105

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

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

12 APNDICE II: AMBIENTES DE INTERFACE DELPHI E C++BUILDER O Delphi e o BCB (C++Builder), desenvolvidos pela Borland, so ambientes de desenvolvimento de aplicaes orientados a objeto, ou seja, so ambientes grficos programados de forma dedicada e que podem ser utilizados em aplicaes de comunicao entre microcontroladores e computadores pessoais como sistemas supervisrios. O Delphi e o BCB (C++Builder) so praticamente idnticos apresentando a mesma interface de tela, os mesmos objetos, as mesmas funes e, at mesmo, os mesmos exemplos de projetos. A nica diferena que a linguagem de origem do Delphi o Object Pascal (cdigo fonte em Pascal) e a linguagem de origem do BCB o C++ (cdigo fonte em C). O Delphi surgiu primeiro, por isso mais comercial, mas como os programadores de C++ mostraram a necessidade de um ambiente similar orientado a objeto, surgiu o BCB. Os ambientes foram desenvolvidos para que os programadores desenvolvam os projetos sem digitar, em alguns casos, ou digitando o mnimo possvel linhas de comando do cdigo fonte, pois os objetos selecionados pelo mouse geram as linhas de comando no editor de cdigo. A similaridade entre os ambientes Delphi e BCB permite que o projetista de um ambiente possa projetar tambm no outro respeitando as principais diferenas das linguagens de cdigo fonte Pascal e C, estre elas: - Blocos de comando: em Pascal delimitado pelas palavras begin e end, em C pelos caracteres { }; 106

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

O operador de atribuio numrica: em Pascal := e em C apenas = ; O operador de relao de igualdade: em Pascal = e em C = = ; Em Pascal existem as funes (funtion) que retornam valores e os procedimentos (procedures) que so funes que no retornam valores, enquanto em C, as funes no recebem essas identificaes e podem ou no retornar valores, dependendo do comando return( ); A diviso de classes e subclasses de um objeto: em Pascal somente um ponto (.) em C um trao mais a indicao de maior (->).

12.1 COMO CRIAR UMA COMUNICAO BIDIRECIONAL ENTRE O AMBIENTE DELPHI E O PIC SANUSB USANDO O CPORT

Para estabelecer a comunicao, basta gravar qualquer programa da pasta exemplos no SanUSB que emule a comunicao serial virtual. Aps instalar o driver CDC no Windows, siga os passos abaixo. 1 V na paleta de componentes no CportLib e insira na rea de trabalho, o Comport e 2 ComCombobox, um para a porta serial e o outro para o Baud Rate; 2- Nomeie, inserindo dois Label do componente Standard, o ComCombobox superior como Porta serial e o inferior como Baud Rate;

Figura 11. 1: Interface em Delphi para comunicar via serial. 2- Clique no ComCombobox superior, v em properties e altere AutoApply para true, comport: comport1 e ComProperty: CpPort; clique no ComCombobox inferior, v em properties e altere AutoApply para true, comport: comport1 e ComProperty: CpBaudRate; 3- Execute (F9) o projeto para ver se o executvel gerado; Para voltar ao projeto (Alt+F4);

107

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

4- Insira um boto do componente Standard para conectar a porta serial, V em caption e o chame de Conecta&r, onde o & permite habilitar o boto com Alt+r, v em name e o chame de Bconectar; Clique duas vezes no boto Bconectar e escreva as condies abaixo para abrir e fechar a porta serial, mostrando Conectar e Desconectar. Lembre que aps digitar o ponto, o Delphi mostra automaticamente as propriedades de cada objeto (como Caption). if Bconectar.Caption='Conecta&r' then begin ComPort1.Connected:=true; Bconectar.Caption:='Desconecta&r' end else begin ComPort1.Connected:=false; Bconectar.Caption:='Conecta&r' end 4- Insira dois botes do componente Standard para ligar e desligar um Led, V em caption e chame-os de Liga e Desliga; Clique duas vezes no boto Liga e escreva a String para ligar o LED: if Comport1.Connected = true then begin Comport1.WriteStr('L1'); end else begin ShowMessage('Conecte a porta serial!!'); End Clique duas vezes no boto Desliga e escreva a String para desligar o LED: if Comport1.Connected = true then begin Comport1.WriteStr('D1'); end else begin ShowMessage('Conecte a porta serial!!'); end 5- Para mostrar os bytes recebidos insira um Memo do componente Standard e configure name para MemoRx, v na propriedade Line e apague qualquer texto Default dentro do MemoRx.

108

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Figura 11. 2: Selecionando a porta COM virtual. A recepo um evento de interrupo (Events no Object Inspector) do componente Cport, clique no Cport v nas propriedades, selecione a COM disponvel em Port, v em Events e clique duas vezes em OnRxChar, selecionando ComPort1RxChar. Ir aperecer no script: procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); Ento escreva: var recebe:string; begin //Escreva a expresso de recepo serial abaixo e declare a varivel recebe como string, veja acima de begin: Comport1.ReadStr(recebe,count); if recebe = 'L1' then begin MemoRx.Lines.Add('Chegou ' + recebe); //Escreve dentro do Memo PLedOn.Visible:=true; PLedOff.Visible:=false; end; if recebe = 'D1' then begin MemoRx.Lines.Add('Chegou ' + recebe); PLedOn.Visible:=false; PLedOff.Visible:=true; end; 6- Insira dois panel para representar um Led, o primeiro apague caption, cor branca e nome PledOff e o outro por trs apague caption, cor vermelha e nome PledOn e Visible:=false. One o 109

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Led ir ascender (vermelho) quando o boto Liga for pressionando e apagar (branco) quando o boto Desliga for pressionando.

Figura 11. 3: Testando a comunicao. importante salientar que pela USB as strings (L1, D1, etc.) emuladas so enviadas do PIC para o supervisrio atravs bytes individuais, ento existem duas sadas para compreenso do supervisrio: - comandos enviados pelo microcontrolador com apenas um byte e no um conjunto de bytes, por exemplo, L ao invs de L1 e M ao invs de L2. Exemplo: if recebe='L' then begin // Correto! PLedOn.Visible:=true; PLedOff.Visible:=false; end; - inserir na recepo serial uma varival global recebe (deve ser declarada antes de implementation) do tipo string para receber os caracteres individuais emulados pela USB e construir uma string dentro do evento de recepo serial do ComPort. (recebe:=recebe+receb1;) var Serial_Leds: TSerial_Leds; recebe:string; //Varivel Global implementation ..... ...... procedure TSerial_Leds.ComPort1RxChar(Sender: TObject; Count: Integer); var receb1:string; begin 110

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

ComPort1.ReadStr(receb1,count); recebe:=recebe+receb1; //Artifcio usado para que a varivel global //recebe os caracteres individuais emulados pela USB if recebe = 'L1' then begin Label1.Caption:= 'Led ligado'; Button2.Caption:= 'Desligar'; recebe:=''; //Limpa a varivel global recebe end;

importante salientar que para testar a comunicao bidirecional do executvel sem o SanUSB, basta colocar um jump unindo os pinos 2 (Rx) e 3 (Tx) de uma porta serial RS-232 real.

Figura 11. 4: Teste de comunicao inserindo jump em porta serial. 12.2 SUPERVISRIO EM DELPHI PARA CONTROLAR TRS LEDS

Neste exemplo, o supervisrio envia L1 depois que o boto ligar Led 1 pressionado, o label do boto muda para Desliga. Quando o boto Desligar Led 1 pressionado, o supervisrio envia D1. O microcontrolador atua o led e depois confirma para o supervisrio enviando L1 ou D1 que atualiza o label indicando Led 1 ligado ou desligado.

Figura 11. 5: Interface em Delphi para acessar 3 LEDS. 111

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

Esta interface pode ser construda de forma similar ao exemplo anterior, inserindo na recepo serial uma varival global recebe do tipo string para receber os caracteres individuais emulados pela USB, no evento de recepo serial do ComPort. Ela deve ser declarada antes de implementation: var Serial_Leds: TSerial_Leds; recebe:string; //Varivel Global implementation ..... ...... procedure TSerial_Leds.ComPort1RxChar(Sender: TObject; Count: Integer); var receb1:string; begin ComPort1.ReadStr(receb1,count); recebe:=recebe+receb1; //Artifcio usado para que a varivel global //recebe os caracteres individuais emulados pela USB if recebe = 'L1' then begin Label1.Caption:= 'Led ligado'; Button2.Caption:= 'Desligar'; recebe:=''; //Limpa a varivel global recebe end; PROGRAMA DO MICROCONTROLADOR #include <SanUSB.h> #include <usb_san_cdc.h> char dado1,dado2; main() { usb_cdc_init(); // Inicializa o protocolo CDC usb_init(); // Inicializa o protocolo USB while(!usb_cdc_connected()) {} // espere enquanto o protocolo CDC no se conecta com o driver CDC usb_task(); // Une o perifrico com a usb do PC usb_wait_for_enumeration(); //espera at que a USB do Pic seja reconhecida pelo PC port_b_pullups(true); output_low(pin_b0); output_low(pin_b6); output_low(pin_b7); 112

APOSTILA DE MICROCONTROLADORES PIC E PEFIFRICOS - tinyurl.com/SanUSB

while(1) { if (usb_cdc_kbhit(1)) //se o endpoint de contem dados do PC { dado1=usb_cdc_getc(); if (dado1=='L') { dado2=usb_cdc_getc(); if (dado2=='1') { output_high(pin_b0); printf(usb_cdc_putc,"L1"); } if (dado2=='2') { output_high(pin_b6); printf(usb_cdc_putc,"L2"); } if (dado2=='3') { output_high(pin_b7); printf(usb_cdc_putc,"L3"); } } if (dado1=='D') { dado2=usb_cdc_getc(); if (dado2=='1') { output_low(pin_b0); printf(usb_cdc_putc,"D1"); } if (dado2=='2') { output_low(pin_b6); printf(usb_cdc_putc,"D2"); } if (dado2=='3') { output_low(pin_b7); printf(usb_cdc_putc,"D3"); } } }}}

113

You might also like