You are on page 1of 312

XM118 Microcontroladores PIC18

Teoria, Caderno de Experincias e Manual

Exsto Tecnologia Ltda.


Av. Coronel Francisco Palma, 95 Loja 2 Santa Rita do Sapuca MG CEP: 37540-000 +55 35 3471 6898 www.exsto.com.br

XM118 Microcontroladores PIC18

Reviso A B

Principais Autores Jos Domingos Adriano Raffael De Oliveira Marano

Descrio da Verso Verso inicial. Alterao do esquema eltrico

Data de Trmino 01/06/2009 12/08/2009

Copyright 2009 por Exsto Tecnologia Ltda. Todos os direitos reservados

Desenvolvido e produzido com orgulho no Brasil

Exsto Tecnologia Ltda R. Cel. Francisco Palma, 95 Loja 2 Santa Rita do Sapuca MG CEP: 37540-000 +55 35 3471 6898 www.exsto.com.br

Exsto Tecnologia

XM118 Microcontroladores PIC18

NDICE

PGINA

Introduo .............................................................................................................................................. 9 1 2 3 1 Apresentao do produto............................................................................................................. 9 Objetivo deste documento ......................................................................................................... 12 Orientao Pedaggica .............................................................................................................. 13 Microcontroladores ................................................................................................................... 20 1.1 Sistema computacional........................................................................................................ 20 1.1.1 Memrias .................................................................................................................... 21 1.1.1.1 Memria de programa ........................................................................................ 22 1.1.1.2 Memria de Dados ............................................................................................. 23 1.1.2 Dispositivos de entrada e sada ................................................................................... 23 1.1.3 Perifricos ................................................................................................................... 27 1.1.4 CPU ............................................................................................................................. 27 1.2 Arquitetura Computacional ................................................................................................. 32 1.2.1 1.2.2 1.2.3 2 2.1 2.2 Arquitetura von-Neumann .......................................................................................... 33 Arquitetura Harvard .................................................................................................... 34 Microcontrolador, Microprocessador e DSP............................................................... 35

Curso de Microcontroladores PIC18 ................................................................................................... 16

PIC18, microcontroladores de alto desempenho ....................................................................... 37 Microcontroladores PIC ....................................................................................................... 37 2.1.1 A Microchip ................................................................................................................ 38 Arquitetura .......................................................................................................................... 39

2.2.1 Pinagem e hardware bsico ......................................................................................... 41 2.3 Memrias ............................................................................................................................. 43 2.3.1 Memria de programa ................................................................................................. 43 2.3.1.1 Contador de programa e Pilha ............................................................................ 44 2.3.2 Memria de dados ....................................................................................................... 46 2.3.2.1 SFR Registros de funo especial ................................................................... 48 2.3.2.2 Banco de acesso.................................................................................................. 48 2.3.2.3 Memria RAM para USB................................................................................... 49 2.3.2.4 Modos de endereamento ................................................................................... 49 2.4 Processador ......................................................................................................................... 49 2.4.1 ALU ............................................................................................................................ 50 2.4.2 Multiplicador 8x8 bits ................................................................................................. 52 2.5 Portais de I/O ....................................................................................................................... 52 2.6 2.7 Conjunto de Instrues ........................................................................................................ 54 Oscilador .............................................................................................................................. 54

2.7.1 Oscilador a cristal ( LP,XT e HS) ............................................................................... 56 2.7.2 PLL Phase Locked Loop .......................................................................................... 58 2.7.3 Oscilador RC ............................................................................................................... 58 2.7.4 Oscilador Externo ....................................................................................................... 60 2.7.5 Oscilador Interno......................................................................................................... 60 2.7.6 Comparao entre os modos de oscilador ................................................................... 60 2.7.7 Sistema de clock do PIC18F4550 ............................................................................... 61 2.7.8 Configurao de clock para operar com USB ............................................................. 63 2.7.9 Escolha de modo e troca de oscilador ......................................................................... 64 2.8 Caractersticas Especiais ...................................................................................................... 66
Exsto Tecnologia

XM118 Microcontroladores PIC18

2.8.1 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.8.10 2.8.11 3 3.1

Modos de baixo consumo............................................................................................ 66 Reset ............................................................................................................................ 67 POR Power-On Reset............................................................................................... 68 PWRT Power-up Timer ........................................................................................... 69 OST Oscillator Start-up Timer ................................................................................. 69 BOR Brown-out Reset ............................................................................................. 69 Causas de reset ............................................................................................................ 70 Seqncia de inicializao .......................................................................................... 71 Watch-Dog Timer ....................................................................................................... 71 Proteo de Cdigo (Code Protect) ........................................................................ 72 Gravao e depurao ............................................................................................. 72

Ferramentas para o PIC18F: MPLAB IDE e Compilador C18 ................................................. 73 O MPLAB IDE ........................................................................................................................ 73

3.1.1 Criando um novo projeto ............................................................................................ 74 3.1.2 Construindo um projeto............................................................................................... 79 3.1.3 Gravando o microcontrolador ..................................................................................... 80 3.2 Simulao em C.................................................................................................................... 80 3.2.1 Simulao .................................................................................................................... 82 3.2.2 Outras funcionalidades ................................................................................................ 82 3.2.3 Analisador lgico ........................................................................................................ 83 3.2.4 Gerao de estmulos .................................................................................................. 85 3.3 O compilador C18 ................................................................................................................ 87 3.3.1 Outros Compiladores C ............................................................................................... 87 3.3.1.1 CCS .................................................................................................................... 87 3.3.1.2 PICC Lite (Hitech) ............................................................................................. 87 3.4 Depurao em C................................................................................................................... 88 4 Linguagem C para microcontroladores ..................................................................................... 89 4.1 Introduo a linguagem C .................................................................................................... 89 4.1.1 A funo printf() ......................................................................................................... 91 4.1.2 C ou no C, eis a questo. ........................................................................................ 91 4.1.3 Passado e Futuro da linguagem C ............................................................................... 95 4.2 Diretivas ............................................................................................................................... 95 4.2.1 #include ....................................................................................................................... 95 4.2.2 #define......................................................................................................................... 96 4.2.3 #pragma config ........................................................................................................... 96 4.2.4 #pragma interrupt e #pragma interruptlow................................................................ 102 4.3 Tipos de dados ................................................................................................................... 102 4.3.1 Declarao de variveis e constantes ........................................................................ 104 4.3.2 Variveis locais e globais .......................................................................................... 105 4.3.3 Vetores e matrizes ..................................................................................................... 105 4.3.4 Ponteiros.................................................................................................................... 106 4.3.5 Qualificadores ........................................................................................................... 107 4.3.6 Tipos de dados avanados ......................................................................................... 108 4.4 Comandos Bsicos ............................................................................................................. 108 4.4.1 Atribuio.................................................................................................................. 109 4.4.1.1 Acesso aos SFR ................................................................................................ 109 4.4.1.2 Entrada e Sada em C18 ................................................................................... 110 4.4.1.3 Operadores em C .............................................................................................. 110 4.4.1.4 Precedncia de operadores ............................................................................... 113 4.4.2 Deciso ...................................................................................................................... 115
Exsto Tecnologia

XM118 Microcontroladores PIC18

4.4.2.1 If ....................................................................................................................... 115 4.4.2.2 If-else ................................................................................................................ 116 4.4.2.3 Operador ternrio condicional .......................................................................... 116 4.4.2.4 Switch ............................................................................................................... 117 4.4.3 Repetio................................................................................................................... 118 4.4.3.1 Do-While .......................................................................................................... 118 4.4.3.2 While ................................................................................................................ 118 4.4.3.3 For .................................................................................................................... 119 4.4.3.4 Comando Break ................................................................................................ 119 4.5 Funes .............................................................................................................................. 119 4.5.1 Passagem de parmetros ........................................................................................... 120 4.6 Interrupes....................................................................................................................... 122 4.6.1 Utilizao das Interrupes ....................................................................................... 126 4.6.2 Interrupes no C18 .................................................................................................. 129 4.7 Funes teis ..................................................................................................................... 131 4.8 4.7.1 Operaes matemticas ............................................................................................. 132 Tcnicas de Otimizao de Cdigo .................................................................................... 133 4.8.1 4.8.2 4.8.3 5 Rotinas Matemticas ................................................................................................. 133 Usando assembly no C. ............................................................................................. 136 Uso de variveis locais e globais .............................................................................. 136

Aplicaes ............................................................................................................................... 138 5.1 Display de 7 segmentos ..................................................................................................... 138 5.1.1 Displays multiplexados ............................................................................................. 139 5.1.2 Apresentando valores em display.............................................................................. 140 5.2 Buzzer................................................................................................................................. 141 5.3 5.4 Teclado Matricial ............................................................................................................... 141 5.3.1 Interrupo por mudana de estado na porta B ......................................................... 143 Display de cristal lquido .................................................................................................... 144

5.4.1 A biblioteca XLCD ................................................................................................... 148 5.5 Memrias EEPROM e FLASH .............................................................................................. 149 5.5.1 Memria EEPROM ................................................................................................... 150 5.5.1.1 Interrupo........................................................................................................ 151 5.5.1.2 Funes............................................................................................................. 152 5.5.2 Memria Flash .......................................................................................................... 153 5.5.2.1 Interrupo........................................................................................................ 155 6 6.1 6.2 Perifricos ............................................................................................................................... 156 Como usar a ajuda das bibliotecas do C18 ........................................................................ 156 Contadores e Temporizadores........................................................................................... 164

6.2.1 Timer 0 ...................................................................................................................... 164 6.2.1.1 Interrupo........................................................................................................ 165 6.2.2 Timer 1 ...................................................................................................................... 165 6.2.2.1 Interrupo........................................................................................................ 166 6.2.3 Timer 2 ...................................................................................................................... 166 6.2.3.1 Interrupo........................................................................................................ 167 6.2.4 Timer 3 ...................................................................................................................... 167 6.2.4.1 Interrupo........................................................................................................ 168 6.2.5 Funes ..................................................................................................................... 168 6.3 Comparadores Analgicos ................................................................................................. 168
Exsto Tecnologia

XM118 Microcontroladores PIC18

6.3.1 Funcionamento do Comparador ................................................................................ 171 6.3.1.1 Valores de entrada e referncia do comparador ............................................... 171 6.3.1.2 Tempo de resposta do comparador ................................................................... 172 6.3.1.3 Sada do comparador ........................................................................................ 172 6.3.1.4 Interrupo........................................................................................................ 173 6.3.1.5 Funes............................................................................................................. 173 6.4 Conversor Analgico-Digital .............................................................................................. 173 6.4.1 Quantizao ............................................................................................................... 174 6.4.2 Taxa de Amostragem ................................................................................................ 175 6.4.3 Linearidade................................................................................................................ 176 6.4.4 Desenvolvimento ...................................................................................................... 176 6.4.5 Aplicao .................................................................................................................. 178 6.4.6 Usando o conversor ADC no microcontrolador ........................................................ 179 6.4.6.1 Interrupo........................................................................................................ 181 6.4.6.2 Funes............................................................................................................. 182 6.5 CCP Captura, Comparao e PWM ................................................................................. 182 6.5.1 Modo captura ............................................................................................................ 183 6.5.1.1 Interrupes ...................................................................................................... 184 6.5.1.2 Funes............................................................................................................. 184 6.5.2 Modo comparao ..................................................................................................... 184 6.5.2.1 Interrupo........................................................................................................ 185 6.5.2.2 Funes............................................................................................................. 185 6.5.3 Modo PWM............................................................................................................... 185 6.5.4 EPWM....................................................................................................................... 189 6.5.4.1 Interrupo........................................................................................................ 189 6.5.4.2 Funes............................................................................................................. 189 6.6 EUSART Porta Serial Assncrona...................................................................................... 189 6.6.1 Comunicao serial assncrona ................................................................................. 189 6.6.2 Comunicao paralela ............................................................................................... 189 6.6.3 Comunicao serial ................................................................................................... 190 6.6.4 EUSART do PIC18F4550 ......................................................................................... 192 6.6.4.1 Gerador de taxa de transmisso ........................................................................ 193 6.6.4.2 Interrupo........................................................................................................ 194 6.6.4.3 Funes............................................................................................................. 194 6.6.5 EIA-232C .................................................................................................................. 195 6.6.6 EIA-485 ..................................................................................................................... 197 6.6.7 Protocolos de comunicao ....................................................................................... 198 6.6.7.1 Comunicao ponto-a-ponto (para EIA-232) ................................................... 199 6.6.7.2 Comunicao ponto-multiponto (para EIA-485) .............................................. 199 6.7 MSSP Porta Serial Sncrona ............................................................................................. 201 6.7.1 SPI ............................................................................................................................. 201 6.7.1.1 Interrupo........................................................................................................ 203 6.7.1.2 Funes............................................................................................................. 203 6.7.2 I2C............................................................................................................................. 204 6.7.2.1 Interrupo........................................................................................................ 209 6.7.2.2 Funes............................................................................................................. 209 6.8 USB ..................................................................................................................................... 211 Anexos ............................................................................................................................................. 214 Anexo A Distribuio de Pinos do 18F4550.............................................................................. 214 Anexo B Registros de funo especial do PIC18F4550 ............................................................. 215 Anexo C Leituras Recomendadas ............................................................................................. 216
Exsto Tecnologia

XM118 Microcontroladores PIC18

Anexo D - Bibliografia: ................................................................................................................. 217 Anexo E Conjunto de instrues do PIC18 ............................................................................... 218 Convenes: ........................................................................................................................... 218 Conjunto de instrues: .......................................................................................................... 219 CADERNO DE EXPERINCIAS ..................................................................................................... 222 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 1.1 2 2.1 2.2 Aula 1 - Introduo aos microcontroladores ........................................................................... 224 Aula 2 O PIC18F4550 .......................................................................................................... 227 Aula 3 Assembly do PIC18 .................................................................................................. 228 Aula 4 Ferramentas de desenvolvimento ............................................................................. 229 Aula 5 Caractersticas Especiais .......................................................................................... 232 Aula 6 Iniciando com a linguagem C ................................................................................... 234 Aula 7 Estruturas de Deciso ............................................................................................... 236 Aula 8 Estruturas de Repetio ............................................................................................ 239 Aula 9 Funes..................................................................................................................... 242 Aula 10 Interrupes ............................................................................................................ 243 Aula 11 Display de 7 segmentos e buzzer............................................................................ 245 Aula 12 Teclado Matricial e LCD ........................................................................................ 247 Aula 13 Contadores e temporizadores ................................................................................. 248 Aula 14 Conversor A/D ....................................................................................................... 250 Aula 15 Mdulo CCP ........................................................................................................... 251 Aula 16 Comunicao serial assncrona (RS232 e RS485) ................................................. 253 Aula 17 SPI .......................................................................................................................... 256 Aula 18 I2C ........................................................................................................................... 258 Aula 19 Interface industrial .................................................................................................. 260 Contedo do Kit: ..................................................................................................................... 263 Contedo do DVD .............................................................................................................. 263 Instalaes ............................................................................................................................... 263 Instalao do Hardware ..................................................................................................... 263 Instalao dos Softwares ................................................................................................... 265

MANUAL DE OPERAO E MANUTENO .............................................................................. 262

2.2.1 Instalao do MPLAB 8.20 ....................................................................................... 265 2.2.2 Instalando o Compilador C18 ................................................................................... 270 2.3 Configuraes aps a instalao........................................................................................ 274 2.3.1 2.3.2 3 3.1 3.2 3.3 Configurao dos drivers do XICD........................................................................... 274 Configurao do IDE MPLAB para uso do XICD ................................................... 277

Hardware do kit XM118 ......................................................................................................... 282 Fonte de alimentao ........................................................................................................ 282 Microcontrolador PIC18F4450........................................................................................... 283 Conectores para acesso de I/O (PORTS) ............................................................................ 284

Exsto Tecnologia

XM118 Microcontroladores PIC18

3.4 3.5 3.6

X-ICD e conector ICSP ........................................................................................................ 284 3.4.1 Circuitos que impediro o funcionamento correto do XICD .................................... 287 Configurao ...................................................................................................................... 288 Dispositivos de entrada ..................................................................................................... 291

3.6.1 Teclado ...................................................................................................................... 291 3.6.2 Chaves ....................................................................................................................... 291 3.6.3 Push-Buttons ............................................................................................................. 291 3.7 Dispositivos de sada .......................................................................................................... 292 3.7.1 Display LCD ............................................................................................................. 292 3.7.2 Displays de 7 segmentos ........................................................................................... 292 3.7.3 LEDs ......................................................................................................................... 292 3.8 Acionamentos .................................................................................................................... 293 3.8.1 1 Buzzer .................................................................................................................... 293 3.8.2 Rels .......................................................................................................................... 293 3.8.3 Lmpada DC ............................................................................................................. 293 3.8.4 Resistncia para aquecimento ................................................................................... 293 3.8.5 Ventoinha .................................................................................................................. 293 3.8.6 Sensor de rotao ...................................................................................................... 294 3.9 Dispositivos analgicos ...................................................................................................... 294 3.9.1 Potencimetro ........................................................................................................... 294 3.9.2 Sensor de temperatura ............................................................................................... 294 3.9.3 Condicionador de sinais analgicos .......................................................................... 294 3.9.4 Conversor D/A .......................................................................................................... 295 3.10 Interfaces seriais............................................................................................................ 295 3.10.1 Interface RS-232 ................................................................................................... 295 3.10.2 Interface RS-485 ................................................................................................... 295 3.10.3 USB....................................................................................................................... 295 3.11 Diversos ......................................................................................................................... 296 3.11.1 Memria EEPROM .............................................................................................. 296 3.11.2 Potencimetro digital SPI ..................................................................................... 296 3.11.3 Relgio de tempo real (RTC)................................................................................ 296 3.11.4 Gerador de Freqncia .......................................................................................... 296 3.12 Hardware do mdulo XMM01 - Interface Industrial .................................................... 297 3.12.1 3.12.2 3.12.3 4 4.1 5 6 6.1 6.2 Expansor de I/O .................................................................................................... 298 Entradas ................................................................................................................ 298 Sadas .................................................................................................................... 298

Resolvendo Problemas ............................................................................................................ 299 Suporte Tcnico ................................................................................................................. 299 Garantia ................................................................................................................................... 299 Apndice A - Esquemas eltricos............................................................................................ 300 XM118 ................................................................................................................................ 300 XMM01 .............................................................................................................................. 308

Exsto Tecnologia

XM118 Microcontroladores PIC18

Introduo
Parabns! Voc acaba de adquirir um produto de alta qualidade e tecnologia de ponta. O Kit Educacional XM118 ser de grande auxlio no aprendizado e desenvolvimento de sistemas digitais, na elaborao de cursos e treinamentos que envolvam microcontroladores PIC18. A Exsto Tecnologia uma empresa situada em Santa Rita do Sapuca, Minas Gerais, cidade conhecida como Vale da Eletrnica por seu destaque na indstria eletroeletrnica e pela excelncia de suas instituies de ensino. Nossa misso sempre fornecer as melhores ferramentas para o desenvolvimento e aprendizado em eletrnica e desenvolvimento de software. Visite nosso site www.exsto.com.br para conhecer outras solues e produtos oferecidos.

1 Apresentao do produto
O Kit Educacional XM118 um ambiente de desenvolvimento que visa facilitar o aprendizado e o desenvolvimento de aplicaes de microcontroladores PIC18. Seu desenvolvimento foi baseado no PIC18F4550, que dentre outras caractersticas importantes possui um perifrico USB Device, apesar de suportar outros componentes de 40 pinos (nestes casos nem todas as aplicaes da placa so suportadas). A tabela abaixo apresenta algumas das principais caractersticas do PIC18F4550. A tabela a seguir trs as principais caractersticas do PIC18F4550.

Exsto Tecnologia

XM118 Microcontroladores PIC18

10

Caracterstica Freqncia de Operao Memria de programa Memria de dados RAM Memria de dados EEPROM Fontes de interrupo Terminais de I/O Temporizadores/Contadores CCP ECCP 1 Comunicao Serial Comunicao USB Comunicao Paralela Conversor analgico para digital Detector de tenso programvel Conjunto de instrues
Notas:
1 2

PIC18F4550 DC a 48MHz 32768 bytes 2048 bytes 256 bytes 20 36 4 1 1 MSSP EUSART 2 Sim SPP3 10 bits, 13 canais 1 75 convencionais + 8 do modo entendido

O mdulo ECCP um mdulo CCP melhorado, com novas caractersticas O mdulo EUSART um mdulo USART melhorado, com novas caractersticas 3 Porta paralela mestre

Caractersticas dos PIC18F4550

A escolha da famlia PIC18 se justifica por ser uma famlia de dispositivos de 8 bits de alto desempenho, que possui recursos comuns a todos os microcontroladores modernos, permitindo um aprendizado que no se limite apenas a essa famlia mas que se estenda a outras famlias PIC e mesmo a outros fabricantes. Outra vantagem dessa linha poder usar um compilador C profissional como o C18. Na atualidade o desenvolvimento em sistema embarcados praticamente todo feito em C, sendo usado o Assembly apenas em situaes especficas. O kit foi concebido para poder explorar ao mximo os recursos oferecidos pelo microcontrolador. As diversas aplicaes esto dispostas de forma didtica, com indicao na serigrafia da placa. Esto disponveis diversos pontos de medida (teste points) que permitem a visualizao dos sinais de maior relevncia. O gravador/depurador XICD-2 embutido no kit permite, alm da gravao a depurao (esse processo ser mais explorado ao longo do curso); esse dispositivo totalmente compatvel com o ICD-2 Microchip e conecta-se diretamente ao MPLAB IDE. As principais caractersticas do kit XM118 so: Baseado no PIC18F4550 Fontes de alimentao o o +5 e +12V Fontes chaveadas com seleo automtica de tenso e protees
Exsto Tecnologia

XM118 Microcontroladores PIC18

11

Bastidor robusto em ao. Gravador/depurador XICD-2 (compatvel com MPLAB) embutido. Acesso a todos os pinos do microcontrolador Configuraes de hardware atravs de dip switch 8 chaves dip switch ligadas ao PORTB Teclado matricial de 16 teclas 6 push-buttons em pinos de funo especial (reset, interrupes, timers) 8 LEDs convencionais ligados ao PORTD 2 LEDs bicolores 4 displays de 7 segmentos multiplexados Display LCD Alfanumrico Conector para LCD Grfico 128x64 (Opcional) Buzzer Lmpada DC acionada por PWM 4 rels Gerador de sinal ajustvel Sistema de controle o o o o Resistncia para aquecimento Ventoinha Sensor de temperatura da resistncia Tacgrafo para medida de velocidade da ventoinha

Dispositivos de comunicao serial o o o Memria EEPROM I2C Potencimetro digital SPI RTC com bateria prpria

Portas de comunicao serial o o o RS232 RS485 USB 2.0 Full Speed (Device)

Perifricos analgicos o o DAC a partir do PWM ADC com canais especiais: Potencimetro Sensor de temperatura Duas entradas com ganho ajustvel de 1 a 10
Exsto Tecnologia

XM118 Microcontroladores PIC18

12

Entrada 0 a 10VDC Entrada 4 a 20mA Como vrias aplicaes utilizam os mesmos pinos do microcontrolador o kit possui um srie de dip switchs para configurao de hardware. Consulte o manual e o esquema eltrico

2 Objetivo deste documento


Este documento divido em trs unidades, com os seguintes contedos: Apostila: apresenta a conceituao terica sobre o assunto do kit Caderno de Experincias: traz a orientao para a realizao das experincias prticas. Manual de Operao e Manuteno: rene as informaes necessrias para instalao e configurao do kit, alm de trazer esquemas eltricos e outras informaes importantes para manuteno. Documentos adicionais como guias de software e manuais de componentes esto tambm contidos no CD ou DVD que acompanha o kit. Esse contedo ser discutido oportunamente na seo Manual.

Exsto Tecnologia

XM118 Microcontroladores PIC18

13

3 Orientao Pedaggica
O material didtico (apostila e caderno de experincias) tem como funo guiar o aluno durante todo o seu aprendizado em Microcontroladores PIC18 utilizando o kit XM118. A apostila trs os contedos tericos sobre microcontroladores e linguagem C. Ela organiza em captulos, de forma que possa ser dividida conforme o plano de aula e carga horria do curso. Temos o propsito de explorar os conceitos abordados e imediatamente prover a integrao do aluno com o prazer da prtica, tornado seu aprendizado mais interessante e consistente. Todo o contedo aqui abordado de forma a fomentar a vontade do aluno e aplicar o conhecimento de forma imediata, permitindo que ele possa criar seus prprios circuitos a partir dos conhecimentos adquiridos. O curso e, em especial as experincias prticas, foi pensados com o objetivo de levar o aluno a adquirir competncias para o trabalho com microcontroladores, a saber: Compreender, analisar e comparar microcontroladores Compreender e utilizar circuitos com microcontroladores Ser capaz de entender e desenvolver programas em linguagem C para microcontroladores Conhecer os perifricos mais comuns em microcontroladores Desenvolver projetos usando microcontroladores O assunto microcontroladores bastante extenso e no se pode fazer um curso com a pretenso de abord-lo todo. No caso deste curso foi enfocado o microcontrolador PIC18F4550, um dispositivo de uma famlia avanada com uma srie de recursos. Buscamos explorar a maioria desses recursos, apesar de alguns no terem sido inclusos e outros serem tratados apenas de forma introdutria. Foi dada especial ateno ao estudo da linguagem C para microcontroladores. A diviso das aulas do curso prev um esquema de 2 horas de teoria e 1 hora de prtica para cada aula. Abaixo apresentada uma proposio de diviso de aulas tericas. Para cada aula destas existe uma aula prtica na seo Caderno de Experincias (para alguns contedos conceituais a aula prtica na verdade um questionrio sobre o assunto abordado). Tendo em conta a extenso do assunto e a variedade de cargas horrias das disciplinas, propomos dois nveis em que o curso pode ser ministrado: bsico e avanado. O nvel bsico aborda o contedo mnimo que entendemos como necessrio a um curso de microcontroladores, com uma carga horria limitada em 30 horas (10 aulas). O nvel avanado foi previsto para uma carga de 60 horas (19 aulas + 1 de projeto) e permite explorar alguns perifricos a mais, alm de aumentar a oportunidade de exercitar a linguagem C com mais experincias. Recomendamos que na ltima aula do mdulo avanado seja proposto um projeto envolvendo diversos conceitos estudados ao longo do curso.
Exsto Tecnologia

XM118 Microcontroladores PIC18

14

Aula Nveis Tpicos Assuntos B A 1 x x 1 Microcontroladores 1.1 Sistema computacional 1.2 Arquitetura Computacional 2 PIC18, microcontroladores de alto desempenho 2.1 Microcontroladores PIC 2.2 Arquitetura 2.3 Memrias 2.4 Processador 2.5 Portais de I/O 2.6 Conjunto de instrues do PIC18 3 Ferramentas para o PIC18F: MPLAB IDE e Compilador C18 3.1 O MPLAB IDE 3.2 Simulao em C 3.3 O compilador C18 3.4 Depurao em C 2.7 Oscilador 2.8 Caractersticas Especiais 4.2 Diretivas 4 Linguagem C para microcontroladores 4.1 Introduo a linguagem C 4.3 Tipos de dados 4.4.1 Atribuio 4.4.2 Deciso 4.4.4 Repetio 4.5 Funes 4.6 Interrupes 5 Aplicaes 5.1 Display de 7 segmentos 5.2 Buzzer 5.3 Teclado Matricial 5.4 Display de cristal lquido 6 Perifricos 6.2 Contadores e Temporizadores 6.4 Conversor Analgico-Digital 6.5.1 Modo captura 6.5.2 Modo comparao 6.5.3 Modo PWM 6.6 USART 6.7.1 SPI 6.7.2 I2C Mdulo XMM01 e expansor de I/O

Tema

Base conceitual

Hardware do microcontrolador

Assembly do PIC18

Ferramentas de desenvolvimento

Caractersticas especiais

Fundamentos da linguagem

7 8 9 10 11 12

x x x x

x x x x

Funes Interrupes

Interface Homem-Mquina

13 14 15

16 17 18 19

x x x x x x x x x

Temporizados e contadores

Mdulo CCP - Captura, comparao e PWM

Portas de comunicao Interface Industrial

Algumas observaes: 1. Para instituies que possuem cursos de linguagem C ANSI anterior ao de microcontroladores as aulas 6, 7, 8 e 9 podem ser resumidas em 1 ou 2 aulas, enfocando apenas a parte prtica.

Exsto Tecnologia

XM118 Microcontroladores PIC18

15

2. A aula 1 na tem o objetivo de introduzir ou revisar os conceitos fundamentas sobre microcontroladores e processadores. Se houve um estudo prvio de arquitetura de computadores ou outros modelos de microcontroladores, essa aula se torna dispensvel. 3. Na apresentao das aulas alguns assuntos foram apresentados em seus subitens (como os tpicos 6.4 e 6.5) por uma questo de diviso de aulas. Entenda-se que todo o tpico deve ser estudado para um correto entendimento.

Exsto Tecnologia

XM118 Microcontroladores PIC18

16

Curso de Microcontroladores PIC18

Exsto Tecnologia

XM118 Microcontroladores PIC18

17

A Um Poeta
Olavo Bilac Longe do estril turbilho da rua, Beneditino, escreve! No aconchego Do claustro, na pacincia e no sossego, Trabalha, e teima, e lima, e sofre, e sua!

Mas que na forma se disfarce o emprego Do esforo; e a trama viva se construa De tal modo, que a imagem fique nua, Rica mas sbria, como um templo grego.

No se mostre na fbrica o suplcio Do mestre. E, natural, o efeito agrade, Sem lembrar os andaimes do edifcio:

Porque a Beleza, gmea da Verdade, Arte pura, inimiga do artifcio, a fora e a graa na simplicidade.

O mundo da tecnologia est em constate e rpida evoluo. Acompanhar essa evoluo exige dedicao e investimento da parte dos que aceitam o desafio de no s consumir tecnologia, mas tambm de cri-la. A linha de microcontroladores PIC18 foi lanada com uma arquitetura renovada e otimizada em relao linha PIC16, trazendo tambm vrias inovaes que permitem o desenvolvimento de aplicaes mais avanadas e eficientes. Faz-se necessrio, ento, uma atualizao dos conhecimentos para tirar o mximo proveito das novas caractersticas da linha PIC18.

Exsto Tecnologia

XM118 Microcontroladores PIC18

18

Paralelamente a essa evoluo de hardware processa-se uma revoluo de software, onde a linguagem C apresentada como escolha mais adequada para o desenvolvimento de cdigo em microcontroladores, em substituio a linguagem Assembly. Essa revoluo ocasionada no s pelo desenvolvimento de compiladores mais confiveis e eficientes como tambm pela otimizao do conjunto de instrues e arquitetura dos microcontroladores para a linguagem C. A linha PIC18, objeto de nosso estudo, tem sua arquitetura otimizada para C e a Microchip oferece um eficiente compilador, o C18. Tendo isso em vista, foi desenvolvido um curso que permitisse abordar as duas inovaes: a linha PIC18 e programao de microcontroladores em linguagem C. No captulo 1 apresentado o conceito de microcontroladores. Esse captulo serve no s para introduzir os que ainda no esto familiarizados com microcontroladores como tambm como uma reviso dos conceitos fundamentais. Permite, dessa forma, equalizao dos conhecimentos para melhor aproveitamento do curso. O capitulo 2 so apresentadas as caractersticas da linha PIC18, tratando especificamente do PIC18F4550. So estudados detalhadamente as memrias de programa e dados, tipos de osciladores, caractersticas especiais, ALU. Esse captulo concentra o estudo do hardware do microcontrolador, com exceo dos perifricos que so tratados no captulo 6 e das interrupes, abordadas juntament com a linguagem C no captulo 4. No captulo 3 trata-se das ferramentas de software usadas, o MPLAB IDE e o compilador C18. A instalao, configurao e uso dessas ferramentas so apresentados de forma simples, com seqncias passo-a-passo de configurao e uso. Estudam-se tambm as ferramentas de simulao e depurao. O capitulo 4 trata da linguagem C e seu uso em microcontroladores. Buscou-se apresentar os conceitos de C conforme o padro ANSI, fazendo comentrios sobre detalhes de implementao do C18 quando oportuno. O compilador C18 acompanhado de diversas bibliotecas de funes, tanto as padronizadas para a linguagem C como as especficas para microcontroladores PIC. As funes dessas bibliotecas so apresentadas detalhadamente no documento MPLAB C18 C COMPILER LIBRARIES (que se encontra no CD do curso) e aos arquivos de ajuda do compilador. Outros captulos do curso fazem referncia a estes documentos. Diversas aplicaes de microcontroladores so apresentadas no captulo 5. O enfoque principal na interface homem-mquina, que permite a interao do microcontrolador com o usurio.
Exsto Tecnologia

XM118 Microcontroladores PIC18

19

No capitulo 6 so estudados vrios dos perifricos do PIC18F4550. Cada tpico iniciado com o funcionamento do perifrico, seguindo do estudo das rotinas do compilador C18 que permitem sei uso. Nos anexos encontram-se diversas informaes teis e para consulta no dia-a-dia. Ateno especial deve ser dada ao anexo D Bibliografia e leituras recomendadas, que comenta diversas fontes de informao sobre PIC, PIC18 e linguagem C.

Exsto Tecnologia

XM118 Microcontroladores PIC18

20

1 Microcontroladores
O objetivo deste curso tratar dos microcontroladores da linha PIC18Xxxx, mais especificamente do PIC18F4550. Existem diversos textos que tambm tratam desse assunto. Contudo, existe uma carncia de informaes sobre o que vem a ser um microcontrolador, seus princpios de funcionamento, as partes comuns a todos os microcontroladores, dentre outras coisas. Mesmos os manuais dos componentes admitem que o leitor j possua um conhecimento prvio do assunto. Para suprir essa carncia, a primeira unidade desse material tratar de sistemas computacionais e microcontroladores de forma genrica. importante este embasamento terico no somente para garantir um melhor aproveitamento no estudo do PIC 18F4550 como tambm para tornar o leitor apto a entender o funcionamento de outros microcontroladores, tanto da linha PIC como de outros fabricantes. Esses conhecimentos tambm so importantes na escolha do microcontrolador a ser utilizado em um projeto, pois permite estabelecer as bases conceituais para a comparao de suas caractersticas.

1.1 Sistema computacional


Inicialmente devemos conceituar o que vem a ser um sistema computacional. Como j sabemos, os sistemas digitais podem ser classificados em trs tipos: combinacionais, seqenciais e computacionais. Os sistemas computacionais, sendo o tipo mais complexo, so compostos por sistemas combinacionais e seqenciais. O que caracteriza um sistema computacional a possibilidade de ser programado. Esse conceito no recente, sendo que j no sculo XIX foram tentadas implementaes dele. Contudo, somente na segunda metade do sculo passado que foram desenvolvidas tecnologias (transistor, circuitos integrados) que permitiram a construo dos processadores e computadores como os conhecemos hoje. Um sistema computacional composto por hardware (parte fsica) e software (programa). O hardware dos sistemas computacionais, ao contrrio do que ocorre com sistema combinacionais e seqenciais, no possui uma aplicao especfica. No basta aliment-lo devidamente para que ele funcione. necessrio que exista um software para ser executado. Em contrapartida, um mesmo hardware pode executar uma infinidade de funes diferentes, simplesmente alterando o seu software. Uma boa analogia imaginar o hardware como um instrumento musical e o software como uma partitura. Um piano por si s no faz nada, necessria uma msica que possa ser executada a fim de se obter algum resultado. Da mesma forma que a msica contida na partitura, um programa ser composto por um conjunto limitado de smbolos (no caso da partitura so as notas musicais e
Exsto Tecnologia

XM118 Microcontroladores PIC18

21

no caso do programa so as instrues) que podem ser organizados de diversas formas diferentes, obtendo-se diferentes resultados. Como exemplo de sistema computacional, o primeiro que nos vem em mente o computador pessoal (PC), hoje to difundido. Contudo, existem vrios equipamentos, to ou mais comuns que os PCs, que so sistemas computacionais. Por exemplo, os vdeos-game, os mini-games, as calculadoras, palm-tops, etc. Alm disso, temos os microcontroladores, que so o objetivo desse nosso estudo, que esto presentes nas mais diversas aplicaes, de eletrodomsticos a plantas industriais, de alarmes a equipamentos mdicos. A estrutura bsica de um sistema computacional como a apresentada no diagrama em blocos abaixo.

Memria Dados Controle (CPU) Dispositivos de Entrada e sada e perifricos


Barramento de Dados

Programa

Mundo Externo

Diagrama em blocos genrico de um sistema computacional A seguir so estudados detalhadamente cada um desses blocos. 1.1.1 Memrias Memrias so dispositivos que armazenam informaes. No caso de um sistema

computacional, essa informao, assim como a memria, pode ser dividida em dois tipos: programa e dados. Programa a seqncia de instrues que ao CPU deve seguir para desempenhar a funo a que se destina a aplicao. Quando se trata de um programa executado por um microcontrolador so usados tambm os termos firmware e software embarcado (embedded software). J dados so variveis que a CPU usa durante a execuo do programa.

Exsto Tecnologia

XM118 Microcontroladores PIC18

22

Existem tambm Registros (bytes de memria) com funes especiais que trabalham junto ao processador (CPU). Em alguns casos esses registros esto dentro do prprio processador e em outros eles so mapeados juntamente com a memria de dados. 1.1.1.1 Memria de programa Sua funo armazenar o software (programa) a ser executado no sistema. Tambm

utilizada para guardar tabelas de constantes. Dentre os vrios endereos de memria de programa existem alguns com finalidade especfica, chamados vetores. So endereos para onde o programa desvia quando ocorrem determinados eventos. Assim, sempre existir um vetor de reset, que onde o programa comea (ou recomea) quando o sistema inicializado (ou resetado). H tambm as interrupes, das quais trataremos mais adiante, e que causam desvios no fluxo do programa quando ocorrem determinados eventos. Os endereos associados s interrupes so chamados de vetores de interrupo. Podemos encontrar sistemas onde, independentes da causa da interrupo, h apenas um vetor para onde o programa desvia e sistemas onde cada fonte ou tipo de interrupo possui um vetor. De uma forma geral, a memria de programa uma memria no voltil. Isto quer dizer que o programa no perdido quando se retira a alimentao do sistema; se no fosse assim, o sistema teria que ser programado a cada vez que fosse colocado em funcionamento. As diferentes tecnologias usadas para implementao da memria de programa dos microcontroladores so: ROM: somente de leitura. Geralmente chamada de masked-ROM (masked = mascarado), gravada pelo fabricante do componente, o que em quantidades muito grandes reduz custos. EPROM: apagvel atravs de luz ultra-violeta (memrias janeladas). Utilizada no processo de desenvolvimento e algumas vezes no produto acabado, quando h a necessidade de se poder alterar o software. OTP: programvel somente uma vez, utilizada em produo. Flash: uma memria eletricamente apagvel (EEPROM) com tempos de acesso para leitura rpido. Oferece uma grande flexibilidade, pois geralmente possvel reprogramar um equipamento sem retirar o microcontrolador da placa (gravao in-circuit). Alm disso, alguns modelos permitem que o microcontrolador altere sua prpria memria de programa. Praticamente todos os microcontroladores j possuem internamente algum desses tipos de memria de programa. De uma forma geral, o tipo de memria no influencia nas caractersticas dos componentes. Atualmente quase todos os microcontroladores possuem verses em memria Flash, pois a mesma apresenta muitas vantagens a um custo dos mais baixos. Os lanamentos em
Exsto Tecnologia

XM118 Microcontroladores PIC18

23

microcontroladores tendem a ser todos com memria Flash, mas ainda existem alguns componentes sendo fabricados com os demais tipos de memria. Alguns microcontroladores apresentam a possibilidade de expanso de memria, isto , permitem acrescentar mais componentes de memria externamente; outros no. A quantidade de memria interna uma das principais diferenas entre microcontroladores de uma mesma linha, e tem um impacto significativo no preo dos componentes. Esse um dos motivos porque se deve otimizar os programas para que tenham o menor tamanho possvel, ou seja, ocupem a menor quantidade de memria possvel. 1.1.1.2 Memria de Dados a memria onde so armazenados os dados a serem processados pelo computador (as

variveis dos programas e outras informaes.). Como esses dados so constantemente alterados, a memria utilizada para armazen-los do tipo RAM, que pode ser reescrita indefinidamente. Como se trata de uma memria voltil, quando a alimentao cortada esses dados so perdidos. Alguns microcontroladores disponibilizam tambm memrias EEPROM para armazenar dados que no devem ser perdidos com a falta de energia. Da mesma forma que a memria de programa, os microcontroladores j possuem internamente alguma quantidade de memria RAM de dados. Aqui tambm alguns permitem expanso de memria e outros no. A quantidade de RAM tambm varia de componente para componente. 1.1.2 Dispositivos de entrada e sada So responsveis por realizar a interface do processador com o mundo externo. atravs

deles que um sistema computacional adquire dados externos e aciona processos. So comumente chamados de dispositivos de I/O (Input/Output Entrada/Sada), portais de I/O (no ingls, ports) ou simplesmente portais. Para entender seu funcionamento antes devemos entender como funcionam os barramentos. As vrias partes de um sistema computacional (CPU, memrias, dispositivos de I/O) so ligadas entre si atravs de barramentos (tambm chamados via ou, em ingls, bus), que so ligaes fsicas de comunicao paralela entre os componentes. Existe um barramento de dados, ao qual todos os dispositivos esto ligados e por onde trocam informaes. Todos os dispositivos ligados ao barramento de dados so lidos (colocam dados no barramento) ou escritos (recebem os dados do barramento) pela CPU, que controla todo o processo. Assim temos vrias sadas e entradas ligadas aos mesmos pontos. Esse sistema no entra em conflito porque somente um dispositivo acessado
Exsto Tecnologia

XM118 Microcontroladores PIC18

24

por vez. Enquanto um dispositivo acessado (lido ou escrito) os demais ficam em alta impedncia, se so sada, ou ignoram os dados do barramento, se so entrada. Dessa forma, surge a necessidade de outro barramento, o barramento de endereos, que permite ao processador enderear, ou seja, indicar qual dispositivo ser acessado. Alm desse, h tambm um barramento de controle, que indica basicamente se o acesso de leitura ou escrita, pois muitas vezes um mesmo endereo de memria ou dispositivo de I/O pode ser lido ou escrito. O barramento de controle tambm serve para indicar se est sendo acessado um endereo de memria ou um dispositivo de entrada e sada, j que utilizam o mesmo barramento de endereo. O tamanho de um barramento, que seu nmero de bits, deve ser considerado com ateno. O tamanho do barramento de dados limita o tamanho bsico de dados que trafegam pelo sistema e so processados pela CPU. Por exemplo, ao dizer que um sistema de 8 bits podemos concluir que ele faz operaes matemticas envolvendo operadores de 8 bits. Por isso comum classificar os sistemas computacionais pelo tamanho de seu barramento. H hoje microcontroladores de 8, 16 e 32 bits. J o tamanho do barramento de endereos nos informa qual a quantidade mxima de endereos (de memria ou dispositivos de I/O ) pode ser acessados. A capacidade de memria de 2n endereos, sendo n o nmero de bits do barramento de endereos. Exemplificando, um barramento de endereo de 10 bits capaz de enderear 210 = 1024 endereos. Conforme exposto acima, os dispositivos de entrada devem permitir colocar sua sada ligada ao barramento de dados em alta impedncia. Para tanto, so tradicionalmente utilizados buffers com sada tri-state para essa funo. Para a implementao dos dispositivos de sada so utilizados latches, pois permitem o carregamento dos dados somente quando so acionados. A seleo dos dispositivos de I/O a partir do barramento de endereos feita por decodificadores.

Exemplo 1.1
A figura abaixo mostra um exemplo de utilizao de buffers e latches como portais de entrada e sada, respectivamente. Ambos os portais esto ligados ao barramento de dados. Cada portal possui um decodificador (DEC), que apresenta nvel alto na sada quando o valor do barramento de endereos o endereo do portal. Os sinais RD (read ler), WR (write escrever) e IORQ (I/O request requisio de I/O) constituem o barramento de controle.
Exsto Tecnologia

XM118 Microcontroladores PIC18

25

Para realizar uma operao de escrita do portal , o processador inicialmente coloca os dados a serem escritos no barramento de dados e o endereo do portal no barramento de endereo. Ento so acionados os sinais WR e IORQ. Nesse instante temos 1 nas trs entradas da porta AND que aciona o terminal E do latch, que faz com ele carregue os dados presentes no barramento na sada. Para a operao de leitura, o endereo do portal colocado no barramento de endereos. Em seguida, os sinais IORQ e RD so acionados. Assim temos 1 no terminal de habilitao de sada do buffer e o valor em sua entrada transferido para o barramento de dados, podendo ser armazenado pela CPU.

Portais de entrada e sada

A funo do microcontrolador, como o prprio nome diz, controlar processos e circuitos. Para otimizar essa funo, seus portais de entrada e sada so tratados como registros de funes especiais, ou seja, so lidos e escritos como se fossem simples bytes de memria. Em sistemas como microprocessadores geralmente o tratamento diferente, havendo instrues especficas para acesso aos portais e outras implicaes. Para maior flexibilidade do sistema, geralmente os microcontroladores utilizam um sistema de portais mais complexo que o apresentado acima, que permite que um mesmo terminal do microcontrolador seja configurado como entrada ou sada. Para que isso seja possvel utilizado um registro de portal e um registro de direo de dados (DDR Data Direction Register). Esse ltimo permite selecionar a direo de cada bit de um portal de sada, individualmente. A figura abaixo

Exsto Tecnologia

XM118 Microcontroladores PIC18

26

mostra o esquema genrico de um bit de portal. Outros microcontroladores utilizam configuraes semelhantes.

Esquema tpico de um pino de I/O

O latch de sada chamado Data Latch. O registro de direo de dados o TRIS Latch. Se o valor armazenado no latch TRIS for 1 o pino est configurado como entrada: os transistores de sada estaro cortados independente do valor na sada do latch de dados. Quando for realizada uma operao de leitura do portal (acionando o sinal RD PORT) o nvel lgico presente no pino do microcontrolador armazenado em um latch de entrada e passado ao barramento de dados (Data Bus) atravs de um buffer tri-state. No restante do tempo a sada desse buffer fica em alta impedncia. Se o valor armazenado no latch TRIS for 0, o driver de sada est ativo, forando o pino ao nvel lgico correspondente ao armazenado no latch de dado. Qualquer dado escrito no latch de dados imediatamente transferido para o terminal do microcontrolador. Caso seja feita uma operao de escrita em um terminal configurado como entrada, o dado escrito ser armazenado no latch de dados, mas no ser transferido para o terminal, pois o driver est desativado. Por outro lado, se for realizada uma operao de leitura em um terminal configurado como sada, o valor lido ser o presente o terminal, que o mesmo escrito no latch de dados. Todo esse processo, contudo, ocorre de forma automtica e transparente para o programador, bastando que este defina a direo de cada pino.

Exsto Tecnologia

XM118 Microcontroladores PIC18

27

1.1.3

Perifricos Alm dos portais de I/O e as memrias, podemos ter muitos outros tipos de dispositivos

ligados ao barramento de dados. Esses dispositivos nada mais so do que circuitos destinados a realizar funes especiais, teis na aplicao a que se destina o sistema computacional. Esses dispositivos perifricos so particularmente importantes nos microcontroladores, que os tem uma grande variedade. Como perifricos mais comuns podemos citar os temporizadores e contadores (Timers), os mdulos de comunicao serial, conversores A/D e D/A, mdulos de CCP (Captura, comparao e PWM), drivers de LCD, comparadores analgicos, etc. O modo de acesso aos perifricos semelhante ao de acesso aos portais de I/O. Eles muitas vezes possuem vrios registros de parmetros que podem ser configurados, e um ou mais registros de entrada e sada de dados. 1.1.4 CPU A CPU (Central Processing Unit Unidade Central de Processamento) ou processador parte

principal de um sistema computacional. comum se referir CPU dos microcontroladores como core (ncleo). Sua funo executar as instrues do programa e processar dados. Para tanto ela controla todas as demais partes do sistema e envia ou recebe dados dessas partes. Ela tambm capaz de interpretar e colocar em execuo as instrues que compe o programa e realizar operaes lgicas e aritmticas. Genericamente um processador organizado conforme o diagrama em blocos abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

28

Diagrama em blocos de uma CPU O diagrama o de um processador de arquitetura Harvard. O que vem a ser essa arquitetura ser explicado mais adiante. Por enquanto o importante saber que nem todos os processadores so organizados dessa forma. Mas seus componentes principais so os mesmos, o que muda a forma como se comunicam. Optamos por apresentar um processador dessa forma porque o tipo de CPU utilizado nos microcontroladores PIC. Os nomes de cada bloco esto em ingls no diagrama para facilitar a identificao desses blocos nos manuais de microcontroladores e microprocessadores, que comumente so escritos nessa lngua. Os blocos pontilhados podem ou no estar presentes. As vias em amarelo (cinza claro) representam o barramento de dados interno do processador, que ligado ao barramento de dados do sistema. As vias em verde (cinza escuro) so outras vias de dados e sinais de controle. O principal bloco de um processador o decodificador de instrues (Instructiuon Decoder). Voltando a analogia entre um sistema computacional e um instrumento musical, o decodificador de instrues pode ser comparado ao msico, que age sobre o instrumento (hardware) executando a msica (software).

Exsto Tecnologia

XM118 Microcontroladores PIC18

29

Esse bloco composto por um decodificador e um contador. Tal decodificador pode ser visto como um livro de receitas culinrias. No livro, cada pgina contm uma receita e dentro de cada receita h os passos para sua execuo. De modo anlogo, cada instruo do processador como o endereo de uma pgina onde est a seqncias de acionamento dos sinais de controles (internos e externos ao processador) que permitem a execuo da instruo. O contador responsvel por fazer com que os passos para a execuo de uma instruo sejam executados em seqncia. Cada modelo de processador possui um conjunto, ou set, de instrues que pode executar. O barramento de controle interno (Internal Control) permite ao decodificador de instrues controlar os blocos internos do processador, enquanto o barramento de controle externo (External Control) j foi discutido e tem a funo de indicar se o acesso de leitura ou escrita, se em memria ou dispositivos de I/O. Para que o decodificador de instrues possa executar uma instruo necessrio que a mesma seja lida da memria de programa e levada at ele. O programa armazenado na memria uma seqncia de instrues. Podemos ento supor que para enderear corretamente essas instrues deveria haver um contador. Ele existe e chamado Contador de Programa ou PC (Program Counter). A cada instruo iniciada o PC incrementado. Portanto ele aponta a prxima instruo, isto , contm o endereo da prxima instruo a ser executada. A sada desses contador ligada a um registro (Program Addressing) que carregado ao final de cada instruo e sua sada o barramento de endereos da memria de programa. Quando a CPU resetada, o PC automaticamente carregado com o valor do vetor de reset. Geralmente o vetor de reset o endereo zero da memria, mas nem todos os sistemas trabalham assim. Durante a execuo do programa, um valor pode ser carregado no PC. Isso ocorre para desviar o fluxo do programa. Existem instrues que realizam essa alterao de fluxo, que pode ser de dois tipos: desvio ou chamada. Quando ocorre um desvio o contedo do PC alterado para que ele passe a executar o programa a partir de outro ponto. No nosso sistema genrico isso feito simplesmente carregando um valor proveniente do barramento de dados. Na execuo de uma chamada o fluxo do programa tambm desviado para um determinado ponto para executar um trecho do programa, mas nesse caso ele deve retornar ao ponto do programa onde ocorreu o desvio (mais precisamente primeira instruo aps a instruo de chamada). Isso permite executar uma sub-rotina, conceito que ser discutido quando tratarmos do software.

Exsto Tecnologia

XM118 Microcontroladores PIC18

30

Fica claro ento que em uma chamada o endereo de retorno deve ser armazenado em algum lugar, caso contrrio no seria possvel retornar ao ponto onde a chamada ocorreu. Esse lugar chamado de pilha (stack). O nome pilha se deve a seu funcionamento, que semelhante a uma pilha de pratos: como pode haver vrias chamadas consecutivas sem que haja retorno, os endereos de retorno so armazenados uns sobre os outros. Quando ocorre uma instruo de retorno (que o que faz o programa retornar da chamada), o programa volta para o ltimo endereo guardado, e assim sucessivamente at que a pilha esteja vazia. A pilha ento uma poro de memria onde podem ser armazenados os endereos de retorno. Em alguns sistemas possvel guardar outros tipos de dados na pilha, o que no ocorre com os microcontroladores PIC. Existem sistemas onde essa poro de memria implementada no processador e outros onde parte da memria de dados. Em ambos os casos surge a necessidade de se conhecer qual o topo da pilha, ou seja, qual a prxima posio para se armazenar um endereo de retorno. Para isso existe um registro (na verdade um contador) chamado ponteiro da pilha (Stack Pointer) que aponta o topo. Esse registro incrementado cada vez que um novo endereo de retorno armazenado na pilha e decrementado quando ocorre um retorno. De uma forma geral, quando a pilha implementada na memria RAM, temos acesso a ela e ao registro stack pointer. Nesses casos geralmente podemos determinar em que poro da memria colocaremos a pilha. J nos sistemas onde a pilha implementada separadamente, geralmente no se tem acesso nem ao contedo da pilha nem ao stack pointer. Voltaremos a tratar de chamadas e desvios em outro momento do curso. Todo esse processo estudado tem por objetivo gerar o endereo de memria de programa de onde ser lido uma instruo a ser executada. Uma vez determinado o endereo, seu contedo lido e armazenado em um registro chamado registro de instruo (Instruction Register). Desse registro, parte da instruo vai para o decodificador de instrues e parte pode ir para a ALU e/ou parte para o registro de endereamento de dados (Data Addressing). Para entender o porque disso, devemos ter em mente que uma instruo nada mais que uma palavra binria. Parte dela, que efetivamente a instruo, indica ao decodificador de instrues qual a seqncia de aes deve ser executada (qual a pgina do decodificador de instrues). O restante constitui os operandos da instruo, ou seja, os dados a serem processados. Esses dados podem ser constantes ou endereos de variveis na memria RAM. Conforme sua natureza e a instruo a ser executada eles tem um destino ou outro. A unidade lgico-aritmtica ou ALU (Aritmetic and Lgic Unit) o circuito responsvel pelos clculos em um processador. Como prprio nome diz, ela responsvel pela realizao de operaes
Exsto Tecnologia

XM118 Microcontroladores PIC18

31

lgicas, (E, OU, OU-exclusivo, deslocamentos, rotaes, complemento), e aritmticas (incremento, decremento, adio, subtrao, multiplicao, e diviso). Os processos de diviso e multiplicao so feitos com a ALU utilizando seqncias somas, subtraes e deslocamento, o que efetivamente o que a ALU capaz de fazer, ou atravs de circuito multiplicadores especiais. Existe ainda um circuito, chamado MAC (Multiply and Accumulate) que realiza operaes de multiplicao por hardware. Esse bloco, contudo no comum em microcontroladores, sendo mais comum em dispositivos com maior capacidade de processamento, como DSPs. A ALU trabalha juntamente com dois registros especiais: o Acumulador (Accumulator) e o registro de estado de operaes aritmticas (Status). comum se referir ao acumulador simplesmente como Acc ou, no caso dos PICs, como W (Worker Trabalhador ). O acumulador quase sempre est envolvido nas operaes realizadas pela ALU. Ele pode ser um dos operandos, pode ser onde se armazena o resultado ou pode ser as duas coisas. H tambm microcontroladores onde qualquer transferncia de dados entre dois endereos da RAM passa pelo acumulador. Quanto ao registro de status, sua funo indicar resultados notveis das operaes matemticas. Esses resultados so indicados por flags, que so bits desse registro. Atravs da anlise dos flags possvel saber, dentre outras coisas, se uma operao resultou em zero; se houve estouro da capacidade de armazenamento (overflow), que acontece quando um resultado maior que o mximo valor possvel de ser representado pelo sistema; se o resultado de uma operao aritimtica negativo ou positivo. Existe uma interao do registro status com o decodificador de instrues, pois atravs da anlise de seus flags possvel realizar instrues de testes. Por exemplo, existem instrues de desvio condicional nas quais necessrio comparar se um valor igual a outro. Essas comparaes so feitas pela ALU e seu resultado expresso atravs do registro status. Atravs da anlise dos bits do registro status o processador toma decises de realizar ou no desvios no fluxo do programa. Para acessar a memria de dados e os perifricos existe um registro, que em nosso sistema chamado de endereamento de dados (Data Addressing) que pode receber valores de duas formas. A primeira diretamente de parte da instruo. Nesse caso se est fazendo referncia a endereos da RAM conhecidos e fixos, pois so carregados valores constantes existentes no programa. Esse modo chamado endereamento direto. Contudo, em muitos casos necessrio fazer referncias a endereos variveis. Isso feito carregando o registro de endereamento com dados provenientes de um outro registro, o registro de endereamento indireto (Indirect Addressig). Como qualquer outro registro, ele pode ser carregado com um valor, constate ou proveniente de uma varivel, pode

Exsto Tecnologia

XM118 Microcontroladores PIC18

32

ser incrementado, decrementado ou participar que qualquer operao lgico-aritmtica. Sua funo semelhante a dos ponteiros em linguagens de alto nvel. Por fim, apesar de no serem considerado parte integrante da CPU, necessrio comentar alguma coisa sobre os sistemas de temporizao e reset. Todo o sistema computacional trabalha sincronizado com um mesmo sinal de clock. Devemos lembrar que esse clock o que faz o decodificador de instrues passar de uma instruo para a outra, e tudo o mais deve estar sincronizado com ele, seno haveria o caos. Para gerar esse sinal de clock necessrio um oscilador. Nos microcontroladores esse oscilador j faz parte do componente e pode ser de vrios tipos, como ser tratado oportunamente. Independente da forma como o clock gerado, esse sinal aplicado a CPU e aos perifricos. comum que a freqncia do clock dos perifricos seja menor que a da CPU. Para tanto so utilizados divisores de freqncia. A freqncia de clock diretamente proporcional a velocidade com que a CPU executa as instrues. Os microcontroladores geralmente tm uma faixa de freqncia de trabalho bem ampla, podendo ir de alguns Hertz a dezenas e at centenas de Mega-Hertz. importante lembrar que quanto maior a freqncia de trabalho, maior o consumo do sistema. Para casos em que o consumo crtico, como em equipamentos portteis alimentados a bateria, existem vrias formas de reduzir este consumo, dependendo do microcontrolador utilizado. So os chamados modos de baixo consumo, que podem reduzir o clock da CPU e/ou dos perifricos ou mesmo deslig-los. Cada microcontrolador apresenta diferentes modos de baixo consumo. Outro ponto importante o reset. Alm do reset que ocorre quando o sistema ligado, chamado de Power-on reset, os microcontroladores apresentam vrias outras fontes de reset. Esses resets so protees do sistema. Assim, o microcontrolador pode ser resetado automaticamente se houver uma queda de tenso, se o programa travar, se for acessado um endereo invlido de memria de programa, se ocorrer um estouro da pilha, e em outras situaes, dependendo do modelo de microcontrolador.

1.2 Arquitetura Computacional


Por arquitetura de computador entende-se a forma como as diversas partes do sistema so organizadas e conectadas entres si. A arquitetura apresentada acima chamada arquitetura Harvard. Sua principal caracterstica ter a memria de programa separada da memria de dados e acessada por um barramento independente. Existe tambm a arquitetura von-Neumman, onde memria de dados e
Exsto Tecnologia

XM118 Microcontroladores PIC18

33

de programas esto agrupadas em um mesmo bloco, sendo acessadas pelos mesmos barramentos de dados e endereos. 1.2.1 Arquitetura von-Neumann Na arquitetura von-Neumann, as memrias tanto de dados quanto de programa, so

acessadas usando-se o mesmo barramento de dados; os portais de I/O tambm fazem uso do barramento de dados. Vale lembrar aqui que uma instruo como uma operao matemtica, isto , composta de operadores, que indicam o que ser feito, e operandos, que so os parmetros envolvidos na operao. Desta forma, o processo de execuo de cada instruo dividido em dois momentos: a leitura da instruo e dos operandos (fetch) e a execuo da instruo propriamente dita. Nota-se que dessa forma o processador est parte do tempo ocupado com a leitura da memria de programa e, conseqentemente no fica executando o firmware o tempo todo. Outra caracterstica da arquitetura von-Neumann que, visto que os operandos das instrues so geralmente do mesmo tamanho do barramento de dados, quanto mais complexa a instruo maior ser a quantidade de endereos ocupados por ela na memria. Por outro lado, como a complexidade da instruo no tem limite a no ser o espao ocupado, podemos ter um set de instrues to complexo quanto se queira. Do exposto acima, podemos concluir que arquitetura von-Neumann consume muito tempo de processamento com a leitura da instruo e dos operandos. Conclui-se tambm que instrues diferentes ocupam quantidades diferentes de memria e so executadas em tempos diferentes. Memria Dados

Programa CPU

Barramento de Dados

I/O

Arquitetura von-Neumann Devido inexistncia de limitaes a complexidade das instrues, os sistemas de arquitetura von-Neumann geralmente tm conjuntos de instrues complexos, o que equivale a dizer que possuem um grande nmero de instrues e cada instruo realiza uma grande seqncia de aes (instrues complexas). Processadores desse tipo so chamados CISC (Complex Instruction Set CPU CPU com Set de Instrues Complexo).
Exsto Tecnologia

XM118 Microcontroladores PIC18

34

1.2.2

Arquitetura Harvard J a arquitetura chamada de arquitetura Harvard, que utilizada nos microcontroladores

PIC, tem como principal caracterstica acessar a memria de dados separadamente da memria de programa. A principal vantagem dessa arquitetura a leitura de instrues e de alguns tipos de operandos pode ser feita ao mesmo tempo em que a execuo das instrues. Isso significa que o sistema fica todo o tempo executando instrues, o que acarreta um significativo ganho de velocidade. Enquanto uma instruo est sendo executada, a seguinte est sendo lida. Esse processo conhecido como pipelining (canalizao) e ilustrado pela figura a seguir.

Pipeline Outro fato importante que o barramento de programa no necessariamente tem o mesmo tamanho do barramento de dados. Dessa forma, em uma nica palavra da memria de programa pode conter operando e operadores, o que nos permite carregar toda a instruo em um nico ciclo de leitura da memria. No caso especfico dos microcontroladores PIC da famlia 16Xxxx, o processador foi projetado para que cada instruo ocupe um endereo de memria e seja executada em um ciclo de mquina (que leva 4 perodos de clock para ocorrer), com exceo das instrues de chamada e desvio, que so executadas em dois ciclos. Dessa forma, tem-se um controle do tamanho e, principalmente, do tempo de execuo do programa simplesmente contando o numero de instrues. Pode-se notar ento que os tempos de execuo e de leitura esto atrelados e so os menores possveis. Isso acarreta em as instrues no poderem executar uma grande seqncia de aes, ou seja, no existem instrues complexas. Por isso, os PICs so considerados processadores RISC (Reduced Instruction Set CPU CPU com Set de Instrues Reduzido). O nmero de instrues reduzido, o que no significa que no se possa executar programas complexos, mas sim que seqncias complexas de aes devem ser construdas por seqncias de instrues bsicas.

Exsto Tecnologia

XM118 Microcontroladores PIC18

35

Memria de Programa

CPU

Memria de Dados

Barramento de Programa

Barramento de Dados Arquitetura Harvard

I/O

Para exemplificar, os PIC 18F4550 tem barramento de dados de 8 bits, barramento de instruo de 16 bits e apenas 83 instrues. Essa organizao pode ser observada na figura acima. 1.2.3 Microcontrolador, Microprocessador e DSP Cabem aqui algumas palavras sobre os tipos de sistemas computacionais existentes e suas

aplicaes. Os microcontroladores so sistemas computacionais completos em um nico chip. Alm do processador, das memrias e dispositivos de I/O, os microcontroladores geralmente possuem vrios tipos de perifricos. Quando se utiliza microcontroladores possvel construir circuitos de controle com muito poucos componentes, por que o microcontrolador j tem quase todo o necessrio internamente. Isso implica em reduo de custos e tamanho, menor consumo, facilidade de desenvolvimento, dentre outras vantagens, e por isso que se utiliza cada vez mais microcontroladores para agregar inteligncia a diversos produtos. Os microcontroladores, porm, so destinados a aplicaes no muito complexas, e tem uma capacidade de processamento limitada. Alm disso, j possuem uma estrutura preestabelecida, no sendo possvel alterar sua configurao. Atualmente existem microcontroladores de 8, 16 e 32 bits. A maior fatia desse mercado a dos microcontroladores de 8 bits. H, porm, um grande crescimento de aplicaes em 32 bits. Os microcontroladores de 16 bits esto restritos a aplicaes especiais, como o mercado automotivo e tendem a ter seu espao reduzido pela fcil de acesso componentes de 32 bits. Em sistemas construdos com microprocessadores, por sua vez, necessrio desenvolver todo o hardware. Dessa forma existe um maior trabalho de desenvolvimento, porm pode-se construir qualquer configurao que se queira. So sistemas com custo maior, porm com muito mais memria, conseqentemente podem executar programas mais complexos. Pode-se dispor de muito mais portais de I/O e de quaisquer perifricos necessrios. Alm disso, os processadores podem operar em com freqncias de clock mais altas, portanto so sistemas mais velozes. Sistemas
Exsto Tecnologia

XM118 Microcontroladores PIC18

36

microprocessados so tipicamente de 32 ou 64 bits, sendo processadores de 8 e 16 bits considerados obsoletos hoje. Tem crescido tambm o uso de processadores dualcore ou multcore, isto , componentes com dois ou mais processadores operando de forma paralela. Existem ainda os DSP (Digita Signal Processors Processadores Digitais de Sinal). So processadores otimizados para realizar clculos, principalmente somatrios de produtos, que so as operaes empregadas em processamento de sinais. Trabalham com freqncias de clock elevadas, pois devem realizar grande quantidade de operaes em pouco tempo. Geralmente no so os processadores principais do sistema, sendo ento controlados por um processador ou microcontrolador. Contudo vm sendo lanados modelos hbridos de DPS e microcontroladores, que agregam grande capacidade de processamento a sistemas completos com grande nmero de perifricos em um nico chip. Hoje so usados DSPs de 24e 32 bits, alm de controladores hbridos de 16 bits. Qual desses sistemas utilizar em uma aplicao uma pergunta que tem como resposta: depende! Um microcontrolador no capaz de gerenciar um grande banco de dados como um PC; em contrapartida um identificador de chamadas construdo com microprocessador teria um preo que inviabilizaria sua venda. Um DSP to inadequado para fazer uma central de alarmes como um microcontrolador para fazer um filtro adaptativo. Para cada necessidade teremos uma soluo diferente. No entanto importante frisar que a gama de aplicaes para microcontroladores muito grande e cresce a cada dia; eles podem ser encarados como a porta de entrada a esse universo do software embarcado.

Exsto Tecnologia

XM118 Microcontroladores PIC18

37

2 PIC18, microcontroladores de alto desempenho


2.1 Microcontroladores PIC
Os microcontroladores PICs so divididos em famlias. Cada famlia, ou linha, tem vrios componentes, com tamanhos e recursos diferentes; no entanto o cdigo desenvolvido para um componente de uma determinada famlia compatvel com os demais componentes da mesma famlia, exceto por umas poucas alteraes, que ser referem principalmente aos perifricos. Cada famlia tem seu prprio set (conjunto) de instrues. Dessa forma, ao se estudar um componente especfico de uma famlia, se est adquirindo conhecimento para trabalhar com microcontroladores de toda a famlia. Para um mesmo fabricante, as famlias guardam uma semelhana entre si, apesar de no serem exatamente iguais. As famlias de microcontroladores PIC so: PIC10 PIC12 PIC14 PIC16 PIC17 PIC18 PIC24F/PIC24H dsPIC30/dsPIC33 PIC32 Dessas, as mais usadas e com maior nmero de componentes so as PIC12, PIC16 e PIC18. As famlias PIC14 e PIC17 foram famlias intermedirias na evoluo da linha. A famlia PIC24F/PIC24H composta por componentes de 16 bits e a mais recente. J a famlia dsPIC30/dsPIC33 trs os controladores hbridos de 16 bits. No final de 2007 foi lanada tambm a famlia PIC32, composta por componentes de 32 bits. Quanto ao tipo de memria, os componentes mais antigos (que ainda continuam sendo fabricados) tm memria do tipo OTP e EPROM. J os mais novos utilizam somente flash. A tendncia do mercado trabalhar somente com flash, principalmente nas etapas de ensino e desenvolvimento. O tipo de memria flash pode ser identificado por uma letra F no nome do componente (por exemplo PIC12F679, PIC16F628, PIC18F4550). Dentro da famlia PIC18 h vrias sub-famlias, cada uma composta de vrios componentes. Os componentes diferem entre si em: Quantidade de memria RAM Quantidade de memria EEPROM de dados (alguns no tem nada)
Exsto Tecnologia

XM118 Microcontroladores PIC18

38

Quantidade de memria Flash de programa Nmero de pinos (18,28,40, ...) Freqncia mxima de clock Perifricos O quesito perifricos uma das principais caractersticas dos PIC. Dentre os disponveis nas vrias famlias, podemos citar: timers, conversores A/D, comparadores analgicos, mdulos USART (comunicao serial RS232), Mdulos MSSP (I2C e SPI master), mdulos CCP (Captura, comparao e PWM), etc... A linha PIC18 composta por microcontroladores com core de 8 bits de alto desempenho. Buscou-se manter certa compatibilidade com a linha PIC16, o que pode ser observado no funcionamento de diversos perifricos e no conjunto de instrues. Contudo, muitas mudanas se fizeram necessrias, principalmente na arquitetura e no mapeamento de memria, para superar certas limitaes apresentadas pela famlia PIC16. A famlia PIC16 ainda amplamente utilizada. Contudo, ao estudar uma famlia mais complexa, como a PIC18, acredita-se que o aluno se tornar apto tambm a trabalhar com microcontroladores mais simples, como o PIC16 ou PIC12. Nosso enfoque nesse curso ser no PIC18F4550 e na famlia PIC18. Os assuntos relativos ao hardware sero apresentados de forma generalista para a famlia PIC18 e depois tratados no que especfico para o PIC18F4550. Dessa maneira pretende-se fazer um estudo no de um componente apenas, mas de toda a famlia. 2.1.1 A Microchip O fabricante dos microcontroladores PIC a empresa americana Microchip. Atualmente ela

uma das maiores fabricantes mundiais de microcontroladores de 8 bits. Alm de microcontroladores, a Microchip tambm fabrica memrias e outros componentes digitais, alm de uma vasta linha de componentes analgicos. A Microchip trabalha com uma poltica de suporte ao cliente muito eficiente, que provavelmente uma das causas de seu sucesso. Em seu site (www.microchip.com) existe uma grande quantidade de informao disponvel. Alm dos manuais dos componentes, existem muitas notas de aplicao (Application Notes) e projetos de referncia, que so de grande ajuda para a formao da base de conhecimentos do estudante de microcontroladores PIC. No Brasil, a Microchip representada pela Aplicaes Eletrnicas Artimar Ltda (www.artimar.com.br) e conta com uma grande rede de revendedores.

Exsto Tecnologia

XM118 Microcontroladores PIC18

39

2.2 Arquitetura
A figura abaixo apresenta o diagrama em blocos do PIC18F4550. Os demais componentes da famlia PIC18 apresentam um diagrama muito semelhante, havendo diferena apenas nos nmero de portais e nos perifricos.

Diagrama em blocos do PIC18F4550 Trata-se de um microcontrolador de 8 bits de arquitetura Harvard. Seu barramento de programa de 16 bits.
Exsto Tecnologia

XM118 Microcontroladores PIC18

40

Como pode ser observada na figura, a estrutura do PIC8F4550 semelhante ao sistema genrico estudado. Podem ser observados os barramentos de dados (data bus) e de programa (program bus). Alm disso, nota-se como operandos da ALU e de endereamento da memria de dados vem diretamente da memria de programa. Tambm so dignos de nota os perifricos, localizado na parte inferior do diagrama, que esto ligados ao barramento de dados. A principal caracterstica da arquitetura Harvard ter as memrias de programa e dados separadas, acessadas por diferentes barramentos. Dessa maneira, uma instrues pode ser lidas da memria de programa ao mesmo tempo em que a instruo anterior executada utilizando o barramento de dados, o que chamado de paralelismo ou pipeline. O conjunto de instrues do PIC18 foi desenvolvido de forma que a grande maioria das instrues tenha 16 bits de comprimento. Isso garante o uso mais otimizado da memria disponvel. O fato da memria de programa ser acessada separada permite que as instrues tenham uma largura (nmero de bits em cada endereo) maior que a memria de dados. No caso do PIC18, a memria de dados (e tambm o barramento de dados) de 8 bits enquanto as instrues armazenadas na memria de programa (e tambm o barramento de instrues) so de 16 bits. O tamanho das instrues est diretamente relacionado com o nmero de instrues possveis e com os tipos de operadores suportados. Fazendo uma comparao, a linha PIC16 tinha instrues de 14 bits e um conjunto de 35 instrues; com o aumento para 16 bits na linha PIC18 o conjunto passa a ter um conjunto padro de 75 instrues e alguns componentes possui mais 8 instrues (modo estendido), como o caso do PIC18F4550. Algumas instrues, porm, ocupam 32 bits. Essas instrues, que sero detalhadas no momento oportuno, so importantes principalmente para eliminar a necessidade de paginao de memria, uma inconveniente caractersticas dos PIC16 alm de otimizar o modo de endereamento indireto, o que ajuda o trabalho dos compiladores C. As instrues de 16 bits (que chamaremos de curtas) so executadas em um ciclo de instruo (4 perodos de clock). As instrues de 32 bits (que chamaremos de longas) so executadas em 2 ciclos de instruo. Instrues que causam alterao do fluxo do programa gastam um ciclo d instruo adicional. O PIC18F4550 foi desenvolvido utilizando a tecnologia nanoWatt da Microchip, tendo disponvel diversas funcionalidades que permite menor consumo de energia. A tabela a seguir trs as principais caractersticas do PIC18F4550.
Exsto Tecnologia

XM118 Microcontroladores PIC18

41

Caracterstica Freqncia de Operao Memria de programa Memria de dados RAM Memria de dados EEPROM Fontes de interrupo Terminais de I/O Temporizadores/Contadores CCP ECCP 1 Comunicao Serial Comunicao USB Comunicao Paralela Conversor analgico para digital Detector de tenso programvel Conjunto de instrues
Notas:
1 2

PIC18F4550 DC a 48MHz 32768 bytes 2048 bytes 256 bytes 20 36 4 1 1 MSSP EUSART 2 Sim SPP3 10 bits, 13 canais 1 75 convencionais + 8 do modo entendido

O mdulo ECCP um mdulo CCP melhorado, com novas caractersticas O mdulo EUSART um mdulo USART melhorado, com novas caractersticas 3 Porta paralela mestre

Caractersticas dos PIC18F4550 2.2.1 Pinagem e hardware bsico O PIC18F4550 um componente de 40 pinos em seu encapsulamento PDIP (Plastic Dual In-

line Package Encapsulamento plstico em linha dupla). Esses pinos podem ser divididos em terminais de alimentao, de reset, de conexo com o oscilador e os terminais de portais e perifricos. Como se trata de um componente com diversas caractersticas e um pequeno nmero de terminais, muitos terminais possuem mais de uma funo. Dessa forma, temos terminais de entrada e sada dos portais multiplexados com terminais dos perifricos, terminais do oscilador e terminais de reset. De uma forma geral, quando usamos um determinado perifrico, o terminal associado a ele serve ao perifrico e sua funo de entrada e sada fica desativada. Quando o perifrico no utilizado, o terminal trabalha como I/O. Os portais do microcontrolador podem variar de funes de modelo para modelo, mas geralmente algumas funcionalidades se repetem sempre para pinos com o mesmo nome. Consulte o manual do microcontrolador para saber quais as funes associadas a cada pino. Os driver de entrada podem ser TTL ou Schmitt Trigger (ST), podendo um mesmo pino ter drivers diferentes para funes diferentes.. As sadas so do tipo CMOS, embora exista um terminal (RA4) com sada com dreno aberto (OD open drain). Esse terminal, para ser usado como sada,

Exsto Tecnologia

XM118 Microcontroladores PIC18

42

precisa de um resistor de pull-up. H tambm os drivers especiais para osciladores (XTAL). Alm, disso, alguns perifricos possuem entradas analgicas (AN). A tabela que segue apresenta as caractersticas eltricas desses drivers para o microcontrolador operando alimentado por 5V. Parmetro VIL Tipo de buffer Min Max

TTL Vss 0,8 Schmitt Trigger Vss 1,0 VIH TTL 2,0 VDD Schmitt Trigger 4,0 VDD VOL CMOS 0,6 VOH CMOS 4,3 Caractersticas eltricas de entrada e sada Os terminais do oscilador podem ser utilizados como I/O, dependendo do modo de oscilador utilizado, conforme estudado. O terminal de reset (MCLR) pode ser configurado como entrada de um portal no momento da gravao. Quanto capacidade de corrente, cada terminal configurado como sada capaz de fornecer ou drenar 25mA. Contudo, a corrente (fornecida ou drenada) total de todos os termiais juntos no pode ultrapassar 200mA.

A figura a seguir apresenta a pinagem do PIC18F4550.

Pinagem do PIC18F4550
Exsto Tecnologia

XM118 Microcontroladores PIC18

43

2.3 Memrias
Por ser um microcontrolador de arquitetura Harvard, o PIC18 tem suas memrias de programa e dados mapeadas separadamente. 2.3.1 Memria de programa A arquitetura do PIC18 trs um PC (Program Counter Contador de programa) de 21 bits,

portanto possvel enderear at 2MBytes endereos de memria de programa. Cada componente da famlia, porm, tem diferentes quantidades de memria implementadas. No caso do 0 existem 32kB de memria FLASH de programa. A memria de programa mapeada de forma que cada endereo tenha 8 bits (1 byte). Isso feito de forma a facilitar a o uso da memria de programa para armazenamento de constantes (de forma a facilitar a transferncia para o barramento de dados) e o uso de reas da flash no ocupadas por programa como se fossem EEPROM de dados. Contudo, as instrues armazenadas na memria de programa tm 16 ou 32 bits. O que acontece na verdade que cada instruo ocupa dois endereos de memria e o PC, quando executando um programa, incrementa de 2 em 2 e o barramento de instruo permite a leitura simultnea de dois endereos de memria, formando uma instruo de 16 bits (instrues curtas). Em virtude disso o endereo das instrues sempre um nmero par. Para a leitura das instrues longas (32 bits) so feitos dois acessos de leitura. Para o uso da memria de programa para o armazenamento de dados existem instrues especiais que realizam as chamadas operaes de tabela. O ponteiro utilizado nessas instrues o TBLPTR que tem 21 bits. Atravs dele possvel realizar a leitura e escrita de qualquer endereo da memria de programa. Resumindo: Para a leitura de instrues o endereamento feito com 20 bits e a memria vista como tendo 16 bits de largura. Para operaes de tabela o endereamento feito com 21 bits e a memria vista como tendo 8 bits de largura. Uma importante novidade no PIC18 a inexistncia de paginao de memria que existia na famlia PIC16. As instrues CALL e GOTO contm um campo de endereo de 20 bits (para endereo de instrues o bit menos significativo sempre 0), portanto capaz de acessar qualquer ponto da memria. Contudo, como se tratam de instrues longas devem ser usadas com parcimnia para uma maior economia de memria. Existem instrues para chamada e desvio relativos (RCALL e BRA, respectivamente) que acessam endereos a uma distncia de at 1k do endereo atual e ocupam apenas uma posio de memria. O vetor de reset para o PIC18F continua sendo o endereo 0000h, como era no PIC16.

Exsto Tecnologia

XM118 Microcontroladores PIC18

44

Como ser tratado no momento oportuno, existem dois vetores de interrupo. O vetor de maior prioridade o 0008h o de menor o 0018h. A figura a seguir apresenta o mapa de memria de programa do PIC18F4550. Leituras realizadas em endereos no implementados de memria retornam 0.

0000h

Vetor de reset

0008h

Vetor de interrupo de alta prioridade

0018h

Vetor de interrupo de baixa prioridade

Uso geral

7FFFh 8000h

No implementado

1FFFFFh Mapa e memria de programa 2.3.1.1 Contador de programa e Pilha O PC do PIC18 tem 21 bits. Ele dividido em trs registros de 8 bits: PCL, PCH e PCU e pode

ser manipulado a partir da memria de dados atravs de PCLATU, PCLATH e diretamente atravs de PCL. A figura apresenta a como esses registros interagem.

Exsto Tecnologia

XM118 Microcontroladores PIC18

45

Estrutura do PC De forma similar ao que acontece no PIC16, toda vez que uma operao de escrita ilar realizada em PCL os valores de PCLATH e PCLATU so carregados em PCH e PCU, respectivamente, causando um desvio imediato. A novidade que uma leitura do registro PCL faz com que os valo valores de PCH e PCU sejam transmitidos para o PCLATH e PCLATU, respectivamente. Essa funcionalidade muito interessante, principalmente na implementao de RTOS (Real Time Operation System (Real Sistema Operacional de Tempo Real). O bit 0 de PCL no pode ser escrito, ficando sempre em 0. escrito, A pilha do PIC18 um espao de memria de 31 posies de 21 bits. Ela no est mapeada nem em RAM nem em FLASH. Trata se de uma pilha circular, ou seja, o 32 endereo gravado Trata-se sobrescreve o primeiro, caracterizando um overflow da pilha. Se instrues de retorno forem dadas quando o primeiro nvel da pilha estiver livre considera um underflow da pilha. Pode configurar considera-se Pode-se o microcontrolador para que esses dois eventos causem reset. O ponteiro da pilha ( (Stack Pointer) acessvel atravs do registro STKPTR, o que no el acontece na arquitetura PIC16. Nesse registro h tambm bits que sinaliza o estado da pilha. O ponteiro da pilha contm o endereo do topo da pilha, que recebe o ltimo endereo de retorno guardado.
R/C 0 STKOVF Bit 7 R/C-0 STKUNF R/W 0 SP4 R/W 0 SP3 R/W 0 SP2 R/W 0 SP1 R/W 0 SP0 Bit 0

U0
-

STKPTR STKOVF : indicador de overflow icador o o 1 = a pilha est cheia ou houve overflow 0 = a pilha mo est cheia e no houve overflow.

STKUNF : indicador de underflow. o o 1 = Houve underflow da pilha 0 = No houve underflow da pilha


Exsto Tecnologia

XM118 Microcontroladores PIC18

46

SP4:SP0 : So o ponteiro da pilha propriamente dito. O valor contido no endereo apontado pelo ponteiro, portanto o ltimo endereo salvo na pilha, chamado de topo da pilha (TOS Top of Stack). No PIC18 o contedo desse endereo acessvel atravs dos registros de funo especial TOSU, TOSH e TOSL. possvel ento ler o contedo do topo da pilha e alter-lo. Alm disso, existem as instrues PUSH e POP. PUSH incrementa o valor o ponteiro da pilha e carrega o endereo seguinte no TOS. POP decrementa o ponteiro, descartando endereo contido no TOS. Essas funcionalidades so bastante teis na implementao de um sistema operacional. 2.3.2 Memria de dados A memria de dados apresenta alteraes bastante significativas em relao ao PIC16. A

principal diferena est no sistema de paginao. A arquitetura do PIC18 prev 12 bits para endereamento de memria de dados, o que permite trabalhar com at 4096 endereos de memria, divididos entre registros de funo especial (SFR Special Function Registers) e registros de uso geral (GPR General Purpose Registers). As instrues que manipulam dados na memria RAM (com exceo de MOVFF) fornecem 8 bits para compor esse endereo; os outros quatro so fornecidos pelo registro de seleo de banco: BSR. Esse esquema de acesso parece ser o mesmo usado no PIC16, que apresentava diversas inconvenincias em sua aplicao. H, porm algumas inovaes que facilitam o seu uso. Em primeiro lugar, existe a instruo MOVFF capaz de mover dados entre dois registros em quaisquer bancos; isso possvel porque esta uma instruo longa (32 bits) e contm os endereos de 12 bits dos dois registros acessados. As demais instrues necessitam da seleo de banco para acesso aos registros. Isso facilitado pela instruo MOVLB, que move um valor constante diretamente para BSR. Existem ainda instrues especiais para o modo indexado e o banco de acesso, descritos a seguir. Aseguir apresentado o mapeamento de memria de dados vlido para o PIC18F4550.

Exsto Tecnologia

XM118 Microcontroladores PIC18

47

Banco

BSR 00h 7Fh 80h FFh 00h FFh 00h RAM de Acesso GPR GPR

0000

0001

0010 FFh 00h

GPR

0011 FFh 00h

GPR

0100 FFh 00h

GPR

0101 FFh 00h

GPR

0110 FFh 00h

GPR

0111 FFh 00h

GPR

Banco de Acesso

1000 FFh 00h

1001 FFh 00h

10

1010 FFh 00h

11

1011 FFh 00h

No implementado

12

1100 FFh 00h

13

1101 FFh 00h

14

1110

FFh 00h No Usado 7Fh 15 1111 80h SFR FFh SFR: Special Function Register Resgistros de Funo Especial GPR: General Purpose RAM RAM de uso Geral

Mapeamento de memria de dados para PIC18F4550

Exsto Tecnologia

XM118 Microcontroladores PIC18

48

2.3.2.1

SFR Registros de funo especial A tabela a seguir apresenta os registros de funo especial existentes no PIC18F4550. Para

quem conhece o PIC16 pode parecer que eles esto distribudos em quatro bancos, pela semelhana na forma de apresentar, mas na verdade esto todos em um nico banco.

2.3.2.2

Banco de acesso Para agilizar operaes de manipulao de dados entre variveis e os registros de uso

especial foi implementado um sistema de banco de acesso. Trata-se de uma opo que pode ser informada nas instrues de manipulao de dados que habilita o uso de um sistema alternativo de acesso a memria. Quando uma instruo usa esse sistema o registro BSR ignorado e visto como um nico banco de 256 endereos, cujos 128 primeiros endereos so os 128 primeiros do banco (chamados de RAM de Acesso) enquanto os 128 ltimos so os 128 endereos finais do banco 15 onde esto os registros de funes especiais (SFR). Isso pode ser observado na figura 1.6.
Exsto Tecnologia

XM118 Microcontroladores PIC18

49

2.3.2.3

Memria RAM para USB Quando o perifrico USB usado os bancos 4, 5, 6 e 7 so usados como buffer da

comunicao USB. usando um sistema chamado memria RAM de porta dupla (dual port RAM) onde tanto o perifrico USB como o core do PIC tem acesso de leitura e escrita para troca de informaes. Quando no usada comunicao USB essas bancos podem ser usados como RAM de uso geral. 2.3.2.4 Modos de endereamento A arquitetura do PIC18 possui quatro modos de endereamento: Inerente, Literal, Direto e

Indireto. O Modo Inerente aquele das instrues que no necessitam da indicao do operando. O operando inerente a instruo (da o nome). Exemplos: CLRWDT, DAW, PUSH. O Modo Literal aquele onde operando um valor constante (literal). Nesse caso o operando armazenado como parte da instruo na memria flash. Ex.: MOVLB, ADDLW, GOTO. No modo Direto os operandos da instruo so dados da memria RAM cujos endereos so fixos. Esses endereos fazem parte da prpria instruo. Ex.: MOVFF, BSF, ADDWF. Ao contrrio do modo direto, o modo indireto manipula dados de memria RAM de endereos variveis. O dado acessado atravs dos registros INDFx e seu endereo apontado pelo registro FSRx. Existem trs conjuntos de registro FSRx formando trs ponteiros de 16 bits (FSR0H:FSR0L, FSR1H:FSR1L e FSR2H:FSR2L). Juntamente com cada par FSRx trabalha um registro INDFx (INDF0, INDF1e INDF2).

2.4 Processador
O processador (ou CPU) do PIC18 executa as instrues e controla todo o hardware do microntrolador. Ele frequentemente chamado de core, isto , o ncleo do microcontrolador. O processador necessita para trabalhar de um sinal chamado clock de sistema, que gerado pelo sistema de oscilador. Refere-se ao perodo do clock de sistema com TSCLK. Cada instruo executada em 4 ciclos de clock do sistema e esse perodo do ciclo de instruo chamado TCY. Portando, TCY = 4.TSCLK. Cada instruo executada pelo oscilador gasta 4 ciclos de clock. Esses quatro ciclos, chamados ciclos Q, compem um ciclo de instruo. Surge ento um sinal, cuja freqncia da freqncia do oscilador e chamado de clock de instruo ou clock de perifricos. Ou seja, o tempo
Exsto Tecnologia

XM118 Microcontroladores PIC18

50

de execuo de cada instruo de 4 perodos de clock. Esse o sinal disponvel no terminal RA6/OSC2/CLKOUT quando trabalhamos em um modo de oscilador com sada de clock. Em cada um dos ciclos Q realizada uma etapa da instruo, conforme mostrado na tabela.
Ciclo Q1 Q2 Q3 Q4 Ao Ciclo de decodificao da instruo Ciclo de leitura de dados Ciclo de processamento Ciclo de escrita de dados

A figura abaixo apresenta um diagrama de tempos do sinal de clock e do ciclo de instruo.

Figura 2.6 Ciclos de instruo

Alguns perifricos e algumas funes do PIC no so sincronizados nem com o clock do oscilador nem com o clock de perifricos, mas com os ciclos Q. 2.4.1 ALU A ALU (Arithmetic Logical Unit Unidade Lgico-Aritmtica) do PIC18 capaz de realizar

operaes de soma, subtrao, deslocamento e operaes lgicas. Todas as operaes tm operadores e resultados de 8 bits. Associada a ALU trabalham dois registros: o registro W, chamado tambm de WREG est sempre envolvido nas operaes matemticas, podendo ser um dos operandos e/ou o destino do resultado; o registro STATUS informa os resultados notveis das operaes matemticas atravs de flags. A figura 1.7 apresenta o diagrama em blocos da ALU. Observe que podem ser operandos valores presentes na memria RAM, constantes vindas das instrues e o prprio WREG.

Exsto Tecnologia

XM118 Microcontroladores PIC18

51

Figura 1.7 - ALU A seguir apresentado o registro STATUS bem como a interpretao dos bits de flag.
U0 Bit 7 U0 R/W x N R/W x OV R/W x Z R/W x DC R/W x C Bit 0

U0
-

STATUS

N : Negativo, indica quando o resultado de uma operao sinalizada 0 (cpia do bit 7 do resultado) o o 1 = resultado negativo 0 = resultado positivo

OV : Overflow, indica a ocorrncia de vai 1 do bit 6 para o bit 7, indicando que houve estouro da capacidade do valor absoluto (7 bits) em operaes sinalizadas. o o 1 = houve overflow para operaes sinalizadas 0 = no houve overflow

Z: Bit indicador de zero o o 1 = se o resultado de uma operao da ALU zero 0 = se o resultado de uma operao da ALU diferente de zero

DC: Carry/Borrow de dgito. Para borrow o bit inverso


Exsto Tecnologia

XM118 Microcontroladores PIC18

52

o o

1 = houve transporte do 4o. para o 5o. bit 0 = no houve transporte do 4o. para o 5o. bit

C: Carry/Borrow . Para borrow o bit inverso o o 2.4.2 1 = houve transporte para 8o. bit 0 = no houve transporte para 8o. bit

Multiplicador 8x8 bits Alm das funes bsicas da ALU, os PIC18 so equipados com um hardware multiplicador

com capacidade de fazer operaes com operandos de 8 bits, gerando resultados de 16 bits. O PIC18 possui instrues de multiplicao que, ao contrrio do que acontece em alguns processadores, no so implementadas por operaes bsicas da ALU, mas sim atravs de um hardware especfico. A principal vantagem disso que as multiplicaes (de 8 por 8 bits) so realizadas em um nico ciclo de instruo, tornando o microcontrolador muito mais rpido para a execuo de qualquer tipo de multiplicao. O multiplicador por hardware, juntamente com a maior velocidade de processamento, permite ao PIC18 implementar algoritmos de processamento de sinal, alm de reduzir a ocupao de memria de programa para essas operaes. A instruo MULLW realiza a multiplicao de W por uma constante enquanto MULWF realizada a multiplicao de W por um endereo de memria RAM. Nos dois casos o resultado (de 16 bits) armazenado no SFRs PROFH e PRODL. A operao de multiplicao no afeta os flags do registro STATUS.

2.5 Portais de I/O


A configurao dos portais de I/O do PIC18 muito semelhante a configurao do PIC16, porm algumas importantes diferenas existem. O processo de definio da direo dos pinos (se entrada ou sada) feio atravs do registro TRISx associado a cada portal (TRISA, TRISB, etc), onde 1 em um bit no registro TRISx faz o bit correspondente do portal ser uma entrada enquanto um 0 em um bit no registro TRISx faz o bit correspondente do portal ser uma sada. Nos processos de escrita e leitura dos portais aparecem as diferenas entre o PIC16 e PIC18. A figura 1.9 trs o diagrama em blocos genrico para um portal e ajuda a compreender esses processos.

Exsto Tecnologia

XM118 Microcontroladores PIC18

53

Figura 1.9 - Esquema genrico de um pino Alm dos registros PORTx existem no PIC18 os registros LATx (LATA, LATB, LATC, etc). Os registros LATx corresponde ao Data Latch da figura 1.9. Em um pino configurado como sada uma operao de escrita no registro LATx gera o mesmo resultado de uma escrita no registro PORTx, isto , o dado armazenado no Data Latch transferido para o pino do microcontrolador. Se o pino est configurado como entrada a escrita tanto no registro LATx como no PORTx tambm tem o mesmo resultado, o valor armazenado no Data Lacth mas o driver de sada permanece desabilitado. Na leitura, porm, os resultados divergem. Primeiro, admita-se que um dado pino est configurado como entrada. Se for realizada uma leitura do registro PORTx o valor de retorno o estado real do pino enquanto a leitura do registro LAT retorna o valor anteriormente escrito no Data Latch (observe na figura 1 os sinais RD_PORT e RD_LAT). Admitindo agora que o pinos esteja configurado com sada, a leitura do registro LATx trs o valor que deveria estar no pino enquando a leitura de PORTx trs o valor que realmente est no pino. Dessa forma possvel detectar a existncia de curtos circuitos ou outros defeitos de hardware. Assim como nos PIC16, cada pino dos PIC18 e capaz de drenar ou fornecer at 25mA, sendo respeitadas as limitaes de correntes para cada portal, apresentadas pelo manual de cada componente.

Exsto Tecnologia

XM118 Microcontroladores PIC18

54

2.6 Conjunto de Instrues


O conjunto de instrues do PIC18 um de seus pontos de maior destaque por suas diversas caractersticas: Semelhana com o conjunto de instrues do PIC16, tanto no mnemnico das instrues quanto na sintaxe, o que garante rpida a adaptao do desenvolvedor e facilita a traduo de cdigo entre as famlias PIC16 e PIC18; 75 instrues no modo normal e mais 8 instrues no modo estendido. Instrues otimizadas para uso de ponteiros (facilita o uso de compiladores C) Instrues longas (32 bits) que solucionam problemas de paginao de memria de programa e memria de dados Instrues de desvio condicional O modo estendido habilitado via bits de configurao e permite que 8 instrues a mais sejam usadas. Essas instrues permitem operaes mais avanadas nos modos de acesso indireto e operaes de tabela. Nem todos os microcontroladores da linha PIC18 tm o conjunto de instrues estendido. Como sabemos, instrues so compostas por uma parte que diz o que deve ser feito (que chamaremos operador) e uma parte que diz com quem deve ser feito (que chamaremos operandos). Para compreender o conjunto de instrues do PIC18 preciso saber que muitas das operaes realizadas vo ter como um de seus operandos um registro de funo especial chamado W. Ele tambm geralmente o destino do resultado de muitas operaes, portanto sua funo se confunde com a do chamado acumulador existente em outras arquiteturas. Portanto, ao soma dois valores, geralmente somamos um valor (constante ou varivel) a W, podendo o resultado armazenado no prprio W. No Anexo E desta apostila est um quadro resumo do conjunto de instrues do PIC18. Informaes mais detalhadas podem ser obtidas no manual do PIC18F4550. Neste curso no ser dado maior enfoque a linguagem Assembly, j que nos concentraremos na linguagem C. Contudo, importante saber que possvel (e algumas vezes necessrio ) introduzir trechos de cdigo assembly em programas escritos em C.

2.7 Oscilador
Como o funcionamento de um sistema computacional baseado numa seqncia de aes, essas aes devem ser executadas numa certa cadncia. Para obter essa cadncia utilizado um sinal de sincronismo ou clock.

Exsto Tecnologia

XM118 Microcontroladores PIC18

55

Os microcontroladores PIC possuem um circuito de oscilao interna, isto , so capazes de gerar seu prprio clock com acrscimo de poucos (ou nenhum) componentes externos. Existem diversos tipos diferentes de oscilador, e cada componente da famlia utiliza alguns deles. A freqncia mxima do PIC18F4550 de 48MHz. Em muitos outros componentes da famlia PIC18 essa freqncia est limitada a 40 MHz. Por fim, a famlia PIC16 aceita freqncia mxima de 20MHz. O PIC18 apresenta os seguintes tipos modos de oscilador (nem todos eles presente em todos os componentes da linha): Modos a cristal/ressonador cermico o o o o LP: Cristal, baixas freqncias (Low Frequency (Power) Crystal); XT: Cristal, freqncias intermedirias (Crystal/Resonator); HS: Cristal, altas freqncias(High Speed Crystal/Resonator); HSPLL: Cristal de alta freqncia com PLL (High Speed with Phase Locked Loop)

Oscilador RC Externo (External Resistor/Capacitor); o o Com ou sada de clock Necessita de um resistor (opcionalmente um capacitor) externo

Oscilador RC Interno (Internal Resistor/Capacitor); o o Com ou sem sada de clock Oscilador interno do microcontrolador, sem a necessidade de componentes adicionais. Entrada de clock externo (External Clock in) o o Com ou sem sada de clock Clock proveniente de outras partes do circuito.

A famlia PIC18 prev 3 fontes possveis de clock: primrio, secundrio e interno. A fonte primria pode ser um dos modos de oscilado a cristal, clock externo ou mesmo o oscilador interno. A fonte secundria um segundo oscilador do circuito, ligado ao Timer 1 (trataremos com mais detalhes desse oscilador quando o Timer 1 for estudado). A fonte interna a opo de se usar o oscilador interno. possvel mudar de fonte de clock a qualquer momento durante a execuo do clock. Isso permite uma srie de possibilidades relacionadas com economia de energia, como ser tratado oportunamente. O PIC18F4550 possui um circuito oscilador especial para atender a uma demanda de freqncia para a comunicao USB. Para o correto funcionamento da porta USB necessrio um sinal de 48 MHz (para USB de alta velocidade) ou 6MHz (para USB de baixa velocidade). Isso implica em um sistema de gerao e seleo de clock mais complexo do que o encontrado em outros

Exsto Tecnologia

XM118 Microcontroladores PIC18

56

componentes da famlia PIC18. O diagrama em blocos abaixo mostra esse sistema de forma simplificada.

Oscilador Primrio

PLL IDLE Mode CPU

Oscilador Secundrio

Perifricos

Oscilador Interno

A qualquer momento possvel selecionar qual dos osciladores est sendo usado como fonte de clock para a CPU e perifricos. Existe ainda um PLL associado ao oscilador primrio, que ser detalhado mais a frente, mas por hora pode ser entendido como um multiplicador de freqncias. Deve ser notado o detalhe da chave que permite interromper o clock para CPU; essa chave a atuao do modo IDLE que ser tratado quando forem estudados os modos de baixo cosumo. 2.7.1 Oscilador a cristal ( LP,XT e HS) Os modos LP, XT e HS utilizam um cristal ou ressonador cermico para estabilizar o clock. A

diferena est na faixa de freqncia de cada modo. O modo LP refere-se a cristal/ressonador cermico de baixa freqncia. Esse modo trabalha com freqncias de oscilao de at 200 kHz e nele conseguimos o menor consumo dos trs modos em questo. O modo XT abrange as freqncias de 200 kHz at 4 MHz e apresenta um consumo mdio. O modo HS para freqncias de 4 a 25 MHz e tem o mais alto consumo. Cada faixa de freqncia possui um ganho do circuito oscilador, que ajustado de forma diferente para cada modo. recomendado que se use o modo adequado para cada freqncia, caso contrrio pode ocorrer mau funcionamento do oscilador. Alm do cristal ou do ressonador, nos modos LP, XT e HS, devem existir capacitores ligados dos terminais do cristal terra, conforme mostra a figura.

Exsto Tecnologia

XM118 Microcontroladores PIC18

57

Circuito do Oscilador a Cristal/Ressonador O PIC18F4550 no possui o modo LP, porm outros componentes da famlia sim. Os valores desses capacitores so os indicados nas tabelas Capacitor Selection for Crystal Oscillator que se encontra nos manuais de cada PIC na seo que trata de configuraes do oscilador. Para o PIC18F4550 os valores so os apresentados na tabela abaixo. Ateno: esse valores podem mudar conforme o microcontrolador. Tipo de Oscilador XT HS Freqncia do Cristal Faixa de Capacitor C1 Faixa de Capacitor C2 27 pF 27 pF 22 pF 15 pF

4 MHz 27 pF 4 MHz 27 pF 8 MHz 22 pF 20 MHz 15 pF Seleo de capacitores para oscilador a cristal

Capacitores maiores aumentam a estabilidade do oscilador, mas tambm aumenta o tempo de partida. O tempo de partida do oscilador o tempo necessrio para que o oscilador se estabilize, pois a oscilao no ocorre de forma imediata assim que o circuito alimentado. Esse tempo depende de uma srie de fatores, alm dos capacitores, com temperatura, tenso de alimentao e at capacitncias parasitas do lay-out da placa.

Partida do oscilador

Exsto Tecnologia

XM118 Microcontroladores PIC18

58

2.7.2

PLL Phase Locked Loop O modo HSPLL permite utilizar o sinal de clock do modo HS, INTIO1 e INTIO2 como

sincronismo para um circuito de PLL (Phase Locked Loop) que gera em sua sada um sinal com quatro vezes a freqncia do sinal de referncia. PLL (Phase Locked Loop) um circuito que permite gerar um sinal de alta freqncia baseado em um sinal preciso de baixa freqncia. Para entend-lo ser estudado o sistema de PLL comumente encontrado em microcontroladores PIC18 na figura a seguir. Comparador de fase Oscilador de referncia Filtro VCO Sinal de sada

Divisor

Esquema bsico de um PLL Existe um oscilador o cristal que o oscilador de referncia e garante a preciso ao sistema. O sinal desse oscilador comparado com uma amostra do sinal de sada atravs de um comparador de fase. Caso existe alguma diferena entre essa amostra e o oscilador de referncia um sinal de erro gerado e filtrado e aplicado ao VCO (Voltage Controled Oscillator - Oscilador controlado por tenso). O VCO gera ento um sinal de sada conforme comandando pelo sinal de erro. Esse sinal passa por um divisor de freqncia para gerar a amostra a ser comparada com o oscilador de referncia. Como a preciso do sinal de sada dada pela referncia, o sinal to preciso quanto for o cristal. Por exemplo, utilizando um PLL possvel fazer com que o microcontrolador opere a 40 MHz utilizando um cristal de 10MHz. Neste caso o divisor de freqncias deve dividir o sinal de sada por 4. Essa funcionalidade pode ser til, no s para se obter uma freqncia de trabalho mais alta como tambm para evitar problemas com interferncia eletromagntica, que geralmente se manifestam de forma mais acentuada quando utilizamos cristais de valores mais altos. 2.7.3 Oscilador RC Tambm possvel trabalhar com osciladores RC (Resistor/Capacitor). Para isso utilizada a

montagem abaixo e selecionado o modo de oscilador como RC.

Exsto Tecnologia

XM118 Microcontroladores PIC18

59

Figura 2.4 Circuito do oscilador no modo RC. O oscilador RC funciona de forma muito semelhante ao clssico oscilador construdo com um CI 555: a carga do capacitor faz a tenso subir at atingir um nvel que seja entendido como 1 na entrada do buffer schmitt trigger (VIH); isso faz o transistor conduzir e descarregar o capacitor at um nvel de tenso entendido como 0 pelo buffer (VIL), o que faz o transistor cortar e o reinicia o processo de carga do capacitor. Como o tempo de carga dado em funo dos valores do resistor e do capacitor possvel controlar a freqncia de oscilao atravs da escolha destes dois componentes. A figura 2.5 mostra as formas de onda na entrada e na sada do buffer.

Figura 2.5 Forma de onda do oscilador RC. O modo RC apresenta algumas limitaes: a freqncia de trabalho dependente de vrios fatores (valores de resistor e de capacitor, tenso de alimentao, temperatura) e apresenta pouca estabilidade (tolerncia dos resistores e capacitores, variao na tenso de alimentao, variaes de temperatura). Por exemplo, em uma produo em quantidade de produtos utilizando PICs no modo RC, a freqncia de cada produto pode variar em funo da tolerncia dos resistores utilizados. No possvel garantir preciso em nada que se baseie em tempo no programa. Assim esse modo s recomendado para aplicaes nas quais a freqncia no um fator crtico. Essa situao que justifica a utilizao do modo, pois um oscilador RC tem custo menor que um a cristal. O PIC18F4550 no possui esse tipo de oscilador.
Exsto Tecnologia

XM118 Microcontroladores PIC18

60

2.7.4

Oscilador Externo O modo EC permite que seja aplicado um sinal de clock proveniente de outra parte do

circuito. Isso pode ser til quando j existe algum oscilador ou base de tempo j implementada, ajudando a reduzir custos. Nesses casos o sinal aplicado ao terminal RA7/OSC1/CLKIN. A figura 2.5 apresenta dois circuitos osciladores que podem ser utilizados. Um (a) faz uso de um cristal de ressonncia paralela enquanto o outro (b) usa cristal de ressonncia srie. Na prtica, mais comum encontrar cristais de ressonncia paralela.

(a)

(b)

Figura 2.7 Circuitos osciladores: (a) cristal paralelo e (b) cristal srie Tambm pode ser usado como clock um sinal externo nos modos LP, XT e HS, com o oscilador configurado para a faixa de freqncia mais adequada. 2.7.5 Oscilador Interno O PIC18F4550 possui um oscilador interno (INTOSC) que pode ser usado em substituio a

qualquer um dos modos de oscilador interno. O oscilador propriamente dito tem freqncia de 8 MHz. Ele possui, porm um ps-escala (divisor de freqncia) que permite escolher entre as freqncias 8MHz, 4 MHz, 2 MHz, 1MHz, 500 kHz, 250 kHz e 125kHz. Alm dessas freqncias derivadas do oscilador INTOSC existe outro oscilador chamado de INTRC que gera freqncia de 31kHz. Este oscilador gera clock para algumas temporizaes do sistema, como o watchdog time, mas tambm pode ser escolhido como fonte de clock. O processo para determinar qual o freqncia usada ser apresentado mais a frente. O oscilador de 8MHz calibrado em fbrica. Mesmo assim possvel fazer um ajuste fino de sua freqncia atravs do registro OSCTUNE. A preciso tpica do oscilador interno de 1%. 2.7.6 Comparao entre os modos de oscilador Um modo de oscilador por si s no melhor que outro. A questo qual se adapta melhor

a necessidade de cada projeto. Os critrios para escolher o tipo de oscilador a ser usado so:

Exsto Tecnologia

XM118 Microcontroladores PIC18

61

Preciso: quo prximo os osciladores esto da freqncia nominal em um lote de equipamentos montados. Estabilidade: capacidade do oscilador se manter na freqncia quando ocorrem mudanas externas (temperatura, tenso de alimentao). Variedade de freqncias: facilidade de se obter uma freqncia desejada qualquer. Custo: preo dos componentes externos que compem o oscilador. A tabela a seguir apresenta de forma resumida e jovial uma comparao entre os modos de oscilador apresentados (com exceo do modo EC). Critrio Osciladores a Cristal (com ou sem PLL) Preciso Estabilidade Variedade de freqncias Custo
Tabela 2.1 Comparao entre os modos de oscilador

Oscilador RC

Oscilador interno

2.7.7

Sistema de clock do PIC18F4550 Conforme foi dito, o PIC18F4550 usa um sistema de clock mais elaborado que o encontrado

em outros componentes da famlia PIC18. Isso porque ele precisa gerar sinais especficos para o mdulo USB. O oscilador primrio feito especificamente com a finalidade de gerar o sinal de clock para a USB. Pode-se optar por usar esse mesmo sinal como clock do sistema ou escolher a fonte secundria ou interna. A figura a seguir representa o sistema de gerao e seleo de clock do PIC18F4550.

Exsto Tecnologia

XM118 Microcontroladores PIC18

62

Ao escolher o modo de oscilador principal podemos optar por um modo com PLL ou sem PLL. Ao escolher um modo com PLL temos que ter em mente que esse PLL foi concebido para atender as necessidades do mdulo USB, portanto o clock gerado para o processador e perifrico torna-se uma conseqncia do clock para USB. Acompanhe na figura acima como cada modo opera. Ao selecionando um modo sem PLL (XT, HS, EC, ECIO) o sinal do oscilador principal passa por um divisor de freqncias, chamado Oscillator Prescaler que permite dividir esse sinal por 2, 3 ou 4, ou no dividir. Podemos assim obter diferentes freqncias de operao, mesmo atendendo a necessidade do oscilador para USB. Se no existe interesse em usar a USB, basta escolher esse modo de trabalho e escolher a opo 1:1.
Exsto Tecnologia

XM118 Microcontroladores PIC18

63

Quando optamos por usar um modo com PLL (HSPLL, XTPLL, ECPLL E ECPIO) o sinal do oscilador principal aplicado a um divisor de freqncia (PLL Prescaler). O objetivo desse divisor obter um sinal de 4 MHz em sua sada, permitindo que o usurio escolha cristais de freqncias mltiplas de 4MHz. Fazendo-se a seleo correta do fator de diviso obtemos um sinal de 4 MHz aplicado ao PLL, cujo divisor por 12, ou seja, aplicando uma entrada de 4 MHz obtemos uma sada de 96MHz. Esse sinal dividido por 2 para se obter a freqncia de 48MHz necessria a comunicao USB de alta velocidade. Esse mesmo sinal aplicado a outro divisor (PLL Postscale) que permite obter uma frao desse sinal para ser usado como sinal de clock pelo processador e perifricos. Outra fonte de clock disponvel o oscilador secundrio. Ele baseado no oscilador do timer 1, que ser tratado em outro lugar. Por hora basta saber que temos mais essa opo de clock. Por fim, o bloco oscilador interno tambm est disponvel, funcionando conforme discutido acima. A configurao do oscilador ser feita atravs dos chamados bits de configurao do microcontrolador. Por hora o importante entender o funcionamento do clock. 2.7.8 Configurao de clock para operar com USB Para operar corretamente o mdulo USB precisa receber sinais de freqncias pr-

estabelecidas. O mdulo USB pode operar no modo baixa velocidade ou alta velocidade. Em baixa velocidade a USB precisa de um sinal de clock de 6MHz. Para obt-lo a nica opo usar um cristal de 24MHz com Oscillator Postscale de 1:1. Ao ser selecionado o modo de baixa velocidade o sinal do oscilador primrio ser divido por 4 para obter o sinal necessrio de 6MHz. Em alta freqncia existe mais flexibilidade. Como o existe um divisor de freqncias na entrada do PLL, podemos escolher uma srie de valores de cristais, conforme mostrado na tabela abaixo. Freqncia do cristal 4 MHz 8 MHz 12 MHz 16 MHz 20 MHz 24 MHz 40 MHz 48 MHz Fator de diviso do PLL prescaler 1:1 1:2 1:3 1:4 1:5 1:6 1:10 1:12

Exsto Tecnologia

XM118 Microcontroladores PIC18

64

Com qualquer um destes cristais possvel obter o sinal de 96MHz na sada do PLL, que ser dividido por 2 para se obter 48MHz, necessrios a USB. Pode-se tambm usar o sinal de sada do PLL para escolher uma srie de freqncias para o clock do processador, atravs do PLL Postscaler, conforme apresentado a seguir PLL postscaler 1:2 1:3 1:4 1:6 2.7.9 Freqncia do oscilador principal 48 MHz 32 MHz 24 MHz 16 MHz

Escolha de modo e troca de oscilador Havendo diversos modos de oscilador e vrias opes de configurao necessrio

apresentar algumas consideraes sobre as combinaes possveis e sobre a mudana de modo de oscilador durante a execuo do programa. Durante a operao normal possvel escolher trs fontes para gerar o sinal de clock do sistema: Oscilador principal (ou primrio), oscilador secundrio e oscilador interno. A mudana da fonte de clock pode ser realizada a qualquer momento durante a execuo do programa. O oscilador principal o circuito de oscilador externo operando em um dos modos apresentados. O oscilador secundrio o oscilador do timer 1, que tipicamente opera em 32,768 kHz. Para que o oscilador secundrio seja usado necessrio ativar por software o oscilador do Timer 1. O funcionamento desse oscilador apresentado no tpico especfico do Timer1. Qualquer uma das freqncias do oscilador interno pode ser escolhida durante a execuo do programa. Para evitar problemas na troca de oscilador, a execuo do programa pra durante a um perodo de transio dos osciladores. Esse perodo dado pela soma do tempo correspondente a dois perodos da fonte antiga mais trs ou quatro perodos da nova fonte de clock. Durante esse perodo o clock para os perifricos tambm fica suspenso. Os registros de controle do oscilador so OSCTUNE em OSCCON. A descrio dos seus bits apresentada a seguir.
R/W 0 INTSRC Bit 7 U0 R/W 0 TUN4 R/W 0 TUN3 R/W 0 TUN2 R/W 0 TUN1 R/W 0 TUN0 Bit 0 Exsto Tecnologia

U0
-

OSCTUNE

XM118 Microcontroladores PIC18

65

INTRC : Seleo de clock do oscilador interno para 31kHz o o 1 = 31,25 kHz da ps-escala do oscilador INTOSC 0 = 31 kHz diretamente do oscilador INTRC

TUN4:TUN0: Ajuste fino de freqncia do oscilador INTOSC: o O valor 00000 corresponde a calibrao de fbrica. Valores entre 00001 e 01111 geram freqncias mais altas que a calibrada. Valores entre 11111 e 10000 geram freqncias mais baixas que a calibrada.

R/W 0 IDLEN Bit 7

R/W 1 IRCF2

R/W 0
IRCF1

R/W 0 IRCF0

Rx OSTS

R0 IOFS

R/W 0 SCS1

R/W 0 SCS0 Bit 0

OSCCON IDLEN : Habilitao do modo IDLE o o 1 = Entre em modo IDLE quando a instruo SLEEP for executada 0 = Entre em modo SLEEP quando a instruo SLEEP for executada

IRCF2:IRC0F : Freqncia do oscilador interno. o o o o o o o o 111 = 8 MHz (sem pos-escala) 110 = 4 MHz 101 = 2 MHz 100 = 1 MHz 011 = 500 kHz 010 = 250 kHz 001 = 125MHz 000 = 31kHz, conforme configurado em INTRC de OSCTUNE

OSTS: Estado do oscilador principal o o 1 = Oscilador principal estvel, funcionando como fonte de clock 0 = Oscilador principal no estvel, ainda no est pronto para fornecer clock

IOFS: Estado do oscilador interno o o 1 = Oscilador interno estvel 0 = Oscilador interno no estvel

SCS1:SCS0 : Seleo de clock o o o 1x = Oscilador interno 01 = Oscilador secundrio (Timer 1) 00 = Oscilador primrio.

Exsto Tecnologia

XM118 Microcontroladores PIC18

66

2.8 Caractersticas Especiais


O PIC possui uma srie de funcionalidades ligadas CPU, chamadas de caractersticas especiais (Special Features). As principais dentre elas so tratadas abaixo. A maioria dessas caractersticas configurvel atravs dos Bits de Configurao (Configuration Bits) no processo de gravao do microcontrolador atravs de endereos especiais. A definio dessas configuraes tambm pode ser feita no cdigo em C atravs da diretiva #pragma config, como ser tratado quando forem estudas as diretivas em linguagem C. 2.8.1 Modos de baixo consumo A arquitetura do PIC18 prev trs tipos de modos de operao: normal (Run), Idle e Sleep.

Combinados com as possibilidades de escolha de fonte de clock possvel utilizar 7 modos diferentes de consumo. No modo normal, a CPU do microcontrolador e os perifricos recebem sinal do da fonte de clock selecionada e o programa executado. No modo Sleep, os osciladores do microcontrolador so desligados. Nem CPU nem os perifricos recebem sinal de clock (com exceo do TIMER1, caso tenha seu prprio oscilador ativo). Nesse modo o consumo de energia mnimo, porm deve-se considerar os atrasos antes do retorno a execuo normal causados pelo tempo de partida dos osciladores. No modo Idle os osciladores permanecem em operao e a penas o sinal de clock da CPU cortado; os perifricos continuam recebendo o sinal da fonte de clock selecionada normalmente. Nesse caso temos uma reduo de consumo menor que a proporcionada pelo modo Sleep, porm o processador volta a operar imediatamente ao retornar ao modo normal, j que os osciladores continuam operando (no a tempo de partida). Outro benefcio do modo Idle que os perifricos continuam recebendo sinal de clock, podendo causar o retorno ao modo normal por interrupo. Qualquer uma das 3 fontes de clock pode ser escolhida durante nos modos normal e Idle. importante lembrar que quanto menor a freqncia de operao, menor o consumo de energia. Para entrar tanto em modo Idle como em modo Sleep basta executar a instruo SLEEP. O bit INDLEN do registro OSCON controla qual o modo de baixo consumo selecionado. Para um menor consumo de energia aes que reduzam o consumo do circuito coerentes com o hardware devem ser implementadas (como desligar LEDs e cortar a alimentao de algumas partes do circuito.) Uma vez em modo Sleep ou Idle, trs tipos de eventos podem acordar o microcontrolador, conforme apresentado a seguir. Acordar o microcontrolador significa reativar o oscilador principal e continuar a execuo do programa.
Exsto Tecnologia

XM118 Microcontroladores PIC18

67

Nvel lgico baixo no pino MCLR, o que faz com que o microcontrolador acorde e reset Estouro do WatchDog, o que no ocasiona RESET, apenas acorda o microcontrolador. Nesse caso o microcontrolador no resetado. A ocorrncia de alguma interrupo habilitada. importante observar que diversos perifricos podem estar utilizando o sinal do oscilador principal e, portanto pararo de operar durante o modo Sleep. Interrupes associadas a esses perifricos no iro ocorrer, portanto no podem acordar o microcontrolador. Para uma interrupo causar a sada de um modo de baixo consumo ela precisa apenas estar habilitada, no sendo necessrio a habilitao global tambm. Se a habilitao global no estiver habilitada, a ocorrncia da interrupo acorda o microcontrolador e o programa segue a partir da instruo seguinte a instruo SLEEP. J se estiver habilitada o microcontrolador acorda e o

programa desvia imediatamente para o vetor de interrupo apropriado. A tabela abaixo apresenta um resumo das combinaes possveis de modos de baixo consumo e fontes de clock. Modo PRI_RUN SEC_RUN RC_RUN PRI_IDLE SEC_IDLE RC_IDLE SLEEP OSCCON IDLEN SCS1:SCS0 X 00 X 01 X 1x 1 00 1 01 1 1x 0 X Sinal de clock CPU Perifricos Sim Sim Sim Sim Sim Sim No Sim No Sim No Sim No No Fonte de clock Principal Secundria Oscilador interno Principal Secundria Oscilador interno Todas desligadas

2.8.2

Reset Os PIC18 possuem diversas fontes de reset e funcionalidades associadas que visam

principalmente manter a confiabilidade e segurana das aplicaes. As fontes de reset possveis so: POR (Power-On Reset), causado pela deteo da alimentao quando o circuito ligado. Nvel lgico baixo no pino MCLR durante a execuo normal Nvel lgico baixo no pino MCLR com o microcontrolador em modo SLEEP Estouro do WatchDog timer durante a operao normal BOR (Brown-out Reset) reset por queda de tenso Instruo RESET Estouro da pilha (overflow e underflow)
Exsto Tecnologia

XM118 Microcontroladores PIC18

68

A figura 1.4 apresenta um diagrama simplificado do sistema de reset do PIC18F4550.,

Figura 1.4 - Diagrama simplificado de reset

A forma mais simples de reset atravs do pino MCLR: o microcontrolador reseta quanto um nvel lgico aplicado a esse pino. No PIC18F4550 pode-se desabilitar a funo de reset do pino MCLR. Nesse caso ele passa a operar como um pino de entrada do portal E. Isso feito via bit de configurao. 2.8.3 POR Power-On Reset Essa funcionalidade detecta quando o circuito ligado, percebendo a subida da tenso de

alimentao, e realiza o reset do microcontrolador. Dessa forma podemos dispensar os resistor e capacitor tradicionalmente ligados ao terminal de reset para gerar um reset quando o sistema ligado. O terminal MCLR pode ser ligado diretamente ao nvel lgico alto sendo recomendado utilizar um resistor de 10 k ligando-o VDD. Dessa forma tambm o pino MCLR pode estar disponvel para gravao in-circuit ou para ser usado como entrada se configurado com I/O.
Exsto Tecnologia

XM118 Microcontroladores PIC18

69

Associado ao POR existem duas funcionalidades interessantes: PWRT e OST. 2.8.4 PWRT Power-up Timer til, pois permite ao sistema ter tempo de se estabilizar (tenso, reset dos demais

componentes, etc.) antes do programa comear a ser executado. O PWRT (Power-up Timer) um timer que mantm o microcontrolador em estado de reset por aproximandamente 65,5ms no PIC18F4550 aps POR, permitindo que a alimentao do circuito se estabilize. Essa funcionalidade pode ser habilitada ou no. 2.8.5 OST Oscillator Start-up Timer J o OST (Oscillator Start-up Timer) mantm o microcontrolador em estado de reset durante

os primeiros 1024 perodos do oscilador, de forma que o programa seja executado somente quando o oscilador j estiver perfeitamente estabilizado. Essa funcionalidade sempre ativa nos modos de oscilador a cristal. A figura 2.3 apresenta o comportamento de partida do oscilador. 2.8.6 BOR Brown-out Reset Essa funcionalidade visa resetar o sistema se houver uma queda na tenso de alimentao.

Quando a tenso cai abaixo dos limites tolerados para o circuito os resultados so imprevisveis. H situaes nas quais interessante que quando ocorra uma queda dessas o sistema seja resetado. Nos PIC18 a tenso de limiar para o BOR configurvel. Para o PIC184550 essa tenso pode ser 2,05V, 2,79V, 4,33V ou 4,59V. Para outros componentes, consulte o manual especfico. O BOR pode ser habilitado ou desabilitado. Uma condio de queda de tenso s caracterizada se a tenso cair abaixo do limiar escolhido por mais de 100us. No PIC18F4550 existe ainda a possibilidade de ter o BOR controlador por software, atravs do bit SBOREN do registro RCON; nesse caso a faixa de tenso a escolhida na configurao. Quando o BOR usado recomenda-se que tambm o PWRT esteja ativo. Na figura a seguir apresentada a forma de operao do BOR em conjunto com o PWRT.

Exsto Tecnologia

XM118 Microcontroladores PIC18

70

Figura 2.7 Situaes de Brown-out 2.8.7 Causas de reset As causas de reset podem ser identificadas atravs da de bits do registros RCON e STKPTR. O registro RCON e seus bits so apresentados abaixo.
R/W 0 IPEN Bit 7 R/W-1 SBOREN R/W 1 RI R1 TO R1 PD R/W 0 POR R/W 0 BOR Bit 0

U0
-

RCON

IPEN : habilitao de prioridade de interruipo o o 1 = Prioridade Habilitada 0 = Prioridade desabilitada (compatvel com o PIC16)

SBOREN : Controle de BOR por software (depende dos bits de configurao). Somente no PIC18F4550. o o 1 = BOR habilitado 0 = BOR desabilitado

RI : Indicador de execuo de instruo RESET (deve ser setado pelo software aps a ocorrncia de um BOR) o o 1 = a instruo RESET no foi executada. 0 = a instruo RESET foi executada.

TO: Indicador de estouro do WacthDog


Exsto Tecnologia

XM118 Microcontroladores PIC18

71

o o

1 = setado por POR, e pelas instrues CLRWDT e SLEEP 0 = zerado quando ocorre um estouro do WatchDog

PD: Indicador de modo de baixo consume (SLEEP) o o 1 = setado por POR e pela instruo CLRWDT 0 = zerado pela instruo SLEEP

POR: Indicador de POR (deve ser setado por software aps ocorrncia de POR). o o 1 = no ocorreu POR 0 = ocorreu POR

BOR: Indicador de BOR (deve ser setado por software aps ocorrncia de BOR). o o 1 = no ocorreu BOR 0 = ocorreu BOR

2.8.8

Seqncia de inicializao Como exposto, existem vrios tempos que podem ser aguardados antes que o

microcontrolador saia da condio de reset, isto , comece a executar o programa. Supondo todas as funcionalidades acima ativas a seqncia a seguinte: 1. o circuito ligado: a tenso de alimentao comea a subir; 2. detectada a subida da tenso: POR; 3. o sistema aguarda o tempo de PWRT (aprox. 65 ms); 4. o oscilador comea a funcionar: 1024 ciclos so contados (OST); 5. o programa comea a rodar. 2.8.9 Watch-Dog Timer Esse timer de 8 bits, que baseado em um oscilador INTRC, independente do oscilador

principal, gera um reset quando estoura. Ele importante em situaes em que, por qualquer motivo, o microcontrolador trava. Quando habilitado ele deve ser zerado a intervalos regulares menores que seu tempo mximo pela instruo CLRWDT. Se o programa para e o Watch-Dog no zerado, tendo sido habilitada essa funo na gravao, ocorre o reset. O WatchDog do PIC18 pode ser habilitado ou no na gravao do microcontrolador. Da mesma maneira possvel definir atravs dos bits de configurao qual o valor da psescala do WatchDog. A ps-escala nada mais que um contador de 16 bits que conta o nmero de estouros do Watchdog, uma forma de aumentar o tempo at o reset. Tipicamente o WatchDog estoura a cada 4 ms no PIC18F4550. Se for adotada uma ps-escala de 1:4 significa que um reset ocorrer a dada 4 estouros do WatchDog, ou seja, a cada 4x4ms = 16ms, se a instruo CLRWDT no for usada. A execuo da instruo CLRWDT no s zera o WatchDog como tambm a ps-escala, reiniciando a contagem.
Exsto Tecnologia

XM118 Microcontroladores PIC18

72

Ao contrrio do que ocorre com o PIC16, no PIC18 no existe qualquer relao entre o WatchDog e o Timer0. Caso o WatchDog no seja habilitado atravs de bits de configurao mesmo assim possvel ativ-lo escrevendo 1 do bit SWDTEN do registro WDTCON. Tambm possvel desabilitar o WatchDog somente escrevendo 0 no bit SWDTEN (desde que o WatchDog no tenha sido habilitado nos bits de configurao). Se o microcontrolador for colado em modo Sleep ou Idle o WatchDog continua a incrementar, uma vez que sua base de tempo o oscilador INTRC. Contudo, seu estouro (considerando a ps-escala) no ira resetar o microcontrolador, mas sim tir-lo do modo Sleep ou Idle. A execuo da instruo SLEEP zera o WatchDog e a ps-escala assim como a instruo CLRWDT. 2.8.10 Proteo de Cdigo (Code Protect) O programa gravado em um PIC pode ser protegido, isto , pode ser impedida a sua leitura. Essa funcionalidade muito importante, sobretudo quando se trata de produo industrial, visto que assim se podem preservar os direitos autorais do autor do firmware e dificultar a cpia de produtos. Quando um componente est protegido e se realiza sua leitura, o valor lido em qualquer endereo 0000h. Por isso um componente protegido no pode ser confundido com um componente apagado, pois nesse ltimo caso o valor lido em qualquer endereo 3FFFh. 2.8.11 Gravao e depurao O PIC gravado atravs de um processo chamado ICSP (in-circuit serial programming) que realiza a gravao usando apenas 2 terminais de I/O e o pino de reset. Dessa maneira possvel gravar o microcontrolador mesmo este estando j montado na placa de aplicao. Essa funcionalidade de grande valia quando se usa componentes SMD ou quando o firmware precisa ser atualizado em campo. Os pinos usados so chamados de PGD (dados) PGC (clock) e VPP (alta tenso) que no caso do 18F4550 correspondem ao pinos RB7, RB6 e MCLR. Como para gravar necessrio tambm que o microcontrolador esteja alimentado, a interface ICSP normalmente tem ainda os pinos de GND e VDD. Alm da gravao a interface ICSP permite tambm a depurao, que o processo de executar o programa de forma sincronizada com o MPLAB IDE. Isto permite colocar breakpoins (pontos de paradas em posies do cdigo), ler e alterar o contedo da memria, executar o cdigo passo-a-passo. Tudo isso com o programa gravado e sendo executado no microcontrolador. Mais detalhes sobre a depurao so apresentados na sesso que trata especificamente do MPLAB.
Exsto Tecnologia

XM118 Microcontroladores PIC18

73

3 Ferramentas para o PIC18F: MPLAB IDE e Compilador C18


Como ferramentas para o desenvolvimento de aplicaes para o PIC18F sero abordados aqui o ambiente de desenvolvimento MPLAB e o compilador C18 (verso estudantil), ambos fornecidos gratuitamente pela Microchip. Esses softwares se encontram no CD que acompanha a apostila e atualizaes podem ser baixadas em www.microchip.com. O MPLAB IDE apresentado a verso 8.2 enquanto o C18 a verso estudantil 3.20. So essas as verses mais recentes disponveis no momento em que esse texto escrito. No h qualquer limitao quanto ao uso do MPLA IDE. J o C18 apresenta todos os recursos por um perodo de 60 dias, perdendo a otimizao de cdigo e deixando de usar o conjunto de instrues estendido aps esse perodo; isso implica na gerao de cdigo menos eficiente em termos de utilizao de memria, mas nenhuma funcionalidade perdida. Sero feitos tambm alguns comentrios sobre outros compilador C disponveis para microcontroladores PIC.

3.1 O MPLAB IDE


Para desenvolver projetos para microcontroladores PIC a Microchip disponibiliza uma IDE (Integrated Development Environment Ambiente de Desenvolvimento Integrado) bastante verstil e simples de usar chamada MPLAB IDE. As principais caractersticas do MPLAB so a simplicidade e a facilidade de utilizao. Uma IDE, como prprio nome diz, um ambiente de desenvolvimento que integra diversos programas em uma interface amigvel. Associado ao MPLAB existem diversos programas que so executados a medida que o processo de desenvolvimento ocorre. Esse programas so compiladores, linkers, simuladores, etc. Mais adiante trataremos especificamente do compilador C18 e do simulador MPLAB SIM. A instalao do MPLAB no apresenta nenhum detalhe especial e pode ser realizada sem maiores detalhes. Basta inserir o CD do curso no drive, clicar no link para instalao e seguir os passos indicados. Ateno: Uma vez instalado o MLAB IDE proceda a instalao do compilador C18 conforme apresentado no tpico 4.2.1 antes de dar continuidade a esse tutorial.

Exsto Tecnologia

XM118 Microcontroladores PIC18

74

Uma vez instalado o MPLAB IDE , para abri-lo execute Iniciar MPLAB IDE v7.31 3.1.1 MPLAB IDE

Programas

Microchip

Criando um novo projeto O MPLAB trabalha com o conceito de Projeto, isto , cada novo aplicao desenvolvida

(projeto) composto por diversos arquivos gerenciados pelo MPLAB. Para criar um novo projeto existe um assistente, que executado em Project Project Wizard...

Aparecer a janela acima Clique em Avanar.

Exsto Tecnologia

XM118 Microcontroladores PIC18

75

Na janela seguinte feita a escolha do microcontrolador usado no projeto. Selecione o PIC18F4550 na lista ou simplesmente digite o nome do microcontrolador e clique em Avanar.

Exsto Tecnologia

XM118 Microcontroladores PIC18

76

Nessa janela configurada a linguagem de programao a ser utilizada no projeto, atravs das opes da lista Active Toolsuite. Para desenvolver um projeto em Assembly escolha a opo Microchip MPASM Toolsuite. Para desenvolver em C utilizando o compilador C18 escolhar Microchip C18 Toolsuite. As demais ferramentas da lista podem no estar instaladas. Escolhida a linguagem, clique em Avanar.

Neste passo pode-se optar por criar um novo projeto ou reconfigurar um projeto j existente. Como estamos criando um novo projeto escolheremos esta opo e indicaremos a pasta onde o projeto deve ser criado. Para melhorar a organizao, cada projeto alojado em uma pasta. No campo abaixo de Create a New Project preencha o caminho e nome do projeto ou a pasta onde o projeto ser guardado, utilizando a opo Browse... para explorar o computador. Clique em Avanar. Caso o diretrio escolhido ainda no exista aparecer uma mensagem perguntando se ele deve ser criado. Neste caso, clique em OK.

Exsto Tecnologia

XM118 Microcontroladores PIC18

77

A prxima janela permite adicionar um arquivo j existente ao projeto. Para efeito de demonstrao, vamos incluir o arquivo j criado chamado HelloWorld.c que deve se encontrar na pasta no CD, na pasta exemplos\Aula3. Clicando em Add a o arquivo ser adicionado a lista dos arquivos pertencentes ao projeto. O mesmo processo pode ser utilizado para incluir bibliotecas de funes. importante incluir tambm um arquivo com orientaes para o linker (linker script). Para isso encontre a pasta lkr dentro da pasta de trabalho do C18 (se nenhuma alterao foi feita na instalao essa pasta deve ser C:\MCC18\lkr) e adicione o arquivo referente ao microcontrolador usado, no caso 18f4550.lkr. A letra a lado direito do arquivo adicionado indica como o processador ira acessar esse arquivo. Isso impacta principalmente quando o projeto copiado para outro computador, pois define se o caminho para acessar o arquivo absoluto (exatamente a mesma pasta em que arquivo se encontra) ou relativo (um caminho relativo a pasta de projeto, geralmente usado quando o arquivo em questo encontra-se na pasta do projeto em alguma subpasta sua). As opes so: A (Auto): O MPLAB define o tipo de caminho automaticamente. Se o arquivo estiver na pasta de projeto ele define o cominho como relativo, caso contrario define como absoluto U (Usurio): define o caminho como relativo. Recomendado para arquivos criados especificamente para o projeto.
Exsto Tecnologia

XM118 Microcontroladores PIC18

78

S (Sistema): define o caminho como absoluto. Normalmente usado para arquivos usados em vrios projetos com um local predefinido. C (Copiar): Copia o arquivo para a pasta de projeto. Recomendamos usar sempre a opo C (Copiar o arquivo para pasta de projeto) para evitar que ao levar o projeto para outra maquina o MPLAB no consiga encontrar o caminho do projeto. Marque os arquivos selecionados com a opo C e em seguia clique em Avanar.

A ltima tela apresenta um resumo do projeto criado. Confira se todas as informaes esto corretas e clique em Concluir. Na tela do MPALB aparecer a janela de gerncia do projeto, que contem todos os arquivos pertencentes ao projeto. Para editar um arquivo d um clique duplo sobre ele.

Exsto Tecnologia

XM118 Microcontroladores PIC18

79

Para criar um novo arquivo, v em File

New. Add new file to project...

Para criar um novo arquivo e adicion-lo ao projeto v em File Para salvar um novo arquivo criado, v em File Save As...

Ateno: No basta apenas criar um arquivo para que ele faa parte de um projeto. preciso adicion-lo a lista de arquivos do projeto. Para isso, na janela de gerncia de projetos. Clique com o boto direito sobre Source Files (ou sobre Header Files, caso se trate de uma biblioteca, como veremos mais adiante) e selecione a opo Add Files para selecionar e incluir um arquivo. Por fim, para abrir um projeto j existente, v em Project de projeto (que tem terminao .MCP). 3.1.2 Construindo um projeto. Uma vez criado o projeto, o mesmo deve ser construdo para que possa ser gravado no Open... e escolha um arquivo

microcontrolador ou simulado. Cabe aqui dizer que os arquivos de cdigo fonte Assembly possuem a terminao .ASM e os arquivos de biblioteca para Assembly tm terminao .INC. J os arquivos de cdigo fonte de C tm terminao .C; os arquivos de cabealho e bibliotecas em C tem a extenso .H. Alm desses,
Exsto Tecnologia

XM118 Microcontroladores PIC18

80

h tambm o roteiro de ligao (linker script) que traz informaes sobre como o programa ser alojado na memria do microcontrolador e tem extenso .LKR; O montador (MPASM Assembler) ou o compilador (C18) interpretam os arquivos criados pelo usurio o cria diversos outros. Os de maior importncia so os arquivos de erro (terminao .ERR) que permitem visualizar mensagens de erro e os arquivos binrios (terminao .HEX) que so os arquivos gravados no microcontrolador. Para construir um projeto use a tecla de atalho Ctrl+F10 ou v em Project Build All

Feito o isso aparecer a tela Output apresentando o resultados de compilao, bem como mensagens, avisos ou erros encontrados. Se ocorrerem erros no processo de compilao os mesmos so apresentados em lista e um clique duplo sobre eles mostra no cdigo fonte a linha onde se encontra o erro. No havendo erros a ltima linha da janela Output apresentar a mensagem BUILD SUCCEEDED seguida da data. 3.1.3 Gravando o microcontrolador Para gravar o microcontrolador usa-se o ICD-2 uma ferramenta que permite, alm da

gravao, a depurao, como veremos mais a frente. Uma vez que ele estiver devidamente conectado ao kit e ao PC, v em Programmer Select Programmer 2 MPLAB ICD 2. Surgir uma

barra de ferramentas cuja funo e apresentada na figura abaixo.

3.2 Simulao em C
Uma poderosa ferramenta de desenvolvimento o simulador integrado ao MPLAB IDE. Esse simulador permite a simulao de cdigos escritos tanto em C (seja C18 ou outros compiladores suportados) como em Assembly. O uso do simulador particularmente interessante durante a etapa de estudo dos microcontrolador e para a verificao de do funcionamento de funes e trechos de cdigo isolados.
Exsto Tecnologia

XM118 Microcontroladores PIC18

81

J para programas inteiros a simulao pode no apresentar resultados muitos conclusivos. Nesses casos torna-se mais interessante o uso de uma ferramenta de depurao, conforme tratado a seguir. A seguir so apresentados os passos bsicos para a realizao de simulao no MPLAB. Uma vez criado um projeto, o primeiro passo habilitar o simulador como ferramenta de depurao. Para isso escolha Debugger Select Tool MPLAB SIM. Settings...Dentre as opes existentes,

Em seguida configure a simulao atravs de Debugger

recomendamos configurar a porta serial virtual conforme apresentado na figura abaixo. Isso permite que as informaes enviadas pela porta serial durante a simulao sejam exibidas em um janela do MPLAB.

Atravs do menu View possvel abrir diversas janelas de visualizao da simulao: Disassembly Listing: listagem do cdigo. Essa tela eh muito interessante pois permite verificar o cdigo assembly gerado para cada linha escrita em C. Hardware Stack: Contedo da pilha. Program Memory: Contedo da memria de programa do microcontrolador. File Registers: Contedo de todos os endereos da memria de dados. EEPROM: Contedo da memria de dado EEPROM. Special Function Register: contedo dos registros de funo especial.

Exsto Tecnologia

XM118 Microcontroladores PIC18

82

Watch: permite a escolha dos endereos de memria RAM (SFR ou de uso geral) e de bits para visualizao. Permite: o Adicionar SFR: Selecione o SFR na lista da esquerda e clique Add SFR o Adicionar Smbolo (variveis criadas) Selecione o smbolo na lista da direita e clique Add Symbol Memory Usage Gauge: permite visualizar o consumo de memria de dados e de programa. Simulator Logic Analyzer: um analisador lgico para simulao (ser visto em detalhes mais a frente) 3.2.1 Simulao Acompanhar o andamento do programa pela janela no programa ou pela janela

Disassembly Listing. Comandos (os comando podem ser dados atravs do Menu Debugger, de teclas de atalho e da barra de ferramentas):

Comando Run Halt Animate Step Into

Atalho F9 F5 F7

cone

Descrio Executa o programa em tempo real Para a execuo do programa no ponto onde estiver Executa continuamente Step Into Execuo passo-a-passo; entra em sub-rotinas Execuo passo-a-passo; salta em sub-rotinas Sai da sub-rotina atual Reseta o programa

Step Over F8 Step Out Reset F6

3.2.2

Outras funcionalidades Breakpoints: param a execuo do programa quando a instruo marcada atingida o o o Clique o boto direito do mouse na rea cinza ao lado da instruo; Selecione Set Breakpoint. Para retirar, clique com o boto direito do mouse sobre o breakpoint e selecione Remove Breakpoint. Desviar o programa para uma determinada instruo o o Clique na instruo desejada com o boto direito do mouse. Selecione Set PC to Cursor

Alterar o valor de um registro(ou varivel):


Exsto Tecnologia

XM118 Microcontroladores PIC18

83

Na janela Watch: Clique duplo no campo Value e entre com o novo valor

Na janela File Registers Clique duplo no endereo do registro e entre com o novo valor

Compilao: antes de simular um programa, ele deve ser compilador (montado) o o Clique na janela do programa Menu Project Quickbuild <nome_do_arquivo> ou Alt+F10

Formato do dado mostrado na janela Watch o o o Selecione a linha do registro Clique com o boto direito do mouse e selecione Properties... Selecione o formato desejado no campo Format Quando for selecionado Decimal aparece o campo Signed que se marcado apresenta o valor como um nmero sinalizado. 3.2.3 Analisador lgico O analisador lgico do MPLAB SIM se comporta como um analisador lgico real, isto , ele

plota o estado de sinais (pinos do microcontrolador) em funo do tempo. Isto permite monitorar o estado dos pinos e de alguns sinais internos como se tivssemos um osciloscpio conectado a esses pinos. Para ativar o analisador lgico de simulao va em View Simulator Logic Analyzer

A primeira coisa a fazer para trabalhar com o analisador selecionar os canais (sinais) que devem ser monitorados. Para isso clique no boto Channels. Surgir a janela abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

84

Basta escolher os sinais a serem mostrados na lista a esquerda e clicar em Add para que esses sejam mostrados no analisador. Uma funcionalidade interessante para monitorar o funcionamento de diversos sinais conjuntamente eh agupa-los em um barramento (Bus). Isso permite que o conjunto de sinais seja apresentado como um nico valor hexadecimal. Para isso clique em Configure Bus(s). Ser mostrada a tela abaixo.

Para criar um barramento clique em New Bus, preencha o nome do barramento e clique em ok na janela de dialogo. Ao fazer isso o barramento criado aparecera na lista Available Bus(s). Em seguida selecione o barramento na lista e defina os sinais que comporo esse barramento na lista Available Signals e clique em Add. O barramento est pronto, basta clicar em OK para retornar a tela de seleo de canal, onde o barramento estar na lista Avaliable signals. Escolhidos os sinais a serem apresentados, clique em ok para retornar ao analisador lgico. Ao simular o programa os sinais apresentados sero apresentados na tela do analisador. A figura abaixo apresenta um exemplo disso.

Exsto Tecnologia

XM118 Microcontroladores PIC18

85

3.2.4

Gerao de estmulos Outra funcionalidade interessante do MPLAB SIM a gerao de estmulos que permite

simular sinais aplicados a pinos ou sinais do microcontrolador. Para aplicar estmulos a simulao vah em Debugger Stimulus New Workbook.

Existe uma sehrie de tipos de estimulos que podem ser gerados. Neste curso nos concentraremos nos estimulos assincronos, que equivalem a chaves ligadas aos terminais do microcontrolador. Para configurar estes, selecione a aba Asynch da janela de stimulus, conforme a figura abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

86

A coluna Fire contm botes que, quando pressionados no decorrer da simulao, iro realizar a ao descrita na coluna Action no sinal descrito na coluna Pin/SFR. A coluna Pin/SFR mostra o sinal controlado em cada linha. Clicando em qualquer clula desta coluna se abrir uma lista para a escolha do sinal desejado. Na coluna Action escolhe-se a ao a ser realizada quando Fire pressionado: Set High e Set Low: foram o pino nvel lgico alto e baixo, respectivamente; Toggle: inverte o estado do pino; Pulse High e Pulse Low: gera um pulso alto e baixo, respectivamente. A coluna Width define a largura, ou seja, a durao do pulso quando a coluna Action tem as opes Pulse High ou Pulse Low. A unidade de tempo do pulso, nesse caso, eh escolhida na coluna Units e pode ser uma unidade de tempo ou ciclos de maquina do microcontrolador (cyc). Por fim, a coluna Comments/Message permite inserir um texto comentando a utilidade do estimulos. Para salvar um conjunto de estmulos clique no boto Save. Para abrir um conjunto de estmulos salvos anteriormente v em Debugger Stimulus Open Workbook.

Os sinais de estmulos tambm pode ser plotados no analisador lgico.

Exsto Tecnologia

XM118 Microcontroladores PIC18

87

3.3 O compilador C18


O C18 permite gerar cdigo objeto para microcontroladores PIC da famlia PIC18 a partir de cdigos fonte escrito em C padro ANSI. Ele chamado de cross-compiler porque gera cdigo para ser executado em outro processador (no caso, o PIC18) que no seja o que executa a compilao (no caso o processador do PC). 3.3.1 Outros Compiladores C Existem diversos compiladores C para microcontroladores das linhas PIC12, PIC16 e PIC18 fornecidos por outras empresas que no a microchip. A maioria destes compiladores so pagos mas existem verses de demonstrao que podem ser usadas com algumas limitaes. O principal ponto a se observar ao usar um compilador C fornecido por terceiros se o mesmo segue o padro C-ANSI ou se apresenta alguma divergncia com relao a este padro. Essas divergncias podem impedir uma migrao direta os compiladores. Outra observao importante que as bibliotecas de funes apresentadas neste curso (com exceo daquelas padronizadas para o C-ANSI) s so vlidas para o compilador C18. Outros compiladores podem at ter funes com a mesma finalidade mas provavelmente seu nome e sintaxe sero diferentes. 3.3.1.1 CCS Um compilador muito popular o CCS. Ao contrrio do C18, o CCS tambm capaz de

compilar programas para PICs das famlias PIC12 e PIC16. A apesar de ser se um compilador C, o CCS no coerente com o padro ANSI. Isso prejudica bastante a portabilidade de cdigo entre o CCS e outros compiladores. As principais diferenas esto em nas diretivas especficas para microcontrolador e nos tipos de dados (principalmente o tipo int). Em contra partida, o CCS permite portar cdigo C entre as linhas PIC18 e PIC16 com bastante facilidade. Alm disso, muito rico em bibliotecas de funes para perifricos do microcontrolador e para acesso a outros dispositivos. Mais informaes sobre o compilador podem ser encontradas em www.ccsinfo.com . Uma tima referncia sobre o compilador CCS o livro PIC Programao em C, do autor Fbio Pereira. 3.3.1.2 PICC Lite (Hitech) Juntamente com as ltimas verses do MPLAB IDE vem sendo enviado o compilador PICC Lite

da Hitech. Trata-se de um compilador ANSI, portanto permite uma fcil migrao de e para o C18. Este compilador aceita componentes das linhas PIC10F, PIC12F e PIC16F, com algumas limitaes.
Exsto Tecnologia

XM118 Microcontroladores PIC18

88

Um ponto fraco do compilador que o mesmo no possui bibliotecas de funes especficas do microcontrolador, apenas aquelas constantes no padro ANSI.

3.4 Depurao em C
O processo de depurao (debugging) consiste em realizar as mesmas aes possveis na simulao, porm com o programa sendo realmente executado no microcontrolador. Dessa maneira possvel verificar o valor de variveis a medida que elas so alteradas no circuito, inserir breakpoints e acompanhar a execuo do programa sendo executado no hardware da aplicao. Se a simulao permite testar a lgica de rotinas e pequenos programas a depurao uma ferramenta mais poderosa quando se trata de programa de maior complexidade e principalmente na localizao e correo de bugs no software. Para realizar a depurao necessrio um hardware especial chamado XICD-2, embutido no kit XM118. Uma vez instalado e configurado (esse processo apresentado no manual do kit) os mesmos comandos e janelas disponveis para simulao ficam disponveis, s que agora atuando no mundo real.

Exsto Tecnologia

XM118 Microcontroladores PIC18

89

4 Linguagem C para microcontroladores


4.1 Introduo a linguagem C
Antes de tratarmos da linguagem C devemos apresentar algumas convenes que tornaro mais claro a explanao. Essa consideraes referem-se a padronizao ANSI (American National Standard for Information Systems). Em primeiro lugar, comentrios em C so indicados pelos smbolos /*, */ e //. Comentrios pertencem ao cdigo fonte mas so ignorados pelo compilador quando da compilao. Os smbolos /* e */ informam que o que est entre um comentrio. O smbolo // indica que toda linha a direita trata-se de um comentrio. Na verdade, // um smbolo definido para a linguagem C++, mas a maioria dos compiladores C o aceita. Muitos programadores usam a conveno de se uma // para comentrios explicativos e /* e */ para manter ignoradas parte do cdigo. A seguir temos alguns exemplos.
/* Isto um comentrio */

// Isto tambm um comentrio

/* Desta maneira podemos fazer comentrios que, por algum motivo qualquer, ocupem diversas linhas. Do mesmo modo podemos transformar trechos do programa em comentrios */

Todo comando em C termina, obrigatoriamente, com um ;. Os nomes de funes, variveis, constantes, etc, so chamados de indentificadores e no devem conter caracteres acentuados, espaos, e devem comear com letras (o smbolo _ tratado como letra). Letras maisculas e minsculas so consideradas diferentes, isto , Maria considerado um identificador diferente de maria. Existem palavras reservadas que no podem ser usadas como identificadores. As definidas pelo padro ANSI so apresentas a seguir, mas pode haver outras prprias do compilador. auto break case double else enum int long register struct switch typedef

Exsto Tecnologia

XM118 Microcontroladores PIC18

90

char const continue default do

extern float for goto if

return short signed sizeof static

union unsigned void volatile while

Os programas em C so organizados em funes. A funo main, como o nome em ingls indica, a funo principal do programa; por ela que o programa comea a ser executado. Todo programa deve ter pelo menos uma funo (no caso de apenas uma, ela deve ser obrigatoriamente chamada main). Juntamente com a funo main, criada pelo programador, o compilador C cria um cdigo a ser executado antes da funo main ser chamada. Sua funo realizar as configuraes necessrias execuo do programa desenvolvido. Este cdigo chamado de startup code. As chaves ({ e }) delimitam um bloco de instrues. Um bloco de instrues visto e tratado como uma nica instruo. O operador de atribuio em C o smbolo =. Os demais operadores sero tratados oportunamente. A seguir temos um exemplo de um programa bsico em C, onde podem ser observados diversos temas tratados. Observe que a tabulao, isto , a distncia entre o incio dos comandos e o canto do da tela, muito importante para a organizao e compreenso do cdigo.
/* /* /* /* /* /* #include<P18F4550.h> #include<stdio.h> Exsto Tecnologia Curso PIC Avanado Jos Domingos Adriano domingos@exsto.com.br (c)Exsto Tecnologia 2006 www.exsto.com.br // definies para o PIC18F4550 // Funes de sada de caracter */ */ */ */ */ */

void main (void) // Funo principal { // Declarao de variveis unsigned char x,z; int y; printf("\n\nHello World!!"); printf("\n Exsto Tecnologia"); x = 150; y = -12000; z = 0; for(;;){ Exsto Tecnologia

XM118 Microcontroladores PIC18

91

y = y + x = x + if(x == z x } } }

1; 1; 165){ = z + 1; = 150;

4.1.1

A funo printf() Uma funo bastante usada em C a funo printf(). Essa funo definida pelo padro ANSI

e est contida na biblioteca stdio.h. A funo printf() escreve dados na porta de sada padro. Em computadores, a porta padro o monitor. No C18 porta de sada padro a porta serial. Printf() til principalmente na depurao de programas, pois apresenta dados de diversas maneiras em forma de caracter, permitindo assim conhecer o contedo de variveis. Como ser mostrado em momento oportuno, possvel configurar o simulador do MPLAB para apresentar os dados enviados pela serial do PIC. Contudo, na prtica o seu uso deve ser evitado, pois essa

funo consome muita memria e na maioria das vezes pode ser substituda por funes mais simples de envio de caracter ou string simples. 4.1.2 C ou no C, eis a questo. A escolha da linguagem a ser usada no desenvolvimento de um projeto com

microcontroladores um fator de extrema importncia, pois impacta em diversos aspectos: tempo (e, portanto custo) de desenvolvimento, custo de ferramentas de desenvolvimento, portabilidade de cdigo, facilidade de depurao, futuras alteraes e atualizaes tecnolgicas, dentre outros. No universo dos computadores pessoais h diversas opes de linguagens, podendo atender a necessidade especficas de cada desenvolvedor ou projeto. No universo dos microcontroladores existe tambm a possibilidade de se programar em diversas linguagens de programao de mdio e alto nvel, tais como C/C++, Pascal, Basic e Java. Em oposio a essas linguagens existe sempre a opo de se programar na linguagem Assembly nativa de cada microcontrolador. muito discutida entre os profissionais da rea qual a melhor linguagem de programao para microcontroladores. Essa discusso concentra-se principalmente na questo das vantagens e desvantagens de uma linguagem de mdio ou alto nvel em relao ao Assembly nativo do microcontrolador. Obviamente deve-se considerar, em primeiro lugar, a linguagem mais adequada para cada aplicao em especial. Alm disso, importante considerar tambm o quanto o desenvolver est familiarizado com uma linguagem e o fator subjetivo de qual linguagem lhe agrada mais. Apesar de
Exsto Tecnologia

XM118 Microcontroladores PIC18

92

ter sempre em mente essas premissas, vamos expor aqui porque, na maioria das vezes e para grande parte dos desenvolvedores, a linguagem C a mais adequada. H quem defenda ferrenhamente que o desenvolvedor profissional deva trabalhar em Assembly. Os principais argumentos a favor desse modo de pensar so a eficincia (em temos de ocupao de memria) do cdigo gerado por um programador experiente, o menor tempo de execuo do programa e o controle total, j que nada feito sem que o programador saiba e queira. A eficincia de cdigo importante na medida em que a memria disponvel nos componentes em questo restrita e tem grande impacto no custo do componente. Tambm se perde o controle do cdigo gerado, j que toda vez que um compilador usado o cdigo Assembly produzido sai do controle do desenvolvedor. No passado, compiladores pouco confiveis apresentavam erros de implementao difceis de serem depurados. E ainda, se o conjunto de instrues no possuir certas caractersticas o uso de compiladores gera um cdigo significativamente maior e mais lento que um de mesmas funes em Assembly. Por outro lado, mais difcil de se desenvolver algoritmos complexos em Assembly, tornando o trabalho de desenvolvimento mais lento e mais caro. Realizar operaes matemticas complexas (por exemplo, com variveis do tipo ponto flutuante) torna-se bastante confuso. Como a linguagem nativa e os modelos de memria de cada arquitetura de microcontroladores diferem, exigido um tempo muito longo de estudo para se adaptar a um novo conjunto de instrues. Instrues de mesma funo podem ter mnemnicos totalmente diferentes em diferentes conjuntos de instruo. A grande quantidade de linhas de cdigo e a pouca inteligibilidade tornam os processos de depurao demorados e difceis. Sendo o Assembly uma linguagem de programao no estruturada os custos de desenvolvimento, depurao e manuteno tendem a ser maiores. Por fim, o reaproveitamento de cdigo e a portabilidade de programas entre uma arquitetura e outra quase impossvel, resultando na reescrita de vrias centenas ou milhares de linhas de programa. No passado era possvel a um desenvolvedor especializar-se nessa ou naquela arquitetura, tornando-se cada vez mais experiente no uso de um set de instrues e realizando todos seus projetos com alguns poucos microcontroladores compatveis. Hoje, porm, a variedade de microcontroladores muito grande. Praticamente todos os fabricantes de circuitos integrados digitais tm suas famlias de microcontroladores. A concorrncia de preo entre esses fabricantes e a diversidade de configuraes dos microcontroladores exige que as empresas optem por usar diferentes arquiteturas em diferentes projetos, ou mesmo substituir componentes em produtos j existentes. necessrio que o desenvolvedor de sistemas microcontrolados seja capaz de se adaptar aos diferentes modelos de memria e conjunto de instrues, com pouco tempo para o estudo detalhado de cada caso.
Exsto Tecnologia

XM118 Microcontroladores PIC18

93

A soluo ento utilizar uma linguagem de mais alto nvel, que por princpio so independentes do hardware. O desenvolvedor concentra seu trabalho na criao de algoritmos e funcionalidades no projeto e deixa o trabalho de implementao para o compilador. Surge ento outro problema: qual linguagem usar? Para muitas pessoas a resposta : o C! Vejamos por que. Em primeiro lugar, o C considerado uma linguagem de mdio nvel, isto , mais amigvel para o ser humano, mas mantendo recursos de baixo nvel. Em virtude disso, o C permite gerar cdigos mais eficientes quando comparado com outros compiladores. H tambm a vantagem da independncia do hardware que permite que um projeto seja portado de uma arquitetura para outra com poucas alteraes no cdigo. Essas caractersticas do C no so por acaso. A linguagem foi desenvolvida no incio dos anos 70 por Dennis Ritchie especificamente para o desenvolvimento do sistema operacional UNIX. Na poca o dilema era quase o mesmo: construir sistemas operacionais em assembly era demorado e dispendioso e todo o trabalho tinha que ser refeito a cada novo processador criado. Os computadores da poca tinham pouca memria e os modelos usados por Ritchie no eram capazes de implementar operaes de ponto flutuante diretamente. Ritchie desenvolveu uma linguagem simples, fcil de ser aprendida, mas com recursos que permitem o desenvolvimento de programas complexos, como sistemas operacionais, que permite portabilidade de cdigo sem prejudicar as funcionalidades de baixo nvel, gerando um cdigo bastante enxuto, isto , eficiente no uso da memria. Por ser uma linguagem estruturada, o C exige que o programador siga boas prticas de programao, evitando assim erros que, em Assembly, poderiam passar despercebidos. A portabilidade de cdigo fica garantida, pois existe uma norma que rege a linguagem C. Todo compilador que segue o padro ANSI deve conseguir reconhecer o mesmo cdigo gerado, independente da arquitetura alvo. Os compiladores C profissionais so bastante confiveis, geram cdigo eficiente e livre de bugs de implementao. Uma vantagem adicional do C so as bibliotecas de funes que acompanham os compiladores. Alm das bibliotecas convencionais do padro ANSI a maioria dos compiladores possui bibliotecas para uso das funcionalizadas especficas de cada microcontrolador. Alm do ganho de tempo em se usar as bibliotecas j prontas existe tambm um ganho de eficincia de cdigo, j que essas funes so normalmente implementadas em Assembly para otimizao de memria e tempo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

94

Como o C utilizado tambm em computadores, trata-se de uma linguagem muito difundida nas escolas e universidade. Tambm os profissionais que tiveram uma formao acadmica voltada para o PASCAL tero facilidade em desenvolver em C. Na tabela 2.1 se pode observar uma comparao entre as linguagens C e Assembly. Caracterstica Assembly C Eficincia de cdigo tima Muito Boa Velocidade de execuo tima Muito Boa Controle do sistema timo Muito Bom Portabilidade Pssimo timo Depurao Muito difcil Fcil Programao No-estruturada Estruturada Bibliotecas de funes No H Padronizadas e especficas Tabela 2.1 Comparao entre C e Assembly Contudo, no se deve entender que o estudo da linguagem Assembly deve ser negligenciado. Assim como o bom piloto de corrida entende tanto da mecnica de seu carro quanto os engenheiros que o projetaram, o bom desenvolvedor deve ter slidos conhecimentos da arquitetura, modelo de memria e conjunto de instrues Assembly do microcontrolador com o qual trabalha. imprescindvel conhecer bem o assembly, at para poder conseguir os melhores resultados em C. Sempre possvel analisar o cdigo Assembly gerado pelo compilador, buscando formas de otimizlo. Alm disso, em situaes crticas, possvel inserir linhas de cdigo Assembly dentro de um programa escrito em C. Por essas e por outras razes os fabricantes de microcontroladores tm, j h alguns anos, desenvolvido arquiteturas de microcontroladores otimizadas para o uso da linguagem C. Alguns tipos de instrues e modos de endereamento so includos para tornar mais fcil a traduo do cdigo C para o cdigo de mquina. Isso acontece com o PIC18 no set de instrues convencional e mais pronunciadamente no set estendido. Como adaptaes do processador ao C podem citar as instrues voltadas para endereamento indireto e para leitura de constantes na memria de programa, alm da presena de diversos ponteiros para endereamento indireto de variveis (facilitam a implementao de vetores, matrizes e variveis do tipo ponteiro). Esperamos ter demonstrado que a linguagem C tem sido cada vez mais usada no desenvolvimento com microcontroladores, trazendo diversas vantagens que justificam seu uso em aplicaes profissionais. Uma ltima observao deve ser feita quanto ao uso de linguagens orientadas a objeto. Apesar da orientao a objeto ser uma tendncia na programao e trazer inegveis benefcios ao desenvolvimento de software, hoje ainda ela no usada em larga escala. Uma provvel causa o
Exsto Tecnologia

XM118 Microcontroladores PIC18

95

maior consumo de memria que a tcnica acarreta. Contudo j existem compiladores que permitem trabalhar de forma orientada a objetos (em C++, Java, etc). No futuro otimizaes na arquitetura dos microcontroladores sero feitas para tornar o cdigo orientado a objeto mais leve aos microcontroladores. 4.1.3 Passado e Futuro da linguagem C Desde seu surgimento no incio dos anos 70, a linguagem C sofreu alteraes, ampliaes,

tornou-se um padro estvel e gerou descendentes. C foi desenvolvido inicialmente para a implementao do sistema operacional Unix. Como o Unix se popularizou e foi portado para vrias plataformas diferentes, foi necessrio implementar compiladores C para diferentes arquiteturas. Foi ento que a caractersticas de portabilidade do C se tornou mais evidente. Em meados dos anos 80 a ANSI (American National Standard for Information Systems) criou uma norma padronizando o C, criando uma lngua comum a ser reconhecida por todos os compiladores C. Em virtude da evoluo da computao, o C gerou vrias linhas de evoluo. Para atender aos conceitos da programao orientada a objeto foi desenvolvido o C++. Seguindo essa linha, surgiu a linguagem Java. Para aplicaes para Internet a linguagem PHP descendente direto do C. Para aplicaes para celulares foi criado o C#. Alm disso, vrias ferramentas usam C/C++ para desenvolver cdigo com interface grfica amigvel, como o Visual C++ ou o Borland C++ Builder.

4.2 Diretivas
Diretivas podem ser descritas como comandos dados ao compilador, indicado a aes que devem ser feitas no momento da compilao. Elas podem ou no gerar cdigo que efetivamente vai ser executado pelo microcontrolador, j que sua funo orientar a compilao do programa. O padro ANSI C prev uma grande variedade de diretivas. Alm disso, o padro prev uma diretiva para criao de novas diretivas, chamada #pagrma , de forma que diferentes compiladores possam oferecer a seus usurios opes que no esto previstas no padro ANSI. Das diversas diretivas disponveis enfocaremos apenas e quem tem maior uso neste curso, apresentadas abaixo. 4.2.1 #include A diretiva #include permite incluir arquivos de cabealho e bibliotecas de funes.

Exsto Tecnologia

XM118 Microcontroladores PIC18

96

#include <P18F4550.h> #include <spi.h>

// inclui um arquivo de definio do PIC // inclui a biblioteca de funes SPI.c

como se, ao se chegar a essa diretiva, o compilador colasse (inclusse) o contedo do arquivo apontado. 4.2.2 #define Esta diretiva muito til pois permite apelidar um trecho de texto por um nome. #define

define que um nome representa o texto imediatamente a seguir, de forma que quando da compilao toda ocorrncia desse nome seja substitudo pelo texto. Vejamos os exemplos a seguir:
#define VALOR_MAXIMO #define LED #define ACENDE_LED 125 POTRDbits.RD0 LED = 1;

No primeiro exemplo, o valor 125 foi chamado de VALOR_MAXIMO. Esse tipo de construo til quando temos um limite ou constante que queremos usar em diferentes partes do cdigo, mas que pode mudar seu valor devido a alguma necessidade do projeto. Chamando de VALOR_MAXIMO o valor 125, se for necessrio mud-lo para, por exemplo, 203 basta alterar na definio, e no em todos os pontos do cdigo. No segundo caso, usamos #define para atribuir um nome a um pino do microcontrolador. Dessa forma, no recisamos fazer sempre referncia ao pino, chamamo-lo por seu apelido LED. Isto facilita o entendimento do cdigo e possveis alteraes na configurao do hardaware. No ltimo caso usamos #define para apelidar um trecho de cdigo, criando o que conhecido como macro. 4.2.3 #pragma config Esta uma diretiva especfica do compilador C18, criada com o uso da diretiva #pragma. Ela

permite definir as configuraes de caractersticas especiais e oscilador do PIC, estudadas anteriormente. A diretiva admite uma srie de parmetros. Esses parmetros mudam para cada PIC, conforme suas prprias caractersticas. Para obter a informao detalhada para cada PIC, consulte o arquivo hlpC18ConfigSet que se encontra na pasta C:\MCC18\doc. Para o PIC18F4550, temos as opes de configurao descritas abaixo, sendo que esto em negrito as configuraes default, isto , aquelas reconhecidas caso nenhuma escolha tenha sido feita. Deve-se estar atento quais escolher, pois uma configurao errada ocasionar um mal funcionamento do programa.

Exsto Tecnologia

XM118 Microcontroladores PIC18

97

PLL Prescaler Selection


PLLDIV = 1 PLLDIV = 2 PLLDIV = 3 PLLDIV = 4 PLLDIV = 5 PLLDIV = 6 PLLDIV = 10 PLLDIV = 12 Sem pr-escala (4 MHz) Divide por 2 (8 MHz) Divide por 3 (12 MHz) Divide por 4 (16 MHz) Divide por 5 (20 MHz) Divide por 6 (24 MHz) Divide por 10 (40 MHz) somente no modo EC Divide por 12 (48 MHz) somente no modo EC

Essa configurao permite usar diferentes valores de cristais como sinal de entrada do PLL para o mdulo USB. CPU System Clock Postscaler Sem PLL Com PLL CPUDIV = OSC1_PLL2 FXTAL / 1 FPLL / 2 (48 MHz) CPUDIV = OSC2_PLL3 FXTALl/ 2 FPLL / 3 (32 MHz) CPUDIV = OSC3_PLL4 FXTALl/ 3 FPLL / 4 (24 MHz) CPUDIV = OSC4_PLL6 FXTAL / 4 FPLL / 6 (16 MHz) Essa configurao permite selecionar o fator de diviso do clock do sistema. Quando usado como modos de oscilador sem PLL ele divide o freqncia do cristal (Fxtal) por 1, 2, 3 ou 4. Quando usado em modos com oscilador, divide a freqncia da sada do PLL (96MHz ) por 2, 3, 4 e 6, obtendo-se as freqncias indicadas na tabela. USB Clock Selection USBDIV = 1 Clock de USB vem direto do oscilador principal, sem pr-escala (baixa velocidade) USBDIV = 2 Clock de USB vem do PLL (alta velocidade) Esta opo permite escolher entre o modo de baixa o alta velocidade, para USB. No modo de baixa velocidade a nica freqncia de entrada aceita 6MHz. Oscillator Selection Oscilador de CPU Oscilador de USB FOSC = XT_XT XT XT FOSC = XTPLL_XT XT com PLL XT com PLL FOSC = ECIO_EC EC (clock externo), RA6 usado como I/O EC (clock externo) FOSC = EC_EC EC (clock externo), RA6 sada de clock EC (clock externo) FOSC = ECPLLIO_EC EC (clock externo) com PLL, RA6 usado EC (clock externo) com PLL como I/O FOSC = ECPLL_EC EC (clock externo) com PLL, RA6 sada EC (clock externo) com PLL de clock FOSC = INTOSCIO_EC Oscilador interno, RA6 usado como I/O EC (clock externo) FOSC = INTOSC_EC Oscilador interno, RA6 sada de clock EC (clock externo) FOSC = INTOSC_XT Oscilador interno XT FOSC = INTOSC_HS Oscilador interno HS FOSC = HS HS HS FOSC = HSPLL_HS HS com PLL HS com PLL Seleciona o tipo de oscilador principal. Observe que a seleo de modo define qual ser o oscilador da CPU e qual ser de USB.
Exsto Tecnologia

XM118 Microcontroladores PIC18

98

Fail-Safe Clock Monitor Enable FCMEN = OFF Fail-Safe Clock Monitor desabilitado FCMEN = ON Fail-Safe Clock Monitor habilitado Se o Fail-Safe Clock Monitor estiver habilitado gerada uma interrupo caso o oscilador principal pare de operar e o oscilador interno assume como clock de sistema. Internal/External Oscillator Switchover IESO = OFF No permite mudana de oscilador externo para interno IESO = ON Permite mudana de oscilador externo para interno A configurao acima permite ou no que se troque entre as fontes de clock interno e externo. Power-up Timer Enable PWRT = ON Power-up timer habilitado PWRT = OFF Power-up timer desabilitado Brown-out Reset Enable BOR = OFF Brown-out Reset desabilitado em hardware e software BOR = SOFT Brown-out Reset habilitado e controlado por software(SBOREN est desativado) BOR = ON_ACTIVE Brown-out Reset habilitado somente em hardware e desabilitado no mode Sleep (SBOREN est desativado) BOR = ON Brown-out Reset habilitado somente no hardware(SBOREN est desativado) Brown-out Voltage BORV = 0 4,5 V BORV = 1 4,2 V BORV = 2 2,7 V BORV = 3 2,0 V USB Voltage Regulator Enable VREGEN = OFF Regulador de USB ativo VREGEN = ON Regulador de USB inativo Quando o perifrico USB estiver ativo, deve existir uma tenso de 3,3V no pino VUSB. Essa tenso pode ser externa ou gerada internamente por um regulador, controlado pela opo acima. Watchdog Timer Enable WDT = OFF HW Disabled - SW Controlled WDT = ON HW Enabled - SW Disabled Ao usar o watchdog lembre-se que necessrio zerar periodicamente esse contador no software, seno o microcontrolador reseta. Watchdog Timer Postscale Select bits WDTPS = 1 1:1 WDTPS = 2 1:2 WDTPS = 4 1:4 WDTPS = 8 1:8
Exsto Tecnologia

XM118 Microcontroladores PIC18

99

WDTPS = 16 1:16 WDTPS = 32 1:32 WDTPS = 64 1:64 WDTPS = 128 1:128 WDTPS = 256 1:256 WDTPS = 512 1:512 WDTPS = 1024 1:1024 WDTPS = 2048 1:2048 WDTPS = 4096 1:4096 WDTPS = 8192 1:8192 WDTPS = 16384 1:16384 WDTPS = 32768 1:32768 Para determinar o tempo total entre estouro do watchdog, multiplique o valor da pr-escala por 4ms. MCLR Pin Enable MCLRE = OFF MCLR (Reset) desabilitado; RE3 habilitado como entrada MCLRE = ON MCLR (Reset) habilitado; RE3 desabilitado Low-Power Timer 1 Oscillator Enable LPT1OSC = OFF Oscilador do Timer1 em modo de maior consumo e maior preciso LPT1OSC = ON Oscilador do Timer1 em modo de menor consumo e menor preciso PORTB A/D Enable PBADEN = OFF Pinos de PORTB [4:0] configurados como entrada digital aps Reset PBADEN = ON Pinos de PORTB [4:0] configurados como entrada analgica aps Reset Para usar os pinos do PORTB como entrada ou sadas digitais, mesmo com a funo de interrupo, necessrio desativar as entradas do A/D ou configurar PBADEN = OFF. CCP2 MUX CCP2MX = OFF CCP2MX = ON

Pino CCP2 conectado a RB3 Pino CCP2 conectado a RC1

Stack Full/Underflow Reset Enable STVREN = OFF Desabilita reset se ocorrer overflow/underflow da pilha STVREN = ON Habilita reset se ocorrer overflow/underflow da pilha Single-Supply ICSP Enable LVP = OFF Gravao em modo de baixa teso desabilitada LVP = ON Gravao em modo de baixa teso habilitada O kit XM118 suporta apenas gravao em modo de alta tenso, portanto essa opo deve estar desabilitada sempre. Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable ICPRT = OFF ICPORT desabilitado ICPRT = ON ICPORT habilitado

Exsto Tecnologia

XM118 Microcontroladores PIC18

100

Essa configurao permite usar pinos no conectados do encapsulamento de 44 pinos (SMD) como pinos de gravao e depurao. Portanto, essa opo s valida nesses encapsulamentos, quando for usado encapsulamentos DIP ele no tem efeito. Extended Instruction Set Enable XINST = OFF Modo de instrues estendido desabilitado. XINST = ON Modo de instrues estendido habilitado. Background Debugger Enable DEBUG = ON Depurador habilitado, RB6 and RB7 so dedicados a depurao in-circuit DEBUG = OFF Depurador desabilitado, RB6 and RB7 pode ser usados como I/O A opo DEBUG=ON deve ser escolhida quando o kit for usado como depurador. As opes a seguir referem-se a propriedade de proteo de cdigo pra diversos blocos da memria. Para os blocos em que essa propriedade estiver ativa no possvel fazer uma leitura externa da memria. Code Protection bit Block 0 CP0 = ON Bloco 0 (000800-001FFFh) protegido CP0 = OFF Bloco 0 (000800-001FFFh) no protegido Code Protection bit Block 1 CP1 = ON Bloco 1 (002000-003FFFh) protegido CP1 = OFF Bloco 1 (002000-003FFFh) no protegido Code Protection bit Block 2 CP2 = ON Bloco 2 (004000-005FFFh) protegido CP2 = OFF Bloco 2 (004000-005FFFh) no protegido Code Protection bit Block 3 CP3 = ON Bloco 3 (006000-007FFFh) protegido CP3 = OFF Bloco 3 (006000-007FFFh) no protegido Boot Block Code Protection bit CPB = ON Bloco de Boot (000000-0007FFh) protegido CPB = OFF Bloco de Boot (000000-0007FFh) no protegido

A proteo de cdigo para EEPROM impede que ela seja lida externamente. Data EEPROM Code Protection bit CPD = ON Data EEPROM code-protected CPD = OFF Data EEPROM not code-protected A proteo de escrita de memria FLASH impede que o bloco protegido possa ser escrito pelo prprio microcontrolador.
Exsto Tecnologia

XM118 Microcontroladores PIC18

101

Write Protection bit Block 0 WRT0 = ON Bloco 0 (000800-001FFFh) protegido WRT0 = OFF Bloco 0 (000800-001FFFh) no protegido Write Protection bit Block 1 WRT1 = ON Block 1 (002000-003FFFh) protegido WRT1 = OFF Block 1 (002000-003FFFh) no protegido Write Protection bit Block 2 WRT2 = ON Block 2 (004000-005FFFh) protegido WRT2 = OFF Block 2 (004000-005FFFh) no protegido Write Protection bit Block 3 WRT3 = ON Block 3 (006000-007FFFh) protegido WRT3 = OFF Block 3 (006000-007FFFh) no protegido Boot Block Write Protection WRTB = ON Boot block (000000-0007FFh) protegido WRTB = OFF Boot block (000000-0007FFh) no protegido Configuration Register Write Protection WRTC = ON Bits de configurao (300000-3000FFh) protegido WRTC = OFF Bits de configurao (300000-3000FFh) no protegido A proteo de escrita de memria EEPROM impede que a mesma possa ser escrita pelo prprio microcontrolador. Data EEPROM Write Protection WRTD = ON EEPROM protegido WRTD = OFF EEPROM no protegido Os blocos de memria protegidos contra leitura no podero ser lidos pelo prprio microcontrolador. Table Read Protection bit Block 0 EBTR0 = ON Bloco 0 (000800-001FFFh) protegido EBTR0 = OFF Bloco 0 (000800-001FFFh) no protegido Table Read Protection bit Block 1 EBTR1 = ON Bloco 1 (002000-003FFFh) protegido EBTR1 = OFF Bloco 1 (002000-003FFFh) no protegido Table Read Protection bit Block 2 EBTR2 = ON Bloco 2 (004000-005FFFh) protegido EBTR2 = OFF Bloco 2 (004000-005FFFh) no protegido Table Read Protection bit Block 3 EBTR3 = ON Bloco 3 (006000-007FFFh) protegido
Exsto Tecnologia

XM118 Microcontroladores PIC18

102

Boot Block Table Read Protection EBTRB = ON Bloco de Boot (000000-0007FFh) protegido EBTRB = OFF Bloco de Boot (000000-0007FFh) no protegido Abaixo apresentado um exemplo de cdigo fazendo a configurao do microcontrolador conforme os comentrios.
#pragma config #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config PLLDIV = 5 // PLL para 20MHz

CPUDIV = OSC1_PLL2// Oscilador principal a 48MHz FOSC = HS WDT = OFF PBADEN = OFF LVP = OFF DEBUG = ON // Oscilador HS para CPU e USB // Watchdog desativado // Pinos do PORTB comeam como digitais // Desabilita gravao em baixa tenso // habilita debug

4.2.4

#pragma interrupt e #pragma interruptlow Estas diretivas permitem definir que uma funo uma rotina de tratamento de interrupo

(RTI) de baixa ou de alta prioridade. Ao fazer isso o compilador se encarrega de descrever o cdigo especfico para chamada, salvamento e retorno de contexto da interrupo. Alm disso, a diretiva permite passar uma lista de variveis (variveis declaradas pelo usurio e registros do microcontrolador) que devem ter seu contexto salvo quando ocorrer interrupo. Sua sintaxe apresentada a seguir. #pragma interrup nome_da_RTI_alta_prioridade [save = lista_de_variveis] #pragma interruplow nome_da_RTI_baixa_prioridade [save = lista_de_variveis] Mais detalhe e exemplos do uso dessa na seo que trata de interrupes em C.

4.3 Tipos de dados


Ao contrrio do que ocorre em Assembly, em C existem diversos tipos de dados, de tamanhos e faixas de valores diferentes. Basta que uma varivel seja declarada como sendo de um determinado tipo e o compilador se encarrega de gerar o cdigo necessrio para sua manipulao. O padro ANSI define diversos tipos de dados para os compiladores C: char, int, float, double e void. O tipo void serve para indicar que o tipo parmetro nulo nas funes, ou seja, que o parmetro no existe. Mais detalhes sobre passagem de parmetros para funes sero apresentados no tpico que trata de funes. O tipo char capaz de armazenar um caracter simples. O tipo int armazena um dado do tipo inteiro, tipicamente do tamanho de barramento de dados do
Exsto Tecnologia

XM118 Microcontroladores PIC18

103

processador, mas no deve ser menor que 16 bits. Float armazena dados do tipo ponto flutuante (fracionrios) de preciso simples e double armazena dados de ponto flutuante de dupla preciso. Alm dos tipos de dados padro existem tambm modificadores que permitem alterar as caractersticas de cada tipo de dado. So eles: signed: informa que o dado do tipo sinalizado (valores positivos e negativos) unsigned: informa que o dado do tipo no sinalizado (somente valores positivos) long: informa que o inteiro uma variao maior que o padro short: informa que o inteiro uma variao menor que o padro Como os modificadores short e long atuam somente sobre dados do tipo int podemos escrever apenas o modificador, o int fica subentendido. Quando um dado do tipo sinalizado, um de seus bits utilizado para indicao do sinal, o que reduz pela metade o valor absoluto que esse dado pode conter. Os tipos de dados inteiros que ocupam mais de um endereo de memria tm sua parte menos significativa nos endereos mais baixos e a parte mais significativa nos endereos mais altos. A tabela 2.2 apresenta os tipos de dados tratados pelo compilador C18, bem como seu tamanho e faixa de valores. Faixa de valores Mnimo Mximo char 8 bits -128 127 signed char 8 bits -128 127 unsigned char 8 bits 0 255 int 16 bits -32.768 32.767 unsigned int 16 bits 0 65.536 Short 16 bits -32.768 32.767 Unsigned short 16 bits 0 65.536 Short long 24 bits -8.388.608 8.388.607 Unsigned shot long 24 bits 0 16.777.215 Long 32 bits -2.147.483.648 2.147.483.647 Unsigned long 32 bits 0 4.294.967.295 Tabela 2.2 - Tipos da dados inteiros Os tipos de dados float e double para variveis com parte fracionrias (chamados de floating points ponto decimal flutuante) definidos para C18 como variveis de 32 bits, que comportan-se de forma idntica. A tabela 2.3 traz os tipos de dados suportados em C bem como as faixas de valores: Tipo Tamanho

Exsto Tecnologia

XM118 Microcontroladores PIC18

104

Tipo

Tamanho Mnimo

Faixa de valores Mximo 2128 * (2-215) 6.80564693e + 38 2128 * (2-215) 6.80564693e + 38

float double

32 bits 32 bits

2-126 (aprox. 1.17549435e - 38) 2-126 (aprox. 1.17549435e - 38)

Tabela 2.3 - Tipos de dados ponto flutuante 4.3.1 Declarao de variveis e constantes A declarao de variveis feita conforme o exemplo a seguir:
char x,y; shor long medida; unsigned int dado = 0x35; float pi = 3.1459;

Coloca-se primeiro o identificador de tipo, acompanhado ou no do modificar, seguido pela lista de variveis desse tipo, separadas por ,. Ao final da declarao necessrio acrescentar o sinal ;. Alm disso, possvel definir um valor inicial para a varivel, conforme apresentado na terceira e quarta linhas do exemplo. A declarao de constantes feita de forma bastantes semelhante, bastando acrescentar o identificador const antes da declarao. Observe que necessrio informar o tipo de dado da constante, conforme o exemplo a seguir.
const unsigned int SetPoint = 60000; const char Letra = A;

A representao de valores nas diferentes bases feita conforme a tabela 2.4, onde y representa o valor a ser expresso. A smbolo usado para separar as partes inteiras e fracionria de um nmero o ponto ( . ). A representao de caracteres feita entre apstrofos ( ). Tipo Decimal Hexadecimal Binrio Octal Notao Exemplos yyy 31, 1025, -3, 50000 0xyyy 0x31, 0xABCD, 0x0008 0byyy 0b10101010, 0b1111000011110000 0oyyy 0o31, 0o123, 0o1543 Tabela 2.4 - Representao de valores
Exsto Tecnologia

XM118 Microcontroladores PIC18

105

4.3.2

Variveis locais e globais Uma varivel pode ser declarada de forma global ou local. Variveis locais so declaradas

dentro de funes ou blocos de instrues (delimitados por chaves) e so reconhecidas somente dentro da funo ou do bloco. Variveis globais so declaradas fora das funes e so reconhecidas por todas as funes do programa. O uso de variveis globais necessrio em algumas situaes quando determinada varivel deve ser vista e alterada por diversas funes, como, por exemplo, na troca de dados entre funes de tratamento de interrupo e outras funes. Contudo, seu uso deve ser restrito, pois ocupam uma posio de memria constantemente. J as variveis locais so criadas quando a funo executada e destrudas quando a funo retorna. Isso significa que o mesmo endereo de memria pode ser usado por diversas variveis no decorrer do programa, o garante um melhor uso de memria. Caso variveis locais tenham o mesmo nome de variveis globais, as globais sero ignoradas naquela funo (ou bloco). 4.3.3 Vetores e matrizes possvel criar vetores e matrizes de dados dos tipos bsicos. Vetores e matrizes so

conjuntos de diversas variveis de mesmo tipo que so referenciadas por um mesmo identificador, sendo discriminadas por um ndice. Vetores so unidimencionais, enquanto matrizes podem ter duas dimenses ou mais. Todo vetor ou matriz terminado por um caracter de valor 0. Para atribuir valores constantes ou valores iniciais variveis enumera-se os valores de cada elementos entre chaves, separados por vrgulas. Um caso particular de vetores so os vetores de caracteres, chamados de strings, que so teis para armazenar palavras e frases. Nesses casos, o conjunto de caracteres pode ser atribudo a um vetor constante simplesmente usando aspas para marcar incio e fim. Esse processo apresentado no exemplo abaixo. Uma string sempre terminada com um caracter igual a zero. Este caracter serve para marcar o final de uma string, uma vez que nenhum caracter representado por zero. Na criao de um vetor ou matriz necessrio informar o nmero de elementos que essa contm. Isso feito colocando o nmero de elementos entre colchetes na declarao. No caso de um vetor de caracteres constantes no preciso colocar o nmero de elementos, pois esse determinado pelo nmero de elementos atribudos. Para fazer referncia a um elemento em particular dentro de uma matriz ou vetor usa-se a posio desse elemento (ndice). ndices podem ser valores fixos ou variveis. Ateno: em C as
Exsto Tecnologia

XM118 Microcontroladores PIC18

106

posies comeam em 0, portanto em um vetor de 10 elementos o ndice poder assumir valores de 0 a 9. A seguir so apresentados alguns exemplos de declarao de variveis.
int Medidas[16]; const char nome[] = "Domingos"; char Empresa[] = "Exsto Tecnologia"; unsigned int InitLCD[6] = {0x33,0x32,0x28,0x06,0x0C,0x01};

O acesso a dados em vetores e constantes feitas atravs do uso de ndice, conforme mostrado no exemplo abaixo.
unsigned char i; int x; int Medidas[10]; const int Valores[5] = {0x25, 0x31, 0x33, 0x02, 0x55}; Medida[i] = 15; x = Valores[3];

4.3.4

Ponteiros Um tipo especial de variveis o tipo ponteiros. Ponteiros so variveis que contm o

endereo de outras variveis. Sua funo apontar onde a varivel est na memria, da seu nome. Ponteiros so muito usados em C e um dos motivos que permitem a implementao do cdigo de forma bastante otimizada. Uma arquitetura de microcontrolador otimizado para a linguagem C deve ter um eficiente sistema de ponteiros. Para declarar um ponteiro usamos uma sintaxe parecida com a declarao de varivel, porm com significado diferente. Deve ser colocado o tipo de dado que o ponteiro aponta e o nome do ponteiro, precedido por *. Por exemplo, na declarao a seguir x uma varivel do tipo inteiro enquanto ip um ponteiro que aponta para variveis do tipo inteiro.
int x; int *ip; // x um inteiro // ip um ponteiro que aponta inteiros

Exsto Tecnologia

XM118 Microcontroladores PIC18

107

Para atribuir a um ponteiro o endereo de uma varivel usamos o operador &. Para manipular o contedo da varivel apontada pelo ponteiro usamos o operador *. O exemplo a seguir ilustra alguns usos de ponteiros.
int x = 1, y = 2, z[10]; // x e y so inteiros, // z um vetor de inteiros int *ip, *iq; // ip e iq so ponteiros que // apontam inteiros

ip = &x; iq = &y; y = *ip; *ip = 0; ip = &z[0]; iq = ip;

// ip aponta para x // iq aponta para y // y agora vale 1 // x agora vale 0 // ip agora aponta para z[0] // iq agora aponta para Z[0] tambm

4.3.5

Qualificadores Existem alguns qualificadores que indicam como os dados devem ser alocadas na memria. So naturais da linguagem C os qualificadores static e auto. O qualificador auto indica que a

varivel valida somente naquele bloco de instrues (bloco delimitado por chaves ou funo), sendo alocada quando o bloco comea e desalocada quando terminar. Desalocar, ou detruir, significa que aquele endereo de memria pode ser usado por outras variveis do programa. O qualificador static informa que a varivel no pode ser desalocada, portanto seu endereo de memria no ser ocupado por outras variveis e seu contedo no ser alterado aps a finalizao do bloco. Seu comportamento semelhante ao de variveis globais, porm s so reconhecidas dentro do bloco ao qual pertencem. Quando no especificado, as variveis so consideradas como auto. O compilador C18 introduz 4 novos qualificadores: ram e rom, near e far. Os qualificadores ram e rom definem se o dado (varivel ou constante) deve ser alocado na memria de dados (RAM) ou de programa (ROM). A principio isso parece no fazer sentido, pois imagina-se que variveis devam ser alocadas na RAM e constantes na memria de programa. Contudo, para aumentar a velocidade da manipulao de dados, constantes podem ser carregadas na memria de dados quando o programa iniciado. Em outras situaes, pode ser desejvel que
Exsto Tecnologia

XM118 Microcontroladores PIC18

108

garantir que grandes tabelas de constantes estejam armazenadas na FLASH para reduzir o consumo de memria RAM. As variveis declaradas em memria de programa devem, obrigatoriamente, ser do tipo static. Quando no especificado, o C18 assume que os dados devem ser alocados na RAM. Isso vlido tanto para variveis com para constantes. Os qualificadores near e far (perto e longe em ingls, respectivamente) informam em que regio da memria os dados devem ser alocados. Para dados na memria de programa, near (perto) significa nos primeiros 64 kbytes de memria. Para memria de dados, near significa na RAM de acesso. Em ambos os casos, far significa em qualquer regio da memria, inclusive nas regies abrangidas por near. Quando no especificado, o C18 trata os dados como qualificados com far. Seguem abaixo alguns exemplos de usos dos modificadores.
rom static char Senha[4]// varivel alocada na memria flash const char Nome[] = Joo; // constante alocada na RAM

rom char *ptrSenha;

// ponteiro para varivel na FLASH

near int Resultado;

// resultado alocado na RAM de Acesso

static int cont;

// Cont do tipo esttico.

4.3.6

Tipos de dados avanados

4.4 Comandos Bsicos


O C uma linguagem de programao estruturada. Isso significa que segue seus comando bsicos tem o objetivo de implementar os trs tipos bsicos de estruturas: atribuio, deciso e repetio. Alm disso, possui diversos operadores que permitem realizar operaes lgicas e matemticas. Todos os exemplos dados a seguir podem ser simulados para sua melhor compreenso. Para tanto, os exemplos devem ser copiados para dentro do arquivo SIM_C.ASM, do projeto SIM_C.MCP, que se encontra no CD que acompanha a apostila.

Exsto Tecnologia

XM118 Microcontroladores PIC18

109

4.4.1

Atribuio Comando de atribuio realizado simplesmente com o uso do operador =. O

indentificador a esquerda recebe o valor da expresso direita.Algum exemplos so apresentados a seguir.


x = 2; y = 3; x = 2 + y; y = x;

Nesses casos devemos evitar o uso do termo igual para evitar equvocos. Dizemos, por exemplo, x recebe dois e no x igual a dois. O C permite substituir a expresso x = x + 5 por x += 5, como o mesmo efeito. 4.4.1.1 Acesso aos SFR No arquivo de cabealho que existe para cada microcontrolador PIC (ex.: P18F4550.h) esto

definidos todos os registros de uso especial. Dessa maneira, possvel manipular diretamente os registros como se fossem variveis e envolv-los em operaes com os operadores estudados. Os exemplos abaixo mostram com isso pode ser feito:
#include<P18F4550.h>

void main(void){ TMR0 = 0x25; T1CON = 0b0001001; TRISA = 0xAA; INTCON = 0xC0; } // carrega valor no timer 0 // configura o timer 1 // configura direo das portas // habilita interrupes

Da mesma maneira, esto definidos os bits de cada registro, na forma de estruturas, conforme os exemplos a seguir. Basta colocar o nome registro seguido de bits. e o nome do bit em questo (muita ateno com as letras, pois C diferencia maisculo de minsculo.)

Exsto Tecnologia

XM118 Microcontroladores PIC18

110

#include<P18F4550.h>

void main(void){ RCONbits.IPEN = 1; INTCONbits.GIEH = 1; ADCON0bits.ADON = 0; TXSTAbits.TXEN = 1; } // ativa prioridade de int. // habilita interrupes // desliga o ADC // Ativa recepo serial

4.4.1.2

Entrada e Sada em C18 O compilador C18, assim como qualquer compilador C, no define comandos ou funes

especiais para realizar operaes de entrada e sada de dados. Mas como no PIC18 os portais de I/O so registros de funes especiais e, portanto, definidos no arquivo de cabealho de cada microcontrolador, podemos manipul-los como se fossem variveis. Os registros que controlam a direo dos pinos dos portais, isto , o registro TRISx, podem ser acessados por dois nomes: TRISx (TRISA, TRISB, TRISC, etc...) e DDRx (DDRA, DDRB, DDRC, etc.). DDRx vem de Direction Data Register Registro de Direo de Dados. Pode-se configurar o portal todo de uma vez ou os registros individualmente. O exemplo a seguir trata do portal B, mas o mesmo raciocnio pode ser estendido aos demais portais. 4.4.1.3 Operadores em C Para a execuo de expresses e condies o C dispes de diversos operadores, alm do

operador = (atribuio) j tratado. Os operadores matemticos so apresentados na tabela abaixo. Operador + * / % ++ -Operao Adio Subtrao Multiplicao Diviso Resto da Diviso Incremento Decremento

A seguir esto alguns exemplos de uso de operadores matemticos

Exsto Tecnologia

XM118 Microcontroladores PIC18

111

int x, y = 3, z = 2;

x = y + z; x = y - z; x = y * z; x = y / z; x = y % z;

// o valor de x ser 5 // o valor de x ser 1 // o valor de x ser 6 // o valor de x ser 1 (parte inteira) // o valor de x ser 1 (resto da diviso)

H tambm os operadores de incremento (++) e decremento (--). Numa atribuio, se usarmos os operadores a direita do dado, seu valor vai ser alterado (incrementado ou decrementado) antes da atribuio; se os usarmos a esquerda, seu valor ser alterado depois. Observemos o exemplo a seguir.
y = 5; x = ++y; // y recebe 5 // y contm 6 e o valor de x 6

y = 5; x = y++;

// y recebe 5 // y contm 6 MAS x contm 5

Existem tambm os operadores relacionais utilizados para comparar dados. Operador Operao > Maior que >= Menor ou igual que < Menor que <= Menor ou igual que == Igual a != Diferente de Uma operao relacional resulta em verdadeiro ou falso. Os exemplos a seguir mostram o resultado de algumas operaes relacionais. Para x = 10 e y = 8:

x>y x >= y

Verdadeiro Verdadeiro

Exsto Tecnologia

XM118 Microcontroladores PIC18

112

x<y x <= y x == y x != y

Falso Falso Falso Verdadeiro

Os operadores lgicos so divididos em dois tipos. O primeiro tipo realiza operaes lgicas de comparando o estado de cada operando, se falso (igual a 0) ou verdadeiro (diferente de 0). Esses operadores permitem criar condies com expresses lgicas, envolvendo inclusive operadores relacionais. Mais exemplos de sua aplicao sero apresentados quando se tratar de comandos de deciso. Tais operadores so apresentados na tabela a seguir. Operador && || ! Operao E (AND) OU (OR) COMPLEMENTO (NOT)

O segundo tipo de operador lgico realiza operaes lgicas bit a bit em seus operandos. Os operadores pertencentes a esse segundo tipo esto na tabela a seguir. Operador & | ^ ~ >> << Operao E (AND) OU (OR) OU-EXCLUSIVO (XOR) COMPLEMENTO (NOT) Deslocamento a direita Deslocamento a esquerda

Os exemplos a seguir apresentam operaes lgicas bit-a-bit envolvendo dados de 8 bits.


char a,b,s; a = 0b11110000; b = 0b10101010;

s = a & b; s = a | b; s = a ^ b; s = ~b;

// o valor de x ser 0b10100000 // o valor de x ser 0b11110000 // o valor de x ser 0b01011010 // o valor de x ser 0b01010101

Exsto Tecnologia

XM118 Microcontroladores PIC18

113

No deslocamento informa-se quantos bits sero deslocados e as posies vagas so preenchidas com zero. No exemplo abaixo feito um deslocamento de 3 bits a direita e depois 2 bits a esquerda.
char a,b,s; a = 0b11110000;

s = a >> 3; s = a << 2;

// o valor de x ser 0b00011110 // o valor de x ser 0b11000000

Por fim, existem operadores de manipulao de memria, utilizado em aplicaes com ponteiros. Esses operadores so apresentados na tabela a seguir. Operador & * Operao Endereo do identificador Contedo do endereo apontado pelo operando

O operador & deve ser usado com ateno. Se ele for usado com apenas um operando, tem a funo de retornar o endereo de memria desse operando. Mas caso seja usado com dois operandos, sua funo a operao lgica E. Essas duas formas de aplicao so apresentadas nos exemplos abaixo.

X = &Y;

// X recebe o endereo de Y

X = Y & 0x0F

// X recebe o resultado da operao E // bit-a-bit de Y com 0x0F.

4.4.1.4

Precedncia de operadores Numa expresso com vrios operadores as operaes sero efetuadas seguindo uma ordem

predefinida relacionada com tipo de operados. O programados pode alterar essa ordem conforme a sua vontade utilizando parnteses, que funcionaram como em uma operao matemtica. A seguir a ordem de precedncia dos operadores.

Exsto Tecnologia

XM118 Microcontroladores PIC18

114

Ordem de execuo

Operador ()[] ! ~ ++ -- * &(endereo) * / % + << >> <<= >>= == != & (operao E) ^ | && || ? = += -= *= /=

// da na mesma fazer TRISB = 0b00110101; // ou DDRB = 0b00110101; // ou TRISBbits.TRISB0 = 1; TRISBbits.TRISB1 = 0; TRISBbits.TRISB2 = 1; TRISBbits.TRISB3 = 0; TRISBbits.TRISB4 = 1; TRISBbits.TRISB5 = 1; TRISBbits.TRISB6 = 0; TRISBbits.TRISB7 = 0; // ou ainda DDRBbits.RB0 = 1; DDRBbits.RB1 = 0; DDRBbits.RB2 = 1; DDRBbits.RB3 = 0; DDRBbits.RB4 = 1; DDRBbits.RB5 = 1; DDRBbits.RB6 = 0; DDRBbits.RB7 = 0;

// 1 = Entrada // 0 = Sada

Para acesso aos portais existem dois registros, LATx e PORTx, conforme discutido em 1.9. O acesso a esse registros pode ser feito conforme apresentado no exemplo a seguir.
LATA = 0x00; x = PORTB; PORTBbits.RB0 = 1; LATBbits.LATB1 = PORTAbits.RA5;

Exsto Tecnologia

XM118 Microcontroladores PIC18

115

Para tornar o cdigo mais compreensvel e facilitar alteraes na configurao de hardware podemos usar a diretiva #define para atribuir nomes aos pinos dos portais, conforme apresentado a seguir.
// Esse programa acende o LED se a chaves estiver pressionada #include<P18F4550.h> #define LED0 PORTDbits.RD0 #define Chave PORTBbits.RB1 void main (void) { DDRDbits.RD0 = 0; // sada para o LED for(;;){ if (!Chave)LED = 1; else LED = 0; } }

4.4.2

Deciso As estruturas de deciso permitem ao programa tomar decises baseadas na avaliao de

uma condio. avaliado se essa condio verdadeira ou falsa. Em C temos as seguintes estruturas de deciso.

4.4.2.1

If A estrutura if (se) executa um bloco de comandos se a condio for verdadeira. Caso

contrrio segue a execuo do programa. Seu aspecto geral apresentado abaixo, assim como um exemplo de utilizao.
if (<condio>){ <Bloco verdadeiro> } Exemplo: if(x > 5){ printf("\n x maior que 5"); }

Uma condio considerada falsa se igual a 0. Caso contrrio considerada verdadeira. Isso se aplica no s ao resultado de operadores relacionais como tambm na avaliao de variveis e bits, conforme mostrado a seguir.
Exsto Tecnologia

XM118 Microcontroladores PIC18

116

if (TMR0){ // verdadeiro se TMR0 diferente de 0 printf(TMR0 diferente de 0) } if(!PORTBbits.RB0){ LigaMotor(); } if(PIR1bits.TMR1IF){ RTITimer1(); } //verdadeiro se RB0 for 0 (note o !)

// chama a funo se TMR1IF for 1

4.4.2.2

If-else A estrutura if-else (se-seno) executa um bloco de comandos se a condio for verdadeira ou

outro bloco de comando se a condio for falsa. Temos a seguir forma geral dessa estrutura e um exemplo de utilzao.
if (<condio>){ <Bloco verdadeiro> } else{ <Bloco falso> } Exemplo: if(x > 5){ printf("\n x maior que 5"); } else{ printf("\n x menor que 5"); }

4.4.2.3

Operador ternrio condicional Para situaes onde uma deciso implica no valor a ser atribudo a uma varivel existe uma

forma alternativa de se realiza a estrutura se-seno. Isso feito atravs do operador ternrio condicional. Sua sintaxe :
Varivel = Condio ? Expresso1 : Expresso2;

Sendo Condio uma expresso cujo resultado vai ser avaliado em verdadeiro ou falso e Expresso1 e Expresso2 expresses quaisquer cujo valor pode ser atribudo varivel. Se Condio for verdadeiro, Varivel recebe o resultado de Expresso1; seno, Varivel recebe o resultado de Expresso2. A seguir o uso do operador ternrio condicional exemplificado.
Exsto Tecnologia

XM118 Microcontroladores PIC18

117

x = (y >= 10) ? y * 2 : y * 3; equivale a if( y >= 10) x = y * 2; else x = y * 3; PORTDbits.RD0 = (valor <= 128) ? 1 : 0; equivale a if( valor <= 128) PORTDbits.RD0 = 1; else PORTDbits.RD0 = 1;

4.4.2.4

Switch O comando switch permite a implementao de uma estrutura caso. A seguir temos a forma

genrica desse comando.


switch(<varivel>){ case <valor1>: <comandos> break; case <valor1>: <comandos> break; case <valor1>: <comandos> break; default: <comandos> break; }

O que o comando switch faz comparar <varivel> com os valores que ela pode assumir (valor1, valor2, etc). Caso a varivel possua um desses valores o bloco associado ao valor executado. O ltimo bloco, chamado default, opcional e s executado se <varivel> no igual a nenhum dos valores. A seguir, como exemplo, temos uma aplicao tpica do comando switch..
switch(x){ case 1: printf("\n break; case 2: printf("\n break; case 3: printf("\n break; default: printf("\n break; }

x igual a 1");

x igual a 2");

x igual a 3");

x diferente de 3, 2 e 1");

Exsto Tecnologia

XM118 Microcontroladores PIC18

118

4.4.3

Repetio Em C existem trs comandos que implementam estruturas de repetio: Do-While While For

4.4.3.1

Do-While Esse comando implementa uma estrutura Faa-Enquanto. Sua funo executar um blocos de

instrues enquanto uma condio for satisfeita. Sua principal caracterstica que o bloco executado antes do teste ser realizado. Ou seja, o bloco executado pelo menos uma vez, independente da condio ser verdadeira ou falsa. Esse funcionamento particularmente til quando a condio a ser testada afetada pelo bloco. A seguir temos sua forma padro e um exemplo de utilizao.
do{ <bloco de instrues> }while(<condio>); Exemplo: // fica imprimindo a mensagem enquanto n < 5; do{ printf("\n Bloco do do-while!!"); }while(n < 5);

4.4.3.2

While Da mesma forma de Do-While, o comando While repete um bloco enquanto uma

determinada condio verdadeira. A principal diferena entre os dois comandos que com While o teste feito antes de se executar o bloco. Em outras palavras, o bloco s vai ser executado se em algum momento a condio for satisfeita.

while(<condio>){ <bloco de instrues> } Exemplo: // fica imprimindo a mensagem enquanto n diferente de x while(n != n){ printf("\n Bloco do While!!"); }

Exsto Tecnologia

XM118 Microcontroladores PIC18

119

4.4.3.3

For O comando For utilizado para repetir um bloco por um nmero pr-determinado de vezes.

Sua estrutura bsica apresentada a seguir.


for(<Contador> = <ValorInicial>; <Condio>; <Passo>){ <Bloco> }

Obrigatoriamente deve existir uma varivel contadora (<contador>). Essa varivel carregada com um valor inicial quando a estrutura for comea a ser executada. A cada repetio do bloco de instrues dado um passo em <contador>, isto , seu valor alterado de alguma maneira. Tipicamente o passo um incremento ou um decremento. O bloco de instrues repetido enquanto a condio que relaciona <contador> com um valor final satisfeita. No exemplo a seguir for usado para apresentar valores de uma multiplicao. A repetio foi implementada com um passo de decremento, o que quer dizer que subtrado 1 do contador (cujo valor inicial 10) at que a condio (contador > 0) no seja mais satisfeita.
for(i = 10; i > 0; i-- ){ n = 5*i; printf("\n 5 vezes %d igual a %d",i,z); }

4.4.3.4

Comando Break Quando executado dentro de um lao de repetio, o comando break causa a imediata

interrupo, fazendo o programa saltar para fora do lao.

4.5 Funes
A linguagem C permite a criao de funes (equivalentes a sub-rotinas em Assembly). Alm disso, vrias funes j prontas so fornecidas com o compilador C18, sejam funes definidas pelo padro ANSI sejam funes para uso especfico no PIC18. Uma funo um trecho de cdigo que deve executar uma funo especfica e bem definida. Seu objetivo permitir que um programa seja modular, isto , composto de blocos cujas responsabilidades dentro do programa so bem claras. Modularidade um princpio da programao estruturada e C uma linguagem estruturada por natureza. Funes bem construdas facilitam a depurao, manuteno e entendimento do cdigo. E ainda, podem ser transportadas para outros programas onde se faam necessrias.
Exsto Tecnologia

XM118 Microcontroladores PIC18

120

Uma coleo de funes correlacionadas normalmente agrupada em uma biblioteca. Por exemplo, a biblioteca math.h uma biblioteca de funes matemticas avanadas. Na pasta c:\MCC18\doc existe um arquivo hlpC18UG. Nele so apresentadas a sintaxe (a forma como as funes devem ser chamadas) tanto das bibliotecas padronizadas pela ANSI como as bibliotecas especficas do C18. 4.5.1 Passagem de parmetros Assim como uma funo matemtica (da seu nome) uma funo em linguagem C tem

operadores, chamados de parmetros. H parmetros de entrada (que passam informaes para a funo), tambm chamados de argumentos, e parmetros de sada (trazem informao gerada na execuo da funo). Assim como para variveis e constantes, necessrio informar o tipo de dado dos parmetros, sendo vlidas as mesmas convenes usadas para declarao de variveis. H casos onde no h parmetros de entrada e/ou de sada. Nesse caso eles so definidos como sendo do tipo void. A seguir temos a sintaxe geral da definio de uma funo.
<tipo> nome_da_funcao(<tipo1> <arg1>, <tipo2> <arg2>, ... ) { /* geralmente aqui temos uma declarao de variveis */ /* os comando da funo vem em seguida return(<var>); /* retorno o parmetro de sada } */ */

Para exemplificar, suponhamos que se deseja construir uma funo que some o valor de dois inteiros e retorne o resultado dessa soma, tambm em formato inteiro. Essa funo poderia ser desenvolvida da seguinte maneira:
int SomaDoisNumeros(int x, int y) // Funo que soma dois nmeros // Entrada: x e y contendo os valores // Sada: a soma de x e y { int z; // Declarao de variveis z = x + y; return(z); } // comandos da funo // retorna o resultado

O nome da funo SomaDoisNumeros e obedece as mesmas regras para nomes de variveis. Seu parmetro de sada do tipo int. Dize-se que SomaDoisNumeros retorna um inteiro. Seus argumentos so dois dados do tipo inteiro. Quaisquer dois dados do tipo dos argumentos
Exsto Tecnologia

XM118 Microcontroladores PIC18

121

podem ser passados para a funo, sejam eles constantes, variveis ou valores imediatos. Esse valores so copiados para as variveis internas x e y. As variveis declaradas em uma funo, assim como seus argumentos s existem dentro da funo. Isso significa que podemos ter outras variveis chamadas x em outras funes e estas so tem qualquer relao com a varivel x que existe em SomaDoisNumeros. O exemplo a seguir ilustra como a funo pode ser chamada na funo principal.
void main(void) { int x,z; z = 5; x = SomaDoisNumeros(8,z); }

Em C a posio onde a funo se encontra no cdigo fonte importante. Uma funo (incluindo a funo main) s pode chamar outra que esteja escrita acima (antes) de si mesma. Isso pode ser feito organizando a ordem em que as funes aparecem no cdigo ou atravs da definio do prottipo de todas as funes no incio do arquivo. Por exemplo, o prottipo da funo SomaDoisNumeros :
int SomaDoisNumeros(int x, int y);

Funes no enxergam variveis declaradas fora de si mesma (com exceo de variveis globais) assim como no possvel enxergar as variveis de fora de uma funo. Em outras palavras, a chamada de uma funo no pode alterar o valor de variveis passadas como argumentos. O mtodo para realizar isso , que tambm pode ser usado para funes que retornam vetores ou mais de um parmetro, chamado de passagem de parmetro por referncia e feito com o uso de ponteiros. Por exemplo, admitindo a necessidade de construir uma funo capaz de somar 5 a trs variveis, pode-se escrever o seguinte funo:
void Soma5em3Variaveis(int *ptrA, int *ptrB, int *ptrC) // Funo que soma 5 aos argumentos // Entrada: os endereos de trs variveis do tipo int // Sada: as variveis referenciadas { *ptrA = *ptrA + 5; *ptrB = *ptrB +5; *ptrC = *ptrC +5; }

Exsto Tecnologia

XM118 Microcontroladores PIC18

122

Os argumentos da funo so na verdade os endereos das variveis. A funo manipula o contedo das variveis apontadas por esses endereos, portanto toda alterao feita dentro da funo feita com variveis que foram declaradas fora da funo. O mesmo processo pode ser usado para argumentos que sejam string ou vetor. Usando o nome da string ou do vetor como argumento, o ponteiro associado ao primeiro elemento. O exemplo abaixo mostra como poderia ser usada uma funo que imprime os valores contidos em uma string.
void ImprimeString(char *ptrA) { while(*ptrA != \0){ // repete at o fim da string printf(\n %c, *ptrA); ptrA++; // incrementa o endereo } } void main (void) { const char Seq[] = Exsto Tecnologia; ImprimeString(Seq); }

4.6 Interrupes
Muitas vezes um projeto exige que providncias sejam tomadas imediatamente no momento em que um determinado evento ocorre, porm no se pode ficar o tempo todo verificando as entradas associadas a esse evento. Por exemplo, supondo que um sistema que deve fazer vrias medidas continuamente e mostrar uma medida selecionada em um display. Essa medida selecionada pelo pressionamento de um boto. Vamos admitir que o processo de fazer todas as medidas e mostr-las no display demore um determinado tempo, alguns segundos. Ento s poderemos verificar o estado do boto rapidamente a intervalos de alguns segundos. Se o boto no estiver pressionado no exato momento da leitura o microcontrolador no tomar conhecimento desse fato. O ideal que o microcontrolador pudesse fazer as medidas o tempo todo e somente no momento em que o boto fosse pressionado ele executaria a rotina relacionada a esse evento, voltando depois s medidas. Uma interrupo faz exatamente isso: interrompe a execuo normal do programa para executar tarefas de maior prioridade no momento. Ela pode ser chamada por determinados eventos, parando a execuo normal no momento em que ocorre o evento, executando o cdigo armazenado em uma posio de memria vinculada a interrupo e depois retornam a execuo normal do

Exsto Tecnologia

XM118 Microcontroladores PIC18

123

programa. hardware.

As interrupes podem ser consideradas chamadas de sub-rotinas realizadas pelo

Quando ocorre um pedido de interrupo para a CPU, o programa desviado para um endereo pr-estabelecido, o vetor de reset. No PIC18 existem dois vetores de reset, conforme ser tratado mais adiante. Desse endereo em diante feito o chamado tratamento de interrupo, isto , so executadas as rotinas que se deseja associar ao evento causador da interrupo.

O PIC18F4550 possui 20 fontes de interrupes. A cada interrupo so associados trs bits: Bit de habilitao: Indica se a interrupo est ativa (0 = interrupo desativada, 1 = interrupo ativa); Bit de flag: indica se ocorreu o evento associado interrupo (0 = no ocorreu, 1 = ocorreu); Bit de prioridade: indica a prioriade da interrupo (0 = baixa prioridade, 1 = alta prioridade). Existem vrios eventos causadores de interrupo, como por exemplo uma transicao em algus pinos, o estouro de um timer, a recepcao de um dado pela porta serial, etc. a ocorrncia de um evento destes faz com que um bit de flag va para 1, caso contrrio ele permanecer em 0. Contudo, para que haja um pedido de interrupo para a CPU necessrio que a interrupo associada a esse evento esteja ativa, isto , seu bit de habilitao seja 1. Em outras palavras, possvel ativar quais interrupes se queira e manter as demais inativas. Existem dois nveis de prioridade de interrupes, alto e baixo. Uma interrupo de baixa prioridade interrompe a execuo do programa e causa o desvio para o vetor de interrupo de baixa prioridade. J a interrupo de alta prioridade interrompe no s a execuo normal do programa como tambm interrompe a rotina de tratamento de interrupo de baixa prioridade (se estiver sendo executada). Cada fonte de interrupo pode ser configurada para atuar com baixa ou alta prioridade, sendo que para isso basta definir se o bit de prioridade 0 (baixa) ou 1 (alta). O vetor de interrupo de alta prioridade o 0008h enquanto o vetor de interrupo de baixa prioridade o 0018h. Para habilitar o sistema de prioridade de interrupo o bit IPEN deve estar em 1. Caso contrrio (IPEN = 0) o sistema comporta-se como se no houvesse prioridade, como nos PIC16. Neste caso, todos as interrupes convergem para o endereo 0008h. Estando habilitada a prioridade existem duas habilitaes globais, uma para prioridade alta (GIEH) e outra para baixa (GIEL). Caso contrrio, existe uma habilitao global (GIE) e uma habilitao de perifricos (PEIE). A interrupo INT0 no tem ajuste de prioridade, ela sempre de prioridade alta.
Exsto Tecnologia

XM118 Microcontroladores PIC18

124

A figura 1.8 apresenta o diagrama interno de interrupes.

Figura 1.8 - Diagrama de interrupes do PIC18F

Dois fatos importantes sobre os bits de flag devem ser enfatizados. O bit de flag vai para 1 quando ocorre o evento mesmo que a interrupo associada a ele no esteja habilitada. Alm disso o hardware fora o bit de flag para 1 mas o mesmo deve ser zerado pelo software para indicar que a interrupo em questo foi tratada. As interrupes externas, isto , que so causadas diretamente por eventos externos ao externas, microcontrolador, so a interrupo INT0 (pino RB0), INT1 (pino RB1), INT2 (pino RB2) e a interrupo por mudana de estado do portal B. As demais interrupes so internas, causadas pelos perifricos para indicar determinados eventos (chegada de dado pelo portal serial, "estouro" de erifricos timer, etc). Quando ocorre uma interrupo o fluxo do programa desvia para um vetor de reset (conforme a prioridade da interrupo). Conseqentemente, a rotina de tratamento de interrupo

Exsto Tecnologia

XM118 Microcontroladores PIC18

125

deve obrigatoriamente comear nesse endereo. Para determinar qual interrupo ocorreu testa-se os bits de flags de todas as interrupes ativas com a mesma prioridade. Pode acontecer de uma rotina de tratamento de interrupo fazer uso de uma varivel ou registro de funo especial tambm usada no programa principal. Neste caso, a execuo da rotina de tratamento de interrupo iria corromper o valor desta varivel, causando um erro intermitente e difcil de detectar. Para entender esse problema basta pensar que se em determinado ponto do programa movemos o valor 10 para a varivel X e ocorre uma interrupo neste exato momento, o valor de W ser alterado na RTI e o valor que finalmente aparecer em X no ser 10. Ao contrrio de alguns microcontroladores, quando ocorre uma interrupo nenhum registro automaticamente salvo. Assim importante salvar os registros W e STATUS antes que seja realizado qualquer tratamento de interrupo, bem como qualquer outro SFR que for usado dentro e fora das rotinas de interrupo. Esse processo chamado salvamento de contexto. Tambm recomendvel que o registro STATUS seja zerado. necessrio ento que existam variveis criadas para salvar esses registros. Outra prtica recomendada de nunca usar dentro de uma rotina de tratamento de interrupo registros que so utilizados em outras partes do programa. Um outro cuidado que deve ser tomado quando se trabalha com interrupes no executar rotinas muito grandes. Isso porque o tratamento de interrupo deve tomar medidas emergenciais. Nada que no seja estritamente necessrio deve ser trabalhado na interrupo, e isso principalmente porque podem ocorrer vrias interrupes em seguida, e s se pode tratar uma por vez. Quando uma interrupo chamada, a habilitao das demais fica desativada, e s reativada aps a execuo do RETFIE. Se outra interrupo ocorrer nesse intervalo de tempo, ela tratada aps RETFIE. Deve-se notar que o que ativa a chamada de interrupo a existncia de um flag de uma interrupo habilitada setado. Assim, depois de tratar uma determinada interrupo deve-se zerar o flag associado a ela. Caso contrrio, o programa fica travado, pois cada vez que h o retorno de interrupo, a interrupo chamada novamente. Finalmente, necessrio considerar que na realidade o tratamento de interrupo no ocorre no exato momento em que a interrupo acontece. Primeiramente, a checagem dos eventos que causam a interrupo obedece a uma varredura interna. E depois de detectado o evento, algumas aes devem ser realizadas, como o desvio para o vetor de reset, por exemplo. Assim, aps a real ocorrncia de uma interrupo ela s vai comear a ser tratada 3 ciclos de mquina aps sua ocorrncia, se for uma interrupo interna, e de 3 a 4 ciclos de mquina se for uma interrupo externa. Esses tempos devem ser considerados em aplicaes onde a preciso de tempo

importante.

Exsto Tecnologia

XM118 Microcontroladores PIC18

126

4.6.1

Utilizao das Interrupes Para trabalhar com uma interrupo deve-se primeiramente configurar o perifrico

associado a ela, o que feito normalmente uma nica vez, na inicializao programa. Nada impede, porm que um perifrico seja configurado, ou re-configurado, em qualquer ponto programa. O prximo passo habilitar as interrupes a serem utilizadas, e isso pode ser feito em dois momentos. Pode-se determinar que uma interrupo esteja ativa durante toda a execuo do programa, e nesse caso sua habilitao deve ser feita na inicializao. Por outro lado, em algumas situaes deseja-se que a interrupo seja ativada somente a partir de um dado momento ou ainda que seja ativada e posteriormente desativada. Nessa situao basta habilitar, ou desabilitar, a interrupo no momento oportuno. importante lembrar que as interrupes habilitadas somente causam chamadas de interrupo se o bit de habilitao global (GIEH e GIEL quando a prioridade estiver ativa, GIE caso contrrio) estiver habilitado. Finalmente, deve-se fazer o tratamento de interrupo, isto , construir as rotinas que sero chamadas quando ocorrer uma determinada interrupo. Essas rotinas devero seguir as recomendaes dadas acima e deve-se salvar os registros de interesse. As rotinas de tratamento de interrupo sero apresentadas no item da unidade de software que trata de interrupes. Os registros que controlam o sistema de interrupo so apresentados a seguir.

R/W 0 GIE/GIEH Bit 7

R/W 0 PEIE/GIEL

R/W 0 TMR0IE

R/W 0 INT0IE

R/W 0 RBIE

R/W 0 TMR0IF

R/W 0 INT0IF

R/W 0 RBIF Bit 0

INTCON GIE/GIEH : Habilitao Global o Se IPEN = 0 1 = Habilita as interrupes 0 = Desabilita as interrupes o Se IPEN = 1 1 = Habilita as interrupes de alta prioridade 0 = Desabilita interrupes de alta prioridade PEIE: Habilitao de interrupes de perifricos o Se IPEN = 0 1 = Habilita as interrupes de perifricos 0 = Desabilita as interrupes de perifricos o Se IPEN = 1
Exsto Tecnologia

XM118 Microcontroladores PIC18

127

1 = Habilita as interrupes de baixa prioridade 0 = Desabilita interrupes de baixa prioridade TMR0IE: Habilitao de interrupo do Timer 0 o o 1 = interrupo habilitada 0 = interrupo desabilitada

INT0IE: Habilitao de interrupo Externa 0 (RB0) o o 1 = interrupo habilitada 0 = interrupo desabilitada

RBIE: Habilitao de interrupo por mudana de estado no PORTB o o 1 = interrupo habilitada 0 = interrupo desabilitada

TMR0IF: Flag da interrupo do Timer 0 o o 1 = Houve overflow do timer 0 0 = No houve overflow do timer 0

INT0IF: Flag da interrupo Externa 0 (RB0) o o 1 = Houve transio no pino RB0 0 = No houve transio no pino RB0

RBIF: Flag da interrupo por mudana de estado no PORTB o o


R/W 0 RBPU Bit 7

1 = houve alterao em um dos bits de RB7:RB4 0 = no houve alterao em um dos bits de RB7:RB4
R/W 0 INTEDG1 R/W 0 INTEDG2 U0 R/W 0 TMR0IP U0 R/W 0 RBIP Bit 0

R/W 0 INTEDG0

INTCON2 RBPU : Habilitao dos Pull-ups de PORTB o o 1 = desabilita Pull-ups 0 = Habilita Pull-ups

INTEDG0: Seleo da transio da interrupo INT0 o o 1 = Transio de subida 0 = Transio de descida

INTEDG1: Seleo da transio da interrupo INT1 o o 1 = Transio de subida 0 = Transio de descida

INTEDG2: Seleo da transio da interrupo INT2 o o 1 = Transio de subida 0 = Transio de descida


Exsto Tecnologia

XM118 Microcontroladores PIC18

128

TMR0IP: Prioridade da Interrupo do Timer 0 o o 1 = Alta prioridade 0 = Baixa prioridade

RBIP: Prioridade da Interrupo de PORTB o o 1 = Alta prioridade 0 = Baixa prioridade

R/W 0 INT2IP Bit 7

R/W 0 INT1IP

U0 -

R/W 0 INT2IE

R/W 0 INT1IE

U0 -

R/W 0 INT2IF

R/W 0 INT1IF Bit 0

INTCON3 INT2IP: Prioridade da Interrupo INT2 o o 1 = Alta prioridade 0 = Baixa prioridade

INT1IP: Prioridade da Interrupo INT1 o o 1 = Alta prioridade 0 = Baixa prioridade

INT2IE: Habilitao de interrupo Externa 2 (RB2) o o 1 = interrupo habilitada 0 = interrupo desabilitada

INT1IE: Habilitao de interrupo Externa 1 (RB1) o o 1 = interrupo habilitada 0 = interrupo desabilitada

INT2IF: Flag da interrupo Externa 2 (RB2) o o 1 = Houve transio no pino RB2 0 = No houve transio no pino RB2

INT1IF: Flag da interrupo Externa 1 (RB1) o o 1 = Houve transio no pino RB1 0 = No houve transio no pino RB1

As demais interrupes tem seus bits de flag, habilitao prioridade distribudos nos registros PIRx, PIEx e IPRx, respectivamente, como mostrado na tabela 1.4.

Exsto Tecnologia

XM118 Microcontroladores PIC18

129

Evento de Interrupo

Flag
1 = ocorreu 0 = no ocorreu

Habilitao
1 = Habilitada 0 = Desabilitada

Prioridade
1 = Alta 0 = Baixa

INTCON INTCON INT0IF INT0IE TMR0IF TMR0IE RBIF RBIE INTCON3 INTCON3 Interrupo externa INT1 INT1IF INT1IE Interrupo externa INT2 INT2IF INT2IE PIR1 PIE1 Leitura ou escrita da porta paralela escrava PSPIF PSPIE Converso do AD completa ADIF ADIE Recepo serial USART RCIF RCIE Transmisso serial TXIF TXIE Transmisso/recepo completa pelo MSSP SSPIF SSPIE Interrupo do mdulo CCP1 CCP1IF CCP1IE Estouro do timer 2 TMR2IF TMR2IE Estouro do timer 1 TMR1IF TMR1IE PIR2 PIE2 Falha no oscilador OSCFIF OSCFIE Alterao no estado do comparador CMIF CMIE Trmino de escrita na EEPROM EEIF EEIE Coliso no barramento SPI BCLIF BCLIE Deteco de baixa/alta tenso HLVDIF HLVDIE Estouro do timer 3 TMR3IF TMR3IE Interrupo do mdulo CCP2 CCP2IF CCP2IE Tabela 1.4 - Controle das interrupes Interrupo externa INT0 Estouro do timer 0 Mudana de estado na porta B 4.6.2

INTCON2 Sempre alta TMR0IP RBIP INTCON3 INT1IP INT2IP IPR1 PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP IPR2 OSCFIP CMIP EEIP BCLIP HLVDIP TMR3IP CCP2IP

Interrupes no C18 O compilador C18 permite o trabalho com interrupes atravs da diretiva #pragma (outras

diretivas sero tratadas no tpico 2.8 - Diretivas). Atravs dessa diretiva possvel informar ao compilador que uma determinada funo uma RTI (Rotina de Tratamento de Interrupo) e associ-la a interrupo de alta ou baixa prioridade. Uma rotina de tratamento de interrupo no pode ter argumentos nem retornar valores. Para realizar a troca de valores entre as RTI e o programa principal (ou mesmo entre as RTIs de alta e baixa prioridade) deve-se declarar uma varivel global com o qualificador volatile. A diretiva #pragma s informa qual funo uma RTI. O processo de identificar da interrupo e zerar o flag relativo a cada uma deve ser implementado por cdigo Exemplo abaixo apresenta a forma como a diretiva deve ser usada.
#include<P18F4550.h> #include<timers.h> Exsto Tecnologia

XM118 Microcontroladores PIC18

130

// *** Prottipos void RTITimer1(void); void RTITimer0(void); // *** Configurao das RTI #pragma code low_vector=0x18 void interrupt_at_low_vector(void) { _asm GOTO RTITimer0 _endasm } #pragma code #pragma code high_vector=0x08 void interrupt_at_high_vector(void) { _asm GOTO RTITimer1 _endasm } #pragma code #pragma interruptlow RTITimer0 #pragma interrupt RTITimer1 // *** Funes void RTITimer0 (void) { INTCONbits.TMR0IF = 0; LATB = LATB^0x01; // inverte o bit 0 } void RTITimer1 (void) { PIR1bits.TMR1IF = 0; LATB = LATB^0x02; }

// inverte o bit 1

void main (void) { TRISB = 0; PORTB = 0; // Configura os timers OpenTimer0 (TIMER_INT_ON & OpenTimer1 (TIMER_INT_ON & //Configura a interrupo RCONbits.IPEN = 1; INTCON2bits.TMR0IP = 0; // IPR1bits.TMR1IP = 1; // INTCONbits.GIEH = 1; // INTCONbits.GIEL = 1; // while (1); }

T0_SOURCE_INT & T0_16BIT); T1_SOURCE_INT); // habilita prioridade interrupo do timer 0 baixa interrupo do timer 1 alta habilita interrupes de alta prioridade habilita interrupes de baixa prioridade

// fica em loop sem fazer nada

Exsto Tecnologia

XM118 Microcontroladores PIC18

131

4.7 Funes teis


A seguir so apresentadas algumas funes (padronizadas do C ou especficas do C18) que podem ser teis em diversas situaes. A tabela 2.6 apresenta algumas funes que convertem valores numricos em strings e viceversa. Essas funes esto presentes na biblioteca stdlib.h. Funes
atob atof atoi atol btoa itoa ltoa

Descrio Converte em um valor de 8 bits sinalizado Converte em um valor fracionrio Converte em um valor de 16 bits sinalizado Converte em um valor inteiro longo Converte um valor de 8 bits sinalizado em uma string Converte um valor de 16 bits sinalizado em uma string Converte um valor inteiro longo sinalizado em uma string Tabela 2.6 Funes de converso de tipo

H funes que permitem identificar o evento que ocasionou ltimo reset. Essas funes pertencem a biblioteca reset.h. Funes
isBOR isLVD isMCLR isPOR isWDTTO isWDTWU isWU StatusReset

Descrio Retorna 1 se o reset foi causado por BOR Retorna 1 se o reset foi causado por LVD Retorna 1 se o reset foi causado atravs do pino MCLR Retorna 1 quando os sistema acaba de ser ligado Retorna 1 se ocorreu estouro do WatchDog Retorna 1 se saiu do modo SLEEP por estouro do WatchDog Retorna 1 se saiu do modo SLEEP por estouro do MCLR ou interrupo. Seta os pinos POR e BOR. Isto deve ser feito aps um POR Tabela 2.7 Funes de Reset

No portal B do PIC18 existem algumas funcionalidades especiais que podem ser configuradas fazendo uso das funes apresentadas na tabela 2.8. Estas funes pertencem a biblioteca portb.h.

Exsto Tecnologia

XM118 Microcontroladores PIC18

132

Funes
ClosePORTB CloseRB1INT CloseRB2INT CloseRB3INT DisablePullups EnablePullups OpenPORTB OpenRB1INT OpenRB2INT OpenRB3INT

Descrio Desativa a interrupo por mudana de estado e resistores de pull-up do portal B. Desabilita as interrupes INT0, INT1 e INT2. Desativa os resistores de pull-up internos do portal B Ativa os resistores de pull-up internos do portal B Configura interrupes e pull-up do portal B. Habilita as interrupes INT0, INT1 e INT2. Tabela 2.7 Funes do portal B

H ainda algumas macros que podem ser usadas em C para a execuo direta de instrues do Assembly do PIC18. Essas funes esto definidas na biblioteca de cabealho de cada microcontrolador. Essas macros so apresentadas na tabela 2.8 Funes
Nop() ClrWdt() Sleep() Reset() Rlcf(var, dest, access) Rlncf(var, dest, access) Rrcf(var, dest, access) Rrncf(var, dest, access) Swapf(var, dest, access)

Ao Executa a instruo NOP Executa a instruo CLRWDT zera o timer do WatchDog Executa a instruo SLEEP Executa a instruo RESET causa o reset do microcontrolador Rotaciona var a esquerda atravs do bit C Rotaciona var a esquerda (sem passar pelo bit C) Rotaciona var a direita atravs do bit C Rotaciona var a direita (sem passar pelo bit C) Executa a instruo SWAPF Tabela 2.8 Macros

4.7.1

Operaes matemticas Um dos grandes benefcios de se usar uma linguagem de programao como C em lugar do

Assembly nativo do microcontrolador a facilidade em se realizar operaes matemticas. Alm da operaes realizadas com o uso dos operadores j apresentados, existem funes que implementam operaes mais complexas. Essas funes esto presentes na biblioteca padro math.h.

Exsto Tecnologia

XM118 Microcontroladores PIC18

133

Funes
acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp ieeetomchp ldexp log log10 mchptoieee modf pow sin sinh sqrt tan tanh

Descrio Cosseno inverso Seno inverso Tangente inversa Tangente inversa de uma razo Retorna o inteiro imediatamente superior Cosseno Cosseno hiperblico Exponencial ex Valor absoluto de um nmero fracionrio Retorna o inteiro imediatamente inferior Resto da diviso de nmeros fracionrios Decompe um fracionrio em frao e exponencial Converte um valor fracionrio no formato IEEE-754 para o formato Microchip. Multiplica um valor por 2x Calcula o logaritmo na base natural Calcula o logaritmo na base 10 Converte um valor fracionrio no formato Microchip para o formato IEEE-754. Mdulo de um fracionrio Exponencial xy Seno Seno hiperblico Raiz quadrada Tangente Tangente hiperblica Tabela 2.5 Funes da biblioteca Math.h

4.8 Tcnicas de Otimizao de Cdigo


Um dos principais aspectos da programao em alto nvel a otimizao e eficincia do cdigo gerado pelo compilador. Quando programarmos dispositivos to limitados como os microcontroladores, a otimizao pode ser fundamental para atender a requisitos de velocidade e tamanho de cdigo. Estes fatores so determinantes neste tipo de projeto, pois um software tem que ser eficiente. Por isso, vamos ver a seguir algumas dicas que permitem aumentar a velocidade de execuo do cdigo e evitar alguns problemas durante a confeco dos programas. 4.8.1 Rotinas Matemticas Devido s limitadas capacidades matemticas da ULA dos PICs, a realizao de operaes aritmticas diferentes da soma ou subtrao de oito bits pode demandar um grande tempo de execuo, alm do espao na memria de programa. Por isso, devemos evitar a realizao de operaes matemticas complexas e especialmente utilizando tipos de dados float. Quando tais operaes forem inevitveis, aqui esto algumas sugestes para acelerar a realizao de clculos matemticos com PICs:
Exsto Tecnologia

XM118 Microcontroladores PIC18

134

Evite o uso de variveis muito grandes como de 32 e 16 bits; Utilize, sempre que possvel, divises e multiplicaes inteiras e se possvel, utilizando mltiplos de potncias de dois (j que essas operaes podem ser facilmente traduzidas em rotaes a direita ou esquerda, conforme o caso);

Evite o uso de valores fracionrios; prefira o uso de valores inteiros. Assim, para valores entre 0,00 e 5,00, poderamos utilizar uma varivel de 16 bits com valores entre 0 e 500.

Contudo, alguns cuidados devem ser tomados para aumentar a eficincia do cdigo gerado e evitar problemas de difcil soluo. Em primeiro lugar, a escolha do tipo de dado das variveis deve ser bem criteriosa. O cdio mais enxuto gerado para operaes com variveis com mesmo comprimento do barramento de dados do microcontrolador, ou seja, do tipo char. Quando variveis de tamanhos diferentes so usados uma quantidade significativa de instrues necessria para implementar mesmo operaes simples como soma e subtrao. Ou seja, de uma forma mais geral, quantos mais bytes uma varivel tem, maior e mais lento o cdigo gerado para trat-la. O uso de variveis do tipo ponto flutuante deve ser evitado ao mximo. Operaes com esse tipo de dado consomem muita memria e demoram muito tempo para serem executadas. Uma boa tcnica para se evitar o uso de ponto flutuante trabalhar com dados em escala, convertendo-os para ponto flutuante somente quando realmente necessrio. Por exemplo, um programa que faz uma medida de tenso que expressa um valor entere 0,000 e 5,000 volts, compara esse valor com outros e o mostra em um display ocupa muita memria por processar dados do tipo ponto flutuante. O mesmo programa pode ocupar menos memria se a faixa de valores for de 0 a 5000, ou seja, pensar os valores todos multiplicados por 1000. Dessa maneira podem ser usados dados do tipo int. Na apresentao dos valores em um LCD basta inserir uma vrgula no local adequado. Outro cuidado a ser tomado com o tipo dos dados envolvidos em uma operao. Por exemplo, uma expresso onde dois inteiros so somados e atribudos a um caracter gerar um resultado errado. Por fim, deve-se estar atendo para que valores intermedirios de uma expresso no extrapolem a faixa de valores dos operandos da expresso. Por exemplo, o cdigo a seguir aparentemente no contm erros.

Exsto Tecnologia

XM118 Microcontroladores PIC18

135

void main(void) { int x,y,z;

/* essa funo est ERRADA! */

y = 15; z = 500; x = y * 20000 / z; }

// <== o erro est aqui

Se o clculo for feito com uma calculadora teremos como resultado 600. Porm o clculo realizado pelo microcontrolador resulta em -55! Vejamos porque isso ocorre. O compilador implementa rotinas em Assembly para realizar a operao, j que todos os operandos envolvidos so inteiros. Mas a operao feita pela ordem com que os dados aparecem na expreso. Na verdade a operao realizada em partes, com o uso de variveis internas de rascunho. O trecho abaixo ilustra o processo, sendo rasc uma varivel interna de rascunho, do tipo inteiro.
rasc = y * 20000 x = rasc / z

Ora, para y valendo 15 o valor armazenado em rasc 300.000, grande demais para ser armazenado em um inteiro. Internamente durante a execuo do clculo o valor truncado, ou seja, partes dele so desprezadas para caber em 16 bits. O valor de x calculado com base em um valor incorreto e toda a operao fica prejudicada. Problemas como esse tornam-se difceis de serem depurados por para alguns valores a operao da certo. Por exemplo, se valesse 3 o resultado em x estaria correto. Uma forma de corrigir o problema usar parnteses para indica a precedncia das operaes. Sero realizadas primeiras as operaes dentro dos parnteses mais esternos. Para o cdigo a seguir
void main(void) { int x,y,z; /* essa funo est CORRETA! */

y = 15; z = 500; x = y * (20000 / z); }

O resultado em x ser correto, pois a seqncia de clculos ser:


Exsto Tecnologia

XM118 Microcontroladores PIC18

136

rasc = 20000/z x = y * rasc

4.8.2 Usando assembly no C. Por mais eficiente que sejam uma linguagem de programao e um compilador, dificilmente eles geram um cdigo to eficiente quanto um bom programador assembly. Em aplicaes crticas, nas quais cada microssegundo conta, podemos utilizar cdigo assembly dentro do programa em C, de forma a acelerar e/ou aperfeioar a sua execuo. De maneira geral, podemos dizer que os principais alvos deste tipo de otimizao so: Rotinas de tratamento de interrupo (nos casos da ocorrncia de um elevado nmero de interrupes num curto espao de tempo), rotinas de manipulao de dados como converses

binrio/decimal/hexadecimal, dentre vrias outras. A linguagem assembly pode ser inserida no cdigo C em qualquer ponto, utilizando as diretivas _asm e _endasm. As variveis C conservam seus nomes na utilizao da linguagem assembly. 4.8.3 Uso de variveis locais e globais Quando estamos programando para microcontroladores, necessrio dentro de um programa em C, criar vrias funes que sero chamadas pelo main() de forma organizada, fazendo a execuo do programa como um todo. Conforme visto anteriormente, quase todos os valores que podem ser manipulados por uma funo definido atravs de variveis. Estas variveis podem ter inmeras formas de atribuio, contudo, aqui estamos falando especificamente das variveis locais e globais. As variveis locais so locais de memria que armazenam informaes que so manipuladas dentro de cada funo, sendo que quando a funo termina sua execuo, esta rea de memria pode ser reaproveitada pelo microcontrolador para alocao de outra varivel local. A varivel global, de outra forma, uma varivel declarada fora da funo main() que tem durao por todo o programa, inclusive dentro de todas as funes em execuo. Assim, o endereo onde esta varivel guarda o seu valor permanece em uso por todo o programa no podendo ser reaproveitada pelo microcontrolador. O ponto importante que dentro do microcontrolador, esses dois tipos de variveis ocupam reas de memria diferentes. Ainda, cada rea de memria em especifico possui um tamanho reservado, sendo que para as variveis globais esta rea bem menor que a rea destinada as variveis locais. Ento prefira usar variveis locais para ter melhor utilizao da memria.
Exsto Tecnologia

XM118 Microcontroladores PIC18

137

Outro ponto sobre variveis que devemos observar quando utilizamos variveis globais e locais com o mesmo nome. Isto causa uma confuso no compilador que podem geram problemas na execuo do programa. Por exemplo, se for criada duas variveis, uma local e outra global com o mesmo nome, o compilador vai dar preferncia para a ltima definida. Como sempre a ultima a ser definida ser a local, a varivel global ficar inacessvel e comearo a acontecer problemas quando tentar se utilizar a varivel global, pois ela ser identificada pelo sistema como local.

Exsto Tecnologia

XM118 Microcontroladores PIC18

138

5 Aplicaes
5.1 Display de 7 segmentos
Um dos modos mais comuns de apresentar informao para o usurio em um sistema eletrnico atravs de displays de LEDs. Esse tipo de display nada mais que um conjunto de LEDs numa disposio que permite formar diferentes caracteres conforme so acionados. Eles podem ser de dois tipos: anodo comum ou catodo comum e podem ser vistos na figura 5.1 (b) e (c). A figura a mostra a nomenclatura comumente utilizada para os segmentos que compe os dgitos e o ponto.

Figura 5.1 Displays de LED: (a) disposio dos segmentos, (b) catodo comum e (c) anodo comum Como pode ser observado na figura 5.1, os displays de anodo comum tem seus segmentos acionados quando aplicamos 0, ficando o anodo (comum) na alimentao. J os de catodo comum so acionado com 1 e o catodo (comum) ligado a terra. No kit Pratic 628 contamos com displays de catodo comum. Para escrevermos um determinado valor no display necessrio converter, ou decodificar, o valor originalmente em binrio para combinaes que acionem o display corretamente. Isso pode ser feito atravs de circuitos integrados feitos para esse fim, mas por motivo de economia de componentes mais interessante que essa converso seja feita por software e o acionamento seja feito diretamente pelo microcontrolador. A converso deve ser feita obedecendo a tabela 5.1. Ela corresponde a kit NEO 201 onde o display catodo comum e os pinos RD0, RD1, ..., RD6, RD7 esto ligados aos segmentos A, B, ..., G, DP (DP o ponto decimal do display.)

Exsto Tecnologia

XM118 Microcontroladores PIC18

139

Valor (hexadecimal) 0 1 2 3 4 5 6 7 8 9 A B C D E F

Catado Comum g 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 f 1 0 0 0 1 1 1 0 1 1 1 0 0 1 0 0 e 1 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 d 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 c 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 b 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 a 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 g 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 f 0 1 1 1 0 0 0 1 0 0 0 1 1 0 1 1

Anodo comum e 0 1 0 1 1 1 0 1 0 1 0 0 1 0 1 1 d 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 c 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 a 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0

Tabela 5.1 Acionamento de display de sete segmentos. Tabelas como as apresentadas so facilmente implementadas em C por vetores, uma vez que o ndice do vetor representa a coluna de valor e os valores das posies correspondem aos acionamentos do LED. Abaixo eh apresentada uma declarao de vetor de constantes que correspondem a tabela acima para catodo comum.
const char catodo[]={00111111, // 0 00000110, 01011011, 01001111, 01100110, 01101101, 01111101, 00000111, 01111111, 01100111}; //1 //2 //3 //4 //5 //6 //7 //8 //9

5.1.1

Displays multiplexados Uma tcnica utilizada para reduzir custos de hardware a de multiplexar displays. Essa tcnica

se aproveita de uma caracterstica da viso humana chamada persistncia retiniana: a retina mantm uma imagem projetada presente por algum tempo depois que essa desaparece do campo de viso. Graas as essa propriedade que podemos enxergar imagens se movendo na TV, que na verdade so seqncias de imagens paradas. Fazendo uso dessa propriedade tambm podemos acionar seqencialmente diversos displays e dar a impresso a quem olha que todos esto acesos ao mesmo tempo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

140

Basta acionar os diversos displays em seqncia de forma que todos sejam acionados a uma taxa maior que 20 vezes por segundo. O circuito para fazer isso consiste em ligar os segmentos respectivos de cada display em paralelo e acionar o terminal comum (anodo ou catodo) um por vez. Dessa maneira com 7 pinos mais um pino por display eh possvel assinar diversos a dispalays. 5.1.2 Apresentando valores em display Como vimos, um display pode apresentar valores de 0 a 9 (ou at F se quisermos apresentar

valores em hexadecimal) e vrios displays podem ser usados conjuntamente usando a tcnicas da multiplexacao. Porem, como apresentar valores com 123 ou 5000? Para isso e necessrio decompor uma varivel em unidades, dezenas, centenas, etc... e apresentar individualmente cada parte em um digito. Os trechos de cdigo abaixo decompem variveis do tipo char e int (no sinalizados) para apresentao em displays. A partir delas possvel desenvolver rotinas para outros tipos de dados.
// *** Decomposio de unsigned char //unid, dez, cent so caracteres no sinalizado cent = valor / 100; valor = valor dez = valor % 100; / 10;

unid = valor % 10;

// *** Decomposio de unsigned int //unid, dez, cent, mil e dezmil so caracteres no sinalizado dezmil = valor / 10000; valor = valor % 10000;

mil = valor / 1000; valor = valor % 1000;

cent = valor / 100; valor = valor dez = valor % 100; / 10;

unid = valor % 10;

Exsto Tecnologia

XM118 Microcontroladores PIC18

141

5.2 Buzzer
O buzzer (buzina) nada mais que um tipo de alto-falante simples, dimensionado para ter uma melhor resposta em um faixa de freqncia especfica. Atravs deles conseguimos gerar apitos (beeps) para sinalizaes de diversos tipos. Existem buzzers que so auto oscilantes, aos quais basta aplicar uma tenso de alimentao que geram um tom. Outros precisam que se envie um sinal chaveado para produzir seu som.

5.3 Teclado Matricial


Uma forma muito comum de usurio de um sistema microcontrolado passar informaes ao sistema atravs de teclas. Em muitas aplicaes o nmero teclas existentes pode ser bastante grande. Nesses casos, a leitura dessas teclas simplesmente conectando-as aos terminais do microcontrolador incorre na utilizao de muitos terminais. Nessa aplicao apresentado um sistema de varredura que permite fazer um uso otimizado dos terminais do microcontrolador de foram a reduzir o nmero de terminais utilizados. Esse processo permite realizar a leitura de um nmero de teclas N utilizando menos de N entradas. Isso importante quando existe uma grande quantidade de teclas a serem lidas e no se dispe tanta entrada. Para o caso da placa de teclado existem 16 teclas e seus estados so lidos com apenas 4 sadas e 4 entrada, num total de 8 terminais. A varredura funciona da seguinte maneira: o teclado organizado de forma a ter 4 colunas e 4 linhas, conforme a figura abaixo. Cada linha ligada a uma entrada, e cada coluna a uma sada. Existem resistores de pull-up nas entradas de forma que enquanto uma tecla no for pressionada, a entrada ficando em aberto tem nvel lgico alto. Comeando a varredura, forado 0 na coluna 0 (C0), 1 nas coluna 1 (C1), 2 (C2) e 3 (C3) e so lidas as quatro linhas (L0, L1, L2 e L3). Em seguida coloca-se 1 em C0 e C2 e 0 em C1 e lem-se as linhas, e assim sucessivamente.. Nos momentos em que feita a leitura das linhas podemos determinar se uma tecla est pressionada e qual essa tecla da seguinte maneira: admitindo que a tecla est ligada a coluna que est em zero no momento a linha ligada a ela estar em tambm. As linhas que contm teclas que no esto pressionadas estaro em 1, devido aos resistores de pullup. Seguindo esse raciocnio podemos gerar a seguinte tabela:

Exsto Tecnologia

XM118 Microcontroladores PIC18

142

C3 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0

C2 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1

C1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

C0 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1

L3 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0

L2 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1

L1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1

L0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

Tecla 1 2 3 A 4 5 6 B 7 8 9 C */F 0 #/E D

O circuito do teclado apresentado na figura abaixo.

Figura 3.4 - Esquema Simplificado do Teclado

No programa que utilizar leitura de teclado deve-se ativar os resistores de pull-up do portal B. Caso contrrio, o teclado no funcionar corretamente. No Neo201 os teclado est ligado ao PIC seguindo a tabela baixo:

Exsto Tecnologia

XM118 Microcontroladores PIC18

143

Teclado C3 C2 C1 C0 L0 L1 L2 L3

PIC PORTB,0 PORTB,1 PORTB,2 PORTB,3 PORTB,4 PORTB,5 PORTB,6 PORTB,7

I/O Sada Sada Sada Sada Entrada Entrada Entrada Entrada

O fluxograma abaixo apresenta o processo de leitura para a primeira linha da funo de leitura de teclado. A partir dela pode-se desenvolver a funo como um todo.

LE_TECLADO

C0 <- Falso C1<-Verdadeiro C2 <- Verdadeiro

L0 = Falso?

N N
L1 = Falso?

S
W <- ' 1'

S
W <- '4'

N
L2 = Falso?

S
W <- '7'

N
L3 = Falso?

S
W <- ' * '

5.3.1

Interrupo por mudana de estado na porta B Como muito comum a utilizao de teclados por varredura, os microcontroladores PIC j tem

uma funcionalidade pensada para permitir associar uma interrupo ao teclado. Essa funcionalidade a interrupo por mudana de estado na porta B. O evento que sinaliza essa interrupo eh a mudana do estado dos pinos RB7, RB6, RB5 ou RB4. Observe que esses pinos esto ligados a linhas do teclado, portanto so entradas. Assim, qualquer tecla pressionada causar o pedido de
Exsto Tecnologia

XM118 Microcontroladores PIC18

144

interrupo. Ao se fazer o tratamento da interrupo faz-se a varredura para determinar qual a tecla lida. Mas ateno, para que esse procedimento funcione as colunas devem ser mantidas sempre em 0 quando fora do tratamento de interrupo.

5.4 Display de cristal lquido


Para que informaes do sistema sejam passadas ao usurio pode-se utilizar uma serie de recursos, porm muitos deles no so nada maleveis e alguns pouco amigveis. Por exemplo, um modo bastante simples de se ter informaes do sistema atravs de um painel com LEDs, cada um indicando uma determinada situao. Embora em muitas aplicaes s isso seja suficiente, em muitas outras, principalmente quando a quantidade e variedade de informaes so grande, esse mtodo se torna insuficiente. Outro mtodo tambm muito utilizado e que, porm, aceita uma grande variedade e quantidade de informaes o Display de Cristal Lquido (LCD Liquid Cristal Display). Existe uma grande variedade de LCDs no mercado. Existem displays grficos e displays que aceitam somente caracteres, esses ltimos chamados displays alfanumricos. Esses podem ter diferentes quantidades de linha e colunas. LCDs alfanumricos tem uma determinada inteligncia, isto , possuem circuitos que controlam o display propriamente dito, e fazer com que algo seja escrito no LCD somente o trabalho de comunica-se com esses circuitos. Para a comunicao com o display so necessrios 8 bits como via de dados (podendo tambm ser configurado para trabalhar com 4 bits), um bit EN (Enable - Habilitao) e um bit RS (seleo entre dados e comandos). O display reconhece dois tipos de informao na via de dados: comandos e dados. Os comandos, que so reconhecidos quando RS = 0, so instrues para o display (limpar a tela, ir para a segunda linha, ir para a dcima coluna, etc... ); os dados so caracteres a serem escritos no display, e so indicados por RS = 1. A 4 bits da via de dados so ligados aos bits 4 a 7 do LCD. Abaixo apresentada uma tabela resumida de cdigos hexadecimais de comandos do LCD.

Exsto Tecnologia

XM118 Microcontroladores PIC18

145

Descrio do Comando Controle do display Limpeza do Display com retorno do cursor a Retorno do cursor 1 linha e da mensagem sua posio inicial Controle do Cursor

Modo Ativo (sem cusor) Inativo

RS 0 0 0 0

R/W 0 0 0 0

Cdigo do Comando (Hexadecimal) 0C 0A, 08 01 02

Sentido de deslocamento do cursor na entrada de um novo caracter Deslocamento da mensagem com a entrada de um novo caracter Deslocamento da mensagem sem entrada de novos caracteres Endereo da primeira posio ( esquerda)

Ativo (ligado, fixo) Inativo Alternado Desloc. esquerda Desloc. direita Retorno Piscante Para esquerda Para direita

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0E 0C 0F 10 14 02 0D 04 06

Para esquerda Para direita

0 0

0 0

07 05

Para esquerda Para direita


a

0 0

0 0

18 1C

1 Linha a 2 Linha

0 0

0 0

80 C0

Os endereos de cada posio no display so dados pela tabela abaixo. Para que um caracter seja escrito em uma determinada posio, envia-se o valor dessa posio como comando e em seguida envia-se o caracter a ser escrito.

80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F

C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF

A figura abaixo apresenta o circuito bsico LCD.

Exsto Tecnologia

XM118 Microcontroladores PIC18

146

Figura 3.2 Esquema Bsico do Display

A figura abaixo apresenta uma tabela de caracteres do display.

Exsto Tecnologia

XM118 Microcontroladores PIC18

147

A tabela seguinte apresenta a funo de cada um dos pinos do display e em como eles esto ligados ao PIC.

Exsto Tecnologia

XM118 Microcontroladores PIC18

148

Pino
1 2 3 4 5 6 7 8 9 10 11 12 13 14

Smbolo
Vss Vdd Vo RS R/W EN D0 D1 D2 D3 D4 D5 D6 D7

Funo
GND +5V Controle de contraste Seleo de modo Leitura/Escrita Habilitao

Ligao com o PIC


PORTE, 0 PORTE, 2 PORTE, 1 PORTD, 0 PORTD, 1 PORTD, 2 PORTD, 3 PORTD, 4 PORTD, 5 PORTD, 6 PORTD, 7

Via de Dados

5.4.1

A biblioteca XLCD O compilador C18 vem com uma biblioteca genrica pra displays LCD chamada XLCD. Essa

biblioteca possui as funes listadas abaixo, quer permitem inicializar o display e escrever simples caracteres ou strings. Note que existem diferentes tipos de funo dependendo se a informao a ser escrita est na memria de dados (RAM) ou na memria de programa (FLASH). Funo BusyXLCD OpenXLCDD putcXLCD putsXLCD putrsXLCD ReadAddrXLCD ReadDataXLCD SetCGRamAddr SetDDRamAddr WriteCmdXLCD WriteDataXLCD Prottipos
unsigned char BusyXLCD( void ); void char void char OpenXLCD( unsigned lcdtype ); OpenXLCD( unsigned lcdtype );

Descrio Retorna 1 se o LCD estiver realizando alguma operao e 0 se estiver livre pra receber novos comandos. Inicializa o LCD. Escreve um caracter no LCD Escreve uma string (da memria RAM) no LCD Escreve uma string (da memria FLASH) no LCD L o byte de endereo da memria do controlador de LCD. L um byte do controlador de LCD. Aponta o endereo do gerador de carcteres Aponta para um endereo de dados do LCD. Escreve um comando no LCD Escreve um byte no LCD

void putsXLCD( char *buffer ); void putrsXLCD( const rom char *buffer ); unsigned char ReadAddrXLCD( void ); char ReadDataXLCD( void ); void SetCGRamAddr( unsigned char addr ); void SetDDRamAddr( unsigned char addr ); void WriteCmdXLCD( unsigned char cmd ); void WriteDataXLCD( char data );

Exsto Tecnologia

XM118 Microcontroladores PIC18

149

Para usar a biblioteca XLCD necessrio fazer algumas alteraes nas definies da biblioteca para o hardware que estiver sendo usado e recompilar os arquivos. Para facilitar, os arquivos que fazem uso dessa biblioteca no curso j sofreram essas alteraes. Baseie-se neles para novos projetos.

5.5 Memrias EEPROM e FLASH


O PIC18F452 possui regies de memria no-voltil(que no perdem seu contedo quando o componente perde alimentao): a memria FLASH de programa e a memria EEPROM de dados. A memria EEPROM destinada a guardar dados necessrios a execuo do programa que no se deseja perder com a falta de alimentao. Essa regio de memria tem endereamento prprio e se encontra separa da memria de programa (FLASH) e de dados (RAM). Para efeitos prticos, essa memria se comporta como um perifrico, isto , seu acesso feito atravs de registros de funes especiais. A memria de programa tem a funo principal de armazenar o programa a ser executado pelo Microcontrolador. possvel, no entanto, ler e escrever dados desta memria de forma muito semelhante ao que se faz com a memria EEPROM. Desta maneira, regies da FLASH no usadas pelo programa podem ser usadas como um espao adicional de memria no voltil para dados. Pode-se ainda atualizar tabelas de constantes usadas no programa. E ainda, uma das possibilidades mais interessantes, criar atualizar o cdigo do microcontrolador estando o mesmo em operao, usando alguma interface de comunicao (RS-232, RS-485, Ethernet, Modem, RF, etc...) permitindo assim o rpido upgrade de novas verses de firmware. Tanto a EEPROM quanto a FLASH tem seu funcionado controlado pelo registro EECON1. Antes de analisar as particularidades de cada memria, os bits deste registro so apresentados:
R/W x EEPGD Bit 7 R/W x CFGS R/W 0 FREE R/W x WRERR R/W 0 WREN R/W 0 WR R/W 0 RD Bit 0

U0
-

EECON1 EEPGD : Seleo de memria EEPROM ou FLASH o o 1 = Acesso a memria FLAHS de programa 0 = Acesso a memria EEPROM de dados

CFGS : Acesso aos bits de configurao o o 1 = Acesso aos bits de configurao 0 = Acesso a memria EEPROM ou FLASH (conforme EEPGD)

FREE : Habilitao do apagamento de coluna (quadro) da FLASH


Exsto Tecnologia

XM118 Microcontroladores PIC18

150

1 = Apaga a coluna (quadro) da memria de programa apontada por TBLPTR no prximo comando de leitura (o bit zerado quando a operao terminar)

0 = Executa uma operao de escrita simples.

WRERR : Indicador de erro no processo de escrita da FLASH ou EEPROM o o 1 = Uma operao de leitura foi interrompida antes do fim (por qualquer reset) 0 = Operao de escrita concluda com sucesso

WREN: Habilitao de escrita na FLASH/EEPROM o o 1 = Permite escrita 0 = Impede escrita

WR: Controle de escrita o 1 = Inicia uma escrita de EEPROM ou FLASH ou o apagamento de FLASH. Esses processos so temporizados internamente e o bit zerado automaticamente quando o processo termina. No possvel zerar esse bit por software. o Ciclo de escrita de EEPROM ou FLASH ou apagamento de FLASH completo.

RD: Controle de leitura o 1 = Inicia o processo de leitura da EEPROM. Esse bit pode apenas ser setado em software. Se EEPGD = 1 (acesso a FLASH) esse pino no pode ser setado o 0 = No inicia o processo de leitura.

5.5.1

Memria EEPROM Os PIC18F452 e 18F4550 possuem 256 bytes de memria EEPROM para dados. A EERPOM

serve para armazenar dados que podem ser alterados com a execuo do programa, mas que no se pretende perder caso a tenso de alimentao seja retirada Essa memria mapeada separadamente das memrias RAM e FLASH, tendo endereos de 00h a FFh. A forma de acesso a memria EEPROM do PIC18 muito semelhante a da linha PIC16. A memria EEPROM pode ser acessada byte a byte, tanto para leitura como para escrita. Na verdade, quando uma operao de escrita realizada, automaticamente feito um ciclo de apagamento e escrita do endereo em questo. A memria EEPROM opera para leitura ou escrita em toda a faixa de tenso. garantido um tempo mnimo de reteno de dados de 40 anos. A memria suporta no mnimo 100.000 ciclos de escrita, sendo o valor tpico para condies normais de operao de 1.000.000 de ciclos. Cada operao de escrita demora 4ms para ser executada. O acesso a memria EEPROM feita de forma indireta, atravs de registros de controle e passagem de parmetros. Por isso, podemos considerar que seu comportamento mais semelhante
Exsto Tecnologia

XM118 Microcontroladores PIC18

151

ao de um perifrico do que as demais memrias disponveis no microcontrolador. Os registros de controle so EECON1 (descrito anteriormente) e EECON2 (que na verdade no um registro real, mas participa na seqncia de segurana de gravao, como ser visto adiante). O registro EEADR indica o endereo acessado. J o registro EEDATA permite manipular os dados, isto , ele contm o dado a ser gravado em uma operao de escrita e o dado lido aps uma operao de leitura. A figura abaixo exemplifica esse processo.
EEPROM EEPROM

EEADR EEADR

EEADR EEADR

(a) operao de escrita

(b) operao de leitura

Figura 8.1 Processo de leitura e escrita da EEPROM

A memria EEPROM possui dois nveis de segurana, controlados pelos bits de configurao CPD e WRTD. CPD bloqueia leituras e escritas externas da EEPROM, liberando-as somente se o microcontrolador for totalmente apagado. J WRTD bloqueia escritas internas e externas. Em todos os casos as operaes de leitura interna so permitidas.

5.5.1.1

Interrupo O bit EEIF setado toda vez que uma operao de escrita terminada. Isso permite iniciar o

processo de gravao da EEPROM e voltar execuo normal do programa, j que o tempo de gravao de 4 ms pode ser crtico dependendo da aplicao. Contudo, recomendado que se desabilite as demais interrupes enquanto feita uma escrita da EEPROM.

Exsto Tecnologia

XM118 Microcontroladores PIC18

152

5.5.1.2

Funes O acesso memria feito seguindo uma seqncia obrigatria de comandos. O manual do

microcontrolador apresenta rotinas Assembly para esse fim. Contudo, o compilador C18 no prov rotinas para acesso a EEPROM. Segue abaixo os cdigos fonte de rotinas que realizam leitura e escrita da EEPROM interna do PIC.
unsigned char ReadEEPROM (unsigned char address) //************************************************************** // ROTINA PARA LEITURA DA EEPROM // ENTRADA: address -> endereo de leitura da EPROM // SADA: Retorno -> Retorna o valor contido na EPROM //************************************************************** { EEADR = address; // EEADR recebe o endereo EECON1bits.CFGS = 0; // seleciona acesso a memrias EECON1bits.EEPGD = 0; // seleciona acesso a EEPROM EECON1bits.RD = 1; // inicia o processo de escrita return(EEDATA); // retorna o dado lido da EEPROM } void WriteEEPROM (unsigned char address, unsigned char data) //************************************************************* // rotina p escrita na e2prom // entrada: address -> indica posio da memria e2prom // data -> dados que sero escritos // sada: nulo //************************************************************ { EEADR = address; // EEADR recebe o endereo EEDATA = data; // EEDATA recebe o dado EECON1bits.CFGS = 0; // seleciona memrias EECON1bits.EEPGD = 0; // seleciona memria EEPROM EECON1bits.WREN = 1; // desliga proteo de escrita INTCONbits.GIE = 0; // desabilita interrues EECON2 = 0x55; // seqncia EECON2 = 0xAA; // obrigatria EECON1bits.WR = 1; // inicia processo de escrita while(!PIR2bits.EEIF); // aguarda completar a escrita INTCONbits.GIE = 1; // reativa as interrupes PIR2bits.EEIF = 0; // zera o flag de escrita EECON1bits.WREN = 0; // liga a proteo de escrita }

Em diversas situaes desejvel incluir no cdigo fonte os dados a serem gravados na EEPROM no momento em que o microcontrolador gravado. O processo para se fazer isso apresentado no trecho de cdigo abaixo. O valor 0xF00000 indica para o gravador que esse dado deve ser armazena do na EEPROM.

Exsto Tecnologia

XM118 Microcontroladores PIC18

153

// Esta a diretiva que inicia a regio de EEPROM #pragma romdata dataEEPROM = 0xF00000 // Vrias formas de como se gravar um dado rom unsigned char FirstByte = 0x55; rom unsigned char SecondByte; rom unsigned char FirstArray[] = {0x00, 0x01, 0x02}; rom unsigned char SecondArray[3];

5.5.2 Memria Flash Ao contrrio da memria EEPROM, a memria FLASH do PIC18 se comporta de forma bastante diferente da memria do PIC16. Inclusive, existem algumas diferenas entre a forma de operao do PIC18F452 e o PIC18F4550. A memria EEPROM pode ser lida byte a byte, contudo ela s pode ser escrita em blocos de memria (8 bytes para o PIC18F452 e 64 bytes para o PIC28F4550). E ainda, necessrio apagar um bloco de memria inteiro (de 64 bytes) para se poder escrever, mesmo que em um nico endereo. Em contra partida ao aumento da complexidade do processo temos um ganho na velocidade de gravao, pois vrios endereos so gravados a cada comando de gravao. Esse processo demora tipicamente 2 ms, alm de mais 2 ms do processo de apagamento, isto , o mesmo tempo de se gravar um nico byte na EEPROM. Durante o tempo de gravao o programa no executado. O acesso de leitura de EEPROM feito de forma indireta. Existe um ponteiros que aponta qualquer posio da memria de programa chamado TBLPTR, que composto por trs registros: TBLPTRU: TBLPTRL: TBLPTRL, sendo que 22 bits so vlidos para endereamento. A se executar a instruo TBLRD de leitura de tabela (Table Read) o contedo do endereo apontado transferido para o registro TABLAT. Nessa operao a memria lida de 8 em 8 bits, enquanto no fetch de instrues a leitura de 16 em 16 bits.

Flash

TBLPTRU

TBLPTRH

TBLPTRL

TABLAT

Figura 8.3 Processo de leitura da FLASH

Exsto Tecnologia

XM118 Microcontroladores PIC18

154

O processo de escrita exige que antes o quadro de 64 bytes seja apagado. Para isso o mesmo ponteiro TBLPTR carregado para apontar o quadro. como se a memria fosse divida em quadros de 64 bytes e um endereo de 16 bits (os 16 bits vlidos mais significativos de TBLPTR) indicassem o quadro, enquanto os 6 bits menos significativos so ignorados na operao. Em seguida executado o processo de apagamento, fazendo o bit FREE de EECON1 igual a 1 e executando um comando de escrita. Para gravao dos dados no PIC18F452 devem ser carregados 8 bytes atravs da instruo TBLWT de escrita de tabela (table write). Os dados no so gravados diretamente na memria FLASH, mas armazenados em um conjunto de registros de carga (holding registers), para posteriormente serem gravados de uma s vez. Nessa operao os 19 bits vlidos mais significativos de TBLPTR apontam o bloco de 8 bytes a ser gravado enquanto os 3 bits menos significativos indicam o registro de carga que recebe os dados. Em seguida realizada uma operao de gravao (com o bit FREE em 0). Um cuidado que se deve tomar que TBLPTR deve apontar para o bloco de 8 bits no momento da gravao. Para a gravao do PIC18F4550 o raciocnio o mesmo, porm os blocos so de 64 bytes.
Flash TBLPTRU TBLPTRH TBLPTRL

Registros de carga 00 01 02 03 04 05 06 07

Figura 8.4 Processo de escrita da FLASH (PIC18F452)

Eventualmente pode-se desejar alterar um nico endereo da FLASH, preservando os demais contedos do quadro de 64 bytes no qual se encontra. Nesta situao necessrio copiar todo o quadro para memria RAM, apag-lo na FLASH, e re-gravar com o novo dado.
Exsto Tecnologia

XM118 Microcontroladores PIC18

155

Existem trs nveis de proteo de cdigo da memria flash, configurados atravs dos bits de gravao: Code-Protect (bit CPn): impede a leitura e escrita externa. Write-Protect (bit WRTn): impede a escrita interna. External Block Table Read (bit EBTRn): permite apenas leituras internas e o cdigo que executa a leitura estiver no mesmo setor de memria do dado lido. Uma observao importante que, apesar dos bits de configurao poderem ser alterados por instrues de escrita na FLASH (fazendo o bit CFGS igual a 1) os bits de Code-Protect s so zerados se houver uma instruo para apagar a memria inteira; esse comando s pode ser dado externamente por um gravador.

5.5.2.1

Interrupo Do mesmo modo que para a EEPROM, o bit EEIF setado toda a vez que o processo de

gravao finalizado. No entanto, ao contrrio do que ocorre com EEPROM, o programa para de ser executado enquanto dados so gravados na FLASH, isto , obrigatoriamente o tempo de gravao ser um tempo morto para o programa. Continua existindo a recomendao de se desativar as interrupes durante a gravao, apesar de que, pelos motivos apresentados acima, se ocorresse uma interrupo est no poderia ser tratada.

Exsto Tecnologia

XM118 Microcontroladores PIC18

156

6 Perifricos
Uma das caractersticas que explica o sucesso dos microcontroladores a presena de diversos perifricos. Esses componentes agregados ao core permitem realizar diversas tarefas, expandindo as capacidades do componente. Como trabalham de forma independente do processador e possuem interrupes, eles realmente trabalham em paralelo com o processador na execuo das tarefas dos programas. O PIC18F4550 particularmente rico em perifricos e possui um perifrico USB, que um dispositivo especial dentro da famlia de microcontroladores. Nessa seo apresentaremos os principais perifricos do PIC18F4550. Alm das descries do funcionamento dos perifricos so apresentadas as bibliotecas de funes de perifricos que acompanham o compilador C18. Como o foco do curso a linguagem C, no detalharemos o funcionamento dos bits de controle de perifricos, uma vez que isso feito pelas funes das bibliotecas de cada perifrico. Focaremos principalmente no funcionamento e configurao dos perifricos e no uso das funes em C. Os eventos causadores de interrupo so apresentados; os bits associados a cada interrupo so apresentados no captulo 4.6 Interrupes.

6.1 Como usar a ajuda das bibliotecas do C18


Os detalhes de uso das bibliotecas de funo so descritas nos arquivos de ajuda do compilador, que se encontram em C:\MCC18\DOC\PERIPH-LIB\. Esses arquivo trs a funcionamento das funes relativas a verso do compilador a que se refere. Portanto, podem haver alteraes nas funes se usados verses mais novas do compilador. Deve-se estar atendo a isso e levar sempre os arquivos de ajuda como referncia. Para ter acesso a esses arquivos v a at a pasta C:\MCC18\DOC\PERIPH-LIB\. O aspecto dessa pasta mostrado na figura a seguir.

Exsto Tecnologia

XM118 Microcontroladores PIC18

157

Observe que existe um arquivo de ajuda para cada biblioteca de perifrico, que pode ser acessado diretamente ou atravs do arquivo principal que C18HWeriferalIntro.htm. Os arquivos de ajuda esto escritos em ingls, obviamente, sendo necessria um conhecimento mnimo dessa linguagem para os compreender, assim como para entender o manual de qualquer componente eletrnico. Para exemplificar o uso vamos explorar a biblioteca do conversor AD (AD Converter.HTM). Os demais arquivos sempre seguiram esse padro. Temos a tela inicial abaixo, que apresenta um link para o contedo da ajuda.

Exsto Tecnologia

XM118 Microcontroladores PIC18

158

Na introduo temos um resumo das funes da biblioteca.

Exsto Tecnologia

XM118 Microcontroladores PIC18

159

Um pouco alm apresentada uma tabela onde possvel identificar qual a verso de AD do microcontrolador utilizado. Dependendo do perifrico podem existir diferenas nas funes conforme o microcontrolador utilizado. Estar indicado para cada funo a que verso de perifrico se destina e a tabela deve ser sempre consultada para definir a verso do perifrico a ser usado. Por exemplo, na figura abaixo podemos identificar que o PIC18F4550 possui um ADC de verso ADC_V5.

Exsto Tecnologia

XM118 Microcontroladores PIC18

160

Explorando um pouco mais a funo OpenADC veremos como a configurao do ADC. Para cada perifrico existir uma funo Open... que o inicializa atravs de uma srie de parmetros. Essa funo possuir um ou mais parmetros de entrada, que sero uma operao E entre diversas constantes definidas, que representam as configuraes possveis do perifrico. Em C o trabalho de configurar o perifrico resume-se a definir esses parmetros de configurao, ficando a cargo do compilador, atravs da funo, de configurar bits e registros. Os diferentes parmetros so agrupados atravs do operador & que, como sabemos, realiza a operao E bit-a-bit. A figura abaixo mostra como a funo se apresenta na ajuda (note que essas funo a que se aplica a verso ADC_V5, portanto pode ser usada para o PIC18F4550).

Exsto Tecnologia

XM118 Microcontroladores PIC18

161

Transcrevemos a seguir a ajuda dessa funo na integra, para se perceber seus aspectos principais. Note que, ao final existe um exemplo do uso da funo, muitas vezes til.

2.4.3

OpenADC (ADC_V3, 4, 5, 6)

For ADC_V3, ADC_V4, ADC_V5 and ADC_V6 Function: Configure the A/D convertor. adc.h Include: Prototype: void OpenADC(unsigned char config, unsigned char config2 , unsigned char portconfig); Arguments: Config A bitmask that is created by performing either bitwise AND operation (&) or bitwise OR operation (|), configurable either way as shown in the example at the end of this file, with a value from each of the categories listed below. These values are defined in the file adc.h. A/D clock source: ADC_FOSC_2 ADC_FOSC_4 ADC_FOSC_8 FOSC / 2 FOSC / 4 FOSC / 8

ADC_FOSC_16 FOSC / 16 Exsto Tecnologia

XM118 Microcontroladores PIC18

162

ADC_FOSC_32 FOSC / 32 ADC_FOSC_64 FOSC / 64 ADC_FOSC_RC Internal RC Oscillator A/D result justification: ADC_RIGHT_JUST Result in Least Significant bits

ADC_LEFT_JUST Result in Most Significant bits A/D acquisition time select: ADC_0_TAD ADC_2_TAD ADC_4_TAD ADC_6_TAD ADC_8_TAD ADC_12_TAD ADC_16_TAD ADC_20_TAD config2 0 Tad 2 Tad 4 Tad 6 Tad 8 Tad 12 Tad 16 Tad 20 Tad

A bitmask that is created by performing either bitwise AND operation (&) or bitwise OR operation (|), configurable either way as shown in the example at the end of this file, with a value from each of the categories listed below. These values are defined in the file adc.h. Channel: For ADC_V3: ADC_CH0 ADC_CH1 ADC_CH2 ADC_CH3 ADC_CH4 ADC_CH5 ADC_CH6 For ADC_V4: ADC_CH0 ADC_CH1 ADC_CH2 ADC_CH3 ADC_CH0 ADC_CH1 ADC_CH2 ADC_CH3 ADC_CH4 ADC_CH5 ADC_CH6 ADC_CH7 ADC_CH8 ADC_CH9 ADC_CH10 ADC_CH11

Channel 0 Channel 1 Channel 2 Channel 3 Channel 4 Channel 5 Channel 6 Channel 0 Channel 1 Channel 2 Channel 3 Channel 0 Channel 1 Channel 2 Channel 3 Channel 4 Channel 5 Channel 6 Channel 7 Channel 8 Channel 9 Channel 10 Channel 11 Exsto Tecnologia

For ADC_V5 and ADC_V6:

XM118 Microcontroladores PIC18

163

ADC_CH12 ADC_CH13 ADC_CH14 ADC_CH15 A/D Interrupts: ADC_INT_ON

Channel 12 Channel 13 Channel 14 Channel 15 Interrupts enabled

ADC_INT_OFF Interrupts disabled A/D Vref+ and Vref- configuration: ADC_REF_VDD_VREFMINUS ADC_REF_VREFPLUS_VREFMINUS ADC_REF_VREFPLUS_VSS ADC_REF_VDD_VSS Portconfig VREF+ = VDD & VREF- = Ext. VREF+ = Ext. & VREF- = Ext. VREF+ = Ext. & VREF- = VSS VREF+ = VDD & VREF- = VSS

For ADC_V3: The value of portconfig can be any value from 0 to 127, few are defined below ADC_0ANA All digital ADC_1ANA ADC_2ANA ADC_3ANA ADC_4ANA ADC_5ANA ADC_6ANA ADC_7ANA analog:AN0 analog:AN0-AN1 analog:AN0-AN2 analog:AN0-AN3 analog:AN0-AN4 analog:AN0-AN5 analog:AN0-AN6

For ADC_V4: The value of portconfig can be any value from 0 to 15, few are defined below ADC_0ANA All digital ADC_1ANA ADC_2ANA ADC_3ANA ADC_4ANA analog:AN0 analog:AN0-AN1 analog:AN0-AN2 analog:AN0-AN3

For ADC_V5 and ADC_V6: ADC_0ANA All digital ADC_1ANA ADC_2ANA ADC_3ANA ADC_4ANA ADC_5ANA ADC_6ANA ADC_7ANA ADC_8ANA ADC_9ANA ADC_10ANA ADC_11ANA ADC_12ANA ADC_13ANA analog:AN0 analog:AN0-AN1 analog:AN0-AN2 analog:AN0-AN3 analog:AN0-AN4 analog:AN0-AN5 analog:AN0-AN6 analog:AN0-AN7 analog:AN0-AN8 analog:AN0-AN9 analog:AN0-AN10 analog:AN0-AN11 analog:AN0-AN12 digital:AN1-AN15 digital:AN2-AN15 digital:AN3-AN15 digital:AN4-AN15 digital:AN5-AN15 digital:AN6-AN15 digital:AN7-AN15 digital:AN8-AN15 digital:AN9-AN15 digital:AN10-AN15 digital:AN11-AN15 digital:AN12-AN15 digital:AN13-AN15 Exsto Tecnologia

XM118 Microcontroladores PIC18

164

ADC_14ANA ADC_15ANA Remarks: File Name: Code Example:

analog:AN0-AN13 All analog

digital:AN14-AN15

This function resets the A/D-related registers to the POR state and then configures the clock, result format, voltage reference, port and channel. adcopen.c With AND mask: OpenADC( ADC_FOSC_32 & ADC_RIGHT_JUST & ADC_12_TAD, ADC_CH0 & ADC_REF_VDD_VSS ADC_INT_OFF, 12 With OR mask: OpenADC( ADC_FOSC_32 ADC_RIGHT_JUST ADC_12_TAD, ADC_CH0 ADC_REF_VDD_VSS ADC_INT_OFF, 12 & ); | | | | );

6.2 Contadores e Temporizadores


O PIC18F4550 possuem 4 timers que trabalham de forma bastante semelhante: Timer 0, Timer 1, Timer 2 e Timer 3. 6.2.1 Timer 0 O Timer 0 do PIC18 um timer de 16 bits, mas pode operar em modo 8 bits para manter

compatibilidade com o Timer 0 do PIC16. O registro de controle do Timer 0 T0CON. A figura 3.1 apresenta o diagrama em blocos do Timer 0 operando no modo 8 bits.

Figura 3.1 - Diagrama do Timer 0 no modo 8 bits J a figura 3.2 mostra o diagrama do Timer 0 operando no modo 16 bits.

Exsto Tecnologia

XM118 Microcontroladores PIC18

165

Figura 3.2- Diagrama do Timer 0 no modo 16 bits As diferenas entre a operao no modo 8 bits e no modo 16 bits so que (1) o flag de interrupo seta no estouro de 8 bits e no estouro de 16 bits, dependendo do modo, e (2) no modo 16 bits existe um sistema para gravao e leitura simultnea dos dois registros. O sinal de clock do timer 0 pode vir tanto do sinal de clock interno (FOSC/4) quanto do pino RA4/T0CKI. possvel configurar se o timer incrementar na transio de subida ou de descida. A pr-escala do timer 0 permite multiplicar o perodo do sinal de entrada por 1, 2, 4, 8, 16, 32, 64, 128, e 256. 6.2.1.1 Interrupo O evento que ocasiona a interrupo o overflow do timer 0, que depende da configurao

do timer, se para 8 ou 16 bits. 6.2.2 Timer 1 O timer 1 um timer de 16 bits. Ele pode operar em dois modos: leitura e escrita em 8 bits

(compatvel com PIC16) e leitura e escrita em 16 bits. No modo leitura e escrita em 8 bits os dois registros do timer so alterados separadamente, conforme os valores so carregados. No modo de 16 bits existe um sistema que carrega o valor de/para um registro auxiliar quando feita uma operao de como byte menos significativo; dessa maneira as operaes acontecem de forma simultnea nos dois registros. A figura 3.3 apresenta o diagrama em blocos do timer 1 para o modo de acesso em 16 bits.

Exsto Tecnologia

XM118 Microcontroladores PIC18

166

Figura 3.3 - Diagrama do Timer 1 Podemos escolher entre trs fontes de clock do timer 1: sinal externo, sinal de clock interno (FOSC/4) e oscilador do Timer 1. O oscilador do Timer 1 pode ser selecionado como uma fonte de clock para o processador. Para isso necessrio que o oscilador do timer 1 esteja habilitado. Tipicamente no oscilador do timer 1 usado um cristal de 32.768 Hz; de cada terminal desse cristal deve ser ligado um capacitor de 27pF para GND. O timer 1 possui uma pr-escala que permite multiplicar o perdodo do sinal de entrada por 1, 2, 4 e 8. possvel ainda sincronizar o sinal de clock, se proveniente de fonte externa, com o ciclos de instruo do microcontrolador. O timer 1 pode servir de base de tempo para o mdulo CCP, dependendo da configurao deste. Por fim, o timer pode ser ligado e desligado, isto , pode-se suspender o sinal aplicado ao contador. 6.2.2.1 Interrupo O evento associado a interrupo do timer 1 o overflow da contagem de 16 bits. Timer 2 O timer 2 um temporizador de 8 bits. Ele apresenta algumas caractersticas que diverem

6.2.3

dos timers vistos anteriormente. Na figura 3.4 pode-se observar o diagrama em blocos desse timer.
Exsto Tecnologia

XM118 Microcontroladores PIC18

167

Figura 3.4 - Diagrama em blocos do timer 2 Em primeiro lugar, o timer 2 s pode operar com fonte de clock interna, portanto apenas no modo timer. Ele possui uma pr-escala com fatores de multiplicao de 1, 4 e 16. O sinal de sada da pr-escala aplicado ao contador propriamente dito, que acessvel atravs do registro TMR2. O valor desse contador comparado constantemente com o valor do registro PR2. Quando os dois valores so iguais gerado nvel lgico alto no sinal de coincidncia (TMR2 Output), que usado como base de tempo para outros mdulos, e o contador zerado. O sinal de coincidncia aplicado a uma ps-escala que pode acumular de 1 a 16 ocorrncias, ativando o flag de interrupo quando a contagem chagar ao valor estabelecido. No h uma sinalizao de overflow, que pode ser simulado fazendo PR2 igual a 0. O valor de PR2 no configurado por nenhuma funo especfica. Basta atribuir ao valor desejado varivel PR2, j definida no arquivo de cabealho. 6.2.3.1 Interrupo O evento que dispara a interrupo do timer 2 a contagem de n eventos de coincidncia

entre o timer 2 e PR2, sendo que n configurvel. 6.2.4 Timer 3 O timer 3 funciona da mesma maneira que o timer 1, conforme pode ser observado na figura

3.5. No modo contador o sinal de clock aplicado ao mesmo pino do timer (RC0). Alm disso, se o oscilador do timer 1 estiver ativo, tambm pode fornecer sinal de clock par o timer 3.

Exsto Tecnologia

XM118 Microcontroladores PIC18

168

Figura 3.5 - Diagrama do timer 3 6.2.4.1 Interrupo O evento associado interrupo do timer o overflow da contagem de 16 bits. Funes As funes do C18 para uso dos timers esto contidas na biblioteca timers.h. A seguir

6.2.5

apresentado um resumo das principais funes. Funo


OpenTimerx

Prottipos
void OpenTimer0( unsigned char config ); void OpenTimer1( unsigned char config ); void OpenTimer2( unsigned char config ); void OpenTimer3( unsigned char config ); void CloseTimer0(void); void CloseTimer1(void); void CloseTimer2(void); void CloseTimer3(void); unsigned int ReadTimer0( void ); unsigned int ReadTimer1( void ); unsigned char ReadTimer2( void ); unsigned int ReadTimer3( void ); void WriteTimer0( unsigned int timer ); void WriteTimer1( unsigned int timer ); void WriteTimer2( unsigned char timer ); void WriteTimer3( unsigned int timer );

Descrio Configura e ativa o timer x

CloseTimerx

Desativa o timer x

ReadTimerx

L o timer x

WriteTimerx

Escreve no timer x

Tabela 3.1 Funes da Biblioteca timers.h

6.3 Comparadores Analgicos

Exsto Tecnologia

XM118 Microcontroladores PIC18

169

Quando trabalhamos com microcontroladores, podemos ter situaes onde desejamos uma comparao rpida entre dois ou mais valores analgicos para que seja tomada alguma ao sem uma interveno do programa principal. Isso poderia ser vantajoso se fosse feito de forma automtica pelo microcontrolador ao invs de se ter mdulos A/D para fazer este tipo de tarefa. No microcontrolador 18F4550 temos um perifrico que possui essa caracterstica. O modulo de comparao analgica contem dois comparadores que podem ser configurados de vrias formas diferentes. As entradas podem ser pinos multiplexados de entrada do portal A (RA0 at RA5), bem como podem ser referencias de tenses obtidas dentro do microcontrolador. As sadas digitais podem ser obtidas com valores normais ou inversos, estando disponveis na sada do mdulo comparador ou ainda podem ser lidas atravs do registro de controle. Abaixo temos o registro que serve para configurao da entrada e da sada do mdulo comparador dentro do microcontrolador.

Registro CMCON:

Figura 5.1 Registro de configurao do comparador

Aqui temos a descrio de cada parte do registro: C2OUT: Armazena o valor de sada do comparador 2, onde: o Quando C2INV for zero, temos o valor um quando o valor de entrada Vin+ do comparador 2 for maior que Vin- e zero quando o valor de entrada de Vin+ for menor que Vin-; o Quando C2INV for um temos exatamente a situao contrria da anterior.

C1OUT: Armazena o valor de sada do comparador 1, onde: o Quando C1INV for zero, temos o valor um quando o valor de entrada Vin+ do comparador 1 for maior que Vin- e zero quando o valor de entrada de Vin+ for menor que Vin-; o Quando C1INV for um temos exatamente a situao contrria da anterior.

C2INV e C1INV: Como j pde ser notado, quando possuem valor um inverte o valor de sada do comparador C2 e C1 respectivamente e quando em zero no inverte;
Exsto Tecnologia

XM118 Microcontroladores PIC18

170

CM2:CM1:CM0: Estes trs registros so responsveis pela seleo do modo de funcionamento dos dois comparadores, onde sua aplicao pode ser vista abaixo:

Figura 5.2 Configuraes possveis do comparador

CIS: Este registro serve para selecionar a que pinos estaro conectados os Vin- dos comparadores C1 e C2. Assim, quando usamos CM2:CM1:CM0 = 110 temos:

Exsto Tecnologia

XM118 Microcontroladores PIC18

171

Quando CIS for igual a um, C1 Vin- estar conectado a RA3/AN3/Vref+ e C2 conectado a RA2/AN2/Vref-/CVref

Quando CIS for igual a zero, C1 Vin- estar conectado a RA0/AN0 e C2 conectado a RA1/AN1.

6.3.1 6.3.1.1

Funcionamento do Comparador Valores de entrada e referncia do comparador

Abaixo podemos ver a figura de um dos comparadores, bem como a relao entre os valores analgicos colocados na entrada e o sinal digital. Quando a entrada analgica Vin+ menor que a entrada analgica Vin-, a sada do comparador tambm ter um valor de sada de nvel lgico baixo. Quando a entrada analgica em Vin+ maior que a entrada analgica Vin-, a sada do comparador possui sua sada com um nvel lgico alto. As reas em negrito da sada do comparador representam a incerteza do valor de sada devido aos offsets e o tempo de resposta das entradas.

Figura 5.3 Representao do funcionamento do comparador

Dependendo ainda do modo do comparador, como visto anteriormente, um valor de tenso de referencia interno ou externo pode ser usado para fazer as comparaes de valores externos. O sinal analgico presente em Vin- da figura 5.3 comparado com o sinal em Vin+ e a sada diital do comparador ajustado de acordo com a variao dos mesmos. Quando tenses de referencias externas so usadas, o mdulo comparador pode ser configurado para ter os dois comparadores utilizando a mesma fonte de referencia externa ou ainda isto pode ser independente para cada um. Entretanto, o sinal de referncia deve estar entre VSS (Geralmente GND) e VDD (Geralmente +5V) que podem ser aplicados a ambos os pinos do comparador.
Exsto Tecnologia

XM118 Microcontroladores PIC18

172

O comparador tambm pode usar as tenses internas do microcontrolador como valor de referencia no mdulo comparador, sendo que a referencia interna s est disponvel para o modo onde as quatro entradas so multiplicadas para os dois comparadores. Neste modo, a tenso interna de referncia ser aplicada ao Vin+ de ambos os comparadores. 6.3.1.2 Tempo de resposta do comparador

O tempo de resposta de um comparador determinado pelo tempo mnimo, depois de selecionado uma nova tenso de referencia ou fonte de entrada, antes da sada do comparador ter uma sada vlida. Se a tenso de referencia modificada, o atraso mximo para a mudana interna da referencia deve ser considerado quando estamos utilizando os valores de sada do comparador. De outra forma, o atraso mximo dos comparadores seria usado. 6.3.1.3 Sada do comparador

As sadas dos comparadores so lidas atravs do registro CMCON como pde ser visto acima. Estes bits so somente para leitura. A sada do comparador pode tambm estar ligada diretamente aos pinos de entrada e sada RA4 e RA5. Quando habilitados, os multiplexadores da sada de cada um destes pinos so utilizados para a sada do comparador.

Figura 5.4 Descrio da sada do comparador

Exsto Tecnologia

XM118 Microcontroladores PIC18

173

6.3.1.4

Interrupo

A interrupo acontece quando h uma mudana no estado da sada de ambos os comparadores independentemente. Onde os registros modificados so comentados no inicio deste capitulo. A interrupo pode ser verificada pelo o registro CMIF que representa a interrupo dos comparadores. 6.3.1.5 Funes Para o uso do comparador o compilador C18 trs as funes descritas abaixo, pertencentes a biblioteca ANCOMP.h Funo
Open_ancomp Close_ancomp

Prottipos
void OpenTimer0( unsigned char config ); void Close_ancomp(void);

Descrio Configura e ativa o comparador analgico. Desativa comparador analgico e sua interrupo.

Para ter acessos as sadas dos comparadores acessamo-los diretamente atravs dos bits CMCONbits.C1OUT e CMCONbits.C2OUT.

6.4 Conversor Analgico-Digital


A maioria dos dados obtidos de sensores comuns, tais como sensores de temperatura, intensidade luminosa, posio, tenso, corrente e etc. fornecem sinais analgicos, ou seja, uma tenso que proporcional grandeza medida e que varia de forma contnua numa faixa de valores. No entanto, a maioria dos equipamentos modernos que fazem a aquisio de dados destes sensores, trabalha com tcnicas digitais. Isso significa que o dado analgico, preciso ser convertido para a forma digital. Para fazer esta converso so utilizados circuitos denominados conversores analgico-digital, ou simplesmente A/D, como seu prprio nome indica, realiza a converso de sinais, cuja amplitude varia continuamente em sinais digitais correspondentes amplitude do sinal original. Para converter se faz o uso de um comparador de tenso ou corrente - variando de acordo com a aplicao - que ir comparar o sinal analgico com o valor de referncia. Desta forma os circuitos A/D devem preencher certos requisitos importantes quanto ao seu desempenho que so: Quantizao; Taxa de Amostragem e; Linearidade.
Exsto Tecnologia

XM118 Microcontroladores PIC18

174

6.4.1

Quantizao

Entre os dois valores extremos da escala de valores analgicos que devem ser convertidos para a forma digital existem infinitos valores intermedirios, o que justamente caracteriza uma grandeza que varia de forma anloga ou analgica. Entretanto, no podemos simplesmente representar o valor analgico atravs de bits, pois para infinitos valores deveramos ter infinitos bits para representar todas as variaes possveis. Para realizar a converso de um sinal analgico para um valor digital deve ser definido o nmero de bits em que o valor ser representado no universo digital e, a partir disso, definir em quantas faixas de valores digitais a faixa de valores analgicos ser dividida. Assim, por exemplo, se utilizarmos na converso 4 bits, teremos a possibilidade de representar apenas 16 valores na escala total de valores analgicos, e se usarmos 8 bits poderemos representar 256 valores, conforme indica a figura 52. Se tivermos uma escala de 0 a 8 V, por exemplo, e usarmos 4 bits para a converso, os "degraus"da escada de converso tero 0,5 V de altura, o que significa que este conversor ter uma resoluo de 0,5 V. Se usarmos um conversor A/D de 8 bits (256 "degraus"de resoluo) para fazer um voltmetro de 0 a 10 V, por exemplo, a resoluo deste voltmetro ser de 10/256 ou pouco menos de 0,04 V.

Figura 6.1 - Escala de converso

Este comportamento "digital" pode ser observado em muitos instrumentos comuns, tais como os multmetros digitais em que, se a grandeza medida estiver num valor intermedirio entre dois degraus da resoluo do conversor A/D, o valor apresentado no display oscilar entre eles.
Exsto Tecnologia

XM118 Microcontroladores PIC18

175

Evidentemente, tanto maior a preciso na converso quanto mais bits so utilizados pelo conversor. Tipos com 8 a 16 bits so comuns nas aplicaes industriais e em medidas, dependendo da quantidade de "passos" desejados na converso ou a resoluo. Em aplicaes de alta fidelidade pode-se trabalhar com at 24 bits. Um fator importante que deve ser escolhido no se especificar o nmero de bits de um conversor o rudo inerente ao circuito. Por exemplo, supondo uma aplicao onde valores de tenso entre 0 e 5V devem ser convertidos e onde se sabe que existe um rudo da ordem de 20mV no sinal a ser convertido. Ora, se usarmos um conversor A/D de 12 bits, por exemplo, teremos passos de quantizao de 5V/(212), isto , da ordem de 1,2 mV. Portanto teremos uma preciso de converso que no representa uma preciso de medida, pois o sinal de interesse possui uma impreciso gerada pelo rudo. Aplicaes com conversores A/D de 16 ou 24 bits exigem circuito extremamente imunes a rudo e interferncia para poder funcionar de forma correta.

6.4.2

Taxa de Amostragem

Muitos processos de aquisio de dados de sensores, de processos ou de outras aplicaes precisam ser rpidos. Uma placa de aquisio de dados de um instrumento de medida que projete uma forma de onda, desenhe um grfico na tela de um PC representando um processo dinmico ou mesmo um instrumento digital simples como um multmetro, deve estar constantemente convertendo sinais. Um osciloscpio digital, por exemplo, deve medir as tenses instantneas de um sinal em diversos pontos ao longo de um ciclo para poder "desenhar" esta forma de onda com preciso na tela. Se a freqncia do sinal for alta, isso implica a necessidade de se fazer amostragens num tempo extremamente curto. Os conversores A/D podem ser encontrados em tipos que tm freqncias de amostragem numa ampla escala de valores. Os tipos mais rpidos tm suas velocidades especificadas em MSPS (Mega Samples Per Second ou Milhes Amostragens Por Segundo). Uma mquina industrial ou um instrumento de uso geral como um multmetro pode usar conversores A/D relativamente lentos com taxas ou velocidades de amostragens de at algumas unidades por segundo. Um multmetro digital comum, por exemplo, faz de 1 a 10 amostragens por segundo apenas, dependendo do tipo. Todavia, um osciloscpio digital ou virtual que precise
Exsto Tecnologia

XM118 Microcontroladores PIC18

176

observar uma forma de onda de 10 MHz, deve, para ter uma definio razovel, realizar pelo menos 100 milhes de amostragens por segundo (10 pontos por ciclo). O conceito de taxa de amostragem est ligado tambm ao Teorema da Amostragem, a determinao da freqncia mxima na entrada de um conversor A/D e ao dimensionamento dos chamados filtros anti-aliasing. Contudo no entraremos em detalhes sobre esses assuntos, sendo essa discusso mais adequada para um curso de processamento de sinais.

6.4.3

Linearidade

A curva de converso da grandeza analgica para a forma digital deve ser linear para um bom conversor. Isso significa que no existem desvios na correspondncia entre o valor analgico e a sada digital ao longo da escala de valores em que o conversor deve trabalhar. Em outras palavras, em um grfico onde um eixo representa os valores analgicos de entrada e o outro os valores digitais de sada, a funo de transferncia deve ser idealmente uma reta. No entanto, na prtica podem ocorrer pequenos desvios, de acordo com o que mostra a figura abaixo.

Figura 6.2. Grau de Linearidade de Converso

Portanto, quanto mais linear um converso A/D, melhor sua qualidade.

6.4.4

Desenvolvimento

Para fazer uma converso de sinais analgicos para a forma digital existem diversas tcnicas que so empregadas nos circuitos comerciais, muitas delas encontradas em circuitos integrados que
Exsto Tecnologia

XM118 Microcontroladores PIC18

177

so "embutidos" em aplicaes mais complexas, os quais fazem o controle de mquinas e equipamentos. Analisamos as tecnologias mais empregadas para esta finalidade comeando com o bloco comum a todos os conversores, que o circuito de amostragem e manuteno (sample and hold). O valor dos sinais analgicos que devem ser convertidos para a forma digital corresponde a um determinado instante, cuja durao, em alguns casos, no vai alm de alguns milionsimos de segundo. Assim, um primeiro bloco importante do conversor um circuito que l o valor do sinal a ser convertido num determinado instante e o armazena de modo que, mesmo que o sinal varie depois, os circuitos que fazem a converso tm numa memria seu valor. Este circuito ilustrado em blocos na figura abaixo. O sinal a ser amostrado amplificado por um buffer de entrada cuja finalidade no carregar o circuito externo, e ao mesmo tempo proporcionar isolamento do circuito de converso.

Figura 6.3 - Diagrama em blocos do conversor A/D

Na sada deste circuito temos uma chave eletrnica ou chaveador, que determina o instante exato em que a leitura do sinal deve ser feita. A chave fecha ento por uma frao de segundo (numa freqncia que depende da taxa de amostragem) permitindo que o sinal carregue o capacitor C. Assim, quando a chave abre, esperando a leitura seguinte, o capacitor tem armazenado o valor da grandeza analgica a ser convertida. Esta tenso no capacitor mantida no circuito conversor atravs de um buffer de sada durante o tempo que ele necessita para isso.
Exsto Tecnologia

XM118 Microcontroladores PIC18

178

Na figura abaixo temos um grfico que indica de que modo tenso de entrada varia e o circuito de amostragem e reteno mantm a sada constante durante os intervalos de converso (que correspondem aos "degraus").

Figura 6.5 - Escala de converso

6.4.5

Aplicao

Existem vrias formas de se construir conversores A/D, sendo que cada um tem a sua caracterstica de funcionamento que deve ser levada em conta, na hora de se construir e/ou escolher para sua aplicao. Temos uma relao de possveis combinaes: Conversor A/D com comparador em paralelo; Conversor A/D com rampa em escada; Conversor A/D de aproximaes sucessivas; Conversor A/D de rampa nica; Conversor A/D de rampa dupla e; Sigma-Delta.

O Sigma-Delta uma das importantes tcnicas de converso A/D, utilizada em aplicaes que se deseja uma altssima velocidade de converso, como nos DSPs (Digital Signal Processing).

Exsto Tecnologia

XM118 Microcontroladores PIC18

179

Portanto, vimos que a converso do sinal analgico para o digital sempre existe uma perda de informao seja ela de amplitude - caracterstica da quantidade de bits utilizados - ou de fase do sinal - caracterstica da taxa de amostragem empregada. Vimos que o erro mximo que pode ocorrer na quantizao de metade do valor de nvel da quantizao assim sendo quanto maior for o nmero de bits do conversor menor ser o seu erro. O erro de "Aliasing" facilmente evitado utilizando o teorema da amostragem que "Para que uma determinada freqncia f1 do sinal analgico seja ou possa ser completamente reconstituda a taxa amostral, no processo de digitalizao, deve ser no mnimo igual a 2*f1" Conhecidas as imperfeies da converso podemos ento saber quais os fatores que influem na escolha de um conversor A/D e assim prever melhor os ajustes que sistema dever sofrer, pois j conhecida as suas fraquezas.

6.4.6

Usando o conversor ADC no microcontrolador

O ADC (Analog-to-Digital Converter) converte a tenso em palavras de 10 bits. O PIC18F4550 possui um ADC de 10 bits com 13 canais. Isso significa que existem vrias entradas para o conversor AD, porm somente uma entrada pode ser convertida por vez. As tenses de referncia para a converso, tanto superior (Vref+) como inferior (Vref-), podem ser selecionadas por software entre as tenses de alimentao e tenses presentes em determinados terminais do microcontrolador. Esses valores de tenso estipulam a faixa de valore a ser convertida. Por exemplo, sendo Vref+ = +5V e Vref- = GND temos uma faixa de 5V, correspondendo o valor 0 a 0V e 1024 a 5V. Para determinar qual o valor correspondente dentro dessa faixa, basta aplicar uma simples regra de trs. A figura abaixo mostra o diagrama em blocos do ADC.

Exsto Tecnologia

XM118 Microcontroladores PIC18

180

Figura 6.6 - Diagrama em blocos do ADC do PIC18F4550

O mdulo ADC realiza todo o processo de Sample and Hold (Amostragem e reteno). Esse processo realizado quando uma determinada entrada selecionada e inicia-se a carga de um capacitor interno CHOLD. Aps o tempo de carga do capacitor (THOLD) a entrada desconectada e inicia-se o processo de converso da tenso armazenada no capacitor, que feito pelo mtodo de aproximaes sucessivas. A figura 3.12 apresenta o circuito equivalente da entrada da do ADC.

Figura 6.7 - Diagrama em blocos do ADC do PIC18F4550

Exsto Tecnologia

XM118 Microcontroladores PIC18

181

A resistncia da fonte da tenso a ser convertida (Rs no circuito acima) no deve ser superior a 10k, caso contrrio o capacitor CHOLD pode no ser completamente carregado quando se iniciar a converso resultando em uma medida incorreta. Alm disso, o processo de converso s poder ser iniciado depois de decorrido o tempo de carga do capacitor (THOLD). A ativao do processo de converso ser explicada mais adiante. O tempo total de amostragem, que vai do instante em que o canal a ser amostrado selecionado ao momento em que o resultado da converso armazenado nos registros de resultado do AD, a soma do tempo de aquisio com o tempo de converso. O tempo de aquisio varia em funo da temperatura, da tenso de alimentao e da resistncia da fonte do sinal a ser amostrado. Para temperaturas inferiores a 25oC, alimentao de 5V o tempo de aquisio encontra-se no intervalo:

11 s < TAQ < 20s

Onde o menor tempo conseguido para uma Rs = 0 e o maior para Rs = 10k. J o tempo de converso depende do clock de converso. Esse clock pode ser selecionado como Fosc/2, Fosc/8, Fosc/32 ou baseado em um oscilador RC interno. Quando utilizando a fonte de clock proveniente do oscilador RC o processo de converso pode ocorrer estando o microcontrolador em modo SLEEP. Finalmente, aps uma converso ser concluda necessrio aguardar 2 perodos do clock de conversa antes de se reiniciar o processo. Para a utilizao do ADC so utilizados 4 registros especiais ADRESH : registro de resultado do A/D (MSbits); ADRESL : registro de resultado do A/D (LSbits); ADCON0 : registro de controle 0; ADCON1 : registro de controle 1. 6.4.6.1 Interrupo

Exsto Tecnologia

XM118 Microcontroladores PIC18

182

O evento de interrupo do ADC trmino de uma converso completa. Para a implementao de sistemas de amostragem, onde o intervalo entre as amostras fixo, pode-se configurar um timer com interrupo que inicie o processo de converso do ADC e habilitar a interrupo do ADC para tratar as amostras quando a converso terminar. 6.4.6.2 Funes O As funes para uso do ADC esto na biblioteca adc.h. Prottipos
char BusyADC( void );

Funo
BusyADC

Descrio Retorna 1 se o ADC estiver realizando uma converso.

CloseADC ConvertADC OpenADC SetChanADC ReadADC

void CloseADC( void ); void ConvertADC( void ); void OpenADC( unsigned char config, unsigned char config2 ); void SetChanADC( unsigned char channel ); int ReadADC( void );

Desabilita o modo ADC. Inicia uma converso Configura o ADC Seleciona um canal do ADC L o resultado da converso

Figura 6.8 Funes de uso do ADC Um cuidado especial deve existir quando se deseja desativar as entradas analgicas para fazer uso dos pinos a elas relacionados como I/O digitais. A funo CloseADC() no desativa as entradas analgicas, sendo necessrio utilizar OpenADC(ADC_1ANA_0REF, ADC_INT_OFF).

6.5 CCP Captura, Comparao e PWM

O mdulo CCP (Captura, Comparao e PWM) permite realizar uma srie de funes por hardware. Para exemplificar a versatilidade desse perifrico, podemos citar como exemplos de sua utilizao: gerao de sinais de PWM, gerao de sinais analgicos, medida de freqncia, medida de largura de pulso, dentre vrias. Existem trs modos de operao: Captura Comparao PWM (Modulao por largura de pulso)

Esse perifrico controlado por dois registros que operam conjuntamente como um parmetro de 16 bits (CCP1H e CCP1L) e um registro de controle (CCP1CON). Alm disso, dependendo do modo selecionado, o mdulo CCP interagem com os timers.
Exsto Tecnologia

XM118 Microcontroladores PIC18

183

Por fim, existe uma interrupo associada ao mdulo CCP, que disparada em situaes diferentes para cada modo. 6.5.1 Modo captura No modo captura, o valor do timer 1(TMR1H:TMR1L) armazenado nos registros CCP1H:CCP1L armazenado quando ocorre um evento. Alm disso, o flag CCP1IF setado, permitindo acionar a interrupo. Esse evento pode ser a ocorrncia de: 1 transio de descida no terminal RB3/CCP1 RB3/CCP1; 1 transio de subida no terminal RB3/CCP1 RB3/CCP1; 4 transies de subida no terminal RB3/CCP1 RB3/CCP1; 16 transies de subida no terminal RB3/CCP1 RB3/CCP1.

Para operao nesse modo, o terminal RB3/CCP1 deve estar configurado como entrada O timer entrada. deve estar no modo temporizador ou no modo contador sncrono. O modo captura pode ser utilizado para determinar a diferena de tempo entre dois eventos. tura Isso pode ser feito de duas formas. No primeiro evento, o timer reiniciado e no segundo, o valor reiniciado capturado do timer 1 multiplicado pelo perodo do seu clock corresponde ao t tempo transcorrido entre os dois eventos. Outra forma deixar o timer 1 incrementado livremente e capturar seu valor nos dois eventos. Fazendo uma subtrao entre os dois valores capturados, temos o tempo entre os eventos. Esse procedimento pode ser utilizado para medir velocidade e freqncias (nesse caso utilizado temos o perodo e sabemos que f = 1/T). Os modos onde o evento de captura a ocorrncia de 4 ou 16 transies podem ser vistos como tendo uma pr-escala na entrada. Essa pr escala pode ser til para tr escala pr-escala trabalhar com sinais de freqncias altas. Sua contagem s pode ser zerada com a mudana de modo do CCP. A figura abaixo apresenta o diagrama em blocos para o modo de captura.

Figura 4.1 Diagrama do modo captura

Exsto Tecnologia

XM118 Microcontroladores PIC18

184

Durante o modo SLEEP, se ocorrer um even o flag setado, mas o valor d Timer 1 no evento, do capturado, pois o timer 1 (como temporizador ou contador sncrono) no opera durante o SLEEP. 6.5.1.1 Interrupes O bit CCPxIF quando ocorre um evento de captura.

6.5.1.2 Funes As funes associadas ao modo de captura esto na biblioteca capture.h e so apresentadas a captura seguir lembrando que o PIC18F4550 possui um mdulo CCP2 convencioal e um mdulog ECCP1 (Enhanced CCP). Funo
CloseCapture2 OpenCapture2 ReadCapture2 CloseECapture1 OpenECapture1 ReadECapture1

Prottipos
void CloseCapture2( void ); void OpenCapture2( OpenCapture2(unsigned char config); unsigned int ReadCapture2( void ); void CloseECapture1( void ); void OpenEC OpenECapture1(unsigned char config); unsigned int ReadECapture1( void );

Descrio Desativa o modo captura (CC (CCP) Configura o mdulo de captura (CCP) L o valor capturado Desativa o modo captura (ECCP) Configura o mdulo de captura (ECCP) L o valor capturado (ECCP)

Figura 4.2 Funes de Captura 6.5.2 Modo comparao Nesse modo, o par de registro do mdulo CCP (CCP1H:CCP1L) constantemente comparado registros com o par de registros do timer 1 (TMR1h:TMR1L). Quando eles coincidem, setado o flag CCP1IF. Alm disso, podemos zerar o timer 1 ou forar um estado no pino RB3/CCP1. Quando optamos por zerar o timer 1, o funcionamento muito parecido com o do timer 2 em relao ao registro PR2. amento Quando se seleciona os modos que foram estados (1 ou 0) no pino RB3/CCP1, o pino fica no estado oposto ao desejado at que ocorra a coincidncia. Nesse caso, o pino deve ser configur configurado como sada. A figura 3.8 apresenta o diagrama do modo comparao.

Exsto Tecnologia

XM118 Microcontroladores PIC18

185

Figura 4.3 Diagrama do modo comparao 6.5.2.1 Interrupo O bit CCPxIF setado quando o Timer 1 e o valor de CCPRxH:CCPRxL coincidem. 6.5.2.2 Funes A funes de comparao, presentas na biblioteca compare.h so apresentadas a seguir,

lembrando que o PIC18F4550 possui um mdulo CCP2 convencioal e um mdulog ECCP1 (Enhanced CCP): Funo
CloseCompare2 OpenCompare2 CloseECompare1 OpenCompare1

Prottipos
void CloseCompare1( void ); void OpenCapture1(unsigned char config); void CloseCompare1( void ); void OpenCapture1(unsigned char config);

Descrio Desativa o modo captura (CCP) Configura o mdulo CCP em modo de captura Desativa o modo captura (CCP) Configura o mdulo CCP em modo de captura

6.5.3

Modo PWM No modo PWM o mdulo CCP permite utilizar sinais modulados em largura de pulso (PWM

Pulse Width Modulation), que consiste em representar um valor pelo duty-cicle (isto , tempo em alto) de um trem de pulsos de freqncia fixa. Por exemplo, admitindo-se que trabalhando com o PWM do PIC, sua resoluo mxima de 10 bits, ou seja, 1023 correspondem a 100% de duty-cicle. Usando uma regra de trs simples, podemos determinar a quanto que corresponde 30%, 25%, 99%, etc. Este processo chamado de modulao porque permite carregar uma informao (expressa no duty-cicle) em uma portadora (trem de pulsos). A maior parte das aplicaes de PWM para microcontroladores se aproveita da propriedade da energia de um sinal retangular ser proporcional ao seu duty-cicle (a energia de um sinal est relacionada com a rea entre o sinal e o eixo do tempo). Vamos imaginar que um sinal PWM aplicado a uma lmpada DC. Um duty-cicle de 100% (sinal sempre em 1) far a lmpada acender em sua potncia mxima; j um sinal com 70% de tempo em alto entrega a lmpada 70% da potncia mxima, e assim por diante. Essa propriedade utilizada no acionamento de cargas DC, controle de motores, etc. Outra caracterstica importante do PWM que, se o sinal for filtrado, podemos obter nveis analgicos, tambm proporcionais ao duty-cicle. Isso permite que geremos desde nveis analgicos fixos at sinais mais complexos, como tons DTMF (de telefonia).

Exsto Tecnologia

XM118 Microcontroladores PIC18

186

O PWM precisa de uma base de tempo que dar a freqncia do sinal. O mdulo CCP utiliza o Timer 2 para conseguir essa base. Isso pode ser observado no diagrama de blocos do PWM, na figura 3.9. Tambm necessrio que o pino RB3/CCP1 seja configurado como sada.

Figura 4.4 Diagrama em blocos no modo PWM

A gerao do sinal PWM se d da seguinte maneira. Cada vez que TMR2 coincide com PR2, o pino RB3/CCP1 setado e TMR2 reiniciado. Isso nos d a freqncia do sinal. O duty-cicle conseguido comparando o CCPR1H concatenado com dois bits de latch com TMR2 concatenado com mais dois bits, da pr-escala ou gerados pelos ciclos Q; Quando h a coincidncia, o pino RB3/CCP1 zerado. As concatenaes nos do 10 bits de resoluo. Esse processo pode ser observado na figura a seguir. O registro CCPR1H no acessvel para leitura no modo PWM. O duty-cicle configurado atravs de CCP1L e dos bits 4 e 5 de CCP1CON. Esse valor atualizado em CCPR1H e nos bits de latch a cada perodo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

187

Figura 4.5 Sinal PWM

Configurar o PWM estabelecer sua freqncia e seu duty-cicle. De posse desses dois parmetros, podemos calcular os valores em cada registro. O perodo o inverso da freqncia e configurado atravs de PR2 e da pr-escala do TMR2 e pode ser calculado atravs da equao a seguir:

TPWM = ( PR 2 + 1) 4 TOSC (TMR 2 PS )


Onde: TPWM : perodo do PWM TOSC: perodo do oscilador TMR2PS: fator de pr-escala do timer 2

(4.1)

Para encontrar o valor de PR2 a partir de um dado valor de perodo pode ser usada a equao 4.2. Valor de PR2 deve ser inteiro e menor que 256. Logo, em alguns casos ser necessrio arredondar esse valor, o que gerar um pequeno erro entre a freqncia desejada e a real. Com valores diferentes de pr-escala podemos chegar a valores menores que 256 e a aproximaes que levem a um erro menor.

PR2 =

TPWM 1 4 TOSC TMR2 PS

(4.2)

Exsto Tecnologia

XM118 Microcontroladores PIC18

188

O duty-cicle por sua vez configurado atravs de CCPR1L e dos bits 4 e 5 de CCP1CON. Geralmente se especifica o duty-cicle em porcentagem do tempo total. Assim, dado um duty-cicle em porcentagem (DC%), o tempo correspondente a ele encontrado pela equao abaixo.

TDC = TPWM DC %

100

(4.3)

Esse tempo tambm pode ser calculado pela equao 4.4.

TDC = DC[9 : 0] TOSC TMR 2 PS


Onde: TPWM : perodo do PWM; TOSC: perodo do oscilador; TMR2PS: fator de pr-escala do timer 2;

(4.4)

DC[9:0] : um valor de 10 bits obtido acrescentando os bit 5 e 4 a esquerda de CCP1RL. Dispondo do tempo do duty-cicle, o valor de DC[9:0] dado pela equao abaixo. Esse valor deve ser inteiro e menor que 1023. O valor da pr-escala deve ser o mesmo utilizado para a determinao do perodo.

DC[9 : 0] =

T DC TOSC TMR 2 PS
(4.5)

O perodo (e conseqentemente a freqncia) dado pelo registro PR2. Para freqncias altas (perodos pequenos) existe uma perda da resoluo, isto , na verdade trabalhamos com menos
Exsto Tecnologia

XM118 Microcontroladores PIC18

189

de dez bits. Por exemplo, se o valor usado para PR2 for 63, os dois bits mais significativos so perdidos e 100% de duty-cicle corresponder 255. Teremos um PWM de 8 bits. A resoluo, dada em bits, para uma dada freqncia de PWM dada pela equao 4.6:

log( RESOLUO =

FOSC ) FPWM log(2)

(4.6)

6.5.4

EPWM O EPWM (Enhanced PWM, PWM avanado) em um modo de operao que o PWM assume

algumas caractersitcas especiais para acionamento de pontes de transisores ou FET, com a funlo de chaveamento usadas em UPS e controle de motores. Esse modo no ser tratado neste curso. 6.5.4.1 Interrupo No h interrupo associada ao modo PWM.

6.5.4.2 Funes Funo


ClosePWM2 OpenPWM2 SetDCPWM2 CloseEPWM1 OpenEPWM1 SetDCEPWM1 SetOutputEPWM1

Prottipos
void ClosePWM2( void ); void OpenPWM2( char period ); void void void void void SetDCPWM2( unsigned int dutycycle ); CloseEPWM1( void ); OpenEPWM1( char period ); SetDCEPWM1(unsigned int dutycycle ); SetOutputEPWM1 ( unsigned char outputconfig, unsigned char outputmode);

Descrio
Desativa o canal PWM (CCP) Configura o canal PWM (CCP) Escreve o Duty-cycle (CCP) Desativa o canal PWM (ECCP) Configura o canal PWM (ECCP) Escreve o Duty-cycle (ECCP) Configura o modo de sada do ECCP

Figura 4.6 Funes para PWM

6.6 EUSART Porta Serial Assncrona


6.6.1 Comunicao serial assncrona A comunicao entre circuitos eletrnicos digitais pode ser feita basicamente de duas

maneiras: de forma paralela ou serial.

6.6.2

Comunicao paralela No envio de dados de forma paralela todos os bits que compe uma palavra so transmitidos

ao mesmo tempo e por diferentes condutores. O exemplo clssico so os barramentos dos PCs, facilmente reconhecveis pelas diversas trilhas que correm paralelas na placa de circuito impresso.
Exsto Tecnologia

XM118 Microcontroladores PIC18

190

Esse tipo de comunicao exige pouco ou nenhum preparo para o envio, visto que os dados so tratados dentro do processador de forma paralela. Outra caracterstica dessa forma de comunicao a velocidade. Como a informao toda enviada de uma s vez, a transferncia de informaes ocorre em tempo mnimo. As limitaes dessa tcnica surgem quando as distncias entre os pontos que se deseja comunicar aumentam. Em primeiro lugar para interconexo de equipamentos em distncias grandes o uso de comunicao paralela exige conectores de muitos pinos e cabos de vrias vias.Como pode ser intudo, o custo dos cabos e conectores proporcional ao nmero de vias do cabo. Alm do custo dos cabos outro impedimento para a comunicao paralela so os efeitos reativos (capacitivos e indutivos) dos meios de comunicao paralela (sejam eles cabos ou trilhas numa placa). Em altas taxas de transmisso devemos considerar os condutores a luz da teoria de guias de ondas, que de forma resumida nos diz que em altas freqncias um fio ou uma trilha no devem ser encarados como um curto-circuito, mas como uma associao de resistncias, capacitncias e indutncias. Em virtude disso os sinais podem se degradas por interferncia mtua e tambm, pelas prprias caractersticas do meio. Outro ponto importante o rudo (interferncia) inserido nos condutores e proveniente do onde eles esto. Novamente o maior nmero de condutores agrava a situao. Esses fatos so inerentes a qualquer linha de transmisso de sinais eltricos, mas o agravamento dos problemas na comunicao paralela que cada linha de transmisso um meio diferente das demais, ou seja, cada bit degradado de forma diferente. Isso pode acarretar problemas na comunicao de dados a distncias longas (o critrio para dizer se uma distncia grande sua comparao com o comprimento de onda do sinal que se transmite). Assim limita-se a comunicao para pequenas distncias em alta velocidade (por exemplo, barramentos do PC) ou a distncias maiores com baixa taxa de transmisso (por exemplo, comunicao entre PC e impressora).

6.6.3

Comunicao serial A forma encontrada para solucionar os problemas apresentados pela comunicao paralela a

foi transmitir os bits de forma serial, ou seja, um bit de cada vez. Quanto ao quesito custo essa forma de transmisso bastante eficiente, porque em sua forma mais simples pode ser implementada com apenas dois condutores, um para envio de dados e outro de referncia.

Exsto Tecnologia

XM118 Microcontroladores PIC18

191

A comunicao serial tambm traz vantagens no aumento das taxas e das distncias de comunicao. Tcnicas para a reduo de rudo e degradao do sinal podem ser aplicadas mais facilmente quando a informao transita por um nico caminho. Alm disso, no h problemas em os bits serem afetados de forma diferente, pois so tratados separadamente. Em contrapartida, a comunicao serial demanda um circuito mais complexo, uma vez que a informao que tratada de forma paralela pelo processador deve ser convertida para o formato paralelo. Pelo mesmo motivo, a transmisso mais lenta que a paralela (observando apenas o tempo do envio de uma informao). O principal problema a ser resolvido na comunicao serial, porm, saber quando um bit termina e quando comea o prximo. E ainda, os cabos no deixam de serem guias de ondas, apresentando os problemas discutidos acima e mantendo sempre uma relao de compromisso entre o comprimento dos cabos e a taxa transmisso mxima. Por todas essas razes a quase totalidade das conexes entre equipamentos feita por comunicao serial. Entre as formas de comunicao serial mais difundida podemos citar o EIA-232, EIA-485, o USB e mesmo as LANs Ethernet. A comunicao serial pode ser feita de duas maneiras principais, a sncrona e assncrona, que diferem na forma de localizar cada bit em uma rajada. Como o prprio nome diz, na comunicao serial sncrona existe um sincronismo, nesse caso entre o sinal transmitido e um clock enviado juntamente. O clock permite determinar o exato momento em que o bit do sinal deve ser lido, evitando assim erros na recepo e a correta montagem do dado na forma paralela. Entres as formas de comunicao serial sncrona podemos citar o I2C e o SPI, que no sero tratados aqui. J na comunicao assncrona nenhuma referencia de onde o bit deve ser lido enviado com o sinal. A soluo nesse caso adivinhar o momento certo de ler o bit. Para isso necessrio que o receptor saiba a taxa de transmisso e portanto a durao de cada bit. Ainda que o transmissor indique de alguma forma onde comea e onde termina a transmisso. Dessa maneira, o receptor aguarda a chegada da indicao de incio, chamado start bit ou bit de incio e quando esse lido ele sabe que a cada intervalo de tempo, chamado tempo de bit (Tb) um bit novo est presente na via de comunicao. Para minimizar o risco de erro a leitura feita na metade da durao do bit ou so feitas algumas amostras durante esse intervalo de tempo. Aparentemente, se procedermos dessa forma, bastaria enviar um start bit e para sincronizar receptor e transmissor e depois poderia vir uma seqncia infinita de bits. Na verdade, porm, isso no ocorre, pois sempre existira uma pequena diferena entre as bases de tempo de TX e RX. Como
Exsto Tecnologia

XM118 Microcontroladores PIC18

192

uma amostra ocorre Tb aps a anterior, se esse tempo estiver errado, o erro vai se acumulando at que se perca o sincronismo. Por exemplo, se o relgio de RX for 5% mais lento ou mais rpido que o de TX a cada 20 bits recebido o sincronismo ser perdido. Na prtica os dados so enviados em pacotes de alguns bits, iniciados por um start bit e terminados por um stop bit. O stop bit tem a funo de marcar o fim do pacote, para que um bit de informao no seja confundido com um novo start bit. O formato genrico utilizado em um pacote de comunicao serial apresentado na figura abaixo.

Tempo ocioso (opcional) 1, 1 ou 2 stop bits Bit de paridade (opcional) 5 a 9 bits de dados 1 start bit

Figura 3.1 Comunicao Assncrona

6.6.4 EUSART do PIC18F4550 O mdulo EUSART do PIC18F4550 permite gerar sinais de comunicao assncrona segundo o exposto acima. Ela capaz de operar em modo full-duplex (transmisso e recepo simultneas) e gerar uma taxa de transmisso/sincronismo de FOSC/4 bits por segundo. A EUSART do PIC controlada pelos registros: TXSTA: Controle de transmisso; RCSTA: Controle de recepo; BAUDCON: Controle da taxa de transmisso;
Exsto Tecnologia

XM118 Microcontroladores PIC18

193

SPBRGH: SPBRG: Gerador de taxa de transmisso.

Operando em modo assncrono, a EUSART composta de um mdulo de recepo e um de transmisso que trabalham de forma independente, apenas compartilhando o mesmo gerador de taxa de recepo/transmisso. A figura 1.2 apresenta o diagrama em blocos do sistema de recepo enquanto a figura 1.3 apresentar o diagrama em blocos do mdulo de transmisso.

Figura 3.2 - Mdulo de Recepo

Figura 3.3 - Mdulo de Transmisso 6.6.4.1 Gerador de taxa de transmisso Para gerar a temporizao necessria para a transmisso e a recepo, existe um gerador de

taxa de transmisso (baud rate). Esse gerador deve ser configurado para a taxa de transmisso desejada levando-se em considerao a freqncia de clock do oscilador principal. O gerador de baud rate pode operar em dois modos, taxas altas e taxas baixas. Conforme a seleo do modo usada uma das seguintes equaes: Taxas altas (USART_BRGH_HIGH)
Exsto Tecnologia

XM118 Microcontroladores PIC18

194

16 16 Taxas baixas (USART_BRGH_LOW) 64 64 desejada

1 1

1 1

Sendo spbrg o valor a ser carregado no gerador de baud rate e BR a taxa de transmissao

Deve-se estar atento, pois valor calculado pode no ser um inteiro. Neste caso, ao fazer a aproximao para um inteiro mais prximo o valor de taxa de transmisso pode ser muito diferente do valor nominal. Sempre que arredondar o valor obtido para spbrg calcule a taxa real obtida com o valor de spbr e obtenha o erro atravs da equao a seguir.

100

Na prtica, podem ocorrer problemas de comunicao para se a diferena entre o valor real e o nominal forem maiores que 5%. 6.6.4.2 Interrupo O flag de interrupo de recepo (RCIF) setado (colocado em nvel um) quando um novo

byte recebido com sucesso. Uma aplicao til usar a RTI para receber um buffer de vrios bytes e tratar apenas quando todos os dados chegarem. Por sua vez, o flag de interrupo de recepo (TXIF) setado quando um byte enviado pela serial (buffer de transmisso vazio). Isto permite construir RTI que transmitam seqencialmente um buffer de diversos bytes sem que o programa principal tenha que aguardar a transmisso de cada byte, seja qual for a taxa de transmisso. 6.6.4.3 Funes O C18 define diversas funes de uso da USART. Uma opo trabalhar com o conjunto de

funes definidos pelo C18 par USART na biblioteca USART.H. Funo


BusyUSART CloseUSART DataRdyUSART

Prottipos
char BusyUSART( void ); void CloseUSART( void ); char DataRdyUSART( void );

Descrio Retorna 1 se a USART est transmitindo Desabilita USART Retorna 1 se um byte foi recebido
Exsto Tecnologia

XM118 Microcontroladores PIC18

195

getcUSART getsUSART OpenUSART putcUSART putsUSART putrsUSART ReadUSART WriteUSART baudUSART void getsUSART ( char *buffer, unsigned char len ); void OpenUSART( unsigned char config, unsigned int spbrg); char getcUSART( void ); void putsUSART( char *data ); void putrsUSART( const rom char *data ); char ReadUSART( void ); void WriteUSART( char data ); void putcUSART( char data );

L um byte da USART L uma string da USART Configura USART Envia um byte pela USART Envia um string alocada na RAM pela USART Envia um string alocada na FLASH pela USART L um byte da USART Envia um byte pela USART Configura a taxa de transmisso,

Figura 3.4 Funes da USART Outra opo trabalhar com as funes padronizadas do C ANSI para sada de caracteres, presentes na biblioteca STDIO.H. Essa biblioteca define funes para entrada e sada de dados por uma porta do sistema, que no caso do C18 a EUSART. Estas funes permitem apenas a escrita de dados, e no sua leitura. No decorrer do curso muitas vezes ser usada a funo printf(). Contudo, seu uso deve ser evitado na prtica, devido ao tamanho do cdigo gerado por ela. Existem ainda funes que permitem implementar a comunicao serial atravs de pinos de I/O, das quais no trataremos. Essas funes esto na biblioteca SW_UART.. 6.6.5 EIA-232C Popularmente conhecido como RS-232, esse protocolo foi inicialmente desenvolvido para permitir a comunicao entre computadores e modens, para transmisso de dados a longa distncia. A norma que rege o protocolo a TIA/EIA-232, cuja reviso C a mais recente (1969). Devido a sua aplicao inicial como protocolo de comunicao entre um terminal de computador e um equipamento de comunicao, o protocolo estabelece os conceitos de DTE (Data Terminal Equipament Equipamento Terminal de Dados) e DCE (Data Communication Equipament Equipamento de comunicao de dados). O sentido dos pinos de comunicao dado do ponto de vista do DTE. Como tipicamente o EIA-232 utilizado para comunicao entre um computador e o microcontrolador vamos sempre admitir aqui que computador o DTE e o microcontrolador DTE. A norma especifica vrios pinos mas na prtica os mais utilizados so os apresentados na tabela abaixo. As funes e direes dos pinos so dadas em funo do DTE Pino TxD RxD Funo Transmisso do DTE para o DCE Transmisso do DCE para o DTE Direo Sada Entrada

Exsto Tecnologia

XM118 Microcontroladores PIC18

196

RTS CTS DSR DTR

Sinaliza que o DTE est pronto para receber dados do DCE Sinaliza que o DCE est pronto para receber dados do DTE DCE pronto para operao DTE pronto para operao

Sada Entrada Entrada Sada

Os pinos DSR e DTR servem para indicar que os equipamentos esto conectados e prontos para comunicao. DTS e CTS servem para fazer controle de fluxo: Quando o DTE tem dados para transmitir ele informa o DCE atravs de RTS; se o DCE pode receber esses dados CTS ativado. A sinalizao so ativadas em 0 e desativadas em 1. Em uma grande maioria dos casos so utilizados apenas os terminais de transmisso e recepo de dados, podendo ser usado um cabo com apenas 3 fios (TxD, RxD e Terra). Segundo a norma, a comunicao serial pode suportar taxas de bit (geralmente chamadas baud rate) de at 20 kbps. possvel realizar comunicao full-duplex, ou seja, nos dois sentidos ao mesmo tempo. A distncia mxima do cabo de comunicao deve ser inferior a 15 metros (50 ps). Umas das principais causas da limitao de taxa e distncia do EIA-232C limitao nos tempos de subida e descida do sinal, que deve ser menor que 4% do tempo tempo de bits. As especificaes eltricas do EIA-232C podem ser observadas na figura abaixo.
TX Cabo RX

+15V

+15V

+5V

0 +3V -3V

?
-5V -15V

1 -15V

No transmissor o nvel lgico 0 representado por uma tenso entre +5 e +15 Volts e o nvel lgico 1 representado por tenses entre -5 e -15 Volts. No receptor tenses entre +3 e +15 Volts so interpretadas como 0 e entre -3 e -15 Volts interpretadas como 1; tenses entre +3 e -3 Volts levam a estados ideterminados. A diferena entre os limites de tenso no transmissor (-5V e +5V) e
Exsto Tecnologia

XM118 Microcontroladores PIC18

197

os limites do receptor (-3V e +3V) constitui a margem de segurana, dentro da qual rudos e eventuas perdas no cabo no degradam os dados. As tenses mxima mnima que podem ser aplicadas ao receptor sem que haja dano so, respectivamente, +25V e -25V. Alm disso, a norma especifica que qualquer curto circuito entre quaisquer pinos, inclusive o pino de terra, no devem causar dano ao circuito. Como na maioria das aplicaes trabalha com circuitos alimentados com +5V so necessrios conversores de nvel para criar uma interface eltrica com o EIA-232, dentre os quais os mais conhecidos so o MAX232 e seus equivalentes. 6.6.6 EIA-485 Outro padro muito difundido, principalmente no meio industrial, o EIA-485, tambm conhecido como RS-485. As principais vantagens desse padro sobre o EIA-232C so as maiores distncias alcanadas e a possibilidade de operao em rede com mltiplos usurios. No EIA-485 a transmisso feita por dois fios de forma balanceada. Isso significa que por um condutor enviado um sinal A e pelo outro condutor uma cpia invertida B (B = -A) desse sinal. Na recepo h um circuito diferenciador que faz diferena entre o sinal A e B, portanto na sada desse circuito temos

S = A B , mas B = A S = A ( A) = 2 A

(1)

Como o rudo age de forma aditiva, somando-se ao sinal dos dois condutores, na recepo o efeito do rudo cancelado pela ao do diferenciador, conforme pode ser observado em (2), onde R representa o sinal de rudo.

S = ( A + R) ( B + R) = ( A + R) ( A + R) S = A + R + A R = 2 A

(2)

Alm disso, a rede casada com resistores de terminao, o que reduz a degradao por reflexo do sinal. Podemos ligar diversos usurios em rede, sendo tipicamente usada a topologia de barramento para tanto. Em um barramento EIA-485 somente um dos terminais pode transmitir por vez, ficando os outros com o driver de sada desligado. Portanto s possvel a comunicao no modo half-duplex. A figura abaixo mostra os esquemas ligao de diversos transceptores a rede. Os resistores RT so resistores de terminao e devem ser colocados nas extremidades do barramento. Seu valor tpico 120 ohm, portanto um valor equivalente de 60 ohm.

Exsto Tecnologia

XM118 Microcontroladores PIC18

198

O nmero mximo de pontos na rede limitado pela carga que cada terminar receptor representa para o barramento, que deve ser de 1mA para 12V, e pelas caractersticas do buffer de sada. Seguindo padro EIA-485 a quantidade de pontos fica limitada a 32 pontos, mas atualmente existem tranceivers com caractersticas alteradas que permitem at 128 pontos na rede. A distncia mxima possvel na rede de aproximadamente 1200m (4000 ps). A taxa mxima de transmisso de 10Mbps. A taxa de transmisso dada em funo dos tempos de subida (tR) e descida do sinal (tF), sendo que no EIA-485 os TR e TF podem corresponder a 30% do tempo total do bit.Assim:

RMAX = 1/ t B = 0,3 / t R
Sendo: RMAX Taxa mxima de bits tB tR Tempo de bit Tempo de subida.

(3)

O tempo de subida depende do tipo e comprimento do cabo. Os sinais eltricos no barramento devem estar entre -7 e +12 Volts em relao a referncia. A diferena de tenso entre os sinais A e B tambm deve estar entre -7 e +12Volts. Podem ser detectados sinais entre A e B com diferena a partir de que 200mV e a diferena mnima no transmissor de 1,5V, o que resulta em uma margem de segurana de 1,3 Volts. Temos nvel lgico 1 quando VA > que VB e nvel lgico 0 quando VA<VB. Dos tranceptores mais utilizados no mercado podemos citar o MAX485 e seus equivalentes e o SN75176. Esses dois modelos so compatveis entre si e possuem habilitao individual dos drivers de recepo e transmisso. 6.6.7 Protocolos de comunicao Em aplicaes de comunicao muitas vezes no basta apenas transmitir os dados que se deseja de um receptor para um transmissor. Por exemplo, devemos implementar meios de detectar eventuais erros na transmisso ou delinear o incio se fim da mensagem. Alm disso, em redes com mltiplos
Exsto Tecnologia

XM118 Microcontroladores PIC18

199

usurios necessrio identificar qual o usurio a que se destina o dado e criar mtodos que evitem a coliso de dados(dois usurios transmitindo ao mesmo tempo na rede). Essas so funes da camada 2 do modelo OSI, a camada de enlace, e podem ser implementadas atravs de rotinas que obedeam um protocolo de comunicao. A funo dessas rotinas prover o transporte dos dados atravs de diversos mecanismos e entregar os dados para a aplicao. 6.6.7.1 Comunicao ponto-a-ponto (para EIA-232) Nesse caso tpico de aplicao para o padro EIA-232 temos comunicao bidirecional full-duplex, portanto no h risco de coliso e qualquer um dois equipamentos (no caso, o PC e o microcontrolador) podem iniciar a comunicao. Abaixo apresentado o formato do frame desse protocolo, que a forma como os dados sero encapsulados para transmisso.
Tamanho 1 STX 1 NB 0 ~ 254 Dados 1 CKS

STX: byte 0x02; sinaliza o incio do frame; 1 byte. NB: Nmero de bytes que vm a seguir; 1 byte; Dados:informao til; de 0 a 254 bytes; CKS: checksum, calculado a partir de todos os demais campos STX serve para identificar o incio do frame. Como NB informa quantos bytes devem ser recebidos, possvel determinar onde termina o frame. O ltimo campo do frame o checksum, que uma soma em mdulo dois (operao ou-exclusiva) de todos os bytes do frame. O checksum calculado no transmissor e novamente no receptor. Se o checksum calculador no receptor no for o mesmo do enviado, significa que houve algum erro na transmisso. Se for implementado um sistema re retransmisso caso ocorram erros o transmissor deve iniciar um timer quando um byte for recebido. Esse timer deve estar configurado para estourar no tempo mximo de espera aceitvel para uma reposta. Caso um frame seja recebido com sucesso, um frame com um confirmao positiva enviado de volta. S houver erro, enviada uma confirmao negativa. Por fim, se o timer do transmissor estourar (time-out) e no for recebido nenhuma confirmao, o frame deve ser retransmitido. 6.6.7.2 Comunicao ponto-multiponto (para EIA-485) Em redes 485 podemos ter vrios terminais e a comunicao half-duplex, portanto existir uma disputa pelo uso do meio e caso dois terminais da rede transmitam ao mesmo tempo, a informao
Exsto Tecnologia

XM118 Microcontroladores PIC18

200

se perder. Alm disso necessrio identificar no frame o endereo do terminal ao qual ele se destina, portanto cada terminal deve ter um endereo individual. Se todos os terminais puderem iniciar a comunicao h uma grande probabilidade de ocorrncia de coliso. A soluo mais simples nesse caso determinar que um dos terminais (mestre) tenha iniciativa de iniciar a comunicao, sendo que os demais terminais (escravos) limitam-se a responder. Esse tipo de comunicao Mestre-Escravo (Master-Slave) bastante comum em aplicaes onde o terminal mestre um computador que comanda uma rede de escravos microcontrolados. Abaixo temos o aspecto do frame para a comunicao mestre escravo (comando).

Tamanho

1 STX

1 NB

1 End

0 ~ 253 Dados

1 CKS

STX: byte 0x02; sinaliza o incio do frame; 1 byte. NB: Nmero de bytes que vm a seguir; 1 byte; End: indica o endereo a que se destina o frame, se for 0xFF se destina a todos Dados:informao til; de 0 a 253 bytes; CKS: checksum, calculado a partir de todos os demais campos

A seguir temos o aspecto do frame para a comunicao escravo

mestre (resposta).

Tamanho

1 STX

1 NB

1 End

0 ~ 253 Dados

1 CKS

STX: byte 0x02; sinaliza o incio do frame; 1 byte. NB: Nmero de bytes que vm a seguir; 1 byte; End: indica de qual endereo a resposta Dados:informao til; de 0 a 253 bytes; CKS: checksum, calculado a partir de todos os demais campos Nesse caso o mecanismo de deteco de erro e repetio o mesmo do caso ponto-a-poonto.
Exsto Tecnologia

XM118 Microcontroladores PIC18

201

6.7 MSSP Porta Serial Sncrona


O PIC18F4550 possui um mdulo MSSP (Master Synchronous Serial Port Porta de Comunicao Serial Sncrona Mestre). Esse mdulo permite a implementao de dois protocolos muito usados em comunicao entre circuitos integrados, o SPI (Serial Peripheral Interface) e o I2C (Inter-Integrated Circuits). Os modos possveis de operao so: Modo SPI; o o Modo mestre; Modo escravo.

Modo I2C. o o o 6.7.1 Modo mestre; Modo multi-mestre; Modo escravo.

SPI A comunicao SPI especifica 3 pinos de comunicao de dados: Clock (SCK), Entrada de

Dados (SDI) e Sada de Dados (SDO). Alm disso, cada perifrico SPI deve ter um sinal de habilitao baixo ativo (normalmente chamado CE Chip Enable ou CS Chip Select). A tabela abaixo apresenta os sinais, suas funes e os pinos correspondentes nos PIC18F452 e PIC18F4550.

Sinal SDO SDI SCK

Funo Sada de dados Entrada de dados Modo mestre: sada de clock Modo escravo: entrada de clock SS RA5 Habilitao no modo escravo. Figura 7.1 - Pinos para operao em SPI

Pino RC7 RB0 RB1

A conexo entre dispositivo SPI deve ser feita conforme o diagrama abaixo. Observe que a sada do mestre (SDO) ligagada a entrada dos escravos (SDI) e a sada dos escravos (SDO) ligada a entrada do mestre (SDI). Alguns fabricantes utilizam tambm a nomenclatura MISO (Master Input, Slave Output) e MOSI (Master Output, Slave Input) para simbolizar os pinos de dados.

Exsto Tecnologia

XM118 Microcontroladores PIC18

202

Figura 7.2 - Pinos para operao em SPI

O protocolo SPI permite a comunicao do microcontrolador com diversos outros componentes, formando uma rede. Operando em modo mestre, o microcontrolador gera o sinal de clock e deve ter um pino de I/O para a habilitao de cada perifrico SPI. O perifrico (escravo) habilitado se comunica com o microcontrolador (mestre) enquanto os demais, que no esto habilitados, ignoram a comunicao. Operando em modo escravo, o microcontrolador comporta-se como um componente da rede, recebendo o sinal de clock e sendo habilitado pelo pino SS. O diagrama em blocos do mdulo MSSP configurado para o modo SPI apresentado na figura abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

203

Figura 7.3 - Diagrama em blocos para o modo SPI

A taxa de transmisso do mdulo selecionada atravs da escolha da fonte de clock que pode ser FOSC/4,FOSC/16, FOSC/64 ou o sinal de coincidncia do timer 2 (nesse caso, o perodo de clock o dobro do tempo de coincidncia do timer 2). 6.7.1.1 Interrupo A interrupo no modo SPI acionada toda vez que um dado recebido ou enviado. 6.7.1.2 Funes O compilador C18 possui funes para comunicao SPI na biblioteca SPI.H descritas abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

204

Funo
CloseSPI DataRdySPI getcSPI getsSPI OpenSPI

Prottipo
void CloseSPI( void ); unsigned char DataRdySPI( void ); unsigned char getcSPI( void ); void getsSPI( unsigned char void OpenSPI( unsigned char unsigned char unsigned char rdptr, length ); unsigned char sync_mode, bus_mode, smp_phase);

Descrio Desabilita o mdulo MSSP Informa se recebeu dados L um byte L uma string Configura e habilita o MSSP em modo SPI Escreve um byte Escreve uma string L um byte Escreve um byte

putcSPI putsSPI ReadSPI WriteSPI

unsigned char putcSPI( unsigned char data_out ); void putsSPI( unsigned char *wrptr ); unsigned char ReadSPI( void ); unsigned char WriteSPI( unsigned char data_out );

Figura 7.4 - Funes da SPI 6.7.2 I2C O protocolo I2C especifica 2 sinais de comunicao, um com o sinal de clock (gerado pelo

mestre) e outro de dados, bidirecional. A tabela 3.5 apresenta os pinos do PIC18F452/PIC18F4550 usados para I2C. Sinal SDA SCL Pino Funo RC4 Dados seriais RA3 Clock (provido pelo mestre) Figura 7.5 - Pinos para operao em SPI

A conexo entre dispositivo I2C deve ser feita conforme o diagrama abaixo. Os resistores de pull-up so fundamentais, j que os drivers de sada de todos os dispositivos I2C so open-drain. Ao enviar dados um dispositivo I2C (mestre ou escravo) o que na verdade acontece que nos bits 0 o dispositivo satura um transistor aterrando o barramento e nos bits 1 ele corta esse transistor, ficando o nvel 1 garantido pelo resistor de pull-up. Dessa forma vrios dispositivos podem trocar informao sem risco de dano.

Exsto Tecnologia

XM118 Microcontroladores PIC18

205

VDD

SDA

SCL

SDA

SCL

SDA

SCL

Figura 7.6 - Diagrama em blocos para o modo I2C escravo

No protocolo I2C os diversos dispositivos ligados a um mesmo barramento possuem endereos individuais. Todos os dispositivos da rede recebem os comandos enviados pelo mestre, mas somente aquele endereado pelo mestre responde. O protolo I2C prev uma srie de comandos para controle de fluxo, informando incio e fim da comunicao e sinalizando se a mensagem foi recebida corretamente. O protocolo prev que a mudana de estado dos bits se d no intervalo de tempo em que o sinal de clock permanece em 0 e que enquanto SCK permanece em 1 o sinal permanea estvel, e quanto feita a leitura. A figura abaixo ilustra essa definio.

Para sinalizar incio e fim de comunicao so usadas as condies de Star e Stop, que so quebras da regra acima. Quando SCK est em 1 e SDA transita de 1 para 0 caracteriza-se uma condio de Start. Quando SCK est em 1 e SDC transita de 0 para 1 caracteriza-se uma condio de Stop. Essas sinalizaes so utilizadas para definir o incio e fim da comunicao, de forma que os escravos sejam sincronizados com o mestre. Abaixo temos a ilustrao dessas condies.

Exsto Tecnologia

XM118 Microcontroladores PIC18

206

Alm disso, a cada byte transmitido deve ser gerado pelo escravo que o recebe uma resposta de confirmao (ACK, do ingls acknowledge ). Essa condio obtida quando o escravo fora 0 em SDA no nono pulso de clock. Dependendo do protocolo do dispositivo pode ser gerando tambm um sinal de no-acknowledge (NACK), que caracterizado pela permanncia de SDA em 1 durante o nono bit. A figura abaixo representa essa sinalizao, mas esteja atento ao fato que no existem os sinais DATA IN e DATA OUT, so apenas representaes da origem do sinal em SDA (DATA IN gerado pelo mestre e DATA OUT pelo escravo).

Uma tpica operao de escrita (do mestre para o escravo) apresentada na figura a seguir (observe quais bits so gerados pelo mestre e quais so pelo escravo) onde apresentado apenas a sinalizao de dados, ficando subentendido o sinal de clock. A comunicao inicia-se com um Star gerado pelo mestre. Em seguida o primeiro byte define o endereo do dispositivo a ser acessado. O oitavo bit define se uma instruo de leitura (1) ou escrita (0). No nono bit o escravo responde um um ACK. Em seguida enviado um byte definindo um endereo de memria dentro do dispositivo, que tambm confirmado por um ACK. A partir da cada byte enviado armazenado em um endereo a partir do endereo inicial, at o mestre encerrar a comunicao atravs de um Stop.

Exsto Tecnologia

XM118 Microcontroladores PIC18

207

A seguir apresentado uma operao de leitura. O comando inicia-se com um Start, seguido do endereo do dispositivo (7 bits) e o oitavo bit em 1, indicando leitura. O escravo responde com ACK e passa a enviar seus dados seqencialmente. Note que sempre o mestre que gera o sinal de clock, o escravo apenas envia os dados para o barramento. A cada byte enviando pelo escravo o mestre responde com um ACK. No ltimo byte o mestre responde com um NACK, sinalizando o fim do envio de dados e finaliza a comunicao com um Stop.

Como deve ter sido observado, no foi especificado a partir de qual endereo o escravo deveria enviar seus dados. Isso porque, uma vez dado um comando de leitura o escravo passa a enviar seus dados para o mestre. Esses dados so enviados a partir do endereo atual, isto , do ultimo endereo gravado. Para realizar a leitura a partir de um endereo especfico o que se faz iniciar um processo de escrita e reiniciar a comunicao, forando um no Start, seguindo de um comando de leitura, conforme apresentado a seguir.

Exsto Tecnologia

XM118 Microcontroladores PIC18

208

Operando em modo escravo, o PIC18 comporta-se como um dos elementos da rede, tratando apenas os comandos destinados ao seu endereo. A figura a seguir apresenta o diagrama em blocos do mdulo MSSP operando em modo I2C escravo.

Diagrama em blocos para o modo I2C escravo

Operando em modo mestre, o microcontrolador deve gerar o clock para todos os dispositivos escravos da rede. Alm disso, ele deve gerar as condies de bit de partida (start bit) e bit de parada (stop bit) definidas pelo protocolo e verificar a bit de ACK (confirmao gerada pelo escravo). O diagrama em blocos do mdulo MSSP operando em modo I2C mestre mostrado na figura abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

209

Diagrama em blocos para o modo I2C mestre

No modo mestre o sinal de clock que controla a taxa de transmisso configurado atravs dos sete bits menos significativos do registro SSPADD. O valor carregado nesse registro decrementado duas vezes por ciclo de instruo. Quando chega a zero o estado do sinal de clock invertido e o valor recarregado para reiniciar a contagem de tempo. 6.7.2.1 Interrupo No modo I2C escravo o mdulo MSSP ir gerar uma interrupo toda vez que um comando

for enviado para o endereo do microcontrolador. Alm disso, pode-se configurar para que a interrupo ocorra toda vez que acontecer um bit de partida de um bit de parada. No modo I2C mestre o flag de interrupo ser acionado por qualquer um dos eventos abaixo: 6.7.2.2 Bit de partida Bit de parada Transmisso ou recepo completa Transmisso de ACK Repetio de bit de partida Funes

Exsto Tecnologia

XM118 Microcontroladores PIC18

210

Para uso do mdulo MSSP para comunicao I2C existe a biblioteca I2C.H. Funo Prottipo
AckI2C CloseI2C DataRdyI2C getcI2C getsI2C void AckI2C( void ); void CloseI2C( void ); unsigned char DataRdyI2C( void ); unsigned char getcI2C ( void ); unsigned char unsigned char unsigned char void IdleI2C( getsI2C( * rdptr, length ); void );

Descrio Gera condio de ACK Desativa o mdulo SSP Verifica se existem novos dados no buffer de recepo. L um byte L uma sequencia de byres (modo mestre apenas) Fica em loop enquanto o barramento I2C est inativo. Gera uma condio e NACK Configura o mdulo MSSP para operao em modo I2C Escreve um byte Escreve uma sequencia de bytes (modos mestre e escravo) L um byte. Gera uma condio de Restart Gera uma condio de Start Gera uma condio de Stop Escreve um dado

IdleI2C NotAckI2C OpenI2C

void NotAckI2C( void ); void OpenI2C( sync_mode, unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char slew ); putcI2C( data_out ); putsI2C( *wrptr );

putcI2C putsI2C

ReadI2C RestartI2C StartI2C StopI2C WriteI2C

unsigned char ReadI2C ( void ); void RestartI2C( void ); void StartI2C( void ); void StopI2C( void ); unsigned char WriteI2C( unsigned char data_out );

Tabela 7.9 - Funes de I2C muito comum o uso de memrias EEPROM seriais I2C. Em virtude disso, o C18 prov a biblioteca I2C.H funes especficas para comunicao com essas memrias. Essas funes so apresentadas na tabela 3.7. Funo
EEAckPolling EEByteWritex

Prottipo
unsigned char EEAckPolling(unsigned char control ); unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned char EEByteWrite( char control, char address, char data ); int EECurrentAddRead( char control ); char EEPageWrite( char control, char address, char * wrptr ); int EERandomRead( char control, char address ); char EESequentialRead( char control, char address, char * rdptr, char length );

Descrio Gera uma varredura de ACK Escreve um byte

EECurrentAddReadx EEPageWritex

L um dado do prximo endereo Escreve uma sequencia de dados L um dado de endereo qualquer um

EERandomRead

EESequentialRead

L uma seqncia de dados

Tabela 7.10 - Funes da EEPROM I2C

Exsto Tecnologia

XM118 Microcontroladores PIC18

211

6.8 USB
O protocolo USB foi inicialmente desenvolvido para ser uma forma prtica de conexo de perifricos a computadores (como mouse, teclado e impressoras), em substituies a portas seriais e paralelas. Esse padro evoluiu e hoje o pradrao de comunicao pra PCs, perifricos e dispositivos pessoais (iPOD, cmeras digitais, etc..). O protocolo USB apresenta diversas vantagens, das quais podemos citar: Altas taxas de transmisso Conexo Plug&Play Alimentao dos dispositivos atravs do cabo de comunicao. Conexo de diversos perifricos ao mesmo tempo Baixo custo Atualmente esto em uso dois padres, o USB 1.0 e o USB 2.0. O padro USB 1.0 suporta as velocidades de 1,5 Mbps (USB-LS Low Speed) e 12Mbps (USB-FS Full Speed). O padro USB 2.0 suporta ainda a velocidade de 480 Mbps (USB-HS High Speed), apesar de um dispositivo no ter que suportar HS para ser considerado compatvel com USB 2.0. A comunicao USB uma comunicao Mestre-Escravo, isto , um dispositivo principal (Mestre ou host) comanda um rede de perifricos (escravos ou devices). Portanto impossvel a comunicao entre 2 devices (por exemplo, um mouse no pode se comunicar com um pen-drive). Existe ainda dispositivos OTG, que podem se comportar como Host e como escravo. Abaixo uma lista dos tipos de dispositivos USB. USB Host: Gerencia o barramento, iniciando todas as comunicaes e alimentando os dispositivos. Tipicamente requer uma alta capacidade de processamento deve possuir drivers para as classes de dispositivos aos quais pode se conectar USB Device: Responde aos comandos do Host e alimentado por ele. USB OTG (On-The-Go): ao mesmo tempo mestre e escravo. Suporta apenas uma conector Mini-AB para conexo com Host (Mini A) e Device (Mini B). Embedded Host: opera como Host com algumas funcionalidades limitadas. Hub USB: permitem a expanso de portas USB. Permitem at 127 elementos na rede, sendo que pode-se usar no mximo 5 hubs em cascata. A figura abaixo ilustra os tipos de conectores que definem ao tipo de elemento que se deve conectar.

Exsto Tecnologia

XM118 Microcontroladores PIC18

212

O padro USB prev diversas classes de dispositivos. Dessa forma, dispositivos de funcionamento semelhante so tratado de forma padronizada. Por exemplo, pen-drives de diversos fabricantes e capacidades so tratados da mesma forma, pois pertencem a classe Mass Storage. A seguir so listadas as classes de dispositivos suportadas: udio Chip/Smart Card Interface Comunication Device Class(CDC) Content security Device Firmware update Humam Interface (HID) IrDA Bridge Mass Storage (MSD) Printer Still Image Capture Test and measurement Vdeo Quando um dispositivo no se enquadra nessas classes ele considerado de uma classe customizada (custom) o que significa escrever um driver sem pertencer a qualquer padro definido.
Exsto Tecnologia

XM118 Microcontroladores PIC18

213

O PIC18F4550 possui um perifrico de USB Device compatvel com a norma USB 2.0. Ele pode operar em full-speed (12MHz) ou low-speed (1,5MHz). Internamente ao PIC existe um regulador de 3,3V, responsvel por fornecer a esse componente a tenso necessria para o driver de sada. Existe suporte a resistores de pull-up (que indicam ao host se o dispositivo full-speed ou low-speed) externo, assim como possibilidade de uso de um transceptor externo. Contudo, esses dispositivos esto disponveis internamente, no necessitando de nenhum componente externo alm do conector B. O protocolo USB, apesar da praticidade, no algo trivial. Sua implementao no simples como a de um perifrico como timer ou A/D, exigindo o uso de uma biblioteca de funes complexas. Nesse sentido, a forma mais fcil pra se trabalhar com USB a partir de um exemplo pronto para a classe de dispositivo que se pretende usar, na qual sero feitas as alteraes para nossa aplicao. A Microchip prov essas bibliotecas, bem como drivers para os tipos bsicos de dispositivos e extensa documentao. Todo esse material est disponvel no CD que acompanha o kit em em www.microchip.com/usb . Mais ainda, o kit XM118 compatvel com a placa de demonstrao PICDEM FS-USB (com exceo do sensor de temperatura I2C, no presente no kit), portanto diversos exemplos e aplicativos desenvolvidos para essa placa da Microchip sero executados no kit.

Exsto Tecnologia

XM118 Microcontroladores PIC18

214

Anexos
Anexo A Distribuio de Pinos do 18F4550

Exsto Tecnologia

XM118 Microcontroladores PIC18

215

Anexo B Registros de funo especial do PIC18F4550

Exsto Tecnologia

XM118 Microcontroladores PIC18

216

Anexo C Leituras Recomendadas


Os assuntos abordados nessa apostila so bastante abrangentes e existem diversos documentos e livros que podem complementar o assunto. O CD que acompanha a apostila trs diversos manuais que tratam do PIC18, como do compilador C18. Esses documentos foram tirados do site www.microchip.com. Nestes documentos, parte-se do princpio de que o leitor tem slidos conhecimentos de microcontroladores e programao em C e os assuntos so tratados de forma bastante detalhada. So recomendados como material avanado para quem pretende se aprofundar mais nos conhecimentos apresentados no curso. Bons livros existentes no mercado tratam da linguagem C. A princpio, qualquer livro que trate de C ANSI puro, isto , que no trate de C++ ou implementaes visuais como Visual C/C++ pode ser usado para um maior estudo da linguagem, seja para uma melhor compreenso de suas caractersticas, seja para um estudo mais aprofundado. Uma leitura recomendada para quem tem pouca experincia com a linguagem C : Mizrahi, Victorine Viviane. Treinamento em Linguagem C - Mdulo 1. Makron Books, So Paulo. Para programadores de nvel intermedirio e/ou avanado, recomendada a leitura da referencia [5], da qual um dos autores ningum menos que o prprio criador do C, Dennis Ritchie. Por fim, mais informaes sobre microcontroladores de uma forma geral e microcontroladores da famlia PIC16 podem ser obtidas na referncia [1].

Exsto Tecnologia

XM118 Microcontroladores PIC18

217

Anexo D - Bibliografia:
[1] Adriano, J. D. (2005). Curso de microcontroladores PIC16Fxxx Mdulo Bsico. Exsto Tecnologia. Santa Rita do Sapuca

[2] Kernighan, Brian W. Ritchie, Dennis M.(1988). The C programming language.Editora Prentice-Hall PTR

[3] Shultz, Thomas W. (1998). C and 8051: hardware, modular programming and multitasking. Vol. I e II. 2a. edio. Ed. Prentice Hall PTR.

[4] Pereira, Fbio.(2003) Microcontroladores PIC - Programao em C. Editora rica, So Paulo.

[5] PIC18F2420/2520/4420/4550 DataSheet

[6] PIC18F2455/2550/4455/4550 DataSheet

[7] MPLAB C18 C COMPILER USERS GUIDE

[8] MPLAB C18 C COMPILER LIBRARIES

Exsto Tecnologia

XM118 Microcontroladores PIC18

218

Anexo E Conjunto de instrues do PIC18


Convenes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

219

Conjunto de instrues:

Exsto Tecnologia

XM118 Microcontroladores PIC18

220

Notas: 1. Quando uma operao que altera o valor de registro PORT tem como destino o prprio registro PORT o valor considerado aquele lido diretamente dos terminais do microcontrolador 2. Quando essa instruo executada no registro TMR0 (e d = 1, se aplicvel) a pr-escala zerada; 3. Quando o PC alterado, gerando um desvio no fluxo do programa, ou um teste condicional resulta verdadeiro, so gastos dois ciclos de mquina. 4. Algumas instrues ocupam 2 endereos de memria. Elas so executadas em dois ciclos de instruo e o segundo ciclo tem o efeito de um NOP.

Exsto Tecnologia

XM118 Microcontroladores PIC18

221

Exsto Tecnologia

XM118 Microcontroladores PIC18

222

CADERNO DE EXPERINCIAS

"S se conhece o que se pratica." (Baro de Montesquieu)

Exsto Tecnologia

XM118 Microcontroladores PIC18

223

Este caderno de experincias trs exerccios tericos e prticos sobre microcontroladores PIC18. As aulas esto distribudas conforme o plano de aulas apresentada na Orientao Pedaggica, na introduo desse documento. L so indicados os contedos tericos referentes a cada aula. Portanto, necessrio verificar qual a seqncia de aulas conforme o objetivo e a carga horria do curso. As trs primeiras aulas so puramente tericas, trazendo questes sobre o conceito de microcontroladores e do PIC18F4550. A partir da aula 4 todas apresentam algum exerccio prtico. Todas as aulas so organizadas seguindo a estrutura didtica abaixo, quando aplicvel cada um dos itens: Objetivos: quais os objetivos didticos a serem atingidos na aula; Introduo: quando necessrio, uma breve introduo terica ao assunto da aula; Questionrio: algumas questes tericas fundamentais para entender a experincia Exerccios: as experincias propriamente ditas. Muitas vezes so apresentados exerccios resolvidos para anlise e propondo alteraes. Fica a cargo do instrutor us-los como exemplos ou propor que sejam desenvolvidos pelos alunos. Exerccios propostas: exerccios que complementam a prtica realizada. Os exerccios propostos podem ser realizados na prpria aula, havendo tempo hbil para isso ou utilizado como lio de casa, fazendo-se uso das ferramentas de simulao.

Exsto Tecnologia

XM118 Microcontroladores PIC18

224

1 Aula 1 - Introduo aos microcontroladores


Objetivos
Estudar os conceitos bsicos de microcontroladores

Questionrio
1. Qual a principal caracterstica dos sistemas computacionais, que os diferencia dos demais circuitos digitais? 2. Qual a diferena entre memria de programa e memria de dados? 3. O que so registros? 4. O que so vetores na memria de programa? 5. Descreva os vrios tipos de memria de programa. 6. Qual a diferena entre memrias voltil e no-voltil? 7. Para que servem os portais? 8. Por que so utilizados barramentos para interligar as vrias partes de um sistema computacional? 9. Descreva a funo dos barramentos de a. b. c. Dados endereos controle.

10. O que depende do tamanho (nmero de bits) do barramento de endereos? 11. Qual a quantidade mxima de memria pode ser acessada por barramentos de endereos de: a. b. c. d. 7 bits 12 bits 16 bits 21 bits

12. O que so perifricos? 13. Descreva, de forma rpida, o funcionamento do buffer tri-state e dos latch. 14. Em um pino de I/O (como o apresentado a seguir) o que ocorre se for realizada uma operao de escrita em um pino configurado como sada? Explique porque tendo em vista o circuito.

Exsto Tecnologia

XM118 Microcontroladores PIC18

225

15. Explique a funo dos seguintes blocos componentes da CPU: a. b. c. d. e. Decodificador de instrues (Instruction Decoder) Registro Status PC (Program Counter) Pilha (Stack) Unidade lgico-aritmtica (ALU)

16. Qual a principal caracterstica da arquitetura Harvard? O que se ganha com isso? 17. O que significam as siglas CISC e RISC? 18. Explique a diferena entre um microcontrolador e um microprocessador.

Exerccios propostos
Propomos aqui uma pesquisa por manuais de componentes de diversos tipos de micrococontrolador. O objetivo familiarizar o aluno com os manuais destes componentes e exercit-lo na atividade de busca de informaes. 1. Pesquise na internet e faa download do manual dos seguintes componentes a. PIC16F628A (Microchip) b. PIC18F4550 (Microchip) c. PIC24FJ128GA108 (Microchip) d. AT89S52 (Atmel) e. MC68HC908QY4 (Freescale)
Exsto Tecnologia

XM118 Microcontroladores PIC18

226

f.

MSP430F2011(Texas)

2. Procure o diagrama em blocos de cada componente destes, procurando identificar: a. Core (CPU) b. Barramentos c. Memrias d. Portais de I/O e. Perifricos 3. Baseado nas informaes desses manuais, preencha a tabela de caractersticas abaixo: Microcontrolador Memria Flash [kB] 3,5 32 128 8 4 2 Memria RAM [B] 224 2048 16000 256 128 128 Freqncia mxima [MHz] 20 48 32 33 32 16 Nmero de pinos 18 40 80 40 16 14 Barramentos de dados [bits] 8 8 16 8 8 16

PIC16F628A PIC18F4550 PIC24FJ128AG108 AT89S52 MC68HC908QY4 MSP430F2011

4. Quais dos componentes acima so CISC e quais so RISC?

Exsto Tecnologia

XM118 Microcontroladores PIC18

227

2 Aula 2 O PIC18F4550
Objetivos
Estudar o hardware do microcontrolador PIC18F4550 Conhecer os modelos de memria para o PIC18

Questionrio
1. Quantos bits tm o barramento de instrues do PIC18? 2. Quantos bits tm o barramento de endereo para memria de programa do PIC18? Quantos endereos podem ser acessados ento? Quantos bytes esto realmente implementados no PIC18F4550? 3. Qual a diferena entre as instrues RCALL e CALL? E entre BRA e GOTO? 4. Quantos bits tm o barramento de endereo para memria de dados do PIC18? Quantos endereos podem ser acessados ento? Quantos bytes esto realmente implementados no PIC18F4550? 5. Explique o que so SFR e GPR. 6. O que o banco de acesso? 7. Explique, resumidamente, como interagem os registro TRISB, LATB e PORTB. 8. Em quantos ciclos de clock realizado cada instruo do PIC18? Quais so esses ciclos e qual ao acontece em cada um deles? 9. Descreva o que ocorre com os registros PCLATU e PCLATH quando o registro PCL lido. E quando se escreve em PCL, o que ocorre? 10. O que fazem a instruo MULLW e MULWF? 11. Quantos nveis tm a pilha do PIC18? Quais eventos associados a pilha causam reset? 12. Com base no funcionamento do processador, sabendo quantos ciclos de clock cada instruo leva para ser executada, calcule quanto o tempo de execuo de uma instruo para as freqncias de clock a seguir: a. 4MHz b. 20MHz c. 48MHz d. 3,58MHz 13. Explique a funo dos bits abaixo, pertencentes ao registro status.

Exsto Tecnologia

XM118 Microcontroladores PIC18

228

3 Aula 3 Assembly do PIC18


Objetivos
Estudar o conjunto de instrues do PIC18

Questionrio
1. Quantas instrues tm o PIC18? 2. Explique, de forma resumida, o que fazem as instrues abaixo. Para isso, consulte o manual do PIC18 (captulo 26 Instruction Set Summary). a. MOVLW b. MOVWF c. MOVFF d. ADDWF e. SUBLW f. ANDWF

g. XORLW h. INCF i. j. RLCF RLNCF

k. BSF l. BTG

m. BZ n. BNZ o. BRA p. CALL q. GOTO r. RETURN

s. SLEEP

Exsto Tecnologia

XM118 Microcontroladores PIC18

229

4 Aula 4 Ferramentas de desenvolvimento


Objetivos
Aprender a criar um projeto usando MPLAB e C18 Compilar, simular, depurar e gravar o projeto criado.

Introduo
As ferramentas de software utilizadas para o desenvolvimento com microcontroladores so de grande ajuda na criao e depurao de projetos. Ter boas ferramentas de desenvolvimento quase to importante com ter um bom microcontrolador para o sucesso de qualquer projeto. O objetivo dessa aula prtica passar por todo o processo de desenvolvimento, criando um novo projeto, compilando, simulando e, por fim, gravando e depurando no kit.

Questionrio
1. O que um IDE?` 2. Qual a funo da Janela Watch? 3. Para que serve o Simulator Logic Analyzer? 4. O que faz um estmulo com configurado como Toggle?

Exerccios
Verifique se o MPLAB e C18 esto instalados em seu computador. Caso contrrio, realize a instalao conforme o manual. 1. Criando um novo projeto a. Crie um novo projeto usando Project Wizard com as seguintes caractersticas i. Microcontrolador: PIC18F4550 ii. Compilador: C18 iii. Diretrio do projeto: c:\Exsto\PIC18\Aula 4 MPLAB iv. Nome do projeto: Aula4E1 v. Inclua o arquivo de linker script: c:\MCC18\lkr\18F4550.lkr b. Crie um novo arquivo e escreva nela o treco de cdigo abaixo:
#include<P18F4550.h> #include<delays.h> //// Configures #pragma config #pragma config #pragma config #pragma config

PLLDIV = 5 CPUDIV = OSC1_PLL2 FOSC = HS WDT = OFF

// // // //

PLL para 20MHz PLL desligado Fosc = 20MHz -> Tcy = 200ns Watchdog desativado Exsto Tecnologia

XM118 Microcontroladores PIC18

230

#pragma config #pragma config #pragma config

PBADEN = OFF LVP = OFF DEBUG = ON

// PORTB comea como digital // Sem gravao em baixa tenso // habilita debug

void main(void){ DDRD = 0x00; for(;;){ PORTD = 0x55; // Delay10KTCYx(200);// manter comentado na simulao e depurao PORTD = 0xFF; // Delay10KTCYx(200);// manter comentado na simulao e depurao } }

c. Salve o arquivo como Exemplo5.c d. Inclua Exemplo5.c no projeto e. Compile o projeto 2. Simulando o projeto a. Ative o simulador MPLAB SIM b. Abra a janela do Analisador lgico c. Inclua no analisador lgico o PORTD d. Execute o programa por um tempo e depois pare, analisando o resultado na janela do analisador lgico. O que o programa faz? e. Execute o programa passo-a-passo para entender melhor o funcionamento, observando o analisador lgico e o valor de PORTD na janela Watch. 3. Gravando o projeto a. Retire o comentrio das rotinas de delay no programa e recompile-o. b. Selecione o ICD-2 como programador: Programmer MPLAB ICD-2 c. Grave o programa no kit. d. Execute o programa e observe o resultado 4. Depurando o projeto a. Comente as rotinas de delay no programa e recompile-o b. Selecione o ICD-2 como depurador: Debugger Select Tool MPLAB ICD-2 Select Programmer

Deve aparecer uma janela informado que ao selecionar ICD-2 como depurador ele no mais ser usado como gravador. Clique em ok. c. Execute o programa passo a passo e observe o resultado no hardware e na janela watch. d. Retire novamente o comentrio das rotinas de delay, recompile e. Insira um break-point na linha PORTD = 0xFF; f. Rode o programa usando RUN e observe o que acontece.
Exsto Tecnologia

XM118 Microcontroladores PIC18

231

Exerccios Propostos
1. Crie um novo projeto com as mesmas configuraes do anterior chamado de Aula4P1. 2. Adicione um arquivo C com o cdigo abaixo.
#include<P18F4550.h> #include<delays.h> //// Configures #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config

PLLDIV = 5 CPUDIV = OSC1_PLL2 FOSC = HS WDT = OFF PBADEN = OFF LVP = OFF DEBUG = ON

// // // // // // //

PLL para 20MHz PLL desligado Fosc = 20MHz -> Tcy = 200ns Watchdog desativado PORTB comea como digital Sem gravao em baixa tenso habilita debug

void main(void){ int i; DDRD = 0x00; for(;;){ PORTD = 0xFE; for (i=0;i<8;i++){ LATD = LATD << 1; Delay10KTCYx(200);// comentado na simulao e depurao } } }

3. Repita todos os passos do exerccio: simulao, gravao e depurao. 4. O que o programa faz?

Exsto Tecnologia

XM118 Microcontroladores PIC18

232

5 Aula 5 Caractersticas Especiais


Objetivos
Entender as caractersticas especiais do PIC18 e quando us-las Aprender a usar a diretiva #pragma config Compreender os diversos tipos de oscilador do PIC18

Questionrio
1. Quais eventos provocam a sada dos modos Sleep e Idle? 2. Qual a utilidade do Power-up Timer? 3. Para que serve o watchdog? 4. Qual a finalidade do PLL presente no PIC18? 5. Quais as freqncias so geradas pelo oscilador interno? 6. Quantas fontes de sinal de clock tm o PIC18? Podemos mudar de fonte de clock durante a execuo do programa? 7. Atravs de quais bits de qual registro feita a escolha da fonte de clock? 8. Descreva resumidamente os trs modos de consumo do PIC18? 9. A tenso do BOR configurvel? 10. Faa uma tabela comparando os modos de oscilador a cristal (XT, HS e LP), oscilador interno e oscilador RC externo com relao a estabilidade, faixa de freqncia e custo. Critrio Osciladores a Cristal (com ou sem PLL) Preciso Estabilidade Variedade de freqncias Custo Oscilador RC Oscilador interno

Exerccios
1. O exerccio resolvido Aula5E1 apresenta um exemplo que permite verifica o funcionamento do oscilador do PIC18. Atravs da leitura da chave DIP ligada ao portal B possvel acionar os bits do registro OSCCON. O programa principal aciona seqencialmente LEDs do portal D conforme a freqncia de clock selecionada.

Exsto Tecnologia

XM118 Microcontroladores PIC18

233

RB5 RB4 (SCS1) (SCS0) Oscilador 0 0 0 1 1 1 1 1 1 1 1 1 X X X X X X X X

RB3 RB2 RB1 (IRCF2) (IRCF1) (IRCF0) Freqncia do oscilador interno X X X X X X 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1

Oscilador

Freqncia

Tempo por LED

Primrio (HS+PLL) Secundrio

Interno

48 MHz 16,6ms No h oscilador secundrio na placa 31 kHz 12,8s 125 kHz 6,4s 250 kHz 3,2s 500 kHz 1,6s 1 MHz 800ms 2 MHz 400ms 4 MHz 200ms 8 MHz 100ms

Exsto Tecnologia

XM118 Microcontroladores PIC18

234

6 Aula 6 Iniciando com a linguagem C


Objetivos
Conhecer as ferramentas de desenvolvimento utilizadas: MPLAB IDE e C18 Entender as diferenas entre as linguagens C e Assembly. Entender as principais caractersticas da linguagem C. Estudar os tipos de dados bsicos do C Atribuio como realizar atribuio em C Entender como usar pinos de I/O do microcontrolador em C

Questionrio
1. Faa uma comparao de trs caractersticas das linguagens C e Assembly que mostrem que vantajoso trabalhar em C. 2. Porque C considerada uma linguagem de mdio nvel? 3. O que o C ANSI?

Exerccios
1. Crie um novo projeto chamado Aula6E1 e escreva um programa que realize as operaes apresentadas abaixo. O objetivo do programa apenas a simulao, portanto basta realizar as operaes. Declare as variveis no menor tamanho que atenda as operaes. a. x = y + 775; (y um unsigned char) b. z = w *k; (w e k unsigned char) c. p = (m*100)/n; (w e k inteiros sinalizados) 2. Crie um projeto que configure o PORTD (onde esto ligados os LEDs do kit) como sada. No Loop principal leia o valor das chaves dip switch (PORTB) e transfira esse valor para os LEDs. Obs.: Para ler as chaves necessrio ativar os resistores de pull-up no PORTB. Isso feito colocando o seguinte comando na inicializao do microcontrolador: INTCON2bits.RBPU = 0; 3. Crie um projeto baseado no exerccio anterior onde cada chave aciona um LED, conforme a tabela a seguir. Para isso ser necessrio acessar no o portal todo, mas cada bit individualmente. Chaves RB0 RB1 RB2 RB3 LEDs RD7 RD6 RD5 RD4
Exsto Tecnologia

XM118 Microcontroladores PIC18

235

RB4 RB5 RB6 RB7

RD1 RD3 RD0 RD2

Exerccios Propostos
4. Crie um novo projeto com as seguintes caractersticas a. Microcontrolador PIC18F4520 b. Ferramentas da linguagem C18 c. Inclua o arquivo linker scrip para esse microcontrolador d. Crie um novo arquivo chamado Proposto.C e inclua-o no projeto. e. Escreva o cdigo abaixo no arquivo Proposto.C e monte o projeto. Em seguida execute a simulao e observe o que o programa faz.

#include<P18F4520.h> #include<stdio.h> void main (void) { int i=0; printf("\n\nExerccio Proposto: "); for(;;){ printf("%d ",i); i++; if(i == 15) Sleep(); } }

5. Faa o fluxograma do programa Proposto.C e descreva sua operao.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

236

7 Aula 7 Estruturas de Deciso


Objetivos
Conhecer os comandos bsicos do C Manipular os pinos de I/O do PIC em C18 Entender o que so funes e como utiliz-las Conhecer as funes de temporizao do C18

Introduo
Alm dos comandos bsicos a linguagem C permite o uso de funes que executam tarefas definidas. O padro ANSI determina diversas bibliotecas de funes que devem acompanhar o compilador. Alm destas, o compilador C18 trs diversas bibliotecas de funes para uso especfico. Umas das mais teis e a biblioteca delays.h, cujas funes so apresentadas na tabela abaixo e so detalhadas no anexo F. Essas funes permitem gerar atrasos no programa e cujo tempo calculador a partir do tempo de execuo de uma instruo TCY (TCY = 4.TOSC). Funo
Delay1TCY Delay10TCYx Delay100TCYx Delay1KTCYx Delay10KTCYx

Prottipo
void Delay1TCY(void) void Delay10TCYx(unsigned char unit) void Delay100TCYx(unsigned char unit) void Delay1KTCYx(unsigned char unit) void Delay10KTCYx(unsigned char unit)

Descrio Atraso de 1 ciclo. Atraso de mltiplos de 10 TCY Atraso de mltiplos de 100 TCY Atraso de mltiplos de 1000 TCY Atraso de mltiplos de 10000 TCY

Questionrio
1. Como configurar o PORTD do PIC18F4520 para que seus bits sejam todos sadas? 2. Escreva um trecho de cdigo no qual o pino RD2 v para 1 se o pino RB0 estiver em 0 e vice-versa (use o comando if-else). 3. Para obter um atraso de 100ms, supondo o sinal de clock de 8MHz, qual funo de atraso deve ser usada e qual seu argumento? 4. Preencha a tabela abaixo:

Exsto Tecnologia

XM118 Microcontroladores PIC18

237

Tipo de Dado Tamanho [bits] Faixa de valores char unsigned char int unsigned int Short long float 5. necessrio fazer uma contagem de latas de goiabadas em uma linha de produo. O valor mximo de contagem 200. Qual o tipo de dado mais adequando para essa varivel? 6. O conversor ADC do PIC converte sinais de tenso em valores no sinalizados de 10 bits. Qual o tipo de dado mais adequado para representar essa informao.

Exerccios
1. Exerccio resolvido (Aula7E1): Elaborar um programa para controle de uma linha de produo de goiabada, na etapa de impresso de validade e lote. O programa deve cumprir ada, as seguintes tarefas: 1. Manter uma esteira acionada at que passem 5 latas 2. Desligar a esteira 3. Acione o carimbo de Prazo de validade por 2s 4. Esperar 1 segundo 5. Acione o carimbo de lote p 2s por 6. Repetir o processo a partir de 1 O sensor que conta as latas de goiabada baixo ativo. Os carimbos so alto ativos, ficando acionados enquanto recebem 1 e recolhendo automaticamente quando seu sinal volta a 0.

O hardware est conectado ao microcontrolador conforme a tabela a seguir: microcontrolador


Exsto Tecnologia

XM118 Microcontroladores PIC18

238

Pino do microcontrolador Direo RB0 Entrada RD0 Sada RD1 Sada RD2 Sada a. Simule o projeto e observe o resultado.

Funo Sensor (baixo ativo) Esteira (alto ativo) Carimbo Lote (alto ativo) Carimbo Validade (alto ativo)

b. Grave no kit o projeto e veja seu funcionamento. 2. Levante o fluxograma do exemplo 2 anterior 3. Para aumentar a produtividade, devido ao alto consumo de goiabada, foram instaladas novos carimbos. Agora possvel carimbar 12 latas de goiabada por vez e os carimbos de validade e lote podem ser acionados simultaneamente, por apenas 1s. Refaa o fluxograma e o cdigo anterior para atender as novas necessidades.

Exerccios Propostos
1. Escrever um programa que controle que pisque um LED com uma freqncia de 10 Hz se a chave INT estiver pressionada e com freqncia de 2 Hz se no estiver. Para fazer isso atribua diferentes valores a uma varivel que ser o argumento de uma funo de delay. No se esquea de elaborar o fluxograma 2. Crie um programa (bem como o fluxograma) capaz de implementar a seguinte tabela: Chave 1 Chave 2 LED1 0 0 0 0 1 0 1 0 1 1 1 0 Obedea a seguinte configurao de hardware. Pino do microcontrolador RB0 RA4 RD0 RD1 Direo Entrada Entrada Sada Sada LED2 0 1 0 0

Funo Chave 1 Chave 2 LED 1 LED 2

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

239

8 Aula 8 Estruturas de Repetio


Objetivos
Estudar as estruturas de repetio Compreender as diferenas entre do-while, while e for Utilizar o comando break;

Questionrio
1. Qual a diferena entre do-while e while?

2. O que difere o for de do-while e while? 3. Para que serve o comando break? 4. Por que programas para microcontroladores geralmente tem um loop infinito?

Exerccio
1. Exerccio resolvido (Aula8E1): Desenvolver o projeto de controle de um sistema de aquecimento de gua representado pela figura abaixo.

Funcionamento: I. O tanque deve encher acionando-se a bomba (BOMBA) at que o lquido atinja o nvel mximo do tanque, o que ser indicado pelo sensor NMAX. II. Estando o tanque cheio, aciona-se o aquecimento atravs de uma resistncia controlada pelo rele AQUECE. Essa Resistncia deve ficar acionada por 3 segundos, e depois permanecer acionada at que a temperatura atinja o valor pr-estabelecido, quando ento o sensor STEMP ir atuar.

Exsto Tecnologia

XM118 Microcontroladores PIC18

240

III.

IV.

Atingida a temperatura mxima a vlvula VALV deve ser aberta. Ela deve permanecer aberta at que o nvel de gua chegue ao mnimo, quando NMIN deixa de indicar presena de lquidos. Quando o tanque estiver vazio, a vlvula deve ser fechada e o processo se reinicia.

Condies de projeto: I. II. III. IV. Condio inicial: todas as entradas destivadas. Todos os sensores so alto-ativos e sero simulados por chaves dip switch Todas as sadas so baixo-ativas e sero simulados por LEDs Configurao de hardware: Sinal NMIN NMAX STEMP BOMB VALV AQUECE Pino RB0 RB1 RB2 RD0 RD1 RD2 Direo Entrada Entrada Entrada Sada Sada Sada Tipo Alto-ativo Alto-ativo Alto-ativo Baixo-ativo Baixo-ativo Baixo-ativo

a) Simule o projeto, observando seu funcionamento. b) Grave no kit e teste o projeto. c) Levante o fluxograma do projeto.

2. Altere o projeto para I. Ao iniciar o programa, deve-se aguardar at que a chave de partida (RB4) esteja em 1 para iniciar o processo. II. Durante o esvaziamento do tanque, a resistncia deve alternar entre ligada e desligada a cada 500ms, de forma que a manter a temperatura do lquido. III. Se um comando de emergncia for ativado (chave RB3 em 1) o projeto deve parar o que est fazendo, desligar todas as sadas e aguardar novamente o acionamento de RB4. Dica: lembre-se do comando break.

Exerccio Propostos
1. Faa um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0 pisque 3 vezes, usando obrigatoriamente while. 2. Faa um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0 pisque 3 vezes, usando obrigatoriamente for.
Exsto Tecnologia

XM118 Microcontroladores PIC18

241

3. Desenvolva um programa que realize as funes descritas na tabela abaixo (lembrando que as chaves so baixo ativas); RB0 1 0 1 0 RB1 1 1 0 0 Ao Nenhuma ao LED0 piscado a 1Hz LED0 piscando a 8Hz LED0 aceso constantemente

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

242

9 Aula 9 Funes
Objetivos
Estudar funes o uso de funes e da pilha Estudar as diferentes formas de passagem de parmetro Entender o conceito de biblioteca de funes.

Questionrio
1. Quantos nveis tm a pilha do PIC18?

2. O que uma varivel local? 3. O que uma varivel global? 4. Como se comporta uma varivel declarada com modificador static? 5. O que prottipo de uma funo?

Exerccios
1. Exerccio Resolvido (Aula9E1): Simule o exemplo Funes.c, observado o funcionamento da pilha, o comportamento dos diferentes tipos de variveis (global, local e static) e a passagem de parmetros. 2. Crie uma funo que realize a decomposio de inteiro para 5 dgitos, chamada IntToBCD. O parmetro de entrada (inteiro) deve ser o parmetro de entrada da funo. Os 4 dgitos devem ser variveis globais. 3. Altere o exerccio anterior para que os dgitos sejam parmetros passados por referncia (ponteiros). 4. Crie uma biblioteca de funes (composta por IntToBCD.h e IntToBCD.c) para conter funo desenvolvida no exemplo anterior. Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

243

10 Aula 10 Interrupes
Objetivos
Estudar o sistema de interrupes do PIC18 Entender a prioridade de interrupes Construir rotinas de tratamento de interrupo.

Questionrio
1. Quantos nveis de prioridade de interrupo h no PIC18? 2. Quando o programa est sendo executado e ocorre uma interrupo de baixa prioridade, o que ocorre? 3. Se uma interrupo de alta prioridade ocorre durante a execuo da RTI de baixa prioridade, o que acontece. 4. Quais os bits de habilitao global das interrupes de alta e baixa prioridade? 5. Como identificar qual a causa da interrupo? 6. Que providncias devem ser tomadas sempre ao se tratar uma interrupo?

Exerccio
1. Exerccio resolvido (Aula10E1): Para demonstrar o funcionamento das interrupes vamos desenvolver um programa que acione os LEDs de forma diferente no programa principal e nas interrupes de baixa e alta prioridade. A interrupo de baixa prioridade ser a interrupo INT2 e a interrupo de alta prioridade ser INT1. No programa principal os leds ficam todos piscando ao mesmo tempo, em uma freqncia de 2Hz. Quando ocorrer uma interrupo de baixa prioridade ser feito um deslocamento de LED acionado da esquerda para a direita e da direita para esquerda, 3 vezes. Cada LED permanece acesso por 200ms. Quando ocorrer a interrupo de alta prioridade, os LEDs sero acionado intercalados (10101010), se tero seus estados invertidos a cada 500ms, por 3 vezes. Execute o programa. Teste inicialmente as interrupes separadamente. Em seguida tente a acionar uma enquanto as outra est sendo executada. Observe e anote os resultados. Ateno: Esse exemplo para fins didticos somente. extremamente recomendado que no se use rotinas de atraso dentro de uma RTI.

Exsto Tecnologia

XM118 Microcontroladores PIC18

244

2. Altere o exemplo anterior de forma que no haja mais prioridade de interrupo (IPEN = 0). Nesse caso, s estar ativa a interrupo de alta prioridade e as RTI devem ser reescritas. Execute o programa e acione uma chave por vez. Em seguida tente a acionar uma enquanto a outra est sendo executada. Observe e anote os resultados.

Exerccios propostos
1. Escreva um programa que inverta o estado de RD0 a cada 500ms em sua rotina principal. O pino RD1 deve ter se estado invertido conforme o valor de uma varivel global Tempo. Quanto ocorrer interrupo INT1, que deve ser de alta prioridade, RD2 ir para 1 e Tempo recebe um valor que faz o RD1 inverter de estado a cada 200ms. Quando ocorrer a interrupo INT2, que deve ser de baixa prioridade, RD2 ir para 0 e RD1 passa a inverter a cada 1s.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

245

11 Aula 11 Display de 7 segmentos e buzzer


Objetivos
Estudar os displays de 7 segmentos Utilizar vetores como tabelas de converso Multiplexar displays de 7 segmentos

Introduo
Em muitas aplicaes com microcontroladores necessrio passar informaes para pessoas. Nestes casos, diversos recursos podem ser utilizados. Dois muito comuns so o display de sete segmentos e o buzzer, que sero tratados nesta experincia. O dispaly de 7 segmentos um arranjo de LEDs que permite formar nmeros e algumas letras conforme a combinao de segmentos acionados. Esse tipo de display pode ser multiplexado, isto , vrios ligados em conjunto acionando um s por vez, o que o torna um interface bastante verstil. O buzzer nada mais que um alto-falante muito simples, feito para emitir sons com maior intensidade em determinadas freqncias. Esse componente se torna muito til na medida em que pode chamar a ateno do usurio para um equipamentos, sem que aquele esteja olhando diretamente para este. Basicamente existem buzzers auto-oscilantes, que basta alimentar para que emita som, e buzzers que precisam receber um sinal quadrado para serem acionados. O kit equipado com um buzzer desse ltimo tipo.

Questionrio
1. Como o circuito interno de um display de 7 segmentos catodo-comum? 2. Como declarar um vetor de constantes 3. Desenhe um circuito capaz de multiplexar 4 displays de 7 segmentos? 4. Para que o circuito da questo acima possa operar corretamente, qual tempo cada segmento deve permanecer acionado. 5. Admitindo que um buzzer tenha seu melhor desempenho na freqncia de 4,2kHz, qual o perodo do seu sinal? 6. Para o buzzer do exemplo acima, escreva um trecho de cdigo capaz de acionar ininterruptamente o buzzer usando rotinas de delay e supondo um oscilador de 20 MHz. Dica: o pino do microcontrolador que aciona o buzzer deve permanecer meio perodo em 1 e meio perodo em 0.

Exerccios

Exsto Tecnologia

XM118 Microcontroladores PIC18

246

1. Desenvolver um programa que apresente em um display de 7 segmentos um valor de 0 a F (hexadecimal). Esse valor deve ser incrementado por RB0 e decrementado por RB1. 2. Desenvolver um programa capaz de apresentar o valor de uma varivel com valor mximo de 9999 nos displays de sete segmentos multiplexados. Esse valor deve ser incrementado por RB0 e decrementado por RB1. Dica: cada segmento deve permanecer ativo por 5 ms. 3. Escreva um programa que acione o buzzer quando a chave INT1 for acionada e s o desligue quando INT2 for pressionada.

Exerccio Propostos
1. Altere o exerccio 2 para que ele seja possvel programar um valor de contagem usando RB0 e RB1 e, ao pressionar RB2 esse valor seja decrementado a cada 1 segundo, at zerar. 2. Altere o exerccio 3 para que, ao pressionar o boto, a freqncia do buzzer alterne entre 4,2 kHz e 2,4kHz, permanecendo (aprox.) 1s cada um. Dica: para definir o tempo em que cada freqncia usada conte os perodos do sinal gerado.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

247

12 Aula 12 Teclado Matricial e LCD


Objetivos
Estudar o uso de display de cristal lquido alfanumrico Estudar leitura de teclado matricial por interrupo

Introduo
Para construir uma IHM (interface homem-mquina) eficiente podemos usar display de cristal lquido alfanumrico e teclas matriciais. Alm disso, o portal B possui uma interrupo especialmente til para a escrita de teclado. Essas facilidades podem ser usadas em C atravs de bibliotecas de funes.

Questionrio
1. Quais os sinais necessrios para controlar um display de cristal lquido alfanumrico? 2. Qual interrupo do PIC18 pode ser usada em conjunto com um teclado matricial?

Exerccios
1. Exemplo resolvido (Aula12E1): Construir um programa que faa a leitura do teclado e escreva a tecla lida no centro da segunda linha do LCD. Na primeira linha deve aparecer a mensagem Exsto Tecnologia. Execute o programa e observe os resultados 2. Altere o programa anterior para escrever seu nome em lugar da mensagem Exsto Tecnologia. 3. Altere o programa para que sejam lidos 4 teclas. Se a seqncia dessas teclas for 1, 2, 3 e 4, deve aparecer a mensagem Senha correta no LCD; caso contrrio, deve parecer Senha Errada. As teclas lidas devem ser escritas uma ao lado da outra no LCD.

Exerccios Propostos
1. Desenvolva uma rotina capaz de escreve no LCD o valor de variveis do tipo unsigned char, chamada PrintChar. 2. Desenvolva uma rotina capaz de escreve no LCD o valor de variveis do tipo unsigned int, chamada PrintInt.

Exsto Tecnologia

XM118 Microcontroladores PIC18

248

13 Aula 13 Contadores e temporizadores


Objetivos
Entender o funcionamento do comparador analgico Desenvolver rotinas de temporizao utilizando temporizadores e interrupo.

Introduo
Como o prprio nome indica, os timers so perifricos muito teis para gerar temporizao. Para isso, determinamos um valor inicial que deve ser carregado no timer para que ele gere uma interrupo aps um tempo pr-determinado. A equao (1) mostra como calcular o tempo (T) at o estouro do timer aps a carga de um valor inicial (To), usando uma pr-escala de valor PS. O sinal aplicado ao timer tem perodo TCY (quando a fonte de clock interna). TOV o valor de contagem que causa overflow (65536 para 16 bits e 256 para 8 bits) Essa equao valida para os timers 0, 1 e 3.

T = (TOV T0 ) ( PS TCY )

(1)

A equao (2) mostra como determinar To para obter um tempo T desejado. Nesse caso, o valor da pr-escala deve ser arbitrado.

T0 = TOV

1 T PS TCY

(2)

Questionrio
1. Quais os timers do PIC184550? De quantos bits cada timer? 2. Qual a funo da pr-escala? E da ps-escala do timer 2? 3. Se o timer 1 est configurado com pr-escala de 1:4 e usando a fonte de clock interna com oscilador de 8MHz quanto tempo entre o momento que o timer zerado e seu overflow? 4. Se o timer 2 configurado com pr-escala de 1:16, ps-escala de 1:3, usando a fonte de clock interna com oscilador de 4MHz e o registro PR2 contm o valor 200, a cada quantos milisegundos o flag de interrupo setado? 5. Qual o argumento para a funo OpenTimer1 para configurar o timer 1 conforme a questo 3? 6. Qual o argumento para a funo OpenTimer2 para configurar o timer 1 conforme a questo 4?

Exerccios

Exsto Tecnologia

XM118 Microcontroladores PIC18

249

1. Desenvolver uma aplicao que gere um sinal de 1 Hz no pino RD1 e um sinal de 10 Hz no pino RD0, gerados pelo timer 1 e timer 3, respectivamente. Para isso, utilize interrupo sem prioridade e oscilador externo de 20MHz. O programa principal deve inicializar o microcontrolador e entrar em loop infinito, sem nenhuma ao. 2. Esboce o fluxograma das RTIs do exemplo acima 3. Altere o exemplo para usar apenas o timer 3 para gerar as duas freqncias.

Exerccios Propostos
1. Determinar as equaes para determinao de To e T aplicveis ao timer 2. 2. Crie um relgio, com contagem de hora, minutos e segundos usando o timer 1

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

250

14 Aula 14 Conversor A/D


Objetivos
Entender como funcionam os conversores analgico/digital Estudar o funcionamento do conversor A/D do PIC18F4550 Fazer a leitura de um nvel de tenso e processar essa informao no microcontrolador.

Questionrio
1. Por que conversores A/D so necessrios? 2. Quais os pinos de entrada dos comparadores no PIC18F4550? Aps o reset, esses pinos esto configurados como entradas analgicas ou digitais. 3. Qual o evento que gera a interrupo do comparador? 4. Como so acessadas as sadas dos comparadores em C?

Exerccios
1. Exerccio Resolvido (Aula14E1): Desenvolver um programa que faa a leitura do canal 0 do conversor A/D e acione os LEDs do PORTD progressivamente conforme essa tenso aumenta (bargraph). Configure o kit de forma que o canal 0 leia a o sinal do potencimetro (POT). 2. O kit possui um sensor de temperatura LM35. Este sensor apresenta em sua sada um sinal linear de 10mV/oC. Faa a leitura desse sensor e mostre o valor no LCD; para tanto ser necessrio fazer a converso do valor lido de binrio para oC e posteriormente quebrar este valor em dgitos para apresent-los no display. Dica: evite o uso de variveis fracionrias (ponto flutuante).

Exerccios Propostos
1. Faa um programa de controle de temperatura, que mantenha a temperatura lida pelo sensor entre 32 e 40oC. Para isso faa a leitura do sensor e acione a resistncia de aquecimento (RC1) para aquecer at atingir 40oC e a ventoinha (RC2) para resfriar at atingir 32 oC. Apresente no LCD a temperatura e se est aquecendo ou esfriando.

Exsto Tecnologia

XM118 Microcontroladores PIC18

251

15 Aula 15 Mdulo CCP


Objetivos
Estudar os trs modos de operao do mdulo CCP o o o Captura Comparao PWM

Compreender o sistema de gerao de clock do PWM Realiza aplicaes prticas dos modos comparao e PWM.

Questionrio
1. O que fazem cada um dos modos de operao do CCP 2. Quais os eventos (configurveis) que geram a captura do timer no modo captura?

3. No modo comparao, qual registro comparado com o timer? 4. Quais as aes podem ser realizadas quando o timer coincide com o registro, no modo captura? 5. Explique de forma sucinta o funcionamento do modo PWM. 6. Porque esse processo PWM chamado de modulao?

Exerccios
1. Exerccio Resolvido (Aula15E1): Configure o timer 1 e ECCP1 para que o mdulo CCP gere uma interrupo a cada 1 segundo. No tratamento de interrupo do ECCP1 implemente rotinas de um relgio de hora, minutos e segundos. No loop principal apresente no LCD a hora. 2. Exerccio Resolvido (Aula15E2): Desenvolver um programa que configure a freqncia do PWM do CCP2 em 2 kHz e permita a variao do Duty-cicle com incrementos e decrementos de 10% atravs das chaves nos pinos RB0 e RB1, respectivamente. Configure o hardware do kit para que o sinal do PWM acione a lmpada na placa. Observe o que acontece. 3. Combine os dois exemplos anteriores, de forma que tenhamos o relgio e o controle da luminosidade da lmpada ao mesmo tempo

Exerccios Propostos
1. Altere o exerccio proposto da aula 15 para que a converso do AD seja disparada pelo mdulo CCP2 configurado em modo comparao, gerando disparos a cada 100ms. Para isso deve-se ativar a interrupo do ADC (e no do CCP2) para fazer a leitura dos valores
Exsto Tecnologia

XM118 Microcontroladores PIC18

252

convertidos. O controle a apresentao da temperatura devem continuar sendo realizados no loop principal. 2. Configure o ECCP1 em modo PWM gerando um sinal de 2kHz. Faa o valor do Duty-cicle variar de 0 ao valor mximo seqencialmente. Configure o kit para que RC1 esteja ligado a entrada do DAC e mea com um osciloscpio o sinal de sada. Dica: a variao do valor do PWM deve ser sincronizada com os perodos do PWM. Para gerar esse sincronismo utilize o flag de interrupo do timer 2, que estoura a cada perodo do PWM quando a ps-escala do timer est em 1:1.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

253

16 Aula 16 Comunicao serial assncrona (RS232 e RS485)


Objetivos
Compreender o princpio de funcionamento das comunicaes seriais Estudar os fundamentos dos padres RS232 e RS485 Entender como a USART do PIC184550 possibilita realizar comunicao serial baseada no padro RS-232

Questionrio
1. Sobre comunicao paralela, cite: a. Suas vantagens: b. Suas desvantagens: 2. A comunicao de forma serial elimina vrios problemas presentes na comunicao paralela, mas apresenta algumas desvantegens. Quais so elas. 3. Cite alguns sistemas de comunicao serial. 4. O que comunicao sncrona? 5. O que comunicao assncrona? 6. Explique o processo pelo qual possvel criar sincronismos na comunicao assncrona sem a presena do sinal de clock. 7. Por que no possvel enviar infinitos bits usando apenas um star bit inicial? 8. Preencha a figura abaixo com os elementos que compem a comunicao serial e descreva a funo de cada um deles.

___________ _________________ _____________________ _________________________ __________ _


Exsto Tecnologia

XM118 Microcontroladores PIC18

254

9. O que so DTE e DCE? 10. Descreva a funo dos principais sinais da comunicao RS232. 11. Segundo a norma, qual a taxa mxima suportada pela RS232? E qual a distncia mxima? 12. Quis nveis de tenso representam os estados lgicos 0 e 1 na transmisso do padro RS232? 13. Cite um componente responsvel por fazer a converso de sinais em nvel TTL pra RS232. 14. O que transmisso balanceada? 15. Como possvel eliminar o rudo em uma transmisso balanceada? 16. Qual a taxa mxima especificada no padro RS485? E a distncia mxima? 17. Supondo que em uma ligao de rede RS485 de 800 metros foi medido um tempo de subida (254R) de 6 s, qual a taxa mxima pode ser alcanada? 18. Um equipamento comunica-se usando RS485 a uma taxa de 250 kbps. Qual o tempo de subida mximo aceito para que a comunicao funcione corretamente? 19. Calcule o valor do registro SPBRG e o erro percentual para as taxas de transmisso abaixo, considerando a freqncia do oscilador de 20MHz. Arbitre entre a opo de taxas altas e taxas baixas para obter o menor erro possvel Taxa de transmisso (BR) 2400 bps 9600 bps 19200 bps 57600 bps 250000 bps Spbrg Taxas altas ou baixas? Taxa real e%

Exerccios
1. Exerccio resolvido (Aula16E1): Desenvolver um programa capaz de transmitir via RS232 para um computador as teclas pressionadas no teclado e imprimir no LCD os caracteres recebidos do computador. Utilize taxa de transmisso de 9600 bps. Dica: 1. utilize no computador o Hiper Terminal ou outro software de terminal disponvel. 2. para ganhar tempo, tome como base o arquivo Aula12E1 (LCD e teclado) 2. Altere o programa anterior para realizar a comunicao entre dois kits utilizando RS485. Da mesma maneira que o exerccio acima, o valor pressionado no teclado deve ser enviado e o

Exsto Tecnologia

XM118 Microcontroladores PIC18

255

caracteres recebidos impressos no display, de forma que a tecla pressionada em um kit aparece no display do outro, e vice-versa. Dica: para usar o RS485, alm das funes de transmisso importante lembrar que se faz necessrio ativar o transmissor MAX485, o que feito colocando 1 no pino de habilitao desse componente (ligado a RA4). O pino deve permanecer em 1 pelo tempo da transmisso, que no o tempo da funo, j que a funo simplesmente inicia a transmisso.

Exerccios Propostos
1. Desenvolver um programa que fique constantemente lendo o sensor de temperatura e envie essa informao (em graus Celsius) pela porta serial RS232 para um computador. 2. Desenvolver um sistema onde 3 kits trocam informaes entre si, sendo um mestre e dois escravos. Cada escravo deve ter um endereo diferente, de forma que o mestre consiga se comunicar hora com um, hora com outro. O mestre deve realizar um comando de leitura que tenha como resposta o valor Lido no potencimetro POT de cada kit, e mostre simultaneamente esses valores no LCD.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

256

17 Aula 17 SPI
Objetivos
Entender o funcionamento de do protocolo de comunicao SPI Aprender a configurar o mdulo MSSP do PIC18 para operar em modo SPI meste Conhecer o funcionamento de potencimetros digitais. Implementar um comunicao serial entre o PIC18 e o potencimetro digital do kit

Introduo
Existem diversos componentes que utilizam o protocolo de SPI para se comunicar com outros circuitos. De fato, como um modo eficiente e simples de comunicao, os mais diversos componentes que podem ser comunicar com microcontroladores possuem essa porta de comunicao, como memrias, relgios, expansores de I/O, dispositivos de comunicao (Zigbee, ethernet, rdios), CODEC, AD, DA, amplificadores de ganho programvel, sensores de temperatura, acelermetros, para citar alguns exemplos. Como aplicao para o protocolo SPI no kit XM118 existe um potencimetro digital. Um potencimetro digital um componente que se comporta como um potencimetro convencional, isto , possui terminais e um cursor, e a resistncia entre o cursor e os terminais varia conforme o ajuste. Porm, ao contrrio de um potencimetro convencional, o ajuste do potencimetro digital feito digitalmente por um microcontrolador. No caso do componente em questo no kit, que o MCP41010, esse ajuste feito atravs da interface SPI. No kit o potencimetro digital est ligado numa montagem divisor de tenso, de maneira que os terminais estejam ligados a VDD e a GND e que possamos medir a tenso no cursor variando entre esses dois extremos. Esse sinal pode ser aplicado a um canal de AD. Para mais detalhes do funcionamento do MCP41010 e para entender como ele se comunica com o microcontrolador, consulte seu manual, que se encontra no CD que acompanha o kit.

Questionrio
1. Em quais modos pode operar a SPI do PIC18F4550? 2. Descreva a funo de todos os pinos da porta SPI do PIC18F4550. 3. Quais fontes de clock podem gerar a taxa de transmisso do mdulo MSSP em modo SPI? 4. Consulte o manual do potencimetro digital MCP41010 e responda as questes a seguir a. Qual a resistncia do potencimetro interno do MCP41010? b. Qual a faixa de tenso nos terminais do potencimetro.

Exsto Tecnologia

XM118 Microcontroladores PIC18

257

c. O nmero de tapes representa quantos valores de resistncias podem ser ajustadas no MCP41010. Qual esse valor? 5. Encontre no manual o diagrama de tempo que resume o protocolo de comunicao com o potencimetro digital. 6. Encontre no manual a tabela que apresenta o formato dos comandos enviados ao potencimetro digital.

Exerccios
1. Exerccio Resolvido (Aula16E1): Implemente um programa que envia valores para o potencimetro digital a cada 50ms. Esses valores devem variar seqencialmente entra 0 e 255 e depois de 255 a 0. Tomando como base o primeiro exerccio sobre AD, mea o valor da sada do potencimetro e mostre-o atravs de um bargraph de LEDs. Mea com um osciloscpio esse sinal. 2. Desenvolva um programa que leia a tenso do potencimetro do kit atravs do canal AN3 e ajuste o potencimetro digital com essa mesma tenso (ou o mais prximo que for possvel). No display LCD devem ser mostradas as tenses lidas do potencimetro convencional (AN3) e do potencimetro digital (AN0).

Exerccios Propostos
1. Altere o exerccio 2 para que o valor do potencimetro digital s se ajuste ao potencimetro convencional enquanto a tecla em RB0 estiver pressionada, mantendo seu valor caso contrrio.

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

258

18 Aula 18 I2C
Objetivos
Estudar o protocolo I2C Entender o funcionamento de uma memria serial I2C Realizar uma aplicao prtica envolvendo memria externa e I2C.

Questionrio
1. Em quais modos pode operar o PIC em modo I2C? 2. Explique como possvel realizar a comunicao bidirecional entre dois dispositivos no barramento I2C usando apenas 1 terminal de dados (SDA). Porque importante a presena do resistor de pull-up ligado a esse pino? 3. O que caracteriza as condies de Star e Stop no protocolo I2C? 4. O que o ACK? Quando e como ele gerado? 5. Qual o procedimento para gerar uma leitura de um endereo qualquer de um dispositivo I2C?

Exerccios
1. Exerccio Resolvido (Aula17E1): Desenvolver um programa que leia o teclado e apresente na primeira linha do display valor lido. Se for pressionada a tecla A deve-se gravar a ltima tecla vlida na EEPROM, no endereo 0. Na segunda linha deve-se apresentar o valor lido no endereo 0 da EEPROM. Aps grava algum valor desligue o kit e observe que a EEPROM no perde os dados. Cuidado! Garanta que o programa s realize uma gravao cada vez que a tecla A for pressionada. Caso o programa entre em loop e realize mltiplas gravaes a memria pode ser danificada. 2. Altere o projeto desenvolvido no exerccio 3 da aula 12, onde so lidas 4 teclas e comparadas com o 1234, para que a comparao seja feita com os quatro primeiros endereos da EEPROM externa. Alm disso, se for pressionada a tecla A pea a senha antiga e em seguida uma nova senha e grave-a na memria. Dica: necessrio garantir que a senha original (1234) esteja gravada na memria. Escreve um trecho de cdigo para fazer isso uma vez e em seguida comente essa parte do programa para que a ltima senha gravada seja preservada.

Exerccios Propostos

Exsto Tecnologia

XM118 Microcontroladores PIC18

259

1. Desenvolva um programa que grave na memria 10 valores lidos do AD (apenas os 8 bits mais significativos), sendo que a cada vez que tecla INT for pressionada aps o reset um valor seja gravado. Aps grava os 10 valores o passe a enviar esses valores repetidamente para o potencimetro digital, a intervalos de 100ms. Use um osciloscpio para observar o resultado. Como potencimetro existe apenas um mdulo MSSP realizando funes de SPI e I2C necessrio desativar um modo antes de entrar em outro. Para isso use as funes Openxxx() e Closexxx().

Anotaes:

Exsto Tecnologia

XM118 Microcontroladores PIC18

260

19 Aula 19 Interface industrial


Objetivos
Estudar circuitos para interfacear o microcontrolador com sistemas de controle industrial Aprender a usar o expansor de I/O MCP23016 Implementar aplicaes de controle usando a interface industrial Ateno: esta experincia faz uso do mdulo XMM01 Industrial Interface, que um item opcional pra o kit XM118. Verifique se esse produto faz parte do pacote adquirido.

Introduo
Expasores de I/O Apesar de estarem disponveis microcontroladores com diferentes quantidades de pinos, as vezes as condies do projeto levam a uma situao onde no h pinos suficientes para a aplicao desejada. Quando isso acontece deve-se pensar em algum processo de expanso de I/O. O mtodo mais simples atravs do uso de buffers (por exemplo, 74HC244) e Latchs (por exemplo, 74HC573), criando um barramento de dados externo compartilhado por esses dispositivos. O inconveniente desse processo que, mesmo com a expanso, o nmero de pinos demandada grande. Outro mtodo possvel so resgitradores de deslocamento, fazendo converso serial/paralelo ou paralelo/serial, de forma que o microcontrolador utilize poucos pinos em uma interface serial. Por fim, mais modernamente esto disponveis componentes chamados de expansores de I/O. esses componentes tem as mesmas caractersticas dos portais do microcontrolador, podendo-se configurar individualmente seus pinos como entrada ou sada. Eles possuem interface SPI ou I2C, facilitando em muito o desenvolvimento de aplicaes. O mdulo XMM01 utiliza um expansor de I/O MCP23016 para obter mais 16 pinos de I/O (8 entradas e 8 sadas). Interface industrial Muitas vezes o microcontrolador utilizado em aplicaes industriais, substituindo PLCs ou em automao de mquinas. Nesses casos alguns cuidados deve ser tomados. O circuito do microcontrolador, que vamos chamar circuito de controle, opera em baixas tenses (3,3VDC ou 5VDC) e aceita um certo nvel de rudo. J as cargas e dispositivos entrada de aplicaes industriais costumam operar em tenses mais altas (10 VDC, 24 VDC e 48 VDC) ou mesmo tenso alternada (110VAC e 220VAC). Alm disso, o nvel de rudo presente maior, proveniente de chaveamento de circuitos de potncia (contatores, tiristores, etc...) ou proveniente de dispositivos como motores, bombas, etc... Portanto, na prtica o desejvel o isolamento galvnico entre as partes de controle e potncia do circuito (dois circuitos so isolados galvanicamente quando no existe contato eltrico entre eles).
Exsto Tecnologia

XM118 Microcontroladores PIC18

261

Nessas situaes usa-se foto-acopladores (tambm conhecidos como opto-isoladores) para fazer garantir o isolamento dos sinais. Essa precauo no tem sentido se os circuitos ficarem em contato prximo na placa, portanto tambm deve existir um cuidado de layout para garantir a separao dos diferentes domnios eltricos. O mdulo XMM118 possui entradas e sadas isoladas (foto-acopladas) que permitem a conexo a sinais de 10 a 24VDC. Atravs do uso desse mdulo possvel realizar aplicaes de controle em aplicaes reais industriais, como: leitura de sensores digitais e chaves, acionamento de rels, vlvulas e outros dispositivos. Adicionalmente o prprio kit XM118 possui entradas (0 a 10V, 4 a 20 mA) e sadas (a sada do DAC pode ser ajustada para at 0 a 10V) que podem ser usadas em aplicaes tipicamente industriais (nesse caso no existe isolamento galvnico). Alm disso, observe que os domnios de eltricos esto separados, o que pode ser evidenciado pelos diferentes tipos de malha de terra empregados na placa.

Questionrio
Consulte o manual do MCP23016 e responda as perguntas abaixo. 1. Quantos pinos de I/O o dispositivo possui? 2. Qual a interface de comunicao desse dispositivo? 3. O MCP23016 possui 3 pinos para definio de seu endereo no barramento de comunicao. Quais so esses pinos? Quantos dispositivos iguais poderamos ter em um mesmo barramento ento? Quantos pinos de I/O estariam disponveis nessa condio? 4. Quais os registros responsveis pela definio de direo dos pinos?

Exerccios
1. Exerccio Resolvido (Aula19E1): Desenvolva uma biblioteca de funes que permita (1) configurao do MCP23016 no que se refere a direo dos pinos de I/O, (2) Leitura de portal de entrada e (3) escrita no portal de sada. Para testar essa biblioteca a informao lida da entrada deve ser apresentada nos LEDs do kit e as sadas devem ser acionadas seqencialmente a intervalos de 100ms. O protocolo de comunicao do MCP23016 similar ao da memria EEPROM, portanto use as rotinas de leitura e escrita da EEPROM I2C presentes na biblioteca I2C.h para fazer as novas funes. 2. Alterar o programa 3 da aula 7 para operar usando o XMM01. 3. Alterar o programa 2 da aula 8 para operar usando o XMM01.

Exsto Tecnologia

XM118 Microcontroladores PIC18

262

MANUAL DE OPERAO E MANUTENO

O manual de operao e manuteno descreve os circuitos do kit didtico, detalhando seu funcionamento. So tambm apresentados os esquemas eltricos desses circuitos e valores de componentes, de forma a permitir a manuteno do equipamento.

Exsto Tecnologia

XM118 Microcontroladores PIC18

263

Este manual tem como objetivos principais: Apresentar o contedo do kit (equipamentos e documentao) Apresentar um guia rpido de instalao e testes Apresentar detalhes de instalao de software e hardware Descrever os circuitos do kit, de forma a permitir identificao de

1 Contedo do Kit:
Depois de retirar o seu kit de desenvolvimento da caixa, verifique se o mesmo possui os seguintes itens: 01 Kit educacional em bastidor metlico, com fonte de alimentao gravador/depurador X-ICD2 embutido; 01 Cabo de alimentao de trs pinos(2P+T); 01 Cabo de comunicao serial; 02 Cabos de comunicao USB (um para gravao/depurao e um para aplicao) 01 header (placa para gravao de outros microcontroladores) 01 cabo RJ11/RJ11, para conexo do kit ao header. CD e

Caso ocorra a falta de algum destes itens ou defeito, consulte a Exsto Tecnologia para esclarecimentos.

1.1 Contedo do DVD


O CD trs toda a informao e programas necessrios para o uso do kit, tais como: Esquemas eltricos do kit. Exemplos e exerccios resolvidos. Documentao do produto. Manual dos componentes e outros documentos relevantes Instalao do Quartus II e outros softwares teis. Ao inserir o CD no drive ele deve automaticamente iniciar um aplicativo que permite navegar por seu contedo.

2 Instalaes
2.1 Instalao do Hardware
Ao retirar o kit da embalagem confirme a presena de todos os acessrios e equipamentos, conforme descrito no item 1 deste manual. Para alimentar o kit ligue o cabo tripolar ao kit e a uma tomada de alimentao. O kit equipado com fontes chaveadas que operam, de forma automtica, com 110 ou 220V, em 50 ou 60Hz. Para ligar o kit, use a chave que se encontra junto ao conector tripolar, na parte traseira do kit. Ligue o kit e verifique se os LEDs indicadores de alimentao e o logotipo da Exsto na parte frontal se acenderam, indicando que est tudo funcionando corretamente.

Exsto Tecnologia

XM118 Microcontroladores PIC18

264

Ateno: o kit possui protees contra descargas na entrada de alimentao e sua caraa aterrada para maior segurana dos usurios. Porm, esses recursos de proteo s so eficazes se o terceiro pino do cabo tripolar estiver conectado a um aterramento de qualidade. A Exsto tecnologia no se responsabiliza por danos ou acidentes ocasionados por baixa qualidade ou inexistncia de aterramento.

Na parte traseira do bastidor existe um conector USB. Esse conector o conector conecta o computador ao gravador/depurador X-ICD2. Ateno: no conecte o cabo USB a X-ICD2 antes de ter instalado o MPLAB, caso contrrio no ser reconhecido o driver do dispositivo, podendo ocasionar falhas de funcionamento.

Para ligar o seu XICD siga os passos abaixo: 1. Verifique se o cabo USB que acompanha o produto est conectado a uma porta USB do seu computador; 2. Conecte o XICD a outra ponta do cabo USB. Depois disto, um led verde com a identificao USB deve ficar acesso. 3. Na hora da primeira colocao do XICD, ser solicitada a instalao dos drivers do novo dispositivo pelo sistema operacional; 4. Depois de indicado a localizao dos drivers, o sistema operacional os instalar e o XICD estar pronto para uso. importante lembrar que o equipamento, estar pronto para o uso assim que os seus drivers estiverem instalados. Na seqncia do manual, sero descritos os procedimentos de instalao dos drivers e da ferramenta MPLAB da Microchip. Ainda, devemos lembrar que o uso do equipamento feito principalmente atravs do software MPLAB e por isso seria ideal se o mesmo j estivesse instalado. Depois de alimentada e detectado os drivers da placa, voc estar pronto para utilizar o XICD. A conexo/desconexo do XICD deve ser feita com a ferramenta de software MPLAB fechada. Caso adicione ou retire o XICD da conexo USB com o MPLAB aberto, o mesmo no funcionar corretamente no aplicativo. Alm das conexes de alimentao e do X-ICD2 existe ainda a conexo USB de aplicao e serial (RS232). Essas conexes sero usadas nas experincias com o kit.

Exsto Tecnologia

XM118 Microcontroladores PIC18

265

Figura 1.

Diagrama de instalao do kit usando a porta paralela.

Pronto! O kit est instalado e pronto para ser usado!

2.2 Instalao dos Softwares


2.2.1 Instalao do MPLAB 8.20 A seguir apresentado o procedimento de instalao do MPLAB 8.20. No momento em que esse documento foi escrito esta era a verso mais recente desse software. Contudo, recomendamos usar sempre a verso mais atual, que pode ser obtida gratuitamente em www.microchip.com

Execute o arquivo Install_MPLAB_v820.exe. Para isso clique em Instalar MPLAB 8.20 no aplicativo executado quando o CD inserido.

A primeira tela apenas uma tela de boas vindas. Nela so recomendadas as seguintes aes antes de instalar o MPLAB: Fechar qualquer outro aplicativo
Exsto Tecnologia

XM118 Microcontroladores PIC18

266

Desinstalar qualquer verso do MPLAB j existente (em especial as 6.x) Desabilitar o anti-virus. Tomadas essas precaues, clique em Next.

Esta tela apresenta o contrato de licena do MPLAB. Leia-o atentamente e, estado de acordo, marque a opo I accept the terms of the license agreement e clique em Next.

Nesta tela possvel escolher entre a verso completa e personalisada. Recomendamos optar por Completa e clicar em Next.

Exsto Tecnologia

XM118 Microcontroladores PIC18

267

Nesta tela possvel escolher a pasta de instalao do MPLAB, o que no recomendamos. Clique em Next.

Esta tela apresenta o contrato de licena do Application Maestro (um aplicativo que instalado juntamente como o MPLAB). Leia-o atentamente e, estado de acordo, marque a opo I accept the terms of the license agreement e clique em Next.

Exsto Tecnologia

XM118 Microcontroladores PIC18

268

Esta tela apresenta o contrato de licena do compilador C32. Leia-o atentamente e, estado de acordo, marque a opo I accept the terms of the license agreement e clique em Next.

Esta tela apresenta um resumo da instalao antes que essa seja iniciada. Estando tudo correto, clique em Next para iniciar a instalao.

Exsto Tecnologia

XM118 Microcontroladores PIC18

269

Nesta tela apresentado o andamento da instalao. Esse processo pode demorar alguns minutos.

Essa tela aparece durante a instalao e questiona sobre a instalao do compilador HI-TECH C, que um compilador (verso Demo)associado ao MPLAB. Clique Yes caso queira instal-lo e No caso contrrio.

Exsto Tecnologia

XM118 Microcontroladores PIC18

270

Ao final da instalao aparecer a tela acima. necessrio reiniciar o computador para que o MPLAB possa ser executado normalmente. Para isso, marque a opo Yes, I want to restat my computer nowe clique em Finish. 2.2.2 Instalando o Compilador C18

Ateno: Antes de instalar o compilador C18 instale o MPLAB IDE.

A seguir apresentado o procedimento de instalao do MPLAB C18 3.30. No momento em que esse documento foi escrito esta era a verso mais recente desse software. Contudo, recomendamos usar sempre a verso mais atual, que pode ser obtida gratuitamente em www.microchip.com

Executando o programa de instalado do C18 a primeira tela que aparece apresentada a seguir.

Exsto Tecnologia

XM118 Microcontroladores PIC18

271

Conforme a orientao apresentada, o MPLAB IDE deve ser fechado antes da instalao do C18. Clique em Next para a prxima tela.

Uma vez lido o contrato de licena e aceitos seus termos marque a opo I Accept e clique em Next.

Exsto Tecnologia

XM118 Microcontroladores PIC18

272

Na tela acima possvel alterar o diretrio de instalao do C18 clicando no boto Browse..., apesar de recomendarmos que isso seja feito. Clique em Next.

A tela acima permite escolher os componentes do pacote do compilador a serem instalados. Recomendamos que todos os campos sejam marcados. Feito isso, clique em Next.

Exsto Tecnologia

XM118 Microcontroladores PIC18

273

importante marcar todos os campos nas telas acima para que o MPLAB IDE seja atualizado para trabalhar com o compilador C18. Aps marcar todos os campos, clique em Next.

Exsto Tecnologia

XM118 Microcontroladores PIC18

274

Clicando em Next na tela acima a instalao tem incio. Esse processo pode levar algum tempo. Uma vez terminado esse processo a tela abaixo apresentada. Clique em Finish para terminar o processo.

2.3 Configuraes aps a instalao


2.3.1 Configurao dos drivers do XICD

Exsto Tecnologia

XM118 Microcontroladores PIC18

275

O XM118 acompanhado de um CD contendo os programas utilizados para o desenvolvimento e ainda os drivers necessrios para a instalao do hardware do XICD. Este item do manual visa continuar os esclarecimentos quando a instalao dos drivers no primeiro uso do sistema. Ento, quando o equipamento conectado ao computador atravs do cabo USB, isto detectado pelo computador mostrando a seguinte tela de identificao do dispositivo:

Assistente para adicionar novo hardware Para a instalao dos drivers do XICD, podemos proceder de pelo menos duas formas: A primeira fazer com que o sistema operacional procure automaticamente os drivers do novo dispositivo, deixando a opo selecionada como acima. Isso funciona bem quando h uma conexo internet, pois ele procurar os drivers automaticamente. A segunda forma procurar localmente os drivers. Para isso, temos duas localizaes diferentes para os drivers. Para adicionar localmente devemos selecionar a opo Instalar de uma lista ou local especifico e colocar o caminho onde sero encontrados os drivers.

Exsto Tecnologia

XM118 Microcontroladores PIC18

276

Procura avanada de drivers Conforme j dito, podemos encontrar os drivers em alguns locais distintos. Um destes lugares seria o diretrio onde foi instalado o prprio MPLAB que pode ser visto como exemplo na figura anterior. O caminho padro para a procura dos drivers do XICD no MPLAB : C:\Arquivos de programas\Microchip\MPLAB IDE\ICD2\Drivers. Este local conter os drivers do XICD se voc est instalou o MPLAB na pasta padro usando o sistema operacional em portugus. Outro local onde podemos localizar os drivers seria no CD que acompanha o produto. A localizao dele dentro do CD seria na pasta programas e na subpasta drivers. Depois de instalado o mesmo est pronto para uso e a seguinte janela aparecer.

Localizao do painel de configurao

Exsto Tecnologia

XM118 Microcontroladores PIC18

277

2.3.2

Configurao do IDE MPLAB para uso do XICD Como j foi dito anteriormente, o XICD pode ser usado como ferramenta de programao de

microcontroladores e tambm de depurao em tempo real. Para ambas as operaes so necessrias o preparo do MPLAB para usar o XICD para cada uma destas funes. Essas funes so chamadas de modos de programao (Programming mode)e modo de depurao (Debugger mode) que so descritos aqui. Para o uso do XICD para ambos os modos de operao necessria a sua configurao atravs de um assistente de configurao do XICD, que define alguns parmetros para o seu funcionamento. Abaixo temos um passo a passo de como proceder na instalao deste modelo de XICD. Tanto em modo de depurao quanto em modo de programao necessria a configurao de qual equipamento ser usado pelo MPLAB para acesso ao microcontrolador, que feita atravs dos menus Debugger e Programmer. Depois que o usurio definir que tipo de operao far, s selecionar o ICD2 no menu indicado, no nosso caso aqui estamos usando o modo de programao:

Selecionando XICD como ferramenta de programao Depois de selecionado o ICD2 como ferramenta de programao vem finalmente configurao do mesmo, onde temos um wizard para facilitar esta configurao.

Exsto Tecnologia

XM118 Microcontroladores PIC18

278

Tela inicial do wizard para configurao do XICD Pressionando a tecla avanar, temos a prxima janela que permite escolher em que porta externa est o dispositivo. Sendo o nosso XICD com comunicao USB, devemos escolher a opo USB na opo Com Port .

Opo de porta de comunicao do XICD

Exsto Tecnologia

XM118 Microcontroladores PIC18

279

Em seguida, devemos especificar se o target (placa onde est o microcontrolador a ser gravado) ser alimentado pelo XICD ou ter alimentao prpria. recomendado que somente circuitos com baixo consumo sejam colocados para serem alimentados pelo XICD j que sua alimentao vem da porta USB e conseqentemente o target ser alimentado pela mesma fonte. Este tipo de alimentao ento deve ser usado com prudncia para evitar danos a porta USB. Em uma porta USB padro temos disponvel por porta somente 500mA aproximadamente. Assim, o consumo do XICD mais o consumo do target no podem superar o valor mximo da porta USB. No XICD, no termino desta configurao, possui uma forma de sinalizar se o hardware do XICD est fornecendo a energia ou se o target. Abaixo temos a janela de configurao que permite configurar o XICD para fornecer alimentao para o target ou se o mesmo tem sua prpria fonte de alimentao.

Fonte de alimentao do target Ateno: No caso do uso com o kit XM118 a opo deve sempre ser utilizar a alimentao do target (Target has own power supply).

Exsto Tecnologia

XM118 Microcontroladores PIC18

280

Configurao da conexo automtica A janela acima define se o XICD tentar se conectar ao target de forma automtica ao ser selecionado no programmer ou debugger e a prxima definir se ser de forma automtica o carregamento do sistema operacional para o XICD. Onde cada sistema operacional diferente para a famlia de microcontrolador utilizada e necessria para a programao do target.

Configurao do download automtico do sistema operacional do XICD

Exsto Tecnologia

XM118 Microcontroladores PIC18

281

Resumo das configuraes do XICD

Exsto Tecnologia

XM118 Microcontroladores PIC18

282

3 Hardware do kit XM118


A Figura 2 apresenta a serigrafia da placa do Kit Educacional XM118.

Figura 2. Serigrafia do Kit XM118 O hardware do Kit Educacional XM118 foi concebido para permitir a maior flexibilidade possvel nas ligaes. Par os pinos com diversas funes foram ligados a chaves dip switch, de forma a permitar a conexo com diferentes circuitos de aplicao. Para configurar corretamente o hardware para suas necessidades leia as tabelas indicativas das funes das chaves. Muitos dos circuitos de aplicao possuem pontos de testes (test points) que facilitam a medida de seus principais sinais. A seguir so apresentadas detalhadamente as partes do circuito. Elas fazem referncia ao esquema eltrico que se encontra no anexo A deste manual e em forma PDF no CD.

3.1 Fonte de alimentao


O kit Educacional CPLD equipado com duas fontes chaveadas independentes de +5VDC/3A e +12VDC/1A. A tenso de entrada dessas fontes de 90 a 240 VAC (fullrange), em 50 ou 60 Hz. Estas fontes tm proteo de sada contra curto-circuito e sobrecarga que desativa as sadas, retornando a operao normal assim que o problema deixa de existir. Adicionalmente, existe uma
Exsto Tecnologia

XM118 Microcontroladores PIC18

283

proteo entrada contra surtos de tenso. O bastidor metlico aterrado, para maior proteo dos usurios. Ateno: os recursos de proteo s so eficazes se o terceiro pino do cabo tripolar estiver conectado a um aterramento de qualidade. A Exsto tecnologia no se responsabiliza por danos ou acidentes ocasionados por baixa qualidade ou inexistncia de aterramento.

As fontes de alimentao esto disponveis para o usurio em conectores apropriados. Seu uso, contudo, deve respeitar a corrente mxima disponvel.

3.2 Microcontrolador PIC18F4450


O kit XM118 foi baseado no PIC18F445. Trata-se de um microcontrolador de 8 bits de alto desempenho, com uma srie de perifricos e recursos que o tornam bastante completo, permitindo atravs de seu estudo explorar vrios recursos comumente encontrados em microcontroladores. Em especial, esse componente possui um perifrico USB que sua comunicao operando como device, isto , ele pode ser conectado a um computador ou outro dispositivo host. A tabela a seguir trs as principais caractersticas do PIC18F4550. Caracterstica Freqncia de Operao Memria de programa Memria de dados RAM Memria de dados EEPROM Fontes de interrupo Terminais de I/O Temporizadores/Contadores CCP ECCP 1 Comunicao Serial Comunicao USB Comunicao Paralela Conversor analgico para digital Detector de tenso programvel Conjunto de instrues
Notas:
1 2

PIC18F4520 DC a 48MHz 32768 bytes 2048 bytes 256 bytes 20 36 4 1 1 MSSP EUSART 2 Sim SPP3 10 bits, 13 canais 1 75 convencionais + 8 do modo entendido

O mdulo ECCP um mdulo CCP melhorado, com novas caractersticas O mdulo EUSART um mdulo USART melhorado, com novas caractersticas 3 Porta paralela mestre

Caractersticas dos PIC18F4550 A pinagem desse componente apresentada na figura abaixo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

284

Pinagem do PIC18F4550 Para mais dados tcnicos, consulte o manual do componente que se encontra do CD que acompanha o produto. Alm do PIC18F4550 outros microcontroladores PIC de 40 pinos podem ser usados na placa, desde que sejam compatveis pino a pino (o que verdade para a maioria dos pinos de componentes com o mesmo encapsulamento). Alguns modelos muito populares suportados com algumas poucas restries so o PIC18F4520 e o PIC16F877A.

3.3 Conectores para acesso de I/O (PORTS)


Imediatamente acima do conector de expanso de aplicao existem conectores que do acesso aos portais do microcontrolador. A serigrafia da placa indica a disposio dos pinos. Ateno: quando usar um pino do microcontrolador para aplicaes externas verifique o circuito que se encontra associado esse pino no esquema eltrico. Quando possvel, desligue as chaves de configurao associadas ao pino em questo.

3.4 X-ICD e conector ICSP


O kit XM118 equipado com um gravador/depurador X-ICD2, que fica embutido dentro do gabinete do kit. Esse equipamento totalmente compatvel com o MPLAB e com o gravador ICD-2 da Microchip, sendo reconhecido como um ICD-2 dentro do MPLAB. O XICD-2 est conectado ao XM118 e conseqentemente ao microcontrolador nele instalado atravs da chave U8, essa chave permite desconectar os pinos do microncontrolador do XICD quando
Exsto Tecnologia

XM118 Microcontroladores PIC18

285

necessrio, j que os pinos de gravao so pinos de I/O usados em algumas aplicaes e o pino de reset. Ateno: para realizar corretamente o processo de gravao certifique-se de que todas as chaves de U8 esto na posio ON.

Alm disso, o conector CN9 permite gravar/depurar outros componentes externos, seja atravs do header (placa para gravao de componente) que acompanha o circuitos, seja em placas desenvolvidas pelo prprio usurio. Para isso, um cabo RJ11-RJ11 acompanha o produto. Ateno: quando for gravar ou depurar um microcontrolador externo todas as chaves de U8 devem estar em OFF, impedindo assim conflito com o

microcontrolador instalado no XM118.

Como o hardware do XICD no precisa de nenhuma interveno do usurio ele no ser abordado aqui. Contudo necessrio verificar algumas caractersticas para que o produto possa funcionar corretamente em qualquer tipo de circuito alvo. Algumas dessas caractersticas podem ser citadas como a seqncia de pinos do conector e os elementos que esto ligados nas vias de gravao/depurao do microcontrolador. No XICD, temos quatro leds indicadores que permitem analisar o atual funcionamento do XICD, cuja funo descrita pela figura abaixo (esses LEDs so do XICD e portanto esto dentro do bastidor, no estando acessveis para o usurio, servindo apenas para manuteno): FUNO/ LEDs Target/Verde Busy/Amarelo Error/Vermelho USB/Verde Descrio Indica se a placa alvo est sendo alimentada pelo XICD Indica que o XICD est executando alguma tarefa Indica se aconteceu algum erro na comunicao com o XICD Indica que o XICD est alimentado e pronto para uso Esquema de pinos do XICD

Almm desses LEDs internos, existe na placa o LED D41 que indica quando o microcontrolador est sendo acessado. Observando esse LED podemos detectar se existem problemas na gravao.

Exsto Tecnologia

XM118 Microcontroladores PIC18

286

O primeiro ponto a ser abordado a seqncia de pinos do XICD. O cabo que acompanha o produto se limita a fazer a ligao entre o XICD e a placa reader. Entretanto, pode ser necessrio fazer a ligao do XICD a outro tipo de placa onde o microcontrolador no pode ser colocado no reader ou ainda por ser necessria a depurao o microcontrolador tem que estar funcionando na placa de desenvolvimento. Como a seqncia dos pinos deve ser respeitada para que o funcionamento seja feito, abaixo temos uma figura que mostra a forma com que cada pino est ligado no conector do XICD.

Esquema de pinos do XICD Observao: A inverso da seqncia de pinos pode causar danos ao XICD. Certifique-se que os pinos estejam devidamente conectados caso esteja construindo a placa alvo e esteja atento a serigrafia das placas para correta conexo.

Na prxima figura apresentada a conexo entre o XICD e a placa de desenvolvimento com uso do cabo telefnico adaptado. O diagrama tambm mostra a conexo entre o conector e o PIC na placa de desenvolvimento. Recomenda-se tambm que se use um resistor de pull-up, se necessrio, entre VPP e VDD de modo que zerando a alimentao possa-se reiniciar o PIC alvo. O valor deste resistor usualmente de 10K.

Exsto Tecnologia

XM118 Microcontroladores PIC18

287

Ligao do XICD Embora o pino 2 (VDD) possa suprir uma quantidade limitada de corrente para o alvo sobre certas condies, nas operaes seguintes os pinos 2 e 3 sero omitidos. Estes pinos so apresentados no diagrama, mas apenas trs ligaes so relevantes para operao do XICD: VPP, PGC e PGD. Nos diagramas seguintes os pinos de VDD e VSS (GND) sero ignorados. Mas esteja ciente de que o VDD da placa de desenvolvimento tambm usado para alimentar os drivers de sada do XICD. importante lembram que nem todos PICs tem entradas para alimentaes distintas, mas se elas existirem no PIC em que se deseja operar, todas devem conectadas corretamente para que o XICD opere corretamente. A interconexo muito simples, qualquer problema comum freqentemente causado por outras conexes ou componentes nas vias de uso do XICD que interferem com seu funcionamento, como os apresentados no capitulo abaixo. 3.4.1 Circuitos que impediro o funcionamento correto do XICD Na figura abaixo so apresentados alguns procedimentos que impediro o funcionamento

correto do XICD.

Exsto Tecnologia

XM118 Microcontroladores PIC18

288

Ligao do XICD Para o projeto de ligao do XICD em uma placa de desenvolvimento siga corretamente as recomendaes abaixo: No use resistores de pull-up nos pinos PGC e PGD: eles iro impedir a transio rpida, tanto de dados como do sinal de clock nas operaes de gravao e depurao. No use capacitores no pino VPP: eles iro impedir a transio rpida de VPP. Geralmente o resistor de pull-up suficiente. No use diodos nos pinos PGC e PGD: eles iro impedir a comunicao bidirecional entre a placa e o XICD.

3.5 Configurao
O microcontrolador tem um nmero limitado de pinos para poder interagir com todos os circuitos presentes no kit. Alm disso, vrios pinos tm mais de uma funo, podendo trabalhar de forma diferente com cada circuito a ele associado. Para maximizar o nmero de aplicaes que podem ser realizadas se faz necessrio atribuir mais de um circuito a cada terminal do componentes e selecionar o circuito a ser usado em cada caso. Alguns circuitos esto simplesmente ligados em paralelos, como por exemplo, LEDs e LCD, teclado e chaves. Outros so selecionados atravs de chaves de configurao. A tabela abaixo apresenta as configuraes possveis, indicando o portal do microcontrolador, o sinal utilizado, sua funo e direo (em relao o microcontrolador).

Exsto Tecnologia

XM118 Microcontroladores PIC18

289

Ateno: Nos pinos o microcontrolador que tem mais de uma funo associada apenas uma deve ser selecionada por vez.

Portal do Sinal microcontrolador RC0 555_OUT TACOGRAFO RC1 AQUECEDOR LAMP RC2 VENTILADOR BUZZER DAC RA3 POT RA2 LCD_CS USB_SENSE RA4 TACOGRAFO CS_REST RS_EN RE1 LED_1G RE0 LED_1R RA5 LED_2G RA3 LED_2R RA0 ANALOG1 POT DPOT TEMP RA1 ANALOG2 DAC_OUT RA2 0-10V RA3 4-20mV RC4 DRC5 D+ RC6 RS_485_TX RS_232_TX RC7 RS_485_RX RS_232_RX RC6 RELE_1 RC7 RELE_2 RD6 RELE_3 RD7 RELE_4
Notas:

Direo Entrada Entrada Sada Sada Sada Sada Sada Entrada Sada Entrada Entrada Sada Sada Sada Sada Sada Sada Entrada Entrada Entrada Entrada Entrada Entrada Entrada Entrada Bidir Bidir Sada Sada Sada Sada Sada Sada Sada Sada

Funo Sinal do gerador de sinais Sinal do tacgrafo (conta-giros) da ventoinha Controle da resistncia para aquecimento Controle da lmpada DC Controle da ventoinha Controle do buzzer Entrada do filtro do DAC do PWM Sinal analgico do potencimetro Chip Select do display grfico Entrada indicadora de conexo com USB Sinal do tacgrafo (conta-giros) da ventoinha Habilitao do MCP41010 e do HT1380 Habilitao de transmisso pela porta RS485 Aciona cor verde do LED bicolor 1 Aciona cor vermelha do LED bicolor 1 Aciona cor verde do LED bicolor 2 Aciona cor vermelha do LED bicolor 2 Entrada Analgica AN1 Potencimetro Potencimetro digital Sensor de temperatura Entrada Analgica AN1 Feedback do conversor D/A Entrada Analgica de 0 a 10 V Entrada Analgica de 4 a 20 mA Comunicao USB 1 Transmisso serial para RS485 2 Transmisso serial para RS232 2 Recepo serial para RS485 2 Recepo serial para RS232 2 Aciona Rel 1 Aciona Rele 2 Aciona Rel Aciona Rele 4

1 Ao contrrio dos demais, esses pinos esto diretamente ligados a porta USB e, para us-los como entradas a chave deve estar em ON. Quando for usada a comunicao as chaves devem permanecer em OFF. 2 Na serigrafia das chaves est trocado TX com RX, sendo correta a informao apresentada na tabela.

A tabela abaixo mostra a configurao dos dip switch para cada circuito.

Exsto Tecnologia

XM118 Microcontroladores PIC18

290

Portal do microcontrolador RC0 RC1 RC2

Sinal

Chave

Dip Switch

PWM e Timers 555_OUT 1 TACOGRAFO 2 AQUECEDOR 3 LAMP 4 VENTILADOR 5 BUZZER 6 DAC 7 POT 8 Perifricos Diversos LCD_CS 1 USB_SENSE 2 TACOGRAFO 3 CS_REST 4 LED_1G 5 LED_1R 6 LED_2G 7 LED_2R 8 Perifricos Analgicos ANALOG1 1 ANALOG2 2 0-10V 3 4-20mA 4 POT 5 DPOT 6 TEMP 7 DAC_OUT 8 Portas Seriais D- 1 1 1 D+ 2 RS_EN 3 Snifer 4 2 RS_485_TX 5 RS_232_TX 2 6 2 RS_485_RX 7 2 RS_232_RX 8 Rels RELE_1 1 RELE_2 2 RELE_3 3 RELE_4 4

CH3

RA3 RA2 RA4 RE1 RE0 RA5 RA3 RA0 RA1 RA2 RA3 RA0

CH2

CH1

RA1 RC4 RC5 RA4 RC6 RC7

CH4

RC6 RC7 RD6 RD7


Notas:

CH5

1 Ao contrrio dos demais, esses pinos esto diretamente ligados a porta USB e, para us-los como entradas a chave deve estar em ON. Quando for usada a comunicao as chaves devem permanecer em OFF. 2 Na serigrafia das chaves est trocado TX com RX, sendo correta a informao apresentada na tabela.

Exsto Tecnologia

XM118 Microcontroladores PIC18

291

3.6 Dispositivos de entrada


Ateno: Como os pinos de gravao e depurao so RB7(PGC), RB6(PGD) e VPP/MCLR/RE3 (VPP) caso a aplicao use esses pinos, os mesmos devem ser desconectados do XICD atravs das chaves de U8. Pelos mesmos motivos, estes pinos no estaro disponveis para uso se estiver sendo usado o depurador.

Ateno Quando usar um dispositivo de entrada certifique-se que outro no esteja em condio que atrapalhe o uso. Por exemplo, se as chaves estiverem acionadas o teclado no funcionar corretamente.

3.6.1

Teclado Um teclado matricial esta disponvel. Trata-se de um teclado que opera por varredura, isto ,

so aplicados diferentes valores nas linhas e pelo valor lido nas colunas possvel identificar a tecla pressionado, com uma clara economia de pinos (8 pinos para ler 16 teclas). O teclado esta ligado ao microcontrolador conforme a tabela baixo. RB3 1 4 7 */E RB2 2 5 8 0 RB1 3 6 9 #/F RB0 A B C D

RB4 RB5 RB6 RB7

Ateno: Para o correto funcionamento do teclado necessrio ativar os resistores de pull-up internos do microcontrolador por software.

3.6.2

Chaves Esto disponveis 8 chaves dip switch ligadas ao portal B do microcontrolador. Observe que

essas chaves foram projetadas para ser baixo ativas, portanto ao serem colocadas na posio ON elas aterram os pinos do microcontrolador. Estando aberto o nvel lgico alto nas entradas do microcontrolador garantido pelos resistores de pull-up internos. Ateno: Para o correto funcionamento das chaves necessrio ativar os resistores de pull-up internos do microcontrolador por software.

3.6.3

Push-Buttons Existem 5 chaves pulsativas (push-buttons) ligados a pinos do microcontrolador. Alguns

desses pinos possuem funes especiais, como interrupes e contadores. Essas chaves so baixo
Exsto Tecnologia

XM118 Microcontroladores PIC18

292

ativas, portanto ao serem pressionados foram nvel lgico baixo nos pinos do microcontrolador e quando no esto pressionadas tem nvel lgico alto garantido por resistores de pull-up. A tabela abaixo mostra a ligao das chaves push bottons at ao microcontrolador. Chave SW1 SW4 SW5 SW6 SW2 SW3 Nome RESET INT0 INT1 INT2 TMR1 CH0 Ponto ligado no microcontrolador MCLR/VPP/RE3 RB0/INT RB1 RB2 RC0 RC1

Ateno: Para o correto funcionamento dos pushbuttons necessrio ativar os resistores de pull-up internos do microcontrolador por software.

3.7 Dispositivos de sada


3.7.1 Display LCD O kit possui um display LCD alfanumrico de 2 linhas por 16 colunas, ligado ao conector P1.

O ajuste de contraste desse LCD feito pelo trimpot R37. O kit suporta tambm displays LCD grficos (no inclusos) atravs do conector P2. O ajuste de contraste desse LCD feito pelo trimpot R37. Para habilitar o display tem que ligar a chave 1 do dip switch CH2. Para mais informaes sobre o uso do LCD consulte o captulo dedicado a esse assunto na apostila. 3.7.2 Displays de 7 segmentos O kit XM118 possui tambm 4 displays de sete segmentos. Estes displays trabalham de forma

multiplexada, isto , seus segmentos esto todos ligados em paralelo e os comuns dos displays so acionados por um processo de varredura, dando a impresso de estarem simultaneamente ativos. Paras habilitar o display consulte a tabela de configuraes. 3.7.3 LEDs No portal D esto ligados 8 leds convencionais baixo ativos (acendem com nvel lgico baixo). H ainda 2 LEDs bicolores ligados a outros pinos do microcontrolador, conforme o esquema eltrico. Para saber como habilitar os leds bicolor consulte a tabela de configuraes.
Exsto Tecnologia

XM118 Microcontroladores PIC18

293

3.8 Acionamentos
H diversos circuitos de aplicao que podem ser acionados no XM118. A maioria desses circuitos esta associada aos pinos com funo de PWM, mas nada impede de usar esse pinos simplesmente para ligar e desligar os circuitos em questo. Todos estes circuitos usam como drive o integrado ULN2803, que possui sada open-colector com capacidade de at 500mA. Ateno: Consulte as tabelas de configurao do microcontrolador e faa os ajustes necessrios nas dip switch antes de usar os circuitos aqui descritos.

3.8.1

1 Buzzer Um buzzer piezeltrico permite a gerao de sons no kit. Para esse buzzer operar

necessrio aplicar um sinal varivel na freqncia que se deseja ouvir. Ele no produzir som algum se for simplesmente alimentado. 3.8.2 Rels Quatro rels esto disponveis para aplicaes do usurio. possvel ter acesso aos terminais

Com (comum), NA (normalmente aberto) e NF (normalmente fechado). Os reles tem capacidade de acionar cargas de at 10A, com tenso mxima de at 250V. 3.8.3 Lmpada DC Diversas aplicaes interessantes podem ser feitas com a lmpada DC presente no kit. Em

especial, aplicaes de PWM podem variar a intensidade de brilho. Essa lmpada alimentada com 12VDC. 3.8.4 Resistncia para aquecimento Para aplicaes envolvendo malhas de controle existe um conjunto de dispositivos formados

pela resistncia para aquecimento, sensor de temperatura, ventoinha e sensor de rotao. Um sensor de temperatura (mais detalhes na seo que trata de entradas analgicas) montado junto ao resistor para realizao de medidas Esse resistor de potencia est ligado a 12VDC e pode tambm ser controlador pelo mdulo PWM. 3.8.5 Ventoinha A ventoinha presente na placa um motor DC que pode ser ligado ou desligado ou ter sua

velocidade controlada por PWM. Essa ventoinha esta ligada ao lado da resistncia, podendo ser usada para refriger-la.
Exsto Tecnologia

XM118 Microcontroladores PIC18

294

3.8.6

Sensor de rotao Associada a ventoinha foi colocado um sensor de rotao (tacgrafo). Este composto por

um emissor infravermelho constantemente ativo e um receptor infravermelho, cada um de um lado da ventoinha. Ao girar, as ps da ventoinha interrompem periodicamente o fluxo, fazendo com que o circuito do receptor gere um sinal quadrado de freqncia proporcional a velocidade de gira da ventoinha.

3.9 Dispositivos analgicos


Diversos circuitos analgicos esto ligados aos canais do ADC do PIC. Para usar o ADC do PIC consulte o captulo especfico na apostila. Ateno: Verifique as configuraes necessrias para usar cada perifrico analgico na tabela de configuraes.

3.9.1

Potencimetro Trata-se de um potencimetro linear ligado entre +5VDC e GND, de forma que a excurso de

seu cursor gera valores entre estes limites. 3.9.2 Sensor de temperatura Este sensor de temperatura LM35 fica junto resistncia de aquecimento. Ele fornece uma

tenso de 10 mV por grau Celsius, sendo que essa variao linear em toda a faixa. 3.9.3 Condicionador de sinais analgicos Para a leitura de sinais analgicos externos foram inclusas no kit 4 entradas analgicas com circuitos condicionadores de sinal. So elas: An1 e An2: entradas amplificadas com ganhos ajustveis de 1 a 10 vezes. O ganho desses amplificadores ajustado pelos respectivos trimpots. 0 a 10 V: esta entrada divide o sinal por 2. Ela foi pensada para permitir a interao com sistemas industriais que usam a escala de 0 a 10 V para medidas. 4 a 20 mA: esta entrada na verdade uma entrada de corrente. Um circuito conversor de corrente para tenso converte o sinal de entrada de forma que 20 mA correspondero a 5 V no terminal do PIC. Ateno: As sadas dos condicionadores de sinal tm proteo contra sobre tenso. Apesar disso, no se deve aplicar sinais superiores a 12 V nas entradas.

Exsto Tecnologia

XM118 Microcontroladores PIC18

295

3.9.4

Conversor D/A Uma possibilidade de uso do PWM para gerao de nveis analgicos de tenso. O princpio

de funcionamento que ao passar o sinal do PWM por um filtro passa baixas a sada apresenta um nvel de tenso proporcional ao duty-cicle do sinal de entrada. O filtro passa baixo necessrio j est presente no kit. A sada desse filtro amplificada com ajuste de ganho permitindo gerar sinais com at 10 V de amplitude para o duty-cicle de 100%. Existem muitos dispositivos industriais controlados por sinais de tenso de 0 a 10 V, como por exemplo o inversor de freqncia. Existe ainda um feedback do sinal gerado para o microcontrolador, para averiguar o correto funcionamento.

3.10 Interfaces seriais


3.10.1 Interface RS-232 O microcontrolador PIC possui uma UART, isto , uma interface de comunicao serial. Apesar desse mdulo do microcontrolador realizar toda a temporizao e tratamento lgico da comunicao, para que se possa conect-lo a um computador necessrios um conversos de nvel que adqe os sinais de sada do microcontrolador para o padro RS-232 (EIA-232C). Isto feito pelo CI MAX232 (U5) e componentes ligados a ele. Existe tambm um conector DB-9 (CN4) para a ligao do kit ao PC. Consulte a tabela de configuraes para verificar as configuraes necessrias. Para monitorar a atividade da USART foram includos dois LEDs ligados aos pinos TX e RX do microcontrolador. 3.10.2 Interface RS-485 A USART do microcontrolador tambm pode ser usada para se comunicar no padro RS-485 (EIA-485). Para isso necessrio a adequao dos sinais do microcontrolador a esse padro, funo realizada pelo CI MAX485 (CN8). Nesse caso o conector U19 permite a conexo com os sinais de comunicao (A e B) e sinais de alimentao para um circuito remoto (+12V e GND). Consulte a tabela de configuraes para verificar as configuraes necessrias. Consulte a tabela de configuraes para verificar as configuraes necessrias. Para monitorar a atividade da USART foram includos dois LEDs ligados aos pinos TX e RX do microcontrolador. 3.10.3 USB O PIC184550 possui uma interface USB Device. O padro USB prev duas classes de dispositivos: device e host. Dispositivos device devem se conectar a um dispositivo host (geralmente um computador), no sendo possvel a comunicao entre dois devices.

Exsto Tecnologia

XM118 Microcontroladores PIC18

296

No kit o conector CN9 um conector B (device) que permita a conexo do kit a um host USB. O LED USB DETECT (D28) sinaliza quando o kit est conectado a um host. Devido as caractersticas de comunicao USB, que opera em altas taxas, os sinais de D+ e Desto ligados diretamente aos pinos do microcontrolador, havendo chaves que permitem desconectar esses pinos do restante do circuito. Consulte a tabela de configuraes para verificar quais as chaves utilizadas.

3.11 Diversos
Essa seo descreve alguns circuitos que se comunicam com o microcontrolador atravs dos protocolos I2C e SPI. A presena desses componentes , alm do estudo deles em si, o estudo desses protocolos. Para maiores informaes sobre esses componentes e seus protocolos comunicao consulte os manuais dos mesmos no CD. 3.11.1 Memria EEPROM O componente 24C08 (U15) uma memria EEPROM que se comunica atravs do protocolo I2C. Ela tem capacidade de 8kbit (1 kbyte). 3.11.2 Potencimetro digital SPI Mais uma inovao do kit. O potencimetro digital utiliza a comunicao serial SPI (Serial Peripheral Interface), que utilizada para a comunicao entre dois componentes em curta distncia. Assim como o potencimetro convencional, o potencimetro digital est ligado de tal maneira que possvel ler o valor de seu cursor, tenso esta que varia de 0 a 5V. 3.11.3 Relgio de tempo real (RTC) O HT1380 (U12) um relgio de tempo real (RTC Real Time Clock) e calendrio com comunicao serial. Ele possui um cristal prprio para gerao da base de tempo (X1) e mantido por uma bateria recarregvel(BAT1), mesmo se o kit for desligado da energia. O protocolo de comunicao desse componente assemelha-se ao protocolo SPI, porm apresenta algumas divergncias do padro, consulte seu manual para mais detalhes de funcionamento. 3.11.4 Gerador de Freqncia Muitas aplicaes do microcontrolador precisam de um sinal peridico aplicado aos pinos do microcontrolador. Para prover o kit conta com um gerador de freqncias capaz de gerar sinais quadrados de 60 Hz a 3 kHz (aproximadamente). Esse circuito tem como ncleo o CI LM555 (U26). A freqncia pode ser ajustada atravs do potencimetro R36.
Exsto Tecnologia

XM118 Microcontroladores PIC18

297

3.12 Hardware do mdulo XMM01 - Interface Industrial


O mdulo XMM01 um circuito para se conectado aos conectores de expanso do Kit XM118. Seu objetivo ser uma interface entre o microcontrolador e circuitos tipicamente usados na indstria. Para tanto ele composto de um expansor de I/O, entradas fotoacopladas e sadas fotoacopladas com seus respectivos drives protegidos. A seguir apresentada uma explicao dos circuitos do mdulo. No apndice desse manual esto os esquemas eltricos (assim como no CD que acompanha o kit) que devem ser considerados para melhor entendimento. So duas as funes dos circuitos de entrada e sada: (1)adequar o nvel dos sinais industriais para o microcontrolador e vice-versa e (2) isolar galvanicamente os circuitos. Os circuitos de entrada foram construdos de forma que so aceitas tenses de entrada entre 12Vdc e 24Vdc. Da mesma forma, os drivers de sada so capazes de acionar sinais de 12Vdc a 24Vdc, sendo protegidos com PTC (fusvel rearmvel) limitando a corrente de sada em 300mA. O isolamento galvnico pode ser observado pela diviso de terras na placa, que so propositalmente feitos em formatos diferentes para evidenciar esse fato. Para que o isolamento eltrico seja efetivo, no deve haver conexo entre os terras de entrada e/ou sada com o terra de controle. A fonte que fornece tenso para as sadas deve ser uma fonte externa, isolada da fonte do kit. A figura abaixo apresenta a placa delimitando os diferentes domnios de terra.

Tanto entradas como sadas possuem LEDs indicadores de seus estados lgicos.

Exsto Tecnologia

XM118 Microcontroladores PIC18

298

3.12.1 Expansor de I/O O expansor de I/O (I/O Expander) um componente que, como o prprio nome diz, permite expandir a quantidade de entradas e sadas do microcontrolador. O componente usado, o

MCP23016, possui uma interface serial I2C e dois portais de oito bits. Esses portais so praticamente iguais aos portais do microcontrolador. Esses portais podem ser configurados como entrada ou sada e, ainda, possvel configurar interrupes nos pinos de entradas. Para mais caractersticas tcnicas e informaes sobre o uso, consulte o manual desse componente. 3.12.2 Entradas As entradas foto acopladas identificam como 1 sinais entre 12Vdc e 24Vdc, tornando-as aptas a serem conectadas a sensores industriais e controles que operam nessa faixa de tenso. As entradas so protegidas quanto a inverso de polaridade. Tenses acima de 30Vdc podem danificar o foto acoplador. Todas as entradas so referenciadas a um ponto comum (COM). A figura abaixo mostra como devem ser feitas as ligaes.

Ligao de entradas ao mdulo XMM01 3.12.3 Sadas As sadas tambm so fotoacopladas e possuem um driver que aciona tenses de 12 a 24VDC, dependendo da alimentao aplicada. Isso permite acionar diretamente algumas cargas, como solenides e vlvulas, ou acionar rels para ativar cargas de mais alta potncia. Todas so protegidas contra curto por um PTC (fusvel rearmvel) que limita a corrente mxima em 300mA por sada. A figura abaixo apresenta a forma como fonte e cargas devem ser ligadas s sadas.

Exsto Tecnologia

XM118 Microcontroladores PIC18

299

Ligao de sadas ao mdulo XMM01

4 Resolvendo Problemas
4.1 Suporte Tcnico
A Exsto Tecnologia oferece suporte tcnico gratuito para questes de utilizao de seus produtos atravs do e-mail suporte@exsto.com.br ou do telefone (35) 3471-6898.

5 Garantia
O Kit tem garantia total contra defeitos de fabricao pelo perodo de 1 (hum) ano. No esto cobertos quaisquer danos causados pelo ou ao kit por mau uso do mesmo.

Exsto Tecnologia

XM118 Microcontroladores PIC18

300

6 Apndice A - Esquemas eltricos


6.1 XM118

Exsto Tecnologia

XM118 Microcontroladores PIC18

301

Exsto Tecnologia

XM118 Microcontroladores PIC18

302

Exsto Tecnologia

XM118 Microcontroladores PIC18

303

Exsto Tecnologia

XM118 Microcontroladores PIC18

304

Exsto Tecnologia

XM118 Microcontroladores PIC18

305

Exsto Tecnologia

XM118 Microcontroladores PIC18

306

Exsto Tecnologia

XM118 Microcontroladores PIC18

307

Exsto Tecnologia

XM118 Microcontroladores PIC18

308

6.2 XMM01

Exsto Tecnologia

XM118 Microcontroladores PIC18

309

Exsto Tecnologia

XM118 Microcontroladores PIC18

310

Exsto Tecnologia

XM118 Microcontroladores PIC18

311

Exsto Tecnologia

XM118 Microcontroladores PIC18

312

Exsto Tecnologia