Your SlideShare is downloading. ×

Apostila de PIC

6,496
views

Published on

Published in: Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,496
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
410
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. XM118 - Microcontroladores PIC18. .Revis˜o a Principais Autores Descri¸˜o da Vers˜o ca a T´rmino e A Jos´ Domingos Adriano e Vers˜o inicial. a 01/06/2009 B Raffael De Oliveira Mar¸ano c Altera¸˜o do esquema el´trico ca e 12/08/2009 C Victor Piva Renault Grossi Altera¸˜o no corpo do documento. ca 21/02/2011 c Copyright 2008 por Exsto Tecnologia Ltda. Todos os direitos reservados ”Desenvolvido e produzido com orgulho no Brasil”. Exsto Tecnologia Ltda Av. Cel. Francisco Palma, 95 - Sala 02 - Centro Santa Rita do Sapuca´ - MG ı CEP: 37540-000 +55 35 3471 6898 www.exsto.com.br. 2
  • 2. Sum´rio aLista de Figuras 10Lista de Tabelas 13Apostila Te´rica o 221 Microcontroladores 25 1.1 Sistema computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.1.1 Mem´rias . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . 26 1.1.2 Dispositivos de entrada e sa´ ıda . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.1.3 Perif´ricos . . . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . . . . . . 30 1.1.4 CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.2 Arquitetura Computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.2.1 Arquitetura von-Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.2.2 Arquitetura Harvard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.2.3 Microcontrolador, Microprocessador e DSP . . . . . . . . . . . . . . . . . . 372 PIC18, microcontroladores de alto desempenho 38 2.1 Microcontroladores PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2.1.1 A Microchip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.2 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.2.1 Pinagem e hardware b´sico . . . . . . . . . . a . . . . . . . . . . . . . . . . . 42 2.3 Mem´rias . . . . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . 43 2.3.1 Mem´ria de programa . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . 43 2.3.2 Mem´ria de dados . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . 46 2.4 Processador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.4.1 ALU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.5 Portais de I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.6 Conjunto de Instru¸˜es . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . 53 2.7 Oscilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.7.1 Oscilador a cristal ( LP,XT e HS) . . . . . . . . . . . . . . . . . . . . . . . 55 2.7.2 PLL - Phase Locked Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.7.3 Oscilador RC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.7.4 Oscilador Externo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.7.5 Oscilador Interno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.7.6 Compara¸˜o entre os modos de oscilador . . . ca . . . . . . . . . . . . . . . . . 59 2.7.7 Sistema de clock do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . 59 2.7.8 Configura¸˜o de clock para operar com USB ca . . . . . . . . . . . . . . . . . 61 2.7.9 Escolha de modo e troca de oscilador . . . . . . . . . . . . . . . . . . . . . . 62 2.8 Caracter´ısticas Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.8.1 Modos de baixo consumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 2.8.2 Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 3
  • 3. XM118 - Microcontroladores PIC18 2.8.3 POR - Power-On Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.8.4 PWRT - Power-up Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.8.5 OST - Oscillator Start-up Timer . . . . . . . . . . . . . . . . . . . . . . . . 67 2.8.6 BOR - Brown-out Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.8.7 Causas de reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 2.8.8 Sequˆncia de inicializa¸˜o . . . . . . e ca . . . . . . . . . . . . . . . . . . . . . . 68 2.8.9 Watch-Dog Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.8.10 Prote¸˜o de C´digo (Code Protect) ca o . . . . . . . . . . . . . . . . . . . . . . 69 2.8.11 Grava¸˜o e depura¸˜o . . . . . . . . ca ca . . . . . . . . . . . . . . . . . . . . . . 693 Ferramentas para o PIC18F: MPLAB IDE e Compilador C18 71 3.1 O MPLAB IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 3.1.1 Criando um novo projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 3.1.2 Construindo um projeto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.1.3 Gravando o microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . 76 3.2 Simula¸˜o em C . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . 76 3.2.1 Simula¸˜o . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . 78 3.2.2 Outras funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.2.3 Analisador l´gico . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . . 79 3.2.4 Gera¸˜o de est´ ca ımulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.3 O compilador C18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 3.3.1 Outros Compiladores C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 3.4 Depura¸˜o em C . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . 824 Linguagem C para microcontroladores 84 4.1 Introdu¸˜o a linguagem C . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 84 4.1.1 A fun¸˜o printf() . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 86 4.1.2 ”C ou n˜o C, eis a quest˜o”. . . . . . . . . a a . . . . . . . . . . . . . . . . . . 86 4.1.3 Passado e Futuro da linguagem C . . . . . . . . . . . . . . . . . . . . . . . 89 4.2 Diretivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.2.1 #include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.2.2 #define . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.2.3 #pragma config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.2.4 #pragma interrupt e #pragma interruptlow . . . . . . . . . . . . . . . . . . 98 4.3 Tipos de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.3.1 Declara¸˜o de vari´veis e constantes . . . . ca a . . . . . . . . . . . . . . . . . . 100 4.3.2 Vari´veis locais e globais . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 101 4.3.3 Vetores e matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.3.4 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.3.5 Qualificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.4 Comandos B´sicos . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 104 4.4.1 Atribui¸˜o . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 104 4.4.2 Decis˜o . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 110 4.4.3 Repeti¸˜o . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 113 4.5 Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . 115 4.5.1 Passagem de parˆmetros . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 115 4.6 Interrup¸˜es . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . 118 4.6.1 Utiliza¸˜o das Interrup¸˜es . . . . . . . . . ca co . . . . . . . . . . . . . . . . . . 121 4.6.2 Interrup¸˜es no C18 . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . 124 4.7 Fun¸˜es uteis . . . . . . . . . . . . . . . . . . . . . co ´ . . . . . . . . . . . . . . . . . . 126 4.7.1 Opera¸˜es matem´ticas . . . . . . . . . . . co a . . . . . . . . . . . . . . . . . . 128 4.8 T´cnicas de Otimiza¸˜o de C´digo . . . . . . . . . e ca o . . . . . . . . . . . . . . . . . . 128 4.8.1 Rotinas Matem´ticas . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 129 4
  • 4. XM118 - Microcontroladores PIC18 4.8.2 Usando assembly no C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 4.8.3 Uso de vari´veis locais e globais . . . . . . . . . . . . . . . . . . . . . . . . . 131 a5 Aplica¸˜es co 132 5.1 Display de 7 segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.1.1 Displays multiplexados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.1.2 Apresentando valores em display . . . . . . . . . . . . . . . . . . . . . . . . 134 5.2 Buzzer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 5.3 Teclado Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 5.3.1 Interrup¸˜o por mudan¸a de estado na ca c porta B . . . . . . . . . . . . . . . . 137 5.4 Display de cristal l´ ıquido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 5.4.1 A biblioteca XLCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 5.5 Mem´rias EEPROM e FLASH . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 141 5.5.1 Mem´ria EEPROM . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 143 5.5.2 Mem´ria Flash . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . . . 1456 Perif´ricos e 148 6.1 Como usar a ajuda das bibliotecas do C18 . . . . . . . . . . . . . . . . . . . . . . . 148 6.2 Contadores e Temporizadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 6.2.1 Timer 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 6.2.2 Timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 6.2.3 Timer 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 6.2.4 Timer 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 6.2.5 Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . 158 6.3 Comparadores Anal´gicos . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . 158 6.3.1 Funcionamento do Comparador . . . . . . . . . . . . . . . . . . . . . . . . . 161 6.4 Conversor Anal´gico-Digital . . . . . . . . . . . . . . . o . . . . . . . . . . . . . . . . 163 6.4.1 Quantiza¸˜o . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 163 6.4.2 Taxa de Amostragem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 6.4.3 Linearidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.4.4 Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 6.4.5 Aplica¸˜o . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 167 6.4.6 Usando o conversor ADC no microcontrolador . . . . . . . . . . . . . . . . 167 6.5 CCP - Captura, Compara¸˜o e PWM . . . . . . . . . ca . . . . . . . . . . . . . . . . 170 6.5.1 Modo captura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.5.2 Modo compara¸˜o . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 172 6.5.3 Modo PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 6.5.4 EPWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 6.6 EUSART - Porta Serial Ass´ ıncrona . . . . . . . . . . . . . . . . . . . . . . . . . . 176 6.6.1 Comunica¸˜o serial ass´ ca ıncrona . . . . . . . . . . . . . . . . . . . . . . . . . 176 6.6.2 Comunica¸˜o paralela . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 176 6.6.3 Comunica¸˜o serial . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 176 6.6.4 EUSART do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 6.6.5 EIA-232C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 6.6.6 Protocolos de comunica¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . . . . 183 6.7 MSSP - Porta Serial S´ ıncrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 6.7.1 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 6.7.2 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 6.8 USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 5
  • 5. XM118 - Microcontroladores PIC187 Anexos 196 7.1 Anexo A - Distribui¸˜o de Pinos do 18F4550 . . . . . . ca . . . . . . . . . . . . . . . 196 7.2 Anexo B - Registros de fun¸˜o especial do PIC18F4550 ca . . . . . . . . . . . . . . . 197 7.3 Anexo C - Leituras Recomendadas . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 7.4 Anexo D - Bibliografia: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 7.5 Anexo E - Conjunto de instru¸˜es do PIC18 . . . . . . . co . . . . . . . . . . . . . . . 200Caderno de Experiˆncias e 2038 Aulas Pr´ticas a 204 8.1 Aula 1 - Introdu¸˜o aos microcontroladores . . . . . . . . . ca . . . . . . . . . . . . . 205 8.2 Aula 2 - O PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 8.3 Aula 3 - Assembly do PIC18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 8.4 Aula 4 - Ferramentas de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . 210 8.5 Aula 5 - Caracter´ ısticas Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 8.6 Aula 6 - Iniciando com a linguagem C . . . . . . . . . . . . . . . . . . . . . . . . . 215 8.7 Aula 7 - Estruturas de Decis˜o . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . 217 8.8 Aula 8 - Estruturas de Repeti¸˜o . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . 221 8.9 Aula 9 - Fun¸˜es . . . . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . 224 8.10 Aula 10 - Interrup¸˜es . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . 225 8.11 Aula 11 - Display de 7 segmentos e buzzer . . . . . . . . . . . . . . . . . . . . . . . 227 8.12 Aula 12 - Teclado Matricial e LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 8.13 Aula 13 - Contadores e temporizadores . . . . . . . . . . . . . . . . . . . . . . . . . 230 8.14 Aula 14 - Conversor A/D‘ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 8.15 Aula 15 - M´dulo CCP . . . . . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . 233 8.16 Aula 16 - Comunica¸˜o serial ass´ ca ıncrona (RS232 e RS485) . . . . . . . . . . . . . 235 8.17 Aula 17 - SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8.18 Aula 18 - I 2 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 8.19 Aula 19 - Interface industrial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242Manual de Opera¸˜o e Manuten¸˜o. ca ca 2449 Conte´ do do Kit: u 246 9.1 Conte´do do DVD . . . . . . . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . . 247 9.2 Instala¸˜es . . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . 247 9.2.1 Instala¸˜o do Hardware . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . 247 9.2.2 Instala¸˜o dos Softwares . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . 248 9.2.3 Configura¸˜es ap´s a instala¸˜o . . . . . co o ca . . . . . . . . . . . . . . . . . . . 258 9.3 Hardware do kit XM118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 9.3.1 Fonte de alimenta¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . 265 9.3.2 Microcontrolador PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . 265 9.3.3 Conectores para acesso de I/O (PORTS) . . . . . . . . . . . . . . . . . . . . 267 9.3.4 ICD e conector ICSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 9.3.5 Configura¸˜o . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . 269 9.3.6 Dispositivos de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 9.3.7 Dispositivos de sa´ ıda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 9.3.8 Acionamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 9.3.9 Dispositivos anal´gicos . . . . . . . . . . o . . . . . . . . . . . . . . . . . . . 275 9.3.10 Interfaces seriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 9.3.11 Diversos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 9.4 Resolvendo Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 6
  • 6. XM118 - Microcontroladores PIC189.4.1 Suporte T´cnico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 e 7
  • 7. Lista de Figuras 1 Caracter´ ısticas dos PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.1 Diagrama em blocos gen´rico de um sistema e computacional . . . . . . . . . . . . . 26 1.2 Portais de entrada e sa´ıda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.3 Esquema t´ ıpico de um pino de I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 1.4 Diagrama em blocos de uma CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1.5 Arquitetura von-Neumann . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.6 Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.7 Arquitetura Harvard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.1 Diagrama em blocos do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.2 Pinagem do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.3 Mapa e mem´ria de programa . . . . . . . . . . . . . . . . . o . . . . . . . . . . . . . 44 2.4 Estrutura do PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.5 Ponteiro da pilha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.6 Mapeamento de mem´ria de dados para PIC18F4550 . . . . o . . . . . . . . . . . . . 47 2.7 Registros de fun¸˜es especiais existentes no PIC18F4550 . . co . . . . . . . . . . . . . 48 2.8 Ciclos de instru¸˜o . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . 50 2.9 ALU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.10 Registro STATUS / Bits de flag . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.11 Esquema gen´rico de um pino . . . . . . . . . . . . . . . . . e . . . . . . . . . . . . . 52 2.12 Sistema de oscila¸˜o . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . 55 2.13 Circuito do Oscilador a Cristal/Ressonador . . . . . . . . . . . . . . . . . . . . . . 55 2.14 Partida do oscilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.15 Esquema b´sico de um PLL . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . 56 2.16 Circuito do oscilador no modo RC. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.17 Forma de onda do oscilador RC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.18 Circuitos osciladores: (a) cristal paralelo e (b) cristal s´rie. e . . . . . . . . . . . . . 58 2.19 Sistema de gera¸˜o e sele¸˜o de clock do PIC18F4550. . . . ca ca . . . . . . . . . . . . . 60 2.20 Controle do oscilador (OSCTUNE) . . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.21 Controle do oscilador (OSCCON) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 2.22 Diagrama de reset do PIC18F4550. . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 2.23 Situa¸˜es de Brown-out . . . . . . . . . . . . . . . . . . . . co . . . . . . . . . . . . . 67 2.24 RCON e seus bits. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.1 Barra de ferramentas ICD2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.1 Diagrama de interrup¸˜es do PIC18F . co . . . . . . . . . . . . . . . . . . . . . . . . . 119 4.2 Registro INTCON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 4.3 Registro INTCON 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 4.4 Registro INTCON 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.1 - Displays de LED: (a) disposi¸˜o dos segmentos, (b) catodo comum e (c) anodo ca comum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 8
  • 8. XM118 - Microcontroladores PIC185.2 Esquema Simplificado do Teclado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365.3 Fluxograma / Leitura do teclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375.4 Esquema B´sico do Display . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . 1395.5 Caracteres do display. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405.6 EECON1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425.7 Processo de leitura e escrita da EEPROM . . . . . . . . . . . . . . . . . . . . . . . 1435.8 Processo de leitura da FLASH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1465.9 Processo de escrita na FLASH(PIC18F452) . . . . . . . . . . . . . . . . . . . . . . 1466.1 Aspecto da pasta PERIPH-LIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496.2 Conte´do da ajuda. . . . . . . . . . . . . . . . . . u . . . . . . . . . . . . . . . . . . 1496.3 Resumo das bibliotecas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506.4 Vers˜o de AD do microcontrolador utilizado. . . . a . . . . . . . . . . . . . . . . . . 1506.5 Apresenta¸˜o da fun¸˜o ajuda. . . . . . . . . . . . ca ca . . . . . . . . . . . . . . . . . . 1516.6 Diagrama do Timer 0 no modo 8 bits . . . . . . . . . . . . . . . . . . . . . . . . . . 1556.7 Diagrama do Timer 0 no modo 16 bits . . . . . . . . . . . . . . . . . . . . . . . . . 1556.8 Diagrama do Timer 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566.9 Diagrama em blocos do timer 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1576.10 Diagrama do timer 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1576.11 Registro de configura¸˜o do comparador . . . . . . ca . . . . . . . . . . . . . . . . . . 1596.12 Configura¸˜es poss´ co ıveis do comparador. . . . . . . . . . . . . . . . . . . . . . . . . 1606.13 Representa¸˜o do funcionamento do comparador . ca . . . . . . . . . . . . . . . . . . 1616.14 Descri¸˜o da sa´ do comparador . . . . . . . . . ca ıda . . . . . . . . . . . . . . . . . . 1626.15 Escala de convers˜o . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 1646.16 Grau de Linearidade de Convers˜o . . . . . . . . . a . . . . . . . . . . . . . . . . . . 1656.17 Diagrama em blocos do conversor A/D . . . . . . . . . . . . . . . . . . . . . . . . . 1666.18 Escala de convers˜o . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . . . . . . . 1666.19 Diagrama em blocos do ADC do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . 1686.20 Diagrama em blocos do ADC do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . 1686.21 Diagrama do modo captura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716.22 Diagrama do modo compara¸˜o . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 1726.23 Diagrama em blocos no modo PWM . . . . . . . . . . . . . . . . . . . . . . . . . . 1736.24 Sinal PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1746.25 Comunica¸˜o Ass´ ca ıncrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1786.26 M´dulo de Recep¸˜o . . . . . . . . . . . . . . . . . o ca . . . . . . . . . . . . . . . . . . 1786.27 M´dulo de Transmiss˜o . . . . . . . . . . . . . . . o a . . . . . . . . . . . . . . . . . . 1796.28 Especifica¸˜es el´tricas do EIA-232C . . . . . . . . co e . . . . . . . . . . . . . . . . . . 1816.29 Esquemas liga¸˜o de diversos transceptores a rede ca . . . . . . . . . . . . . . . . . . 1826.30 Pinos para opera¸˜o em SPI . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 1866.31 Diagrama em blocos para o modo SPI . . . . . . . . . . . . . . . . . . . . . . . . . 1866.32 Diagrama em blocos para o modo I2C escravo. . . . . . . . . . . . . . . . . . . . . 1886.33 Protocolo I2C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1886.34 Condi¸˜es de Start e Stop. . . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . 1886.35 Sinal de no-acknowledge (NACK). . . . . . . . . . . . . . . . . . . . . . . . . . . . 1896.36 Start e Stop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1896.37 Opera¸˜o de leitura. . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 1906.38 Opera¸˜o de escrita . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . 1906.39 Diagrama em blocos para o modo I 2 C escravo . . . . . . . . . . . . . . . . . . . . 1906.40 Diagrama em blocos para o modo I 2 C mestre . . . . . . . . . . . . . . . . . . . . . 1916.41 Tipos de conectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1947.1 Conven¸˜es do PIC 18F . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 co7.2 Conjunto de instru¸˜es do Pic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 co 9
  • 9. XM118 - Microcontroladores PIC187.3 Conjunto de instru¸˜es do Pic(segunda parte) . . . . . . . . . . . . . . . . . . . . 201 co7.4 Conjunto de instru¸˜es do Pic(terceira parte) . . . . . . . . . . . . . . . . . . . . . 202 co9.1 Diagrama de instala¸˜o do kit . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2489.2 Tela inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2499.3 Contrato de licen¸a do MPLAB. . . . . . . . . . . . . . . . . c . . . . . . . . . . . . 2499.4 Sele¸˜o de vers˜o. . . . . . . . . . . . . . . . . . . . . . . . . . ca a . . . . . . . . . . . . 2509.5 Pasta de instala¸˜o do MPLAB. . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2509.6 Contrato de licen¸a do Application Maestro. . . . . . . . . . . c . . . . . . . . . . . . 2519.7 Contrato de licen¸a do compilador C32. . . . . . . . . . . . . c . . . . . . . . . . . . 2519.8 Resumo da instala¸˜o . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2529.9 Andamento da instala¸˜o. . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2529.10 Instala¸˜o do compilador HI-TECH C. . . . . . . . . . . . . . ca . . . . . . . . . . . . 2539.11 Tela de conclus˜o da instala¸˜o. . . . . . . . . . . . . . . . . . a ca . . . . . . . . . . . . 2539.12 Tela inicial de instala¸˜o do C18. . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2549.13 Contrato de licen¸a. . . . . . . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . 2559.14 Diret´rio de instala¸˜o . . . . . . . . . . . . . . . . . . . . . . o ca . . . . . . . . . . . . 2559.15 Componentes do pacote do compilador. . . . . . . . . . . . . . . . . . . . . . . . . 2569.16 Campos a serem selecionados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2569.17 Campos a serem selecionados 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2579.18 Tela inicio de instala¸˜o. . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2579.19 Tela de conclus˜o. . . . . . . . . . . . . . . . . . . . . . . . . a . . . . . . . . . . . . 2589.20 Assistente para adicionar novo hardware. . . . . . . . . . . . . . . . . . . . . . . . 2589.21 Procura avan¸ada de drivers. . . . . . . . . . . . . . . . . . . c . . . . . . . . . . . . 2599.22 Localiza¸˜o do painel de configura¸˜o . . . . . . . . . . . . . ca ca . . . . . . . . . . . . 2609.23 Selecionando XICD como ferramenta de programa¸˜o . . . .ca . . . . . . . . . . . . 2609.24 Tela inicial do wizard para configura¸˜o do XICD . . . . . . . ca . . . . . . . . . . . . 2619.25 Op¸˜o de porta de comunica¸˜o do XICD . . . . . . . . . . . ca ca . . . . . . . . . . . . 2619.26 Fonte de alimenta¸˜o do target. . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2629.27 Configura¸˜o da conex˜o autom´tica . . . . . . . . . . . . . . ca a a . . . . . . . . . . . . 2639.28 Configura¸˜o do download autom´tico do sistema operacional ca a do XICD . . . . . . 2639.29 Resumo das configura¸˜es do XICD . . . . . . . . . . . . . . co . . . . . . . . . . . . 2649.30 Serigrafia do Kit XM118 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2649.31 Pinagem do PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2669.32 Esquema de pinos do XICD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2689.33 Liga¸˜o do XICD . . . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2689.34 Liga¸˜o do XICD . . . . . . . . . . . . . . . . . . . . . . . . . ca . . . . . . . . . . . . 2699.35 Dom´ ınios de terra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2789.36 Liga¸˜o de entradas ao m´dulo XMM01 . . . . . . . . . . . . ca o . . . . . . . . . . . . 2799.37 Liga¸˜o de sa´ ca ıdas ao m´dulo XMM01 . . . . . . . . . . . . . o . . . . . . . . . . . . 279 10
  • 10. Lista de Tabelas 2.1 Caracter´ısticas dos PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.2 Caracter´ısticas el´tricas de entrada e sa´ . . . . . e ıda . . . . . . . . . . . . . . . . . . 42 2.3 Ciclos ”Q”do microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.4 Sele¸˜o de capacitores para oscilador a cristal . . . ca . . . . . . . . . . . . . . . . . . 56 2.5 Compara¸˜o entre os modos de oscilador . . . . . . ca . . . . . . . . . . . . . . . . . . 59 2.6 Frequˆncia / fator de divis˜o do PLL prescaler . . e a . . . . . . . . . . . . . . . . . . 61 2.7 PLL postscaler / Frequˆncia do oscilador principal e . . . . . . . . . . . . . . . . . . 62 2.8 Combina¸˜es poss´ co ıveis de modos de baixo consumo e fontes de clock. . . . . . . . . 65 3.1 Comandos e suas descri¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . co 78 4.1 Palavras reservadas pelo padr˜o ANSI. . . a . . . . . . . . . . . . . . . . . . . . . . . 85 4.2 Compara¸˜o entre C e Assembly . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . 88 4.3 PLL Prescaler Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.4 CPU System Clock Postscaler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.5 USB Clock Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.6 Oscillator Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.7 Oscillator Selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.8 Internal/External Oscillator Switchover . . . . . . . . . . . . . . . . . . . . . . . . 92 4.9 Power-up Timer Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 4.10 Brown-out Reset Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.11 Brown-out Voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.12 USB Voltage Regulator Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.13 Watchdog Timer Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.14 Watchdog Timer Postscale Select bits . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.15 MCLR Pin Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.16 Low-Power Timer 1 Oscillator Enable . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.17 PORTB A/D Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.18 CCP2 MUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.19 Stack Full/Underflow Reset Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.20 Single-Supply ICSP Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.21 Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable . . . . . . . . . 95 4.22 Extended Instruction Set Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.23 Background Debugger Enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.24 Code Protection bit Block 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.25 Code Protection bit Block 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.26 Code Protection bit Block 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.27 Code Protection bit Block 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.28 Boot Block Code Protection bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.29 Data EEPROM Code Protection bit . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.30 Write Protection bit Block 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.31 Write Protection bit Block 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 11
  • 11. XM118 - Microcontroladores PIC184.32 Write Protection bit Block 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.33 Write Protection bit Block 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.34 Boot Block Write Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.35 Configuration Register Write Protection . . . . . . . . . . . . . . . . . . . . . . . . 974.36 Data EEPROM Write Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.37 table EEPROM Write Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.38 Table Read Protection bit Block 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.39 Table Read Protection bit Block 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.40 Table Read Protection bit Block 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.41 Boot Block Table Read Protection . . . . . . . . . . . . . . . . . . . . . . . . . . . 984.42 Tipos da dados inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.43 Tipos da dados inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.44 Representa¸˜o de valores . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . 1004.45 Operadores matem´ticos . . . . . . . . . a . . . . . . . . . . . . . . . . . . . . . . . . 1054.46 Operadores Comparativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064.47 Operadores Comparativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.48 Operadores Comparativos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074.49 operadores de manipula¸˜o de mem´ria ca o . . . . . . . . . . . . . . . . . . . . . . . . 1084.50 Operadores de manipula¸˜o de mem´ria ca o . . . . . . . . . . . . . . . . . . . . . . . . 1084.51 Controle das interrup¸˜es . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . 1244.52 Fun¸˜es de convers˜o de tipo . . . . . . co a . . . . . . . . . . . . . . . . . . . . . . . . 1264.53 Fun¸˜es de Reset . . . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . 1264.54 Fun¸˜es do portal B . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . 1274.55 Fun¸˜es do portal B . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . 1274.56 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1274.57 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285.1 Acionamento de display de sete segmentos. . . . . . . . . . . . . . . . . . . . . . . 1335.2 D´ıgitos/Linhas/Colunas de um teclado matricial. . . . . . . . . . . . . . . . . . . . 1355.3 Liga¸˜o entre o PIC e o teclado matricial. . . . . ca . . . . . . . . . . . . . . . . . . . 1365.4 C´digos hexadecimais de comandos do LCD. . . o . . . . . . . . . . . . . . . . . . . 1385.5 Endere¸os de posi¸˜o no display . . . . . . . . . . c ca . . . . . . . . . . . . . . . . . . . 1385.6 Descri¸˜o dos pinos do display. . . . . . . . . . . ca . . . . . . . . . . . . . . . . . . . 1395.7 Comandos XLCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416.1 Fun¸˜es da Biblioteca timers.h . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1586.2 Fun¸˜es da biblioteca ANCOMP.h co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636.3 Fun¸˜es de uso do ADC . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696.4 Fun¸˜es de Captura . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716.5 Fun¸˜es de compara¸˜o . . . . . . co ca . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726.6 Fun¸˜es para PWM . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1756.7 Fun¸˜es da USART . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1806.8 Fun¸˜es da USART . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816.9 Fun¸˜es da USART . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1856.10 Fun¸˜es da SPI . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1876.11 Pinos para opera¸˜o em SPI . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . 1876.12 Fun¸˜es de I 2 C . . . . . . . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1926.13 Fun¸˜es da EEPROM I 2 C . . . . . co . . . . . . . . . . . . . . . . . . . . . . . . . . . 1939.1 Caracter´ ısticas dos PIC18F4550 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2669.2 Esquema de pinos do XICD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2679.3 Configura¸˜o das chaves. . . . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2709.4 Configura¸˜o do dip switch . . ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 12
  • 12. XM118 - Microcontroladores PIC189.5 Leitura do teclado matricial pelo microcontrolador . . . . . . . . . . . . . . . . . . 2729.6 Leitura do teclado matricial pelo microcontrolador . . . . . . . . . . . . . . . . . . 273 13
  • 13. XM118 - Microcontroladores PIC18Introdu¸˜o ca Parab´ns! Vocˆ acaba de adquirir um produto de alta qualidade e tecnologia de ponta. O e eKit Educacional XM118 ser´ de grande aux´ no aprendizado e desenvolvimento de sistemas a ıliodigitais, na elabora¸˜o de cursos e treinamentos que envolvam microcontroladores PIC18. ca A Exsto Tecnologia ´ uma empresa situada em Santa Rita do Sapuca´ Minas Gerais, cidade e ı,conhecida como ”Vale da Eletrˆnica”por seu destaque na ind´stria eletroeletrˆnica e pela ex- o u ocelˆncia de suas institui¸˜es de ensino. Nossa miss˜o ´ sempre fornecer as melhores ferramentas e co a epara o desenvolvimento e aprendizado em eletrˆnica e desenvolvimento de software. Visite nosso osite www.exsto.com.br para conhecer outras solu¸˜es e produtos oferecidos. co 14
  • 14. XM118 - Microcontroladores PIC18Apresenta¸˜o do produto ca O Kit Educacional XM118 ´ um ambiente de desenvolvimento que visa facilitar o aprendizado ee o desenvolvimento de aplica¸˜es de microcontroladores PIC18. co Seu desenvolvimento foi baseado no PIC18F4550, que dentre outras caracter´ ısticas importantespossui um perif´rico USB Device, apesar de suportar outros componentes de 40 pinos (nestes ecasos nem todas as aplica¸˜es da placa s˜o suportadas). A tabela abaixo apresenta algumas das co aprincipais caracter´ ısticas do PIC18F4550. A tabela a seguir traz as principais caracter´ ısticas do PIC18F4550. Figura 1: Caracter´ ısticas dos PIC18F4550 15
  • 15. XM118 - Microcontroladores PIC18 A escolha da fam´ PIC18 se justifica por ser uma fam´ de dispositivos de 8 bits de alto ılia ıliadesempenho, que possui recursos comuns a todos os microcontroladores modernos, permitindoum aprendizado que n˜o se limite apenas a essa fam´ mas que se estenda a outras fam´ a ılia ıliasPIC e mesmo a outros fabricantes. Outra vantagem dessa linha ´ poder usar um compilador C eprofissional como o C18. Na atualidade o desenvolvimento em sistema embarcados ´ praticamente etodo feito em C, sendo usado o Assembly apenas em situa¸˜es espec´ co ıficas. O kit foi concebido para poder explorar ao m´ximo os recursos oferecidos pelo microcontro- alador. As diversas aplica¸˜es est˜o dispostas de forma did´tica, com indica¸˜o na serigrafia da co a a caplaca. Est˜o dispon´ a ıveis diversos pontos de medida (teste points) que permitem a visualiza¸˜o cados sinais de maior relevˆncia. O gravador/depurador XICD-2 embutido no kit permite, al´m a eda grava¸˜o a depura¸˜o (esse processo ser´ mais explorado ao longo do curso); esse dispositivo ca ca a´ totalmente compat´ com o ICD-2 Microchip e conecta-se diretamente ao MPLAB IDE. Ase ıvelprincipais caracter´ ısticas do kit XM118 s˜o: a • Baseado no PIC18F4550; • Fontes de alimenta¸˜o; ca – +5 e +12V; – Fontes chaveadas com sele¸˜o autom´tica de tens˜o e prote¸˜es; ca a a co • Bastidor robusto em a¸o; c • Gravador/depurador XICD-2 (compat´ com MPLAB) embutido; ıvel • Acesso a todos os pinos do microcontrolador; • Configura¸˜es de hardware atrav´s de dip switch; co e • 8 chaves dip switch ligadas ao PORTb; • Teclado matricial de 16 teclas; • 6 push-buttons em pinos de fun¸˜o especial(reset interrup¸˜es,timers); ca co • 8 LEDs convencionais ligados ao PORTD; • 2 LEDs bicolores; • 4 displays de 7 segmentos multiplexados; • Display LCD Alfanum´rico; e • Conector para LCD Gr´fico 128x64 (Opcional); a • Buzzer; • Lˆmpada DC acionada por PWM; a • 4 rel´s; e • Gerador de sinal ajust´vel; a 16
  • 16. XM118 - Microcontroladores PIC18• Sistema de controle; – Resistˆncia para aquecimento; e – Ventoinha; – Sensor de temperatura ; – Tac´grafo para medida de velocidade da ventoinha; o• Dispositivos de comunica¸˜o serial; ca – Mem´ria EEPROM I2C o – Potenciˆmetro digital SPI o – RTC com bateria pr´pria o• Portas de comunica¸˜o serial; ca – RS232; – RS485; – USB 2.0 Full Speed (Device);• Perif´ricos anal´gicos; e o – DAC a partir do PWM; – ADC com canais especiais: ∗ Potenciˆmetro; o ∗ Sensor de temperatura; ∗ Duas entradas com ganho ajust´vel de 1 a 10; a ∗ Entrada 0 a 10VDC; ∗ Entrada 4 a 20mA Como v´rias aplica¸˜es utilizam os mesmos pinos do microcontrolador o kit possui um s´rie a co e de dip switchs para configura¸˜o de hardware. Consulte o manual e o esquema el´trico . ca e 17
  • 17. XM118 - Microcontroladores PIC18Objetivo deste documento Este documento ´ divido em trˆs unidades, com os seguintes conte´dos: e e u • Apostila: apresenta a conceitua¸˜o te´rica sobre o assunto do kit ca o • Caderno de Experiˆncias: traz a orienta¸˜o para a realiza¸˜o das experiˆncias pr´ticas. e ca ca e a • Manual de Opera¸˜o e Manuten¸˜o: re´ne as informa¸˜es necess´rias para instala¸˜o e ca ca u co a ca configura¸˜o do kit, al´m de trazer esquemas el´tricos e outras informa¸˜es importantes ca e e co para manuten¸˜o. ca Documentos adicionais como guias de software e manuais de componentes est˜o tamb´m a econtidos no CD ou DVD que acompanha o kit. Esse conte´do ser´ discutido oportunamente u ana se¸˜o Manual. ca 18
  • 18. XM118 - Microcontroladores PIC18Orienta¸˜o Pedag´gica ca o O material did´tico (apostila e caderno de experiˆncias) tem como fun¸˜o guiar o aluno durante a e catodo o seu aprendizado em Microcontroladores PIC18 utilizando o kit XM118. A apostila trazos conte´dos te´ricos sobre microcontroladores e linguagem C. Ela ´ organiza em cap´ u o e ıtulos, deforma que possa ser dividida conforme o plano de aula e carga hor´ria do curso. a Temos o prop´sito de explorar os conceitos abordados e imediatamente prover a integra¸˜o o cado aluno com o prazer da pr´tica, tornado seu aprendizado mais interessante e consistente. Todo ao conte´do aqui ´ abordado de forma a fomentar a vontade do aluno e aplicar o conhecimento de u eforma imediata, permitindo que ele possa criar seus pr´prios circuitos a partir dos conhecimentos oadquiridos. O curso e, em especial as experiˆncias pr´ticas, foram pensados com o objetivo de levar o e aaluno a adquirir competˆncias para o trabalho com microcontroladores, a saber: e • 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 perif´ricos mais comuns em microcontroladores; e • Desenvolver projetos usando microcontroladores; O assunto microcontroladores ´ bastante extenso e n˜o se pode fazer um curso com a pre- e atens˜o de abord´-lo todo. No caso deste curso foi enfocado o microcontrolador PIC18F4550, um a adispositivo de uma fam´ avan¸ada com uma s´rie de recursos. Buscamos explorar a maioria ılia c edesses recursos, apesar de alguns n˜o terem sido inclusos e outros serem tratados apenas de forma aintrodut´ria. Foi dada especial aten¸˜o ao estudo da linguagem C para microcontroladores. o ca A divis˜o das aulas do curso prevˆ um esquema de 2 horas de teoria e 1 hora de pr´tica a e apara cada ”aula”. Abaixo ´ apresentada uma proposi¸˜o de divis˜o de aulas te´ricas. Para cada e ca a oaula destas existe uma aula pr´tica na se¸˜o ”Caderno de Experiˆncias”(para alguns conte´dos a ca e uconceituais a aula pr´tica ´ na verdade um question´rio sobre o assunto abordado). Tendo em a e aconta a extens˜o do assunto e a variedade de cargas hor´rias das disciplinas, propomos dois a a”n´ ıveis”em que o curso pode ser ministrado: b´sico e avan¸ado. O n´ b´sico aborda o conte´do a c ıvel a um´ ınimo que entendemos como necess´rio a um curso de microcontroladores, com uma carga ahor´ria limitada em 30 horas (10 aulas). O n´ a ıvel avan¸ado foi previsto para uma carga de 60 choras (19 aulas + 1 de projeto) e permite explorar alguns perif´ricos a mais, al´m de aumentar a e eoportunidade de exercitar a linguagem C com mais experiˆncias. Recomendamos que na ultima e ´ 19
  • 19. XM118 - Microcontroladores PIC18aula do m´dulo avan¸ado seja proposto um projeto envolvendo diversos conceitos estudados ao o clongo do curso. 20
  • 20. XM118 - Microcontroladores PIC18Algumas observa¸˜es: co1. Para institui¸˜es que possuem cursos de linguagem C - ANSI anterior ao de microcontro- co ladores as aulas 6, 7, 8 e 9 podem ser resumidas em 1 ou 2 aulas, enfocando apenas a parte pr´tica. a2. A aula 1 tem o objetivo de introduzir ou revisar os conceitos fundamentais sobre microcon- troladores e processadores. Se houve um estudo pr´vio de arquitetura de computadores ou e outros modelos de microcontroladores, essa aula se torna dispens´vel. a3. Na apresenta¸˜o das aulas alguns assuntos foram apresentados em seus sub-itens (como os ca t´picos 6.4 e 6.5) por uma quest˜o de divis˜o de aulas. Entenda-se que todo o t´pico deve o a a o ser estudado para um correto entendimento. 21
  • 21. XM118 - Microcontroladores PIC18 A Um Poeta Olavo Bilac Longe do est´ril turbilh˜o da rua, e a Beneditino, escreve! No aconchego Do claustro, na paciˆncia e no sossego, e Trabalha, e teima, e lima, e sofre, e sua! Mas que na forma se disfarce o emprego Do esfor¸o; e a trama viva se construa c De tal modo, que a imagem fique nua, Rica mas s´bria, como um templo grego. o N˜o se mostre na f´brica o supl´ a a ıcio Do mestre. E, natural, o efeito agrade, Sem lembrar os andaimes do edif´ ıcio: Porque a Beleza, gˆmea da Verdade, e Arte pura, inimiga do artif´ ıcio, ´ E a for¸a e a gra¸a na simplicidade. c c O mundo da tecnologia est´ em constate e r´pida evolu¸˜o. Acompanhar essa evolu¸˜o exige a a ca cadedica¸˜o e investimento da parte dos que aceitam o desafio de n˜o s´ consumir tecnologia, mas ca a otamb´m de cri´-la. e a A linha de microcontroladores PIC18 foi lan¸ada com uma arquitetura renovada e otimizada cem rela¸˜o ` linha PIC16, trazendo tamb´m v´rias inova¸˜es que permitem o desenvolvimento ca a e a code aplica¸˜es mais avan¸adas e eficientes. Faz-se necess´rio, ent˜o, uma atualiza¸˜o dos conheci- co c a a camentos para tirar o m´ximo proveito das novas caracter´ a ısticas da linha PIC18. Paralelamente a essa evolu¸˜o de hardware processa-se uma revolu¸˜o de software, onde a ca calinguagem C ´ apresentada como escolha mais adequada para o desenvolvimento de c´digo em e omicrocontroladores, em substitui¸˜o a linguagem Assembly. Essa revolu¸˜o ´ ocasionada n˜o s´ ca ca e a opelo desenvolvimento de compiladores mais confi´veis e eficientes como tamb´m pela otimiza¸˜o a e cado conjunto de instru¸˜es e arquitetura dos microcontroladores para a linguagem C. A linha coPIC18, objeto de nosso estudo, tem sua arquitetura otimizada para C e a Microchip oferece umeficiente compilador, o C18. Tendo isso em vista, foi desenvolvido um curso que permitisse abordar as duas inova¸˜es: a colinha PIC18 e programa¸˜o de microcontroladores em linguagem C. ca No cap´ ıtulo 1 ´ apresentado o conceito de microcontroladores. Esse cap´ e ıtulo serve n˜o s´ para a ointroduzir os que ainda n˜o est˜o familiarizados com microcontroladores como tamb´m como uma a a erevis˜o dos conceitos fundamentais. Permite, dessa forma, equaliza¸˜o dos conhecimentos para a camelhor aproveitamento do curso. O capitulo 2 s˜o apresentadas as caracter´ a ısticas da linha PIC18, tratando especificamentedo PIC18F4550. S˜o estudados detalhadamente as mem´rias de programa e dados, tipos de a oosciladores, caracter´ ısticas especiais, ALU. Esse cap´ ıtulo concentra o estudo do hardware domicrocontrolador, com exce¸˜o dos perif´ricos que s˜o tratados no cap´ ca e a ıtulo 6 e das interrup¸˜es, coabordadas juntamente com a linguagem C no cap´ ıtulo 4. No cap´ ıtulo 3 trata-se das ferramentas de software usadas, o MPLAB IDE e o compiladorC18. A instala¸˜o, configura¸˜o e uso dessas ferramentas s˜o apresentados de forma simples, com ca ca a 23
  • 22. XM118 - Microcontroladores PIC18sequencias passo-a-passo de configura¸˜o e uso. Estudam-se tamb´m as ferramentas de simula¸˜o ca e cae depura¸˜o. ca O capitulo 4 trata da linguagem C e seu uso em microcontroladores. Buscou-se apresentar osconceitos de C conforme o padr˜o ANSI, fazendo coment´rios sobre detalhes de implementa¸˜o a a cado C18 quando oportuno. O compilador C18 ´ acompanhado de diversas bibliotecas de fun¸˜es, e cotanto as padronizadas para a linguagem C como as espec´ ıficas para microcontroladores PIC. Asfun¸˜es dessas bibliotecas s˜o apresentadas detalhadamente no documento ”MPLAB R C18 C co aCOMPILER LIBRARIES”(que se encontra no CD do curso) e aos arquivos de ajuda do compi-lador. Outros cap´ ıtulos do curso fazem referˆncia a estes documentos. e Diversas aplica¸˜es de microcontroladores s˜o apresentadas no cap´ co a ıtulo 6. O enfoque principal´ na interface homem-m´quina, que permite a intera¸˜o do microcontrolador com o usu´rio.e a ca a No capitulo 6 s˜o estudados v´rios dos perif´ricos do PIC18F4550. Cada t´pico ´ iniciado com a a e o eo funcionamento do perif´rico, seguindo do estudo das rotinas do compilador C18 que permitem esei uso. Nos anexos encontram-se diversas informa¸˜es uteis e para consulta no dia-a-dia. Aten¸˜o co ´ caespecial deve ser dada ao anexo D Bibliografia e leituras recomendadas, que comenta diversasfontes de informa¸˜o sobre PIC, PIC18 e linguagem C. ca 24
  • 23. XM118 - Microcontroladores PIC18Cap´ ıtulo 1Microcontroladores O objetivo deste curso ´ tratar dos microcontroladores da linha PIC18Xxxx, mais especifi- ecamente do PIC18F4550. Existem diversos textos que tamb´m tratam desse assunto. Contudo, eexiste uma carˆncia de informa¸˜es sobre o que vem a ser um microcontrolador, seus princ´ e co ıpiosde funcionamento, as partes comuns a todos os microcontroladores, dentre outras coisas. Mesmosos manuais dos componentes admitem que o leitor j´ possua um conhecimento pr´vio do assunto. a ePara suprir essa carˆncia, a primeira unidade desse material tratar´ de sistemas computacionais e ae microcontroladores de forma gen´rica. E e ´ importante este embasamento te´rico n˜o somente o apara garantir um melhor aproveitamento no estudo do PIC 18F4550 como tamb´m para tornar o eleitor apto a entender o funcionamento de outros microcontroladores, tanto da linha PIC como deoutros fabricantes. Esses conhecimentos tamb´m s˜o importantes na escolha do microcontrolador e aa ser utilizado em um projeto, pois permite estabelecer as bases conceituais para a compara¸˜o cade suas caracter´ ısticas.1.1 Sistema computacional Inicialmente devemos conceituar o que vem a ser um sistema computacional. Como j´ sabe- amos, os sistemas digitais podem ser classificados em trˆs tipos: combinacionais, sequenciais e ecomputacionais. Os sistemas computacionais, sendo o tipo mais complexo, s˜o compostos por asistemas combinacionais e sequenciais. O que caracteriza um sistema computacional ´ a pos- esibilidade de ser programado. Esse conceito n˜o ´ recente, sendo que j´ no s´culo XIX foram a e a etentadas implementa¸˜es dele. Contudo, somente na segunda metade do s´culo passado ´ que co e eforam desenvolvidas tecnologias (transistor, circuitos integrados) que permitiram a constru¸˜o cados processadores e computadores como os que conhecemos hoje. Um sistema computacional ´ composto por hardware (parte f´ e ısica) e software (programa). Ohardware dos sistemas computacionais, ao contr´rio do que ocorre com sistema combinacionais ae sequenciais, n˜o possui uma aplica¸˜o espec´ a ca ıfica. N˜o basta aliment´-lo devidamente para que a aele funcione. E´ necess´rio que exista um software para ser executado. Em contrapartida, um amesmo hardware pode executar uma infinidade de fun¸˜es diferentes, simplesmente alterando o coseu software. Uma boa analogia ´ imaginar o hardware como um instrumento musical e o software ecomo uma partitura. Um piano por si s´ n˜o faz nada, ´ necess´ria uma m´sica que possa ser o a e a uexecutada a fim de se obter algum resultado. Da mesma forma que a m´sica contida na partitura, uum programa ser´ composto por um conjunto limitado de s´ a ımbolos (no caso da partitura s˜o as a 25
  • 24. XM118 - Microcontroladores PIC18notas musicais e no caso do programa s˜o as instru¸˜es) que podem ser organizados de diversas a coformas diferentes, obtendo-se diferentes resultados. Como exemplo de sistema computacional, o primeiro que nos vem em mente ´ o computador epessoal (PC), hoje t˜o difundido. Contudo, existem v´rios equipamentos, t˜o ou mais comuns a a aque os PC´s, que s˜o sistemas computacionais. Por exemplo, os v´ a ıdeos-game, os mini-games,as calculadoras, palm-top´s, etc. Al´m disso, temos os microcontroladores, que s˜o o objetivo e adesse nosso estudo, que est˜o presentes nas mais diversas aplica¸˜es, de eletrodom´sticos a plantas a co eindustriais, de alarmes a equipamentos m´dicos. e A estrutura b´sica de um sistema computacional ´ como a apresentada no diagrama em blocos a eabaixo. Figura 1.1: Diagrama em blocos gen´rico de um sistema computacional e A seguir s˜o estudados detalhadamente cada um desses blocos. a1.1.1 Mem´rias o Mem´rias s˜o dispositivos que armazenam informa¸˜es. No caso de um sistema computacional, o a coessa informa¸˜o, assim como a mem´ria, pode ser dividida em dois tipos: programa e dados. ca o Programa ´ a sequencia de instru¸˜es que ao CPU deve seguir para desempenhar a fun¸˜o a e co caque se destina a aplica¸˜o. Quando se trata de um programa executado por um microcontrolador cas˜o usados tamb´m os termos firmware e software embarcado (embedded software). J´ dados s˜o a e a avari´veis que a CPU usa durante a execu¸˜o do programa. a ca Existem tamb´m Registros (bytes de mem´ria) com fun¸˜es especiais que trabalham junto e o coao processador (CPU). Em alguns casos esses registros est˜o dentro do pr´prio processador e em a ooutros eles s˜o mapeados juntamente com a mem´ria de dados. a oMem´ria de programa o Sua fun¸˜o ´ armazenar o software (programa) a ser executado no sistema. Tamb´m ´ utilizada ca e e epara guardar tabelas de constantes. Dentre os v´rios endere¸os de mem´ria de programa existem a c oalguns com finalidade espec´ ıfica, chamados vetores. S˜o endere¸os para onde o programa desvia a cquando ocorrem determinados eventos. Assim, sempre existir´ um vetor de reset, que ´ onde a eo programa come¸a (ou recome¸a) quando o sistema ´ inicializado (ou resetado). H´ tamb´m c c e a e 26
  • 25. XM118 - Microcontroladores PIC18as interrup¸˜es, das quais trataremos mais adiante, e que causam desvios no fluxo do programa coquando ocorrem determinados eventos. Os endere¸os associados `s interrup¸˜es s˜o chamados c a co ade vetores de interrup¸˜o. Podemos encontrar sistemas onde, independentes da causa da cainterrup¸˜o, h´ apenas um vetor para onde o programa desvia e sistemas onde cada fonte ou tipo ca ade interrup¸˜o possui um vetor. ca De uma forma geral, a mem´ria de programa ´ uma mem´ria n˜o vol´til. Isto quer dizer que o e o a ao programa n˜o ´ perdido quando se retira a alimenta¸˜o do sistema; se n˜o fosse assim, o sistema a e ca ateria que ser programado a cada vez que fosse colocado em funcionamento. As diferentes tecnologias usadas para implementa¸˜o da mem´ria de programa dos microcon- ca otroladores s˜o: a • ROM: somente de leitura. Geralmente chamada de masked-ROM (masked = mascarado), ´ e gravada pelo fabricante do componente, o que em quantidades muito grandes reduz custos. • EPROM: apag´vel atrav´s de luz ultra-violeta (mem´rias ”janeladas”). Utilizada no pro- a e o cesso de desenvolvimento e algumas vezes no produto acabado, quando h´ a necessidade de a se poder alterar o software. • OTP: program´vel somente uma vez, utilizada em produ¸˜o. a ca • Flash: ´ uma mem´ria eletricamente apag´vel (EEPROM) com tempos de acesso para e o a leitura r´pido. Oferece uma grande flexibilidade, pois geralmente ´ poss´ a e ıvel reprogramar um equipamento sem retirar o microcontrolador da placa (grava¸˜o in-circuit). Al´m disso, ca e alguns modelos permitem que o microcontrolador altere sua pr´pria mem´ria de programa. o o Praticamente todos os microcontroladores j´ possuem internamente algum desses tipos de amem´ria de programa. De uma forma geral, o tipo de mem´ria n˜o influencia nas caracter´ o o a ısticasdos componentes. Atualmente quase todos os microcontroladores possuem vers˜es em mem´ria o oFlash, pois a mesma apresenta muitas vantagens a um custo dos mais baixos. Os lan¸amentos cem microcontroladores tendem a ser todos com mem´ria Flash, mas ainda existem alguns com- oponentes sendo fabricados com os demais tipos de mem´ria. o Alguns microcontroladores apresentam a possibilidade de expans˜o de mem´ria, isto ´, a o epermitem acrescentar mais componentes de mem´ria externamente; outros n˜o. o a A quantidade de mem´ria interna ´ uma das principais diferen¸as entre microcontroladores o e cde uma mesma linha, e tem um impacto significativo no pre¸o dos componentes. Esse ´ um dos c emotivos porque se deve otimizar os programas para que tenham o menor tamanho poss´ ıvel, ouseja, ocupem a menor quantidade de mem´ria poss´ o ıvel.Mem´ria de Dados o ´ E a mem´ria onde s˜o armazenados os dados a serem processados pelo computador (as o avari´veis dos programas e outras informa¸˜es.). Como esses dados s˜o constantemente alterados, a co aa mem´ria utilizada para armazen´-los ´ do tipo RAM, que pode ser reescrita indefinidamente. o a eComo se trata de uma mem´ria vol´til, quando a alimenta¸˜o ´ cortada esses dados s˜o perdidos. o a ca e a Alguns microcontroladores disponibilizam tamb´m mem´rias EEPROM para armazenar dados e oque n˜o devem ser perdidos com a falta de energia. a 27
  • 26. XM118 - Microcontroladores PIC18 Da mesma forma que a mem´ria de programa, os microcontroladores j´ possuem internamente o aalguma quantidade de mem´ria RAM de dados. Aqui tamb´m alguns permitem expans˜o de o e amem´ria e outros n˜o. A quantidade de RAM tamb´m varia de componente para componente. o a e1.1.2 Dispositivos de entrada e sa´ ıda a a ´ S˜o respons´veis por realizar a interface do processador com o ”mundo externo”. E atrav´s edeles que um sistema computacional adquire dados externos e aciona processos. S˜o comumente achamados de dispositivos de I/O (Input/Output - Entrada/Sa´ ıda), portais de I/O (noinglˆs, ports) ou simplesmente portais. Para entender seu funcionamento antes devemos enten- eder como funcionam os barramentos. As v´rias partes de um sistema computacional (CPU, mem´rias, dispositivos de I/O) s˜o a o aligadas entre si atrav´s de barramentos (tamb´m chamados via ou, em inglˆs, bus), que s˜o e e e aliga¸˜es f´ co ısicas de comunica¸˜o paralela entre os componentes. Existe um barramento de dados, caao qual todos os dispositivos est˜o ligados e por onde trocam informa¸˜es. Todos os dispositivos a coligados ao barramento de dados s˜o lidos (colocam dados no barramento) ou escritos (recebem aos dados do barramento) pela CPU, que controla todo o processo. Assim temos v´rias sa´ a ıdase entradas ligadas aos mesmos pontos. Esse sistema n˜o entra em conflito porque somente um adispositivo ´ acessado por vez. Enquanto um dispositivo ´ acessado (lido ou escrito) os demais e eficam em alta impedˆncia, se s˜o sa´ a a ıda, ou ignoram os dados do barramento, se s˜o entrada. aDessa forma, surge a necessidade de outro barramento, o barramento de endere¸os, que permite cao processador ”endere¸ar”, ou seja, indicar qual dispositivo ser´ acessado. Al´m desse, h´ c a e atamb´m um barramento de controle, que indica basicamente se o acesso ´ de leitura ou escrita, e epois muitas vezes um mesmo endere¸o de mem´ria ou dispositivo de I/O pode ser lido ou escrito. c oO barramento de controle tamb´m serve para indicar se est´ sendo acessado um endere¸o de e a cmem´ria ou um dispositivo de entrada e sa´ o ıda, j´ que utilizam o mesmo barramento de endere¸o. a c O tamanho de um barramento, que ´ seu n´mero de bits, deve ser considerado com aten¸˜o. e u caO tamanho do barramento de dados limita o tamanho b´sico de dados que trafegam pelo sistema ae s˜o processados pela CPU. Por exemplo, ao dizer que um sistema ´ de 8 bits podemos concluir a eque ele faz opera¸˜es matem´ticas envolvendo operadores de 8 bits. Por isso ´ comum classificar co a eos sistemas computacionais pelo tamanho de seu barramento. H´ hoje microcontroladores de 8, a16 e 32 bits. J´ o tamanho do barramento de endere¸os nos informa qual a quantidade m´xima de endere¸os a c a c(de mem´ria ou dispositivos de I/O ) pode ser acessados. A capacidade de mem´ria ´ de 2n o o eendere¸os, sendo n o n´mero de bits do barramento de endere¸os. Exemplificando, um barramento c u cde endere¸o de 10 bits ´ capaz de endere¸ar 210 = 1024 endere¸os. c e c c Conforme exposto acima, os dispositivos de entrada devem permitir colocar sua sa´ ligada ıdaao barramento de dados em alta impedˆncia. Para tanto, s˜o tradicionalmente utilizados buffers a acom sa´ tri-state para essa fun¸˜o. ıda ca Para a implementa¸˜o dos dispositivos de sa´ s˜o utilizados latches, pois permitem o ”car- ca ıda aregamento”dos dados somente quando s˜o acionados. a A sele¸˜o dos dispositivos de I/O a partir do barramento de endere¸os ´ feita por decodifi- ca c ecadores. 28
  • 27. XM118 - Microcontroladores PIC18 Exemplo A figura abaixo mostra um exemplo de utiliza¸˜o de buffers e latches como portais de entrada cae sa´ ıda, respectivamente. Ambos os portais est˜o ligados ao barramento de dados. Cada portal possui um decodificador a(DEC), que apresenta n´ alto na sa´ quando o valor do barramento de endere¸os ´ o endere¸o ıvel ıda c e cdo portal. Os sinais RD (read - ler), WR (write - escrever) e IORQ (I/O request - requisi¸˜o de caI/O) constituem o barramento de controle. Para realizar uma opera¸˜o de escrita do portal , o processador inicialmente coloca os dados a caserem escritos no barramento de dados e o endere¸o do portal no barramento de endere¸o. Ent˜o c c as˜o acionados os sinais WR e IORQ. Nesse instante temos ’1’ nas trˆs entradas da porta AND a eque aciona o terminal E do latch, que faz com que ele carregue os dados presentes no barramentona sa´ ıda. Para a opera¸˜o de leitura, o endere¸o do portal ´ colocado no barramento de endere¸os. Em ca c e cseguida, os sinais IORQ e RD s˜o acionados. Assim temos ’1’ no terminal de habilita¸˜o de a casa´ do buffer e o valor em sua entrada ´ transferido para o barramento de dados, podendo ser ıda earmazenado pela CPU. Figura 1.2: Portais de entrada e sa´ ıda A fun¸˜o do microcontrolador, como o pr´prio nome diz, ´ controlar processos e circuitos. ca o ePara otimizar essa fun¸˜o, seus portais de entrada e sa´ s˜o tratados como registros de fun¸˜es ca ıda a coespeciais, ou seja, s˜o lidos e escritos como se fossem simples bytes de mem´ria. Em sistemas a ocomo microprocessadores geralmente o tratamento ´ diferente, havendo instru¸˜es espec´ e co ıficas paraacesso aos portais e outras implica¸˜es. co Para maior flexibilidade do sistema, geralmente os microcontroladores utilizam um sistemade portais mais complexo que o apresentado acima, que permite que um mesmo terminal domicrocontrolador seja configurado como entrada ou sa´ ıda. Para que isso seja poss´ ´ utilizado ıvel eum registro de portal e um registro de dire¸˜o de dados (DDR - Data Direction Register). Esse caultimo permite selecionar a dire¸˜o de cada bit de um portal de sa´´ ca ıda, individualmente. A figuraabaixo mostra o esquema gen´rico de um bit de portal. Outros microcontroladores utilizam econfigura¸˜es semelhantes. co 29
  • 28. XM118 - Microcontroladores PIC18 Figura 1.3: Esquema t´ ıpico de um pino de I/O O latch de sa´ ´ chamado ”Data Latch”. O registro de dire¸˜o de dados ´ o ”TRIS Latch”. ıda e ca eSe o valor armazenado no latch TRIS for ’1’ o pino est´ configurado como entrada: os transistores ade sa´ estar˜o cortados independente do valor na sa´ do latch de dados. Quando for realizada ıda a ıdauma opera¸˜o de leitura do portal (acionando o sinal RD PORT) o n´ l´gico presente no pino ca ıvel odo microcontrolador ´ armazenado em um latch de entrada e passado ao barramento de dados e(Data Bus) atrav´s de um buffer tri-state. No restante do tempo a sa´ desse buffer fica em alta e ıdaimpedˆncia. Se o valor armazenado no latch TRIS for ’0’, o driver de sa´ est´ ativo, for¸ando a ıda a co pino ao n´ l´gico correspondente ao armazenado no latch de dado. Qualquer dado escrito no ıvel olatch de dados ´ imediatamente transferido para o terminal do microcontrolador. e Caso seja feita uma opera¸˜o de escrita em um terminal configurado como entrada, o dado caescrito ser´ armazenado no latch de dados, mas n˜o ser´ transferido para o terminal, pois o a a adriver est´ desativado. Por outro lado, se for realizada uma opera¸˜o de leitura em um terminal a caconfigurado como sa´ ıda, o valor lido ser´ no presente o terminal, que ´ o mesmo escrito no latch a ede dados. Todo esse processo, contudo, ocorre de forma autom´tica e transparente para o programador, abastando que este defina a dire¸˜o de cada pino. ca1.1.3 Perif´ricos e Al´m dos portais de I/O e as mem´rias, podemos ter muitos outros tipos de dispositivos e oligados ao barramento de dados. Esses dispositivos nada mais s˜o do que circuitos destinados aa realizar fun¸˜es especiais, uteis na aplica¸˜o a que se destina o sistema computacional. Esses co ´ cadispositivos perif´ricos s˜o particularmente importantes nos microcontroladores, que os tem uma e agrande variedade. Como perif´ricos mais comuns podemos citar os temporizadores e contadores (Timers), os em´dulos de comunica¸˜o serial, conversores A/D e D/A, m´dulos de CCP (Captura, compara¸˜o o ca o cae PWM), drivers de LCD, comparadores anal´gicos, etc. o 30
  • 29. XM118 - Microcontroladores PIC18 O modo de acesso aos perif´ricos ´ semelhante ao de acesso aos portais de I/O. Eles muitas e evezes possuem v´rios registros de parˆmetros que podem ser configurados, e um ou mais registros a ade entrada e sa´ de dados. ıda1.1.4 CPU A CPU (Central Processing Unit - Unidade Central de Processamento) ou processador ´ parte e ´principal de um sistema computacional. E comum se referir ` CPU dos microcontroladores como acore (n´cleo). Sua fun¸˜o ´ executar as instru¸˜es do programa e processar dados. Para tanto ela u ca e cocontrola todas as demais partes do sistema e envia ou recebe dados dessas partes. Ela tamb´m e´ capaz de interpretar e colocar em execu¸˜o as instru¸˜es que comp˜e o programa e realizare ca co oopera¸˜es l´gicas e aritm´ticas. co o e Genericamente um processador ´ organizado conforme o diagrama em blocos abaixo. e Figura 1.4: Diagrama em blocos de uma CPU O diagrama ´ o de um processador de arquitetura Harvard. O que vem a ser essa arquitetura eser´ explicado mais adiante. Por enquanto o importante ´ saber que nem todos os processadores a es˜o organizados dessa forma. Mas seus componentes principais s˜o os mesmos, o que muda ´ a a a eforma como se comunicam. Optamos por apresentar um processador dessa forma porque ´ o tipo ede CPU utilizado nos microcontroladores PIC. Os nomes de cada bloco est˜o em inglˆs no diagrama para facilitar a identifica¸˜o desses a e cablocos nos manuais de microcontroladores e microprocessadores, que comumente s˜o escritos anessa l´ ıngua. Os blocos pontilhados podem ou n˜o estar presentes. As vias em amarelo (cinza aclaro) representam o barramento de dados interno do processador, que ´ ligado ao barramento de edados do sistema. As vias em verde (cinza escuro) s˜o outras vias de dados e sinais de controle. a O principal bloco de um processador ´ o decodificador de instru¸˜es (Instruction Decoder). e coVoltando a analogia entre um sistema computacional e um instrumento musical, o decodificador deinstru¸˜es pode ser comparado ao m´sico, que age sobre o instrumento (hardware) executando a co u 31
  • 30. XM118 - Microcontroladores PIC18m´sica (software). Esse bloco ´ composto por um decodificador e um contador. Tal decodificador u epode ser visto como um livro de receitas culin´rias. No livro, cada p´gina cont´m uma receita a a ee dentro de cada receita h´ os passos para sua execu¸˜o. De modo an´logo, cada instru¸˜o a ca a cado processador ´ como o endere¸o de uma ”p´gina”onde est´ a sequencias de acionamento dos e c a asinais de controles (internos e externos ao processador) que permitem a execu¸˜o da instru¸˜o. ca caO contador ´ respons´vel por fazer com que os passos para a execu¸˜o de uma instru¸˜o sejam e a ca caexecutados em sequencia. Cada modelo de processador possui um conjunto, ou set, de instru¸˜es coque pode executar. O barramento de controle interno (Internal Control) permite ao decodificador de instru¸˜es cocontrolar os blocos internos do processador, enquanto o barramento de controle externo (ExternalControl) j´ foi discutido e tem a fun¸˜o de indicar se o acesso ´ de leitura ou escrita, se ´ em a ca e emem´ria ou dispositivos de I/O. o Para que o decodificador de instru¸˜es possa executar uma instru¸˜o ´ necess´rio que a mesma co ca e aseja lida da mem´ria de programa e levada at´ ele. O programa armazenado na mem´ria ´ uma o e o esequencia de instru¸˜es. Podemos ent˜o supor que para endere¸ar corretamente essas instru¸˜es co a c codeveria haver um contador. Ele existe e ´ chamado Contador de Programa ou PC (Program eCounter). A cada instru¸˜o iniciada o PC ´ incrementado. Portanto ele aponta a pr´xima ca e oinstru¸˜o, isto ´, cont´m o endere¸o da pr´xima instru¸˜o a ser executada. A sa´ desses contador ca e e c o ca ıda´ ligada a um registro (Program Addressing) que ´ carregado ao final de cada instru¸˜o e suae e casa´ ´ o barramento de endere¸os da mem´ria de programa. ıda e c o Quando a CPU ´ resetada, o PC ´ automaticamente carregado com o valor do vetor de reset. e eGeralmente o vetor de reset ´ o endere¸o zero da mem´ria, mas nem todos os sistemas trabalham e c oassim. Durante a execu¸˜o do programa, um valor pode ser carregado no PC. Isso ocorre para cadesviar o fluxo do programa. Existem instru¸˜es que realizam essa altera¸˜o de fluxo, que pode co caser de dois tipos: desvio ou chamada. Quando ocorre um desvio o conte´do do PC ´ alterado para que ele passe a executar o u eprograma a partir de outro ponto. No nosso sistema gen´rico isso ´ feito simplesmente carregando e eum valor proveniente do barramento de dados. Na execu¸˜o de uma chamada o fluxo do programa tamb´m ´ desviado para um determinado ca e eponto para executar um trecho do programa, mas nesse caso ele deve retornar ao ponto doprograma onde ocorreu o desvio (mais precisamente ` primeira instru¸˜o ap´s a instru¸˜o de a ca o cachamada). Isso permite executar uma sub-rotina, conceito que ser´ discutido quando tratarmos ado software. Fica claro ent˜o que em uma chamada o endere¸o de retorno deve ser armazenado em algum a clugar, caso contr´rio n˜o seria poss´ a a ıvel retornar ao ponto onde a chamada ocorreu. Esse lugar´ chamado de pilha (stack). O nome pilha se deve a seu funcionamento, que ´ semelhante ae euma pilha de pratos: como pode haver v´rias chamadas consecutivas sem que haja retorno, os aendere¸os de retorno s˜o armazenados ”uns sobre os outros”. Quando ocorre uma instru¸˜o de c a caretorno (que ´ o que faz o programa retornar da chamada), o programa volta para o ultimo e ´endere¸o guardado, e assim sucessivamente at´ que a pilha esteja vazia. A pilha ´ ent˜o uma c e e apor¸˜o de mem´ria onde podem ser armazenados os endere¸os de retorno. Em alguns sistemas ca o c´ poss´e ıvel guardar outros tipos de dados na pilha, o que n˜o ocorre com os microcontroladores aPIC. Existem sistemas onde essa por¸˜o de mem´ria ´ implementada no processador e outros ca o e 32
  • 31. XM118 - Microcontroladores PIC18onde ´ parte da mem´ria de dados. Em ambos os casos surge a necessidade de se conhecer qual e o´ o topo da pilha, ou seja, qual ´ a pr´xima posi¸˜o para se armazenar um endere¸o de retorno.e e o ca cPara 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 endere¸o de retorno ´ e c earmazenado na pilha e decrementado quando ocorre um retorno. De uma forma geral, quando a pilha ´ implementada na mem´ria RAM, temos acesso a ela e ao e oregistro stack pointer. Nesses casos geralmente podemos determinar em que por¸˜o da mem´ria ca ocolocaremos a pilha. J´ nos sistemas onde a pilha ´ implementada separadamente, geralmente a en˜o se tem acesso nem ao conte´do da pilha nem ao stack pointer. a u Voltaremos a tratar de chamadas e desvios em outro momento do curso. Todo esse processoestudado tem por objetivo gerar o endere¸o de mem´ria de programa de onde ser´ lido uma c o ainstru¸˜o a ser executada. Uma vez determinado o endere¸o, seu conte´do ´ lido e armazenado ca c u eem um registro chamado registro de instru¸˜o (Instruction Register). Desse registro, parte da cainstru¸˜o vai para o decodificador de instru¸˜es e parte pode ir para a ALU e/ou parte para o ca coregistro de endere¸amento de dados (Data Addressing). Para entender o porque disso, devemos ter cem mente que uma instru¸˜o nada mais ´ que uma palavra bin´ria. Parte dela, que ´ efetivamente ca e a ea instru¸˜o, indica ao decodificador de instru¸˜es qual a sequencia de a¸˜es deve ser executada ca co co(qual a ”p´gina”do decodificador de instru¸˜es). O restante constitui os operandos da instru¸˜o, a co caou seja, os dados a serem processados. Esses dados podem ser constantes ou endere¸os de vari´veis c ana mem´ria RAM. Conforme sua natureza e a instru¸˜o a ser executada eles tem um destino ou o caoutro. A unidade l´gico-aritm´tica ou ALU (Aritmetic and L´gic Unit) ´ o circuito respons´vel o e o e apelos c´lculos em um processador. Como pr´prio nome diz, ela ´ respons´vel pela realiza¸˜o de a o e a caopera¸˜es l´gicas, (E, OU, OU-exclusivo, deslocamentos, rota¸˜es, complemento), e aritm´ticas co o co e(incremento, decremento, adi¸˜o, subtra¸˜o, multiplica¸˜o, e divis˜o). Os processos de divis˜o e ca ca ca a amultiplica¸˜o s˜o feitos com a ALU utilizando sequencias somas, subtra¸˜es e deslocamento, o ca a coque efetivamente o que a ALU ´ capaz de fazer, ou atrav´s de circuito multiplicadores especiais. e eExiste ainda um circuito, chamado MAC (Multiply and Accumulate) que realiza opera¸˜es de comultiplica¸˜o por hardware. Esse bloco, contudo n˜o ´ comum em microcontroladores, sendo ca a emais comum em dispositivos com maior capacidade de processamento, como DSPs. A ALU trabalha juntamente com dois registros especiais: o Acumulador (Accumulator) e o co e ´registro de estado de opera¸˜es aritm´ticas (Status). E comum se referir ao acumulador simples-mente como Acc ou, no caso dos PICs, como W (Worker - Trabalhador ). O acumulador quasesempre est´ envolvido nas opera¸˜es realizadas pela ALU. Ele pode ser um dos operandos, pode a coser onde se armazena o resultado ou pode ser as duas coisas. H´ tamb´m microcontroladores a eonde qualquer transferˆncia de dados entre dois endere¸os da RAM passa pelo acumulador. e c Quanto ao registro de status, sua fun¸˜o ´ indicar resultados not´veis das opera¸˜es matem´ticas. ca e a co aEsses resultados s˜o indicados por flags, que s˜o bits desse registro. Atrav´s da an´lise dos flags a a e a´ poss´ saber, dentre outras coisas, se uma opera¸˜o resultou em zero; se houve estouro da ca-e ıvel capacidade de armazenamento (overflow), que acontece quando um resultado ´ maior que o m´ximo e avalor poss´ ıvel de ser representado pelo sistema; se o resultado de uma opera¸˜o aritm´tica ´ ca e enegativo ou positivo. Existe uma intera¸˜o do registro status com o decodificador de instru¸˜es, pois atrav´s da ca co e 33
  • 32. XM118 - Microcontroladores PIC18an´lise de seus flags ´ poss´ realizar instru¸˜es de testes. Por exemplo, existem instru¸˜es de a e ıvel co codesvio condicional nas quais ´ necess´rio comparar se um valor ´ igual a outro. Essas compara¸˜es e a e cos˜o feitas pela ALU e seu resultado ´ expresso atrav´s do registro status. Atrav´s da an´lise dos a e e e abits do registro status o processador toma decis˜es de realizar ou n˜o desvios no fluxo do programa. o a Para acessar a mem´ria de dados e os perif´ricos existe um registro, que em nosso sistema ´ o e echamado de endere¸amento de dados (Data Addressing) que pode receber valores de duas formas. cA primeira ´ diretamente de parte da instru¸˜o. Nesse caso se est´ fazendo referˆncia a endere¸os e ca a e cda RAM conhecidos e fixos, pois s˜o carregados valores constantes existentes no programa. Esse amodo ´ chamado endere¸amento direto. Contudo, em muitos casos ´ necess´rio fazer referˆncias e c e a ea endere¸os vari´veis. Isso ´ feito carregando o registro de endere¸amento com dados provenientes c a e cde um outro registro, o registro de endere¸amento indireto (Indirect Addressig). Como qualquer coutro registro, ele pode ser carregado com um valor, constante ou proveniente de uma vari´vel, apode ser incrementado, decrementado ou participar de qualquer opera¸˜o l´gico-aritm´tica. Sua ca o efun¸˜o ´ semelhante a dos ponteiros em linguagens de alto n´ ca e ıvel. Por fim, apesar de n˜o serem considerado parte integrante da CPU, ´ necess´rio comentar a e aalguma coisa sobre os sistemas de temporiza¸˜o e reset. Todo o sistema computacional trabalha casincronizado com um mesmo sinal de clock. Devemos lembrar que esse clock ´ o que faz o edecodificador de instru¸˜es passar de uma instru¸˜o para a outra, e tudo o mais deve estar co casincronizado com ele, sen˜o haveria o caos. Para gerar esse sinal de clock ´ necess´rio um oscilador. a e aNos microcontroladores esse oscilador j´ faz parte do componente e pode ser de v´rios tipos, como a aser´ tratado oportunamente. a Independente da forma como o clock ´ gerado, esse sinal ´ aplicado a CPU e aos perif´ricos. e e e´E comum que a frequˆncia do clock dos perif´ricos seja menor que a da CPU. Para tanto s˜o e e autilizados divisores de frequˆncia. e A frequˆncia de clock ´ diretamente proporcional a velocidade com que a CPU executa as e einstru¸˜es. Os microcontroladores geralmente tˆm uma faixa de frequˆncia de trabalho bem co e e ´ampla, podendo ir de alguns Hertz a dezenas e at´ centenas de Mega-Hertz. E importante lembrar eque quanto maior a frequˆncia de trabalho, maior ´ o consumo do sistema. Para casos em que o e econsumo ´ cr´ e ıtico, como em equipamentos port´teis alimentados a bateria, existem v´rias formas a ade reduzir este consumo, dependendo do microcontrolador utilizado. S˜o os chamados modos de abaixo consumo, que podem reduzir o clock da CPU e/ou dos perif´ricos ou mesmo deslig´-los. e aCada microcontrolador apresenta diferentes modos de baixo consumo. Outro ponto importante ´ o reset. Al´m do reset que ocorre quando o sistema ´ ligado, e e echamado de Power-on reset, os microcontroladores apresentam v´rias outras fontes de reset. Esses aresets s˜o prote¸˜es do sistema. Assim, o microcontrolador pode ser resetado automaticamente a cose houver uma queda de tens˜o, se o programa travar, se for acessado um endere¸o inv´lido de a c amem´ria de programa, se ocorrer um estouro da pilha, e em outras situa¸˜es, dependendo do o comodelo de microcontrolador.1.2 Arquitetura Computacional Por arquitetura de computador entende-se a forma como as diversas partes do sistema s˜o aorganizadas e conectadas entres si. 34
  • 33. XM118 - Microcontroladores PIC18 A arquitetura apresentada acima ´ chamada arquitetura Harvard. Sua principal caracter´ e ıstica´ ter a mem´ria de programa separada da mem´ria de dados e acessada por um barramento inde-e o opendente. Existe tamb´m a arquitetura von-Neumman, onde mem´ria de dados e de programas e oest˜o agrupadas em um mesmo bloco, sendo acessadas pelos mesmos barramentos de dados e aendere¸os. c1.2.1 Arquitetura von-Neumann Na arquitetura von-Neumann, as mem´rias tanto de dados quanto de programa, s˜o acessadas o ausando-se o mesmo barramento de dados; os portais de I/O tamb´m fazem uso do barramento de edados. Vale lembrar aqui que uma instru¸˜o ´ como uma opera¸˜o matem´tica, isto ´, composta ca e ca a ede operadores, que indicam o que ser´ feito, e operandos, que s˜o os parˆmetros envolvidos na a a aopera¸˜o. Desta forma, o processo de execu¸˜o de cada instru¸˜o ´ dividido em dois momentos: a ca ca ca eleitura da instru¸˜o e dos operandos (fetch) e a execu¸˜o da instru¸˜o propriamente dita. Nota-se ca ca caque dessa forma o processador est´ parte do tempo ocupado com a leitura da mem´ria de programa a oe, consequentemente n˜o fica executando o firmware o tempo todo. Outra caracter´ a ıstica daarquitetura von-Neumann ´ que, visto que os operandos das instru¸˜es s˜o geralmente do mesmo e co atamanho do barramento de dados, quanto mais complexa a instru¸˜o maior ser´ a quantidade de ca aendere¸os ocupados por ela na mem´ria. Por outro lado, como a complexidade da instru¸˜o n˜o c o ca atem limite a n˜o ser o espa¸o ocupado, podemos ter um set de instru¸˜es t˜o complexo quanto se a c co aqueira. Do exposto acima, podemos concluir que arquitetura von-Neumann consome muito tempo deprocessamento com a leitura da instru¸˜o e dos operandos. Conclui-se tamb´m que instru¸˜es ca e codiferentes ocupam quantidades diferentes de mem´ria e s˜o executadas em tempos diferentes. o a Figura 1.5: Arquitetura von-Neumann Devido ` inexistˆncia de limita¸˜es a complexidade das instru¸˜es, os sistemas de arquitetura a e co covon-Neumann geralmente tˆm conjuntos de instru¸˜es complexos, o que equivale a dizer que e copossuem um grande n´mero de instru¸˜es e cada instru¸˜o realiza uma grande sequencia de a¸˜es u co ca co(instru¸˜es complexas). Processadores desse tipo s˜o chamados CISC (Complex Instruction Set co aCPU - CPU com Set de Instru¸˜es Complexo). co 35
  • 34. XM118 - Microcontroladores PIC181.2.2 Arquitetura Harvard J´ a arquitetura chamada de arquitetura Harvard, que ´ utilizada nos microcontroladores a ePIC, tem como principal caracter´ ıstica acessar a mem´ria de dados separadamente da mem´ria o ode programa. A principal vantagem dessa arquitetura ´ a leitura de instru¸˜es e de alguns tipos de operandos e copode ser feita ao mesmo tempo em que a execu¸˜o das instru¸˜es. Isso significa que o sistema fica ca cotodo o tempo executando instru¸˜es, o que acarreta um significativo ganho de velocidade. En- coquanto uma instru¸˜o est´ sendo executada, a seguinte est´ sendo lida. Esse processo ´ conhecido ca a a ecomo pipelining (canaliza¸˜o) e ´ ilustrado pela figura a seguir. ca e Figura 1.6: Pipeline Outro fato importante ´ que o barramento de programa n˜o necessariamente tem o mesmo e atamanho do barramento de dados. Dessa forma, em uma unica palavra da mem´ria de programa ´ opode conter operando e operadores, o que nos permite carregar toda a instru¸˜o em um unico ca ´ciclo de leitura da mem´ria. o No caso espec´ ıfico dos microcontroladores PIC da fam´ 16Xxxx, o processador foi projetado ıliapara que cada instru¸˜o ocupe um endere¸o de mem´ria e seja executada em um ciclo de m´quina ca c o a(que leva 4 per´ ıodos de clock para ocorrer), com exce¸˜o das instru¸˜es de chamada e desvio, que ca cos˜o executadas em dois ciclos. Dessa forma, tem-se um controle do tamanho e, principalmente, ado tempo de execu¸˜o do programa simplesmente contando o n´mero de instru¸˜es. ca u co Pode-se notar ent˜o que os tempos de execu¸˜o e de leitura est˜o atrelados e s˜o os menores a ca a aposs´ ıveis. Isso acarreta em as instru¸oes n˜o poderem executar uma grande sequencia de a¸˜es, ou c˜ a coseja, n˜o existem instru¸˜es complexas. Por isso, os PIC´s s˜o considerados processadores RISC a co a(Reduced Instruction Set CPU - CPU com Set de Instru¸˜es Reduzido). O n´mero de instru¸˜es co u co´ reduzido, o que n˜o significa que n˜o se possa executar programas complexos, mas sim quee a asequencias complexas de a¸˜es devem ser constru´ co ıdas por sequencias de instru¸˜es b´sicas. co a Figura 1.7: Arquitetura Harvard Para exemplificar, os PIC 18F4550 tem barramento de dados de 8 bits, barramento de in-stru¸˜o de 16 bits e apenas 83 instru¸˜es. Essa organiza¸˜o pode ser observada na figura acima. ca co ca 36
  • 35. XM118 - Microcontroladores PIC181.2.3 Microcontrolador, Microprocessador e DSP Cabem aqui algumas palavras sobre os tipos de sistemas computacionais existentes e suasaplica¸˜es. co Os microcontroladores s˜o sistemas computacionais completos em um unico chip. Al´m do a ´ eprocessador, das mem´rias e dispositivos de I/O, os microcontroladores geralmente possuem v´rios o atipos de perif´ricos. Quando se utiliza microcontroladores ´ poss´ construir circuitos de cont- e e ıvelrole com muito poucos componentes, por que o microcontrolador j´ tem quase todo o necess´rio a ainternamente. Isso implica em redu¸˜o de custos e tamanho, menor consumo, facilidade de desen- cavolvimento, dentre outras vantagens, e ´ por isso que se utiliza cada vez mais microcontroladores epara agregar ”inteligˆncia”a diversos produtos. Os microcontroladores, por´m, s˜o destinados e e aa aplica¸˜es n˜o muito complexas, e tem uma capacidade de processamento limitada. Al´m co a edisso, j´ possuem uma estrutura preestabelecida, n˜o sendo poss´ a a ıvel alterar sua configura¸˜o. caAtualmente existem microcontroladores de 8, 16 e 32 bits. A maior fatia desse mercado ´ a dos emicrocontroladores de 8 bits. H´, por´m, um grande crescimento de aplica¸˜es em 32 bits. Os a e comicrocontroladores de 16 bits est˜o restritos a aplica¸˜es especiais, como o mercado automotivo a coe tendem a ter seu espa¸o reduzido pelo f´cil acesso ` componentes de 32 bits. c a a Em sistemas constru´ ıdos com microprocessadores, por sua vez, ´ necess´rio desenvolver todo e ao hardware. Dessa forma existe um maior trabalho de desenvolvimento, por´m pode-se con- estruir qualquer configura¸˜o que se queira. S˜o sistemas com custo maior, por´m com muito ca a emais mem´ria, consequentemente podem executar programas mais complexos. Pode-se dispor de omuito mais portais de I/O e de quaisquer perif´ricos necess´rios. Al´m disso, os processadores e a epodem operar com frequˆncias de clock mais altas, portanto s˜o sistemas mais velozes. Sistemas e amicroprocessados s˜o tipicamente de 32 ou 64 bits, sendo processadores de 8 e 16 bits consider- aados obsoletos hoje. Tem crescido tamb´m o uso de processadores dualcore ou multcore, isto ´, e ecomponentes com dois ou mais processadores operando de forma paralela. Existem ainda os DSP (Digita Signal Processors - Processadores Digitais de Sinal). S˜o pro- acessadores otimizados para realizar c´lculos, principalmente somat´rios de produtos, que s˜o as a o aopera¸˜es empregadas em processamento de sinais. Trabalham com frequˆncias de clock ele- co evadas, pois devem realizar grande quantidade de opera¸˜es em pouco tempo. Geralmente n˜o co as˜o os processadores principais do sistema, sendo ent˜o controlados por um processador ou mi- a acrocontrolador. Contudo vˆm sendo lan¸ados modelos h´ e c ıbridos de DPP e microcontroladores,que agregam grande capacidade de processamento a sistemas completos com grande n´mero de uperif´ricos em um unico chip. Hoje s˜o usados DSPs de 24e 32 bits, al´m de controladores h´ e ´ a e ıbridosde 16 bits. Qual desses sistemas utilizar em uma aplica¸˜o ´ uma pergunta que tem como resposta: ca edepende! Um microcontrolador n˜o ´ capaz de gerenciar um grande banco de dados como um a ePC; em contrapartida um identificador de chamadas constru´ com microprocessador teria um ıdopre¸o que inviabilizaria sua venda. Um DSP ´ t˜o inadequado para fazer uma central de alarmes c e acomo um microcontrolador ´ para fazer um filtro adaptativo. e Para cada necessidade teremos uma solu¸˜o diferente. No entanto ´ importante frisar que a ca egama de aplica¸˜es para microcontroladores ´ muito grande e cresce a cada dia; eles podem ser co eencarados como a porta de entrada a esse universo do software embarcado. 37
  • 36. XM118 - Microcontroladores PIC18Cap´ ıtulo 2PIC18, microcontroladores de altodesempenho2.1 Microcontroladores PIC Os microcontroladores PICs s˜o divididos em fam´ a ılias. Cada fam´ ılia, ou linha, tem v´rios acomponentes, com tamanhos e recursos diferentes; no entanto o c´digo desenvolvido para um ocomponente de uma determinada fam´ ´ compat´ ılia e ıvel com os demais componentes da mesmafam´ ılia, exceto por umas poucas altera¸˜es, que ser referem principalmente aos perif´ricos. Cada co efam´ tem seu pr´prio set (conjunto) de instru¸˜es. Dessa forma, ao se estudar um componente ılia o coespec´ ıfico de uma fam´ se est´ adquirindo conhecimento para trabalhar com microcontroladores ılia, ade toda a fam´ ılia. Para um mesmo fabricante, as fam´ ılias guardam uma semelhan¸a entre si, capesar de n˜o serem exatamente iguais. a As fam´ ılias de microcontroladores PIC s˜o: a • PIC10 • PIC12 • PIC14 • PIC16 • PIC17 • PIC18 • PIC24F/PIC24H • dsPIC30/dsPIC33 • PIC32 Dessas, as mais usadas e com maior n´mero de componentes s˜o as PIC12, PIC16 e PIC18. As u afam´ ılias PIC14 e PIC17 foram fam´ ılias intermedi´rias na evolu¸˜o da linha. A fam´ PIC24F/PIC24H a ca ılia´ composta por componentes de 16 bits e ´ a mais recente. J´ a fam´ dsPIC30/dsPIC33 tr´s ose e a ılia acontroladores h´ ıbridos de 16 bits. No final de 2007 foi lan¸ada tamb´m a fam´ PIC32, composta c e ılia 38
  • 37. XM118 - Microcontroladores PIC18por componentes de 32 bits. Quanto ao tipo de mem´ria, os componentes mais antigos (que ainda ocontinuam sendo fabricados) tˆm mem´ria do tipo OTP e EPROM. J´ os mais novos utilizam e o asomente flash. A tendˆncia do mercado ´ trabalhar somente com flash, principalmente nas etapas e ede ensino e desenvolvimento. O tipo de mem´ria flash pode ser identificado por uma letra ”F”no onome do componente (por exemplo PIC12F679, PIC16F628, PIC18F4550). Dentro da fam´ PIC18 h´ v´rias sub-fam´ ılia a a ılias, cada uma composta de v´rios componentes. aOs componentes diferem entre si em: • Quantidade de mem´ria RAM o • Quantidade de mem´ria EEPROM de dados (alguns n˜o tem nada) o a • Quantidade de mem´ria Flash de programa o • N´mero de pinos (18,28,40, ...) u • Frequˆncia m´xima de clock e a • Perif´ricos e O quesito ”perif´ricos”´ uma das principais caracter´ e e ısticas dos PIC. Dentre os dispon´ ıveisnas v´rias fam´ a ılias, podemos citar: timers, conversores A/D, comparadores anal´gicos, m´dulos o oUSART (comunica¸˜o serial RS232), M´dulos MSSP (I2C e SPI master), m´dulos CCP (Captura, ca o ocompara¸˜o e PWM), etc... ca A linha PIC18 ´ composta por microcontroladores com core de 8 bits de alto desempenho. eBuscou-se manter certa compatibilidade com a linha PIC16, o que pode ser observado no fun-cionamento de diversos perif´ricos e no conjunto de instru¸˜es. Contudo, muitas mudan¸as se e co cfizeram necess´rias, principalmente na arquitetura e no mapeamento de mem´ria, para superar a ocertas limita¸˜es apresentadas pela fam´ PIC16. co ılia A fam´ PIC16 ainda ´ amplamente utilizada. Contudo, ao estudar uma fam´ mais com- ılia e ıliaplexa, como a PIC18, acredita-se que o aluno se tornar´ apto tamb´m a trabalhar com microcon- a etroladores mais simples, como o PIC16 ou PIC12. Nosso enfoque nesse curso ser´ no PIC18F4550 e na fam´ PIC18. Os assuntos relativos ao a ıliahardware ser˜o apresentados de forma generalista para a fam´ PIC18 e depois tratados no que ´ a ılia eespec´ ıfico para o PIC18F4550. Dessa maneira pretende-se fazer um estudo n˜o de um componente aapenas, mas de toda a fam´ ılia.2.1.1 A Microchip O fabricante dos microcontroladores PIC ´ a empresa americana Microchip. Atualmente ela e´ uma das maiores fabricantes mundiais de microcontroladores de 8 bits. Al´m de microcontro-e eladores, a Microchip tamb´m fabrica mem´rias e outros componentes digitais, al´m de uma vasta e o elinha de componentes anal´gicos. o A Microchip trabalha com uma pol´ ıtica de suporte ao cliente muito eficiente, que provavel-mente ´ uma das causas de seu sucesso. Em seu site (www.microchip.com) existe uma grande equantidade de informa¸˜o dispon´ ca ıvel. Al´m dos manuais dos componentes, existem muitas no- etas de aplica¸˜o (Application Notes) e projetos de referˆncia, que s˜o de grande ajuda para a ca e aforma¸˜o da base de conhecimentos do estudante de microcontroladores PIC. ca 39
  • 38. XM118 - Microcontroladores PIC18 No Brasil, a Microchip ´ representada pela Aplica¸˜es Eletrˆnicas Artimar Ltda (www.artimar.com.br) e co oe conta com uma grande rede de revendedores.2.2 Arquitetura A figura abaixo apresenta o diagrama em blocos do PIC18F4550. Os demais componentes dafam´ PIC18 apresentam um diagrama muito semelhante, havendo diferen¸a apenas nos n´mero ılia c ude portais e nos perif´ricos. e Figura 2.1: Diagrama em blocos do PIC18F4550 Trata-se de um microcontrolador de 8 bits de arquitetura Harvard. Seu barramento de pro-grama ´ de 16 bits. e Como pode ser observada na figura, a estrutura do PIC8F4550 ´ semelhante ao sistema egen´rico estudado. Podem ser observados os barramentos de dados (data bus) e de programa e(program bus). Al´m disso, nota-se como operandos da ALU e de endere¸amento da mem´ria de e c odados vem diretamente da mem´ria de programa. o Tamb´m s˜o dignos de nota os perif´ricos, localizado na parte inferior do diagrama, que e a eest˜o ligados ao barramento de dados. A principal caracter´ a ıstica da arquitetura Harvard ´ ter as emem´rias de programa e dados separadas, acessadas por diferentes barramentos. Dessa maneira, ouma instru¸˜es pode ser lida da mem´ria de programa ao mesmo tempo em que a instru¸˜o co o caanterior ´ executada utilizando o barramento de dados, o que ´ chamado de paralelismo ou e epipeline. 40
  • 39. XM118 - Microcontroladores PIC18 O conjunto de instru¸˜es do PIC18 foi desenvolvido de forma que a grande maioria das in- costru¸˜es tenha 16 bits de comprimento. Isso garante o uso mais otimizado da mem´ria dispon´ co o ıvel.O fato da mem´ria de programa ser acessada separada permite que as instru¸˜es tenham uma o co”largura”(n´mero de bits em cada endere¸o) maior que a mem´ria de dados. No caso do PIC18, u c oa mem´ria de dados (e tamb´m o barramento de dados) ´ de 8 bits enquanto as instru¸˜es ar- o e e comazenadas na mem´ria de programa (e tamb´m o barramento de instru¸˜es) s˜o de 16 bits. O o e co atamanho das instru¸˜es est´ diretamente relacionado com o n´mero de instru¸˜es poss´ co a u co ıveis e comos tipos de operadores suportados. Fazendo uma compara¸˜o, a linha PIC16 tinha instru¸˜es de 14 ca cobits e um conjunto de 35 instru¸˜es; com o aumento para 16 bits na linha PIC18 o conjunto passa coa ter um conjunto padr˜o de 75 instru¸˜es e alguns componentes possui mais 8 instru¸˜es (modo a co coestendido), como ´ o caso do PIC18F4550. Algumas instru¸˜es, por´m, ocupam 32 bits. Es- e co esas instru¸˜es, que ser˜o detalhadas no momento oportuno, s˜o importantes principalmente para co a aeliminar a necessidade de pagina¸˜o de mem´ria, uma inconveniente caracter´ ca o ısticas dos PIC16al´m de otimizar o modo de endere¸amento indireto, o que ajuda o trabalho dos compiladores C. e cAs instru¸˜es de 16 bits (que chamaremos de curtas) s˜o executadas em um ciclo de instru¸˜o co a ca(4 per´ ıodos de clock). As instru¸˜es de 32 bits (que chamaremos de longas) s˜o executadas em co a2 ciclos de instru¸˜o. Instru¸˜es que causam altera¸˜o do fluxo do programa gastam um ciclo d ca co cainstru¸˜o adicional. ca O PIC18F4550 foi desenvolvido utilizando a tecnologia nanoWatt da Microchip, tendo dispon´ ıveldiversas funcionalidades que permite menor consumo de energia. A tabela a seguir tr´s as principais caracter´ a ısticas do PIC18F4550. Caracter´ ıstica PIC18F4550 Frequˆncia de opera¸˜o e ca DC a 48MHz Mem´ria de programa o 32768 bytes Mem´ria de dados RAM o 2048 bytes Mem´ria de dados EEPROM o 256 bytes Fontes de interrup¸˜o ca 20 Terminais de I/O 36 Temporizadores/Contadores 4 CCP 1 ECCP1 1 Comunica¸˜o Serial ca MSSP e EUSART2 Comunica¸˜o USB ca Sim Comunica¸˜o Paralela ca SPP3 Conversor anal´gico para digital o 10 bits, 13 canais Detector de tens˜o program´vel a a 1 Conjunto de instru¸˜es co 75 convencionais + 8 do modo entendido Tabela 2.1: Caracter´ ısticas dos PIC18F4550 1 O m´dulo ECCP ´ um m´dulo CCP melhorado, com novas o e o caracter´ ısticas 2 O m´dulo EUSART ´ um m´dulo USART melhorado, com o e o novas caracter´ ısticas 3 Porta paralela mestre 41
  • 40. XM118 - Microcontroladores PIC182.2.1 Pinagem e hardware b´sico a O PIC18F4550 ´ um componente de 40 pinos em seu encapsulamento PDIP (Plastic Dual eIn-line Package - Encapsulamento pl´stico em linha dupla). Esses pinos podem ser divididos aem terminais de alimenta¸˜o, de reset, de conex˜o com o oscilador e os terminais de portais e ca aperif´ricos. Como se trata de um componente com diversas caracter´ e ısticas e um pequeno n´mero ude terminais, muitos terminais possuem mais de uma fun¸˜o. Dessa forma, temos terminais de caentrada e sa´ dos portais multiplexados com terminais dos perif´ricos, terminais do oscilador e ıda eterminais de reset. De uma forma geral, quando usamos um determinado perif´rico, o terminal e´ associado a ele serve ao perif´rico e sua fun¸˜o de entrada e sa´ fica desativada. Quando oe e ca ıdaperif´rico n˜o ´ utilizado, o terminal trabalha como I/O. e a e Os portais do microcontrolador podem variar de fun¸˜es de modelo para modelo, mas geral- comente algumas funcionalidades se repetem sempre para pinos com o mesmo nome. Consulte omanual do microcontrolador para saber quais as fun¸˜es associadas a cada pino. co Os drivers de entrada podem ser TTL ou Schmitt Trigger (ST), podendo um mesmo pinoter drivers diferentes para fun¸˜es diferentes.. As sa´ co ıdas s˜o do tipo CMOS, embora exista um aterminal (RA4) com sa´ com dreno aberto (OD - open drain). Esse terminal, para ser usado ıdacomo sa´ ıda, precisa de um resistor de pull-up. H´ tamb´m os drivers especiais para osciladores a e(XTAL). Al´m, disso, alguns perif´ricos possuem entradas anal´gicas (AN). e e o A tabela que segue apresenta as caracter´ ısticas el´tricas desses drivers para o microcontrolador eoperando alimentado por 5V. Parˆmetro a Tipo de Buffer Min Max Vil TTL Vss 0.8 Schmitt Trigger Vss 1 Vih TTL 2,0 Vdd Schmitt Trigger 4,0 Vdd Vol CMOS - 0,6 VOH CMOS 4,3 - Tabela 2.2: Caracter´ ısticas el´tricas de entrada e sa´ e ıda Os terminais do oscilador podem ser utilizados como I/O, dependendo do modo de osciladorutilizado, conforme estudado. O terminal de reset (MCLR) pode ser configurado como entradade um portal no momento da grava¸˜o. ca Quanto ` capacidade de corrente, cada terminal configurado como sa´ ´ capaz de fornecer a ıda eou drenar 25mA. Contudo, a corrente (fornecida ou drenada) total de todos os termiais juntosn˜o pode ultrapassar 200mA. a A figura a seguir apresenta a pinagem do PIC18F4550. 42
  • 41. XM118 - Microcontroladores PIC18 Figura 2.2: Pinagem do PIC18F45502.3 Mem´rias o Por ser um microcontrolador de arquitetura Harvard, o PIC18 tem suas mem´rias de programa oe dados mapeadas separadamente.2.3.1 Mem´ria de programa o A arquitetura do PIC18 traz um PC (Program Counter - Contador de programa) de 21bits, portanto ´ poss´ e ıvel endere¸ar at´ 2MBytes de endere¸os de mem´ria de programa. Cada c e c ocomponente da fam´ ılia, por´m, tem diferentes quantidades de mem´ria implementadas. No caso e odo 0 existem 32kB de mem´ria FLASH de programa. o A mem´ria de programa ´ mapeada de forma que cada endere¸o tenha 8 bits (1 byte). Isso o e c´ feito de forma a facilitar o uso da mem´ria de programa para armazenamento de constantese o(de forma a facilitar a transferˆncia para o barramento de dados) e o uso de ´reas da flash n˜o e a aocupadas por programa como se fossem EEPROM de dados. Contudo, as instru¸˜es armazenadas cona mem´ria de programa tˆm 16 ou 32 bits. O que acontece na verdade ´ que cada instru¸˜o o e e caocupa dois endere¸os de mem´ria e o PC, quando executando um programa, incrementa de 2 em 2 c oe o barramento de instru¸˜o permite a leitura simultˆnea de dois endere¸os de mem´ria, formando ca a c ouma instru¸˜o de 16 bits (instru¸˜es curtas). Em virtude disso o endere¸o das instru¸˜es ´ sempre ca co c co eum n´mero par. Para a leitura das instru¸˜es longas (32 bits) s˜o feitos dois acessos de leitura. u co a Para o uso da mem´ria de programa para o armazenamento de dados existem instru¸˜es o coespeciais que realizam as chamadas opera¸˜es de tabela. O ponteiro utilizado nessas instru¸˜es co co´ o TBLPTR que tem 21 bits. Atrav´s dele ´ poss´e e e ıvel realizar a leitura e escrita de qualquerendere¸o da mem´ria de programa. c o 43
  • 42. XM118 - Microcontroladores PIC18 Resumindo: Para a leitura de instru¸˜es o endere¸amento ´ feito com 20 bits e a mem´ria ´ co c e o evista como tendo 16 bits de largura. Para opera¸˜es de tabela o endere¸amento ´ feito com 21 co c ebits e a mem´ria ´ vista como tendo 8 bits de largura. o e Uma importante novidade no PIC18 ´ a inexistˆncia de pagina¸˜o de mem´ria que existia e e ca ona fam´ PIC16. As instru¸˜es CALL e GOTO contˆm um campo de endere¸o de 20 bits ılia co e c(para endere¸o de instru¸˜es o bit menos significativo ´ sempre 0), portanto capaz de acessar c co equalquer ponto da mem´ria. Contudo, como se tratam de instru¸˜es longas devem ser usadas o cocom parcim´nia para uma maior economia de mem´ria. Existem instru¸˜es para chamada e o o codesvio relativos (RCALL e BRA, respectivamente) que acessam endere¸os a uma distˆncia de at´ c a e1k do endere¸o atual e ocupam apenas uma posi¸˜o de mem´ria. c ca o O vetor de reset para o PIC18F continua sendo o endere¸o 0000h, como era no PIC16. c Como ser´ tratado no momento oportuno, existem dois vetores de interrup¸˜o. O vetor de a camaior prioridade ´ o 0008h o de menor ´ o 0018h. e e A figura a seguir apresenta o mapa de mem´ria de programa do PIC18F4550. Leituras real- oizadas em endere¸os n˜o implementados de mem´ria retornam 0. c a o Figura 2.3: Mapa e mem´ria de programa o 44
  • 43. XM118 - Microcontroladores PIC18Contador de programa e Pilha O PC do PIC18 tem 21 bits. Ele ´ dividido em trˆs registros de 8 bits: PCL, PCH e PCU e e epode ser manipulado a partir da mem´ria de dados atrav´s de PCLATU, PCLATH e diretamente o eatrav´s de PCL. A figura apresenta a como esses registros interagem. e Figura 2.4: Estrutura do PC De forma similar ao que acontece no PIC16, toda vez que uma opera¸˜o de escrita ´ realizada ca eem PCL os valores de PCLATH e PCLATU s˜o carregados em PCH e PCU, respectivamente, acausando um desvio imediato. A novidade ´ que uma leitura do registro PCL faz com que eos valores de PCH e PCU sejam transmitidos para o PCLATH e PCLATU, respectivamente.Essa funcionalidade ´ muito interessante, principalmente na implementa¸˜o de RTOS (Real Time e caOperation System - Sistema Operacional de Tempo Real). O bit 0 de PCL n˜o pode ser escrito, aficando sempre em 0. A pilha do PIC18 ´ um espa¸o de mem´ria de 31 posi¸˜es de 21 bits. Ela n˜o est´ mapeada e c o co a anem em RAM nem em FLASH. Trata-se de uma pilha circular, ou seja, o 32o endere¸o gravado csobrescreve o primeiro, caracterizando um overflow da pilha. Se instru¸˜es de retorno forem codadas quando o primeiro n´ da pilha estiver livre considera-se um underflow da pilha. Pode-se ıvelconfigurar o microcontrolador para que esses dois eventos causem reset. O ponteiro da pilha (Stack Pointer) ´ acess´ atrav´s do registro STKPTR, o que n˜o acontece e ıvel e ana arquitetura PIC16. Nesse registro h´ tamb´m bits que sinaliza o estado da pilha. O ponteiro a eda pilha cont´m o endere¸o do topo da pilha, que recebe o ultimo endere¸o de retorno guardado. e c ´ c Figura 2.5: Ponteiro da pilha • STKOVF : indicador de overflow – 1 = a pilha est´ cheia ou houve overflow a – 0 = a pilha m˜o est´ cheia e n˜o houve overflow. a a a • STKUNF : indicador de underflow. – 1 = Houve underflow da pilha 45
  • 44. XM118 - Microcontroladores PIC18 – 0 = N˜o houve underflow da pilha a • SP4:SP0 : S˜o o ponteiro da pilha propriamente dito. a O valor contido no endere¸o apontado pelo ponteiro, portanto o ultimo endere¸o salvo na c ´ cpilha, ´ chamado de topo da pilha (TOS - Top of Stack). No PIC18 o conte´do desse endere¸o e u c´ acess´ atrav´s dos registros de fun¸˜o especial TOSU, TOSH e TOSL. Ee ıvel e ca ´ poss´ ent˜o ler ıvel ao conte´do do topo da pilha e alter´-lo. Al´m disso, existem as instru¸˜es PUSH e POP. PUSH u a e coincrementa o valor o ponteiro da pilha e carrega o endere¸o seguinte no TOS. POP decrementa co ponteiro, descartando endere¸o contido no TOS. Essas funcionalidades s˜o bastante uteis na c a ´implementa¸˜o de um sistema operacional. ca2.3.2 Mem´ria de dados o A mem´ria de dados apresenta altera¸˜es bastante significativas em rela¸˜o ao PIC16. A o co caprincipal diferen¸a est´ no sistema de pagina¸˜o. A arquitetura do PIC18 prevˆ 12 bits para c a ca eendere¸amento de mem´ria de dados, o que permite trabalhar com at´ 4096 endere¸os de mem´ria, c o e c odivididos entre registros de fun¸˜o especial (SFR - Special Function Registers) e registros de uso cageral (GPR - General Purpose Registers). As instru¸˜es que manipulam dados na mem´ria RAM co o(com exce¸˜o de MOVFF) fornecem 8 bits para compor esse endere¸o; os outros quatro s˜o ca c afornecidos pelo registro de sele¸˜o de banco: BSR. ca Esse esquema de acesso parece ser o mesmo usado no PIC16, que apresentava diversas incon-veniˆncias em sua aplica¸˜o. H´, por´m algumas inova¸˜es que facilitam o seu uso. Em primeiro e ca a e colugar, existe a instru¸˜o MOVFF ´ capaz de mover dados entre dois registros em quaisquer ban- ca ecos; isso ´ poss´ porque esta ´ uma instru¸˜o longa (32 bits) e cont´m os endere¸os de 12 bits e ıvel e ca e cdos dois registros acessados. As demais instru¸˜es necessitam da sele¸˜o de banco para acesso aos co caregistros. Isso ´ facilitado pela instru¸˜o MOVLB, que move um valor constante diretamente para e caBSR. Existem ainda instru¸˜es especiais para o modo indexado e o banco de acesso, descritos a coseguir. A seguir ´ apresentado o mapeamento de mem´ria de dados v´lido para o PIC18F4550: e o a 46
  • 45. XM118 - Microcontroladores PIC18Figura 2.6: Mapeamento de mem´ria de dados para PIC18F4550 o 47
  • 46. XM118 - Microcontroladores PIC18SFR - Registros de fun¸˜o especial ca A figura a seguir apresenta os registros de fun¸˜o especial existentes no PIC18F4550. Para caquem conhece o PIC16 pode parecer que eles est˜o distribu´ a ıdos em quatro bancos, pela semelhan¸a cna forma de apresentar, mas na verdade est˜o todos em um unico banco. a ´ Figura 2.7: Registros de fun¸˜es especiais existentes no PIC18F4550 coBanco de acesso Para agilizar opera¸˜es de manipula¸˜o de dados entre vari´veis e os registros de uso especial co ca afoi implementado um sistema de banco de acesso. Trata-se de uma op¸˜o que pode ser informada canas instru¸˜es de manipula¸˜o de dados que habilita o uso de um sistema alternativo de acesso co caa mem´ria. Quando uma instru¸˜o usa esse sistema o registro BSR ´ ignorado e ”visto”como o ca eum unico banco de 256 endere¸os, cujos 128 primeiros endere¸os s˜o os 128 primeiros do banco ´ c c a 48
  • 47. XM118 - Microcontroladores PIC18(chamados de RAM de Acesso) enquanto os 128 ultimos s˜o os 128 endere¸os finais do banco 15 ´ a conde est˜o os registros de fun¸˜es especiais (SFR). a coMem´ria RAM para USB o Quando o perif´rico USB ´ usado os bancos 4, 5, 6 e 7 s˜o usados como buffer da comunica¸˜o e e a ca ´ usando um sistema chamado mem´ria RAM de porta dupla (dual port RAM) onde tantoUSB. E oo perif´rico USB como o core do PIC tem acesso de leitura e escrita para troca de informa¸˜es. e co Quando n˜o ´ usada comunica¸˜o USB esses bancos podem ser usados como RAM de uso a e cageral.Modos de endere¸amento c A arquitetura do PIC18 possui quatro modos de endere¸amento: Inerente, Literal, Direto e cIndireto. O Modo Inerente ´ aquele das instru¸˜es que n˜o necessitam da indica¸˜o do operando. O e co a caoperando ´ ”inerente”a instru¸˜o (da´ o nome). Exemplos: CLRWDT, DAW, PUSH. e ca ı O Modo Literal ´ aquele onde ´ operando ´ um valor constante (literal). Nesse caso o operando e e e´ armazenado como parte da instru¸ao na mem´ria flash. Ex.: MOVLB, ADDLW, GOTO.e c˜ o No modo Direto os operandos da instru¸˜o s˜o dados da mem´ria RAM cujos endere¸os s˜o ca a o c afixos. Esses endere¸os fazem parte da pr´pria instru¸˜o. Ex.: MOVFF, BSF, ADDWF. c o ca Ao contr´rio do modo direto, o modo indireto manipula dados de mem´ria RAM de en- a odere¸os vari´veis. O dado ´ acessado atrav´s dos registros INDFx e seu endere¸o ´ apontado c a e e c epelo registro FSRx. Existem trˆs conjuntos de registro FSRx formando trˆs ponteiros de 16 bits e e(FSR0H:FSR0L, FSR1H:FSR1L e FSR2H:FSR2L). Juntamente com cada par FSRx trabalha umregistro INDFx (INDF0, INDF1e INDF2).2.4 Processador O processador (ou CPU) do PIC18 executa as instru¸˜es e controla todo o hardware do comicrocontrolador. Ele ´ frequentemente chamado de core, isto ´, o n´cleo do microcontrolador. e e u O processador necessita para trabalhar de um sinal chamado clock de sistema, que ´ gerado epelo sistema de oscilador. Refere-se ao per´ ıodo do clock de sistema com TSCLK. Cada instru¸˜o ca´ executada em 4 ciclos de clock do sistema e esse per´e ıodo do ciclo de instru¸˜o ´ chamado TCY. ca ePortando, TCY = 4.TSCLK. Cada instru¸˜o executada pelo oscilador gasta 4 ciclos de clock. Esses quatro ciclos, chamados ca 1ciclos Q, comp˜em um ciclo de instru¸˜o. Surge ent˜o um sinal, cuja frequˆncia ´ o ca a e e 4 da frequˆncia edo oscilador e ´ chamado de clock de instru¸˜o ou clock de perif´ricos. Ou seja, o tempo de e ca eexecu¸˜o de cada instru¸˜o ´ de 4 per´ ca ca e ıodos de clock. Esse ´ o sinal dispon´ e ıvel no terminalRA6/OSC2/CLKOUT quando trabalhamos em um modo de oscilador com sa´ de clock. ıda Em cada um dos ciclos Q ´ realizada uma etapa da instru¸˜o, conforme mostrado na tabela. e ca 49
  • 48. XM118 - Microcontroladores PIC18 Ciclo A¸ao c˜ Q1 Ciclo de decodifica¸˜o da instru¸˜o ca ca Q2 Ciclo de leitura de dados Q3 Ciclo de processamento Q4 Ciclo de escrita de dados Tabela 2.3: Ciclos ”Q”do microcontrolador A figura abaixo apresenta um diagrama de tempos do sinal de clock e do ciclo de instru¸˜o. ca Figura 2.8: Ciclos de instru¸˜o ca Alguns perif´ricos e algumas fun¸˜es do PIC n˜o s˜o sincronizados nem com o clock do os- e co a acilador nem com o clock de perif´ricos, mas com os ciclos Q. e2.4.1 ALU A ALU (Arithmetic Logical Unit - Unidade L´gico-Aritm´tica) do PIC18 ´ capaz de realizar o e eopera¸˜es de soma, subtra¸˜o, deslocamento e opera¸˜es l´gicas. Todas as opera¸˜es tˆm oper- co ca co o co eadores e resultados de 8 bits. Associada a ALU trabalham dois registros: o registro W, chamadotamb´m de WREG est´ sempre envolvido nas opera¸˜es matem´ticas, podendo ser um dos operan- e a co ados e/ou o destino do resultado; o registro STATUS informa os resultados not´veis das opera¸˜es a comatem´ticas atrav´s de flags. A figura 2.9 apresenta o diagrama em blocos da ALU. Observe que a epodem ser operandos valores presentes na mem´ria RAM, constantes vindas das instru¸˜es e o o copr´prio WREG. o Figura 2.9: ALU 50
  • 49. XM118 - Microcontroladores PIC18 A seguir ´ apresentado o registro STATUS bem como a interpreta¸˜o dos bits de flag. e ca Figura 2.10: Registro STATUS / Bits de flag • N : Negativo, indica quando o resultado de uma opera¸˜o sinalizada ´ 0 (c´pia do bit 7 do ca e o resultado): – 1 = resultado negativo; – 0 = resultado positivo; • OV : Overflow, indica a ocorrˆncia de ”vai 1”do bit 6 para o bit 7, indicando que houve e estouro da capacidade do valor absoluto (7 bits) em opera¸˜es sinalizadas: co – 1 = houve overflow para opera¸˜es sinalizadas; co – 0 = n˜o houve overflow; a • Z: Bit indicador de zero: – 1 = se o resultado de uma opera¸˜o da ALU ´ zero; ca e – 0 = se o resultado de uma opera¸˜o da ALU ´ diferente de zero; ca e • DC: Carry/Borrow de d´ ıgito. Para borrow o bit ´ inverso: e – 1 = houve transporte do 4o. para o 5o. bit; – 0 = n˜o houve transporte do 4o. para o 5o. bit; a • C: Carry/Borrow . Para borrow o bit ´ inverso: e – 1 = houve transporte para 8o. bit; – 0 = n˜o houve transporte para 8o. bit; aMultiplicador 8x8 bits Al´m das fun¸˜es b´sicas da ALU, os PIC18 s˜o equipados com um hardware multiplicador e co a acom capacidade de fazer opera¸˜es com operandos de 8 bits, gerando resultados de 16 bits. O coPIC18 possui instru¸˜es de multiplica¸˜o que, ao contr´rio do que acontece em alguns proces- co ca asadores, n˜o s˜o implementadas por opera¸˜es b´sicas da ALU, mas sim atrav´s de um hardware a a co a eespec´ ıfico. A principal vantagem disso ´ que as multiplica¸˜es (de 8 por 8 bits) s˜o realizadas e co aem um unico ciclo de instru¸˜o, tornando o microcontrolador muito mais r´pido para a execu¸˜o ´ ca a cade qualquer tipo de multiplica¸˜o. O multiplicador por hardware, juntamente com a maior ve- calocidade de processamento, permite ao PIC18 implementar algoritmos de processamento de sinal,al´m de reduzir a ocupa¸˜o de mem´ria de programa para essas opera¸˜es. e ca o co 51
  • 50. XM118 - Microcontroladores PIC18 A instru¸˜o MULLW realiza a multiplica¸˜o de W por uma constante enquanto MULWF ca carealizada a multiplica¸˜o de W por um endere¸o de mem´ria RAM. Nos dois casos o resultado ca c o(de 16 bits) ´ armazenado no SFRs PROFH e PRODL. e A opera¸˜o de multiplica¸˜o n˜o afeta os flags do registro STATUS. ca ca a2.5 Portais de I/O A configura¸˜o dos portais de I/O do PIC18 ´ muito semelhante a configura¸˜o do PIC16, ca e capor´m algumas importantes diferen¸as existem. e c O processo de defini¸˜o da dire¸˜o dos pinos (se entrada ou sa´ ca ca ıda) ´ feio atrav´s do registro e eTRISx associado a cada portal (TRISA, TRISB, etc), onde ’1’ em um bit no registro TRISx fazo bit correspondente do portal ser uma entrada enquanto um ’0’ em um bit no registro TRISxfaz o bit correspondente do portal ser uma sa´ ıda. Nos processos de escrita e leitura dos portais aparecem as diferen¸as entre o PIC16 e PIC18. cA figura 2.11 traz o diagrama em blocos gen´rico para um portal e ajuda a compreender esses eprocessos. Figura 2.11: Esquema gen´rico de um pino e Al´m dos registros PORTx existem no PIC18 os registros LATx (LATA, LATB, LATC, etc). eOs registros LATx corresponde ao Data Latch da figura 2.11. Em um pino configurado como sa´ uma opera¸˜o de escrita no registro LATx gera o mesmo ıda caresultado de uma escrita no registro PORTx, isto ´, o dado armazenado no Data Latch ´ trans- e eferido para o pino do microcontrolador. Se o pino est´ configurado como entrada a escrita tanto ano registro LATx como no PORTx tamb´m tem o mesmo resultado, o valor ´ armazenado no e eData Lacth mas o driver de sa´ permanece desabilitado. ıda 52
  • 51. XM118 - Microcontroladores PIC18 Na leitura, por´m, os resultados divergem. Primeiro, admite-se que um dado pino est´ config- e aurado como entrada. Se for realizada uma leitura do registro PORTx o valor de retorno ´ o estado ereal do pino enquanto a leitura do registro LAT retorna o valor anteriormente escrito no DataLatch . Admitindo agora que o pinos esteja configurado com sa´ ıda, a leitura do registro LATxtraz o valor que deveria estar no pino enquanto a leitura de PORTx traz o valor que realmenteest´ no pino. Dessa forma ´ poss´ detectar a existˆncia de curtos circuitos ou outros defeitos a e ıvel ede hardware. Assim como nos PIC16, cada pino dos PIC18 e capaz de drenar ou fornecer at´ 25mA, sendo erespeitadas as limita¸˜es de correntes para cada portal, apresentadas pelo manual de cada com- coponente.2.6 Conjunto de Instru¸oes c˜ O conjunto de instru¸˜es do PIC18 ´ um de seus pontos de maior destaque por suas diversas co ecaracter´ ısticas: • Semelhan¸a com o conjunto de instru¸˜es do PIC16, tanto no mnemˆnico das instru¸˜es c co o co quanto na sintaxe, o que garante r´pida a adapta¸˜o do desenvolvedor e facilita a tradu¸˜o a ca ca de c´digo entre as fam´ o ılias PIC16 e PIC18; • 75 instru¸˜es no modo normal e mais 8 instru¸˜es no modo estendido. co co • Instru¸˜es otimizadas para uso de ponteiros (facilita o uso de compiladores C) co • Instru¸˜es longas (32 bits) que solucionam problemas de pagina¸˜o de mem´ria de programa co ca o e mem´ria de dados o • Instru¸˜es de desvio condicional co O modo estendido ´ habilitado via bits de configura¸˜o e permite que 8 instru¸˜es a mais e ca cosejam usadas. Essas instru¸˜es permitem opera¸˜es mais avan¸adas nos modos de acesso indireto co co ce opera¸˜es de tabela. Nem todos os microcontroladores da linha PIC18 tˆm o conjunto de co einstru¸˜es estendido. co Como sabemos, instru¸˜es s˜o compostas por uma parte que diz o que deve ser feito (que co achamaremos operador) e uma parte que diz com quem deve ser feito (que chamaremos operandos).Para compreender o conjunto de instru¸˜es do PIC18 ´ preciso saber que muitas das opera¸˜es co e corealizadas v˜o ter como um de seus operandos um registro de fun¸˜o especial chamado W. Ele a catamb´m ´ geralmente o destino do resultado de muitas opera¸˜es, portanto sua fun¸˜o se confunde e e co cacom a do chamado acumulador existente em outras arquiteturas. Portanto, ao somar dois valores,geralmente somamos um valor (constante ou vari´vel) a W, podendo o resultado armazenado no apr´prio W. o No Anexo E desta apostila est´ um quadro resumo do conjunto de instru¸˜es do PIC18. a coInforma¸˜es mais detalhadas podem ser obtidas no manual do PIC18F4550. co Neste curso n˜o ser´ dado maior enfoque a linguagem Assembly, j´ que nos concentraremos na a a alinguagem C. Contudo, ´ importante saber que ´ poss´ (e algumas vezes necess´rio ) introduzir e e ıvel atrechos de c´digo assembly em programas escritos em C. o 53
  • 52. XM118 - Microcontroladores PIC182.7 Oscilador Como o funcionamento de um sistema computacional ´ baseado numa sequencia de a¸˜es, e coessas a¸˜es devem ser executadas numa certa cadˆncia. Para obter essa cadˆncia ´ utilizado um co e e esinal de sincronismo ou clock. Os microcontroladores PIC possuem um circuito de oscila¸˜o interna, isto ´, s˜o capazes de ca e agerar seu pr´prio clock com acr´scimo de poucos (ou nenhum) componentes externos. Existem o ediversos tipos diferentes de oscilador, e cada componente da fam´ utiliza alguns deles. ılia A frequˆncia m´xima do PIC18F4550 ´ de 48MHz. Em muitos outros componentes da fam´ e a e ıliaPIC18 essa frequˆncia est´ limitada a 40 MHz. Por fim, a fam´ PIC16 aceita frequˆncia m´xima e a ılia e ade 20MHz. O PIC18 apresenta os seguintes tipos modos de oscilador (nem todos eles presente em todosos componentes da linha): • Modos a cristal/ressonador cerˆmico: a – LP: Cristal, baixas frequˆncias (Low Frequency (Power) Crystal); e – XT: Cristal, frequˆncias intermedi´rias (Crystal/Resonator); e a – HS: Cristal, altas frequˆncias(High Speed Crystal/Resonator); e – HSPLL: Cristal de alta frequˆncia com PLL (High Speed with Phase Locked Loop) e • Oscilador RC Externo (External Resistor/Capacitor); – Com ou sem sa´ de clock ıda – Necessita de um resistor (opcionalmente um capacitor) externo • Oscilador RC Interno (Internal Resistor/Capacitor); – Com ou sem sa´ de clock ıda – Oscilador interno do microcontrolador, sem a necessidade de componentes adicionais. • Entrada de clock externo (External Clock in) – Com ou sem sa´ de clock; ıda – Clock proveniente de outras partes do circuito.. A fam´ PIC18 prevˆ 3 fontes poss´ ılia e ıveis de clock: prim´rio, secund´rio e interno. A fonte a aprim´ria pode ser um dos modos de oscilado a cristal, clock externo ou mesmo o oscilador interno. aA fonte secund´ria ´ um segundo oscilador do circuito, ligado ao Timer 1 (trataremos com mais a edetalhes desse oscilador quando o Timer 1 for estudado). A fonte interna ´ a op¸˜o de se usar o e ca ´oscilador interno. E poss´ mudar de fonte de clock a qualquer momento durante a execu¸˜o do ıvel caclock. Isso permite uma s´rie de possibilidades relacionadas com economia de energia, como ser´ e atratado oportunamente. O PIC18F4550 possui um circuito oscilador especial para atender a uma demanda de frequˆncia epara a comunica¸˜o USB. Para o correto funcionamento da porta USB ´ necess´rio um sinal de 48 ca e aMHz (para USB de alta velocidade) ou 6MHz (para USB de baixa velocidade). Isso implica em umsistema de gera¸˜o e sele¸˜o de clock mais complexo do que o encontrado em outros componentes ca cada fam´ PIC18. O diagrama em blocos abaixo mostra esse sistema de forma simplificada. ılia 54
  • 53. XM118 - Microcontroladores PIC18 Figura 2.12: Sistema de oscila¸˜o ca A qualquer momento ´ poss´ selecionar qual dos osciladores est´ sendo usado como fonte de e ıvel aclock para a CPU e perif´ricos. Existe ainda um PLL associado ao oscilador prim´rio, que ser´ e a adetalhado mais a frente, mas por hora pode ser entendido como um multiplicador de frequˆncias. eDeve ser notado o detalhe da chave que permite interromper o clock para CPU; essa chave ´ a eatua¸˜o do modo IDLE que ser´ tratado quando forem estudados os modos de baixo consumo. ca a2.7.1 Oscilador a cristal ( LP,XT e HS) Os modos LP, XT e HS utilizam um cristal ou ressonador cerˆmico para estabilizar o clock. aA diferen¸a est´ na faixa de frequˆncia de cada modo. c a e O modo LP refere-se a cristal/ressonador cerˆmico de baixa frequˆncia. Esse modo trabalha a ecom frequˆncias de oscila¸˜o de at´ 200 kHz e nele conseguimos o menor consumo dos trˆs modos e ca e eem quest˜o. a O modo XT abrange as frequˆncias de 200 kHz at´ 4 MHz e apresenta um consumo m´dio. e e e O modo HS ´ para frequˆncias de 4 a 25 MHz e tem o mais alto consumo. Cada faixa de e efrequˆncia possui um ganho do circuito oscilador, que ´ ajustado de forma diferente para cada e emodo. E´ recomendado que se use o modo adequado para cada frequˆncia, caso contr´rio pode e aocorrer mau funcionamento do oscilador. Al´m do cristal ou do ressonador, nos modos LP, XT e eHS, devem existir capacitores ligados dos terminais do cristal terra, conforme mostra a figura. Figura 2.13: Circuito do Oscilador a Cristal/Ressonador O PIC18F4550 n˜o possui o modo LP, por´m outros componentes da fam´ sim. Os valores a e ıliadesses capacitores s˜o os indicados nas tabelas Capacitor Selection for Crystal Oscillator que se a 55
  • 54. XM118 - Microcontroladores PIC18encontra nos manuais de cada PIC na se¸˜o que trata de configura¸˜es do oscilador. Para o ca coPIC18F4550 os valores s˜o os apresentados na tabela abaixo. aAten¸˜o: esses valores podem mudar conforme o microcontrolador. ca Tipo de Frequˆncia do e Faixa de Faixa de oscilador cristal capacitor C1 capacitor C2 XT 4MHz 27pF 27pF HS 4MHz 27pF 27pF 8MHz 22pF 22pF 20MHz 15pF 15pF Tabela 2.4: Sele¸ao de capacitores para oscilador a cristal c˜ Capacitores maiores aumentam a estabilidade do oscilador, mas tamb´m aumenta o tempo de epartida. O tempo de partida do oscilador ´ o tempo necess´rio para que o oscilador se estabilize, e apois a oscila¸˜o n˜o ocorre de forma imediata assim que o circuito ´ alimentado. Esse tempo ca a edepende de uma s´rie de fatores, al´m dos capacitores, com temperatura, tens˜o de alimenta¸˜o e e a cae at´ capacitˆncias parasitas do lay-out da placa. e a Figura 2.14: Partida do oscilador2.7.2 PLL - Phase Locked Loop O modo HSPLL permite utilizar o sinal de clock do modo HS, INTIO1 e INTIO2 comosincronismo para um circuito de PLL (Phase Locked Loop) que gera em sua sa´ um sinal com ıdaquatro vezes a frequˆncia do sinal de referˆncia. e e PLL (Phase Locked Loop) ´ um circuito que permite gerar um sinal de alta frequˆncia baseado e eem um sinal preciso de baixa frequˆncia. Para entendˆ-lo ser´ estudado o sistema de PLL comu- e e amente encontrado em microcontroladores PIC18 na figura a seguir. Figura 2.15: Esquema b´sico de um PLL a 56
  • 55. XM118 - Microcontroladores PIC18 Existe um oscilador o cristal que ´ o oscilador de referˆncia e garante a precis˜o ao sistema. O e e asinal desse oscilador ´ comparado com uma amostra do sinal de sa´ atrav´s de um comparador e ıda ede fase. Caso existe alguma diferen¸a entre essa amostra e o oscilador de referˆncia um sinal de c eerro ´ gerado e filtrado e aplicado ao VCO (Voltage Controled Oscillator - Oscilador controlado epor tens˜o). O VCO gera ent˜o um sinal de sa´ conforme comandando pelo sinal de erro. Esse a a ıdasinal passa por um divisor de frequˆncia para gerar a amostra a ser comparada com o oscilador de ereferˆncia. Como a precis˜o do sinal de sa´ ´ dada pela referˆncia, o sinal ´ t˜o preciso quanto e a ıda e e e afor o cristal. Por exemplo, utilizando um PLL ´ poss´ fazer com que o microcontrolador opere e ıvela 40 MHz utilizando um cristal de 10MHz. Neste caso o divisor de frequˆncias deve dividir o sinal ede sa´ por 4. Essa funcionalidade pode ser util, n˜o s´ para se obter uma frequˆncia de trabalho ıda ´ a o emais alta como tamb´m para evitar problemas com interferˆncia eletromagn´tica, que geralmente e e ese manifestam de forma mais acentuada quando utilizamos cristais de valores mais altos.2.7.3 Oscilador RC Tamb´m ´ poss´ trabalhar com osciladores RC (Resistor/Capacitor). Para isso ´ utilizada e e ıvel ea montagem abaixo e selecionado o modo de oscilador como RC. Figura 2.16: Circuito do oscilador no modo RC. O oscilador RC funciona de forma muito semelhante ao cl´ssico oscilador constru´ com um a ıdoCI 555: a carga do capacitor faz a tens˜o subir at´ atingir um n´ que seja entendido como ’1’ a e ıvelna entrada do buffer schmitt trigger (VIH); isso faz o transistor conduzir e descarregar o capacitorat´ um n´ e ıvel de tens˜o entendido como ’0’ pelo buffer (VIL), o que faz o transistor cortar e o areinicia o processo de carga do capacitor. Como o tempo de carga ´ dado em fun¸˜o dos valores e cado resistor e do capacitor ´ poss´ controlar a frequˆncia de oscila¸˜o atrav´s da escolha destes e ıvel e ca edois componentes. A figura a seguir mostra as formas de onda na entrada e na sa´ do buffer. ıda Figura 2.17: Forma de onda do oscilador RC. O modo RC apresenta algumas limita¸˜es: a frequˆncia de trabalho ´ dependente de v´rios co e e afatores (valores de resistor e de capacitor, tens˜o de alimenta¸˜o, temperatura) e apresenta pouca a ca 57
  • 56. XM118 - Microcontroladores PIC18estabilidade (tolerˆncia dos resistores e capacitores, varia¸˜o na tens˜o de alimenta¸˜o, varia¸˜es a ca a ca code temperatura). Por exemplo, em uma produ¸˜o em quantidade de produtos utilizando PIC´s cano modo RC, a frequˆncia de cada produto pode variar em fun¸˜o da tolerˆncia dos resistores e ca autilizados. N˜o ´ poss´ garantir precis˜o em nada que se baseie em tempo no programa. Assim a e ıvel aesse modo s´ ´ recomendado para aplica¸˜es nas quais a frequˆncia n˜o ´ um fator cr´ oe co e a e ıtico. Essasitua¸˜o ´ que justifica a utiliza¸˜o do modo, pois um oscilador RC tem custo menor que um a ca e cacristal. O PIC18F4550 n˜o possui esse tipo de oscilador. a2.7.4 Oscilador Externo O modo EC permite que seja aplicado um sinal de clock proveniente de outra parte do circuito.Isso pode ser util quando j´ existe algum oscilador ou base de tempo j´ implementada, ajudando ´ a aa reduzir custos. Nesses casos o sinal ´ aplicado ao terminal RA7/OSC1/CLKIN. e A figura ?? apresenta dois circuitos osciladores que podem ser utilizados. Um (a) faz usode um cristal de ressonˆncia paralela enquanto o outro (b) usa cristal de ressonˆncia s´rie. Na a a epr´tica, ´ mais comum encontrar cristais de ressonˆncia paralela. a e a Figura 2.18: Circuitos osciladores: (a) cristal paralelo e (b) cristal s´rie. e2.7.5 Oscilador Interno O PIC18F4550 possui um oscilador interno (INTOSC) que pode ser usado em substitui¸˜o a caqualquer um dos modos de oscilador interno. O oscilador propriamente dito tem frequˆncia de e8 MHz. Ele possui, por´m um p´s-escala (divisor de frequˆncia) que permite escolher entre as e o efrequˆncias 8MHz, 4 MHz, 2 MHz, 1MHz, 500 kHz, 250 kHz e 125kHz. Al´m dessas frequˆncias e e ederivadas do oscilador INTOSC existe outro oscilador chamado de INTRC que gera frequˆncia ede 31kHz. Este oscilador gera clock para algumas temporiza¸˜es do sistema, como o watchdog cotime, mas tamb´m pode ser escolhido como fonte de clock. O processo para determinar qual o efrequˆncia usada ser´ apresentado mais a frente. e a O oscilador de 8MHz ´ calibrado em f´brica. Mesmo assim ´ poss´ fazer um ajuste fino de e a e ıvelsua frequˆncia atrav´s do registro OSCTUNE. A precis˜o t´ e e a ıpica do oscilador interno ´ de 1%. e 58
  • 57. XM118 - Microcontroladores PIC182.7.6 Compara¸˜o entre os modos de oscilador ca Um modo de oscilador por si s´ n˜o ´ melhor que outro. A quest˜o ´ qual se adapta melhor o a e a ea necessidade de cada projeto. Os crit´rios para escolher o tipo de oscilador a ser usado s˜o: e a • Precis˜o: qu˜o pr´ximo os osciladores est˜o da frequˆncia nominal em um lote de equipa- a a o a e mentos montados. • Estabilidade: capacidade do oscilador se manter na frequˆncia quando ocorrem mudan¸as e c externas (temperatura, tens˜o de alimenta¸˜o). a ca • Variedade de frequˆncias: facilidade de se obter uma frequˆncia desejada qualquer. e e • Custo: pre¸o dos componentes externos que comp˜em o oscilador. c o A tabela a seguir apresenta de forma resumida e jovial uma compara¸˜o entre os modos de caoscilador apresentados (com exce¸˜o do modo EC). ca Crit´rio e Osciladores a cristal Oscilador Oscilador Interno (Com ou sem PLL) RC Interno Precis˜o a Bom Ruim M´dio e Estabilidade Bom Ruim M´dio e Variedade de frequˆncias e M´dio e Bom M´dio e Custo Ruim M´dio e Bom Tabela 2.5: Compara¸˜o entre os modos de oscilador ca2.7.7 Sistema de clock do PIC18F4550 Conforme foi dito, o PIC18F4550 usa um sistema de clock mais elaborado que o encontradoem outros componentes da fam´ PIC18. Isso porque ele precisa gerar sinais espec´ ılia ıficos para om´dulo USB. O oscilador prim´rio ´ feito especificamente com a finalidade de gerar o sinal de o a eclock para a USB. Pode-se optar por usar esse mesmo sinal como clock do sistema ou escolher afonte secund´ria ou interna. A figura a seguir representa o sistema de gera¸˜o e sele¸˜o de clock a ca cado PIC18F4550. 59
  • 58. XM118 - Microcontroladores PIC18 Figura 2.19: Sistema de gera¸˜o e sele¸˜o de clock do PIC18F4550. ca ca 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 atenderas necessidades do m´dulo USB, portanto o clock gerado para o processador e perif´rico torna-se o euma consequˆncia do clock para USB. Acompanhe na figura acima como cada modo opera. e Ao selecionando um modo sem PLL (XT, HS, EC, ECIO) o sinal do oscilador principal passapor um divisor de frequˆncias, chamado Oscillator Prescaler que permite dividir esse sinal por 2, 3 eou 4, ou n˜o dividir. Podemos assim obter diferentes frequˆncias de opera¸˜o, mesmo atendendo a e caa necessidade do oscilador para USB. Se n˜o existe interesse em usar a USB, basta escolher esse amodo de trabalho e escolher a op¸˜o 1:1. ca Quando optamos por usar um modo com PLL (HSPLL, XTPLL, ECPLL E ECPIO) o sinal 60
  • 59. XM118 - Microcontroladores PIC18do oscilador principal ´ aplicado a um divisor de frequˆncia (PLL Prescaler). O objetivo desse e edivisor ´ obter um sinal de 4 MHz em sua sa´ e ıda, permitindo que o usu´rio escolha cristais de afrequˆncias m´ltiplas de 4MHz. Fazendo-se a sele¸˜o correta do fator de divis˜o obtemos um e u ca asinal de 4 MHz aplicado ao PLL, cujo divisor ´ por 12, ou seja, aplicando uma entrada de 4 MHz eobtemos uma sa´ de 96MHz. Esse sinal ´ dividido por 2 para se obter a frequˆncia de 48MHz ıda e enecess´ria a comunica¸˜o USB de alta velocidade. Esse mesmo sinal ´ aplicado a outro divisor a ca e(PLL Postscale) que permite obter uma fra¸˜o desse sinal para ser usado como sinal de clock pelo caprocessador e perif´ricos. e Outra fonte de clock dispon´ ´ o oscilador secund´rio. Ele ´ baseado no oscilador do timer ıvel e a e1, que ser´ tratado em outro lugar. Por hora basta saber que temos mais essa op¸˜o de clock. a ca Por fim, o bloco oscilador interno tamb´m est´ dispon´ e a ıvel, funcionando conforme discutidoacima. A configura¸˜o do oscilador ser´ feita atrav´s dos chamados bits de configura¸˜o do micro- ca a e cacontrolador. Por hora o importante ´ entender o funcionamento do clock. e2.7.8 Configura¸˜o de clock para operar com USB ca Para operar corretamente o m´dulo USB precisa receber sinais de frequˆncias pr´-estabelecidas. o e eO m´dulo USB pode operar no modo baixa velocidade ou alta velocidade. o Em baixa velocidade a USB precisa de um sinal de clock de 6MHz. Para obtˆ-lo a unica op¸˜o e ´ ca´ usar um cristal de 24MHz com Oscillator Postscale de 1:1. Ao ser selecionado o modo de baixaevelocidade o sinal do oscilador prim´rio ser´ divido por 4 para obter o sinal necess´rio de 6MHz. a a a Em alta frequˆncia existe mais flexibilidade. Como o existe um divisor de frequˆncias na e eentrada do PLL, podemos escolher uma s´rie de valores de cristais, conforme mostrado na tabela eabaixo. Frequˆncia do cristal e Fator de divis˜o do PLL prescaler a 4MHz 1:1 8MHz 1:2 12MHz 1:3 16MHz 1:4 20MHz 1:5 24MHz 1:6 40MHz 1:10 48MHz 1:12 Tabela 2.6: Frequˆncia / fator de divis˜o do PLL prescaler e a Com qualquer um destes cristais ´ poss´ e ıvel obter o sinal de 96MHz na sa´ do PLL, que ıdaser´ dividido por 2 para se obter 48MHz, necess´rios a USB. Pode-se tamb´m usar o sinal de a a esa´ do PLL para escolher uma s´rie de frequˆncias para o clock do processador, atrav´s do PLL ıda e e ePostscaler, conforme apresentado a seguir: 61
  • 60. XM118 - Microcontroladores PIC18 PLL postscaler Frequˆncia do oscilador principal e 1:2 48MHz 1:3 32MHz 1:4 24MHz 1:6 16MHz Tabela 2.7: PLL postscaler / Frequˆncia do oscilador principal e2.7.9 Escolha de modo e troca de oscilador Havendo diversos modos de oscilador e v´rias op¸˜es de configura¸˜o ´ necess´rio apresentar a co ca e aalgumas considera¸˜es sobre as combina¸˜es poss´ co co ıveis e sobre a mudan¸a de modo de oscilador cdurante a execu¸˜o do programa. ca Durante a opera¸˜o normal ´ poss´ escolher trˆs fontes para gerar o sinal de clock do sistema: ca e ıvel eOscilador principal (ou prim´rio), oscilador secund´rio e oscilador interno. A mudan¸a da fonte a a cde clock pode ser realizada a qualquer momento durante a execu¸˜o do programa. ca O oscilador principal ´ o circuito de oscilador externo operando em um dos modos apresenta- edos. O oscilador secund´rio ´ o oscilador do timer 1, que tipicamente opera em 32,768 kHz. Para a eque o oscilador secund´rio seja usado ´ necess´rio ativar por software o oscilador do Timer 1. O a e afuncionamento desse oscilador ´ apresentado no t´pico espec´ e o ıfico do Timer1. Qualquer uma das frequˆncias do oscilador interno pode ser escolhida durante a execu¸˜o do e caprograma. Para evitar problemas na troca de oscilador, a execu¸˜o do programa p´ra durante a um ca aper´ ıodo de transi¸˜o dos osciladores. Esse per´ ca ıodo ´ dado pela soma do tempo correspondente a edois per´ ıodos da fonte antiga mais trˆs ou quatro per´ e ıodos da nova fonte de clock. Durante esseper´ ıodo o clock para os perif´ricos tamb´m fica suspenso. e e Os registros de controle do oscilador s˜o OSCTUNE em OSCCON. A descri¸˜o dos seus bits a ca´ apresentada a seguir.e Figura 2.20: Controle do oscilador (OSCTUNE) • INTRC : Sele¸˜o de clock do oscilador interno para 31kHz ca – 1 = 31,25 kHz da p´s-escala do oscilador INTOSC o – 0 = 31 kHz diretamente do oscilador INTRC • TUN4:TUN0: Ajuste fino de frequˆncia do oscilador INTOSC: e – O valor 00000 corresponde a calibra¸˜o de f´brica. Valores entre 00001 e 01111 geram ca a frequˆncias mais altas que a calibrada. Valores entre 11111 e 10000 geram frequˆncias e e mais baixas que a calibrada. 62
  • 61. XM118 - Microcontroladores PIC18 Figura 2.21: Controle do oscilador (OSCCON) • IDLEN : Habilita¸˜o do modo IDLE ca – 1 = Entre em modo IDLE quando a instru¸˜o SLEEP for executada ca – 0 = Entre em modo SLEEP quando a instru¸˜o SLEEP for executada ca • IRCF2:IRC0F : Frequˆncia do oscilador interno. e – 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 – 1 = Oscilador principal est´vel, funcionando como fonte de clock a – 0 = Oscilador principal n˜o est´vel, ainda n˜o est´ pronto para fornecer clock a a a a • IOFS: Estado do oscilador interno – 1 = Oscilador interno est´vel a – 0 = Oscilador interno n˜o est´vel a a • SCS1:SCS0 : Sele¸˜o de clock ca – 1x = Oscilador interno – 01 = Oscilador secund´rio (Timer 1) a – 00 = Oscilador prim´rio. a2.8 Caracter´ ısticas Especiais O PIC possui uma s´rie de funcionalidades ligadas ` CPU, chamadas de caracter´ e a ısticas es-peciais (Special Features). As principais dentre elas s˜o tratadas abaixo. A maioria dessas acaracter´ ısticas ´ configur´vel atrav´s dos Bits de Configura¸˜o (Configuration Bits) no processo e a e cade grava¸˜o do microcontrolador atrav´s de endere¸os especiais. A defini¸˜o dessas configura¸˜es ca e c ca cotamb´m pode ser feita no c´digo em C atrav´s da diretiva #pragma config, como ser´ tratado e o e aquando forem estudas as diretivas em linguagem C. 63
  • 62. XM118 - Microcontroladores PIC182.8.1 Modos de baixo consumo A arquitetura do PIC18 prevˆ trˆs tipos de modos de opera¸˜o: normal (Run), Idle e Sleep. e e caCombinados com as possibilidades de escolha de fonte de clock ´ poss´ utilizar 7 modos difer- e ıvelentes de consumo. No modo normal, a CPU do microcontrolador e os perif´ricos recebem sinal do da fonte de eclock selecionada e o programa ´ executado. e No modo Sleep, os osciladores do microcontrolador s˜o desligados. Nem CPU nem os perif´ricos a erecebem sinal de clock (com exce¸˜o do TIMER1, caso tenha seu pr´prio oscilador ativo). Nesse ca omodo o consumo de energia ´ m´ e ınimo, por´m deve-se considerar os atrasos antes do retorno a eexecu¸˜o normal causados pelo tempo de partida dos osciladores. ca No modo Idle os osciladores permanecem em opera¸˜o e a penas o sinal de clock da CPU ´ ca ecortado; os perif´ricos continuam recebendo o sinal da fonte de clock selecionada normalmente. eNesse caso temos uma redu¸˜o de consumo menor que a proporcionada pelo modo Sleep, por´m ca eo processador volta a operar imediatamente ao retornar ao modo normal, j´ que os osciladores acontinuam operando (n˜o a tempo de partida). Outro benef´ do modo Idle ´ que os perif´ricos a ıcio e econtinuam recebendo sinal de clock, podendo causar o retorno ao modo normal por interrup¸˜o. ca Qualquer uma das 3 fontes de clock pode ser escolhida durante nos modos normal e Idle. E´importante lembrar que quanto menor a frequˆncia de opera¸˜o, menor o consumo de energia. e ca Para entrar tanto em modo Idle como em modo Sleep basta executar a instru¸˜o SLEEP. O cabit INDLEN do registro OSCON controla qual o modo de baixo consumo selecionado. Para ummenor consumo de energia a¸˜es que reduzam o consumo do circuito coerentes com o hardware codevem ser implementadas (como desligar LEDs e cortar a alimenta¸˜o de algumas partes do cacircuito.) Uma vez em modo Sleep ou Idle, trˆs tipos de eventos podem ”acordar”o microcontrolador, econforme apresentado a seguir. ”Acordar”o microcontrolador significa reativar o oscilador prin-cipal e continuar a execu¸˜o do programa. ca • N´ l´gico baixo no pino MCLR, o que faz com que o microcontrolador ”acorde”e reset ıvel o • Estouro do WatchDog, o que n˜o ocasiona RESET, apenas acorda o microcontrolador. a Nesse caso o microcontrolador n˜o ´ resetado. a e • A ocorrˆncia de alguma interrup¸˜o habilitada. e ca ´ E importante observar que diversos perif´ricos podem estar utilizando o sinal do oscilador eprincipal e, portanto parar˜o de operar durante o modo Sleep. Interrup¸˜es associadas a esses a coperif´ricos n˜o ir˜o ocorrer, portanto n˜o podem acordar o microcontrolador. e a a a Para uma interrup¸˜o causar a sa´ de um modo de baixo consumo ela precisa apenas estar ca ıdahabilitada, n˜o sendo necess´rio a habilita¸˜o global tamb´m. Se a habilita¸˜o global n˜o estiver a a ca e ca ahabilitada, a ocorrˆncia da interrup¸˜o acorda o microcontrolador e o programa segue a partir e cada instru¸˜o seguinte a instru¸˜o SLEEP. J´ se estiver habilitada o microcontrolador acorda e o ca ca aprograma desvia imediatamente para o vetor de interrup¸˜o apropriado. ca A tabela abaixo apresenta um resumo das combina¸˜es poss´ co ıveis de modos de baixo consumoe fontes de clock. 64
  • 63. XM118 - Microcontroladores PIC18 Modo OSCCON Sinal de clock Fonte de clock IDLEN SCS1:SCS0 CPU Perif´ricos e PRI RUN X 00 Sim Sim Principal SEC RUN X 01 Sim Sim Secund´rio a RC RUN X 1X Sim Sim Oscilador interno PRI IDLE 1 00 N˜o a Sim Principal SEC IDLE 1 01 N˜o a Sim Secund´rio a RCI DLE 1 1X N˜o a Sim Oscilador interno Sleep 0 X N˜o a Sim Todas desligadas Tabela 2.8: Combina¸˜es poss´ co ıveis de modos de baixo consumo e fontes de clock.2.8.2 Reset Os PIC18 possuem diversas fontes de reset e funcionalidades associadas que visam principal-mente manter a confiabilidade e seguran¸a das aplica¸˜es. As fontes de reset poss´ c co ıveis s˜o: a • POR (Power-On Reset), causado pela dete¸˜o da alimenta¸˜o quando o circuito ´ ligado; ca ca e • N´ l´gico baixo no pino MCLR durante a execu¸˜o normal; ıvel o ca • N´ l´gico baixo no pino MCLR com o microcontrolador em modo SLEEP; ıvel o • Estouro do WatchDog timer durante a opera¸˜o normal; ca • BOR (Brown-out Reset) reset por queda de tens˜o; a • Instru¸˜o RESET; ca • Estouro da pilha (overflow e underflow); A figura a seguir apresenta um diagrama simplificado do sistema de reset do PIC18F4550. 65
  • 64. XM118 - Microcontroladores PIC18 Figura 2.22: Diagrama de reset do PIC18F4550. A forma mais simples de reset ´ atrav´s do pino MCLR: o microcontrolador reseta quanto um e en´ l´gico ´ aplicado a esse pino. No PIC18F4550 pode-se desabilitar a fun¸˜o de reset do pino ıvel o e caMCLR. Nesse caso ele passa a operar como um pino de entrada do portal E. Isso ´ feito via bit ede configura¸˜o. ca2.8.3 POR - Power-On Reset Essa funcionalidade detecta quando o circuito ´ ligado, percebendo a subida da tens˜o de e aalimenta¸˜o, e realiza o reset do microcontrolador. Dessa forma podemos dispensar os resistor e cacapacitor tradicionalmente ligados ao terminal de reset para gerar um reset quando o sistema ´ eligado. O terminal MCLR pode ser ligado diretamente ao n´ ıvel l´gico alto sendo recomendado outilizar um resistor de 10 k ligando-o ` VDD. Dessa forma tamb´m o pino MCLR pode estar a edispon´ para grava¸˜o in-circuit ou para ser usado como entrada se configurado com I/O. ıvel ca Associado ao POR existem duas funcionalidades interessantes: PWRT e OST.2.8.4 PWRT - Power-up Timer ´ ´ E util, pois permite ao sistema ter tempo de se estabilizar (tens˜o, reset dos demais compo- anentes, etc.) antes do programa come¸ar a ser executado. c O PWRT (Power-up Timer) ´ um timer que mant´m o microcontrolador em estado de reset por e eaproximandamente 65,5ms no PIC18F4550 ap´s POR, permitindo que a alimenta¸˜o do circuito o case estabilize. Essa funcionalidade pode ser habilitada ou n˜o. a 66
  • 65. XM118 - Microcontroladores PIC182.8.5 OST - Oscillator Start-up Timer J´ o OST (Oscillator Start-up Timer) mant´m o microcontrolador em estado de reset durante a eos primeiros 1024 per´ ıodos do oscilador, de forma que o programa seja executado somente quandoo oscilador j´ estiver perfeitamente estabilizado. Essa funcionalidade ´ sempre ativa nos modos a ede 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 tens˜o de alimenta¸˜o. a caQuando a tens˜o cai abaixo dos limites tolerados para o circuito os resultados s˜o imprevis´ a a ıveis.H´ situa¸˜es nas quais ´ interessante que quando ocorra uma queda dessas o sistema seja resetado. a co e Nos PIC18 a tens˜o de limiar para o BOR ´ configur´vel. Para o PIC18F4550 essa tens˜o a e a apode ser 2,05V, 2,79V, 4,33V ou 4,59V. Para outros componentes, consulte o manual espec´ ıfico.O BOR pode ser habilitado ou desabilitado. Uma condi¸˜o de queda de tens˜o s´ ´ caracterizada ca a oese a tens˜o cair abaixo do limiar escolhido por mais de 100µs. a No PIC18F4550 existe ainda a possibilidade de ter o BOR controlador por software, atrav´s edo bit SBOREN do registro RCON; nesse caso a faixa de tens˜o ´ a escolhida na configura¸˜o. a e caQuando o BOR ´ usado recomenda-se que tamb´m o PWRT esteja ativo. e e Na figura a seguir ´ apresentada a forma de opera¸˜o do BOR em conjunto com o PWRT. e ca Figura 2.23: Situa¸˜es de Brown-out co2.8.7 Causas de reset As causas de reset podem ser identificadas atrav´s da de bits do registros RCON e STKPTR. e O registro RCON e seus bits s˜o apresentados abaixo. a Figura 2.24: RCON e seus bits. 67
  • 66. XM118 - Microcontroladores PIC18 • IPEN : habilita¸˜o de prioridade de interrup¸˜o: ca ca – 1 = Prioridade Habilitada; – 0 = Prioridade desabilitada (compat´ com o PIC16); ıvel • SBOREN : Controle de BOR por software (depende dos bits de configura¸˜o). Somente no ca PIC18F4550. – 1 = BOR habilitado; – 0 = BOR desabilitado; • RI : Indicador de execu¸˜o de instru¸˜o RESET (deve ser setado pelo software ap´s a ca ca o ocorrˆncia de um BOR) e – 1 = a instru¸˜o RESET n˜o foi executada; ca a – 0 = a instru¸˜o RESET foi executada; ca • TO: Indicador de estouro do WacthDog; – 1 = setado por POR, e pelas instru¸˜es CLRWDT e SLEEP; co – 0 = zerado quando ocorre um estouro do WatchDog; • PD: Indicador de modo de baixo consume (SLEEP) – 1 = setado por POR e pela instru¸˜o CLRWDT; ca – 0 = zerado pela instru¸˜o SLEEP; ca • POR: Indicador de POR (deve ser setado por software ap´s ocorrˆncia de POR). o e – 1 = n˜o ocorreu POR; a – 0 = ocorreu POR; • BOR: Indicador de BOR (deve ser setado por software ap´s ocorrˆncia de BOR). o e – 1 = n˜o ocorreu BOR; a – 0 = ocorreu BOR;2.8.8 Sequˆncia de inicializa¸˜o e ca Como exposto, existem v´rios tempos que podem ser aguardados antes que o microcontrolador asaia da condi¸˜o de reset, isto ´, comece a executar o programa. Supondo todas as funcionalidades ca eacima ativas a sequencia ´ a seguinte: e 1. o circuito ´ ligado: a tens˜o de alimenta¸˜o come¸a a subir; e a ca c 2. ´ detectada a subida da tens˜o: POR; e a 3. o sistema aguarda o tempo de PWRT (aprox. 65 ms); 4. o oscilador come¸a a funcionar: 1024 ciclos s˜o contados (OST); c a 5. o programa come¸a a rodar. c 68
  • 67. XM118 - Microcontroladores PIC182.8.9 Watch-Dog Timer Esse timer de 8 bits, que ´ baseado em um oscilador INTRC, independente do oscilador eprincipal, gera um reset quando ”estoura”. Ele ´ importante em situa¸˜es em que, por qualquer e comotivo, o microcontrolador ”trava”. Quando habilitado ele deve ser zerado a intervalos regularesmenores que seu tempo m´ximo pela instru¸˜o CLRWDT. Se o programa ”para”e o Watch-Dog a can˜o ´ zerado, tendo sido habilitada essa fun¸˜o na grava¸˜o, ocorre o reset. O WatchDog do a e ca caPIC18 pode ser habilitado ou n˜o na grava¸˜o do microcontrolador. a ca Da mesma maneira ´ poss´ e ıvel definir atrav´s dos bits de configura¸˜o qual o valor da p´s- e ca oescala do WatchDog. A p´s-escala nada mais ´ que um contador de 16 bits que conta o n´mero o e ude estouros do Watchdog, uma forma de aumentar o tempo at´ o reset. Tipicamente o WatchDog eestoura a cada 4 ms no PIC18F4550. Se for adotada uma p´s-escala de 1:4 significa que um oreset ocorrer´ a dada 4 estouros do WatchDog, ou seja, a cada 4x4ms = 16ms, se a instru¸˜o a caCLRWDT n˜o for usada. A execu¸˜o da instru¸˜o CLRWDT n˜o s´ zera o WatchDog como a ca ca a otamb´m a p´s-escala, reiniciando a contagem. e o Ao contr´rio do que ocorre com o PIC16, no PIC18 n˜o existe qualquer rela¸˜o entre o a a caWatchDog e o Timer0. Caso o WatchDog n˜o seja habilitado atrav´s de bits de configura¸˜o mesmo assim ´ poss´ a e ca e ıvelativ´-lo escrevendo ’1’ do bit SWDTEN do registro WDTCON. Tamb´m ´ poss´ a e e ıvel desabilitaro WatchDog somente escrevendo ’0’ no bit SWDTEN (desde que o WatchDog n˜o tenha sido ahabilitado nos bits de configura¸˜o). ca 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 ep´s-escala) n˜o ira resetar o microcontrolador, mas sim tir´-lo do modo Sleep ou Idle. A execu¸˜o o a a cada instru¸˜o SLEEP zera o WatchDog e a p´s-escala assim como a instru¸˜o CLRWDT. ca o ca2.8.10 Prote¸˜o de C´digo (Code Protect) ca o O programa gravado em um PIC pode ser protegido, isto ´, pode ser impedida a sua leitura. eEssa funcionalidade ´ muito importante, sobretudo quando se trata de produ¸˜o industrial, visto e caque assim se podem preservar os direitos autorais do autor do firmware e dificultar a c´pia de oprodutos. Quando um componente est´ protegido e se realiza sua leitura, o valor lido em qualquer en- adere¸o ´ 0000h. Por isso um componente protegido n˜o pode ser confundido com um componente c e aapagado, pois nesse ultimo caso o valor lido em qualquer endere¸o ´ 3FFFh. ´ c e2.8.11 Grava¸˜o e depura¸˜o ca ca O PIC ´ gravado atrav´s de um processo chamado ICSP (in-circuit serial programming) que e erealiza a grava¸˜o usando apenas 2 terminais de I/O e o pino de reset. Dessa maneira ´ poss´ ca e ıvelgravar o microcontrolador mesmo este estando j´ montado na placa de aplica¸˜o. Essa fun- a cacionalidade ´ de grande valia quando se usa componentes SMD ou quando o firmware precisa ser eatualizado em campo. Os pinos usados s˜o chamados de PGD (dados) PGC (clock) e VPP (alta tens˜o) que no caso a ado 18F4550 correspondem ao pinos RB7, RB6 e MCLR. Como para gravar ´ necess´rio tamb´m e a e 69
  • 68. XM118 - Microcontroladores PIC18que o microcontrolador esteja alimentado, a interface ICSP normalmente tem ainda os pinos deGND e VDD. Al´m da grava¸˜o a interface ICSP permite tamb´m a depura¸˜o, que ´ o processo de executar e ca e ca eo programa de forma sincronizada com o MPLAB IDE. Isto permite colocar breakpoins (pontosde paradas em posi¸˜es do c´digo), ler e alterar o conte´do da mem´ria, executar o c´digo passo-a- co o u o opasso. Tudo isso com o programa gravado e sendo executado no microcontrolador. Mais detalhessobre a depura¸˜o s˜o apresentados na sess˜o que trata especificamente do MPLAB. ca a a 70
  • 69. Cap´ ıtulo 3Ferramentas para o PIC18F: MPLABIDE e Compilador C18 Como ferramentas para o desenvolvimento de aplica¸˜es para o PIC18F ser˜o abordados aqui co ao ambiente de desenvolvimento MPLAB e o compilador C18 (vers˜o estudantil), ambos fornecidos agratuitamente pela Microchip. Esses softwares se encontram no CD que acompanha a apostila eatualiza¸˜es podem ser baixadas em www.microchip.com. co O MPLAB IDE apresentado ´ a vers˜o 8.2 enquanto o C18 ´ a vers˜o estudantil 3.20. S˜o essas e a e a aas vers˜es mais recentes dispon´ o ıveis no momento em que esse texto ´ escrito. N˜o h´ qualquer e a alimita¸˜o quanto ao uso do MPLA IDE. J´ o C18 apresenta todos os recursos por um per´ ca a ıodo de60 dias, perdendo a otimiza¸˜o de c´digo e deixando de usar o conjunto de instru¸˜es estendido ca o coap´s esse per´ o ıodo; isso implica na gera¸˜o de c´digo menos eficiente em termos de utiliza¸˜o de ca o camem´ria, mas nenhuma funcionalidade ´ perdida. o e Ser˜o feitos tamb´m alguns coment´rios sobre outros compilador C dispon´ a e a ıveis para microcon-troladores 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 vers´til ae simples de usar chamada MPLAB IDE. As principais caracter´ ısticas do MPLAB s˜o a simpli- acidade e a facilidade de utiliza¸˜o. ca Uma IDE, como pr´prio nome diz, ´ um ambiente de desenvolvimento que integra diversos o eprogramas em uma interface amig´vel. Associado ao MPLAB existem diversos programas que as˜o executados a medida que o processo de desenvolvimento ocorre. Esse programas s˜o compi- a aladores, linkers, simuladores, etc. Mais adiante trataremos especificamente do compilador C18 edo simulador MPLAB SIM. A instala¸˜o do MPLAB n˜o apresenta nenhum detalhe especial e pode ser realizada sem ca amaiores detalhes. Basta inserir o CD do curso no drive, clicar no link para instala¸˜o e seguir os capassos indicados. Uma vez instalado o MPLAB IDE , para abri-lo execute Iniciar ⇒ Programas ⇒ Mi-crochip ⇒ MPLAB IDE v7.31 ⇒ MPLAB IDE 71
  • 70. XM118 - Microcontroladores PIC183.1.1 Criando um novo projeto O MPLAB trabalha com o conceito de Projeto, isto ´, cada novo aplica¸˜o desenvolvida e ca(projeto) ´ composto por diversos arquivos gerenciados pelo MPLAB. Para criar um novo projeto eexiste um assistente, que ´ executado em Project ⇒ Project Wizard... e Aparecer´ a janela acima Clique em Avan¸ar. a c 72
  • 71. XM118 - Microcontroladores PIC18 Na janela seguinte ´ feita a escolha do microcontrolador usado no projeto. e Selecione oPIC18F4550 na lista ou simplesmente digite o nome do microcontrolador e clique em Avan¸ar. c Nessa janela ´ configurada a linguagem de programa¸˜o a ser utilizada no projeto, atrav´s e ca edas op¸˜es da lista ”Active Toolsuite”. Para desenvolver um projeto em Assembly escolha coa op¸˜o ”Microchip MPASM Toolsuite”. Para desenvolver em C utilizando o compilador caC18 escolhar ”Microchip C18 Toolsuite”. As demais ferramentas da lista podem n˜o estar ainstaladas. Escolhida a linguagem, clique em Avan¸ar. c 73
  • 72. XM118 - Microcontroladores PIC18 Neste passo pode-se optar por criar um novo projeto ou reconfigurar um projeto j´ existente. aComo estamos criando um novo projeto escolheremos esta op¸˜o e indicaremos a pasta onde o caprojeto deve ser criado. Para melhorar a organiza¸˜o, cada projeto ´ alojado em uma pasta. No ca ecampo abaixo de Create a New Project preencha o caminho e nome do projeto ou a pastaonde o projeto ser´ guardado, utilizando a op¸˜o Browse... para explorar o computador. Clique a caem Avan¸ar. Caso o diret´rio escolhido ainda n˜o exista aparecer´ uma mensagem perguntando c o a ase ele deve ser criado. Neste caso, clique em OK. A pr´xima janela permite adicionar um arquivo j´ existente ao projeto.Clicando em Add o o aarquivo ser´ adicionado a lista dos arquivos pertencentes ao projeto. O mesmo processo pode ser autilizado para incluir bibliotecas de fun¸˜es. co E´ importante incluir tamb´m um arquivo com orienta¸˜es para o linker (linker script). Para e coisso encontre a pasta ”lkr”dentro da pasta de trabalho do C18 (se nenhuma altera¸˜o foi feita na cainstala¸˜o essa pasta deve ser C:MCC18lkr) e adicione o arquivo referente ao microcontrolador causado, 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 eo caminho para acessar o arquivo ´ absoluto (exatamente a mesma pasta em que arquivo se eencontra) ou relativo (um caminho relativo a pasta de projeto, geralmente usado quando o arquivoem quest˜o encontra-se na pasta do projeto em alguma subpasta sua). As op¸˜es s˜o: a co a • 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 (Usu´rio): define o caminho como relativo. Recomendado para arquivos criados especi- a ficamente para o projeto. • S (Sistema): define o caminho como absoluto. Normalmente usado para arquivos usados em v´rios projetos com um local predefinido. a 74
  • 73. XM118 - Microcontroladores PIC18 • C (Copiar): Copia o arquivo para a pasta de projeto. Recomendamos usar sempre a op¸˜o C (Copiar o arquivo para pasta de projeto) para evitar caque ao levar o projeto para outra maquina o MPLAB n˜o consiga encontrar o caminho do projeto. a Marque os arquivos selecionados com a op¸˜o C e em seguia clique em Avan¸ar. ca c A ultima tela apresenta um resumo do projeto criado. Confira se todas as informa¸˜es est˜o ´ co acorretas e clique em Concluir. Na tela do MPALB aparecer´ a janela de gerˆncia do projeto, que contem todos os arquivos a epertencentes ao projeto. Para editar um arquivo dˆ um clique duplo sobre ele. e Para criar um novo arquivo, v´ em File ⇒ New. a Para criar um novo arquivo e adicion´-lo ao projeto v´ em File ⇒ Add new file to project... a a Para salvar um novo arquivo criado, v´ em File ⇒ Save As... a ca a c ´ Aten¸˜o: N˜o basta apenas criar um arquivo para que ele fa¸a parte de um projeto. E precisoadicion´-lo a lista de arquivos do projeto. Para isso, na janela de gerˆncia de projetos. Clique a ecom o bot˜o direito sobre Source Files (ou sobre Header Files, caso se trate de uma biblioteca, acomo veremos mais adiante) e selecione a op¸˜o Add Files para selecionar e incluir um arquivo. ca 75
  • 74. XM118 - Microcontroladores PIC18 Por fim, para abrir um projeto j´ existente, v´ em Project ⇒ Open... e escolha um arquivo a ade projeto (que tem termina¸˜o .MCP). ca3.1.2 Construindo um projeto. Uma vez criado o projeto, o mesmo deve ser ”constru´ ıdo”para que possa ser gravado nomicrocontrolador ou simulado. Cabe aqui dizer que os arquivos de c´digo fonte Assembly possuem a termina¸˜o ”.ASM”e o caos arquivos de biblioteca para Assembly tˆm termina¸˜o ”.INC”. J´ os arquivos de c´digo fonte e ca a ode C tˆm termina¸˜o ”.C”; os arquivos de cabe¸alho e bibliotecas em C tem a extens˜o ”.H”. e ca c aAl´m desses, h´ tamb´m o roteiro de liga¸˜o (linker script) que traz informa¸˜es sobre como o e a e ca coprograma ser´ alojado na mem´ria do microcontrolador e tem extens˜o ”.LKR”; O montador a o a(MPASM Assembler) ou o compilador (C18) interpretam os arquivos criados pelo usu´rio o cria adiversos outros. Os de maior importˆncia s˜o os arquivos de erro (termina¸˜o .ERR) que per- a a camitem visualizar mensagens de erro e os arquivos bin´rios (termina¸˜o .HEX) que s˜o os arquivos a ca agravados no microcontrolador. Para construir um projeto use a tecla de atalho Ctrl+F10 ou v´ em Project ⇒ Build All. a Feito o isso aparecer´ a tela Output apresentando o resultados de compila¸˜o, bem como a camensagens, avisos ou erros encontrados. Se ocorrerem erros no processo de compila¸˜o os mesmos cas˜o apresentados em lista e um clique duplo sobre eles mostra no c´digo fonte a linha onde se a oencontra o erro. N˜o havendo erros a ultima linha da janela Output apresentar´ a mensagem a ´ aBUILD SUCCEEDED seguida da data.3.1.3 Gravando o microcontrolador Para gravar o microcontrolador usa-se o ICD-2 uma ferramenta que permite, al´m da grava¸˜o, e caa depura¸˜o, como veremos mais a frente. Uma vez que ele estiver devidamente conectado ao kit cae ao PC, v´ em Programmer ⇒ Select Programmer ⇒ 2 MPLAB ICD 2. Surgir´ uma a abarra de ferramentas cuja fun¸˜o e apresentada na figura abaixo. ca Figura 3.1: Barra de ferramentas ICD23.2 Simula¸˜o em C ca Uma poderosa ferramenta de desenvolvimento ´ o simulador integrado ao MPLAB IDE. Esse esimulador permite a simula¸˜o de c´digos escritos tanto em C (seja C18 ou outros compiladores ca osuportados) como em Assembly. O uso do simulador ´ particularmente interessante durante a etapa de estudo dos microcon- etrolador e para a verifica¸˜o de do funcionamento de fun¸˜es e trechos de c´digo isolados. J´ para ca co o a 76
  • 75. XM118 - Microcontroladores PIC18programas inteiros a simula¸˜o pode n˜o apresentar resultados muitos conclusivos. Nesses casos ca atorna-se mais interessante o uso de uma ferramenta de depura¸˜o, conforme tratado a seguir. ca A seguir s˜o apresentados os passos b´sicos para a realiza¸˜o de simula¸˜o no MPLAB. a a ca ca Uma vez criado um projeto, o primeiro passo ´ habilitar o simulador como ferramenta de edepura¸˜o. Para isso escolha Debugger ’Select Tool ’ MPLAB SIM. Em seguida configure a casimula¸˜o atrav´s de Debugger ’ Settings...Dentre as op¸˜es existentes, recomendamos configurar ca e coa porta serial virtual conforme apresentado na figura abaixo. Isso permite que as informa¸˜es coenviadas pela porta serial durante a simula¸˜o sejam exibidas em um janela do MPLAB. ca Atrav´s do menu View ´ poss´ abrir diversas janelas de visualiza¸˜o da simula¸˜o: e e ıvel ca ca • Disassembly Listing: listagem do c´digo. Essa tela eh muito interessante pois permite o verificar o c´digo assembly gerado para cada linha escrita em C. o • Hardware Stack: Conte´do da pilha. u • Program Memory: Conte´do da mem´ria de programa do microcontrolador. u o • File Registers: Conte´do de todos os endere¸os da mem´ria de dados. u c o • EEPROM: Conte´do da mem´ria de dado EEPROM. u o • Special Function Register: conte´do dos registros de fun¸˜o especial. u ca • Watch: permite a escolha dos endere¸os de mem´ria RAM (SFR ou de uso geral) e de bits c o para visualiza¸˜o. Permite: ca – Adicionar SFR: 77
  • 76. XM118 - Microcontroladores PIC18 ∗ Selecione o SFR na lista da esquerda e clique Add SFR – Adicionar S´ ımbolo (vari´veis criadas) a ∗ Selecione o s´ ımbolo na lista da direita e clique Add Symbol • Memory Usage Gauge: permite visualizar o consumo de mem´ria de dados e de programa. o • Simulator Logic Analyzer: um analisador l´gico para simula¸˜o (ser´ visto em detalhes mais o ca a a frente).3.2.1 Simula¸˜o ca • Acompanhar o andamento do programa pela janela no programa ou pela janela Disassembly Listing. Comandos (os comando podem ser dados atrav´s do Menu Debugger, de teclas de atalho e da ebarra de ferramentas): Comando Atalho ´ Icone Descri¸˜o ca Run F9 Executa o programa em tempo real Halt F5 Para a execu¸˜o do programa onde estiver ca Animate Executa continuamente Step Into Step into F7 Executa passo a passo;entra em sub rotinas. Step Over F8 Execu¸˜o passo-a-passo; salta em sub-rotinas ca Step out Sai da sub rotina atual Reset F6 Reseta o programa Tabela 3.1: Comandos e suas descri¸˜es co3.2.2 Outras funcionalidades • Breakpoints: param a execu¸˜o do programa quando a instru¸˜o marcada ´ atingida ca ca e – Clique o bot˜o direito do mouse na ´rea cinza ao lado da instru¸˜o; a a ca – Selecione ”Set Breakpoint”. – Para retirar, clique com o bot˜o direito do mouse sobre o breakpoint e selecione ”Re- a move Breakpoint”. • Desviar o programa para uma determinada instru¸˜o. ca – Clique na instru¸˜o desejada com o bot˜o direito do mouse. ca a – Selecione ”Set PC to Cursor” • Alterar o valor de um registro(ou vari´vel): a – Na janela Watch: ∗ Clique duplo no campo ”Value”e entre com o novo valor. – Na janela File Registers: 78
  • 77. XM118 - Microcontroladores PIC18 ∗ Clique duplo no endere¸o do registro e entre com o novo valor c • Compila¸˜o: antes de simular um programa, ele deve ser compilador (montado) ca – Clique na janela do programa. – Menu Project ⇒ Quickbuild <nome do arquivo> ou Alt+F10 • Formato do dado mostrado na janela Watch – Selecione a linha do registro – Clique com o bot˜o direito do mouse e selecione ”Properties...” a – Selecione o formato desejado no campo ”Format” ∗ Quando for selecionado ”Decimal”aparece o campo ”Signed”que se marcado apre- senta o valor como um n´mero sinalizado. u3.2.3 Analisador l´gico o O analisador l´gico do MPLAB SIM se comporta como um analisador l´gico real, isto ´, ele o o eplota o estado de sinais (pinos do microcontrolador) em fun¸˜o do tempo. Isto permite monitorar cao estado dos pinos e de alguns sinais internos como se tiv´ssemos um oscilosc´pio conectado a e oesses pinos. Para ativar o analisador l´gico de simula¸˜o va em View ’ Simulator Logic Analyzer o ca A primeira coisa a fazer para trabalhar com o analisador ´ selecionar os canais (sinais) que edevem ser monitorados. Para isso clique no bot˜o Channels. Surgir´ a janela abaixo. a a Basta escolher os sinais a serem mostrados na lista a esquerda e clicar em Add para que essessejam mostrados no analisador. Uma funcionalidade interessante para monitorar o funcionamento de diversos sinais conjunta-mente e agrup´-los em um barramento (Bus). Isso permite que o conjunto de sinais seja apresen- atado como um unico valor hexadecimal. Para isso clique em Configure Bus(s). Ser´ mostrada a ´ atela abaixo. Para criar um barramento clique em New Bus, preencha o nome do barramento e clique em okna janela de dialogo. Ao fazer isso o barramento criado aparecera na lista Available Bus(s). Em 79
  • 78. XM118 - Microcontroladores PIC18seguida selecione o barramento na lista e defina os sinais que compor˜o esse barramento na lista aAvailable Signals e clique em Add. O barramento est´ pronto, basta clicar em OK para retornar aa tela de sele¸˜o de canal, onde o barramento estar´ na lista Avaliable signals. ca a Escolhidos os sinais a serem apresentados, clique em ok para retornar ao analisador l´gico. o Ao simular o programa os sinais apresentados ser˜o apresentados na tela do analisador. A afigura abaixo apresenta um exemplo disso.3.2.4 Gera¸˜o de est´ ca ımulos Outra funcionalidade interessante do MPLAB SIM ´ a gera¸˜o de est´ e ca ımulos que permitesimular sinais aplicados a pinos ou sinais do microcontrolador. Para aplicar est´ ımulos a simula¸˜o cavah em Debugger ’ Stimulus ’ New Workbook. Existe uma sehrie de tipos de est´ ımulos que podem ser gerados. Neste curso nos concen-traremos nos est´ ımulos ass´ ıncronos, que equivalem a chaves ligadas aos terminais do microcon-trolador. Para configurar estes, selecione a aba Asynch da janela de stimulus, conforme a figuraabaixo. 80
  • 79. XM118 - Microcontroladores PIC18 A coluna Fire cont´m bot˜es que, quando pressionados no decorrer da simula¸˜o, ir˜o realizar e o ca aa a¸˜o descrita na coluna Action no sinal descrito na coluna Pin/SFR. ca A coluna Pin/SFR mostra o sinal controlado em cada linha. Clicando em qualquer c´lula edesta coluna se abrir´ uma lista para a escolha do sinal desejado. a Na coluna Action escolhe-se a a¸˜o a ser realizada quando Fire ´ pressionado: ca e • Set High e Set Low: for¸am o pino n´ l´gico alto e baixo, respectivamente; c ıvel o • 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 dura¸˜o do pulso quando a coluna Action tem caas op¸˜es Pulse High ou Pulse Low. A unidade de tempo do pulso, nesse caso, eh escolhida na cocoluna Units e pode ser uma unidade de tempo ou ciclos de m´quina do microcontrolador (cyc). a Por fim, a coluna Comments/Message permite inserir um texto comentando a utilidade doest´ ımulos. Para salvar um conjunto de est´ ımulos clique no bot˜o Save. Para abrir um conjunto de a ımulos salvos anteriormente v´ em Debugger ⇒ Stimulus ⇒ Open Workbook.est´ a Os sinais de est´ ımulos tamb´m pode ser plotados no analisador l´gico. e o3.3 O compilador C18 O C18 permite gerar c´digo objeto para microcontroladores PIC da fam´ PIC18 a partir de o ıliac´digos fonte escrito em C padr˜o ANSI. Ele ´ chamado de cross-compiler porque gera c´digo para o a e oser executado em outro processador (no caso, o PIC18) que n˜o seja o que executa a compila¸˜o a ca(no caso o processador do PC). 81
  • 80. XM118 - Microcontroladores PIC183.3.1 Outros Compiladores C Existem diversos compiladores C para microcontroladores das linhas PIC12, PIC16 e PIC18fornecidos por outras empresas que n˜o a microchip. A maioria destes compiladores s˜o pagos a amas existem vers˜es de demonstra¸˜o que podem ser usadas com algumas limita¸˜es. O principal o ca coponto a se observar ao usar um compilador C fornecido por terceiros ´ se o mesmo segue o padr˜o e aC-ANSI ou se apresenta alguma divergˆncia com rela¸˜o a este padr˜o. Essas divergˆncias podem e ca a eimpedir uma migra¸˜o direta os compiladores. ca Outra observa¸˜o importante ´ que as bibliotecas de fun¸˜es apresentadas neste curso (com ca e coexce¸˜o daquelas padronizadas para o C-ANSI) s´ s˜o v´lidas para o compilador C18. Outros ca o a acompiladores podem at´ ter fun¸˜es com a mesma finalidade mas provavelmente seu nome e e cosintaxe ser˜o diferentes. aCCS Um compilador muito popular ´ o CCS. Ao contr´rio do C18, o CCS tamb´m ´ capaz de e a e ecompilar programas para PICs das fam´ ılias PIC12 e PIC16. A apesar de ser se um compilador C, o CCS n˜o ´ coerente com o padr˜o ANSI. Isso prejudica a e abastante a portabilidade de c´digo entre o CCS e outros compiladores. As principais diferen¸as o cest˜o em nas diretivas espec´ a ıficas para microcontrolador e nos tipos de dados (principalmente otipo int). Em contra partida, o CCS permite portar c´digo C entre as linhas PIC18 e PIC16 com bastante ofacilidade. Al´m disso, ´ muito rico em bibliotecas de fun¸˜es para perif´ricos do microcontrolador e e co ee para acesso a outros dispositivos. Mais informa¸˜es sobre o compilador podem ser encontradas em . co Uma ´tima referˆncia sobre o compilador CCS ´ o livro ”PIC - Programa¸˜o em C”, do autor o e e caF´bio Pereira. aPICC Lite (Hitech) Juntamente com as ultimas vers˜es do MPLAB IDE vem sendo enviado o compilador PICC ´ oLite da Hitech. Trata-se de um compilador ANSI, portanto permite uma f´cil migra¸˜o de e a capara o C18. Este compilador aceita componentes das linhas PIC10F, PIC12F e PIC16F, comalgumas limita¸˜es. Um ponto fraco do compilador ´ que o mesmo n˜o possui bibliotecas de co e afun¸˜es espec´ co ıficas do microcontrolador, apenas aquelas constantes no padr˜o ANSI. a3.4 Depura¸˜o em C ca O processo de depura¸˜o (debugging) consiste em realizar as mesmas a¸˜es poss´ ca co ıveis na sim-ula¸˜o, por´m com o programa sendo realmente executado no microcontrolador. Dessa maneira ca e´ poss´ verificar o valor de vari´veis a medida que elas s˜o alteradas no circuito, inserir break-e ıvel a apoints e acompanhar a execu¸˜o do programa sendo executado no hardware da aplica¸˜o. ca ca Se a simula¸˜o permite testar a l´gica de rotinas e pequenos programas a depura¸˜o ´ uma ca o ca eferramenta mais poderosa quando se trata de programa de maior complexidade e principalmentena localiza¸˜o e corre¸˜o de bugs no software. ca ca 82
  • 81. XM118 - Microcontroladores PIC18 Para realizar a depura¸˜o ´ necess´rio um hardware especial chamado XICD-2, embutido no ca e akit XM118. Uma vez instalado e configurado (esse processo ´ apresentado no manual do kit) os emesmos comandos e janelas dispon´ ıveis para simula¸˜o ficam dispon´ ca ıveis, s´ que agora atuando ono mundo real. 83
  • 82. XM118 - Microcontroladores PIC18Cap´ ıtulo 4Linguagem C paramicrocontroladores4.1 Introdu¸˜o a linguagem C ca Antes de tratarmos da linguagem C devemos apresentar algumas conven¸˜es que tornar˜o co amais claro a explana¸˜o. Essa considera¸˜es referem-se a padroniza¸˜o ANSI (American National ca co caStandard for Information Systems). Em primeiro lugar, coment´rios em C s˜o indicados pelos s´ a a ımbolos ”/*”, ”*/”e ”//”. Co-ment´rios pertencem ao c´digo fonte mas s˜o ignorados pelo compilador quando da compila¸˜o. a o a caOs s´ ımbolos ”/*”e ”*/”informam que o que est´ entre ´ um coment´rio. O s´ a e a ımbolo ”//”indicaque toda linha a direita trata-se de um coment´rio. Na verdade, ”//”´ um s´ a e ımbolo definido paraa linguagem C++, mas a maioria dos compiladores C o aceita. Muitos programadores usam aconven¸˜o de se uma ”//”para coment´rios explicativos e ”/*”e ”*/”para manter ignoradas parte ca ado c´digo. A seguir temos alguns exemplos: o/* Isto ´ um coment´rio */ e a// Isto tamb´m ´ um coment´rio e e a/*Desta maneira podemos fazer coment´rios que, por algum motivo qualquer, ocupem diversas alinhas. Do mesmo modo podemos transformar trechos do programa em coment´rios */ a Todo comando em C termina, obrigatoriamente, com um ”;”. Os nomes de fun¸˜es, vari´veis, constantes, etc, s˜o chamados de identificadores e n˜o devem co a a aconter caracteres acentuados, espa¸os, ”¸”e devem come¸ar com letras (o s´ c c c ımbolo ” ”´ tratado ecomo letra). Letras mai´sculas e min´sculas s˜o consideradas diferentes, isto ´, ”Maria”´ consid- u u a e eerado um identificador diferente de ”maria”. 84
  • 83. XM118 - Microcontroladores PIC18 Existem palavras reservadas que n˜o podem ser usadas como identificadores. As definidas apelo padr˜o ANSI s˜o apresentas a seguir, mas pode haver outras pr´prias do compilador. a a o auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while Tabela 4.1: Palavras reservadas pelo padr˜o ANSI. a Os programas em C s˜o organizados em fun¸˜es. A fun¸˜o main, como o nome em inglˆs a co ca eindica, ´ a fun¸˜o principal do programa; por ela que o programa come¸a a ser executado. Todo e ca cprograma deve ter pelo menos uma fun¸˜o (no caso de apenas uma, ela deve ser obrigatoriamente cachamada main). Juntamente com a fun¸˜o main, criada pelo programador, o compilador C cria um cac´digo a ser executado antes da fun¸˜o main ser chamada. Sua fun¸˜o ´ realizar as configura¸˜es o ca ca e conecess´rias ` execu¸˜o do programa desenvolvido. Este c´digo ´ chamado de startup code. a a ca o e As chaves ({ e }) delimitam um bloco de instru¸˜es. Um bloco de instru¸˜es ´ visto e tratado co co ecomo uma unica instru¸˜o. ´ ca O operador de atribui¸˜o em C ´ o s´ ca e ımbolo ”=”. Os demais operadores ser˜o tratados opor- atunamente. A seguir temos um exemplo de um programa b´sico em C, onde podem ser observados diversos atemas tratados. Observe que a tabula¸˜o, isto ´, a distˆncia entre o in´ dos comandos e o canto ca e a ıciodo da tela, ´ muito importante para a organiza¸˜o e compreens˜o do c´digo. e ca a o /* Exsto Tecnologia *//* Curso PIC Avan¸ado */ c/* Jos´ Domingos Adriano */ e/* domingos@exsto.com.br *//* (c)Exsto Tecnologia 2006 *//* www.exsto.com.br */#include<P18F4550.h> // defini¸~es para o PIC18F4550 co#include<stdio.h> // Fun¸~es de sa´da de caracter co ıvoid main (void) // Fun¸~o principal ca{// Declara¸~o de vari´veis ca aunsigned char x,z;int y;printf("n Hello World!!");printf("n Exsto Tecnologia");x = 150;y = -12000; 85
  • 84. XM118 - Microcontroladores PIC18z = 0;for(;;)y = y + 1;x = x + 1;if(x == 165){z = z + 1;x = 150;}}}4.1.1 A fun¸˜o printf() ca Uma fun¸˜o bastante usada em C ´ a fun¸˜o printf(). Essa fun¸˜o ´ definida pelo padr˜o ANSI ca e ca ca e ae est´ contida na biblioteca stdio.h. A fun¸˜o printf() escreve dados na porta de sa´ padr˜o. a ca ıda aEm computadores, a porta padr˜o ´ o monitor. No C18 porta de sa´ padr˜o ´ a porta serial. a e ıda a e Printf() ´ util principalmente na depura¸˜o de programas, pois apresenta dados de diversas e ´ camaneiras em forma de caracter, permitindo assim conhecer o conte´do de vari´veis. Como ser´ u a amostrado em momento oportuno, ´ poss´ configurar o simulador do MPLAB para apresentar e ıvelos dados enviados pela serial do PIC. Contudo, na pr´tica o seu uso deve ser evitado, pois essa afun¸˜o consome muita mem´ria e na maioria das vezes pode ser substitu´ por fun¸˜es mais ca o ıda cosimples de envio de caracter ou string simples.4.1.2 ”C ou n˜o C, eis a quest˜o”. a a A escolha da linguagem a ser usada no desenvolvimento de um projeto com microcontroladores´ um fator de extrema importˆncia, pois impacta em diversos aspectos: tempo (e, portanto custo)e ade desenvolvimento, custo de ferramentas de desenvolvimento, portabilidade de c´digo, facilidade ode depura¸˜o, futuras altera¸˜es e atualiza¸˜es tecnol´gicas, dentre outros. ca co co o No universo dos computadores pessoais h´ diversas op¸˜es de linguagens, podendo atender a coa necessidade espec´ ıficas de cada desenvolvedor ou projeto. No universo dos microcontroladoresexiste tamb´m a possibilidade de se programar em diversas linguagens de programa¸˜o de m´dio e e ca ealto n´ ıvel, tais como C/C++, Pascal, Basic e Java. Em oposi¸˜o a essas linguagens existe sempre a ca ´op¸˜o de se programar na linguagem Assembly nativa de cada microcontrolador. E muito discutida caentre os profissionais da ´rea qual a melhor linguagem de programa¸˜o para microcontroladores. a caEssa discuss˜o concentra-se principalmente na quest˜o das vantagens e desvantagens de uma a alinguagem de m´dio ou alto n´ em rela¸˜o ao Assembly nativo do microcontrolador. e ıvel ca Obviamente deve-se considerar, em primeiro lugar, a linguagem mais adequada para cadaaplica¸˜o em especial. Al´m disso, ´ importante considerar tamb´m o quanto o desenvolver est´ ca e e e afamiliarizado com uma linguagem e o fator subjetivo de qual linguagem lhe agrada mais. Apesarde ter sempre em mente essas premissas, vamos expor aqui porque, na maioria das vezes e paragrande parte dos desenvolvedores, a linguagem C ´ a mais adequada. e H´ quem defenda ferrenhamente que o desenvolvedor profissional deva trabalhar em Assembly. aOs principais argumentos a favor desse modo de pensar s˜o a eficiˆncia (em temos de ocupa¸˜o a e ca 86
  • 85. XM118 - Microcontroladores PIC18de mem´ria) do c´digo gerado por um programador experiente, o menor tempo de execu¸˜o do o o caprograma e o controle total, j´ que nada ´ feito sem que o programador saiba e queira. A eficiˆncia a e ede c´digo ´ importante na medida em que a mem´ria dispon´ nos componentes em quest˜o ´ o e o ıvel a erestrita e tem grande impacto no custo do componente. Tamb´m se perde o controle do c´digo e ogerado, j´ que toda vez que um compilador ´ usado o c´digo Assembly produzido sai do controle a e odo desenvolvedor. No passado, compiladores pouco confi´veis apresentavam erros de implementa¸˜o dif´ a ca ıceis deserem depurados. E ainda, se o conjunto de instru¸˜es n˜o possuir certas caracter´ co a ısticas o uso decompiladores gera um c´digo significativamente maior e mais lento que um de mesmas fun¸˜es o coem Assembly. Por outro lado, ´ mais dif´ de se desenvolver algoritmos complexos em Assembly, tornando e ıcilo trabalho de desenvolvimento mais lento e mais caro. Realizar opera¸˜es matem´ticas com- co aplexas (por exemplo, com vari´veis do tipo ponto flutuante) torna-se bastante confuso. Como a alinguagem nativa e os modelos de mem´ria de cada arquitetura de microcontroladores diferem, o´ exigido um tempo muito longo de estudo para se adaptar a um novo conjunto de instru¸˜es.e coInstru¸˜es de mesma fun¸˜o podem ter mnemˆnicos totalmente diferentes em diferentes conjuntos co ca ode instru¸˜o. A grande quantidade de linhas de c´digo e a pouca inteligibilidade tornam os pro- ca ocessos de depura¸˜o demorados e dif´ ca ıceis. Sendo o Assembly uma linguagem de programa¸˜o n˜o ca aestruturada os custos de desenvolvimento, depura¸˜o e manuten¸˜o tendem a ser maiores. Por ca cafim, o reaproveitamento de c´digo e a portabilidade de programas entre uma arquitetura e outra o´ quase imposs´e ıvel, resultando na reescrita de v´rias centenas ou milhares de linhas de programa. a No passado era poss´ ıvel a um desenvolvedor especializar-se nessa ou naquela arquitetura,tornando-se cada vez mais experiente no uso de um set de instru¸˜es e realizando todos seus coprojetos com alguns poucos microcontroladores compat´ ıveis. Hoje, por´m, a variedade de micro- econtroladores ´ muito grande. Praticamente todos os fabricantes de circuitos integrados digitais etˆm suas fam´ e ılias de microcontroladores. A concorrˆncia de pre¸o entre esses fabricantes e a diver- e csidade de configura¸˜es dos microcontroladores exige que as empresas optem por usar diferentes coarquiteturas em diferentes projetos, ou mesmo substituir componentes em produtos j´ existentes. a´ necess´rio que o desenvolvedor de sistemas microcontrolados seja capaz de se adaptar aos difer-E aentes modelos de mem´ria e conjunto de instru¸˜es, com pouco tempo para o estudo detalhado o code cada caso. A solu¸˜o ent˜o ´ utilizar uma linguagem de mais alto n´ ca a e ıvel, que por princ´ ıpio s˜o inde- apendentes do hardware. O desenvolvedor concentra seu trabalho na cria¸˜o de algoritmos e cafuncionalidades no projeto e deixa o trabalho de implementa¸˜o para o compilador. Surge ent˜o ca aoutro problema: qual linguagem usar? Para muitas pessoas a resposta ´: o C! Vejamos por que. e Em primeiro lugar, o C ´ considerado uma linguagem de m´dio n´ e e ıvel, isto ´, mais amig´vel e apara o ser humano, mas mantendo recursos de baixo n´ ıvel. Em virtude disso, o C permite gerarc´digos mais eficientes quando comparado com outros compiladores. H´ tamb´m a vantagem da o a eindependˆncia do hardware que permite que um projeto seja portado de uma arquitetura para eoutra com poucas altera¸˜es no c´digo. Essas caracter´ co o ısticas do C n˜o s˜o por acaso. A linguagem a afoi desenvolvida no in´ dos anos 70 por Dennis Ritchie especificamente para o desenvolvimento ıciodo sistema operacional UNIX. Na ´poca o dilema era quase o mesmo: construir sistemas opera- e 87
  • 86. XM118 - Microcontroladores PIC18cionais em assembly era demorado e dispendioso e todo o trabalho tinha que ser refeito a cadanovo processador criado. Os computadores da ´poca tinham pouca mem´ria e os modelos usados e opor Ritchie n˜o eram capazes de implementar opera¸˜es de ponto flutuante diretamente. Ritchie a codesenvolveu uma linguagem simples, f´cil de ser aprendida, mas com recursos que permitem o adesenvolvimento de programas complexos, como sistemas operacionais, que permite portabilidadede c´digo sem prejudicar as funcionalidades de baixo n´ o ıvel, gerando um c´digo bastante ”enxuto”, oisto ´, eficiente no uso da mem´ria. e o Por ser uma linguagem estruturada, o C exige que o programador siga boas pr´ticas de pro- agrama¸˜o, evitando assim erros que, em Assembly, poderiam passar despercebidos. ca A portabilidade de c´digo fica garantida, pois existe uma norma que rege a linguagem C. oTodo compilador que segue o padr˜o ANSI deve conseguir reconhecer o mesmo c´digo gerado, a oindependente da arquitetura alvo. Os compiladores C profissionais s˜o bastante confi´veis, geram a ac´digo eficiente e livre de bugs de implementa¸˜o. o ca Uma vantagem adicional do C s˜o as bibliotecas de fun¸˜es que acompanham os compiladores. a coAl´m das bibliotecas convencionais do padr˜o ANSI a maioria dos compiladores possui bibliotecas e apara uso das funcionalizadas espec´ ıficas de cada microcontrolador. Al´m do ganho de tempo em ese usar as bibliotecas j´ prontas existe tamb´m um ganho de eficiˆncia de c´digo, j´ que essas a e e o afun¸˜es s˜o normalmente implementadas em Assembly para otimiza¸˜o de mem´ria e tempo. co a ca o Como o C ´ utilizado tamb´m em computadores, trata-se de uma linguagem muito difundida e enas escolas e universidade. Tamb´m os profissionais que tiveram uma forma¸˜o acadˆmica voltada e ca epara o PASCAL ter˜o facilidade em desenvolver em C. a Na tabela a seguir se pode observar uma compara¸˜o entre as linguagens C e Assembly. ca Caracter´ ıstica Assembly C Eficiˆncia de c´digo e o ´ Otima Muito Boa Velocidade de execu¸˜oca ´ Otima Muito Boa Controle do sistema ´ Otimo Muito Bom Portabilidade P´ssimo e ´ Otimo Depura¸˜o ca Muito dif´ıcil F´cil a Programa¸˜oca N˜o-estruturada a Estruturada Bibliotecas de fun¸˜es co N˜o H´ a a Padronizadas e espec´ ıficas Tabela 4.2: Compara¸˜o entre C e Assembly ca Contudo, n˜o se deve entender que o estudo da linguagem Assembly deve ser negligenciado. aAssim como o bom piloto de corrida entende tanto da mecˆnica de seu carro quanto os engenheiros aque o projetaram, o bom desenvolvedor deve ter s´lidos conhecimentos da arquitetura, modelo ode mem´ria e conjunto de instru¸˜es Assembly do microcontrolador com o qual trabalha. E o co ´imprescind´ ıvel conhecer bem o assembly, at´ para poder conseguir os melhores resultados em eC. Sempre ´ poss´ e ıvel analisar o c´digo Assembly gerado pelo compilador, buscando formas de ootimiz´-lo. Al´m disso, em situa¸˜es cr´ a e co ıticas, ´ poss´ inserir linhas de c´digo Assembly dentro e ıvel ode um programa escrito em C. Por essas e por outras raz˜es os fabricantes de microcontroladores tˆm, j´ h´ alguns anos, o e a adesenvolvido arquiteturas de microcontroladores otimizadas para o uso da linguagem C. Algunstipos de instru¸˜es e modos de endere¸amento s˜o inclu´ co c a ıdos para tornar mais f´cil a tradu¸˜o do a cac´digo C para o c´digo de m´quina. Isso acontece com o PIC18 no set de instru¸˜es convencional o o a co 88
  • 87. XM118 - Microcontroladores PIC18e mais pronunciadamente no set estendido. Como adapta¸˜es do processador ao C podem citar coas instru¸˜es voltadas para endere¸amento indireto e para leitura de constantes na mem´ria co c ode programa, al´m da presen¸a de diversos ponteiros para endere¸amento indireto de vari´veis e c c a(facilitam a implementa¸˜o de vetores, matrizes e vari´veis do tipo ponteiro). ca a Esperamos ter demonstrado que a linguagem C tem sido cada vez mais usada no desenvolvi-mento com microcontroladores, trazendo diversas vantagens que justificam seu uso em aplica¸˜es coprofissionais. Uma ultima observa¸˜o deve ser feita quanto ao uso de linguagens orientadas a objeto. Ape- ´ casar da orienta¸˜o a objeto ser uma tendˆncia na programa¸˜o e trazer ineg´veis benef´ ca e ca a ıcios aodesenvolvimento de software, hoje ainda ela n˜o usada em larga escala. Uma prov´vel causa a a´ o maior consumo de mem´ria que a t´cnica acarreta. Contudo j´ existem compiladores quee o e apermitem trabalhar de forma orientada a objetos (em C++, Java, etc). No futuro otimiza¸˜es cona arquitetura dos microcontroladores ser˜o feitas para tornar o c´digo orientado a objeto mais a oleve aos microcontroladores.4.1.3 Passado e Futuro da linguagem C Desde seu surgimento no in´ ıcio dos anos 70, a linguagem C sofreu altera¸˜es, amplia¸˜es, co cotornou-se um padr˜o est´vel e gerou descendentes. a a C foi desenvolvido inicialmente para a implementa¸˜o do sistema operacional Unix. Como o caUnix se popularizou e foi portado para v´rias plataformas diferentes, foi necess´rio implementar a acompiladores C para diferentes arquiteturas. Foi ent˜o que a caracter´ a ısticas de portabilidade doC 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 l´ ıngua comum a ser reconhecida por todos oscompiladores C. Em virtude da evolu¸˜o da computa¸˜o, o C gerou v´rias linhas de evolu¸˜o. Para atender ca ca a caaos conceitos da programa¸˜o orientada a objeto foi desenvolvido o C++. Seguindo essa linha, casurgiu a linguagem Java. Para aplica¸˜es para Internet a linguagem PHP ´ descendente direto do co eC. Para aplica¸˜es para celulares foi criado o C#. Al´m disso, v´rias ferramentas usam C/C++ co e apara desenvolver c´digo com interface gr´fica amig´vel, como o Visual C++ ou o Borland C++ o a aBuilder.4.2 Diretivas Diretivas podem ser descritas como comandos dados ao compilador, indicado a a¸˜es que codevem ser feitas no momento da compila¸˜o. Elas podem ou n˜o gerar c´digo que efetivamente ca a ovai ser executado pelo microcontrolador, j´ que sua fun¸˜o ´ orientar a compila¸˜o do programa. a ca e ca O padr˜o ANSI C prevˆ uma grande variedade de diretivas. Al´m disso, o padr˜o prevˆ uma a e e a ediretiva para cria¸˜o de novas diretivas, chamada #pagrma , de forma que diferentes compiladores capossam oferecer a seus usu´rios op¸˜es que n˜o est˜o previstas no padr˜o ANSI. Das diversas a co a a adiretivas dispon´ ıveis enfocaremos apenas e quem tem maior uso neste curso, apresentadas abaixo. 89
  • 88. XM118 - Microcontroladores PIC184.2.1 #include A diretiva #include permite incluir arquivos de cabe¸alho e bibliotecas de fun¸˜es. c coExemplo:#include <P18F4550.h> // inclui um arquivo de defini¸~o do PIC ca#include <spi.h> // inclui a biblioteca de fun¸~es SPI.c co ´ E como se, ao se chegar a essa diretiva, o compilador ”colasse”(inclu´ ısse) o conte´do do arquivo uapontado.4.2.2 #define Esta diretiva ´ muito util pois permite ”apelidar”um trecho de texto por um nome. #define e ´define que um nome representa o texto imediatamente a seguir, de forma que quando da com-pila¸˜o toda ocorrˆncia desse nome seja substitu´ pelo texto. Vejamos os exemplos a seguir: ca e ıdoExemplo:#define VALOR MAXIMO 125#define LED POTRDbits.RD0#define ACENDE LED LED = 1; No primeiro exemplo, o valor 125 foi chamado de VALOR MAXIMO. Esse tipo de con-stru¸˜o ´ util quando temos um limite ou constante que queremos usar em diferentes partes ca e ´do c´digo, mas que pode mudar seu valor devido a alguma necessidade do projeto. Chamando de oVALOR MAXIMO o valor 125, se for necess´rio mud´-lo para, por exemplo, 203 basta alterar na a adefini¸˜o, e n˜o em todos os pontos do c´digo. ca a o No segundo caso, usamos #define para atribuir um nome a um pino do microcontrolador.Dessa forma, n˜o precisamos fazer sempre referˆncia ao pino, chamamo-lo por seu apelido LED. a eIsto facilita o entendimento do c´digo e poss´ o ıveis altera¸˜es na configura¸˜o do hardware. co ca No ultimo caso usamos #define para apelidar um trecho de c´digo, criando o que ´ conhecido ´ o ecomo macro.4.2.3 #pragma config Esta ´ uma diretiva espec´ e ıfica do compilador C18, criada com o uso da diretiva #pragma. Elapermite definir as configura¸˜es de caracter´ co ısticas especiais e oscilador do PIC, estudadas anteri-ormente. A diretiva admite uma s´rie de parˆmetros. Esses parˆmetros mudam para cada PIC, e a aconforme suas pr´prias caracter´ o ısticas. Para obter a informa¸˜o detalhada para cada PIC, con- casulte o arquivo hlpC18ConfigSet que se encontra na pasta C:MCC18doc. Para o PIC18F4550,temos as op¸˜es de configura¸˜o descritas abaixo, sendo que est˜o em negrito as configura¸˜es co ca a codefault, isto ´, aquelas reconhecidas caso nenhuma escolha tenha sido feita. Deve-se estar atento ea` quais escolher, pois uma configura¸˜o errada ocasionar´ um mal funcionamento do programa. ca a 90
  • 89. XM118 - Microcontroladores PIC18 PLL Prescaler Selection PLLDIV = 1 Sem pr´-escala (4 MHz) e PLLDIV = 2 Divide por 2 (8 MHz) PLLDIV = 3 Divide por 3 (12 MHz) PLLDIV = 4 Divide por 4 (16 MHz) PLLDIV = 5 Divide por 5 (20 MHz) PLLDIV = 6 Divide por 6 (24 MHz) PLLDIV = 10 Divide por 10 (40 MHz) - somente no modo EC PLLDIV = 12 Divide por 12 (48 MHz) - somente no modo EC Tabela 4.3: PLL Prescaler Selection Essa configura¸˜o permite usar diferentes valores de cristais como sinal de entrada do PLL capara o m´dulo USB. o CPU System Clock Postscaler Sem PLL Com PLL CPUDIV = OSC1 PLL2 F XT AL / 1 FP LL / 2 (48 MHz) CPUDIV = OSC2 PLL3 F XT AL l/ 2 FP LL / 3 (32 MHz) CPUDIV = OSC3 PLL4 F XT AL l/ 3 FP LL / 4 (24 MHz) CPUDIV = OSC4 PLL6 F XT AL / 4 FP LL / 6 (16 MHz) Tabela 4.4: CPU System Clock Postscaler Essa configura¸˜o permite selecionar o fator de divis˜o do clock do sistema. Quando usado ca acomo modos de oscilador sem PLL ele divide o frequˆncia do cristal (Fxtal) por 1, 2, 3 ou 4. eQuando usado em modos com oscilador, divide a frequˆncia da sa´ do PLL (96MHz ) por 2, 3, e ıda4 e 6, obtendo-se as frequˆncias indicadas na tabela. e USB Clock Selection USBDIV = 1 Clock de USB vem direto do oscilador principal, sem pr´-escala (baixa velocidade) e USBDIV = 2 Clock de USB vem do PLL (alta velocidade) Tabela 4.5: USB Clock Selection Esta op¸˜o permite escolher entre o modo de baixa o alta velocidade, para USB. No modo de cabaixa velocidade a unica frequˆncia de entrada aceita ´ 6MHz. ´ e e 91
  • 90. XM118 - Microcontroladores PIC18 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), EC (clock externo) RA6 usado como I/O FOSC = EC EC EC (clock externo), EC (clock externo) RA6 sa´ de clock ıda FOSC = ECPLLIO EC EC (clock externo) com PLL, EC (clock externo) com PLL RA6 usado como I/O FOSC = ECPLL EC EC (clock externo) com PLL, EC (clock externo) com PLL RA6 sa´ de clock ıda FOSC = INTOSCIO EC Oscilador interno, EC (clock externo) RA6 usado como I/O FOSC = INTOSC EC Oscilador interno, EC (clock externo) RA6 sa´ de clock ıda 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 Tabela 4.6: Oscillator Selection Seleciona o tipo de oscilador principal. Observe que a sele¸˜o de modo define qual ser´ o ca aoscilador da CPU e qual ser´ de USB. a Fail-Safe Clock Monitor Enable FCMEN = OFF Fail-Safe Clock Monitor desabilitado FCMEN = ON Fail-Safe Clock Monitor habilitado Tabela 4.7: Oscillator Selection Se o Fail-Safe Clock Monitor estiver habilitado ´ gerada uma interrup¸˜o caso o oscilador e caprincipal pare de operar e o oscilador interno assume como clock de sistema. Internal/External Oscillator Switchover IESO = OFF N˜o permite mudan¸a de oscilador externo para interno a c IESO = ON Permite mudan¸a de oscilador externo para interno c Tabela 4.8: Internal/External Oscillator Switchover A configura¸˜o acima permite ou n˜o que se troque entre as fontes de clock interno e externo. ca a Power-up Timer Enable PWRT = ON Power-up timer habilitado PWRT = OFF Power-up timer desabilitado Tabela 4.9: Power-up Timer Enable 92
  • 91. XM118 - Microcontroladores PIC18 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) a BOR = ON ACTIVE Brown-out Reset habilitado somente em hardware e desabilitado no mode Sleep (SBOREN est´ desativado) a BOR = ON Brown-out Reset habilitado somente no hardware(SBOREN est´ desativado) a Tabela 4.10: Brown-out Reset Enable Brown-out Voltage BORV = 0 4,5 V BORV = 1 4,2 V BORV = 2 2,7 V BORV = 3 2,0 V Tabela 4.11: Brown-out Voltage USB Voltage Regulator Enable VREGEN = OFF Regulador de USB ativo VREGEN = ON Regulador de USB inativo Tabela 4.12: USB Voltage Regulator Enable Quando o perif´rico USB estiver ativo, deve existir uma tens˜o de 3,3V no pino VUSB. Essa e atens˜o pode ser externa ou gerada internamente por um regulador, controlado pela op¸˜o acima. a ca Watchdog Timer Enable WDT = OFF HW Disabled - SW Controlled WDT = ON HW Enabled - SW Disabled Tabela 4.13: Watchdog Timer Enable Ao usar o watchdog lembre-se que ´ necess´rio zerar periodicamente esse contador no software, e asen˜o o microcontrolador reseta. a 93
  • 92. XM118 - Microcontroladores PIC18 Watchdog Timer Postscale Select bits WDTPS = 1 1:1 WDTPS = 2 1:2 WDTPS = 4 1:4 WDTPS = 8 1:8 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 Tabela 4.14: Watchdog Timer Postscale Select bits Para determinar o tempo total entre estouro do watchdog, multiplique o valor da pr´-escala epor 4ms. MCLR Pin Enable MCLRE = OFF MCLR (Reset) desabilitado; RE3 habilitado como entrada MCLRE = ON MCLR (Reset) habilitado; RE3 desabilitado Tabela 4.15: MCLR Pin Enable Low-Power Timer 1 Oscillator Enable LPT1OSC = OFF Oscilador do Timer1 em modo de maior consumo e maior precis˜o a LPT1OSC = ON Oscilador do Timer1 em modo de menor consumo e menor precis˜o a Tabela 4.16: Low-Power Timer 1 Oscillator Enable PORTB A/D Enable PBADEN = OFF Pinos de PORTB [4:0] configurados como entrada digital ap´s Reset o PBADEN = ON Pinos de PORTB [4:0] configurados como entrada anal´gica ap´s Reset o o Tabela 4.17: PORTB A/D Enable Para usar os pinos do PORTB como entrada ou sa´ ıdas digitais, mesmo com a fun¸˜o de cainterrup¸˜o, ´ necess´rio desativar as entradas do A/D ou configurar PBADEN = OFF. ca e a CCP2 MUX CCP2MX = OFF Pino CCP2 conectado a RB3 CCP2MX = ON Pino CCP2 conectado a RC1 Tabela 4.18: CCP2 MUX 94
  • 93. XM118 - Microcontroladores PIC18 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 Tabela 4.19: Stack Full/Underflow Reset Enable Single-Supply ICSP Enable LVP = OFF Grava¸˜o em modo de baixa tes˜o desabilitada ca a LVP = ON Grava¸˜o em modo de baixa tes˜o habilitada ca a Tabela 4.20: Single-Supply ICSP Enable O kit XM118 suporta apenas grava¸˜o em modo de alta tens˜o, portanto essa op¸˜o deve ca a caestar desabilitada sempre. Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable ICPRT = OFF ICPORT desabilitado ICPRT = ON ICPORT habilitado Tabela 4.21: Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable Essa configura¸˜o permite usar pinos n˜o conectados do encapsulamento de 44 pinos (SMD) ca acomo pinos de grava¸˜o e depura¸˜o. Portanto, essa op¸˜o s´ ´ valida nesses encapsulamentos, ca ca ca o equando for usado encapsulamentos DIP ele n˜o tem efeito. a Extended Instruction Set Enable XINST = OFF Modo de instru¸˜es estendido desabilitado. co XINST = ON Modo de instru¸˜es estendido habilitado. co Tabela 4.22: Extended Instruction Set Enable Background Debugger Enable DEBUG = ON Depurador habilitado, RB6 and RB7 s˜o dedicados a depura¸˜o in-circuit. a ca DEBUG = OFF Depurador desabilitado, RB6 and RB7 pode ser usados como I/O. Tabela 4.23: Background Debugger Enable A op¸˜o DEBUG=ON deve ser escolhida quando o kit for usado como depurador. ca As op¸˜es a seguir referem-se a propriedade de prote¸˜o de c´digo pra diversos blocos da co ca omem´ria. Para os blocos em que essa propriedade estiver ativa n˜o ´ poss´ fazer uma leitura o a e ıvelexterna da mem´ria. o Code Protection bit Block 0 CP0 = ON Bloco 0 (000800-001FFFh) protegido. CP0 = OFF Bloco 0 (000800-001FFFh) n˜o protegido. a Tabela 4.24: Code Protection bit Block 0 95
  • 94. XM118 - Microcontroladores PIC18 Code Protection bit Block 1 CP1 = ON Bloco 1 (002000-003FFFh) protegido. CP1 = OFF Bloco 1 (002000-003FFFh) n˜o protegido. a Tabela 4.25: Code Protection bit Block 1 Code Protection bit Block 2 CP2 = ON Bloco 2 (004000-005FFFh) protegido. CP2 = OFF Bloco 2 (004000-005FFFh) n˜o protegido. a Tabela 4.26: Code Protection bit Block 2 Code Protection bit Block 3 CP3 = ON Bloco 3 (006000-007FFFh) protegido. CP3 = OFF Bloco 3 (006000-007FFFh) n˜o protegido. a Tabela 4.27: Code Protection bit Block 3 Boot Block Code Protection bit CPB = ON Bloco de Boot (000000-0007FFh) protegido. CPB = OFF Bloco de Boot (000000-0007FFh) n˜o protegido. a Tabela 4.28: Boot Block Code Protection bit A prote¸˜o de c´digo para EEPROM impede que ela seja lida externamente. ca o Data EEPROM Code Protection bit CPD = ON Data EEPROM code-protected. CPD = OFF Data EEPROM not code-protected. Tabela 4.29: Data EEPROM Code Protection bit A prote¸˜o de escrita de mem´ria FLASH impede que o bloco protegido possa ser escrito pelo ca opr´prio microcontrolador. o Write Protection bit Block 0 WRT0 = ON Bloco 0 (000800-001FFFh) protegido. WRT0 = OFF Bloco 0 (000800-001FFFh) n˜o protegido. a Tabela 4.30: Write Protection bit Block 0 Write Protection bit Block 1 WRT1 = ON Block 1 (002000-003FFFh) protegido. WRT1 = OFF Block 1 (002000-003FFFh) n˜o protegido. a Tabela 4.31: Write Protection bit Block 1 Write Protection bit Block 2 WRT2 = ON Block 2 (004000-005FFFh) protegido. WRT2 = OFF Block 2 (004000-005FFFh) n˜o protegido. a Tabela 4.32: Write Protection bit Block 2 96
  • 95. XM118 - Microcontroladores PIC18 Write Protection bit Block 3 WRT3 = ON Block 3 (006000-007FFFh) protegido. WRT3 = OFF Block 3 (006000-007FFFh) n˜o protegido. a Tabela 4.33: Write Protection bit Block 2 Boot Block Write Protection WRTB = ON Boot block (000000-0007FFh) protegido. WRTB = OFF Boot block (000000-0007FFh) n˜o protegido. a Tabela 4.34: Boot Block Write Protection Configuration Register Write Protection WRTC = ON Bits de configura¸˜o (300000-3000FFh) protegido. ca WRTC = OFF Bits de configura¸˜o (300000-3000FFh) n˜o protegido. ca a Tabela 4.35: Configuration Register Write Protection A prote¸˜o de escrita de mem´ria EEPROM impede que a mesma possa ser escrita pelo ca opr´prio microcontrolador. o Configuration Register Write Protection WRTD = ON EEPROM protegido. WRTD = OFF EEPROM n˜o protegido. a Tabela 4.36: Data EEPROM Write Protection Os blocos de mem´ria protegidos contra leitura n˜o poder˜o ser lidos pelo pr´prio microcon- o a a otrolador. Table Read Protection bit Block 0 EBTR0 = ON Bloco 0 (000800-001FFFh) protegido. EBTR0 = OFF Bloco 0 (000800-001FFFh) n˜o protegido. a Tabela 4.37: table EEPROM Write Protection Table Read Protection bit Block 1 EBTR1 = ON Bloco 1 (002000-003FFFh) protegido. EBTR1 = OFF Bloco 1 (002000-003FFFh) n˜o protegido a Tabela 4.38: Table Read Protection bit Block 1 Table Read Protection bit Block 2 EBTR2 = ON Bloco 2 (004000-005FFFh) protegido. EBTR2 = OFF Bloco 2 (004000-005FFFh) n˜o protegido a Tabela 4.39: Table Read Protection bit Block 2 97
  • 96. XM118 - Microcontroladores PIC18 Table Read Protection bit Block 3 EBTR3 = ON Bloco 3 (006000-007FFFh) protegido. Tabela 4.40: Table Read Protection bit Block 3 Boot Block Table Read Protection EBTRB = ON Bloco de Boot (000000-0007FFh) protegido. EBTRB = OFF Bloco de Boot (000000-0007FFh) n˜o protegido a Tabela 4.41: Boot Block Table Read Protection Abaixo ´ apresentado um exemplo de c´digo fazendo a configura¸˜o do microcontrolador con- e o caforme os coment´rios. a Exemplo:#pragma config PLLDIV = 5 // PLL para 20MHz#pragma config CPUDIV = OSC1 PLL2 // Oscilador principal a 48MHz#pragma config FOSC = HS // Oscilador HS para CPU e USB#pragma config WDT = OFF // Watchdog desativado#pragma config PBADEN = OFF // Pinos do PORTB come¸am como digitais c#pragma config LVP = OFF // Desabilita grava¸˜o em baixa tens˜o ca a#pragma config DEBUG = ON // habilita debug4.2.4 #pragma interrupt e #pragma interruptlow Estas diretivas permitem definir que uma fun¸˜o ´ uma rotina de tratamento de interrup¸˜o ca e ca(RTI) de baixa ou de alta prioridade. Ao fazer isso o compilador se encarrega de descrever oc´digo espec´ o ıfico para chamada, salvamento e retorno de contexto da interrup¸˜o. Al´m disso, ca ea diretiva permite passar uma lista de vari´veis (vari´veis declaradas pelo usu´rio e registros do a a amicrocontrolador) que devem ter seu contexto salvo quando ocorrer interrup¸˜o. Sua sintaxe ´ ca eapresentada a seguir.#pragma interrup nome da RTI alta prioridade [save = lista de vari´veis] a#pragma interruplow nome da RTI baixa prioridade [save = lista de vari´veis] a Mais detalhe e exemplos do uso dessa na se¸˜o que trata de interrup¸˜es em C. ca co4.3 Tipos de dados Ao contr´rio do que ocorre em Assembly, em C existem diversos tipos de dados, de tamanhos e afaixas de valores diferentes. Basta que uma vari´vel seja declarada como sendo de um determinado atipo e o compilador se encarrega de gerar o c´digo necess´rio para sua manipula¸˜o. o a ca O padr˜o ANSI define diversos tipos de dados para os compiladores C: char, int, float, double ae void. 98
  • 97. XM118 - Microcontroladores PIC18 O tipo void serve para indicar que o tipo parˆmetro ´ nulo nas fun¸˜es, ou seja, que o parˆmetro a e co an˜o existe. Mais detalhes sobre passagem de parˆmetros para fun¸˜es ser˜o apresentados no t´pico a a co a oque trata de fun¸˜es. O tipo char ´ capaz de armazenar um caracter simples. O tipo int armazena co eum dado do tipo inteiro, tipicamente do tamanho de barramento de dados do processador, masn˜o deve ser menor que 16 bits. Float armazena dados do tipo ponto flutuante (fracion´rios) de a aprecis˜o simples e double armazena dados de ponto flutuante de dupla precis˜o. a a Al´m dos tipos de dados padr˜o existem tamb´m modificadores que permitem alterar as e a ecaracter´ ısticas de cada tipo de dado. S˜o eles: a • signed: informa que o dado ´ do tipo sinalizado (valores positivos e negativos); e • unsigned: informa que o dado ´ do tipo n˜o sinalizado (somente valores positivos); e a • long: informa que o inteiro ´ uma varia¸˜o maior que o padr˜o; e ca a • short: informa que o inteiro ´ uma varia¸˜o menor que o padr˜o. e ca a Como os modificadores short e long atuam somente sobre dados do tipo int podemos escreverapenas o modificador, o int fica subentendido. Quando um dado ´ do tipo sinalizado, um de seus bits ´ utilizado para indica¸˜o do sinal, o e e caque reduz pela metade o valor absoluto que esse dado pode conter. Os tipos de dados inteiros queocupam mais de um endere¸o de mem´ria tˆm sua parte menos significativa nos endere¸os mais c o e cbaixos e a parte mais significativa nos endere¸os mais altos. c A tabela a seguir apresenta os tipos de dados tratados pelo compilador C18, bem como seutamanho e faixa de valores. Tipo Tamanho Faixa de valores M´ınimo M´ximo a 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 4.42: Tipos da dados inteiros Os tipos de dados float e double para vari´veis com parte fracion´rias (chamados de floating a apoints - ponto decimal flutuante) definidos para C18 como vari´veis de 32 bits, que comportam-se ade forma idˆntica. A tabela a seguir traz os tipos de dados suportados em C bem como as faixas ede valores: 99
  • 98. XM118 - Microcontroladores PIC18 Tipo Tamanho Faixa de valores M´ınimo M´ximo a float 32 bits 2 −126 (aprox. 1.17549435e - 38) 2128 * (2-2-15) ≈ 6.80564693e + 38 double 32 bits 2−126 (aprox. 1.17549435e - 38 2128 * (2-2-15) ≈ 6.80564693e + 38 Tabela 4.43: Tipos da dados inteiros4.3.1 Declara¸˜o de vari´veis e constantes ca a A declara¸˜o de vari´veis ´ feita conforme o exemplo a seguir: ca a e char x,y;shor long medida;unsigned int dado = 0x35;float pi = 3.1459; Coloca-se primeiro o identificador de tipo, acompanhado ou n˜o do modificar, seguido pela alista de vari´veis desse tipo, separadas por ”,”. Ao final da declara¸˜o ´ necess´rio acrescentar o a ca e asinal ”;”. Al´m disso, ´ poss´ definir um valor inicial para a vari´vel, conforme ´ apresentado e e ıvel a ena terceira e quarta linhas do exemplo. A declara¸˜o de constantes ´ feita de forma bastantes semelhante, bastando acrescentar o ca eidentificador ”const”antes da declara¸˜o. Observe que ´ necess´rio informar o tipo de dado da ca e aconstante, conforme o exemplo a seguir. Exemplo:const unsigned int SetPoint = 60000; const char Letra = ’A’; A representa¸˜o de valores nas diferentes bases ´ feita conforme a tabela a seguir, onde ca e”y”representa o valor a ser expresso. A s´ ımbolo usado para separar as partes inteiras e fra-cion´ria de um n´mero ´ o ponto ( . ). A representa¸˜o de caracteres ´ feita entre ap´strofos ( ’ a u e ca e o). Tipo Nota¸˜o ca Exemplos Decimal yyy 31, 1025, -3, 50000 Hexadecimal 0xyyy 0x31, 0xABCD, 0x0008 Bin´rio a 0byyy 0b10101010, 0b1111000011110000 Octal 0oyyy 0o31, 0o123, 0o1543 Tabela 4.44: Representa¸˜o de valores ca 100
  • 99. XM118 - Microcontroladores PIC184.3.2 Vari´veis locais e globais a Uma vari´vel pode ser declarada de forma global ou local. Vari´veis locais s˜o declaradas a a adentro de fun¸˜es ou blocos de instru¸˜es (delimitados por chaves) e s˜o reconhecidas somente co co adentro da fun¸˜o ou do bloco. Vari´veis globais s˜o declaradas fora das fun¸˜es e s˜o reconhecidas ca a a co apor todas as fun¸˜es do programa. co O uso de vari´veis globais ´ necess´rio em algumas situa¸˜es quando determinada vari´vel deve a e a co aser vista e alterada por diversas fun¸˜es, como, por exemplo, na troca de dados entre fun¸˜es de co cotratamento de interrup¸˜o e outras fun¸˜es. Contudo, seu uso deve ser restrito, pois ocupam uma ca coposi¸˜o de mem´ria constantemente. ca o J´ as vari´veis locais s˜o criadas quando a fun¸˜o ´ executada e ”destru´ a a a ca e ıdas”quando a fun¸˜o caretorna. Isso significa que o mesmo endere¸o de mem´ria pode ser usado por diversas vari´veis c o ano decorrer do programa, o garante um melhor uso de mem´ria. o Caso vari´veis locais tenham o mesmo nome de vari´veis globais, as globais ser˜o ignoradas a a anaquela fun¸˜o (ou bloco). ca4.3.3 Vetores e matrizes ´ E poss´ criar vetores e matrizes de dados dos tipos b´sicos. Vetores e matrizes s˜o conjuntos ıvel a ade diversas vari´veis de mesmo tipo que s˜o referenciadas por um mesmo identificador, sendo a adiscriminadas por um ´ ındice. Vetores s˜o unidimensionais, enquanto matrizes podem ter duas adimens˜es ou mais. Todo vetor ou matriz ´ terminado por um caracter de valor 0. o e Para atribuir valores ` constantes ou valores iniciais ` vari´veis enumera-se os valores de cada a a aelementos entre chaves, separados por v´ ırgulas. Um caso particular de vetores s˜o os vetores de acaracteres, chamados de strings, que s˜o uteis para armazenar palavras e frases. Nesses casos, a ´o conjunto de caracteres pode ser atribu´ a um vetor constante simplesmente usando aspas ıdopara marcar in´ e fim. Esse processo ´ apresentado no exemplo abaixo. Uma string ´ sempre ıcio e eterminada com um caracter igual a zero. Este caracter serve para marcar o final de uma string,uma vez que nenhum caracter ´ representado por zero. e Na cria¸˜o de um vetor ou matriz ´ necess´rio informar o n´mero de elementos que essa ca e a ucont´m. Isso ´ feito colocando o n´mero de elementos entre colchetes na declara¸˜o. No caso e e u cade um vetor de caracteres constantes n˜o ´ preciso colocar o n´mero de elementos, pois esse a e udeterminado pelo n´mero de elementos atribu´ u ıdos. Para fazer referˆncia a um elemento em particular dentro de uma matriz ou vetor usa-se a e ındice). ´posi¸˜o desse elemento (´ ca Indices podem ser valores fixos ou vari´veis. Aten¸˜o: em C as a caposi¸˜es come¸am em 0, portanto em um vetor de 10 elementos o ´ co c ındice poder´ assumir valores ade 0 a 9. A seguir s˜o apresentados alguns exemplos de declara¸˜o de vari´veis. a ca a Exemplo:int Medidas[16];const char nome[] = ”Domingos”;char Empresa[] = ”Exsto Tecnologia”;unsigned int InitLCD[6] = 0x33,0x32,0x28,0x06,0x0C,0x01; 101
  • 100. XM118 - Microcontroladores PIC18 O acesso a dados em vetores e constantes ´ feitas atrav´s do uso de ´ e e ındice, conforme mostradono 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 vari´veis ´ o tipo ponteiros. Ponteiros s˜o vari´veis que cont´m o endere¸o a e a a e cde outras vari´veis. Sua fun¸˜o ´ ”apontar”onde a vari´vel est´ na mem´ria, da´ seu nome. a ca e a a o ıPonteiros s˜o muito usados em C e um dos motivos ´ que permitem a implementa¸˜o do c´digo a e ca ode forma bastante otimizada. Uma arquitetura de microcontrolador otimizado para a linguagemC deve ter um eficiente sistema de ponteiros. Para declarar um ponteiro usamos uma sintaxe parecida com a declara¸˜o de vari´vel, por´m ca a ecom significado diferente. Deve ser colocado o tipo de dado que o ponteiro aponta e o nome doponteiro, precedido por ”*”. Por exemplo, na declara¸˜o a seguir x ´ uma vari´vel do tipo inteiro ca e aenquanto ip ´ um ponteiro que aponta para vari´veis do tipo inteiro. e a Exemplo: int x; // x ´ um inteiro eint *ip´; // ip ´ um ponteiro que aponta inteiros e Para atribuir a um ponteiro o endere¸o de uma vari´vel usamos o operador ”&”. Para manip- c aular o conte´do da vari´vel apontada pelo ponteiro usamos o operador ”*”. O exemplo a seguir u ailustra alguns usos de ponteiros. int x = 1, y = 2, z[10]; // x e y s˜o inteiros, a// z ´ um vetor de inteiros eint *ip, *iq; // ip e iq s˜o ponteiros que a// apontam inteiros ip =&x; // ip aponta para xiq = &y; // iq aponta para yy = ip; // y agora vale 1 102
  • 101. XM118 - Microcontroladores PIC18ip = 0; // x agora vale 0ip = &z[0]; // ip agora aponta para z[0]iq = ip; // iq agora aponta para Z[0] tamb´m e4.3.5 Qualificadores Existem alguns qualificadores que indicam como os dados devem ser alocadas na mem´ria. o S˜o naturais da linguagem C os qualificadores static e auto. O qualificador auto indica que aa vari´vel ´ valida somente naquele bloco de instru¸˜es (bloco delimitado por chaves ou fun¸˜o), a e co casendo alocada quando o bloco come¸a e desalocada quando terminar. Desalocar, ou destruir, csignifica que aquele endere¸o de mem´ria pode ser usado por outras vari´veis do programa. O c o aqualificador static informa que a vari´vel n˜o pode ser desalocada, portanto seu endere¸o de a a cmem´ria n˜o ser´ ocupado por outras vari´veis e seu conte´do n˜o ser´ alterado ap´s a finaliza¸˜o o a a a u a a o cado bloco. Seu comportamento ´ semelhante ao de vari´veis globais, por´m s´ s˜o reconhecidas e a e o adentro do bloco ao qual pertencem. Quando n˜o especificado, as vari´veis s˜o consideradas como auto. a a a O compilador C18 introduz 4 novos qualificadores: ram e rom, near e far. Os qualificadores ram e rom definem se o dado (vari´vel ou constante) deve ser alocado na amem´ria de dados (RAM) ou de programa (ROM). A principio isso parece n˜o fazer sentido, o apois imagina-se que vari´veis devam ser alocadas na RAM e constantes na mem´ria de programa. a oContudo, para aumentar a velocidade da manipula¸˜o de dados, constantes podem ser carregadas cana mem´ria de dados quando o programa ´ iniciado. Em outras situa¸˜es, pode ser desej´vel o e co aque garantir que grandes tabelas de constantes estejam armazenadas na FLASH para reduzir oconsumo de mem´ria RAM. As vari´veis declaradas em mem´ria de programa devem, obrigato- o a oriamente, ser do tipo static. Quando n˜o especificado, o C18 assume que os dados devem ser alocados na RAM. Isso ´ a ev´lido tanto para vari´veis com para constantes. a a Os qualificadores near e far (perto e longe em inglˆs, respectivamente) informam em que eregi˜o da mem´ria os dados devem ser alocados. Para dados na mem´ria de programa, near a o o(perto) significa nos primeiros 64 kbytes de mem´ria. Para mem´ria de dados, near significa na o oRAM de acesso. Em ambos os casos, far significa em qualquer regi˜o da mem´ria, inclusive nas a oregi˜es abrangidas por near. o Quando n˜o especificado, o C18 trata os dados como qualificados com far. a Seguem abaixo alguns exemplos de usos dos modificadores. Exemplo:rom static char Senha[4]// vari´vel alocada na mem´ria flash a oconst char Nome[] = ”Jo˜o”; // constante alocada na RAM arom char *ptrSenha; // ponteiro para vari´vel na FLASH anear int Resultado; // resultado ´ alocado na RAM de Acesso estatic int cont; // Cont ´ do tipo est´tico. e a 103
  • 102. XM118 - Microcontroladores PIC184.4 Comandos B´sicos a O C ´ uma linguagem de programa¸˜o estruturada. Isso significa que segue seus comando e cab´sicos tem o objetivo de implementar os trˆs tipos b´sicos de estruturas: atribui¸˜o, decis˜o a e a ca ae repeti¸˜o. Al´m disso, possui diversos operadores que permitem realizar opera¸˜es l´gicas e ca e co omatem´ticas. a Todos os exemplos dados a seguir podem ser simulados para sua melhor compreens˜o. Para atanto, 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.4.4.1 Atribui¸˜o ca Comando de atribui¸˜o ´ realizado simplesmente com o uso do operador ”=”. O identificador ca ea esquerda recebe o valor da express˜o ` direita.Algum exemplos s˜o apresentados a seguir. a a a Exemplo:x = 2;y = 3;x = 2 + y;y = x; Nesses casos devemos evitar o uso do termo ”igual”para evitar equ´ ıvocos. Dizemos, porexemplo, ”x recebe dois”e n˜o ”x igual a dois”. a O C permite substituir a express˜o ”x = x + 5”por ”x += 5”, como o mesmo efeito. aAcesso aos SFR No arquivo de cabe¸alho que existe para cada microcontrolador PIC (ex.: P18F4550.h) est˜o c adefinidos todos os registros de uso especial. Dessa maneira, ´ poss´ manipular diretamente os e ıvelregistros como se fossem vari´veis e envolvˆ-los em opera¸˜es com os operadores estudados. Os a e coexemplos abaixo mostram com isso pode ser feito:Exemplo:#include<P18F4550.h>void main(void){TMR0 = 0x25; // carrega valor no timer 0T1CON = 0b0001001; // configura o timer 1TRISA = 0xAA; // configura dire¸˜o das portas caINTCON = 0xC0; // habilita interrup¸˜es co} 104
  • 103. XM118 - Microcontroladores PIC18 Da mesma maneira, est˜o definidos os bits de cada registro, na forma de estruturas, conforme aos exemplos a seguir. Basta colocar o nome registro seguido de ”bits.”e o nome do bit em quest˜o a(muita aten¸˜o com as letras, pois C diferencia mai´sculo de min´sculo.) ca u u Exemplo: #include<P18F4550.h>void main(void)RCONbits.IPEN = 1; // ativa prioridade de int.INTCONbits.GIEH = 1; // habilita interrup¸˜es coADCON0bits.ADON = 0; // desliga o ADCTXSTAbits.TXEN = 1; // Ativa recep¸˜o serial ca}Entrada e Sa´ em C18 ıda O compilador C18, assim como qualquer compilador C, n˜o define comandos ou fun¸˜es es- a copeciais para realizar opera¸˜es de entrada e sa´ de dados. Mas como no PIC18 os portais de co ıdaI/O s˜o registros de fun¸˜es especiais e, portanto, definidos no arquivo de cabe¸alho de cada a co cmicrocontrolador, podemos manipul´-los como se fossem vari´veis. a a Os registros que controlam a dire¸˜o dos pinos dos portais, isto ´, o registro TRISx, podem ca eser acessados por dois nomes: TRISx (TRISA, TRISB, TRISC, etc...) e DDRx (DDRA, DDRB,DDRC, etc.). DDRx vem de Direction Data Register - Registro de Dire¸˜o de Dados. Pode-se caconfigurar o portal todo de uma vez ou os registros individualmente. O exemplo a seguir tratado portal B, mas o mesmo racioc´ ınio pode ser estendido aos demais portais.Operadores em C Para a execu¸˜o de express˜es e condi¸˜es o C disp˜es de diversos operadores, al´m do operador ca o co o e’=’ (atribui¸˜o) j´ tratado. ca a Os operadores matem´ticos s˜o apresentados na tabela abaixo. a a Operador Opera¸˜o ca + Adi¸˜o ca - Subtra¸˜o ca * Multiplica¸˜o ca / Divis˜o a % Resto da Divis˜o a ++ Incremento – Decremento Tabela 4.45: Operadores matem´ticos a 105
  • 104. XM118 - Microcontroladores PIC18 A seguir est˜o alguns exemplos de uso de operadores matem´ticos. a aExemplo:int x, y = 3, z = 2;x = y + z; // o valor de x ser´ 5 ax = y - z; // o valor de x ser´ 1 ax = y * z; // o valor de x ser´ 6 ax = y / z; // o valor de x ser´ 1 (parte inteira) ax = y % z; // o valor de x ser´ 1 (resto da divis˜o) a a H´ tamb´m os operadores de incremento (++) e decremento (–). Numa atribui¸˜o, se usar- a e camos os operadores a direita do dado, seu valor vai ser alterado (incrementado ou decrementado)antes da atribui¸˜o; se os usarmos a esquerda, seu valor ser´ alterado depois. Observemos o ca aexemplo a seguir.Exemplo: y = 5; // y recebe 5x = ++y; // y cont´m 6 e o valor de x ´ 6 e ey = 5; // y recebe 5x = y++; // y cont´m 6 MAS x cont´m 5 e e Existem tamb´m os operadores relacionais utilizados para comparar dados. e Operador Opera¸˜o ca > Maior que >= Menor ou igual que < Menor que <= Menor ou igual que == Igual a != Diferente de Tabela 4.46: Operadores Comparativos Uma opera¸˜o relacional resulta em ”verdadeiro”ou ”falso”. Os exemplos a seguir mostram o caresultado de algumas opera¸˜es relacionais. coExemplo:Para x = 10 e y = 8:x ¿ y , Verdadeirox ¿= y, Verdadeirox ¡ y, Falso 106
  • 105. XM118 - Microcontroladores PIC18x ¡= y,Falsox == y,Falsox != y ,Verdadeiro Os operadores l´gicos s˜o divididos em dois tipos. O primeiro tipo realiza opera¸˜es l´gicas de o a co ocomparando o estado de cada operando, se ’falso’ (igual a 0) ou ’verdadeiro’ (diferente de 0). Essesoperadores permitem criar condi¸˜es com express˜es l´gicas, envolvendo inclusive operadores co o orelacionais. Mais exemplos de sua aplica¸˜o ser˜o apresentados quando se tratar de comandos de ca adecis˜o. Tais operadores s˜o apresentados na tabela a seguir. a a Operador Opera¸˜o ca && E (AND) || OU (OR) ! COMPLEMENTO (NOT) Tabela 4.47: Operadores Comparativos O segundo tipo de operador l´gico realiza opera¸˜es l´gicas bit a bit em seus operandos. Os o co ooperadores pertencentes a esse segundo tipo est˜o na tabela a seguir. a Operador Opera¸˜o ca & E (AND) | OU (OR) ∧ OU-EXCLUSIVO (XOR) ∼ COMPLEMENTO (NOT) >> Deslocamento a direita << Deslocamento a esquerda Tabela 4.48: Operadores Comparativos Os exemplos a seguir apresentam opera¸˜es l´gicas bit-a-bit envolvendo dados de 8 bits. co oExemplo:char a,b,s;a = 0b11110000;b = 0b10101010;s = a & b; // o valor de x ser´ 0b10100000 as = a | b; // o valor de x ser´ 0b11110000 as = a ∧ b; // o valor de x ser´ 0b01011010 as = ∼b; // o valor de x ser´ 0b01010101 a No deslocamento informa-se quantos bits ser˜o deslocados e as posi¸˜es vagas s˜o preenchidas a co acom zero. No exemplo abaixo ´ feito um deslocamento de 3 bits a direita e depois 2 bits a esquerda. eExemplo:char a,b,s; 107
  • 106. XM118 - Microcontroladores PIC18a = 0b11110000;s = a >> 3; // o valor de x ser´ 0b00011110 as = a << 2; // o valor de x ser´ 0b11000000 a Por fim, existem operadores de manipula¸˜o de mem´ria: ca o Operador Opera¸˜o ca & Endere¸o do identificador c * Conte´do do endere¸o apontado pelo operando u c Tabela 4.49: operadores de manipula¸˜o de mem´ria ca o O operador ’&’ deve ser usado com aten¸˜o. Se ele for usado com apenas um operando, catem a fun¸˜o de retornar o endere¸o de mem´ria desse operando. Mas caso seja usado com dois ca c ooperandos, sua fun¸˜o ´ a opera¸˜o l´gica E. Essas duas formas de aplica¸˜o s˜o apresentadas ca e ca o ca anos exemplos abaixo.Exemplo:X = &Y; // X recebe o endere¸o de Y cX = Y & 0x0F // X recebe o resultado da opera¸˜o E bit-a-bit de Y com 0x0F. caPrecedˆncia de operadores e Numa express˜o com v´rios operadores as opera¸˜es ser˜o efetuadas seguindo uma ordem a a co apredefinida relacionada com tipo de operados. O programados pode alterar essa ordem conformea sua vontade utilizando parˆnteses, que funcionaram como em uma opera¸˜o matem´tica. A e ca aseguir ´ a ordem de precedˆncia dos operadores. e e Ordem de execu¸˜o ca Operador 1 ()[] 2 ! ++ – * &(endere¸o) c 3 /% 4 +- 5 <<>> 6 <<=>>= 7 == != 8 & (opera¸˜o E) ca 9 ^ 10 | 11 && 12 || 13 ? 14 = += -= *= /= Tabela 4.50: Operadores de manipula¸˜o de mem´ria ca o 108
  • 107. XM118 - Microcontroladores PIC18 Exemplo:// da na mesma fazerTRISB = 0b00110101;// ouDDRB = 0b00110101;// ouTRISBbits.TRISB0 = 1; // 1 = EntradaTRISBbits.TRISB1 = 0; // 0 = Sa´ ıdaTRISBbits.TRISB2 = 1;TRISBbits.TRISB3 = 0;TRISBbits.TRISB4 = 1;TRISBbits.TRISB5 = 1;TRISBbits.TRISB6 = 0;TRISBbits.TRISB7 = 0;// ou aindaDDRBbits.RB0 = 1;DDRBbits.RB1 = 0;DDRBbits.RB2 = 1;DDRBbits.RB3 = 0;DDRBbits.RB4 = 1;DDRBbits.RB5 = 1;DDRBbits.RB6 = 0;DDRBbits.RB7 = 0; Para acesso aos portais existem dois registros, LATx e PORTx. O acesso a esse registros podeser feito conforme apresentado no exemplo a seguir.Exemplo:LATA = 0x00;x = PORTB;PORTBbits.RB0 = 1;LATBbits.LATB1 = PORTAbits.RA5; Para tornar o c´digo mais compreens´ o ıvel e facilitar altera¸˜es na configura¸˜o de hardware co capodemos usar a diretiva #define para atribuir nomes aos pinos dos portais, conforme apresentadoa seguir.Exemplo:// Esse programa acende o LED se a chaves estiver pressionada#include<P18F4550.h> 109
  • 108. XM118 - Microcontroladores PIC18#define LED0 PORTDbits.RD0#define Chave PORTBbits.RB1void main (void){DDRDbits.RD0 = 0; // sa´ para o LED ıdafor(;;)if (!Chave)LED = 1;else LED = 0;}}4.4.2 Decis˜o a As estruturas de decis˜o permitem ao programa tomar decis˜es baseadas na avalia¸˜o de uma a o ca ca ´ avaliado se essa condi¸˜o ´ verdadeira ou falsa.condi¸˜o. E ca e Em C temos as seguintes estruturas de decis˜o. aIf A estrutura if (se) executa um bloco de comandos se a condi¸˜o for verdadeira. Caso contr´rio ca asegue a execu¸˜o do programa. Seu aspecto geral ´ apresentado abaixo, assim como um exemplo ca ede utiliza¸˜o. caExemplo:if (<condi¸˜o>) ca<Bloco verdadeiro>}Exemplo:if(x > 5)printf(”n x maior que 5”);} Uma condi¸˜o ´ considerada falsa se ´ igual a 0. Caso contr´rio ´ considerada verdadeira. Isso ca e e a ese aplica n˜o s´ ao resultado de operadores relacionais como tamb´m na avalia¸˜o de vari´veis e a o e ca abits, conforme mostrado a seguir.Exemplo:if (TMR0){ // verdadeiro se TMR0 diferente de 0printf(”TMR0 ´ diferente de 0”) e}if(!PORTBbits.RB0){ //verdadeiro se RB0 for ’0’ (note o ’ !’)LigaMotor();} 110
  • 109. XM118 - Microcontroladores PIC18if(PIR1bits.TMR1IF){ RTITimer1(); // chama a fun¸˜o se TMR1IF for ’1’ ca}If-else A estrutura if-else (se-sen˜o) executa um bloco de comandos se a condi¸˜o for verdadeira ou a caoutro bloco de comando se a condi¸˜o for falsa. Temos a seguir forma geral dessa estrutura e um caexemplo de utiliza¸˜o. ca Comando exemplo:if (¡condi¸˜o¿){ ca<Bloco verdadeiro>}else{<Bloco falso>} Exemplo:if(x > 5){printf(”n x maior que 5”);}else{printf(”n x menor que 5”);}Operador tern´rio condicional a Para situa¸˜es onde uma decis˜o implica no valor a ser atribu´ a uma vari´vel existe uma co a ıdo aforma alternativa de se realiza a estrutura se-sen˜o. Isso ´ feito atrav´s do operador tern´rio a e e acondicional. Sua sintaxe ´: eVari´vel = Condi¸˜o ? Express˜o1 : Express˜o2; a ca a a Sendo Condi¸˜o uma express˜o cujo resultado vai ser avaliado em verdadeiro ou falso e ca aExpress˜o1 e Express˜o2 express˜es quaisquer cujo valor pode ser atribu´ ` vari´vel. Se a a o ıdo a aCondi¸˜o for verdadeiro, Vari´vel recebe o resultado de Express˜o1; sen˜o, Vari´vel recebe ca a a a ao resultado de Express˜o2. A seguir o uso do operador tern´rio condicional ´ exemplificado. a a e 111
  • 110. XM118 - Microcontroladores PIC18 Exemplo:x = (y >= 10) ? y 2 : y 3;equivale aif( y >= 10) x = y * 2;else x = y * 3;PORTDbits.RD0 = (valor <= 128) ? 1 : 0;equivale aif( valor <= 128) PORTDbits.RD0 = 1;else PORTDbits.RD0 = 1;Switch O comando switch permite a implementa¸˜o de uma estrutura caso. A seguir temos a forma cagen´rica desse comando. eExemplo:switch(<vari´vel>){ acase <valor1>:<comandos>break;case <valor1>:<comandos>break;case <valor1>:<comandos>break;default:<comandos>break; O que o comando switch faz ´ comparar <vari´vel> com os valores que ela pode assumir e a(valor1, valor2, etc). Caso a vari´vel possua um desses valores o bloco associado ao valor ´ a eexecutado. O ultimo bloco, chamado default, ´ opcional e s´ ´ executado se <vari´vel> n˜o ´ ´ e oe a a eigual a nenhum dos valores. A seguir, como exemplo, temos uma aplica¸˜o t´ ca ıpica do comando switch:Exemplo: 112
  • 111. XM118 - Microcontroladores PIC18switch(x){case 1:printf(”n x igual a 1”);break;case 2:printf(”n x igual a 2”);break;case 3:printf(”n x igual a 3”);break;default:printf(”n x diferente de 3, 2 e 1”);break;}4.4.3 Repeti¸˜o ca Em C existem trˆs comandos que implementam estruturas de repeti¸˜o: e ca • Do-While; • While; • For.Do-While Esse comando implementa uma estrutura Fa¸a-Enquanto. Sua fun¸˜o executar um blocos c cade instru¸˜es enquanto uma condi¸˜o for satisfeita. Sua principal caracter´ co ca ıstica ´ que o bloco ´ e eexecutado antes do teste ser realizado. Ou seja, o bloco ´ executado pelo menos uma vez, inde- ependente da condi¸˜o ser verdadeira ou falsa. Esse funcionamento ´ particularmente util quando ca e ´a condi¸˜o a ser testada ´ afetada pelo bloco. A seguir temos sua forma padr˜o e um exemplo de ca e autiliza¸˜o. caExemplo da estrutura do comando:do{<bloco de instru¸˜es> co}while(<condi¸˜o>); caExemplo:// fica imprimindo a mensagem enquanto n < 5; do{printf(”n Bloco do do-while!!”); 113
  • 112. XM118 - Microcontroladores PIC18}while(n < 5);While Da mesma forma de Do-While, o comando While repete um bloco enquanto uma determinadacondi¸˜o ´ verdadeira. A principal diferen¸a entre os dois comandos ´ que com While o teste ´ ca e c e efeito antes de se executar o bloco. Em outras palavras, o bloco s´ vai ser executado se em algum omomento a condi¸˜o for satisfeita. caExemplo da estrutura do comando:while(<condi¸˜o>){ ca<bloco de instru¸˜es> co} Exemplo:// fica imprimindo a mensagem enquanto n diferente de xwhile(n != n){printf(”n Bloco do While!!”);}For O comando For ´ utilizado para repetir um bloco por um n´mero pr´-determinado de vezes. e u eSua estrutura b´sica ´ apresentada a seguir. a eExemplo da estrutura do comando:for(<Contador> = <ValorInicial>; <Condi¸˜o>; <Passo>){ ca<Bloco>} Obrigatoriamente deve existir uma vari´vel contadora (<contador>). Essa vari´vel ´ car- a a eregada com um valor inicial quando a estrutura for come¸a a ser executada. A cada repeti¸˜o c cado bloco de instru¸˜es ´ dado um ”passo”em <contador>, isto ´, seu valor ´ alterado de alguma co e e emaneira. Tipicamente o passo ´ um incremento ou um decremento. O bloco de instru¸˜es ´ e co erepetido enquanto a condi¸˜o que relaciona <contador> com um valor final ´ satisfeita. ca e No exemplo a seguir for ´ usado para apresentar valores de uma multiplica¸˜o. A repeti¸˜o e ca cafoi implementada com um passo de decremento, o que quer dizer que ´ subtra´ 1 do contador e ıdo(cujo valor inicial ´ 10) at´ que a condi¸˜o (contador > 0) n˜o seja mais satisfeita. e e ca a 114
  • 113. XM118 - Microcontroladores PIC18Exemplo:for(i = 10; i > 0; i- - ){n = 5*i;printf(”n 5 vezes %d igual a %d”,i,z);}Comando Break Quando executado dentro de um la¸o de repeti¸˜o, o comando break causa a imediata inter- c carup¸˜o, fazendo o programa saltar para fora do la¸o. ca c4.5 Fun¸˜es co A linguagem C permite a cria¸˜o de fun¸˜es (equivalentes a sub-rotinas em Assembly). Al´m ca co edisso, v´rias fun¸˜es j´ prontas s˜o fornecidas com o compilador C18, sejam fun¸˜es definidas a co a a copelo padr˜o ANSI sejam fun¸˜es para uso espec´ a co ıfico no PIC18. Uma fun¸˜o ´ um trecho de c´digo que deve executar uma fun¸˜o espec´ ca e o ca ıfica e bem definida.Seu objetivo ´ permitir que um programa seja modular, isto ´, composto de blocos cujas respon- e esabilidades dentro do programa s˜o bem claras. Modularidade ´ um princ´ a e ıpio da programa¸˜o caestruturada e C ´ uma linguagem estruturada por natureza. e Fun¸˜es bem constru´ co ıdas facilitam a depura¸˜o, manuten¸˜o e entendimento do c´digo. E ca ca oainda, podem ser transportadas para outros programas onde se fa¸am necess´rias. c a Uma cole¸˜o de fun¸˜es correlacionadas ´ normalmente agrupada em uma biblioteca. Por ca co eexemplo, a biblioteca ”math.h”´ uma biblioteca de fun¸˜es matem´ticas avan¸adas. e co a c Na pasta c:MCC18doc existe um arquivo hlpC18UG. Nele s˜o apresentadas a sintaxe (a aforma como as fun¸˜es devem ser chamadas) tanto das bibliotecas padronizadas pela ANSI como coas bibliotecas espec´ ıficas do C18.4.5.1 Passagem de parˆmetros a Assim como uma fun¸˜o matem´tica (da´ seu nome) uma fun¸˜o em linguagem C tem oper- ca a ı caadores, chamados de parˆmetros. a H´ parˆmetros de entrada (que passam informa¸˜es para a fun¸˜o), tamb´m chamados de ar- a a co ca egumentos, e parˆmetros de sa´ (trazem informa¸˜o gerada na execu¸˜o da fun¸˜o). Assim como a ıda ca ca capara vari´veis e constantes, ´ necess´rio informar o tipo de dado dos parˆmetros, sendo v´lidas a e a a aas mesmas conven¸˜es usadas para declara¸˜o de vari´veis. H´ casos onde n˜o h´ parˆmetros de co ca a a a a aentrada e/ou de sa´ ıda. Nesse caso eles s˜o definidos como sendo do tipo void. a A seguir temos a sintaxe geral da defini¸˜o de uma fun¸˜o. ca caExemplo de sintaxe:<tipo> nome da funcao(<tipo1> <arg1>, <tipo2> <arg2>, ... ) { 115
  • 114. XM118 - Microcontroladores PIC18/* geralmente aqui temos uma declara¸˜o de vari´veis */ ca a/* os comando da fun¸˜o vˆem em seguida */ ca ereturn(<var>); /* retorno o parˆmetro de sa´ */ a ıda} Para exemplificar, suponhamos que se deseja construir uma fun¸˜o que some o valor de dois cainteiros e retorne o resultado dessa soma, tamb´m em formato inteiro. Essa fun¸˜o poderia ser e cadesenvolvida da seguinte maneira:Exemplo:int SomaDoisNumeros(int x, int y)// Fun¸˜o que soma dois n´meros ca u// Entrada: x e y contendo os valores// Sa´ ıda: a soma de x e y{int z; // Declara¸˜o de vari´veis ca az = x + y; // comandos da fun¸˜o careturn(z); // retorna o resultado} O nome da fun¸˜o ´ SomaDoisNumeros e obedece as mesmas regras para nomes de vari´veis. ca e aSeu parˆmetro de sa´ ´ do tipo int. Diz-se que ”SomaDoisNumeros retorna um inteiro”. Seus a ıda eargumentos s˜o dois dados do tipo inteiro. Quaisquer dois dados do tipo dos argumentos podem aser passados para a fun¸˜o, sejam eles constantes, vari´veis ou valores imediatos. Esse valores s˜o ca a acopiados para as vari´veis internas x e y. a As vari´veis declaradas em uma fun¸˜o, assim como seus argumentos s´ existem dentro da a ca ofun¸˜o. Isso significa que podemos ter outras vari´veis chamadas x em outras fun¸˜es e estas s˜o ca a co atem qualquer rela¸˜o com a vari´vel x que existe em SomaDoisNumeros. ca a O exemplo a seguir ilustra como a fun¸˜o pode ser chamada na fun¸˜o principal. ca caExemplo: void main(void){int x,z;z = 5;x = SomaDoisNumeros(8,z);} 116
  • 115. XM118 - Microcontroladores PIC18 Em C a posi¸˜o onde a fun¸˜o se encontra no c´digo fonte ´ importante. Uma fun¸˜o (in- ca ca o e cacluindo a fun¸˜o main) s´ pode chamar outra que esteja escrita acima (antes) de si mesma. Isso ca opode ser feito organizando a ordem em que as fun¸˜es aparecem no c´digo ou atrav´s da defini¸˜o co o e cado ”prot´tipo”de todas as fun¸˜es no in´ o co ıcio do arquivo. Por exemplo, o prot´tipo da fun¸˜o o caSomaDoisNumeros ´: eint SomaDoisNumeros(int x, int y); Fun¸˜es n˜o ”enxergam”vari´veis declaradas fora de si mesma (com exce¸˜o de vari´veis co a a ca aglobais) assim como n˜o ´ poss´ a e ıvel ”enxergar”as vari´veis de fora de uma fun¸˜o. Em outras a capalavras, a chamada de uma fun¸˜o n˜o pode alterar o valor de vari´veis passadas como argu- ca a amentos. O m´todo para realizar isso , que tamb´m pode ser usado para fun¸˜es que retornam e e covetores ou mais de um parˆmetro, ´ chamado de passagem de parˆmetro por referˆncia e ´ feito a e a e ecom o uso de ponteiros. Por exemplo, admitindo a necessidade de construir uma fun¸˜o capaz de somar 5 a trˆs ca evari´veis, pode-se escrever o seguinte fun¸˜o: a caExemplo:void Soma5em3Variaveis(int *ptrA, int *ptrB, int *ptrC)// Fun¸˜o que soma 5 aos argumentos ca// Entrada: os endere¸os de trˆs vari´veis do tipo int c e a// Sa´ ıda: as vari´veis referenciadas a{ptrA = *ptrA + 5;ptrB = *ptrB +5;ptrC = *ptrC +5;} Os argumentos da fun¸˜o s˜o na verdade os endere¸os das vari´veis. A fun¸˜o manipula o ca a c a caconte´do das vari´veis apontadas por esses endere¸os, portanto toda altera¸˜o feita dentro da u a c cafun¸˜o ´ feita com vari´veis que foram declaradas fora da fun¸˜o. ca e a ca O mesmo processo pode ser usado para argumentos que sejam string ou vetor. Usando o nomeda string ou do vetor como argumento, o ponteiro ´ associado ao primeiro elemento. O exemplo eabaixo mostra como poderia ser usada uma fun¸˜o que imprime os valores contidos em uma string. caExemplo:void ImprimeString(char *ptrA){while(*ptrA != ’0’){ // repete at´ o fim da string eprintf(”n %c”, *ptrA);ptrA++; // incrementa o endere¸o c} 117
  • 116. XM118 - Microcontroladores PIC18}void main (void){const char Seq[] = ”Exsto Tecnologia”;ImprimeString(Seq);}4.6 Interrup¸oes c˜ Muitas vezes um projeto exige que providˆncias sejam tomadas imediatamente no momento em eque um determinado evento ocorre, por´m n˜o se pode ficar o tempo todo verificando as entradas e aassociadas a esse evento. Por exemplo, supondo que um sistema que deve fazer v´rias medidas acontinuamente e mostrar uma medida selecionada em um display. Essa medida ´ selecionada pelo epressionamento de um bot˜o. Vamos admitir que o processo de fazer todas as medidas e mostr´- a alas no display demore um determinado tempo, alguns segundos. Ent˜o s´ poderemos verificar o a oestado do bot˜o rapidamente a intervalos de alguns segundos. Se o bot˜o n˜o estiver pressionado a a ano exato momento da leitura o microcontrolador n˜o tomar´ conhecimento desse fato. O ideal ´ a a eque o microcontrolador pudesse fazer as medidas o tempo todo e somente no momento em queo bot˜o fosse pressionado ele executaria a rotina relacionada a esse evento, voltando depois `s a amedidas. Uma interrup¸˜o faz exatamente isso: interrompe a execu¸˜o normal do programa para exe- ca cacutar tarefas de maior prioridade no momento. Ela pode ser chamada por determinados eventos,parando a execu¸˜o normal no momento em que ocorre o evento, executando o c´digo armazenado ca oem uma posi¸˜o de mem´ria vinculada a interrup¸˜o e depois retornam a execu¸˜o normal do ca o ca caprograma. As interrup¸˜es podem ser consideradas chamadas de sub-rotinas realizadas pelo hard- coware. Quando ocorre um pedido de interrup¸˜o para a CPU, o programa ´ desviado para um endere¸o ca e cpr´-estabelecido, o vetor de reset. No PIC18 existem dois vetores de reset, conforme ser´ tratado e amais adiante. Desse endere¸o em diante ´ feito o chamado tratamento de interrup¸˜o, isto ´, s˜o c e ca e aexecutadas as rotinas que se deseja associar ao evento causador da interrup¸˜o. ca O PIC18F4550 possui 20 fontes de interrup¸˜es. A cada interrup¸˜o s˜o associados trˆs bits: co ca a e • Bit de habilita¸˜o: Indica se a interrup¸˜o est´ ativa (0 = interrup¸˜o desativada, 1 = ca ca a ca interrup¸˜o ativa); ca • Bit de flag: indica se ocorreu o evento associado ` interrup¸˜o (0 = n˜o ocorreu, 1 = a ca a ocorreu); • Bit de prioridade: indica a prioriade da interrup¸˜o (0 = baixa prioridade, 1 = alta priori- ca dade). Existem v´rios ”eventos”causadores de interrup¸˜o, como por exemplo, uma transi¸˜o em a ca caalguns pinos, o estouro de um timer, a recep¸˜o de um dado pela porta serial, etc. a ocorrˆncia ca e 118
  • 117. XM118 - Microcontroladores PIC18de um evento destes faz com que um bit de flag vai para 1, caso contr´rio ele permanecer´ em a a0. Contudo, para que haja um pedido de interrup¸˜o para a CPU ´ necess´rio que a interrup¸˜o ca e a caassociada a esse evento esteja ativa, isto ´, seu bit de habilita¸˜o seja 1. Em outras palavras, ´ e ca eposs´ ativar quais interrup¸˜es se queira e manter as demais inativas. ıvel co Existem dois n´ ıveis de prioridade de interrup¸˜es, alto e baixo. Uma interrup¸˜o de baixa co caprioridade interrompe a execu¸˜o do programa e causa o desvio para o vetor de interrup¸˜o de ca cabaixa prioridade. J´ a interrup¸˜o de alta prioridade interrompe n˜o s´ a execu¸˜o normal do a ca a o caprograma como tamb´m interrompe a rotina de tratamento de interrup¸˜o de baixa prioridade e ca(se estiver sendo executada). Cada fonte de interrup¸˜o pode ser configurada para atuar com cabaixa ou alta prioridade, sendo que para isso basta definir se o bit de prioridade ´ 0 (baixa) ou 1 e(alta). O vetor de interrup¸˜o de alta prioridade ´ o 0008h enquanto o vetor de interrup¸˜o de baixa ca e caprioridade ´ o 0018h. e Para habilitar o sistema de prioridade de interrup¸˜o o bit IPEN deve estar em ’1’. Caso cacontr´rio (IPEN = ’0’) o sistema comporta-se como se n˜o houvesse prioridade, como nos PIC16. a aNeste caso, todas as interrup¸˜es convergem para o endere¸o 0008h. Estando habilitada a pri- co coridade existem duas habilita¸˜es globais, uma para prioridade alta (GIEH) e outra para baixa co(GIEL). Caso contr´rio, existe uma habilita¸˜o global (GIE) e uma habilita¸˜o de perif´ricos a ca ca e(PEIE). A interrup¸˜o INT0 n˜o tem ajuste de prioridade, ela ´ sempre de prioridade alta. ca a e A figura a seguir apresenta o diagrama interno de interrup¸˜es. co Figura 4.1: Diagrama de interrup¸˜es do PIC18F co 119
  • 118. XM118 - Microcontroladores PIC18 Dois fatos importantes sobre os bits de flag devem ser enfatizados. O bit de flag vai para 1quando ocorre o evento mesmo que a interrup¸˜o associada a ele n˜o esteja habilitada. Al´m disso ca a eo hardware for¸a o bit de flag para 1 mas o mesmo deve ser zerado pelo software para indicar que ca interrup¸˜o em quest˜o foi tratada. ca a As interrup¸˜es externas, isto ´, que s˜o causadas diretamente por eventos externos ao micro- co e acontrolador, ´ a interrup¸˜o INT0 (pino RB0), INT1 (pino RB1), INT2 (pino RB2) e a interrup¸˜o e ca capor mudan¸a de estado do portal B. As demais interrup¸˜es s˜o internas, causadas pelos perif´ricos c co a epara indicar determinados eventos (chegada de dado pelo portal serial, ”estouro”de timer, etc). Quando ocorre uma interrup¸˜o o fluxo do programa desvia para um vetor de reset (conforme caa prioridade da interrup¸˜o). Consequentemente, a rotina de tratamento de interrup¸˜o deve ca caobrigatoriamente come¸ar nesse endere¸o. Para determinar qual interrup¸˜o ocorreu testa-se os c c cabits de flags de todas as interrup¸˜es ativas com a mesma prioridade. co Pode acontecer de uma rotina de tratamento de interrup¸˜o fazer uso de uma vari´vel ou ca aregistro de fun¸˜o especial tamb´m usada no programa principal. Neste caso, a execu¸˜o da ca e carotina de tratamento de interrup¸˜o iria corromper o valor desta vari´vel, causando um erro ca aintermitente e dif´ de detectar. Para entender esse problema basta pensar que se em determinado ıcilponto do programa movemos o valor 10 para a vari´vel X e ocorre uma interrup¸˜o neste exato a camomento, o valor de W ser´ alterado na RTI e o valor que finalmente aparecer´ em X n˜o ser´ a a a a10. Ao contr´rio de alguns microcontroladores, quando ocorre uma interrup¸˜o nenhum registro a ca´ automaticamente salvo. Assim ´ importante salvar os registros W e STATUS antes que sejae erealizado qualquer tratamento de interrup¸˜o, bem como qualquer outro SFR que for usado dentro cae fora das rotinas de interrup¸˜o. Esse processo ´ chamado salvamento de contexto. Tamb´m ca e e a ´´ recomend´vel que o registro STATUS seja zerado. E necess´rio ent˜o que existam vari´veise a a acriadas para salvar esses registros. Outra pr´tica recomendada ´ de nunca usar dentro de uma a erotina de tratamento de interrup¸˜o registros que s˜o utilizados em outras partes do programa. ca a Um outro cuidado que deve ser tomado quando se trabalha com interrup¸˜es ´ n˜o executar co e arotinas muito grandes. Isso porque o tratamento de interrup¸˜o deve tomar medidas emergˆncias. ca eNada que n˜o seja estritamente necess´rio deve ser trabalhado na interrup¸˜o, e isso principal- a a camente porque podem ocorrer v´rias interrup¸˜es em seguida, e s´ se pode tratar uma por vez. a co oQuando uma interrup¸˜o ´ chamada, a habilita¸˜o das demais fica desativada, e s´ ´ reativada ca e ca oeap´s a execu¸˜o do RETFIE. Se outra interrup¸˜o ocorrer nesse intervalo de tempo, ela ´ tratada o ca ca eap´s RETFIE. Deve-se notar que o que ativa a chamada de interrup¸˜o ´ a existˆncia de um o ca e eflag de uma interrup¸˜o habilitada setado. Assim, depois de tratar uma determinada interrup¸˜o ca cadeve-se zerar o flag associado a ela. Caso contr´rio, o programa fica travado, pois cada vez que ah´ o retorno de interrup¸˜o, a interrup¸˜o ´ chamada novamente. a ca ca e Finalmente, ´ necess´rio considerar que na realidade o tratamento de interrup¸˜o n˜o ocorre e a ca ano exato momento em que a interrup¸˜o acontece. Primeiramente, a checagem dos eventos que cacausam a interrup¸˜o obedece a uma varredura interna. E depois de detectado o evento, algumas caa¸˜es devem ser realizadas, como o desvio para o vetor de reset, por exemplo. Assim, ap´s a co oreal ocorrˆncia de uma interrup¸˜o ela s´ vai come¸ar a ser tratada 3 ciclos de m´quina ap´s e ca o c a osua ocorrˆncia, se for uma interrup¸˜o interna, e de 3 a 4 ciclos de m´quina se for uma inter- e ca arup¸˜o externa. Esses tempos devem ser considerados em aplica¸˜es onde a precis˜o de tempo ´ ca co a eimportante. 120
  • 119. XM118 - Microcontroladores PIC184.6.1 Utiliza¸˜o das Interrup¸˜es ca co Para trabalhar com uma interrup¸˜o deve-se primeiramente configurar o perif´rico associado ca ea ela, o que ´ feito normalmente uma unica vez, na inicializa¸˜o programa. Nada impede, por´m e ´ ca eque um perif´rico seja configurado, ou re-configurado, em qualquer ponto programa. e O pr´ximo passo ´ habilitar as interrup¸˜es a serem utilizadas, e isso pode ser feito em dois o e comomentos. Pode-se determinar que uma interrup¸˜o esteja ativa durante toda a execu¸˜o do ca caprograma, e nesse caso sua habilita¸˜o deve ser feita na inicializa¸˜o. Por outro lado, em algumas ca casitua¸˜es deseja-se que a interrup¸˜o seja ativada somente a partir de um dado momento ou ainda co caque seja ativada e posteriormente desativada. Nessa situa¸˜o basta habilitar, ou desabilitar, a cainterrup¸˜o no momento oportuno. ca ´ importante lembrar que as interrup¸˜es habilitadas somente causam chamadas de inter- E corup¸˜o se o bit de habilita¸˜o global (GIEH e GIEL quando a prioridade estiver ativa, GIE caso ca cacontr´rio) estiver habilitado. a Finalmente, deve-se fazer o ”tratamento”de interrup¸˜o, isto ´, construir as rotinas que ser˜o ca e achamadas quando ocorrer uma determinada interrup¸˜o. Essas rotinas dever˜o seguir as re- ca acomenda¸˜es dadas acima e deve-se salvar os registros de interesse. As rotinas de tratamento de cointerrup¸˜o ser˜o apresentadas no item da unidade de software que trata de interrup¸˜es. ca a co Os registros que controlam o sistema de interrup¸˜o s˜o apresentados a seguir. ca a Figura 4.2: Registro INTCON • GIE/GIEH : Habilita¸˜o Global; ca – Se IPEN = 0; ∗ 1 = Habilita as interrup¸˜es; co ∗ 0 = Desabilita as interrup¸˜es; co – Se IPEN = 1; ∗ 1 = Habilita as interrup¸˜es de alta prioridade; co ∗ 0 = Desabilita interrup¸˜es de alta prioridade; co • PEIE: Habilita¸˜o de interrup¸˜es de perif´ricos ca co e – Se IPEN = 0 ∗ 1 = Habilita as interrup¸˜es de perif´ricos co e ∗ 0 = Desabilita as interrup¸˜es de perif´ricos co e – Se IPEN = 1 ∗ 1 = Habilita as interrup¸˜es de baixa prioridade co ∗ 0 = Desabilita interrup¸˜es de baixa prioridade co 121
  • 120. XM118 - Microcontroladores PIC18• Habilita¸˜o de interrup¸˜o do Timer 0 ca ca – 1 = interrup¸˜o habilitada ca – 0 = interrup¸˜o desabilitada ca• INT0IE: Habilita¸˜o de interrup¸˜o Externa 0 (RB0) ca ca – 1 = interrup¸˜o habilitada ca – 0 = interrup¸˜o desabilitada ca• RBIE: Habilita¸˜o de interrup¸ao por mudan¸a de estado no PORTB ca c˜ c – 1 = interrup¸˜o habilitada ca – 0 = interrup¸˜o desabilitada ca• TMR0IF: Flag da interrup¸˜o do Timer 0 ca – 1 = Houve overflow do timer 0 – 0 = N˜o houve overflow do timer 0 a• INT0IF: Flag da interrup¸˜o Externa 0 (RB0) ca – 1 = Houve transi¸˜o no pino RB0 ca – 0 = N˜o houve transi¸˜o no pino RB0 a ca• RBIF: Flag da interrup¸˜o por mudan¸a de estado no PORTB ca c – 1 = houve altera¸˜o em um dos bits de RB7:RB4 ca – 0 = n˜o houve altera¸˜o em um dos bits de RB7:RB4 a ca Figura 4.3: Registro INTCON 2• RBPU : Habilita¸˜o dos Pull-ups de PORTB ca – 1 = desabilita Pull-ups – 0 = Habilita Pull-ups• INTEDG0: Sele¸˜o da transi¸˜o da interrup¸˜o INT0 ca ca ca – 1 = Transi¸˜o de subida ca – 0 = Transi¸˜o de descida ca• INTEDG1: Sele¸˜o da transi¸˜o da interrup¸˜o INT1 ca ca ca 122
  • 121. XM118 - Microcontroladores PIC18 – 1 = Transi¸˜o de subida ca – 0 = Transi¸˜o de descida ca• INTEDG2: Sele¸˜o da transi¸˜o da interrup¸˜o INT2 ca ca ca – 1 = Transi¸˜o de subida ca – 0 = Transi¸˜o de descida ca• TMR0IP: Prioridade da Interrup¸˜o do Timer 0 ca – 1 = Alta prioridade – 0 = Baixa prioridade• RBIP: Prioridade da Interrup¸ao de PORTB c˜ – 1 = Alta prioridade – 0 = Baixa prioridade Figura 4.4: Registro INTCON 3• INT2IP: Prioridade da Interrup¸˜o INT2 ca – 1 = Alta prioridade – 0 = Baixa prioridade• INT1IP: Prioridade da Interrup¸˜o INT1 ca – 1 = Alta prioridade – 0 = Baixa prioridade• INT2IE: Habilita¸˜o de interrup¸˜o Externa 2 (RB2) ca ca – 1 = interrup¸˜o habilitada ca – 0 = interrup¸˜o desabilitada ca• INT1IE: Habilita¸˜o de interrup¸˜o Externa 1 (RB1) ca ca – 1 = interrup¸˜o habilitada ca – 0 = interrup¸˜o desabilitada ca• INT2IF: Flag da interrup¸˜o Externa 2 (RB2) ca – 1 = Houve transi¸˜o no pino RB2 ca – 0 = N˜o houve transi¸˜o no pino RB2 a ca 123
  • 122. XM118 - Microcontroladores PIC18 • INT1IF: Flag da interrup¸˜o Externa 1 (RB1) ca – 1 = Houve transi¸˜o no pino RB1 ca – 0 = N˜o houve transi¸˜o no pino RB1 a ca As demais interrup¸˜es tem seus bits de flag, habilita¸˜o prioridade distribu´ co ca ıdos nos registrosPIRx, PIEx e IPRx, respectivamente, como mostrado na tabela a seguir: Evento de Interrup¸˜o ca Flag Habilita¸˜o ca Prioridade 1 = ocorreu 1 = Habilitada 1 = Alta 0 = n˜o ocorreu a 0 = Desabilitada 0 = Baixa INTCON INTCON INTCON2 Interrup¸˜o externa INT0 ca INT0IF INT0IE Sempre alta Estouro do timer 0 TMR0IF TMR0IE TMR0IP Mudan¸a de estado na porta B c RBIF RBIE RBIP INTCON3 INTCON3 INTCON3 Interrup¸˜o externa INT1 ca INT1IF INT1IE INT1IP Interrup¸˜o externa INT2 ca INT2IF INT2IE INT2IP PIR1 PIE1 IPR1 Leitura ou escrita da porta paralela escrava PSPIF PSPIE PSPIP Convers˜o do AD completa a ADIF ADIE ADIP Recep¸˜o serial USART ca RCIF RCIE RCIP Transmiss˜o serial a TXIF TXIE TXIP Transmiss˜o/recep¸˜o completa pelo MSSP a ca SSPIF SSPIE SSPIP Interrup¸˜o do m´dulo CCP1 ca o CCP1IF CCP1IE CCP1IP Estouro do timer 2 TMR2IF TMR2IE TMR2IP Estouro do timer 1 TMR1IF TMR1IE TMR1IP PIR2 PIE2 IPR2 Falha no oscilador OSCFIF OSCFIE OSCFIP Altera¸˜o no estado do comparador ca CMIF CMIE CMIP T´rmino de escrita na EEPROM e EEIF EEIE EEIP Colis˜o no barramento SPI a BCLIF BCLIE BCLIP Detec¸˜o de baixa/alta tens˜o ca a HLVDIF HLVDIE HLVDIP Estouro do timer 3 TMR3IF TMR3IE TMR3IP Interrup¸˜o do m´dulo CCP2 ca o CCP2IF CCP2IE CCP2IP Tabela 4.51: Controle das interrup¸˜es co4.6.2 Interrup¸oes no C18 c˜ O compilador C18 permite o trabalho com interrup¸˜es atrav´s da diretiva #pragma Atrav´s co e edessa diretiva ´ poss´ informar ao compilador que uma determinada fun¸˜o ´ uma RTI (Rotina e ıvel ca ede Tratamento de Interrup¸˜o) e associ´-la a interrup¸˜o de alta ou baixa prioridade. ca a ca Uma rotina de tratamento de interrup¸˜o n˜o pode ter argumentos nem retornar valores. Para ca arealizar a troca de valores entre as RTI e o programa principal (ou mesmo entre as RTI´s de altae baixa prioridade) deve-se declarar uma vari´vel global com o qualificador volatile. a A diretiva #pragma s´ informa qual fun¸˜o ´ uma RTI. O processo de identificar da inter- o ca erup¸˜o e zerar o flag relativo a cada uma deve ser implementado por c´digo Exemplo abaixo ca oapresenta a forma como a diretiva deve ser usada. 124
  • 123. XM118 - Microcontroladores PIC18Exemplo:#include<P18F4550.h>#include<timers.h>// *** Prot´tipos ovoid RTITimer1(void);void RTITimer0(void);// *** Configura¸˜o das RTI ca#pragma code low vector=0x18void interrupt at low vector(void) {asm GOTO RTITimer0 endasm}#pragma code#pragma code high vector=0x08void interrupt at high vector(void){asm GOTO RTITimer1 endasm}#pragma code#pragma interruptlow RTITimer0#pragma interrupt RTITimer1// *** Fun¸˜es covoid 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 timersOpenTimer0 (TIMER INT ON & T0 SOURCE INT & T0 16BIT);OpenTimer1 (TIMER INT ON & T1 SOURCE INT);//Configura a interrup¸˜o caRCONbits.IPEN = 1; // habilita prioridadeINTCON2bits.TMR0IP = 0; // interrup¸˜o do timer 0 ´ baixa ca e 125
  • 124. XM118 - Microcontroladores PIC18IPR1bits.TMR1IP = 1; // interrup¸ao do timer 1 ´ alta c˜ eINTCONbits.GIEH = 1; // habilita interrup¸˜es de alta prioridade coINTCONbits.GIEL = 1; // habilita interrup¸˜es de baixa prioridade cowhile (1); // fica em loop sem fazer nada}4.7 Fun¸˜es uteis co ´ A seguir s˜o apresentadas algumas fun¸˜es (padronizadas do C ou espec´ a co ıficas do C18) quepodem ser uteis em diversas situa¸˜es. ´ co A tabela a seguir apresenta algumas fun¸˜es que convertem valores num´ricos em string´s e co evice-versa. Essas fun¸˜es est˜o presentes na biblioteca stdlib.h. co a Fun¸˜es co Descri¸˜o ca atob Converte em um valor de 8 bits sinalizado atof Converte em um valor fracion´rio a atoi Converte em um valor de 16 bits sinalizado atol Converte em um valor inteiro longo btoa Converte um valor de 8 bits sinalizado em uma string itoa Converte um valor de 16 bits sinalizado em uma string ltoa Converte um valor inteiro longo sinalizado em uma string Tabela 4.52: Fun¸˜es de convers˜o de tipo co a H´ fun¸˜es que permitem identificar o evento que ocasionou ultimo reset. Essas fun¸˜es a co ´ copertencem a biblioteca reset.h. Fun¸˜es co Descri¸˜o ca isBOR Retorna 1 se o reset foi causado por BOR isLVD Retorna 1 se o reset foi causado por LVD isMCLR Retorna 1 se o reset foi causado atrav´s do pino MCLR e isPOR Retorna 1 quando os sistema acaba de ser ligado isWDTTO Retorna 1 se ocorreu estouro do WatchDog isWDTWU Retorna 1 se saiu do modo SLEEP por estouro do WatchDog isWU Retorna 1 se saiu do modo SLEEP por estouro do MCLR ou interrup¸˜o. ca StatusReset Seta os pinos POR e BOR. Isto deve ser feito ap´s um POR o Tabela 4.53: Fun¸˜es de Reset co No portal B do PIC18 existem algumas funcionalidades especiais que podem ser configu-radas fazendo uso das fun¸˜es apresentadas na tabela 2.8. Estas fun¸˜es pertencem a biblioteca co coportb.h. 126
  • 125. XM118 - Microcontroladores PIC18 Fun¸˜es co Descri¸˜o ca ClosePORTB Desativa a interrup¸˜o por mudan¸a de estado e resistores de pull-up do portal B. ca c CloseRB1INT Desabilita as interrup¸˜es INT0, INT1 e INT2. co CloseRB2INT CloseRB3INT DisablePullups Desativa os resistores de pull-up internos do portal B EnablePullups Ativa os resistores de pull-up internos do portal B OpenPORTB Configura interrup¸˜es e pull-up do portal B. co OpenRB1INT OpenRB2INT OpenRB3INT Habilita as interrup¸˜es INT0, INT1 e INT2. co Tabela 4.54: Fun¸˜es do portal B co H´ ainda algumas macros que podem ser usadas em C para a execu¸˜o direta de instru¸˜es a ca codo Assembly do PIC18. Essas fun¸˜es est˜o definidas na biblioteca de cabe¸alho de cada micro- co a ccontrolador. Essas macros s˜o apresentadas na tabela a seguir: a Fun¸˜es co A¸˜o ca ClosePORTB Desativa a interrup¸˜o por mudan¸a de estado e resistores de pull-up do portal B. ca c CloseRB1INT Desabilita as interrup¸˜es INT0, INT1 e INT2. co CloseRB2INT CloseRB3INT DisablePullups Desativa os resistores de pull-up internos do portal B EnablePullups Ativa os resistores de pull-up internos do portal B OpenPORTB Configura interrup¸˜es e pull-up do portal B. co OpenRB1INT OpenRB2INT OpenRB3INT Habilita as interrup¸˜es INT0, INT1 e INT2. co Tabela 4.55: Fun¸˜es do portal B co H´ ainda algumas macros que podem ser usadas em C para a execu¸˜o direta de instru¸˜es a ca codo Assembly do PIC18. Essas fun¸˜es est˜o definidas na biblioteca de cabe¸alho de cada micro- co a ccontrolador. Essas macros s˜o apresentadas na tabela a seguir: a Fun¸˜es co A¸˜o ca Nop() Executa a instru¸˜o NOP ca ClrWdt() Executa a instru¸˜o CLRWDT - zera o timer do WatchDog ca Sleep() Executa a instru¸˜o SLEEP ca Reset() Executa a instru¸˜o RESET - causa o reset do microcontrolador ca Rlcf(var, dest, access) Rotaciona var a esquerda atrav´s do bit C e Rlncf(var, dest, access) Rotaciona var a esquerda (sem passar pelo bit C) Rrcf(var, dest, access) Rotaciona var a direita atrav´s do bit C e Rrncf(var, dest, access) Rotaciona var a direita (sem passar pelo bit C) Swapf(var, dest, access) Executa a instru¸˜o SWAPF ca Tabela 4.56: Macros 127
  • 126. XM118 - Microcontroladores PIC184.7.1 Opera¸˜es matem´ticas co a Um dos grandes benef´ ıcios de se usar uma linguagem de programa¸˜o como C em lugar cado Assembly nativo do microcontrolador ´ a facilidade em se realizar opera¸˜es matem´ticas. e co aAl´m da opera¸˜es realizadas com o uso dos operadores j´ apresentados, existem fun¸˜es que e co a coimplementam opera¸˜es mais complexas. Essas fun¸˜es est˜o presentes na biblioteca padr˜o co co a a”math.h”. Fun¸˜es co Descri¸˜o ca acos Cosseno inverso asin Seno inverso atan Tangente inversa atan2 Tangente inversa de uma raz˜o a ceil Retorna o inteiro imediatamente superior cos Cosseno cosh Cosseno hiperb´lico o exp Exponencial ex fabs Valor absoluto de um n´mero fracion´rio u a floor Retorna o inteiro imediatamente inferior fmod Resto da divis˜o de n´meros fracion´rios a u a frexp Decomp˜e um fracion´rio em fra¸˜o e exponencial o a ca ieeetomchp Converte um valor fracion´rio no formato IEEE-754 para o formato Microchip. a ldexp Multiplica um valor por 2x log Calcula o logaritmo na base natural log10 Calcula o logaritmo na base 10 mchptoieee Converte um valor fracion´rio no formato Microchip para o formato IEEE-754. a modf M´dulo de um fracion´rio o a pow Exponencial xy sin Seno sinh Seno hiperb´lico o sqrt Raiz quadrada tan Tangente tanh Tangente hiperb´lica o Tabela 4.57: Macros4.8 T´cnicas de Otimiza¸˜o de C´digo e ca o Um dos principais aspectos da programa¸˜o em alto n´ ´ a otimiza¸˜o e eficiˆncia do c´digo ca ıvel e ca e ogerado pelo compilador. Quando programarmos dispositivos t˜o limitados como os microcontro- aladores, a otimiza¸˜o pode ser fundamental para atender a requisitos de velocidade e tamanho cade c´digo. Estes fatores s˜o determinantes neste tipo de projeto, pois um software tem que ser o aeficiente. Por isso, vamos ver a seguir algumas dicas que permitem aumentar a velocidade de execu¸˜o cado c´digo e evitar alguns problemas durante a confec¸˜o dos programas. o ca 128
  • 127. XM118 - Microcontroladores PIC184.8.1 Rotinas Matem´ticas a Devido `s limitadas capacidades matem´ticas da ULA dos PICs, a realiza¸˜o de opera¸˜es a a ca coaritm´ticas diferentes da soma ou subtra¸˜o de oito bits pode demandar um grande tempo de e caexecu¸˜o, al´m do espa¸o na mem´ria de programa. Por isso, devemos evitar a realiza¸˜o de ca e c o caopera¸˜es matem´ticas complexas e especialmente utilizando tipos de dados float. co a Quando tais opera¸˜es forem inevit´veis, aqui est˜o algumas sugest˜es para acelerar a real- co a a oiza¸˜o de c´lculos matem´ticos com PIC’s: ca a a • Evite o uso de vari´veis muito grandes como de 32 e 16 bits; a • Utilize, sempre que poss´ ıvel, divis˜es e multiplica¸˜es inteiras e se poss´ o co ıvel, utilizando m´ltiplos de potˆncias de dois (j´ que essas opera¸˜es podem ser facilmente traduzidas u e a co em rota¸˜es a direita ou esquerda, conforme o caso); co • Evite o uso de valores fracion´rios; prefira o uso de valores inteiros. Assim, para valores a entre 0,00 e 5,00, poder´ ıamos utilizar uma vari´vel de 16 bits com valores entre 0 e 500. a Contudo, alguns cuidados devem ser tomados para aumentar a eficiˆncia do c´digo gerado e e oevitar problemas de dif´ solu¸˜o. ıcil ca Em primeiro lugar, a escolha do tipo de dado das vari´veis deve ser bem criteriosa. O c´dio a omais enxuto ´ gerado para opera¸˜es com vari´veis com mesmo comprimento do barramento de e co adados do microcontrolador, ou seja, do tipo char. Quando vari´veis de tamanhos diferentes s˜o a ausados uma quantidade significativa de instru¸˜es ´ necess´ria para implementar mesmo opera¸˜es co e a cosimples como soma e subtra¸˜o. Ou seja, de uma forma mais geral, quantos mais bytes uma cavari´vel tem, maior e mais lento ´ o c´digo gerado para trat´-la. a e o a O uso de vari´veis do tipo ponto flutuante deve ser evitado ao m´ximo. Opera¸˜es com esse a a cotipo de dado consomem muita mem´ria e demoram muito tempo para serem executadas. Uma oboa t´cnica para se evitar o uso de ponto flutuante ´ trabalhar com dados em escala, convertendo- e eos para ponto flutuante somente quando realmente necess´rio. Por exemplo, um programa que afaz uma medida de tens˜o que expressa um valor entre 0,000 e 5,000 volts, compara esse valor acom outros e o mostra em um display ocupa muita mem´ria por processar dados do tipo ponto oflutuante. O mesmo programa pode ocupar menos mem´ria se a faixa de valores for de 0 a 5000, oou seja, ”pensar”os valores todos multiplicados por 1000. Dessa maneira podem ser usados dadosdo tipo int. Na apresenta¸˜o dos valores em um LCD basta inserir uma v´ ca ırgula no local adequado. Outro cuidado a ser tomado ´ com o tipo dos dados envolvidos em uma opera¸˜o. Por exemplo, e cauma express˜o onde dois inteiros s˜o somados e atribu´ a a ıdos a um caracter gerar´ um resultado aerrado. Por fim, deve-se estar atendo para que valores intermedi´rios de uma express˜o n˜o extrapolem a a aa faixa de valores dos operandos da express˜o. Por exemplo, o c´digo a seguir aparentemente n˜o a o acont´m erros. eExemplo: void main(void) /* essa fun¸~o est´ ERRADA! */ ca a{ 129
  • 128. XM118 - Microcontroladores PIC18int x,y,z;y = 15;z = 500;x = y * 20000 / z; // <== o erro est´ aqui a}Se o c´lculo for feito com uma calculadora teremos como resultado 600. Por´m o c´lculo realizado a e apelo microcontrolador resulta em -55! Vejamos porque isso ocorre. O compilador implementa rotinas em Assembly para realizar a opera¸˜o, j´ que todos os ca aoperandos envolvidos s˜o inteiros. Mas a opera¸˜o ´ feita pela ordem com que os dados aparecem a ca ena express˜o. Na verdade a opera¸˜o ´ realizada em partes, com o uso de vari´veis internas de a ca e arascunho. O trecho abaixo ilustra o processo, sendo ”rasc”´ uma vari´vel interna de rascunho, do e atipo inteiro.Exemplo:rasc = y * 20000x = rasc / z Ora, para y valendo 15 o valor armazenado em ”rasc”´ 300.000, grande demais para ser earmazenado em um inteiro. Internamente durante a execu¸˜o do c´lculo o valor ´ truncado, ou ca a eseja, partes dele s˜o desprezadas para caber em 16 bits. O valor de x ´ calculado com base em a eum valor incorreto e toda a opera¸˜o fica prejudicada. ca Problemas como esse tornam-se dif´ ıceis de serem depurados por para alguns valores a opera¸˜o cada certo. Por exemplo, se valesse 3 o resultado em x estaria correto. Uma forma de corrigir oproblema ´ usar parˆnteses para indica a precedˆncia das opera¸˜es. Ser˜o realizadas primeiras e e e co aas opera¸˜es dentro dos parˆnteses mais esternos. Para o c´digo a seguir: co e oExemplo: void main(void) /* essa fun¸~o est´ CORRETA! */ ca a{int x,y,z;y = 15;z = 500;x = y * (20000 / z);} O resultado em x ser´ correto, pois a sequˆncia de c´lculos ser´: a e a arasc = 20000/zx = y * rasc 130
  • 129. XM118 - Microcontroladores PIC184.8.2 Usando assembly no C. Por mais eficiente que sejam uma linguagem de programa¸˜o e um compilador, dificilmente caeles geram um c´digo t˜o eficiente quanto um bom programador assembly. Em aplica¸˜es cr´ o a co ıticas,nas quais cada microssegundo conta, podemos utilizar c´digo assembly dentro do programa em oC, de forma a acelerar e/ou aperfei¸oar a sua execu¸˜o. c ca De maneira geral, podemos dizer que os principais alvos deste tipo de otimiza¸˜o s˜o: Rotinas ca ade tratamento de interrup¸˜o (nos casos da ocorrˆncia de um elevado n´mero de interrup¸˜es num ca e u cocurto espa¸o de tempo), rotinas de manipula¸˜o de dados como convers˜es bin´rio/decimal/hexadecimal, c ca o adentre v´rias outras. a A linguagem assembly pode ser inserida no c´digo C em qualquer ponto, utilizando as diretivas oasm e endasm. As vari´veis C conservam seus nomes na utiliza¸˜o da linguagem assembly. a ca4.8.3 Uso de vari´veis locais e globais a Quando estamos programando para microcontroladores, ´ necess´rio dentro de um programa e aem C, criar v´rias fun¸˜es que ser˜o chamadas pelo main() de forma organizada, fazendo a a co aexecu¸˜o do programa como um todo. Conforme visto anteriormente, quase todos os valores caque podem ser manipulados por uma fun¸˜o ´ definido atrav´s de vari´veis. ca e e a Estas vari´veis podem ter in´meras formas de atribui¸˜o, contudo, aqui estamos falando a u caespecificamente das vari´veis locais e globais. As vari´veis locais s˜o locais de mem´ria que a a a oarmazenam informa¸˜es que s˜o manipuladas dentro de cada fun¸˜o, sendo que quando a fun¸˜o co a ca catermina sua execu¸˜o, esta ´rea de mem´ria pode ser reaproveitada pelo microcontrolador para ca a oaloca¸˜o de outra vari´vel local. A vari´vel global, de outra forma, ´ uma vari´vel declarada fora ca a a e ada fun¸˜o main() que tem ”dura¸˜o”por todo o programa, inclusive dentro de todas as fun¸˜es ca ca coem execu¸˜o. Assim, o endere¸o onde esta vari´vel guarda o seu valor permanece em uso por todo ca c ao programa n˜o podendo ser reaproveitada pelo microcontrolador. a O ponto importante que dentro do microcontrolador, esses dois tipos de vari´veis ocupam aa´reas de mem´ria diferentes. Ainda, cada ´rea de mem´ria em especifico possui um tamanho o a oreservado, sendo que para as vari´veis globais esta ´rea ´ bem menor que a ´rea destinada as a a e avari´veis locais. Ent˜o prefira usar vari´veis locais para ter melhor utiliza¸˜o da mem´ria. a a a ca o Outro ponto sobre vari´veis que devemos observar ´ quando utilizamos vari´veis globais e a e alocais com o mesmo nome. Isto causa uma confus˜o no compilador que podem geram problemas ana execu¸˜o do programa. Por exemplo, se for criada duas vari´veis, uma local e outra global com ca ao mesmo nome, o compilador vai dar preferˆncia para a ultima definida. Como sempre a ultima e ´a ser definida ser´ a local, a vari´vel global ficar´ inacess´ e come¸ar˜o a acontecer problemas a a a ıvel c aquando tentar se utilizar a vari´vel global, pois ela ser´ identificada pelo sistema como local. a a 131
  • 130. XM118 - Microcontroladores PIC18Cap´ ıtulo 5Aplica¸oes c˜5.1 Display de 7 segmentos Um dos modos mais comuns de apresentar informa¸˜o para o usu´rio em um sistema eletrˆnico ca a o´ atrav´s de displays de LEDs. Esse tipo de display nada mais ´ que um conjunto de LEDs numae e edisposi¸˜o que permite formar diferentes caracteres conforme s˜o acionados. Eles podem ser de ca adois tipos: anodo comum ou catodo comum e podem ser vistos na figura a seguir em (b) e (c). Afigura a mostra a nomenclatura comumente utilizada para os segmentos que comp˜e os d´ o ıgitos eo ponto.Figura 5.1: - Displays de LED: (a) disposi¸˜o dos segmentos, (b) catodo comum e (c) anodo cacomum Como pode ser observado na figura anterior, os displays de anodo comum tem seus segmentosacionados quando aplicamos ’0’, ficando o anodo (comum) na alimenta¸˜o. J´ os de catodo ca acomum s˜o acionado com ’1’ e o catodo (comum) ´ ligado a terra. No kit Pratic 628 contamos a ecom displays de catodo comum. Para escrevermos um determinado valor no display ´ necess´rio converter, ou decodificar, o e avalor originalmente em bin´rio para combina¸˜es que acionem o display corretamente. Isso pode a coser feito atrav´s de circuitos integrados feitos para esse fim, mas por motivo de economia de ecomponentes ´ mais interessante que essa convers˜o seja feita por software e o acionamento seja e afeito diretamente pelo microcontrolador. A convers˜o deve ser feita obedecendo a tabela a seguir. aEla corresponde a kit NEO 201 onde o display ´ catodo comum e os pinos RD0, RD1, ..., RD6, eRD7 est˜o ligados aos segmentos A, B, ..., G, DP (DP ´ o ponto decimal do display.) a e 132
  • 131. XM118 - Microcontroladores PIC18 Valor Catodo comum Anodo comum (Hexadecimal) g f e d c b a g f e d c b a 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 0 0 1 1 0 1 1 1 1 0 0 1 2 1 0 1 1 0 1 1 0 1 0 0 1 0 0 3 1 0 0 1 1 1 1 0 1 1 0 0 0 0 4 1 1 0 0 1 1 0 0 0 1 1 0 0 1 5 1 1 0 1 1 0 1 0 0 1 0 0 1 0 6 1 1 1 1 0 1 1 0 0 0 0 1 0 0 7 0 0 0 0 1 1 1 1 1 1 1 0 0 0 8 1 1 1 1 1 1 1 0 0 0 0 0 0 0 9 1 1 0 1 1 1 1 0 0 1 0 0 0 0 A 1 1 1 0 1 1 1 0 0 0 1 0 0 0 B 0 0 1 1 1 1 1 1 1 0 0 0 0 0 C 1 0 0 1 1 1 0 0 1 1 0 0 0 1 D 0 1 1 1 1 0 1 1 0 0 0 0 1 0 E 1 0 0 1 1 1 1 0 1 1 0 0 0 0 F 1 0 0 0 1 1 1 0 1 1 1 0 0 0 Tabela 5.1: Acionamento de display de sete segmentos. Tabelas como as apresentadas s˜o facilmente implementadas em C por vetores, uma vez que ao´ ındice do vetor representa a coluna de valor e os valores das posi¸˜es correspondem aos aciona- comentos do LED. Abaixo ´ apresentada uma declara¸˜o de vetor de constantes que correspondem e caa tabela acima para catodo comum. const char catodo[]={00111111, // 000000110, //101011011, //201001111, //301100110, //401101101, //501111101, //600000111, //701111111, //801100111}; //95.1.1 Displays multiplexados Uma t´cnica utilizada para reduzir custos de hardware ´ a de multiplexar displays. Essa e et´cnica se aproveita de uma caracter´ e ıstica da vis˜o humana chamada persistˆncia retiniana: a a eretina ”mant´m”uma imagem projetada presente por algum tempo depois que essa desaparece edo campo de vis˜o. Gra¸as as essa propriedade que podemos enxergar imagens se movendo na a cTV, que na verdade s˜o sequencias de imagens paradas. Fazendo uso dessa propriedade tamb´m a epodemos acionar sequencialmente diversos displays e dar a impress˜o a quem olha que todos est˜o a aacesos ao mesmo tempo. Basta acionar os diversos displays em sequˆncia de forma que todos sejam acionados a uma etaxa maior que 20 vezes por segundo. O circuito para fazer isso consiste em ligar os segmentos 133
  • 132. XM118 - Microcontroladores PIC18respectivos de cada display em paralelo e acionar o terminal comum (anodo ou catodo) um porvez. Dessa maneira com 7 pinos mais um pino por display eh poss´ assinar diversos a displays. ıvel5.1.2 Apresentando valores em display Como vimos, um display pode apresentar valores de 0 a 9 (ou at´ F se quisermos apresentar evalores em hexadecimal) e v´rios displays podem ser usados conjuntamente usando a t´cnicas da a emultiplexa¸˜o. Porem, como apresentar valores com 123 ou 5000? Para isso e necess´rio decompor ca auma vari´vel em unidades, dezenas, centenas, etc... e apresentar individualmente cada parte em aum digito. Os trechos de c´digo abaixo decomp˜em vari´veis do tipo char e int (n˜o sinalizados) o o a apara apresenta¸˜o em displays. A partir delas ´ poss´ desenvolver rotinas para outros tipos de ca e ıveldados.Exemplo: // *** Decomposi¸~o de unsigned char ca//unid, dez, cent s~o caracteres n~o sinalizado a acent = valor / 100;valor = valor % 100; dez = valor / 10;unid = valor % 10; // *** Decomposi¸~o de unsigned int ca//unid, dez, cent, mil e dezmil s~o caracteres n~o sinalizado a adezmil = valor / 10000;valor = valor % 10000;mil = valor / 1000;valor = valor % 1000;cent = valor / 100;valor = valor % 100; dez = valor / 10;unid = valor % 10;5.2 Buzzer O buzzer (buzina) nada mais ´ que um tipo de alto-falante simples, dimensionado para ter euma melhor resposta em um faixa de frequˆncia espec´ e ıfica. Atrav´s deles conseguimos gerar apitos e(beeps) para sinaliza¸˜es de diversos tipos. co Existem buzzers que s˜o auto oscilantes, aos quais basta aplicar uma tens˜o de alimenta¸˜o a a caque geram um tom. Outros precisam que se envie um sinal chaveado para produzir seu som. 134
  • 133. XM118 - Microcontroladores PIC185.3 Teclado Matricial Uma forma muito comum de usu´rio de um sistema microcontrolado passar informa¸˜es ao a cosistema ´ atrav´s de teclas. Em muitas aplica¸˜es o n´mero teclas existentes pode ser bastante e e co ugrande. Nesses casos, a leitura dessas teclas simplesmente conectando-as aos terminais do micro-controlador incorre na utiliza¸˜o de muitos terminais. Nessa aplica¸˜o ´ apresentado um sistema ca ca ede varredura que permite fazer um uso otimizado dos terminais do microcontrolador de foram areduzir o n´mero de terminais utilizados. u Esse processo permite realizar a leitura de um n´mero de teclas N utilizando menos de N uentradas. Isso ´ importante quando existe uma grande quantidade de teclas a serem lidas e n˜o e ase disp˜e tanta entrada. o Para o caso da placa de teclado existem 16 teclas e seus estados s˜o lidos com apenas 4 sa´ a ıdase 4 entrada, num total de 8 terminais. A varredura funciona da seguinte maneira: o teclado ´ eorganizado de forma a ter 4 colunas e 4 linhas, conforme a figura abaixo. Cada linha ´ ligada a euma entrada, e cada coluna a uma sa´ ıda. Existem resistores de pull-up nas entradas de formaque enquanto uma tecla n˜o for pressionada, a entrada ficando em aberto tem n´ l´gico alto. a ıvel oCome¸ando a varredura, ´ for¸ado ”0”na coluna 0 (C0), ”1”nas coluna 1 (C1), 2 (C2) e 3 (C3) c e ce s˜o lidas as quatro linhas (L0, L1, L2 e L3). Em seguida coloca-se ”1”em C0 e C2 e ”0”em aC1 e leem-se as linhas, e assim sucessivamente.. Nos momentos em que ´ feita a leitura das elinhas podemos determinar se uma tecla est´ pressionada e qual ´ essa tecla da seguinte maneira: a eadmitindo que a tecla est´ ligada a coluna que est´ em zero no momento a linha ligada a ela estar´ a a aem tamb´m. As linhas que cont´m teclas que n˜o est˜o pressionadas estar˜o em ”1”, devido aos e e a a aresistores de pull-up. Seguindo esse racioc´ ınio podemos gerar a seguinte tabela: C3 C2 C1 C0 L3 L2 L1 L0 Tecla 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 2 1 0 1 1 1 1 1 0 3 0 1 1 1 1 1 1 0 A 1 1 1 0 1 1 0 1 4 1 1 0 1 1 1 0 1 5 1 0 1 1 1 1 0 1 6 0 1 1 1 1 1 0 1 B 1 1 1 0 1 0 1 1 7 1 1 0 1 1 0 1 1 8 1 0 1 1 1 0 1 1 9 0 1 1 1 1 0 1 1 C 1 1 1 0 0 1 1 1 */F 1 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 1 #/E 0 1 1 1 0 1 1 1 D Tabela 5.2: D´ ıgitos/Linhas/Colunas de um teclado matricial. O circuito do teclado ´ apresentado na figura abaixo. e 135
  • 134. XM118 - Microcontroladores PIC18 Figura 5.2: Esquema Simplificado do Teclado No programa que utilizar leitura de teclado deve-se ativar os resistores de pull-up do portalB. Caso contr´rio, o teclado n˜o funcionar´ corretamente. a a a No Neo201 os teclado est´ ligado ao PIC seguindo a tabela baixo: a Teclado PIC I/O C3 PORTB,0 Sa´ıda C2 PORTB,1 Sa´ıda C1 PORTB,2 Sa´ıda C0 PORTB,3 Sa´ıda L0 PORTB,4 Entrada L1 PORTB,5 Entrada L2 PORTB,6 Entrada L3 PORTB,7 Entrada Tabela 5.3: Liga¸˜o entre o PIC e o teclado matricial. ca O fluxograma abaixo apresenta o processo de leitura para a primeira linha da fun¸˜o de leitura cade teclado. A partir dela pode-se desenvolver a fun¸˜o como um todo. ca 136
  • 135. XM118 - Microcontroladores PIC18 Figura 5.3: Fluxograma / Leitura do teclado.5.3.1 Interrup¸˜o por mudan¸a de estado na porta B ca c Como ´ muito comum a utiliza¸˜o de teclados por varredura, os microcontroladores PIC e caj´ tem uma funcionalidade pensada para permitir associar uma interrup¸˜o ao teclado. Essa a cafuncionalidade ´ a interrup¸˜o por mudan¸a de estado na porta B. O evento que sinaliza essa e ca cinterrup¸˜o eh a mudan¸a do estado dos pinos RB7, RB6, RB5 ou RB4. Observe que esses ca cpinos est˜o ligados a linhas do teclado, portanto s˜o entradas. Assim, qualquer tecla pressionada a acausar´ o pedido de interrup¸˜o. Ao se fazer o tratamento da interrup¸˜o faz-se a varredura para a ca cadeterminar qual a tecla lida. Mas aten¸˜o, para que esse procedimento funcione as colunas devem caser mantidas sempre em 0 quando fora do tratamento de interrup¸˜o. ca5.4 Display de cristal l´ ıquido Para que informa¸˜es do sistema sejam passadas ao usu´rio pode-se utilizar uma serie de co arecursos, por´m muitos deles n˜o s˜o nada male´veis e alguns pouco amig´veis. Por exemplo, um e a a a amodo bastante simples de se ter informa¸˜es do sistema ´ atrav´s de um painel com LED´s, cada co e eum indicando uma determinada situa¸˜o. Embora em muitas aplica¸˜es s´ isso seja suficiente, ca co oem muitas outras, principalmente quando a quantidade e variedade de informa¸˜es s˜o grande, co aesse m´todo se torna insuficiente. Outro m´todo tamb´m muito utilizado e que, por´m, aceita e e e euma grande variedade e quantidade de informa¸˜es ´ o Display de Cristal L´ co e ıquido (LCD - LiquidCristal Display). Existe uma grande variedade de LCDs no mercado. Existem displays gr´ficos e displays aque aceitam somente caracteres, esses ultimos chamados displays alfanum´ricos. Esses podem ´ eter diferentes quantidades de linha e colunas. LCD´s alfanum´ricos tem uma determinada ”in- e 137
  • 136. XM118 - Microcontroladores PIC18teligˆncia”, isto ´, possuem circuitos que controlam o display propriamente dito, e fazer com que e ealgo seja escrito no LCD ´ somente o trabalho de comunica-se com esses circuitos. e Para a comunica¸˜o com o display s˜o necess´rios 8 bits como via de dados (podendo tamb´m ca a a eser configurado para trabalhar com 4 bits), um bit EN (Enable - Habilita¸˜o) e um bit RS (sele¸˜o ca caentre dados e comandos). O display reconhece dois tipos de informa¸˜o na via de dados: comandos cae dados. Os comandos, que s˜o reconhecidos quando RS = 0, s˜o instru¸˜es para o display (limpar a a coa tela, ir para a segunda linha, ir para a d´cima coluna, etc... ); os dados s˜o caracteres a serem e aescritos no display, e s˜o indicados por RS = 1. A 4 bits da via de dados s˜o ligados aos bits 4 a a a7 do LCD. Abaixo ´ apresentada uma tabela resumida de c´digos hexadecimais de comandos do LCD. e o Descri¸˜o do ca Modo RS R/W C´digo do Comando o Comando (Hexadecimal) Controle do display Ativo (sem cursor) 0 0 0C Inativo 0 0 0A, 08 Limpeza do Display 0 0 01 com retorno do cursor Retorno do cursor ` a 0 0 02 1a linha e da mensagem a ` sua posi¸˜o inicial ca Controle do Cursor Ativo (ligado, fixo) 0 0 0E Inativo 0 0 0C Alternado 0 0 0F Desloc. ` esquerda a 0 0 10 Desloc. ` direita a 0 0 14 Retorno 0 0 02 Piscante 0 0 0D Sentido de deslocamento Para esquerda 0 0 04 do cursor na entrada Para direita 0 0 06 de um novo caractere Deslocamento da mensagem Para esquerda 0 0 07 com a entrada Para direita 0 0 05 de um novo caractere Deslocamento da mensagem Para esquerda 0 0 18 sem entrada de Para direita 0 0 1C novos caracteres Endere¸o da primeira c 1a Linha 0 0 80 posi¸˜o (` esquerda) ca a 2a Linha 0 0 C0 Tabela 5.4: C´digos hexadecimais de comandos do LCD. o Os endere¸os de cada posi¸˜o no display s˜o dados pela tabela abaixo. Para que um caractere c ca aseja escrito em uma determinada posi¸˜o, envia-se o valor dessa posi¸˜o como comando e em ca caseguida envia-se o caractere 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 Tabela 5.5: Endere¸os de posi¸˜o no display c ca 138
  • 137. XM118 - Microcontroladores PIC18 A figura abaixo apresenta o circuito b´sico LCD. a Figura 5.4: Esquema B´sico do Display a A tabela seguinte apresenta a fun¸˜o de cada um dos pinos do display e em como eles est˜o ca aligados ao PIC. Pino S´ ımbolo Fun¸˜o ca Liga¸˜o com o PIC ca 1 Vss GND - 2 Vdd +5V - 3 Vo Controle de contraste - 4 RS Sele¸˜o de modo ca PORTE, 0 5 R/W Leitura/Escrita PORTE, 2 6 EN Habilita¸˜o ca PORTE, 1 7 D0 PORTD, 0 8 D1 PORTD, 1 9 D2 PORTD, 2 10 D3 Via de PORTD, 3 11 D4 Dados PORTD, 4 12 D5 PORTD, 5 13 D6 PORTD, 6 14 D7 PORTD, 7 Tabela 5.6: Descri¸˜o dos pinos do display. ca 139
  • 138. XM118 - Microcontroladores PIC18A figura abaixo apresenta uma tabela de caracteres do display. Figura 5.5: Caracteres do display. 140
  • 139. XM118 - Microcontroladores PIC185.4.1 A biblioteca XLCD O compilador C18 vem com uma biblioteca gen´rica pra displays LCD chamada XLCD. Essa ebiblioteca possui as fun¸˜es listadas abaixo, quer permitem inicializar o display e escrever simples cocaracteres ou strings. Note que existem diferentes tipos de fun¸˜o dependendo se a informa¸˜o a ca caser escrita est´ na mem´ria de dados (RAM) ou na mem´ria de programa (FLASH). a o o Fun¸˜o ca Prot´tipos o Descri¸˜o ca BusyXLCD unsigned char Retorna 1 se o LCD estiver realizando BusyXLCD( void ); alguma opera¸˜o e 0 se estiver livre pra ca receber novos comandos. OpenXLCDD void OpenXLCD( unsigned Inicializa o LCD. char lcdtype ); putcXLCD void OpenXLCD( unsigned Escreve um caractere no LCD char lcdtype ); putsXLCD void putsXLCD( char *buffer ); Escreve uma string (da mem´ria RAM) no o LCD putrsXLCD void putrsXLCD( const Escreve uma string (da mem´ria FLASH) o rom char *buffer ); no LCD ReadAddrXLCD unsigned char ReadAddrXLCD( Lˆ o byte de endere¸o da mem´ria do e c o void ); controlador de LCD. ReadDataXLCD char ReadDataXLCD( void ); Lˆ um byte do controlador de LCD. e SetCGRamAddr void SetCGRamAddr( unsigned Aponta o endere¸o do gerador c char addr ); de caracteres SetDDRamAddr void SetDDRamAddr( unsigned ¨ Aponta para um endere¸o de dados do LCD. c char addr ); WriteCmdXLCD void WriteCmdXLCD( unsigned Escreve um comando no LCD char cmd ); WriteDataXLCD void WriteDataXLCD Escreve um byte no LCD ( char data ); Tabela 5.7: Comandos XLCD Para usar a biblioteca XLCD ´ necess´rio fazer algumas altera¸˜es nas defini¸˜es da biblioteca e a co copara o hardware que estiver sendo usado e recompilar os arquivos. Para facilitar, os arquivos quefazem uso dessa biblioteca no curso j´ sofreram essas altera¸˜es. Baseie-se neles para novos a coprojetos.5.5 Mem´rias EEPROM e FLASH o O PIC18F452 possui regi˜es de mem´ria n˜o-vol´til(que n˜o perdem seu conte´do quando o o a a a uo componente perde alimenta¸˜o): a mem´ria FLASH de programa e a mem´ria EEPROM de ca o odados. A mem´ria EEPROM ´ destinada a guardar dados necess´rios a execu¸˜o do programa que o e a can˜o se deseja perder com a falta de alimenta¸˜o. Essa regi˜o de mem´ria tem endere¸amento a ca a o cpr´prio e se encontra separa da mem´ria de programa (FLASH) e de dados (RAM). Para efeitos o opr´ticos, essa mem´ria se comporta como um perif´rico, isto ´, seu acesso ´ feito atrav´s de a o e e e eregistros de fun¸˜es especiais. co A mem´ria de programa tem a fun¸˜o principal de armazenar o programa a ser executado o ca 141
  • 140. XM118 - Microcontroladores PIC18 ´pelo Microcontrolador. E poss´ ıvel, no entanto, ler e escrever dados desta mem´ria de forma omuito semelhante ao que se faz com a mem´ria EEPROM. Desta maneira, regi˜es da FLASH n˜o o o ausadas pelo programa podem ser usadas como um espa¸o adicional de mem´ria n˜o vol´til para c o a adados. Pode-se ainda atualizar tabelas de constantes usadas no programa. E ainda, uma daspossibilidades mais interessantes, ´ criar atualizar o c´digo do microcontrolador estando o mesmo e oem opera¸˜o, usando alguma interface de comunica¸˜o (RS-232, RS-485, Ethernet, Modem, RF, ca caetc...) permitindo assim o r´pido upgrade de novas vers˜es de firmware. a o Tanto a EEPROM quanto a FLASH tem seu funcionado controlado pelo registro EECON1.Antes de analisar as particularidades de cada mem´ria, os bits deste registro s˜o apresentados: o a Figura 5.6: EECON1 • EEPGD : Sele¸˜o de mem´ria EEPROM ou FLASH: ca o – 1 = Acesso a mem´ria FLAHS de programa; o – 0 = Acesso a mem´ria EEPROM de dados; o • CFGS : Acesso aos bits de configura¸˜o: ca – 1 = Acesso aos bits de configura¸˜o; ca – 0 = Acesso a mem´ria EEPROM ou FLASH (conforme EEPGD); o • FREE : Habilita¸˜o do apagamento de coluna (quadro) da FLASH: ca – 1 = Apaga a coluna (quadro) da mem´ria de programa apontada por TBLPTR no o pr´ximo comando de leitura (o bit ´ zerado quando a opera¸˜o terminar); o e ca – 0 = Executa uma opera¸˜o de escrita simples.; ca • WRERR : Indicador de erro no processo de escrita da FLASH ou EEPROM: – 1 = Uma opera¸˜o de leitura foi interrompida antes do fim (por qualquer reset); ca – 0 = Opera¸˜o de escrita conclu´ com sucesso; ca ıda • WREN: Habilita¸˜o de escrita na FLASH/EEPROM: ca – 1 = Permite escrita; – 0 = Impede escrita; • WR: Controle de escrita: – 1 = Inicia uma escrita de EEPROM ou FLASH ou o apagamento de FLASH. Esses processos s˜o temporizados internamente e o bit ´ zerado automaticamente quando o a e processo termina. N˜o ´ poss´ zerar esse bit por software.; a e ıvel – Ciclo de escrita de EEPROM ou FLASH ou apagamento de FLASH completo.; 142
  • 141. XM118 - Microcontroladores PIC18 • RD: Controle de leitura: – 1 = Inicia o processo de leitura da EEPROM. Esse bit pode apenas ser setado em software. Se EEPGD = 1 (acesso a FLASH) esse pino n˜o pode ser setado; a – 0 = N˜o inicia o processo de leitura. a5.5.1 Mem´ria EEPROM o Os PIC18F452 e 18F4550 possuem 256 bytes de mem´ria EEPROM para dados. A EERPOM oserve para armazenar dados que podem ser alterados com a execu¸˜o do programa, mas que can˜o se pretende perder caso a tens˜o de alimenta¸˜o seja retirada Essa mem´ria ´ mapeada a a ca o eseparadamente das mem´rias RAM e FLASH, tendo endere¸os de 00h a FFh. A forma de acesso o ca mem´ria EEPROM do PIC18 ´ muito semelhante a da linha PIC16. A mem´ria EEPROM o e opode ser acessada byte a byte, tanto para leitura como para escrita. Na verdade, quando umaopera¸˜o de escrita ´ realizada, automaticamente ´ feito um ciclo de apagamento e escrita do ca e eendere¸o em quest˜o. c a a ´ A mem´ria EEPROM opera para leitura ou escrita em toda a faixa de tens˜o. E garantido oum tempo m´ ınimo de reten¸˜o de dados de 40 anos. A mem´ria suporta no m´ ca o ınimo 100.000 ciclosde escrita, sendo o valor t´ ıpico para condi¸˜es normais de opera¸˜o de 1.000.000 de ciclos. Cada co caopera¸˜o de escrita demora 4ms para ser executada. ca O acesso a mem´ria EEPROM ´ feita de forma indireta, atrav´s de registros de controle e o e epassagem de parˆmetros. Por isso, podemos considerar que seu comportamento ´ mais semelhante a eao de um perif´rico do que as demais mem´rias dispon´ e o ıveis no microcontrolador. Os registros decontrole s˜o EECON1 (descrito anteriormente) e EECON2 (que na verdade n˜o ´ um registro a a ereal, mas participa na sequˆncia de seguran¸a de grava¸˜o, como ser´ visto adiante). O registro e c ca aEEADR indica o endere¸o acessado. J´ o registro EEDATA permite manipular os dados, isto ´, c a eele cont´m o dado a ser gravado em uma opera¸˜o de escrita e o dado lido ap´s uma opera¸˜o de e ca o caleitura. A figura abaixo exemplifica esse processo. Figura 5.7: Processo de leitura e escrita da EEPROM A mem´ria EEPROM possui dois n´ o ıveis de seguran¸a, controlados pelos bits de configura¸˜o c caCPD e WRTD. CPD bloqueia leituras e escritas externas da EEPROM, liberando-as somente seo microcontrolador for totalmente apagado. J´ WRTD bloqueia escritas internas e externas. Em atodos os casos as opera¸˜es de leitura interna s˜o permitidas. co a 143
  • 142. XM118 - Microcontroladores PIC18Interrup¸˜o ca O bit EEIF ´ setado toda vez que uma opera¸˜o de escrita ´ terminada. Isso permite iniciar e ca eo processo de grava¸˜o da EEPROM e voltar ` execu¸˜o normal do programa, j´ que o tempo ca a ca ade grava¸˜o de 4 ms pode ser cr´ ca ıtico dependendo da aplica¸˜o. Contudo, ´ recomendado que se ca edesabilite as demais interrup¸˜es enquanto ´ feita uma escrita da EEPROM. co eFun¸˜es co O acesso ` mem´ria ´ feito seguindo uma sequˆncia obrigat´ria de comandos. O manual do a o e e omicrocontrolador apresenta rotinas Assembly para esse fim. Contudo, o compilador C18 n˜o provˆ a erotinas para acesso a EEPROM. Segue abaixo os c´digos fonte de rotinas que realizam leitura e oescrita da EEPROM interna do PIC.Exemplo: unsigned char ReadEEPROM (unsigned char address)//**************************************************************// ROTINA PARA LEITURA DA EEPROM// ENTRADA: address -> endere¸o de leitura da EEPROM c ´// SAIDA: Retorno -> Retorna o valor contido na EEPROM//**************************************************************{EEADR = address; // EEADR recebe o endere¸o cEECON1bits.CFGS = 0; // seleciona acesso a mem´rias oEECON1bits.EEPGD = 0; // seleciona acesso a EEPROMEECON1bits.RD = 1; // inicia o processo de escritareturn(EEDATA); // retorna o dado lido da EEPROM}voidWriteEEPROM (unsigned char address, unsigned char data)//*************************************************************// rotina p escrita na e2prom// entrada: address -> indica posi¸~o da mem´ria e2prom ca o// data -> dados que ser~o escritos a// sa´da: ı nulo//************************************************************{EEADR = address; // EEADR recebe o endere¸o cEEDATA = data; // EEDATA recebe o dadoEECON1bits.CFGS = 0; // seleciona mem´rias oEECON1bits.EEPGD = 0; // seleciona mem´ria EEPROM oEECON1bits.WREN = 1; // desliga prote¸~o de escrita caINTCONbits.GIE = 0; // desabilita interrup¸~es co 144
  • 143. XM118 - Microcontroladores PIC18EECON2 = 0x55; // sequ^ncia eEECON2 = 0xAA; // obrigat´ria oEECON1bits.WR = 1; // inicia processo de escritawhile(!PIR2bits.EEIF); // aguarda completar a escritaINTCONbits.GIE = 1; // reativa as interrup¸~es coPIR2bits.EEIF = 0; // zera o flag de escritaEECON1bits.WREN = 0; // liga a prote¸~o de escrita ca}Em diversas situa¸˜es ´ desej´vel incluir no c´digo fonte os dados a serem gravados na EEPROM co e a ono momento em que o microcontrolador ´ gravado. O processo para se fazer isso ´ apresentado e eno trecho de c´digo abaixo. O valor 0xF00000 indica para o gravador que esse dado deve ser oarmazena do na EEPROM.Exemplo: // Esta ´ a diretiva que inicia a regi~o de EEPROM e a#pragma romdata dataEEPROM = 0xF00000// V´rias formas de como se gravar um dado arom unsigned char FirstByte = 0x55;rom unsigned char SecondByte;rom unsigned char FirstArray[] = {0x00, 0x01, 0x02};rom unsigned char SecondArray[3];5.5.2 Mem´ria Flash o Ao contr´rio da mem´ria EEPROM, a mem´ria FLASH do PIC18 se comporta de forma a o obastante diferente da mem´ria do PIC16. Inclusive, existem algumas diferen¸as entre a forma de o copera¸˜o do PIC18F452 e o PIC18F4550. ca A mem´ria EEPROM pode ser lida byte a byte, contudo ela s´ pode ser escrita em blocos o ode mem´ria (8 bytes para o PIC18F452 e 64 bytes para o PIC28F4550). E ainda, ´ necess´rio o e aapagar um bloco de mem´ria inteiro (de 64 bytes) para se poder escrever, mesmo que em um ounico endere¸o. Em contra partida ao aumento da complexidade do processo temos um ganho´ cna velocidade de grava¸˜o, pois v´rios endere¸os s˜o gravados a cada comando de grava¸˜o. Esse ca a c a caprocesso demora tipicamente 2 ms, al´m de mais 2 ms do processo de apagamento, isto ´, o mesmo e etempo de se gravar um unico byte na EEPROM. Durante o tempo de grava¸˜o o programa n˜o ´ ca a´ executado.e O acesso de leitura de EEPROM ´ feito de forma indireta. Existe um ponteiros que aponta equalquer posi¸˜o da mem´ria de programa chamado TBLPTR, que ´ composto por trˆs registros: ca o e eTBLPTRU: TBLPTRL: TBLPTRL, sendo que 22 bits s˜o v´lidos para endere¸amento. A se a a cexecutar a instru¸˜o TBLRD de leitura de tabela (Table Read) o conte´do do endere¸o apontado ca u c´ transferido para o registro TABLAT. Nessa opera¸˜o a mem´ria ´ lida de 8 em 8 bits, enquantoe ca o eno fetch de instru¸˜es a leitura ´ de 16 em 16 bits. co e 145
  • 144. XM118 - Microcontroladores PIC18 Figura 5.8: Processo de leitura da FLASH O processo de escrita exige que antes o ”quadro”de 64 bytes seja apagado. Para isso o mesmo e ´ponteiro TBLPTR ´ carregado para apontar o quadro. E como se a mem´ria fosse divida em oquadros de 64 bytes e um endere¸o de 16 bits (os 16 bits v´lidos mais significativos de TBLPTR) c aindicassem o quadro, enquanto os 6 bits menos significativos s˜o ignorados na opera¸˜o. Em a caseguida ´ executado o processo de apagamento, fazendo o bit FREE de EECON1 igual a ’1’ e eexecutando um comando de escrita. Para grava¸˜o dos dados no PIC18F452 devem ser carregados 8 bytes atrav´s da instru¸˜o ca e caTBLWT de escrita de tabela (table write). Os dados n˜o s˜o gravados diretamente na mem´ria a a oFLASH, mas armazenados em um conjunto de registros de carga (holding registers), para poste-riormente serem gravados de uma s´ vez. Nessa opera¸˜o os 19 bits v´lidos mais significativos de o ca aTBLPTR apontam o bloco de 8 bytes a ser gravado enquanto os 3 bits menos significativos in-dicam o registro de carga que recebe os dados. Em seguida ´ realizada uma opera¸˜o de grava¸˜o e ca ca(com o bit FREE em ’0’). Um cuidado que se deve tomar ´ que TBLPTR deve apontar para o ebloco de 8 bits no momento da grava¸˜o. ca Para a grava¸˜o do PIC18F4550 o racioc´ ca ınio ´ o mesmo, por´m os blocos s˜o de 64 bytes. e e a Figura 5.9: Processo de escrita na FLASH(PIC18F452) Eventualmente pode-se desejar alterar um unico endere¸o da FLASH, preservando os demais ´ cconte´dos do quadro de 64 bytes no qual se encontra. Nesta situa¸˜o ´ necess´rio copiar todo o u ca e aquadro para mem´ria RAM, apag´-lo na FLASH, e re-gravar com o novo dado. o a Existem trˆs n´ e ıveis de prote¸˜o de c´digo da mem´ria flash, configurados atrav´s dos bits de ca o o egrava¸˜o: ca 146
  • 145. XM118 - Microcontroladores PIC18 • 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 c´digo que o executa a leitura estiver no mesmo setor de mem´ria do dado lido. o Uma observa¸˜o importante ´ que, apesar dos bits de configura¸˜o poderem ser alterados por ca e cainstru¸˜es de escrita na FLASH (fazendo o bit CFGS igual a 1) os bits de Code-Protect s´ s˜o co o azerados se houver uma instru¸˜o para apagar a mem´ria inteira; esse comando s´ pode ser dado ca o oexternamente por um gravador.Interrup¸˜o ca Do mesmo modo que para a EEPROM, o bit EEIF ´ setado toda a vez que o processo de egrava¸˜o ´ finalizado. No entanto, ao contr´rio do que ocorre com EEPROM, o programa para ca e ade ser executado enquanto dados s˜o gravados na FLASH, isto ´, obrigatoriamente o tempo de a egrava¸˜o ser´ um ”tempo morto”para o programa. Continua existindo a recomenda¸˜o de se ca a cadesativar as interrup¸˜es durante a grava¸˜o, apesar de que, pelos motivos apresentados acima, co case ocorresse uma interrup¸˜o esta n˜o poderia ser tratada. ca a 147
  • 146. XM118 - Microcontroladores PIC18Cap´ ıtulo 6Perif´ricos e Uma das caracter´ ısticas que explica o sucesso dos microcontroladores ´ a presen¸a de diversos e cperif´ricos. Esses componentes agregados ao core permitem realizar diversas tarefas, expandindo eas capacidades do componente. Como trabalham de forma independente do processador e possueminterrup¸˜es, eles realmente trabalham em paralelo com o processador na execu¸˜o das tarefas co cados programas. O PIC18F4550 ´ particularmente rico em perif´ricos e possui um perif´rico USB, e e eque ´ um dispositivo especial dentro da fam´ de microcontroladores. e ılia Nessa se¸˜o apresentaremos os principais perif´ricos do PIC18F4550. Al´m das descri¸˜es ca e e codo funcionamento dos perif´ricos s˜o apresentadas as bibliotecas de fun¸˜es de perif´ricos que e a co eacompanham o compilador C18. Como o foco do curso ´ a linguagem C, n˜o detalharemos o e afuncionamento dos bits de controle de perif´ricos, uma vez que isso ´ feito pelas fun¸˜es das e e cobibliotecas de cada perif´rico. Focaremos principalmente no funcionamento e configura¸˜o dos e caperif´ricos e no uso das fun¸˜es em C. Os eventos causadores de interrup¸˜o s˜o apresentados; os e co ca abits associados a cada interrup¸˜o s˜o apresentados no cap´ ca a ıtulo Interrup¸˜es. co6.1 Como usar a ajuda das bibliotecas do C18 Os detalhes de uso das bibliotecas de fun¸˜o s˜o descritas nos arquivos de ajuda do compilador, ca aque se encontram em C:MCC18DOCPERIPH-LIB. Esses arquivo tr´s a funcionamento adas fun¸˜es relativas a vers˜o do compilador a que se refere. Portanto, podem haver altera¸˜es nas co a cofun¸˜es se usados vers˜es mais novas do compilador. Deve-se estar atendo a isso e levar sempre co oos arquivos de ajuda como referˆncia. e Para ter acesso a esses arquivos v´ a at´ a pasta C:MCC18DOCPERIPH-LIB. O aspecto a edessa pasta ´ mostrado na figura a seguir. e 148
  • 147. XM118 - Microcontroladores PIC18 Figura 6.1: Aspecto da pasta PERIPH-LIB Observe que existe um arquivo de ajuda para cada biblioteca de perif´rico, que pode ser aces- esado diretamente ou atrav´s do arquivo principal que ´ C18HWeriferalIntro.htm. Os arquivos e ede ajuda est˜o escritos em inglˆs, obviamente, sendo necess´ria um conhecimento m´ a e a ınimo dessalinguagem para os compreender, assim como ´ para entender o manual de qualquer componente eeletrˆnico. o Para exemplificar o uso vamos explorar a biblioteca do conversor AD (AD Converter.HTM).Os demais arquivos sempre seguiram esse padr˜o. Temos a tela inicial abaixo, que apresenta um alink para o conte´do da ajuda. u Figura 6.2: Conte´do da ajuda. u 149
  • 148. XM118 - Microcontroladores PIC18 Na introdu¸˜o temos um resumo das fun¸˜es da biblioteca. ca co Figura 6.3: Resumo das bibliotecas. Um pouco al´m ´ apresentada uma tabela onde ´ poss´ e e e ıvel identificar qual a vers˜o de AD ado microcontrolador utilizado. Dependendo do perif´rico podem existir diferen¸as nas fun¸˜es e c coconforme o microcontrolador utilizado. Estar´ indicado para cada fun¸˜o a que vers˜o de perif´rico a ca a ese destina e a tabela deve ser sempre consultada para definir a vers˜o do perif´rico a ser usado. a ePor exemplo, na figura abaixo podemos identificar que o PIC18F4550 possui um ADC de vers˜o aADC V5. Figura 6.4: Vers˜o de AD do microcontrolador utilizado. a 150
  • 149. XM118 - Microcontroladores PIC18 Explorando um pouco mais a fun¸˜o OpenADC veremos como ´ a configura¸˜o do ADC. Para ca e cacada perif´rico existir´ uma fun¸˜o Open... que o inicializa atrav´s de uma s´rie de parˆmetros. e a ca e e aEssa fun¸˜o possuir´ um ou mais parˆmetros de entrada, que ser˜o uma opera¸˜o E entre diversas ca a a a caconstantes definidas, que representam as configura¸˜es poss´ co ıveis do perif´rico. Em C o trabalho ede configurar o perif´rico resume-se a definir esses parˆmetros de configura¸˜o, ficando a cargo e a cado compilador, atrav´s da fun¸˜o, de configurar bits e registros. Os diferentes parˆmetros s˜o e ca a aagrupados atrav´s do operador & que, como sabemos, realiza a opera¸˜o E bit-a-bit. A figura e caabaixo mostra como a fun¸˜o se apresenta na ajuda (note que essas fun¸˜o ´ a que se aplica a ca ca evers˜o ADC V5, portanto pode ser usada para o PIC18F4550). a Figura 6.5: Apresenta¸˜o da fun¸˜o ajuda. ca ca Transcrevemos a seguir a ajuda dessa fun¸˜o na integra, para se perceber seus aspectos prin- cacipais. Note que, ao final existe um exemplo do uso da fun¸˜o, muitas vezes util. ca ´ 2.4.3 OpenADC (ADC_V3, 4, 5, 6)For ADC_V3, ADC_V4, ADC_V5 and ADC_V6Function: Configure the A/D convertor.Include: adc.hPrototype: void OpenADC(unsigned char config, unsigned char config2 , unsigned char portconfig);Arguments: ConfigA bitmask that is created by performing either bitwise AND operation(’&’) or bitwise OR operation (’|’), configurable either way as shownin the example at the end of this file, with a value from each of thecategories listed below. These values are defined in the file adc.h. 151
  • 150. XM118 - Microcontroladores PIC18 A/D clock source: ADC_FOSC_2 FOSC / 2 ADC_FOSC_4 FOSC / 4 ADC_FOSC_8 FOSC / 8 ADC_FOSC_16 FOSC / 16 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 0 Tad ADC_2_TAD 2 Tad ADC_4_TAD 4 Tad ADC_6_TAD 6 Tad ADC_8_TAD 8 Tad ADC_12_TAD 12 Tad ADC_16_TAD 16 Tad ADC_20_TAD 20 Tad config2A bitmask that is created by performing either bitwise ANDoperation (’&’) or bitwise OR operation (’|’), configurableeither way as shown in the example atthe end of this file, with a value from each of the categories listedbelow.These values are defined in the file adc.h. Channel:For ADC_V3: ADC_CH0 Channel 0 ADC_CH1 Channel 1 ADC_CH2 Channel 2 ADC_CH3 Channel 3 ADC_CH4 Channel 4 ADC_CH5 Channel 5 ADC_CH6 Channel 6For ADC_V4: ADC_CH0 Channel 0 ADC_CH1 Channel 1 ADC_CH2 Channel 2 ADC_CH3 Channel 3For ADC_V5 and ADC_V6: ADC_CH0 Channel 0 152
  • 151. XM118 - Microcontroladores PIC18 ADC_CH1 Channel 1 ADC_CH2 Channel 2 ADC_CH3 Channel 3 ADC_CH4 Channel 4 ADC_CH5 Channel 5 ADC_CH6 Channel 6 ADC_CH7 Channel 7 ADC_CH8 Channel 8 ADC_CH9 Channel 9 ADC_CH10 Channel 10 ADC_CH11 Channel 11 ADC_CH12 Channel 12 ADC_CH13 Channel 13 ADC_CH14 Channel 14 ADC_CH15 Channel 15 A/D Interrupts: ADC_INT_ON Interrupts enabled ADC_INT_OFF Interrupts disabled A/D Vref+ and Vref- configuration: ADC_REF_VDD_VREFMINUS VREF+ = VDD & VREF- = Ext. ADC_REF_VREFPLUS_VREFMINUS VREF+ = Ext. & VREF- = Ext. ADC_REF_VREFPLUS_VSS VREF+ = Ext. & VREF- = VSS ADC_REF_VDD_VSS VREF+ = VDD & VREF- = VSS PortconfigFor ADC_V3:The value of portconfig can be any value from 0 to 127, few are definedbelow ADC_0ANA All digital ADC_1ANA analog:AN0 ADC_2ANA analog:AN0-AN1 ADC_3ANA analog:AN0-AN2 ADC_4ANA analog:AN0-AN3 ADC_5ANA analog:AN0-AN4 ADC_6ANA analog:AN0-AN5 ADC_7ANA analog:AN0-AN6For ADC_V4:The value of portconfig can be any value from 0 to 15, few are defined below ADC_0ANA All digital ADC_1ANA analog:AN0 ADC_2ANA analog:AN0-AN1 ADC_3ANA analog:AN0-AN2 ADC_4ANA analog:AN0-AN3For ADC_V5 and ADC_V6: 153
  • 152. XM118 - Microcontroladores PIC18 ADC_0ANA All digital ADC_1ANA analog:AN0 digital:AN1-AN15 ADC_2ANA analog:AN0-AN1 digital:AN2-AN15 ADC_3ANA analog:AN0-AN2 digital:AN3-AN15 ADC_4ANA analog:AN0-AN3 digital:AN4-AN15 ADC_5ANA analog:AN0-AN4 digital:AN5-AN15 ADC_6ANA analog:AN0-AN5 digital:AN6-AN15 ADC_7ANA analog:AN0-AN6 digital:AN7-AN15 ADC_8ANA analog:AN0-AN7 digital:AN8-AN15 ADC_9ANA analog:AN0-AN8 digital:AN9-AN15 ADC_10ANA analog:AN0-AN9 digital:AN10-AN15 ADC_11ANA analog:AN0-AN10 digital:AN11-AN15 ADC_12ANA analog:AN0-AN11 digital:AN12-AN15 ADC_13ANA analog:AN0-AN12 digital:AN13-AN15 ADC_14ANA analog:AN0-AN13 digital:AN14-AN15 ADC_15ANA All analogRemarks: This function resets the A/D-related registers to the POR state and then configures the clock, result format, voltage reference, port and channel.File Name: adcopen.cCode Example: 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 ecompatibilidade com o Timer 0 do PIC16. 154
  • 153. XM118 - Microcontroladores PIC18 O registro de controle do Timer 0 ´ T0CON. e A figura a seguir apresenta o diagrama em blocos do Timer 0 operando no modo 8 bits. Figura 6.6: Diagrama do Timer 0 no modo 8 bits J´ a figura abaixo mostra o diagrama do Timer 0 operando no modo 16 bits. a Figura 6.7: Diagrama do Timer 0 no modo 16 bits As diferen¸as entre a opera¸˜o no modo 8 bits e no modo 16 bits s˜o que (1) o flag de c ca ainterrup¸˜o seta no estouro de 8 bits e no estouro de 16 bits, dependendo do modo, e (2) no modo ca16 bits existe um sistema para grava¸˜o e leitura simultˆnea dos dois registros. ca a O sinal de clock do timer 0 pode vir tanto do sinal de clock interno (FOSC/4) quanto do pino ´RA4/T0CKI. E poss´ configurar se o timer incrementar´ na transi¸˜o de subida ou de descida. ıvel a ca A pr´-escala do timer 0 permite multiplicar o per´ e ıodo do sinal de entrada por 1, 2, 4, 8, 16,32, 64, 128, e 256.Interrup¸˜o ca O evento que ocasiona a interrup¸˜o ´ o overflow do timer 0, que depende da configura¸˜o do ca e catimer, 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 ebits (compat´ com PIC16) e leitura e escrita em 16 bits. No modo leitura e escrita em 8 bits ıvelos dois registros do timer s˜o alterados separadamente, conforme os valores s˜o carregados. No a amodo de 16 bits existe um sistema que carrega o valor de/para um registro auxiliar quando ´ feita e 155
  • 154. XM118 - Microcontroladores PIC18uma opera¸˜o de como byte menos significativo; dessa maneira as opera¸˜es acontecem de forma ca cosimultˆnea nos dois registros. a A figura abaixo apresenta o diagrama em blocos do timer 1 para o modo de acesso em 16 bits. Figura 6.8: Diagrama do Timer 1 Podemos escolher entre trˆs fontes de clock do timer 1: sinal externo, sinal de clock interno e(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 ´ necess´rio que o oscilador do timer 1 esteja habilitado. Tipicamente no oscilador e ado timer 1 ´ usado um cristal de 32.768 Hz; de cada terminal desse cristal deve ser ligado um ecapacitor de 27pF para GND. O timer 1 possui uma pr´-escala que permite multiplicar o per´ e ıodo ´ poss´ ainda sincronizar o sinal de clock, se provenientedo sinal de entrada por 1, 2, 4 e 8. E ıvelde fonte externa, com o ciclos de instru¸˜o do microcontrolador. O timer 1 pode servir de base cade tempo para o m´dulo CCP, dependendo da configura¸˜o deste. o ca Por fim, o timer pode ser ligado e desligado, isto ´, pode-se suspender o sinal aplicado ao econtador.Interrup¸˜o ca O evento associado a interrup¸˜o do timer 1 ´ o overflow da contagem de 16 bits. ca e6.2.3 Timer 2 O timer 2 ´ um temporizador de 8 bits. Ele apresenta algumas caracter´ e ısticas que diferemdos timers vistos anteriormente. Na figura a seguir pode-se observar o diagrama em blocos dessetimer. 156
  • 155. XM118 - Microcontroladores PIC18 Figura 6.9: Diagrama em blocos do timer 2 Em primeiro lugar, o timer 2 s´ pode operar com fonte de clock interna, portanto apenas no omodo timer. Ele possui uma pr´-escala com fatores de multiplica¸˜o de 1, 4 e 16. O sinal de sa´ e ca ıdada pr´-escala ´ aplicado ao contador propriamente dito, que ´ acess´ atrav´s do registro TMR2. e e e ıvel eO valor desse contador ´ comparado constantemente com o valor do registro PR2. Quando os edois valores s˜o iguais ´ gerado n´ l´gico alto no sinal de coincidˆncia (TMR2 Output), que ´ a e ıvel o e eusado como base de tempo para outros m´dulos, e o contador ´ zerado. O sinal de coincidˆncia ´ o e e eaplicado a uma p´s-escala que pode acumular de 1 a 16 ocorrˆncias, ativando o flag de interrup¸˜o o e caquando a contagem chagar ao valor estabelecido. N˜o h´ uma sinaliza¸˜o de overflow, que pode a a caser simulado fazendo PR2 igual a 0. O valor de PR2 n˜o ´ configurado por nenhuma fun¸˜o espec´ a e ca ıfica. Basta atribuir ao valordesejado ` vari´vel PR2, j´ definida no arquivo de cabe¸alho. a a a cInterrup¸˜o ca O evento que dispara a interrup¸˜o do timer 2 ´ a contagem de n eventos de coincidˆncia entre ca e eo timer 2 e PR2, sendo que n ´ configur´vel. e a6.2.4 Timer 3 O timer 3 funciona da mesma maneira que o timer 1, conforme pode ser observado na figuraa seguir. No modo contador o sinal de clock ´ aplicado ao mesmo pino do timer (RC0). Al´m e edisso, se o oscilador do timer 1 estiver ativo, tamb´m pode fornecer sinal de clock par o timer 3. e Figura 6.10: Diagrama do timer 3 157
  • 156. XM118 - Microcontroladores PIC18Interrup¸˜o ca O evento associado ` interrup¸˜o do timer ´ o overflow da contagem de 16 bits. a ca e6.2.5 Fun¸˜es co As fun¸˜es do C18 para uso dos timers est˜o contidas na biblioteca timers.h. A seguir ´ co a eapresentado um resumo das principais fun¸˜es. co Fun¸˜o ca Prot´tipos o Descri¸˜o ca OpenTimerx void OpenTimer0( unsigned char config ); Configura e ativa o timer x void OpenTimer1( unsigned char config ); void OpenTimer2( unsigned char config ); void OpenTimer3( unsigned char config ); CloseTimerx void CloseTimer0(void); Desativa o timer x void CloseTimer1(void); void CloseTimer2(void); void CloseTimer3(void); ReadTimerx unsigned int ReadTimer0( void ); Lˆ o timer x e unsigned int ReadTimer1( void ); unsigned char ReadTimer2( void ); unsigned int ReadTimer3( void ); WriteTimerx void WriteTimer0( unsigned int timer ); Escreve no timer x void WriteTimer1( unsigned int timer ); void WriteTimer2( unsigned char timer ); void WriteTimer3( unsigned int timer ); Tabela 6.1: Fun¸˜es da Biblioteca timers.h co6.3 Comparadores Anal´gicos o Quando trabalhamos com microcontroladores, podemos ter situa¸˜es onde desejamos uma cocompara¸˜o r´pida entre dois ou mais valores anal´gicos para que seja tomada alguma a¸˜o ca a o casem uma interven¸˜o do programa principal. Isso poderia ser vantajoso se fosse feito de forma caautom´tica pelo microcontrolador ao inv´s de se ter m´dulos A/D para fazer este tipo de tarefa. a e o No microcontrolador 18F4550 temos um perif´rico que possui essa caracter´ e ıstica. O modulode compara¸˜o anal´gica contem dois comparadores que podem ser configurados de v´rias formas ca o adiferentes. As entradas podem ser pinos multiplexados de entrada do portal A (RA0 at´ RA5), ebem como podem ser referencias de tens˜es obtidas dentro do microcontrolador. As sa´ o ıdas digitaispodem ser obtidas com valores normais ou inversos, estando dispon´ ıveis na sa´ do m´dulo ıda ocomparador ou ainda podem ser lidas atrav´s do registro de controle. e Abaixo temos o registro que serve para configura¸˜o da entrada e da sa´ do m´dulo com- ca ıda oparador dentro do microcontrolador.Registro CMCON: Aqui temos a descri¸˜o de cada parte do registro: ca • C2OUT: Armazena o valor de sa´ do comparador 2, onde: ıda 158
  • 157. XM118 - Microcontroladores PIC18 Figura 6.11: Registro de configura¸˜o do comparador ca – Quando C2INV for zero, temos o valor um quando o valor de entrada Vin+ do com- parador 2 for maior que Vin- e zero quando o valor de entrada de Vin+ for menor que Vin-; – Quando C2INV for um temos exatamente a situa¸˜o contr´ria da anterior. ca a• C1OUT: Armazena o valor de sa´ do comparador 1, onde: ıda – Quando C1INV for zero, temos o valor um quando o valor de entrada Vin+ do com- parador 1 for maior que Vin- e zero quando o valor de entrada de Vin+ for menor que Vin-; – Quando C1INV for um temos exatamente a situa¸˜o contr´ria da anterior. ca a• C2INV e C1INV: Como j´ pˆde ser notado, quando possuem valor um inverte o valor de a o sa´ do comparador C2 e C1 respectivamente e quando em zero n˜o inverte; ıda a• CM2:CM1:CM0: Estes trˆs registros s˜o respons´veis pela sele¸˜o do modo de funciona- e a a ca mento dos dois comparadores, onde sua aplica¸˜o pode ser vista abaixo: ca 159
  • 158. XM118 - Microcontroladores PIC18Figura 6.12: Configura¸˜es poss´ co ıveis do comparador. 160
  • 159. XM118 - Microcontroladores PIC18 • CIS: Este registro serve para selecionar a que pinos estar˜o conectados os Vin- dos com- a paradores C1 e C2. Assim, quando usamos CM2:CM1:CM0 = 110 temos: – Quando CIS for igual a um, C1 Vin- estar´ conectado a RA3/AN3/Vref+ e C2 conec- a tado a RA2/AN2/Vref-/CVref; – Quando CIS for igual a zero, C1 Vin- estar´ conectado a RA0/AN0 e C2 conectado a a RA1/AN1.6.3.1 Funcionamento do ComparadorValores de entrada e referˆncia do comparador e Abaixo podemos ver a figura de um dos comparadores, bem como a rela¸˜o entre os valores caanal´gicos colocados na entrada e o sinal digital. Quando a entrada anal´gica Vin+ ´ menor o o eque a entrada anal´gica Vin-, a sa´ do comparador tamb´m ter´ um valor de sa´ de n´ o ıda e a ıda ıvell´gico baixo. Quando a entrada anal´gica em Vin+ ´ maior que a entrada anal´gica Vin-, a o o e osa´ do comparador possui sua sa´ com um n´ l´gico alto. As ´reas em negrito da sa´ do ıda ıda ıvel o a ıdacomparador representam a incerteza do valor de sa´ devido aos offsets e o tempo de resposta ıdadas entradas. Figura 6.13: Representa¸˜o do funcionamento do comparador ca Dependendo ainda do modo do comparador, como visto anteriormente, um valor de tens˜o de areferencia interno ou externo pode ser usado para fazer as compara¸˜es de valores externos. O cosinal anal´gico presente em Vin- da figura anterior ´ comparado com o sinal em Vin+ e a sa´ o e ıdadigital do comparador ´ ajustado de acordo com a varia¸˜o dos mesmos. e ca Quando tens˜es de referencias externas s˜o usadas, o m´dulo comparador pode ser configurado o a opara ter os dois comparadores utilizando a mesma fonte de referencia externa ou ainda isto pode serindependente para cada um. Entretanto, o sinal de referˆncia deve estar entre VSS (Geralmente eGND) e VDD (Geralmente +5V) que podem ser aplicados a ambos os pinos do comparador. O comparador tamb´m pode usar as tens˜es internas do microcontrolador como valor de e oreferencia no m´dulo comparador, sendo que a referencia interna s´ est´ dispon´ para o modo o o a ıvelonde as quatro entradas s˜o multiplicadas para os dois comparadores. Neste modo, a tens˜o a ainterna de referˆncia ser´ aplicada ao Vin+ de ambos os comparadores. e a 161
  • 160. XM118 - Microcontroladores PIC18Tempo de resposta do comparador O tempo de resposta de um comparador ´ determinado pelo tempo m´ e ınimo, depois de sele-cionado uma nova tens˜o de referencia ou fonte de entrada, antes da sa´ do comparador ter uma a ıdasa´ v´lida. Se a tens˜o de referencia ´ modificada, o atraso m´ximo para a mudan¸a interna ıda a a e a cda referencia deve ser considerado quando estamos utilizando os valores de sa´ do comparador. ıdaDe outra forma, o atraso m´ximo dos comparadores seria usado. aSa´ do comparador ıda As sa´ ıdas dos comparadores s˜o lidas atrav´s do registro CMCON como pˆde ser visto acima. a e oEstes bits s˜o somente para leitura. A sa´ do comparador pode tamb´m estar ligada diretamente a ıda eaos pinos de entrada e sa´ RA4 e RA5. Quando habilitados, os multiplexadores da sa´ de ıda ıdacada um destes pinos s˜o utilizados para a sa´ do comparador. a ıda Figura 6.14: Descri¸˜o da sa´ do comparador ca ıdaInterrup¸˜o ca A interrup¸˜o acontece quando h´ uma mudan¸a no estado da sa´ de ambos os compara- ca a c ıdadores independentemente. Onde os registros modificados s˜o comentados no inicio deste cap´ a ıtulo.A interrup¸˜o pode ser verificada pelo o registro CMIF que representa a interrup¸˜o dos com- ca caparadores.Fun¸˜es co Para o uso do comparador o compilador C18 tr´s as fun¸˜es descritas abaixo, pertencentes a a cobiblioteca ANCOMP.h Para ter acessos as sa´ ıdas dos comparadores acessamo-los diretamente atrav´s dos bits CM- eCONbits.C1OUT e CMCONbits.C2OUT. 162
  • 161. XM118 - Microcontroladores PIC18 Fun¸˜o ca Prot´tipos o Descri¸˜o ca Open ancomp void OpenTimer0( unsigned char config ); Configura e ativa o comparador anal´gico. o Close ancomp void Close ancomp(void); Desativa comparador anal´gico o e sua interrup¸˜o. ca Tabela 6.2: Fun¸˜es da biblioteca ANCOMP.h co6.4 Conversor Anal´gico-Digital o A maioria dos dados obtidos de sensores comuns, tais como sensores de temperatura, inten-sidade luminosa, posi¸˜o, tens˜o, corrente e etc. fornecem sinais anal´gicos, ou seja, uma tens˜o ca a o aque ´ proporcional ` grandeza medida e que varia de forma cont´ e a ınua numa faixa de valores. No entanto, a maioria dos equipamentos modernos que fazem a aquisi¸˜o de dados destes casensores, trabalha com t´cnicas digitais. Isso significa que o dado anal´gico, preciso ser convertido e opara a forma digital. Para fazer esta convers˜o s˜o utilizados circuitos denominados conversores a aanal´gico-digital, ou simplesmente A/D, como seu pr´prio nome indica, realiza a convers˜o de o o asinais, cuja amplitude varia continuamente em sinais digitais correspondentes ` amplitude do sinal aoriginal. Para converter se faz o uso de um comparador de tens˜o ou corrente - variando de acordo com aa aplica¸˜o - que ir´ comparar o sinal anal´gico com o valor de referˆncia. ca a o e Desta forma os circuitos A/D devem preencher certos requisitos importantes quanto ao seudesempenho que s˜o: a • Quantiza¸˜o; ca • Taxa de Amostragem e; • Linearidade.6.4.1 Quantiza¸˜o ca Entre os dois valores extremos da escala de valores anal´gicos que devem ser convertidos para a oforma digital existem infinitos valores intermedi´rios, o que justamente caracteriza uma grandeza aque varia de forma an´loga ou anal´gica. Entretanto, n˜o podemos simplesmente representar a o ao valor anal´gico atrav´s de bits, pois para infinitos valores dever´ o e ıamos ter infinitos bits pararepresentar todas as varia¸˜es poss´ co ıveis. Para realizar a convers˜o de um sinal anal´gico para a oum valor digital deve ser definido o n´mero de bits em que o valor ser´ representado no universo u adigital e, a partir disso, definir em quantas faixas de valores digitais a faixa de valores anal´gicos oser´ dividida. a Assim, por exemplo, se utilizarmos na convers˜o 4 bits, teremos a possibilidade de representar aapenas 16 valores na escala total de valores anal´gicos, e se usarmos 8 bits poderemos representar o256 valores, conforme indica a a seguir. Se tivermos uma escala de 0 a 8 V, por exemplo, e usarmos 4 bits para a convers˜o, os a”degraus”da escada de convers˜o ter˜o 0,5 V de altura, o que significa que este conversor ter´ a a auma resolu¸˜o de 0,5 V. Se usarmos um conversor A/D de 8 bits (256 ”degraus”de resolu¸˜o) ca ca 163
  • 162. XM118 - Microcontroladores PIC18 para fazer um volt´ ımetro de 0 a 10 V, por exemplo, a resolu¸˜o deste volt´ ca ımetro ser´ de 10/256 aou pouco menos de 0,04 V. Figura 6.15: Escala de convers˜o a Este comportamento ”digital”pode ser observado em muitos instrumentos comuns, tais comoos mult´ ımetros digitais em que, se a grandeza medida estiver num valor intermedi´rio entre dois adegraus da resolu¸˜o do conversor A/D, o valor apresentado no display oscilar´ entre eles. ca a Evidentemente, tanto maior ´ a precis˜o na convers˜o quanto mais bits s˜o utilizados pelo e a a aconversor. Tipos com 8 a 16 bits s˜o comuns nas aplica¸˜es industriais e em medidas, dependendo da a coquantidade de ”passos”desejados na convers˜o ou a resolu¸˜o. Em aplica¸˜es de alta fidelidade a ca copode-se trabalhar com at´ 24 bits. e Um fator importante que deve ser escolhido n˜o se especificar o n´mero de bits de um conversor a u´ o ru´ inerente ao circuito. Por exemplo, supondo uma aplica¸˜o onde valores de tens˜o entree ıdo ca a0 e 5V devem ser convertidos e onde se sabe que existe um ru´ da ordem de 20mV no sinal a ıdoser convertido. Ora, se usarmos um conversor A/D de 12 bits, por exemplo, teremos passos dequantiza¸˜o de 5V/(212), isto ´, da ordem de 1,2 mV. Portanto teremos uma precis˜o de convers˜o ca e a aque n˜o representa uma precis˜o de medida, pois o sinal de interesse possui uma imprecis˜o gerada a a apelo ru´ ıdo. Aplica¸˜es com conversores A/D de 16 ou 24 bits exigem circuito extremamente imunes coa ru´ e interferˆncia para poder funcionar de forma correta. ıdo e6.4.2 Taxa de Amostragem Muitos processos de aquisi¸˜o de dados de sensores, de processos ou de outras aplica¸˜es pre- ca cocisam ser r´pidos. Uma placa de aquisi¸˜o de dados de um instrumento de medida que projete a cauma forma de onda, desenhe um gr´fico na tela de um PC representando um processo dinˆmico a aou mesmo um instrumento digital simples como um mult´ ımetro, deve estar constantemente con-vertendo sinais. Um oscilosc´pio digital, por exemplo, deve medir as tens˜es instantˆneas de um sinal em o o adiversos pontos ao longo de um ciclo para poder ”desenhar”esta forma de onda com precis˜o na atela. Se a frequˆncia do sinal for alta, isso implica a necessidade de se fazer amostragens num etempo extremamente curto. Os conversores A/D podem ser encontrados em tipos que tˆm frequˆncias de amostragem e enuma ampla escala de valores. Os tipos mais r´pidos tˆm suas velocidades especificadas em a e 164
  • 163. XM118 - Microcontroladores PIC18MSPS (Mega Samples Per Second ou Milh˜es Amostragens Por Segundo). o Uma m´quina industrial ou um instrumento de uso geral como um mult´ a ımetro pode usarconversores A/D relativamente lentos com taxas ou velocidades de amostragens de at´ algumas eunidades por segundo. Um mult´ ımetro digital comum, por exemplo, faz de 1 a 10 amostragenspor segundo apenas, dependendo do tipo. Todavia, um oscilosc´pio digital ou virtual que precise oobservar uma forma de onda de 10 MHz, deve, para ter uma defini¸˜o razo´vel, realizar pelo ca amenos 100 milh˜es de amostragens por segundo (10 pontos por ciclo). o O conceito de taxa de amostragem est´ ligado tamb´m ao Teorema da Amostragem, a de- a etermina¸˜o da frequˆncia m´xima na entrada de um conversor A/D e ao dimensionamento dos ca e achamados filtros anti-aliasing. Contudo n˜o entraremos em detalhes sobre esses assuntos, sendo aessa discuss˜o mais adequada para um curso de processamento de sinais. a6.4.3 Linearidade A curva de convers˜o da grandeza anal´gica para a forma digital deve ser linear para um a obom conversor. Isso significa que n˜o existem desvios na correspondˆncia entre o valor anal´gico a e oe a sa´ digital ao longo da escala de valores em que o conversor deve trabalhar. Em outras ıdapalavras, em um gr´fico onde um eixo representa os valores anal´gicos de entrada e o outro os a ovalores digitais de sa´ ıda, a fun¸˜o de transferˆncia deve ser idealmente uma reta. No entanto, na ca epr´tica podem ocorrer pequenos desvios, de acordo com o que mostra a figura abaixo. a Figura 6.16: Grau de Linearidade de Convers˜o a Portanto, quanto mais linear um converso A/D, melhor sua qualidade.6.4.4 Desenvolvimento Para fazer uma convers˜o de sinais anal´gicos para a forma digital existem diversas t´cnicas a o eque s˜o empregadas nos circuitos comerciais, muitas delas encontradas em circuitos integrados aque s˜o ”embutidos”em aplica¸˜es mais complexas, os quais fazem o controle de m´quinas e a co aequipamentos. Analisamos as tecnologias mais empregadas para esta finalidade come¸ando com co bloco comum a todos os conversores, que ´ o circuito de amostragem e manuten¸˜o (sample and e cahold). O valor dos sinais anal´gicos que devem ser convertidos para a forma digital corresponde a oum determinado instante, cuja dura¸˜o, em alguns casos, n˜o vai al´m de alguns milion´simos de ca a e esegundo. 165
  • 164. XM118 - Microcontroladores PIC18 Assim, um primeiro bloco importante do conversor ´ um circuito que lˆ o valor do sinal a e eser convertido num determinado instante e o armazena de modo que, mesmo que o sinal variedepois, os circuitos que fazem a convers˜o tˆm numa mem´ria seu valor. Este circuito ´ ilustrado a e o eem blocos na figura abaixo. O sinal a ser amostrado ´ amplificado por um buffer de entrada ecuja finalidade ´ n˜o carregar o circuito externo, e ao mesmo tempo proporcionar isolamento do e acircuito de convers˜o. a Figura 6.17: Diagrama em blocos do conversor A/D Na sa´ deste circuito temos uma chave eletrˆnica ou chaveador, que determina o instante ıda oexato em que a leitura do sinal deve ser feita. A chave fecha ent˜o por uma fra¸˜o de segundo a ca(numa frequˆncia que depende da taxa de amostragem) permitindo que o sinal carregue o capacitor eC. Assim, quando a chave abre, esperando a leitura seguinte, o capacitor tem armazenado o valorda grandeza anal´gica a ser convertida. Esta tens˜o no capacitor ´ mantida no circuito conversor o a eatrav´s de um buffer de sa´ durante o tempo que ele necessita para isso. e ıda Na figura abaixo temos um gr´fico que indica de que modo ` tens˜o de entrada varia e o a a acircuito de amostragem e reten¸˜o mant´m a sa´ constante durante os intervalos de convers˜o ca e ıda a(que correspondem aos ”degraus”). Figura 6.18: Escala de convers˜o a 166
  • 165. XM118 - Microcontroladores PIC186.4.5 Aplica¸˜o ca Existem v´rias formas de se construir conversores A/D, sendo que cada um tem a sua carac- ater´ ıstica de funcionamento que deve ser levada em conta, na hora de se construir e/ou escolherpara sua aplica¸˜o. Temos uma rela¸˜o de poss´ ca ca ıveis combina¸˜es: co • Conversor A/D com comparador em paralelo; • Conversor A/D com rampa em escada; • Conversor A/D de aproxima¸˜es sucessivas; co • Conversor A/D de rampa unica; ´ • Conversor A/D de rampa dupla e; • Sigma-Delta. O Sigma-Delta ´ uma das importantes t´cnicas de convers˜o A/D, utilizada em aplica¸˜es que e e a cose deseja uma alt´ ıssima velocidade de convers˜o, como nos DSPs (Digital Signal Processing). a Portanto, vimos que a convers˜o do sinal anal´gico para o digital sempre existe uma perda de a oinforma¸˜o seja ela de amplitude - caracter´ ca ıstica da quantidade de bits utilizados - ou de fase dosinal - caracter´ ıstica da taxa de amostragem empregada. Vimos que o erro m´ximo que pode ocorrer na quantiza¸˜o ´ de metade do valor de n´ da a ca e ıvelquantiza¸˜o assim sendo quanto maior for o n´mero de bits do conversor menor ser´ o seu erro. ca u a O erro de ”Aliasing”´ facilmente evitado utilizando o teorema da amostragem que ”Para que euma determinada frequˆncia f1 do sinal anal´gico seja ou possa ser completamente reconstitu´ e o ıdaa taxa amostral, no processo de digitaliza¸˜o, deve ser no m´ ca ınimo igual a 2*f1” Conhecidas as imperfei¸˜es da convers˜o podemos ent˜o saber quais os fatores que influem na co a aescolha de um conversor A/D e assim prever melhor os ajustes que sistema dever´ sofrer, pois j´ a a´ conhecida as suas fraquezas.e6.4.6 Usando o conversor ADC no microcontrolador O ADC (Analog-to-Digital Converter) converte a tens˜o em palavras de 10 bits. O PIC18F4550 apossui um ADC de 10 bits com 13 canais. Isso significa que existem v´rias entradas para o conver- asor AD, por´m somente uma entrada pode ser convertida por vez. As tens˜es de referˆncia para a e o econvers˜o, tanto superior (Vref+) como inferior (Vref-), podem ser selecionadas por software entre aas tens˜es de alimenta¸˜o e tens˜es presentes em determinados terminais do microcontrolador. o ca oEsses valores de tens˜o estipulam a faixa de valore a ser convertida. Por exemplo, sendo Vref+ a= +5V e Vref- = GND temos uma faixa de 5V, correspondendo o valor 0 a 0V e 1024 a 5V. Paradeterminar qual o valor correspondente dentro dessa faixa, basta aplicar uma simples regra detrˆs. e A figura abaixo mostra o diagrama em blocos do ADC. 167
  • 166. XM118 - Microcontroladores PIC18 Figura 6.19: Diagrama em blocos do ADC do PIC18F4550 O m´dulo ADC realiza todo o processo de ”Sample and Hold”(Amostragem e reten¸˜o). o caEsse processo ´ realizado quando uma determinada entrada ´ selecionada e inicia-se a carga e ede um capacitor interno CHOLD. Ap´s o tempo de carga do capacitor (THOLD) a entrada ´ o edesconectada e inicia-se o processo de convers˜o da tens˜o armazenada no capacitor, que ´ feito a a epelo m´todo de aproxima¸˜es sucessivas. e co Figura 6.20: Diagrama em blocos do ADC do PIC18F4550 A resistˆncia da fonte da tens˜o a ser convertida (Rs no circuito acima) n˜o deve ser superior e a aa 10kΩ , caso contr´rio o capacitor CHOLD pode n˜o ser completamente carregado quando se a ainiciar a convers˜o resultando em uma medida incorreta. a Al´m disso, o processo de convers˜o s´ poder´ ser iniciado depois de decorrido o tempo de e a o acarga do capacitor (THOLD). A ativa¸˜o do processo de convers˜o ser´ explicada mais adiante. ca a a O tempo total de amostragem, que vai do instante em que o canal a ser amostrado ´ selecionado eao momento em que o resultado da convers˜o ´ armazenado nos registros de resultado do AD, ´ a a e e 168
  • 167. XM118 - Microcontroladores PIC18soma do tempo de aquisi¸˜o com o tempo de convers˜o. O tempo de aquisi¸˜o varia em fun¸˜o da ca a ca catemperatura, da tens˜o de alimenta¸˜o e da resistˆncia da fonte do sinal a ser amostrado. Para a ca etemperaturas inferiores a 25o C, alimenta¸˜o de 5V o tempo de aquisi¸˜o encontra-se no intervalo: ca ca 11µs < TAQ < 20µs; Onde o menor tempo ´ conseguido para uma Rs = 0Ω e o maior para Rs = 10kΩ. e J´ o tempo de convers˜o depende do clock de convers˜o. Esse clock pode ser selecionado como a a aFosc/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 convers˜o pode aocorrer estando o microcontrolador em modo SLEEP. Finalmente, ap´s uma convers˜o ser conclu´ ´ necess´rio aguardar 2 per´ o a ıda e a ıodos do clock deconversa antes de se reiniciar o processo. Para a utiliza¸˜o do ADC s˜o utilizados 4 registros especiais ca a 1. ADRESH : registro de resultado do A/D (MSbits); 2. ADRESL : registro de resultado do A/D (LSbits); 3. ADCON0 : registro de controle 0; 4. ADCON1 : registro de controle 1.Interrup¸˜o ca O evento de interrup¸˜o do ADC ´ t´rmino de uma convers˜o completa. Para a implementa¸˜o ca e e a cade sistemas de amostragem, onde o intervalo entre as amostras ´ fixo, pode-se configurar um timer ecom interrup¸˜o que inicie o processo de convers˜o do ADC e habilitar a interrup¸˜o do ADC ca a capara tratar as amostras quando a convers˜o terminar. aFun¸˜es co O As fun¸˜es para uso do ADC est˜o na biblioteca adc.h. co a Fun¸˜o ca Prot´tipos o Descri¸˜o ca BusyADC 7 char BusyADC( void ); Retorna 1 se o ADC estiver realizando uma convers˜o. a CloseADC void CloseADC( void ); Desabilita o modo ADC. ConvertADC void ConvertADC( void ); Inicia uma convers˜o a OpenADC void OpenADC( unsigned char config, Configura o ADC unsigned char config2 ); SetChanADC void SetChanADC( unsigned char channel ); Seleciona um canal do ADC ReadADC int ReadADC( void ); Lˆ o resultado da convers˜o e a Tabela 6.3: Fun¸˜es de uso do ADC co 169
  • 168. XM118 - Microcontroladores PIC18 Um cuidado especial deve existir quando se deseja desativar as entradas anal´gicas para fazer ouso dos pinos a elas relacionados como I/O digitais. A fun¸˜o CloseADC() n˜o desativa as en- ca atradas anal´gicas, sendo necess´rio utilizar OpenADC(ADC 1ANA 0REF, ADC INT OFF). o a6.5 CCP - Captura, Compara¸˜o e PWM ca O m´dulo CCP (Captura, Compara¸˜o e PWM) permite realizar uma s´rie de fun¸˜es por o ca e cohardware. Para exemplificar a versatilidade desse perif´rico, podemos citar como exemplos de esua utiliza¸˜o: gera¸˜o de sinais de PWM, gera¸˜o de sinais anal´gicos, medida de frequˆncia, ca ca ca o emedida de largura de pulso, dentre v´rias. Existem trˆs modos de opera¸˜o: a e ca • Captura; • Compara¸˜o; ca • PWM (Modula¸˜o por largura de pulso). ca Esse perif´rico ´ controlado por dois registros que operam conjuntamente como um parˆmetro e e ade 16 bits (CCP1H e CCP1L) e um registro de controle (CCP1CON). Al´m disso, dependendo edo modo selecionado, o m´dulo CCP interagem com os timers. Por fim, existe uma interrup¸˜o o caassociada ao m´dulo CCP, que ´ disparada em situa¸˜es diferentes para cada modo. o e co6.5.1 Modo captura No modo captura, o valor do timer 1(TMR1H:TMR1L) ´ armazenado nos registros CCP1H:CCP1L equando ocorre um ”evento”. Al´m disso, o flag CCP1IF ´ setado, permitindo acionar a inter- e erup¸˜o. ca Esse evento pode ser a ocorrˆncia de: e • 1 transi¸˜o de descida no terminal RB3/CCP1; ca • 1 transi¸˜o de subida no terminal RB3/CCP1; ca • 4 transi¸˜es de subida no terminal RB3/CCP1; co • 16 transi¸˜es de subida no terminal RB3/CCP1. coPara opera¸˜o nesse modo, o terminal RB3/CCP1 deve estar configurado como entrada. O timer cadeve estar no modo temporizador ou no modo contador s´ ıncrono. O modo captura pode ser utilizado para determinar a diferen¸a de tempo entre dois eventos. cIsso pode ser feito de duas formas. No primeiro evento, o timer ´ reiniciado e no segundo, o valor ecapturado do timer 1 multiplicado pelo per´ ıodo do seu clock corresponde ao tempo transcorridoentre os dois eventos. Outra forma ´ deixar o timer 1 incrementado livremente e capturar seu evalor nos dois eventos. Fazendo uma subtra¸˜o entre os dois valores capturados, temos o tempo caentre os eventos. Esse procedimento pode ser utilizado para medir velocidade e frequˆncias (nesse ecaso temos o per´ ıodo e sabemos que f = 1/T). Os modos onde o evento de captura ´ a ocorrˆncia de 4 ou 16 transi¸˜es podem ser vistos e e cocomo tendo uma pr´-escala na entrada. Essa pr´-escala pode ser util para trabalhar com sinais e e ´de frequˆncias altas. Sua contagem s´ pode ser zerada com a mudan¸a de modo do CCP. e o c 170
  • 169. XM118 - Microcontroladores PIC18 A figura abaixo apresenta o diagrama em blocos para o modo de captura. Figura 6.21: Diagrama do modo captura Durante o modo SLEEP, se ocorrer um evento, o flag ´ setado, mas o valor do Timer 1 n˜o ´ e a ecapturado, pois o timer 1 (como temporizador ou contador s´ ıncrono) n˜o opera durante o SLEEP. aInterrup¸˜es co O bit CCPxIF quando ocorre um evento de captura.Fun¸˜es co As fun¸˜es associadas ao modo de captura est˜o na biblioteca capture.h e s˜o apresentadas a co a aseguir lembrando que o PIC18F4550 possui um m´dulo CCP2 convencional e um m´dulog ECCP1 o o(Enhanced CCP). Fun¸˜o ca Prot´tipos o Descri¸˜o ca CloseCapture2 void CloseCapture2( void ); Desativa o modo captura (CCP) OpenCapture2 void OpenCapture2(unsigned char config); Configura o m´dulo de o captura (CCP) ReadCapture2 unsigned int ReadCapture2( void ); Lˆ o valor capturado e CloseECapture1 void CloseECapture1( void ); Desativa o modo captura (ECCP) OpenECapture1 void OpenECapture1(unsigned char config); Configura o m´dulo de captura o (ECCP) ReadECapture1 unsigned int ReadECapture1( void ); Lˆ o valor capturado (ECCP) e Tabela 6.4: Fun¸˜es de Captura co 171
  • 170. XM118 - Microcontroladores PIC186.5.2 Modo compara¸˜o ca Nesse modo, o par de registros do m´dulo CCP (CCP1H:CCP1L) ´ constantemente comparado o ecom o par de registros do timer 1 (TMR1h:TMR1L). Quando eles coincidem, ´ setado o flag eCCP1IF. Al´m disso, podemos zerar o timer 1 ou for¸ar um estado no pino RB3/CCP1. Quando e coptamos por zerar o timer 1, o funcionamento ´ muito parecido com o do timer 2 em rela¸˜o ao e caregistro PR2. Quando se seleciona os modos que for¸am estados (’1’ ou ’0’) no pino RB3/CCP1, co pino fica no estado oposto ao desejado at´ que ocorra a coincidˆncia. Nesse caso, o pino deve e eser configurado como sa´ ıda. A figura a seguir apresenta o diagrama do modo compara¸˜o. ca Figura 6.22: Diagrama do modo compara¸˜o caInterrup¸˜o ca O bit CCPxIF ´ setado quando o Timer 1 e o valor de CCPRxH:CCPRxL coincidem. eFun¸˜es co A fun¸˜es de compara¸˜o, presentas na biblioteca compare.h s˜o apresentadas a seguir, lem- co ca abrando que o PIC18F4550 possui um m´dulo CCP2 convencional e um m´dulog ECCP1 (En- o ohanced CCP): Fun¸˜o ca Prot´tipos o Descri¸˜o ca CloseCompare2 void CloseCompare1( void ); Desativa o modo captura (CCP) OpenCompare2 void OpenCapture1(unsigned char config); Configura o m´dulo CCP o C em modo de captura CloseECompare1 void CloseCompare1( void ); Desativa o modo captura (CCP) OpenCompare1 void OpenCapture1(unsigned char config); Configura o m´dulo CCP o em modo de captura Tabela 6.5: Fun¸˜es de compara¸˜o co ca 172
  • 171. XM118 - Microcontroladores PIC186.5.3 Modo PWM No modo PWM o m´dulo CCP permite utilizar sinais modulados em largura de pulso (PWM - oPulse Width Modulation), que consiste em representar um valor pelo duty-cicle (isto ´, tempo em ealto) de um trem de pulsos de frequˆncia fixa. Por exemplo, admitindo-se que trabalhando com eo PWM do PIC, sua resolu¸˜o m´xima ´ de 10 bits, ou seja, 1023 correspondem a 100% de duty- ca a ecicle. Usando uma regra de trˆs simples, podemos determinar a quanto que corresponde 30%, e25%, 99%, etc. Este processo ´ chamado de modula¸˜o porque permite carregar uma informa¸˜o e ca ca(expressa no duty-cicle) em uma portadora (trem de pulsos). A maior parte das aplica¸˜es de PWM para microcontroladores se aproveita da propriedade coda energia de um sinal retangular ser proporcional ao seu duty-cicle (a energia de um sinal est´ arelacionada com a ´rea entre o sinal e o eixo do tempo). Vamos imaginar que um sinal PWM a´ aplicado a uma lˆmpada DC. Um duty-cicle de 100% (sinal sempre em ’1’) far´ a lˆmpadae a a aacender em sua potˆncia m´xima; j´ um sinal com 70% de tempo em alto entrega a lˆmpada 70% e a a ada potˆncia m´xima, e assim por diante. Essa propriedade ´ utilizada no acionamento de cargas e a eDC, controle de motores, etc. Outra caracter´ ıstica importante do PWM ´ que, se o sinal for filtrado, podemos obter n´ e ıveisanal´gicos, tamb´m proporcionais ao duty-cicle. Isso permite que geremos desde n´ o e ıveis anal´gicos ofixos at´ sinais mais complexos, como tons DTMF (de telefonia). e O PWM precisa de uma base de tempo que dar´ a frequˆncia do sinal. O m´dulo CCP utiliza a e oo Timer 2 para conseguir essa base. Isso pode ser observado no diagrama de blocos do PWM. Figura 6.23: Diagrama em blocos no modo PWM A gera¸˜o do sinal PWM se d´ da seguinte maneira. Cada vez que TMR2 coincide com PR2, ca ao pino RB3/CCP1 ´ setado e TMR2 ´ reiniciado. Isso nos d´ a frequˆncia do sinal. O duty-cicle ´ e e a e econseguido comparando o CCPR1H concatenado com dois bits de latch com TMR2 concatenadocom mais dois bits, da pr´-escala ou gerados pelos ciclos Q; Quando h´ a coincidˆncia, o pino e a eRB3/CCP1 ´ zerado. As concatena¸˜es nos d˜o 10 bits de resolu¸˜o. Esse processo pode ser e co a caobservado na figura a seguir. O registro CCPR1H n˜o ´ acess´ para leitura no modo PWM. O duty-cicle ´ configurado a e ıvel e 173
  • 172. XM118 - Microcontroladores PIC18atrav´s de CCP1L e dos bits 4 e 5 de CCP1CON. Esse valor ´ atualizado em CCPR1H e nos bits e ede latch a cada per´ ıodo. Figura 6.24: Sinal PWM Configurar o PWM ´ estabelecer sua frequˆncia e seu duty-cicle. e e De posse desses doisparˆmetros, podemos calcular os valores em cada registro. a O per´ ıodo ´ o inverso da frequˆncia e ´ configurado atrav´s de PR2 e da pr´-escala do TMR2 e e e e ee pode ser calculado atrav´s da equa¸˜o a seguir: e ca Tpwm = (P R2 + 1) × 4 × Tosc × (T M R2P S) (6.1) Onde: • TPWM : per´ ıodo do PWM • TOSC: per´ ıodo do oscilador • TMR2PS: fator de pr´-escala do timer 2 e Para encontrar o valor de PR2 a partir de um dado valor de per´ ıodo pode ser usada a equa¸˜o caabaixo Valor de PR2 deve ser inteiro e menor que 256. Logo, em alguns casos ser´ necess´rio a aarredondar esse valor, o que gerar´ um pequeno erro entre a frequˆncia desejada e a real. Com a evalores diferentes de pr´-escala podemos chegar a valores menores que 256 e a aproxima¸˜es que e colevem a um erro menor. Tpwm P R2 = −1 (6.2) 4 × Tosc × T M R2P S O duty-cicle por sua vez ´ configurado atrav´s de CCPR1L e dos bits 4 e 5 de CCP1CON. e eGeralmente se especifica o duty-cicle em porcentagem do tempo total. Assim, dado um duty-cicleem porcentagem (DC%), o tempo correspondente a ele ´ encontrado pela equa¸˜o abaixo. e ca DC% TDC = TP W M × (6.3) 100 ou pela equa¸˜o: ca TDC = DC[9 : 0] × Tosc × T M R2P S (6.4) Onde: 174
  • 173. XM118 - Microcontroladores PIC18 • TPWM : per´ ıodo do PWM; • TOSC: per´ ıodo do oscilador; • TMR2PS: fator de pr´-escala do timer 2; e • DC[9:0] : ´ um valor de 10 bits obtido acrescentando os bit 5 e 4 a esquerda de CCP1RL. e Dispondo do tempo do duty-cicle, o valor de DC[9:0] ´ dado pela equa¸˜o abaixo. Esse valor e cadeve ser inteiro e menor que 1023. O valor da pr´-escala deve ser o mesmo utilizado para a edetermina¸˜o do per´ ca ıodo. TDC DC[9 : 0] = (6.5) Tosc × T M R2P SO per´ ıodo (e consequentemente a frequˆncia) ´ dado pelo registro PR2. Para frequˆncias altas e e e(per´ ıodos pequenos) existe uma perda da resolu¸˜o, isto ´, na verdade trabalhamos com menos ca ede dez bits. Por exemplo, se o valor usado para PR2 for 63, os dois bits mais significativos s˜o a”perdidos”e 100% de duty-cicle corresponder´ ´ 255. Teremos um PWM de 8 bits. A resolu¸˜o, aa cadada em bits, para uma dada frequˆncia de PWM ´ dada pela equa¸˜o abaixo: e e ca Fosc log( Fpwm ) RESOLU CAO = (6.6) log(2)6.5.4 EPWM O EPWM (Enhanced PWM, PWM avan¸ado) em um modo de opera¸˜o que o PWM assume c caalgumas caracter´ ısticas especiais para acionamento de pontes de transistores ou FET, com afun¸˜o de chaveamento usadas em UPS e controle de motores. Esse modo n˜o ser´ tratado neste ca a acurso.Interrup¸˜o ca N˜o h´ interrup¸˜o associada ao modo PWM. a a caFun¸˜es co Fun¸˜o ca Prot´tipos o Descri¸˜o ca ClosePWM2 void ClosePWM2( void ); Desativa o canal PWM (CCP) OpenPWM2 void OpenPWM2( char period ); Configura o canal PWM (CCP) SetDCPWM2 void SetDCPWM2( unsigned Escreve o Duty-cycle (CCP) int dutycycle ); CloseEPWM1 void CloseEPWM1( void ); Desativa o canal PWM (ECCP) OpenEPWM1 void OpenEPWM1( char period ); Configura o canal PWM (ECCP) int dutycycle ); SetDCEPWM1 void SetDCEPWM1(unsigned Escreve o Duty-cycle (ECCP) SetOutputEPWM1 void SetOutputEPWM1 ( Configura o modo de sa´ do ECCP ıda unsigned char outputconfig, unsigned char outputmode); Tabela 6.6: Fun¸˜es para PWM co 175
  • 174. XM118 - Microcontroladores PIC186.6 EUSART - Porta Serial Ass´ ıncrona6.6.1 Comunica¸˜o serial ass´ ca ıncrona A comunica¸˜o entre circuitos eletrˆnicos digitais pode ser feita basicamente de duas maneiras: ca ode forma paralela ou serial.6.6.2 Comunica¸˜o paralela ca No envio de dados de forma paralela todos os bits que comp˜e uma palavra s˜o transmitidos o aao mesmo tempo e por diferentes condutores. O exemplo cl´ssico s˜o os barramentos dos PC´s, a afacilmente reconhec´ ıveis pelas diversas trilhas que correm paralelas na placa de circuito impresso. Esse tipo de comunica¸˜o exige pouco ou nenhum preparo para o envio, visto que os dados cas˜o tratados dentro do processador de forma paralela. Outra caracter´ a ıstica dessa forma de co-munica¸˜o ´ a velocidade. Como a informa¸˜o toda ´ enviada de uma s´ vez, a transferˆncia de ca e ca e o einforma¸˜es ocorre em tempo m´ co ınimo. As limita¸˜es dessa t´cnica surgem quando as distˆncias entre os pontos que se deseja comu- co e anicar aumentam. Em primeiro lugar para interconex˜o de equipamentos em distˆncias grandes o a auso de comunica¸˜o paralela exige conectores de muitos pinos e cabos de v´rias vias.Como pode ca aser intu´ ıdo, o custo dos cabos e conectores ´ proporcional ao n´mero de vias do cabo. e u Al´m do custo dos cabos outro impedimento para a comunica¸˜o paralela s˜o os efeitos reativos e ca a(capacitivos e indutivos) dos meios de comunica¸˜o paralela (sejam eles cabos ou trilhas numa caplaca). Em altas taxas de transmiss˜o devemos considerar os condutores a luz da teoria de guias ade ondas, que de forma resumida nos diz que em altas frequˆncias um fio ou uma trilha n˜o devem e aser encarados como um curto-circuito, mas como uma associa¸˜o de resistˆncias, capacitˆncias e ca e aindutˆncias. Em virtude disso os sinais podem se degradas por interferˆncia m´tua e tamb´m, a e u epelas pr´prias caracter´ o ısticas do meio. Outro ponto importante ´ o ru´ (interferˆncia) inserido e ıdo enos condutores e proveniente do onde eles est˜o. a Novamente o maior n´mero de condutores agrava a situa¸˜o. Esses fatos s˜o inerentes a u ca aqualquer linha de transmiss˜o de sinais el´tricos, mas o agravamento dos problemas na comu- a enica¸˜o paralela ´ que cada linha de transmiss˜o ´ um meio diferente das demais, ou seja, cada ca e a ebit ´ degradado de forma diferente. Isso pode acarretar problemas na comunica¸˜o de dados e caa distˆncias longas (o crit´rio para dizer se uma distˆncia ´ ”grande”´ sua compara¸˜o com o a e a e e cacomprimento de onda do sinal que se transmite). Assim limita-se a comunica¸˜o para pequenas cadistˆncias em alta velocidade (por exemplo, barramentos do PC) ou a distˆncias maiores com a abaixa taxa de transmiss˜o (por exemplo, comunica¸˜o entre PC e impressora). a ca6.6.3 Comunica¸˜o serial ca A forma encontrada para solucionar os problemas apresentados pela comunica¸˜o paralela a foi catransmitir os bits de forma serial, ou seja, um bit de cada vez. Quanto ao quesito custo essa formade transmiss˜o ´ bastante eficiente, porque em sua forma mais simples pode ser implementada a ecom apenas dois condutores, um para envio de dados e outro de referˆncia. e A comunica¸˜o serial tamb´m traz vantagens no aumento das taxas e das distˆncias de co- ca e amunica¸˜o. T´cnicas para a redu¸˜o de ru´ e degrada¸˜o do sinal podem ser aplicadas mais ca e ca ıdo ca 176
  • 175. XM118 - Microcontroladores PIC18facilmente quando a informa¸˜o transita por um unico caminho. Al´m disso, n˜o h´ problemas ca ´ e a aem os bits serem afetados de forma diferente, pois s˜o tratados separadamente. a Em contrapartida, a comunica¸˜o serial demanda um circuito mais complexo, uma vez que a cainforma¸˜o que ´ tratada de forma paralela pelo processador deve ser convertida para o formato ca eparalelo. Pelo mesmo motivo, a transmiss˜o ´ mais lenta que a paralela (observando apenas o a etempo do envio de uma informa¸˜o). O principal problema a ser resolvido na comunica¸˜o serial, ca capor´m, ´ saber quando um bit termina e quando come¸a o pr´ximo. E ainda, os cabos n˜o deixam e e c o ade serem guias de ondas, apresentando os problemas discutidos acima e mantendo sempre umarela¸˜o de compromisso entre o comprimento dos cabos e a taxa transmiss˜o m´xima. ca a a Por todas essas raz˜es a quase totalidade das conex˜es entre equipamentos ´ feita por comu- o o enica¸˜o serial. Entre as formas de comunica¸˜o serial mais difundida podemos citar o EIA-232, ca caEIA-485, o USB e mesmo as LAN´s Ethernet. A comunica¸˜o serial pode ser feita de duas maneiras principais, a s´ ca ıncrona e ass´ ıncrona, quediferem na forma de localizar cada bit em uma ”rajada”. Como o pr´prio nome diz, na comunica¸˜o serial s´ o ca ıncrona existe um sincronismo, nesse casoentre o sinal transmitido e um clock enviado juntamente. O clock permite determinar o exatomomento em que o bit do sinal deve ser lido, evitando assim erros na recep¸˜o e a correta camontagem do dado na forma paralela. Entres as formas de comunica¸˜o serial s´ ca ıncrona podemoscitar o I2C e o SPI, que n˜o ser˜o tratados aqui. a a J´ na comunica¸˜o ass´ a ca ıncrona nenhuma referencia de onde o bit deve ser lido ´ enviado com o esinal. A solu¸˜o nesse caso ´ ”adivinhar”o momento certo de ler o bit. Para isso ´ necess´rio que ca e e ao receptor saiba a taxa de transmiss˜o e portanto a dura¸˜o de cada bit. Ainda que o transmissor a caindique de alguma forma onde come¸a e onde termina a transmiss˜o. Dessa maneira, o receptor c aaguarda a chegada da indica¸˜o de in´ ca ıcio, chamado start bit ou bit de in´ e quando esse ´ lido ıcio eele sabe que a cada intervalo de tempo, chamado tempo de bit (Tb) um bit novo est´ presente ana via de comunica¸˜o. Para minimizar o risco de erro a leitura ´ feita na metade da dura¸˜o do ca e cabit ou s˜o feitas algumas amostras durante esse intervalo de tempo. a Aparentemente, se procedermos dessa forma, bastaria enviar um start bit e para sincronizarreceptor e transmissor e depois poderia vir uma sequˆncia infinita de bits. Na verdade, por´m, e eisso n˜o ocorre, pois sempre existira uma pequena diferen¸a entre as bases de tempo de TX e a cRX. Como uma amostra ocorre Tb ap´s a anterior, se esse tempo estiver errado, o erro vai se oacumulando at´ que se perca o sincronismo. Por exemplo, se o rel´gio de RX for 5% mais lento e oou mais r´pido que o de TX a cada 20 bits recebido o sincronismo ser´ perdido. Na pr´tica os a a adados s˜o enviados em ”pacotes”de alguns bits, iniciados por um start bit e terminados por um astop bit. O stop bit tem a fun¸˜o de marcar o fim do pacote, para que um bit de informa¸˜o n˜o ca ca aseja confundido com um novo start bit. O formato gen´rico utilizado em um ”pacote”de comunica¸˜o serial ´ apresentado na figura e ca eabaixo.6.6.4 EUSART do PIC18F4550 O m´dulo EUSART do PIC18F4550 permite gerar sinais de comunica¸˜o ass´ o ca ıncrona segundoo exposto acima. Ela ´ capaz de operar em modo full-duplex (transmiss˜o e recep¸˜o simultˆneas) e a ca ae gerar uma taxa de transmiss˜o/sincronismo de FOSC/4 bits por segundo. a 177
  • 176. XM118 - Microcontroladores PIC18 Figura 6.25: Comunica¸˜o Ass´ ca ıncrona A EUSART do PIC ´ controlada pelos registros: e • TXSTA: Controle de transmiss˜o; a • RCSTA: Controle de recep¸˜o; ca • BAUDCON: Controle da taxa de transmiss˜o; a • SPBRGH: SPBRG: Gerador de taxa de transmiss˜o. a Operando em modo ass´ ıncrono, a EUSART ´ composta de um m´dulo de recep¸˜o e um de e o catransmiss˜o que trabalham de forma independente, apenas compartilhando o mesmo gerador de ataxa de recep¸˜o/transmiss˜o. As figuras abaixo apresentam os diagramas em blocos do sistema ca ade recep¸˜o e o diagrama em blocos do m´dulo de transmiss˜o. ca o a Figura 6.26: M´dulo de Recep¸˜o o caGerador de taxa de transmiss˜o a Para gerar a temporiza¸˜o necess´ria para a transmiss˜o e a recep¸˜o, existe um gerador de ca a a cataxa de transmiss˜o (baud rate). Esse gerador deve ser configurado para a taxa de transmiss˜o a adesejada levando-se em considera¸˜o a frequˆncia de clock do oscilador principal. ca e 178
  • 177. XM118 - Microcontroladores PIC18 Figura 6.27: M´dulo de Transmiss˜o o a O gerador de baud rate pode operar em dois modos, taxas altas e taxas baixas. Conforme asele¸˜o do modo ´ usada uma das seguintes equa¸˜es: ca e co • Taxas altas (USART BRGH HIGH) Fosc Br = (6.7) (16 × spbrg + 1)) Fosc spbrg = −1 (6.8) 16 × BR • Taxas baixas (USART BRGH LOW) Fosc Br = (6.9) (64 × spbrg + 1)) Fosc spbrg = −1 (6.10) 64 × BR Sendo spbrg o valor a ser carregado no gerador de baud rate e BR a taxa de transmiss˜o adesejada Deve-se estar atento, pois valor calculado pode n˜o ser um inteiro. Neste caso, ao fazer aa aproxima¸˜o para um inteiro mais pr´ximo o valor de taxa de transmiss˜o pode ser muito ca o adiferente do valor nominal. Sempre que arredondar o valor obtido para spbrg calcule a taxa realobtida com o valor de spbr e obtenha o erro atrav´s da equa¸˜o a seguir. e ca |BRdesejada − BRcalculada | e% = × 100 (6.11) BRdesejada Na pr´tica, podem ocorrer problemas de comunica¸˜o para se a diferen¸a entre o valor real e a ca co nominal forem maiores que 5%.Interrup¸˜o ca O flag de interrup¸˜o de recep¸˜o (RCIF) ´ setado (colocado em n´ um) quando um novo ca ca e ıvelbyte ´ recebido com sucesso. Uma aplica¸˜o util ´ usar a RTI para receber um buffer de v´rios e ca ´ e abytes e tratar apenas quando todos os dados chegarem. 179
  • 178. XM118 - Microcontroladores PIC18 Por sua vez, o flag de interrup¸˜o de recep¸˜o (TXIF) ´ setado quando um byte ´ enviado pela ca ca e eserial (buffer de transmiss˜o vazio). Isto permite construir RTI que transmitam sequencialmente aum buffer de diversos bytes sem que o programa principal tenha que aguardar a transmiss˜o de acada byte, seja qual for a taxa de transmiss˜o. aFun¸˜es co O C18 define diversas fun¸˜es de uso da USART. Uma op¸˜o ´ trabalhar com o conjunto de co ca efun¸˜es definidos pelo C18 par USART na biblioteca USART.H. co Fun¸˜o ca Prot´tipos o Descri¸˜o ca BusyUSART char BusyUSART( void ); Retorna 1 se a USART est´ a transmitindo CloseUSART void CloseUSART( void ); Desabilita USART DataRdyUSART char DataRdyUSART( void ); Retorna 1 se um byte foi recebido getcUSART Lˆ um byte da USART e getsUSART void getsUSART ( char *buffer, Lˆ uma string da USART e unsigned char len ); OpenUSART void OpenUSART( unsigned char config, Configura USART unsigned int spbrg); putcUSART char getcUSART( void ); Envia um byte pela USART putsUSART void putsUSART( char *data ); Envia um string alocada na RAM pela USART putrsUSART void putrsUSART( const rom char *data ); Envia um string alocada na FLASH pela USART ReadUSART char ReadUSART( void ); Lˆ um byte da USART e WriteUSART void WriteUSART( char data ); Envia um byte pela USART baudUSART void putcUSART( char data ); Configura a taxa de transmiss˜o, a Tabela 6.7: Fun¸˜es da USART co Outra op¸˜o ´ trabalhar com as fun¸˜es padronizadas do C ANSI para sa´ de caracteres, ca e co ıdapresentes na biblioteca STDIO.H. Essa biblioteca define fun¸˜es para entrada e sa´ de dados co ıdapor uma porta do sistema, que no caso do C18 ´ a EUSART. Estas fun¸˜es permitem apenas a e coescrita de dados, e n˜o sua leitura. No decorrer do curso muitas vezes ser´ usada a fun¸˜o printf(). a a caContudo, seu uso deve ser evitado na pr´tica, devido ao tamanho do c´digo gerado por ela. a o Existem ainda fun¸˜es que permitem implementar a comunica¸˜o serial atrav´s de pinos de co ca eI/O, das quais n˜o trataremos. Essas fun¸˜es est˜o na biblioteca SW UART. a co a6.6.5 EIA-232C Popularmente conhecido como RS-232, esse protocolo foi inicialmente desenvolvido para per-mitir a comunica¸˜o entre computadores e modens, para transmiss˜o de dados a longa distˆncia. ca a aA norma que rege o protocolo ´ a TIA/EIA-232, cuja revis˜o C ´ a mais recente (1969). e a e Devido a sua aplica¸˜o inicial como protocolo de comunica¸˜o entre um terminal de com- ca caputador e um equipamento de comunica¸˜o, o protocolo estabelece os conceitos de DTE (Data caTerminal Equipament - Equipamento Terminal de Dados) e DCE (Data Communication Equipa-ment - Equipamento de comunica¸˜o de dados). O sentido dos pinos de comunica¸˜o ´ dado ca ca edo ponto de vista do DTE. Como tipicamente o EIA-232 ´ utilizado para comunica¸˜o entre e ca 180
  • 179. XM118 - Microcontroladores PIC18um computador e o microcontrolador vamos sempre admitir aqui que computador ´ o DTE e o emicrocontrolador DCE. A norma especifica v´rios pinos mas na pr´tica os mais utilizados s˜o os apresentados na a a atabela a seguir. As fun¸˜es e dire¸˜es dos pinos s˜o dadas em fun¸˜o do DTE co co a ca Pino Fun¸˜o ca Dire¸˜o ca TxD Transmiss˜o do DTE para o DCE a Sa´ ıda RxD Transmiss˜o do DCE para o DTE a Entrada RTS Sinaliza que o DTE est´ pronto para receber dados do DCE a Sa´ ıda CTS Sinaliza que o DCE est´ pronto para receber dados do DTE a Entrada DSR DCE pronto para opera¸˜o ca Entrada DTR DTE pronto para opera¸˜o ca Sa´ ıda Tabela 6.8: Fun¸˜es da USART co Os pinos DSR e DTR servem para indicar que os equipamentos est˜o conectados e prontos apara comunica¸˜o. DTS e CTS servem para fazer controle de fluxo: Quando o DTE tem dados capara transmitir ele informa o DCE atrav´s de RTS; se o DCE pode receber esses dados CTS ´ e eativado. A sinaliza¸˜o s˜o ativadas em ’0’ e desativadas em ’1’. Em uma grande maioria dos casos s˜o ca a autilizados apenas os terminais de transmiss˜o e recep¸˜o de dados, podendo ser usado um cabo a cacom apenas 3 fios (TxD, RxD e Terra). Segundo a norma, a comunica¸˜o serial pode suportar taxas de bit (geralmente chamadas ca e ´ poss´ realizar comunica¸˜o full-duplex, ou seja, nos dois sentidosbaud rate) de at´ 20 kbps. E ıvel caao mesmo tempo. A distˆncia m´xima do cabo de comunica¸˜o deve ser inferior a 15 metros (50 p´s). Umas das a a ca eprincipais causas da limita¸˜o de taxa e distˆncia do EIA-232C ´ limita¸˜o nos tempos de subida ca a e cae descida do sinal, que deve ser menor que 4% do tempo tempo de bits. As especifica¸˜es el´tricas do EIA-232C podem ser observadas na figura abaixo. co e Figura 6.28: Especifica¸˜es el´tricas do EIA-232C co e No transmissor o n´ l´gico ’0’ ´ representado por uma tens˜o entre +5 e +15 Volts e o n´ ıvel o e a ıvell´gico ’1’ ´ representado por tens˜es entre -5 e -15 Volts. No receptor tens˜es entre +3 e +15 o e o oVolts s˜o interpretadas como ’0’ e entre -3 e -15 Volts interpretadas como ’1’; tens˜es entre +3 e a o-3 Volts levam a estados indeterminados. A diferen¸a entre os limites de tens˜o no transmissor c a(-5V e +5V) e os limites do receptor (-3V e +3V) constitui a margem de seguran¸a, dentro da cqual ru´ ıdos e eventuais perdas no cabo n˜o degradam os dados. a 181
  • 180. XM118 - Microcontroladores PIC18 As tens˜es m´xima m´ o a ınima que podem ser aplicadas ao receptor sem que haja dano s˜o, arespectivamente, +25V e -25V. Al´m disso, a norma especifica que qualquer curto circuito entre equaisquer pinos, inclusive o pino de terra, n˜o devem causar dano ao circuito. a Como na maioria das aplica¸˜es trabalha com circuitos alimentados com +5V s˜o necess´rios co a aconversores de n´ ıvel para criar uma interface el´trica com o EIA-232, dentre os quais os mais econhecidos s˜o o MAX232 e seus equivalentes. aEIA-485 Outro padr˜o muito difundido, principalmente no meio industrial, ´ o EIA-485, tamb´m con- a e ehecido como RS-485. As principais vantagens desse padr˜o sobre o EIA-232C s˜o as maiores a adistˆncias alcan¸adas e a possibilidade de opera¸˜o em rede com m´ltiplos usu´rios. a c ca u a No EIA-485 a transmiss˜o ´ feita por dois fios de forma balanceada. Isso significa que por um a econdutor ´ enviado um sinal A e pelo outro condutor uma c´pia invertida B (B = -A) desse sinal. e oNa recep¸˜o h´ um circuito diferenciador que faz diferen¸a entre o sinal A e B, portanto na sa´ ca a c ıdadesse circuito temos: S = A − B, masB = −A, portanto, S = A − (−A) = 2A (6.12) Como o ru´ age de forma aditiva, somando-se ao sinal dos dois condutores, na recep¸˜o o ıdo caefeito do ru´ ´ cancelado pela a¸˜o do diferenciador, conforme pode ser observado a seguir, onde ıdo e caR representa o sinal de ru´ ıdo. S = (A + R) − (B + R) = (A + R) − (−A + R) ⇒ S = A + R + A − R = 2A (6.13) Al´m disso, a rede ´ ”casada”com resistores de termina¸˜o, o que reduz a degrada¸˜o por e e ca careflex˜o do sinal. a Podemos ligar diversos usu´rios em rede, sendo tipicamente usada a topologia de barramento apara tanto. Em um barramento EIA-485 somente um dos terminais pode transmitir por vez,ficando os outros com o driver de sa´ desligado. Portanto s´ ´ poss´ a comunica¸˜o no modo ıda oe ıvel cahalf-duplex. A figura abaixo mostra os esquemas liga¸˜o de diversos transceptores a rede. Os caresistores RT s˜o resistores de termina¸˜o e devem ser colocados nas extremidades do barramento. a caSeu valor t´ ıpico ´ 120 Ω, portanto um valor equivalente de 60Ω. e Figura 6.29: Esquemas liga¸˜o de diversos transceptores a rede ca O n´mero m´ximo de pontos na rede ´ limitado pela carga que cada terminar receptor rep- u a eresenta para o barramento, que deve ser de 1mA para 12V, e pelas caracter´ ısticas do buffer de 182
  • 181. XM118 - Microcontroladores PIC18sa´ ıda. Seguindo padr˜o EIA-485 a quantidade de pontos fica limitada a 32 pontos, mas atualmente aexistem tranceivers com caracter´ ısticas alteradas que permitem at´ 128 pontos na rede. e A distˆncia m´xima poss´ na rede ´ de aproximadamente 1200m (4000 p´s). A taxa m´xima a a ıvel e e ade transmiss˜o ´ de 10Mbps. A taxa de transmiss˜o ´ dada em fun¸˜o dos tempos de subida (tR) a e a e cae descida do sinal (tF), sendo que no EIA-485 os TR e TF podem corresponder a 30% do tempototal do bit.Assim: 1 0.3 Rmax = = (6.14) tb tr Sendo: • RMAX: Taxa m´xima de bits; a • tB: Tempo de bit; • tR: Tempo de subida. O tempo de subida depende do tipo e comprimento do cabo. Os sinais el´tricos no barramento devem estar entre -7 e +12 Volts em rela¸˜o a referˆncia. e ca eA diferen¸a de tens˜o entre os sinais A e B tamb´m deve estar entre -7 e +12Volts. Podem ser c a edetectados sinais entre A e B com diferen¸a a partir de que 200mV e a diferen¸a m´ c c ınima notransmissor ´ de 1,5V, o que resulta em uma margem de seguran¸a de 1,3 Volts. Temos n´ e c ıvell´gico ’1’ quando VA ¿ que VB e n´ l´gico ’0’ quando VA¡VB. o ıvel o Dos tranceptores mais utilizados no mercado podemos citar o MAX485 e seus equivalentese o SN75176. Esses dois modelos s˜o compat´ a ıveis entre si e possuem habilita¸˜o individual dos cadrivers de recep¸˜o e transmiss˜o. ca a6.6.6 Protocolos de comunica¸˜o ca Em aplica¸˜es de comunica¸˜o muitas vezes n˜o basta apenas transmitir os dados que se co ca adeseja de um receptor para um transmissor. Por exemplo, devemos implementar meios de detectareventuais erros na transmiss˜o ou delinear o in´ a ıcio se fim da mensagem. Al´m disso, em redes ecom m´ltiplos usu´rios ´ necess´rio identificar qual o usu´rio a que se destina o dado e criar u a e a am´todos que evitem a colis˜o de dados(dois usu´rios transmitindo ao mesmo tempo na rede). e a aEssas s˜o fun¸˜es da camada 2 do modelo OSI, a camada de enlace, e podem ser implementadas a coatrav´s de rotinas que obede¸am um protocolo de comunica¸˜o. A fun¸˜o dessas rotinas ´ prover e c ca ca eo transporte dos dados atrav´s de diversos mecanismos e entregar os dados para a aplica¸˜o. e caComunica¸˜o ponto-a-ponto (para EIA-232 ca Nesse caso t´ ıpico de aplica¸˜o para o padr˜o EIA-232 temos comunica¸˜o bidirecional full- ca a caduplex, portanto n˜o h´ risco de colis˜o e qualquer um dois equipamentos (no caso, o PC e o a a amicrocontrolador) podem iniciar a comunica¸˜o. Abaixo ´ apresentado o formato do frame desse ca eprotocolo, que ´ a forma como os dados ser˜o ”encapsulados”para transmiss˜o. e a a 1 1 0∼254 1 Stx NB Dados CKS 183
  • 182. XM118 - Microcontroladores PIC18 • STX: byte 0x02; sinaliza o in´ do frame; 1 byte; ıcio • NB: N´mero de bytes que vˆm a seguir; 1 byte; u e • Dados:informa¸˜o util; de 0 a 254 bytes; ca ´ • CKS: checksum, calculado a partir de todos os demais campos. STX serve para identificar o in´ ıcio do frame. Como NB informa quantos bytes devem serrecebidos, ´ poss´ determinar onde termina o frame. O ultimo campo do frame ´ o checksum, e ıvel ´ eque ´ uma soma em m´dulo dois (opera¸˜o ou-exclusiva) de todos os bytes do frame. O checksum e o ca´ calculado no transmissor e novamente no receptor. Se o checksum calculador no receptor n˜oe afor o mesmo do enviado, significa que houve algum erro na transmiss˜o. a Se for implementado um sistema re retransmiss˜o caso ocorram erros o transmissor deve iniciar aum timer quando um byte for recebido. Esse timer deve estar configurado para estourar no tempom´ximo de espera aceit´vel para uma reposta. Caso um frame seja recebido com sucesso, um a aframe com um confirma¸˜o positiva ´ enviado de volta. S houver erro, ´ enviada uma confirma¸˜o ca e e canegativa. Por fim, se o timer do transmissor estourar (time-out) e n˜o for recebido nenhuma aconfirma¸˜o, o frame deve ser retransmitido. caComunica¸˜o ponto-multiponto (para EIA-485) ca Em redes 485 podemos ter v´rios terminais e a comunica¸˜o ´ half-duplex, portanto existir´ a ca e auma disputa pelo uso do meio e caso dois terminais da rede transmitam ao mesmo tempo, ainforma¸˜o se perder´. Al´m disso ´ necess´rio identificar no frame o endere¸o do terminal ao ca a e e a cqual ele se destina, portanto cada terminal deve ter um endere¸o individual. c Se todos os terminais puderem iniciar a comunica¸˜o h´ uma grande probabilidade de ocorrˆncia ca a ede colis˜o. A solu¸˜o mais simples nesse caso ´ determinar que um dos terminais (mestre) tenha a ca einiciativa de iniciar a comunica¸˜o, sendo que os demais terminais (escravos) limitam-se a respon- cader. Esse tipo de comunica¸˜o Mestre-Escravo (Master-Slave) ´ bastante comum em aplica¸˜es ca e coonde o terminal mestre ´ um computador que comanda uma rede de escravos microcontrolados. eAbaixo temos o aspecto do frame para a comunica¸˜o mestre ⇒ escravo (comando). ca 1 1 1 0∼254 1 Stx NB End Dados CKS • STX: byte 0x02; sinaliza o in´ do frame; 1 byte. ıcio • NB: N´mero de bytes que vˆm a seguir; 1 byte; u e • End: indica o endere¸o a que se destina o frame, se for 0xFF se destina a todos; c • Dados:informa¸˜o util; de 0 a 253 bytes; ca ´ • CKS: checksum, calculado a partir de todos os demais campos. A seguir temos o aspecto do frame para a comunica¸˜o escravo → mestre (resposta). ca 184
  • 183. XM118 - Microcontroladores PIC18 1 1 1 0∼254 1 Stx NB End Dados CKS • STX: byte 0x02; sinaliza o in´ do frame; 1 byte. ıcio • NB: N´mero de bytes que vˆm a seguir; 1 byte; u e • End: indica o endere¸o a que se destina o frame, se for 0xFF se destina a todos; c • Dados:informa¸˜o util; de 0 a 253 bytes; ca ´ • CKS: checksum, calculado a partir de todos os demais campos. Nesse caso o mecanismo de detec¸˜o de erro e repeti¸˜o ´ o mesmo do caso ponto-a-ponto. ca ca e6.7 MSSP - Porta Serial S´ ıncrona O PIC18F4550 possui um m´dulo MSSP (Master Synchronous Serial Port - Porta de Comu- onica¸˜o Serial S´ ca ıncrona Mestre). Esse m´dulo permite a implementa¸˜o de dois protocolos muito o causados em comunica¸˜o entre circuitos integrados, o SPI (Serial Peripheral Interface) e o I2C ca(Inter-Integrated Circuits). Os modos poss´ ıveis de opera¸˜o s˜o: ca a • Modo SPI; – Modo mestre; – Modo escravo. • Modo I2C. – Modo mestre; – Modo multi-mestre; – Modo escravo.6.7.1 SPI A comunica¸˜o SPI especifica 3 pinos de comunica¸˜o de dados: Clock (SCK), Entrada de ca caDados (SDI) e Sa´ de Dados (SDO). Al´m disso, cada perif´rico SPI deve ter um sinal de ıda e ehabilita¸˜o baixo ativo (normalmente chamado CE - Chip Enable ou CS - Chip Select). ca A tabela abaixo apresenta os sinais, suas fun¸˜es e os pinos correspondentes nos PIC18F452 coe PIC18F4550. Sinal Pino Fun¸˜o ca SDO RC7 Sa´ de dados ıda SDI RB0 Entrada de dados SCK RB1 Modo mestre: sa´ de clock ıda Modo escravo: entrada de clock SS RA5 Habilita¸˜o no modo escravo. ca Tabela 6.9: Fun¸˜es da USART co 185
  • 184. XM118 - Microcontroladores PIC18 A conex˜o entre dispositivo SPI deve ser feita conforme o diagrama abaixo. Observe que a asa´ do mestre (SDO) ´ ligada a entrada dos escravos (SDI) e a sa´ dos escravos (SDO) ´ ligada ıda e ıda ea entrada do mestre (SDI). Alguns fabricantes utilizam tamb´m a nomenclatura MISO (Master eInput, Slave Output) e MOSI (Master Output, Slave Input) para simbolizar os pinos de dados. Figura 6.30: Pinos para opera¸˜o em SPI ca O protocolo SPI permite a comunica¸˜o do microcontrolador com diversos outros componentes, caformando uma rede. Operando em modo mestre, o microcontrolador gera o sinal de clock e deve ter um pino deI/O para a habilita¸˜o de cada perif´rico SPI. O perif´rico (escravo) habilitado se comunica com o ca e emicrocontrolador (mestre) enquanto os demais, que n˜o est˜o habilitados, ignoram a comunica¸˜o. a a ca 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 m´dulo MSSP configurado para o modo SPI ´ apresentado na figura o eabaixo. Figura 6.31: Diagrama em blocos para o modo SPI A taxa de transmiss˜o do m´dulo ´ selecionada atrav´s da escolha da fonte de clock que pode a o e e 186
  • 185. XM118 - Microcontroladores PIC18ser FOSC/4,FOSC/16, FOSC/64 ou o sinal de coincidˆncia do timer 2 (nesse caso, o per´ e ıodo declock ´ o dobro do tempo de coincidˆncia do timer 2). e eInterrup¸˜o ca A interrup¸˜o no modo SPI ´ acionada toda vez que um dado ´ recebido ou enviado. ca e eFun¸˜es co O compilador C18 possui fun¸˜es para comunica¸˜o SPI na biblioteca SPI.H descritas abaixo. co ca Fun¸˜o ca Prot´tipo o Descri¸˜o ca CloseSPI void CloseSPI( void ); Desabilita o m´dulo MSSP o DataRdySPI unsigned char DataRdySPI( void ); Informa se recebeu dados getcSPI unsigned char getcSPI( void ); Lˆ um byte e getsSPI void getsSPI( unsigned char rdptr, Lˆ uma string e Unsigned char length ); OpenSPI void OpenSPI( unsigned char sync mode, Configura e habilita o unsigned char bus mode, MSSP em modo SPI unsigned char smp phase); putcSPI unsigned char putcSPI( Escreve um byte unsigned char data out ); putsSPI void putsSPI( unsigned char *wrptr ); Escreve uma stringa ReadSPI unsigned char ReadSPI( void ); Lˆ um byte e WriteSPI unsigned char WriteSPI( Escreve um byte unsigned char data out ); Tabela 6.10: Fun¸˜es da SPI co6.7.2 I2C O protocolo I2C especifica 2 sinais de comunica¸˜o, um com o sinal de clock (gerado pelo camestre) e outro de dados, bidirecional. A tabela 3.5 apresenta os pinos do PIC18F452/PIC18F4550usados para I2C. Sinal Pino Fun¸˜o ca SDA RB0 Dados seriais SCL RB1 Clock (provido pelo mestre) Tabela 6.11: Pinos para opera¸˜o em SPI ca A conex˜o entre dispositivo I2C deve ser feita conforme o diagrama abaixo. Os resistores de apull-up s˜o fundamentais, j´ que os drivers de sa´ de todos os dispositivos I2C s˜o open-drain. a a ıda aAo enviar dados um dispositivo I2C (mestre ou escravo) o que na verdade acontece ´ que nos ebits ’0’ o dispositivo satura um transistor aterrando o barramento e nos bits ’1’ ele corta essetransistor, ficando o n´ ’1’ garantido pelo resistor de pull-up. Dessa forma v´rios dispositivos ıvel apodem trocar informa¸˜o sem risco de dano. ca 187
  • 186. XM118 - Microcontroladores PIC18 Figura 6.32: Diagrama em blocos para o modo I2C escravo. No protocolo I2C os diversos dispositivos ligados a um mesmo barramento possuem endere¸os cindividuais. Todos os dispositivos da rede recebem os comandos enviados pelo mestre, mas so-mente aquele endere¸ado pelo mestre responde. c O protocolo I2C prevˆ uma s´rie de comandos para controle de fluxo, informando in´ e fim e e ıcioda comunica¸˜o e sinalizando se a mensagem foi recebida corretamente. O protocolo prevˆ que a ca emudan¸a de estado dos bits se dˆ no intervalo de tempo em que o sinal de clock permanece em c e’0’ e que enquanto SCK permanece em ´1´ o sinal permane¸a est´vel, e ´ quanto ´ feita a leitura. c a e eA figura abaixo ilustra essa defini¸˜o. ca Figura 6.33: Protocolo I2C. Para sinalizar in´ e fim de comunica¸˜o s˜o usadas as condi¸˜es de Start e Stop, que s˜o ıcio ca a co aquebras da regra acima. Quando SCK est´ em ’1’ e SDA transita de ’1’ para ’0’ caracteriza-se auma condi¸˜o de Start. Quando SCK est´ em ’1’ e SDC transita de ’0’ para ’1’ caracteriza-se uma ca acondi¸˜o de Stop. Essas sinaliza¸˜es s˜o utilizadas para definir o in´ ca co a ıcio e fim da comunica¸˜o, cade forma que os escravos sejam sincronizados com o mestre. Abaixo temos a ilustra¸˜o dessas cacondi¸˜es. co Figura 6.34: Condi¸˜es de Start e Stop. co Al´m disso, a cada byte transmitido deve ser gerado pelo escravo que o recebe uma resposta e 188
  • 187. XM118 - Microcontroladores PIC18de confirma¸˜o (ACK, do inglˆs acknowledge ). Essa condi¸˜o ´ obtida quando o escravo for¸a ca e ca e c’0’ em SDA no nono pulso de clock. Dependendo do protocolo do dispositivo pode ser gerandotamb´m um sinal de no-acknowledge (NACK), que ´ caracterizado pela permanˆncia de SDA em e e e’1’ durante o nono bit. A figura abaixo representa essa sinaliza¸˜o, mas esteja atento ao fato que can˜o existem os sinais DATA IN e DATA OUT, s˜o apenas representa¸˜es da origem do sinal em a a coSDA (DATA IN ´ gerado pelo mestre e DATA OUT pelo escravo). e Figura 6.35: Sinal de no-acknowledge (NACK). Uma t´ ıpica opera¸˜o de escrita (do mestre para o escravo) ´ apresentada na figura a seguir ca e(observe quais bits s˜o gerados pelo mestre e quais s˜o pelo escravo) onde ´ apresentado apenas a a ea sinaliza¸˜o de dados, ficando subentendido o sinal de clock. A comunica¸˜o inicia-se com um ca caStart gerado pelo mestre. Em seguida o primeiro byte define o endere¸o do dispositivo a ser cacessado. O oitavo bit define se ´ uma instru¸˜o de leitura (’1’) ou escrita (’0’). No nono bit o e caescravo responde um ACK. Em seguida ´ enviado um byte definindo um endere¸o de mem´ria e c odentro do dispositivo, que tamb´m ´ confirmado por um ACK. A partir da´ cada byte enviado ´ e e ı earmazenado em um endere¸o a partir do endere¸o inicial, at´ o mestre encerrar a comunica¸˜o c c e caatrav´s de um Stop. e Figura 6.36: Start e Stop A seguir ´ apresentado uma opera¸˜o de leitura. O comando inicia-se com um Start, seguido e cado endere¸o do dispositivo (7 bits) e o oitavo bit em 1, indicando leitura. O escravo responde com cACK e passa a enviar seus dados sequencialmente. Note que sempre ´ o mestre que gera o sinal ede clock, o escravo apenas envia os dados para o barramento. A cada byte enviando pelo escravoo mestre responde com um ACK. No ultimo byte o mestre responde com um NACK, sinalizando ´o fim do envio de dados e finaliza a comunica¸˜o com um Stop. ca 189
  • 188. XM118 - Microcontroladores PIC18 Figura 6.37: Opera¸˜o de leitura. ca Como deve ter sido observado, n˜o foi especificado a partir de qual endere¸o o escravo deveria a cenviar seus dados. Isso porque, uma vez dado um comando de leitura o escravo passa a enviarseus dados para o mestre. Esses dados s˜o enviados a partir do endere¸o atual, isto ´, do ultimo a c eendere¸o gravado. Para realizar a leitura a partir de um endere¸o espec´ c c ıfico o que se faz ´ iniciar eum processo de escrita e reiniciar a comunica¸˜o, for¸ando um no Start, seguindo de um comando ca cde leitura, conforme apresentado a seguir. Figura 6.38: Opera¸˜o de escrita ca Operando em modo escravo, o PIC18 comporta-se como um dos elementos da rede, tratandoapenas os comandos destinados ao seu endere¸o. A figura a seguir apresenta o diagrama em blocos cdo m´dulo MSSP operando em modo I2C escravo. o Figura 6.39: Diagrama em blocos para o modo I 2 C escravo Operando em modo mestre, o microcontrolador deve gerar o clock para todos os dispositivos 190
  • 189. XM118 - Microcontroladores PIC18escravos da rede. Al´m disso, ele deve gerar as condi¸˜es de bit de partida (start bit) e bit de e coparada (stop bit) definidas pelo protocolo e verificar a bit de ACK (confirma¸˜o gerada pelo caescravo). O diagrama em blocos do m´dulo MSSP operando em modo I2C mestre ´ mostrado na o efigura abaixo Figura 6.40: Diagrama em blocos para o modo I 2 C mestre No modo mestre o sinal de clock que controla a taxa de transmiss˜o ´ configurado atrav´s dos a e esete bits menos significativos do registro SSPADD. O valor carregado nesse registro ´ decremen- etado duas vezes por ciclo de instru¸˜o. Quando chega a zero o estado do sinal de clock ´ invertido ca ee o valor ´ recarregado para reiniciar a contagem de tempo. eInterrup¸˜o ca No modo I2C escravo o m´dulo MSSP ir´ gerar uma interrup¸˜o toda vez que um comando o a cafor enviado para o endere¸o do microcontrolador. Al´m disso, pode-se configurar para que a c einterrup¸˜o ocorra toda vez que acontecer um bit de partida de um bit de parada. ca No modo I2C mestre o flag de interrup¸˜o ser´ acionado por qualquer um dos eventos abaixo: ca a • Bit de partida; • Bit de parada; • Transmiss˜o ou recep¸˜o completa; a ca • Transmiss˜o de ACK; a • Repeti¸˜o de bit de partida. caFun¸˜es co Para uso do m´dulo MSSP para comunica¸˜o I2C existe a biblioteca I2C.H. o ca 191
  • 190. XM118 - Microcontroladores PIC18 Fun¸˜o ca Prot´tipo o Descri¸˜o ca AckI2C void AckI2C( void ); Gera condi¸˜o de ACK ca CloseI2C void CloseI2C( void ); Desativa o m´dulo SSP o DataRdyI2C unsigned char DataRdyI2C( void ); Verifica se existem novos dados no buffer de recep¸˜o. ca getcI2C unsigned char getcI2C ( void ); Lˆ um byte e getsI2C unsigned char getsI2C( Lˆ uma sequencia de bytes (modo e unsigned char * rdptr, mestre apenas) unsigned char length ); IdleI2C void IdleI2C( void ); Fica em loop enquanto o barramento I2C est´ inativo. a NotAckI2C void NotAckI2C( void ); Gera uma condi¸˜o e NACK ca OpenI2C void OpenI2C( unsigned char sync mode, Configura o m´dulo MSSP para o unsigned char slew ); opera¸˜o em modo I2C ca putcI2C unsigned char putcI2C( Escreve um byte unsigned char data out ); putsI2C unsigned char putsI2C( Escreve uma sequˆncia de e unsigned char *wrptr ); bytes (modos mestre e escravo) ReadI2C unsigned char ReadI2C ( void ); Lˆ um byte. e RestartI2C void RestartI2C( void ); Gera uma condi¸˜o de Restart ca StartI2C void StartI2C( void ); Gera uma condi¸˜o de Start ca StopI2C void StopI2C( void ); Gera uma condi¸˜o de Stop ca WriteI2C unsigned char WriteI2C( Escreve um dado unsigned char data out ); Tabela 6.12: Fun¸˜es de I 2 C co ´ E muito comum o uso de mem´rias EEPROM seriais I2C. Em virtude disso, o C18 provˆ a o ebiblioteca I2C.H fun¸˜es espec´ co ıficas para comunica¸˜o com essas mem´rias. Essas fun¸˜es s˜o ca o co aapresentadas na tabela a seguir. 192
  • 191. XM118 - Microcontroladores PIC18 Fun¸˜o ca Prot´tipo o Descri¸˜o ca EEAckPolling unsigned char EEAckPolling; Gera uma varredura (unsigned char control ) de ACK EEByteWritex unsigned char EEByteWrite( Escreve um byte unsigned char control, unsigned char address, unsigned char data ); EECurrentAddReadx unsigned int EECurrentAddRead( Lˆ um dado do e unsigned char control ); pr´ximo endere¸o o c EEPageWritex unsigned char EEPageWrite( Escreve uma sequˆncia e unsigned char control, de dados unsigned char address, unsigned char * wrptr ); EERandomRead unsigned int EERandomRead( Lˆ um dado de um e unsigned char control, endere¸o qualquer c unsigned char address ); EESequentialRead unsigned char EESequentialRead( Lˆ uma sequˆncia e e unsigned char control, de dados unsigned char address, unsigned char * rdptr, unsigned char length ); Tabela 6.13: Fun¸˜es da EEPROM I 2 C co6.8 USB O protocolo USB foi inicialmente desenvolvido para ser uma forma pr´tica de conex˜o de a aperif´ricos a computadores (como mouse, teclado e impressoras), em substitui¸˜es a portas seriais e e coparalelas. Esse padr˜o evoluiu e hoje ´ o padr˜o de comunica¸˜o pra PCs, perif´ricos e dispositivos a e a ca epessoais (iPOD, cˆmeras digitais, etc..). a O protocolo USB apresenta diversas vantagens, das quais podemos citar: • Altas taxas de transmiss˜o a • Conex˜o Plug&Play a • Alimenta¸˜o dos dispositivos atrav´s do cabo de comunica¸˜o. ca e ca • Conex˜o de diversos perif´ricos ao mesmo tempo a e • Baixo custo Atualmente est˜o em uso dois padr˜es, o USB 1.0 e o USB 2.0. O padr˜o USB 1.0 suporta as a o avelocidades de 1,5 Mbps (USB-LS - Low Speed) e 12Mbps (USB-FS - Full Speed). O padr˜o USB a2.0 suporta ainda a velocidade de 480 Mbps (USB-HS - High Speed), apesar de um dispositivon˜o ter que suportar HS para ser considerado compat´ com USB 2.0. a ıvel A comunica¸˜o USB ´ uma comunica¸˜o Mestre-Escravo, isto ´, um dispositivo principal ca e ca e(Mestre ou host) comanda um rede de perif´ricos (escravos ou devices). Portanto ´ imposs´ a e e ıvelcomunica¸˜o entre 2 devices (por exemplo, um mouse n˜o pode se comunicar com um pen-drive). ca a 193
  • 192. XM118 - Microcontroladores PIC18Existe ainda dispositivos OTG, que podem se comportar como Host e como escravo. Abaixo umalista dos tipos de dispositivos USB. • USB Host: Gerencia o barramento, iniciando todas as comunica¸˜es e alimentando os dis- co positivos. Tipicamente requer uma alta capacidade de processamento ´ deve possuir drivers e para as classes de dispositivos aos quais pode se conectar; • USB Device: Responde aos comandos do Host e ´ alimentado por ele; e • USB OTG (On-The-Go): ´ ao mesmo tempo mestre e escravo. Suporta apenas uma conector e Mini-AB para conex˜o com Host (Mini A) e Device (Mini B); a • Embedded Host: opera como Host com algumas funcionalidades limitadas; • Hub USB: permitem a expans˜o de portas USB. Permitem at´ 127 elementos na rede, sendo a e que pode-se usar no m´ximo 5 hubs em cascata. a A figura abaixo ilustra os tipos de conectores que definem ao tipo de elemento que se deveconectar. Figura 6.41: Tipos de conectores O padr˜o USB prevˆ diversas classes de dispositivos. Dessa forma, dispositivos de funciona- a emento semelhante s˜o tratado de forma padronizada. Por exemplo, pen-drives de diversos fab- aricantes e capacidades s˜o tratados da mesma forma, pois pertencem a classe Mass Storage. A aseguir s˜o listadas as classes de dispositivos suportadas: a 194
  • 193. XM118 - Microcontroladores PIC18 ´ • Audio • Chip/Smart Card Interface • Communication Device Class(CDC) • Content security • Device Firmware update • Humam Interface (HID) • IrDA Bridge • Mass Storage (MSD) • Printer • Still Image Capture • Test and measurement • V´ ıdeo Quando um dispositivo n˜o se enquadra nessas classes ele ´ considerado de uma classe cus- a etomizada (custom) o que significa escrever um driver sem pertencer a qualquer padr˜o definido. a O PIC18F4550 possui um perif´rico de USB Device compat´ com a norma USB 2.0. Ele e ıvelpode operar em full-speed (12MHz) ou low-speed (1,5MHz). Internamente ao PIC existe umregulador de 3,3V, respons´vel por fornecer a esse componente a tens˜o necess´ria para o driver a a ade sa´ ıda. Existe suporte a resistores de pull-up (que indicam ao host se o dispositivo ´ full-speed ou elow-speed) externo, assim como possibilidade de uso de um transceptor externo. Contudo, essesdispositivos est˜o dispon´ a ıveis internamente, n˜o necessitando de nenhum componente externo aal´m do conector B. e O protocolo USB, apesar da praticidade, n˜o ´ algo trivial. Sua implementa¸˜o n˜o ´ simples a e ca a ecomo a de um perif´rico como timer ou A/D, exigindo o uso de uma biblioteca de fun¸˜es com- e coplexas. Nesse sentido, a forma mais f´cil pra se trabalhar com USB ´ a partir de um exemplo a epronto para a classe de dispositivo que se pretende usar, na qual ser˜o feitas as altera¸˜es para a conossa aplica¸˜o. ca A Microchip provˆ essas bibliotecas, bem como drivers para os tipos b´sicos de dispositivos e ae extensa documenta¸˜o. Todo esse material est´ dispon´ no CD que acompanha o kit em em ca a ıvelwww.microchip.com/usb . Mais ainda, o kit XM118 ´ compat´ com a placa de demonstra¸˜o PICDEM FS-USB (com e ıvel caexce¸˜o do sensor de temperatura I2C, n˜o presente no kit), portanto diversos exemplos e aplica- ca ativos desenvolvidos para essa placa da Microchip ser˜o executados no kit. a 195
  • 194. XM118 - Microcontroladores PIC18Cap´ ıtulo 7Anexos7.1 Anexo A - Distribui¸˜o de Pinos do 18F4550 ca 196
  • 195. XM118 - Microcontroladores PIC187.2 Anexo B - Registros de fun¸˜o especial do PIC18F4550 ca 197
  • 196. XM118 - Microcontroladores PIC187.3 Anexo C - Leituras Recomendadas Os assuntos abordados nessa apostila s˜o bastante abrangentes e existem diversos documentos ae livros que podem complementar o assunto. O CD que acompanha a apostila tr´s diversos manuais que tratam do PIC18, como do com- apilador C18. Esses documentos foram tirados do site www.microchip.com. Nestes documentos,parte-se do princ´ ıpio de que o leitor tem s´lidos conhecimentos de microcontroladores e pro- ograma¸˜o em C e os assuntos s˜o tratados de forma bastante detalhada. S˜o recomendados como ca a amaterial avan¸ado para quem pretende se aprofundar mais nos conhecimentos apresentados no ccurso. Bons livros existentes no mercado tratam da linguagem C. A princ´ ıpio, qualquer livro quetrate de C ANSI ”puro”, isto ´, que n˜o trate de C++ ou implementa¸˜es visuais como Visual e a coC/C++ pode ser usado para um maior estudo da linguagem, seja para uma melhor compreens˜o ade suas caracter´ ısticas, seja para um estudo mais aprofundado. Uma leitura recomendada paraquem tem pouca experiˆncia com a linguagem C ´: e e • Mizrahi, Victorine Viviane. Treinamento em Linguagem C - M´dulo 1. Makron Books, S˜o o a Paulo.Para programadores de n´ intermedi´rio e/ou avan¸ado, ´ recomendada a leitura da referencia ıvel a c e[5], da qual um dos autores ´ ningu´m menos que o pr´prio criador do C, Dennis Ritchie. e e o Por fim, mais informa¸˜es sobre microcontroladores de uma forma geral e microcontroladores coda fam´ PIC16 podem ser obtidas na referˆncia [1]. ılia e 198
  • 197. XM118 - Microcontroladores PIC187.4 Anexo D - Bibliografia: [1] Adriano, J. D. (2005). Curso de microcontroladores PIC16Fxxx - M´dulo B´sico. o aExsto Tecnologia. Santa Rita do Sapuca´ ı[2] Kernighan, Brian W. Ritchie, Dennis M.(1988). The C programminglanguage.Editora Prentice-Hall PTR[3] Shultz, Thomas W. (1998). C and 8051: hardware, modular programming andmultitasking. Vol. I e II. 2a. edi¸˜o. Ed. Prentice Hall PTR. ca[4] Pereira, F´bio.(2003) Microcontroladores PIC - Programa¸~o em C. Editora a ca´Erica, S˜o Paulo. a[5] PIC18F2420/2520/4420/4550 DataSheet[6] PIC18F2455/2550/4455/4550 DataSheet[7] MPLAB R C18 C COMPILER USER’S GUIDE[8] MPLAB R C18 C COMPILER LIBRARIES 199
  • 198. XM118 - Microcontroladores PIC187.5 Anexo E - Conjunto de instru¸oes do PIC18 c˜ Conven¸˜es: co Figura 7.1: Conven¸˜es do PIC 18F co 200
  • 199. XM118 - Microcontroladores PIC18Conjunto de instru¸˜es: co Figura 7.2: Conjunto de instru¸˜es do Pic co Figura 7.3: Conjunto de instru¸˜es do Pic(segunda parte) co 201
  • 200. XM118 - Microcontroladores PIC18 Figura 7.4: Conjunto de instru¸˜es do Pic(terceira parte) coNotas:1. Quando uma opera¸˜o que altera o valor de registro PORT tem como destino o pr´prio ca o registro PORT o valor considerado ´ aquele lido diretamente dos terminais do microcontro- e lador;2. Quando essa instru¸˜o ´ executada no registro TMR0 (e d = 1, se aplic´vel) a pr´-escala ´ ca e a e e zerada;3. Quando o PC ´ alterado, gerando um desvio no fluxo do programa, ou um teste condicional e resulta verdadeiro, s˜o gastos dois ciclos de m´quina. a a4. Algumas instru¸˜es ocupam 2 endere¸os de mem´ria. Elas s˜o executadas em dois ciclos de co c o a instru¸˜o e o segundo ciclo tem o efeito de um NOP. ca 202
  • 201. XM118 - Microcontroladores PIC18Cap´ ıtulo 8Aulas Pr´ticas a Este caderno de experiˆncias tr´s exerc´ e a ıcios te´ricos e pr´ticos sobre microcontroladores PIC18. o aAs aulas est˜o distribu´ a ıdas conforme o plano de aulas apresentada na Orienta¸˜o Pedag´gica, na ca ointrodu¸˜o desse documento. L´ s˜o indicados os conte´dos te´ricos referentes a cada aula. Por- ca a a u otanto, ´ necess´rio verificar qual a sequˆncia de aulas conforme o objetivo e a carga hor´ria do e a e acurso. As trˆs primeiras aulas s˜o puramente te´ricas, trazendo quest˜es sobre o conceito de micro- e a o ocontroladores e do PIC18F4550. A partir da aula 4 todas apresentam algum exerc´ pr´tico. ıcio a Todas as aulas s˜o organizadas seguindo a estrutura did´tica abaixo, quando aplic´vel cada a a aum dos itens: • Objetivos: quais os objetivos did´ticos a serem atingidos na aula; a • Introdu¸˜o: quando necess´rio, uma breve introdu¸˜o te´rica ao assunto da aula; ca a ca o • Question´rio: algumas quest˜es te´ricas fundamentais para entender a experiˆncia; a o o e • Exerc´ ıcios: as experiˆncias propriamente ditas. Muitas vezes s˜o apresentados exerc´ e a ıcios re- solvidos para an´lise e propondo altera¸˜es. Fica a cargo do instrutor us´-los como exemplos a co a ou propor que sejam desenvolvidos pelos alunos. • Exerc´ ıcios propostas: exerc´ ıcios que complementam a pr´tica realizada. Os exerc´ a ıcios pro- postos podem ser realizados na pr´pria aula, havendo tempo h´bil para isso ou utilizado o a como li¸˜o de casa, fazendo-se uso das ferramentas de simula¸˜o. ca ca 204
  • 202. XM118 - Microcontroladores PIC188.1 Aula 1 - Introdu¸˜o aos microcontroladores ca Objetivos • Estudar os conceitos b´sicos de microcontroladores. aQuestion´rio a 1. Qual a principal caracter´ ıstica dos sistemas computacionais, que os diferencia dos demais circuitos digitais? 2. Qual a diferen¸a entre mem´ria de programa e mem´ria de dados? c o o 3. O que s˜o registros? a 4. O que s˜o vetores na mem´ria de programa? a o 5. Descreva os v´rios tipos de mem´ria de programa. a o 6. Qual a diferen¸a entre mem´rias vol´til e n˜o-vol´til? c o a a a 7. Para que servem os portais? 8. Por que s˜o utilizados barramentos para interligar as v´rias partes de um sistema computa- a a cional? 9. Descreva a fun¸˜o dos barramentos de: ca (a) Dados; (b) endere¸os; c (c) controle. 10. O que depende do tamanho (n´mero de bits) do barramento de endere¸os? u c 11. Qual a quantidade m´xima de mem´ria pode ser acessada por barramentos de endere¸os a o c de: (a) 7 bits; (b) 12 bits; (c) 16 bits; (d) 21 bits; 12. O que s˜o perif´ricos? a e 13. Descreva, de forma r´pida, o funcionamento do buffer tri-state e dos latch. a 14. Em um pino de I/O (como o apresentado a seguir) o que ocorre se for realizada uma opera¸˜o ca de escrita em um pino configurado como sa´ ıda? Explique porque tendo em vista o circuito. 205
  • 203. XM118 - Microcontroladores PIC1815. Explique a fun¸˜o dos seguintes blocos componentes da CPU: ca (a) Decodificador de instru¸˜es (Instruction Decoder) co (b) Registro Status (c) PC (Program Counter) (d) Pilha (Stack) (e) Unidade l´gico-aritm´tica (ALU) o e16. Qual a principal caracter´ ıstica da arquitetura Harvard? O que se ganha com isso?17. O que significam as siglas CISC e RISC?18. Explique a diferen¸a entre um microcontrolador e um microprocessador. c Exerc´ ıcios propostos • Propomos aqui uma pesquisa por manuais de componentes de diversos tipos de micrococon- trolador. O objetivo ´ familiarizar o aluno com os manuais destes componentes e exercit´-lo e a na atividade de busca de informa¸˜es. co 1. Pesquise na internet e fa¸a download do manual dos seguintes componentes: c (a) PIC16F628A (Microchip) (b) PIC18F4550 (Microchip) (c) PIC24FJ128GA108 (Microchip) (d) AT89S52 (Atmel) (e) MC68HC908QY4 (Freescale) (f) MSP430F2011(Texas) 206
  • 204. XM118 - Microcontroladores PIC182. Procure o diagrama em blocos de cada componente destes, procurando identificar: (a) Core (CPU) (b) Barramentos (c) Mem´rias o (d) Portais de I/O (e) Perif´ricos e3. Baseado nas informa¸˜es desses manuais, preencha a tabela de caracter´ co ısticas abaixo:4. Quais dos componentes acima s˜o CISC e quais s˜o RISC? a a 207
  • 205. XM118 - Microcontroladores PIC188.2 Aula 2 - O PIC18F4550 Objetivos • Estudar o hardware do microcontrolador PIC18F4550 • Conhecer os modelos de mem´ria para o PIC18 oQuestion´rio a 1. Quantos bits tˆm o barramento de instru¸˜es do PIC18? e co 2. Quantos bits tˆm o barramento de endere¸o para mem´ria de programa do PIC18? Quantos e c o endere¸os podem ser acessados ent˜o? Quantos bytes est˜o realmente implementados no c a a PIC18F4550? 3. Qual a diferen¸a entre as instru¸˜es RCALL e CALL? E entre BRA e GOTO? c co 4. Quantos bits tˆm o barramento de endere¸o para mem´ria de dados do PIC18? Quantos e c o endere¸os podem ser acessados ent˜o? Quantos bytes est˜o realmente implementados no c a a PIC18F4550? 5. Explique o que s˜o SFR e GPR. a 6. O que ´ o banco de acesso? e 7. Explique, resumidamente, como interagem os registro TRISB, LATB e PORTB. 8. Em quantos ciclos de clock ´ realizado cada instru¸˜o do PIC18? Quais s˜o esses ciclos e e ca a qual a¸˜o acontece em cada um deles? ca 9. Descreva o que ocorre com os registros PCLATU e PCLATH quando o registro PCL ´ lido. e E quando se escreve em PCL, o que ocorre? 10. O que fazem a instru¸˜o MULLW e MULWF? ca 11. Quantos n´ ıveis tˆm a pilha do PIC18? Quais eventos associados a pilha causam reset? e 12. Com base no funcionamento do processador, sabendo quantos ciclos de clock cada instru¸˜o ca leva para ser executada, calcule quanto ´ o tempo de execu¸˜o de uma instru¸˜o para as e ca ca frequˆncias de clock a seguir: e (a) 4MHz (b) 20MHz (c) 48MHz (d) 3,58MHz 13. Explique a fun¸˜o dos bits abaixo, pertencentes ao registro status. ca 208
  • 206. XM118 - Microcontroladores PIC188.3 Aula 3 - Assembly do PIC18 Objetivos • Estudar o conjunto de instru¸˜es do PIC18. coQuestion´rio a 1. Quantas instru¸˜es tˆm o PIC18? co e 2. Explique, de forma resumida, o que fazem as instru¸˜es abaixo. Para isso, consulte o manual co do PIC18 (cap´ ıtulo 26 - Instruction Set Summary). (a) MOVLW (b) MOVWF (c) MOVFF (d) ADDWF (e) SUBLW (f) ANDWF (g) XORLW (h) INCF (i) RLCF (j) RLNCF (k) BSF (l) BTG (m) BZ (n) BNZ (o) BRA (p) CALL (q) GOTO (r) RETURN (s) SLEEP 209
  • 207. XM118 - Microcontroladores PIC188.4 Aula 4 - Ferramentas de desenvolvimento Objetivos • Aprender a criar um projeto usando MPLAB e C18 • Compilar, simular, depurar e gravar o projeto criado.Introdu¸˜o ca As ferramentas de software utilizadas para o desenvolvimento com microcontroladores s˜o de agrande ajuda na cria¸˜o e depura¸˜o de projetos. Ter boas ferramentas de desenvolvimento ´ ca ca equase t˜o importante com ter um bom microcontrolador para o sucesso de qualquer projeto. O aobjetivo dessa aula pr´tica ´ passar por todo o processo de desenvolvimento, criando um novo a eprojeto, compilando, simulando e, por fim, gravando e depurando no kit. Question´rio a 1. O que ´ um IDE¿ e 2. Qual a fun¸˜o da Janela Watch? ca 3. Para que serve o Simulator Logic Analyzer? 4. O que faz um est´ ımulo com configurado como Toggle? ıcios ⇒ Verifique se o MPLAB e C18 est˜o instalados em seu textcolor[rgb]0.16,0.67,0.84Exerc´ acomputador. Caso contr´rio, realize a instala¸˜o conforme o manual. a ca 1. Criando um novo projeto: (a) Crie um novo projeto usando Project Wizard com as seguintes caracter´ ısticas: i. Microcontrolador: PIC18F4550 ii. Compilador: C18 iii. Diret´rio do projeto: c:ExstoPIC18Aula 4 MPLAB o iv. Nome do projeto: Aula4E1 v. Inclua o arquivo de linker script: c:MCC18lkr18F4550.lkr (b) Crie um novo arquivo e escreva nela o treco de c´digo abaixo: o #include<P18F4550.h> #include<delays.h> //// Configur¸~es co #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB come¸a como digital c 210
  • 208. XM118 - Microcontroladores PIC18 #pragma config LVP = OFF // Sem grava¸~o em baixa tens~o ca a #pragma config DEBUG = ON // habilita debug void main(void){ DDRD = 0x00; for(;;){ PORTD = 0x55; // Delay10KTCYx(200);// manter comentado na simula¸~o e depura¸~o ca ca PORTD = 0xFF; // Delay10KTCYx(200);// manter comentado na simula¸~o e depura¸~o ca ca } } (c) Salve o arquivo como Exemplo5.c (d) Inclua Exemplo5.c no projeto (e) Compile o projeto2. Simulando o projeto: (a) Ative o simulador MPLAB SIM (b) Abra a janela do Analisador l´gico o (c) Inclua no analisador l´gico o PORTD o (d) Execute o programa por um tempo e depois pare, analisando o resultado na janela do analisador l´gico. O que o programa faz? o (e) Execute o programa passo-a-passo para entender melhor o funcionamento, observando o analisador l´gico e o valor de PORTD na janela Watch. o3. Gravando o projeto: (a) Retire o coment´rio das rotinas de delay no programa e recompile-o. a (b) Selecione o ICD-2 como programador: Programmer ⇒Select Programmer ⇒ MPLAB ICD-2 (c) Grave o programa no kit. (d) Execute o programa e observe o resultado4. 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 Obs: Deve aparecer uma janela informado que ao selecionar ICD-2 como depurador ele n˜o mais ser´ usado como gravador. Clique em ok. a a (b) Execute o programa passo a passo e observe o resultado no hardware e na janela watch. (c) Retire novamente o coment´rio das rotinas de delay, recompile a 211
  • 209. XM118 - Microcontroladores PIC18 (d) Insira um break-point na linha ”PORTD = 0xFF;” (e) Rode o programa usando RUN e observe o que acontece.textcolor[rgb]0.16,0.67,0.84Exerc´ ıcios propostos1. Crie um novo projeto com as mesmas configura¸˜es do anterior chamado de Aula4P1. co2. Adicione um arquivo C com o c´digo abaixo. o #include<P18F4550.h> #include<delays.h> //// Configur¸~es co #pragma config PLLDIV = 5 // PLL para 20MHz #pragma config CPUDIV = OSC1_PLL2 // PLL desligado #pragma config FOSC = HS // Fosc = 20MHz -> Tcy = 200ns #pragma config WDT = OFF // Watchdog desativado #pragma config PBADEN = OFF // PORTB come¸a como digital c #pragma config LVP = OFF // Sem grava¸~o em baixa tens~o ca a #pragma config DEBUG = ON // 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 simula¸~o e depura¸~o ca ca } } }3. Repita todos os passos do exerc´ ıcio: simula¸˜o, grava¸˜o e depura¸˜o. ca ca ca4. O que o programa faz? 212
  • 210. XM118 - Microcontroladores PIC188.5 Aula 5 - Caracter´ ısticas Especiais Objetivos • Entender as caracter´ ısticas especiais do PIC18 e quando us´-las; a • Aprender a usar a diretiva #pragma config; • Compreender os diversos tipos de oscilador do PIC18; Question´rio a 1. Quais eventos provocam a sa´ dos modos Sleep e Idle? ıda 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 frequˆncias s˜o geradas pelo oscilador interno? e a 6. Quantas fontes de sinal de clock tˆm o PIC18? Podemos mudar de fonte de clock durante e a execu¸˜o do programa? ca 7. Atrav´s de quais bits de qual registro ´ feita a escolha da fonte de clock? e e 8. Descreva resumidamente os trˆs modos de consumo do PIC18? e 9. A tens˜o do BOR ´ configur´vel? a e a 10. Fa¸a uma tabela comparando os modos de oscilador a cristal (XT, HS e LP), oscilador c interno e oscilador RC externo com rela¸˜o a estabilidade, faixa de frequˆncia e custo. ca e 213
  • 211. XM118 - Microcontroladores PIC18Exerc´ ıcios1. O exerc´ resolvido Aula5E1 apresenta um exemplo que permite verifica o funcionamento ıcio do oscilador do PIC18. Atrav´s da leitura da chave DIP ligada ao portal B ´ poss´ acionar e e ıvel os bits do registro OSCCON. O programa principal aciona sequencialmente LEDs do portal D conforme a frequˆncia de clock selecionada. e 214
  • 212. XM118 - Microcontroladores PIC188.6 Aula 6 - Iniciando com a linguagem C Objetivos • Conhecer as ferramentas de desenvolvimento utilizadas: MPLAB IDE e C18 • Entender as diferen¸as entre as linguagens C e Assembly. c • Entender as principais caracter´ ısticas da linguagem C. • Estudar os tipos de dados b´sicos do C a • Atribui¸˜o como realizar atribui¸˜o em C ca ca • Entender como usar pinos de I/O do microcontrolador em CQuestion´rio a 1. Fa¸a uma compara¸˜o de trˆs caracter´ c ca e ısticas das linguagens C e Assembly que mostrem que ´ vantajoso trabalhar em C. e 2. Porque C ´ considerada uma linguagem de m´dio n´ e e ıvel? 3. O que ´ o C ANSI? eExerc´ ıcios 1. Crie um novo projeto chamado Aula6E1 e escreva um programa que realize as opera¸˜es co apresentadas abaixo. O objetivo do programa ´ apenas a simula¸˜o, portanto basta realizar e ca as opera¸˜es. Declare as vari´veis no menor tamanho que atenda as opera¸˜es. co a co (a) x = y + 775; (y ´ um unsigned char) e (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 est˜o ligados os LEDs do kit) como sa´ a ıda. No Loop principal leia o valor das chaves dip switch (PORTB) e transfira esse valor para os LEDs. Obs.: Para ler as chaves ´ necess´rio ativar os resistores de pull-up no PORTB. Isso feito e a colocando o seguinte comando na inicializa¸˜o do microcontrolador: INTCON2bits.RBPU ca = 0; 3. Crie um projeto baseado no exerc´ anterior onde cada chave aciona um LED, conforme ıcio a tabela a seguir. Para isso ser´ necess´rio acessar n˜o o portal todo, mas cada bit individ- a a a ualmente. 215
  • 213. XM118 - Microcontroladores PIC18 Chaves LEDs RB0 RD7 RB1 RD6 RB2 RD5 RB3 RD4 RB4 RD1 RB5 RD3 RB6 RD0 RB7 RD2Exerc´ ıcios Propostos1. Crie um novo projeto com as seguintes caracter´ ısticas (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 c´digo abaixo no arquivo ”Proposto.C”e monte o projeto. Em seguida exe- o cute a simula¸˜o e observe o que o programa faz. ca #include<P18F4520.h> #include<stdio.h> void main (void) { int i=0; printf("nnExerc´cio Proposto: "); ı for(;;){ printf("%d ",i); i++; if(i == 15) Sleep(); } }2. Fa¸a o fluxograma do programa ”Proposto.C”e descreva sua opera¸˜o. c ca 216
  • 214. XM118 - Microcontroladores PIC188.7 Aula 7 - Estruturas de Decis˜o a Objetivos • Conhecer os comandos b´sicos do C a • Manipular os pinos de I/O do PIC em C18 • Entender o que s˜o fun¸˜es e como utiliz´-las a co a • Conhecer as fun¸˜es de temporiza¸˜o do C18 co ca Introdu¸˜o caAl´m dos comandos b´sicos a linguagem C permite o uso de fun¸˜es que executam tarefas e a codefinidas. O padr˜o ANSI determina diversas bibliotecas de fun¸˜es que devem acompanhar a coo compilador. Al´m destas, o compilador C18 tr´s diversas bibliotecas de fun¸˜es para uso es- e a copec´ ıfico. Umas das mais uteis e a biblioteca delays.h, cujas fun¸˜es s˜o apresentadas na tabela ´ co aabaixo e s˜o detalhadas no anexo F. Essas fun¸˜es permitem gerar atrasos no programa e cujo a cotempo ´ calculador a partir do tempo de execu¸˜o de uma instru¸˜o TCY (TCY = 4.TOSC ). e ca ca Fun¸˜o ca Prot´tipo o Descri¸˜o ca Delay1TCY void Delay1TCY(void) Atraso de 1 ciclo. Delay10TCYx void Delay10TCYx(unsigned char unit) Atraso de m´ltiplos de 10 TCY u Delay100TCYx void Delay100TCYx(unsigned char unit) Atraso de m´ltiplos de 100 TCY u Delay1KTCYx void Delay1KTCYx(unsigned char unit) Atraso de m´ltiplos de 1000 TCY u Delay10KTCYx void Delay10KTCYx(unsigned char unit) Atraso de m´ltiplos de 10000 TCY u Question´rio a 1. Como configurar o PORTD do PIC18F4520 para que seus bits sejam todos sa´ ıdas? 2. Escreva um trecho de c´digo no qual o pino RD2 v´ para ’1’ se o pino RB0 estiver em ’0’ e o a vice-versa (use o comando if-else). 3. Para obter um atraso de 100ms, supondo o sinal de clock de 8MHz, qual fun¸˜o de atraso ca deve ser usada e qual seu argumento? 4. Preencha a tabela abaixo: Tipo de Dado Tamanho [bits] Faixa de valores char unsigned char int unsigned int Short long float ´ 5. E necess´rio fazer uma contagem de latas de goiabadas em uma linha de produ¸˜o. O valor a ca m´ximo de contagem ´ 200. Qual o tipo de dado mais adequando para essa vari´vel? a e a 6. O conversor ADC do PIC converte sinais de tens˜o em valores n˜o sinalizados de 10 bits. a a Qual o tipo de dado mais adequado para representar essa informa¸˜o. ca 217
  • 215. XM118 - Microcontroladores PIC18Exerc´ ıcios1. Exerc´ ıcio resolvido (Aula7E1): Elaborar um programa para controle de uma linha de produ¸˜o de goiabada, na etapa de impress˜o de validade e lote. O programa deve cumprir ca a as seguintes tarefas: (a) Manter uma esteira acionada at´ que passem 5 latas e (b) Desligar a esteira (c) Acione o carimbo de ”Prazo de validade”por 2s (d) Esperar 1 segundo (e) Acione o carimbo de ”lote”por 2s (f) Repetir o processo a partir de 1 218
  • 216. XM118 - Microcontroladores PIC18 O sensor que conta as latas de goiabada ´ baixo ativo. Os carimbos s˜o alto ativos, e a 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: a Pino do microcontrolador Dire¸˜o ca Fun¸˜o ca RB0 Entrada Sensor (baixo ativo) RD0 Sa´ ıda Esteira (alto ativo) RD1 Sa´ ıda Carimbo Lote (alto ativo) RD2 Sa´ ıda Carimbo Validade (alto ativo) (g) Simule o projeto e observe o resultado. (h) Grave no kit o projeto e veja seu funcionamento.2. Levante o fluxograma do exemplo 2 anterior3. Para aumentar a produtividade, devido ao alto consumo de goiabada, foram instaladas novos carimbos. Agora ´ poss´ carimbar 12 latas de goiabada por vez e os carimbos de e ıvel validade e lote podem ser acionados simultaneamente, por apenas 1s. ⇒Refa¸a o fluxograma e o c´digo anterior para atender as novas necessidades. c oExerc´ ıcios Propostos1. Escrever um programa que controle que pisque um LED com uma frequˆncia de 10 Hz se e a chave INT0 estiver pressionada e com frequˆncia de 2 Hz se n˜o estiver. Para fazer isso e a atribua diferentes valores a uma vari´vel que ser´ o argumento de uma fun¸˜o de delay. N˜o a a ca a se esque¸a de elaborar o fluxograma c2. Crie um programa (bem como o fluxograma) capaz de implementar a seguinte tabela:Obede¸a a seguinte configura¸˜o de hardware. c ca 219
  • 217. XM118 - Microcontroladores PIC18 Chave 1 Chave 2 LED 1 LED 2 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 0Pino do microcontrolador Dire¸˜o ca Fun¸˜o ca RB0 Entrada Chave 1 (INT0) RB1 Entrada Chave 2 (INT1) RD0 Sa´ ıda LED 1 RD1 Sa´ ıda LED 2 220
  • 218. XM118 - Microcontroladores PIC188.8 Aula 8 - Estruturas de Repeti¸˜o ca Objetivos • Estudar as estruturas de repeti¸˜o ca • Compreender as diferen¸as entre do-while, while e for c • Utilizar o comando break; Question´rio a 1. Qual a diferen¸a entre do-while e while? c 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”? Exerc´ ıcio 1. Exerc´ resolvido (Aula8E1): Desenvolver o projeto de controle de um sistema de aqueci- ıcio mento de ´gua representado pela figura abaixo. a Funcionamento: • O tanque deve encher acionando-se a bomba (BOMBA) at´ que o l´ e ıquido atinja o n´ ıvel m´ximo do tanque, o que ser´ indicado pelo sensor NMAX. a a • Estando o tanque cheio, aciona-se o aquecimento atrav´s de uma resistˆncia controlada e e pelo rel´ AQUECE. Essa Resistˆncia deve ficar acionada por 3 segundos, e depois e e permanecer acionada at´ que a temperatura atinja o valor pr´-estabelecido, quando e e ent˜o o sensor STEMP ir´ atuar. a a 221
  • 219. XM118 - Microcontroladores PIC18 • Atingida a temperatura m´xima a v´lvula VALV deve ser aberta. Ela deve permanecer a a aberta at´ que o n´ e ıvel de ´gua chegue ao m´ a ınimo, quando NMIN deixa de indicar presen¸a de l´ c ıquidos. • Quando o tanque estiver vazio, a v´lvula deve ser fechada e o processo se reinicia. a Condi¸˜es de projeto: co • Condi¸˜o inicial: todas as entradas destivadas. ca • Todos os sensores s˜o alto-ativos e ser˜o simulados por chaves dip switch a a • Todas as sa´ ıdas s˜o baixo-ativas e ser˜o simulados por LED’s a a • Configura¸˜o de hardware: ca Sinal Pino Dire¸˜o ca Tipo NMIN RB0 Entrada Alto-ativo NMAX RB1 Entrada Alto-ativo STEMP RB2 Entrada Alto-ativo BOMB RD0 Sa´ ıda Baixo-ativo VALV RD1 Sa´ ıda Baixo-ativo AQUECE RD2 Sa´ ıda 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: (a) Ao iniciar o programa, deve-se aguardar at´ que a chave de partida (RB4) esteja em 1 e para iniciar o processo. (b) Durante o esvaziamento do tanque, a resistˆncia deve alternar entre ligada e desligada e a cada 500ms, de forma que a manter a temperatura do l´ ıquido. (c) Se um comando de emergˆncia for ativado (chave RB3 em ’1’) o projeto deve parar e o que est´ fazendo, desligar todas as sa´ a ıdas e aguardar novamente o acionamento de RB4. Dica: lembre-se do comando break.Exerc´ Propostos ıcio1. Fa¸a um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0 c pisque 3 vezes, usando obrigatoriamente while.2. Fa¸a um programa que, toda vez que for pressionado o a chave em RB0, o LED em RD0 c pisque 3 vezes, usando obrigatoriamente for.3. Desenvolva um programa que realize as fun¸˜es descritas na tabela abaixo (lembrando que co as chaves s˜o baixo ativas); a 222
  • 220. XM118 - Microcontroladores PIC18Rb0 Rb1 A¸˜o caRB0 RB1 A¸˜o ca 1 1 Nenhuma a¸˜o ca 0 1 LED0 piscado a 1Hz 1 0 LED0 piscando a 8Hz 0 0 LED0 aceso constantemente 223
  • 221. XM118 - Microcontroladores PIC188.9 Aula 9 - Fun¸˜es co Objetivos • Estudar fun¸˜es o uso de fun¸˜es e da pilha; co co • Estudar as diferentes formas de passagem de parˆmetro; a • Entender o conceito de biblioteca de fun¸˜es. co Question´rio a 1. Quantos n´ ıveis tˆm a pilha do PIC18? e 2. O que ´ uma vari´vel local? e a 3. O que ´ uma vari´vel global? e a 4. Como se comporta uma vari´vel declarada com modificador static? a 5. O que ´ prot´tipo de uma fun¸ao? e o c˜Exerc´ ıcios 1. Exerc´ Resolvido (Aula9E1): Simule o exemplo Fun¸˜es.c, observado o funcionamento da ıcio co pilha, o comportamento dos diferentes tipos de vari´veis (global, local e static) e a passagem a de parˆmetros. a 2. Crie uma fun¸˜o que realize a decomposi¸˜o de inteiro para 5 d´ ca ca ıgitos, chamada IntToBCD. O parˆmetro de entrada (inteiro) deve ser o parˆmetro de entrada da fun¸˜o. Os 4 d´ a a ca ıgitos devem ser vari´veis globais. a 3. Altere o exerc´ ıcio anterior para que os d´ ıgitos sejam parˆmetros passados por referˆncia a e (ponteiros). 4. Crie uma biblioteca de fun¸˜es (composta por IntToBCD.h e IntToBCD.c) para conter co fun¸˜o desenvolvida no exemplo anterior. ca 224
  • 222. XM118 - Microcontroladores PIC188.10 Aula 10 - Interrup¸oes c˜ Objetivos • Estudar o sistema de interrup¸oes do PIC18 c˜ • Entender a prioridade de interrup¸˜es co • Construir rotinas de tratamento de interrup¸˜o. caQuestion´rio a 1. Quantos n´ ıveis de prioridade de interrup¸˜o h´ no PIC18? ca a 2. Quando o programa est´ sendo executado e ocorre uma interrup¸˜o de baixa prioridade, o a ca que ocorre? 3. Se uma interrup¸˜o de alta prioridade ocorre durante a execu¸˜o da RTI de baixa prioridade, ca ca o que acontece. 4. Quais os bits de habilita¸˜o global das interrup¸˜es de alta e baixa prioridade? ca co 5. Como identificar qual a causa da interrup¸˜o? ca 6. Que providˆncias devem ser tomadas sempre ao se tratar uma interrup¸˜o? e ca Exerc´ ıcio 1. Exerc´ resolvido (Aula10E1): Para demonstrar o funcionamento das interrup¸˜es vamos ıcio co desenvolver um programa que acione os LED´s de forma diferente no programa principal e nas interrup¸˜es de baixa e alta prioridade. A interrup¸˜o de baixa prioridade ser´ a co ca a interrup¸˜o INT2 e a interrup¸˜o de alta prioridade ser´ INT1. ca ca a • No programa principal os leds ficam todos piscando ao mesmo tempo, em uma frequˆncia e de 2Hz. • Quando ocorrer uma interrup¸˜o de baixa prioridade ser´ feito um ”deslocamento”de ca a LED acionado da esquerda para a direita e da direita para esquerda, 3 vezes. Cada LED permanece acesso por 200ms. • Quando ocorrer a interrup¸˜o de alta prioridade, os LED´s ser˜o acionado intercalados ca a (10101010), se ter˜o seus estados invertidos a cada 500ms, por 3 vezes. a Execute o programa. Teste inicialmente as interrup¸˜es separadamente. Em seguida tente co a acionar uma enquanto as outra est´ sendo executada. Observe e anote os resultados. a ca e a ´ ⇒Aten¸˜o: Esse exemplo ´ para fins did´ticos somente. E extremamente recomendado que n˜o se use rotinas de atraso dentro de uma RTI. a 2. Altere o exemplo anterior de forma que n˜o haja mais prioridade de interrup¸˜o (IPEN = a ca 0). Nesse caso, s´ estar´ ativa a interrup¸˜o de alta prioridade e as RTI devem ser reescritas. o a ca 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. a 225
  • 223. XM118 - Microcontroladores PIC18Exerc´ ıcios propostos1. Escreva um programa que inverta o estado de RD0 a cada 500ms em sua rotina principal. O pino RD1 deve ter seu estado invertido conforme o valor de uma vari´vel global Tempo. a Quanto ocorrer interrup¸˜o INT1, que deve ser de alta prioridade, RD2 ir´ para ’1’ e ca a Tempo recebe um valor que faz o RD1 inverter de estado a cada 200ms. Quando ocorrer a interrup¸˜o INT2, que deve ser de baixa prioridade, RD2 ir´ para ’0’ e RD1 passa a inverter ca a a cada 1s. 226
  • 224. XM118 - Microcontroladores PIC188.11 Aula 11 - Display de 7 segmentos e buzzer Objetivos • Estudar os displays de 7 segmentos • Utilizar vetores como tabelas de convers˜o a • Multiplexar displays de 7 segmentos Introdu¸˜o ca Em muitas aplica¸˜es com microcontroladores ´ necess´rio passar informa¸˜es para pessoas. co e a coNestes casos, diversos recursos podem ser utilizados. Dois muito comuns s˜o o display de sete asegmentos e o buzzer, que ser˜o tratados nesta experiˆncia. a e O dispaly de 7 segmentos ´ um arranjo de LEDs que permite formar n´meros e algumas letras e uconforme a combina¸˜o de segmentos acionados. Esse tipo de display pode ser multiplexado, caisto ´, v´rios ligados em conjunto acionando um s´ por vez, o que o torna um interface bastante e a overs´til. a O buzzer nada mais ´ que um alto-falante muito simples, feito para emitir sons com maior eintensidade em determinadas frequˆncias. Esse componente se torna muito util na medida em e ´que pode chamar a aten¸˜o do usu´rio para um equipamentos, sem que aquele esteja olhando ca adiretamente para este. Basicamente existem buzzers auto-oscilantes, que basta alimentar paraque emita som, e buzzers que precisam receber um sinal quadrado para serem acionados. O kit ´ eequipado com um buzzer desse ultimo tipo. ´ Question´rio a 1. Como ´ o circuito interno de um display de 7 segmentos catodo-comum? e 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 quest˜o acima possa operar corretamente, qual tempo cada segmento a deve permanecer acionado. 5. Admitindo que um buzzer tenha seu melhor desempenho na frequˆncia de 4,2kHz, qual o e per´ ıodo do seu sinal? 6. Para o buzzer do exemplo acima, escreva um trecho de c´digo capaz de acionar ininter- o ruptamente 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 per´ ıodo em ’1’ e meio per´ ıodo em ’0’. Exerc´ ıcios 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. 227
  • 225. XM118 - Microcontroladores PIC182. Desenvolver um programa capaz de apresentar o valor de uma vari´vel com valor m´ximo a a 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 o quando INT2 for pressionada.Exerc´ Propostos ıcio1. Altere o exerc´ 2 para que ele seja poss´ programar um valor de contagem usando RB0 ıcio ıvel e RB1 e, ao pressionar RB2 esse valor seja decrementado a cada 1 segundo, at´ zerar. e2. Altere o exerc´ 3 para que, ao pressionar o bot˜o, a frequˆncia do buzzer alterne entre ıcio a e 4,2 kHz e 2,4kHz, permanecendo (aprox.) 1s cada um. Dica: para definir o tempo em que cada frequˆncia ´ usada conte os per´ e e ıodos do sinal gerado. 228
  • 226. XM118 - Microcontroladores PIC188.12 Aula 12 - Teclado Matricial e LCD Objetivos • Estudar o uso de display de cristal l´ ıquido alfanum´rico e • Estudar leitura de teclado matricial por interrup¸˜o ca Introdu¸˜o ca Para construir uma IHM (interface homem-m´quina) eficiente podemos usar display de cristal al´ ıquido alfanum´rico e teclas matriciais. Al´m disso, o portal B possui uma interrup¸˜o espe- e e cacialmente util para a escrita de teclado. Essas facilidades podem ser usadas em C atrav´s de ´ ebibliotecas de fun¸˜es. co Question´rio a 1. Quais os sinais necess´rios para controlar um display de cristal l´ a ıquido alfanum´rico? e 2. Qual interrup¸˜o do PIC18 pode ser usada em conjunto com um teclado matricial? ca Exerc´ ıcios 1. Exemplo resolvido (Aula12E1): Construir um programa que fa¸a a leitura do teclado e c 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 Tecnolo- gia”. 3. Altere o programa para que sejam lidos 4 teclas. Se a sequˆncia dessas teclas for 1, 2, 3 e e 4, deve aparecer a mensagem ”Senha correta no LCD”; caso contr´rio, deve parecer ”Senha a Errada”. As teclas lidas devem ser escritas uma ao lado da outra no LCD. Exerc´ ıcios Propostos 1. Desenvolva uma rotina capaz de escreve no LCD o valor de vari´veis do tipo unsigned char, a chamada PrintChar. 2. Desenvolva uma rotina capaz de escreve no LCD o valor de vari´veis do tipo unsigned int, a chamada PrintInt. 229
  • 227. XM118 - Microcontroladores PIC188.13 Aula 13 - Contadores e temporizadores Objetivos • Entender o funcionamento do comparador anal´gico; o • Desenvolver rotinas de temporiza¸˜o utilizando temporizadores e interrup¸˜o. ca ca Introdu¸˜o ca Como o pr´prio nome indica, os timers s˜o perif´ricos muito uteis para gerar temporiza¸˜o. o a e ´ caPara isso, determinamos um valor inicial que deve ser carregado no timer para que ele gere umainterrup¸˜o ap´s um tempo pr´-determinado. A equa¸˜o (1) mostra como calcular o tempo (T) ca o e caat´ o estouro do timer ap´s a carga de um valor inicial (To), usando uma pr´-escala de valor PS. e o eO sinal aplicado ao timer tem per´ ıodo TCY (quando a fonte de clock ´ interna). TOV ´ o valor e ede contagem que causa overflow (65536 para 16 bits e 256 para 8 bits) Essa equa¸˜o ´ valida para ca eos timers 0, 1 e 3. T = (Tov − To ) × (P S × Tcy ) (8.1) A equa¸˜o a seguir mostra como determinar To para obter um tempo T desejado. Nesse caso, cao valor da pr´-escala deve ser arbitrado. e 1 T T0 = 1 − × (8.2) P S TCy Question´rio a 1. Quais os timers do PIC184550? De quantos bits ´ cada timer? e 2. Qual a fun¸˜o da pr´-escala? E da p´s-escala do timer 2? ca e o 3. Se o timer 1 est´ configurado com pr´-escala de 1:4 e usando a fonte de clock interna com a e oscilador de 8MHz quanto tempo entre o momento que o timer ´ zerado e seu overflow? e 4. Se o timer 2 ´ configurado com pr´-escala de 1:16, p´s-escala de 1:3, usando a fonte de e e o clock interna com oscilador de 4MHz e o registro PR2 cont´m o valor 200, a cada quantos e milisegundos o flag de interrup¸˜o ´ setado? ca e 5. Qual o argumento para a fun¸˜o OpenTimer1 para configurar o timer 1 conforme a quest˜o ca a 3? 6. Qual o argumento para a fun¸˜o OpenTimer2 para configurar o timer 1 conforme a quest˜o ca a 4? Exerc´ ıcios 1. Desenvolver uma aplica¸˜o que gere um sinal de 1 Hz no pino RD1 e um sinal de 10 Hz no ca pino RD0, gerados pelo timer 1 e timer 3, respectivamente. Para isso, utilize interrup¸˜o ca sem prioridade e oscilador externo de 20MHz. O programa principal deve inicializar o microcontrolador e entrar em loop infinito, sem nenhuma a¸˜o. ca 2. Esboce o fluxograma das RTI’s do exemplo acima. 230
  • 228. XM118 - Microcontroladores PIC183. Altere o exemplo para usar apenas o timer 3 para gerar as duas frequˆncias. eExerc´ ıcios Propostos1. Determinar as equa¸˜es para determina¸˜o de To e T aplic´veis ao timer 2. co ca a2. Crie um ”rel´gio”, com contagem de hora, minutos e segundos usando o timer 1 o 231
  • 229. XM118 - Microcontroladores PIC188.14 Aula 14 - Conversor A/D‘ Objetivos • Entender como funcionam os conversores anal´gico/digital o • Estudar o funcionamento do conversor A/D do PIC18F4550 • Fazer a leitura de um n´ de tens˜o e processar essa informa¸˜o no microcontrolador. ıvel a ca Question´rio a 1. Por que conversores A/D s˜o necess´rios? a a 2. Quais os pinos de entrada dos comparadores no PIC18F4550? Ap´s o reset, esses pinos o est˜o configurados como entradas anal´gicas ou digitais. a o 3. Qual o evento que gera a interrup¸˜o do comparador? ca 4. Como s˜o acessadas as sa´ a ıdas dos comparadores em C? Exerc´ ıcios 1. Exerc´ ıcio Resolvido (Aula14E1): Desenvolver um programa que fa¸a a leitura do canal 0 c do conversor A/D e acione os LEDs do PORTD progressivamente conforme essa tens˜o a aumenta (bargraph). Configure o kit de forma que o canal 0 leia a o sinal do potenciˆmetro o (POT). 2. O kit possui um sensor de temperatura LM35. Este sensor apresenta em sua sa´ um sinal ıda linear de 10mV/oC. Fa¸a a leitura desse sensor e mostre o valor no LCD; para tanto ser´ c a necess´rio fazer a convers˜o do valor lido de bin´rio para oC e posteriormente ”quebrar”este a a a valor em d´ ıgitos para apresent´-los no display. a⇒ Dica: evite o uso de vari´veis fracion´rias (ponto flutuante). a a Exerc´ ıcios Propostos 1. Fa¸a um programa de controle de temperatura, que mantenha a temperatura lida pelo sensor c entre 32 e 40oC. Para isso fa¸a a leitura do sensor e acione a resistˆncia de aquecimento c e (RC1) para aquecer at´ atingir 40oC e a ventoinha (RC2) para resfriar at´ atingir 32 oC. e e Apresente no LCD a temperatura e se est´ aquecendo ou esfriando. a 232
  • 230. XM118 - Microcontroladores PIC188.15 Aula 15 - M´dulo CCP o Objetivos • Estudar os trˆs modos de opera¸˜o do m´dulo CCP e ca o – Captura – Compara¸˜o ca – PWM • Compreender o sistema de gera¸˜o de clock do PWM ca • Realiza aplica¸˜es pr´ticas dos modos compara¸˜o e PWM. co a ca Question´rio a 1. O que fazem cada um dos modos de opera¸˜o do CCP ca 2. Quais os eventos (configur´veis) que geram a captura do timer no modo captura? a 3. No modo compara¸˜o, qual registro ´ comparado com o timer? ca e 4. Quais as a¸˜es podem ser realizadas quando o timer coincide com o registro, no modo co captura? 5. Explique de forma sucinta o funcionamento do modo PWM. 6. Porque esse processo PWM ´ chamado de ”modula¸˜o”? e ca Exerc´ ıcios 1. Exerc´ Resolvido (Aula15E1): Configure o timer 1 e ECCP1 para que o m´dulo CCP gere ıcio o uma interrup¸˜o a cada 1 segundo. No tratamento de interrup¸˜o do ECCP1 implemente ca ca rotinas de um rel´gio de hora, minutos e segundos. No loop principal apresente no LCD a o hora. 2. Exerc´ Resolvido (Aula15E2): Desenvolver um programa que configure a frequˆncia do ıcio e PWM do CCP2 em 2 kHz e permita a varia¸˜o do Duty-cicle com incrementos e decrementos ca de 10 3. Combine os dois exemplos anteriores, de forma que tenhamos o rel´gio e o controle da o luminosidade da lˆmpada ao mesmo tempo a Exerc´ ıcios Propostos 1. Altere o exerc´ ıcio proposto da aula 15 para que a convers˜o do AD seja disparada pelo a m´dulo CCP2 configurado em modo compara¸˜o, gerando disparos a cada 100ms. Para o ca isso deve-se ativar a interrup¸˜o do ADC (e n˜o do CCP2) para fazer a leitura dos valores ca a convertidos. O controle a apresenta¸˜o da temperatura devem continuar sendo realizados ca no loop principal. 233
  • 231. XM118 - Microcontroladores PIC182. Configure o ECCP1 em modo PWM gerando um sinal de 2kHz. Fa¸a o valor do Duty-cicle c variar de 0 ao valor m´ximo seq¨encialmente. Configure o kit para que RC1 esteja ligado a a u entrada do DAC e me¸a com um oscilosc´pio o sinal de sa´ c o ıda. ⇒Dica: a varia¸˜o do valor do PWM deve ser sincronizada com os per´ ca ıodos do PWM. Para gerar esse sincronismo utilize o flag de interrup¸˜o do timer 2, que estoura a cada per´ ca ıodo do PWM quando a p´s-escala do timer est´ em 1:1. o a 234
  • 232. XM118 - Microcontroladores PIC188.16 Aula 16 - Comunica¸˜o serial ass´ ca ıncrona (RS232 e RS485) Objetivos • Compreender o princ´ ıpio de funcionamento das comunica¸˜es seriais co • Estudar os fundamentos dos padr˜es RS232 e RS485 o • Entender como a USART do PIC184550 possibilita realizar comunica¸˜o serial baseada no ca padr˜o RS-232 a Question´rio a 1. Sobre comunica¸˜o paralela, cite: ca (a) Suas vantagens: (b) Suas desvantagens: 2. A comunica¸˜o de forma serial elimina v´rios problemas presentes na comunica¸˜o paralela, ca a ca mas apresenta algumas desvantegens. Quais s˜o elas. a 3. Cite alguns sistemas de comunica¸˜o serial. ca 4. O que ´ comunica¸˜o s´ e ca ıncrona? 5. O que ´ comunica¸˜o ass´ e ca ıncrona? 6. Explique o processo pelo qual ´ poss´ criar sincronismos na comunica¸˜o ass´ e ıvel ca ıncrona sem a presen¸a do sinal de clock. c 7. Por que n˜o ´ poss´ enviar infinitos bits usando apenas um star bit inicial? a e ıvel 8. Preencha a figura abaixo com os elementos que comp˜em a comunica¸˜o serial e descreva a o ca fun¸˜o de cada um deles. ca 235
  • 233. XM118 - Microcontroladores PIC18 9. O que s˜o DTE e DCE? a10. Descreva a fun¸˜o dos principais sinais da comunica¸˜o RS232. ca ca11. Segundo a norma, qual a taxa m´xima suportada pela RS232? E qual a distˆncia m´xima? a a a12. Quis n´ ıveis de tens˜o representam os estados l´gicos ’0’ e ’1’ na transmiss˜o do padr˜o a o a a RS232?13. Cite um componente respons´vel por fazer a convers˜o de sinais em n´ TTL pra RS232. a a ıvel14. O que ´ transmiss˜o balanceada? e a15. Como ´ poss´ eliminar o ru´ em uma transmiss˜o balanceada? e ıvel ıdo a16. Qual a taxa m´xima especificada no padr˜o RS485? E a distˆncia m´xima? a a a a17. Supondo que em uma liga¸˜o de rede RS485 de 800 metros foi medido um tempo de subida ca ( R) de 6 s, qual a taxa m´xima pode ser alcan¸ada? a c18. Um equipamento comunica-se usando RS485 a uma taxa de 250 kbps. Qual o tempo de subida m´ximo aceito para que a comunica¸˜o funcione corretamente? a ca19. Calcule o valor do registro SPBRG e o erro percentual para as taxas de transmiss˜o abaixo, a considerando a frequˆncia do oscilador de 20MHz. Arbitre entre a op¸˜o de taxas altas e e ca taxas baixas para obter o menor erro poss´ ıvel Taxa de Spbrg Taxas altas ou Taxa real e% transmiss˜o (BR) a baixas? 2400 bps 9600 bps 19200 bps 57600 bps 250000 bps Exerc´ ıcios 1. 1. Exerc´ resolvido (Aula16E1): Desenvolver um programa capaz de transmitir via RS232 ıcio para um computador as teclas pressionadas no teclado e imprimir no LCD os caracteres recebidos do computador. Utilize taxa de transmiss˜o de 9600 bps. ⇒Dica: a (a) Utilize no computador o Hiper Terminal ou outro software de terminal dispon´ ıvel. (b) Para ganhar tempo, tome como base o arquivo Aula12E1 (LCD e teclado) 2. Altere o programa anterior para realizar a comunica¸˜o entre dois kits utilizando RS485. ca Da mesma maneira que o exerc´ acima, o valor pressionado no teclado deve ser enviado ıcio e o 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, al´m das fun¸˜es de transmiss˜o ´ importante lembrar que e co a e se faz necess´rio ativar o transmissor MAX485, o que ´ feito colocando ’1’ no pino de a e habilita¸˜o desse componente (ligado a RA4). O pino deve permanecer em ’1’ pelo tempo da ca transmiss˜o, que n˜o ´ o tempo da fun¸˜o, j´ que a fun¸˜o simplesmente inicia a transmiss˜o. a a e ca a ca a 236
  • 234. XM118 - Microcontroladores PIC18Exerc´ ıcios Propostos1. Desenvolver um programa que fique constantemente lendo o sensor de temperatura e envie essa informa¸˜o (em graus Celsius) pela porta serial RS232 para um computador. ca2. Desenvolver um sistema onde 3 kits trocam informa¸˜es entre si, sendo um mestre e dois co escravos. Cada escravo deve ter um endere¸o diferente, de forma que o mestre consiga se c comunicar hora com um, hora com outro. O mestre deve realizar um comando de leitura que tenha como resposta o valor Lido no potenciˆmetro POT de cada kit, e mostre simul- o taneamente esses valores no LCD. 237
  • 235. XM118 - Microcontroladores PIC188.17 Aula 17 - SPI Objetivos • Entender o funcionamento de do protocolo de comunica¸˜o SPI ca • Aprender a configurar o m´dulo MSSP do PIC18 para operar em modo SPI meste o • Conhecer o funcionamento de potenciˆmetros digitais. o • Implementar um comunica¸˜o serial entre o PIC18 e o potenciˆmetro digital do kit ca o Introdu¸˜o ca Existem diversos componentes que utilizam o protocolo de SPI para se comunicar com out-ros circuitos. De fato, como um modo eficiente e simples de comunica¸˜o, os mais diversos cacomponentes que podem ser comunicar com microcontroladores possuem essa porta de comu-nica¸˜o, como mem´rias, rel´gios, expansores de I/O, dispositivos de comunica¸˜o (Zigbee, eth- ca o o caernet, r´dios), CODEC, AD, DA, amplificadores de ganho program´vel, sensores de temperatura, a aacelerˆmetros, para citar alguns exemplos. o Como aplica¸˜o para o protocolo SPI no kit XM118 existe um potenciˆmetro digital. Um ca opotenciˆmetro digital ´ um componente que se comporta como um potenciˆmetro convencional, o e oisto ´, possui terminais e um cursor, e a resistˆncia entre o cursor e os terminais varia conforme o e eajuste. Por´m, ao contr´rio de um potenciˆmetro convencional, o ajuste do potenciˆmetro digital e a o o´ feito digitalmente por um microcontrolador. No caso do componente em quest˜o no kit, que ´e a eo MCP41010, esse ajuste ´ feito atrav´s da interface SPI. e e No kit o potenciˆmetro digital est´ ligado numa montagem divisor de tens˜o, de maneira que o a aos terminais estejam ligados a VDD e a GND e que possamos medir a tens˜o no cursor variando aentre 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 comunicacom o microcontrolador, consulte seu manual, que se encontra no CD que acompanha o kit. Question´rio a 1. Em quais modos pode operar a SPI do PIC18F4550? 2. Descreva a fun¸˜o de todos os pinos da porta SPI do PIC18F4550. ca 3. Quais fontes de clock podem gerar a taxa de transmiss˜o do m´dulo MSSP em modo SPI? a o 4. Consulte o manual do potenciˆmetro digital MCP41010 e responda as quest˜es a seguir o o (a) Qual a resistˆncia do potenciˆmetro interno do MCP41010? e o (b) Qual a faixa de tens˜o nos terminais do potenciˆmetro. a o (c) O n´mero de tapes representa quantos valores de resistˆncias podem ser ajustadas no u e MCP41010. Qual ´ esse valor? e 5. Encontre no manual o diagrama de tempo que resume o protocolo de comunica¸˜o com o ca potenciˆmetro digital. o 238
  • 236. XM118 - Microcontroladores PIC186. Encontre no manual a tabela que apresenta o formato dos comandos enviados ao po- tenciˆmetro digital. oExerc´ ıcios1. Exerc´ ıcio Resolvido (Aula16E1): Implemente um programa que envia valores para o po- tenciˆmetro digital a cada 50ms. Esses valores devem variar seq¨encialmente entra 0 e 255 o u e depois de 255 a 0. Tomando como base o primeiro exerc´ ıcio sobre AD, me¸a o valor c da sa´ do potenciˆmetro e mostre-o atrav´s de um bargraph de LEDs. Me¸a com um ıda o e c oscilosc´pio esse sinal. o2. Desenvolva um programa que leia a tens˜o do potenciˆmetro do kit atrav´s do canal AN3 e a o e ajuste o potenciˆmetro digital com essa mesma tens˜o (ou o mais pr´ximo que for poss´ o a o ıvel). No display LCD devem ser mostradas as tens˜es lidas do potenciˆmetro convencional (AN3) o o e do potenciˆmetro digital (AN0). oExerc´ ıcios Propostos1. Altere o exerc´ 2 para que o valor do potenciˆmetro digital s´ se ajuste ao potenciˆmetro ıcio o o o convencional enquanto a tecla em RB0 estiver pressionada, mantendo seu valor caso contr´rio. a 239
  • 237. XM118 - Microcontroladores PIC188.18 Aula 18 - I 2 C Objetivos 1. Estudar o protocolo I 2 C 2. Entender o funcionamento de uma mem´ria serial I 2 C o 3. Realizar uma aplica¸˜o pr´tica envolvendo mem´ria externa e I 2 C. ca a o Question´rio a 1. Em quais modos pode operar o PIC em modo I2C? 2. Explique como ´ poss´ e ıvel realizar a comunica¸˜o bidirecional entre dois dispositivos no ca barramento I2C usando apenas 1 terminal de dados (SDA). Porque ´ importante a presen¸a e c do resistor de pull-up ligado a esse pino? 3. O que caracteriza as condi¸˜es de Star e Stop no protocolo I2C? co 4. O que ´ o ACK? Quando e como ele ´ gerado? e e 5. Qual o procedimento para gerar uma leitura de um endere¸o qualquer de um dispositivo c I2C? Exerc´ ıcios 1. Exerc´ Resolvido (Aula17E1): Desenvolver um programa que leia o teclado e apresente ıcio na primeira linha do display valor lido. Se for pressionada a tecla ´A´ deve-se gravar a ultima tecla v´lida na EEPROM, no endere¸o 0. Na segunda linha deve-se apresentar o ´ a c valor lido no endere¸o 0 da EEPROM. Ap´s grava algum valor desligue o kit e observe que c o a EEPROM n˜o perde os dados. a ⇒Cuidado! Garanta que o programa s´ realize uma grava¸˜o cada vez que a tecla ´A´ for o ca pressionada. Caso o programa entre em loop e realize m´ltiplas grava¸˜es a mem´ria pode u co o ser danificada. 2. Altere o projeto desenvolvido no exerc´ 3 da aula 12, onde s˜o lidas 4 teclas e comparadas ıcio a com o ”1234”, para que a compara¸˜o seja feita com os quatro primeiros endere¸os da ca c EEPROM externa. Al´m disso, se for pressionada a tecla A pe¸a a senha antiga e em e c seguida uma nova senha e grave-a na mem´ria. o ⇒ Dica: ´ necess´rio garantir que a senha original (”1234”) esteja gravada na mem´ria. e a o Escreve um trecho de c´digo para fazer isso uma vez e em seguida comente essa parte do o programa para que a ultima senha gravada seja preservada. ´ Exerc´ ıcios Propostos 1. Desenvolva um programa que grave na mem´ria 10 valores lidos do AD (apenas os 8 bits o mais significativos), sendo que a cada vez que tecla INT for pressionada ap´s o reset um o valor seja gravado. Ap´s grava os 10 valores o passe a enviar esses valores repetidamente o 240
  • 238. XM118 - Microcontroladores PIC18para o potenciˆmetro digital, a intervalos de 100ms. Use um oscilosc´pio para observar o o oresultado.⇒ Como potenciˆmetro existe apenas um m´dulo MSSP realizando fun¸˜es de SPI e I2C ´ o o co enecess´rio desativar um modo antes de entrar em outro. Para isso use as fun¸˜es Openxxx() a coe Closexxx(). 241
  • 239. XM118 - Microcontroladores PIC188.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 aplica¸˜es de controle usando a interface industrial co ⇒ Aten¸˜o: esta experiˆncia faz uso do m´dulo XMM01 - Industrial Interface, que ´ um item ca e o eopcional pra o kit XM118. Verifique se esse produto faz parte do pacote adquirido. Introdu¸˜o ca Expansores de I/O Apesar de estarem dispon´ ıveis microcontroladores com diferentes quantidades de pinos, asvezes as condi¸˜es do projeto levam a uma situa¸˜o onde n˜o h´ pinos suficientes para a aplica¸˜o co ca a a cadesejada. Quando isso acontece deve-se pensar em algum processo de expans˜o de I/O. O am´todo mais simples ´ atrav´s do uso de buffers (por exemplo, 74HC244) e Latchs (por exemplo, e e e74HC573), criando um ”barramento de dados”externo compartilhado por esses dispositivos. O in-conveniente desse processo ´ que, mesmo com a expans˜o, o n´mero de pinos demandada ´ grande. e a u eOutro m´todo poss´ e ıvel s˜o resgitradores de deslocamento, fazendo convers˜o serial/paralelo ou a aparalelo/serial, de forma que o microcontrolador utilize poucos pinos em uma interface serial.Por fim, mais modernamente est˜o dispon´ a ıveis componentes chamados de expansores de I/O.esses componentes tem as mesmas caracter´ ısticas dos portais do microcontrolador, podendo-seconfigurar individualmente seus pinos como entrada ou sa´ ıda. Eles possuem interface SPI ou I2C,facilitando em muito o desenvolvimento de aplica¸˜es. co O m´dulo XMM01 utiliza um expansor de I/O MCP23016 para obter mais 16 pinos de I/O o(8 entradas e 8 sa´ ıdas). Interface industrial Muitas vezes o microcontrolador ´ utilizado em aplica¸˜es industriais, substituindo PLCs e coou em automa¸˜o de m´quinas. Nesses casos alguns cuidados deve ser tomados. O circuito ca ado microcontrolador, que vamos chamar circuito de controle, opera em baixas tens˜es (3,3VDC oou 5VDC) e aceita um certo n´ ıvel de ru´ ıdo. J´ as cargas e dispositivos entrada de aplica¸˜es a coindustriais costumam operar em tens˜es mais altas (10 VDC, 24 VDC e 48 VDC) ou mesmo tens˜o o aalternada (110VAC e 220VAC). Al´m disso, o n´ e ıvel de ru´ presente ´ maior, proveniente de ıdo echaveamento de circuitos de potˆncia (contatores, tiristores, etc...) ou proveniente de dispositivos ecomo motores, bombas, etc... Portanto, na pr´tica ´ o desej´vel o isolamento galvˆnico entre as a e a apartes de controle e potˆncia do circuito (dois circuitos s˜o isolados galvanicamente quando n˜o e a aexiste contato el´trico entre eles). Nessas situa¸˜es usa-se foto-acopladores (tamb´m conhecidos e co ecomo opto-isoladores) para fazer garantir o isolamento dos sinais. Essa precau¸˜o n˜o tem sentido ca ase os circuitos ficarem em contato pr´ximo na placa, portanto tamb´m deve existir um cuidado o ede layout para garantir a separa¸˜o dos diferentes dom´ ca ınios el´tricos. e O m´dulo XMM118 possui entradas e sa´ o ıdas isoladas (foto-acopladas) que permitem a conex˜o aa sinais de 10 a 24VDC. Atrav´s do uso desse m´dulo ´ poss´ realizar aplica¸˜es de controle e o e ıvel coem aplica¸˜es reais industriais, como: leitura de sensores digitais e chaves, acionamento de rel´s, co ev´lvulas e outros dispositivos. Adicionalmente o pr´prio kit XM118 possui entradas (0 a 10V, 4 a o 242
  • 240. XM118 - Microcontroladores PIC18a 20 mA) e sa´ ıdas (a sa´ do DAC pode ser ajustada para at´ 0 a 10V) que podem ser usadas ıda eem aplica¸˜es tipicamente industriais (nesse caso n˜o existe isolamento galvˆnico). co a a Al´m disso, observe que os dom´ e ınios de el´tricos est˜o separados, o que pode ser evidenciado e apelos diferentes tipos de malha de terra empregados na placa. Question´rio a ⇒Consulte o manual do MCP23016 e responda as perguntas abaixo. 1. Quantos pinos de I/O o dispositivo possui? 2. Qual a interface de comunica¸˜o desse dispositivo? ca 3. O MCP23016 possui 3 pinos para defini¸˜o de seu endere¸o no barramento de comunica¸˜o. ca c ca Quais s˜o esses pinos? Quantos dispositivos iguais poder´ a ıamos ter em um mesmo barramento ent˜o? Quantos pinos de I/O estariam dispon´ a ıveis nessa condi¸˜o? ca 4. Quais os registros respons´veis pela defini¸˜o de dire¸˜o dos pinos? a ca ca Exerc´ ıcios 1. Exerc´ ıcio Resolvido (Aula19E1): Desenvolva uma biblioteca de fun¸˜es que permita (1) co configura¸˜o do MCP23016 no que se refere a dire¸˜o dos pinos de I/O, (2) Leitura de ca ca portal de entrada e (3) escrita no portal de sa´ ıda. Para testar essa biblioteca a informa¸˜o ca lida da entrada deve ser apresentada nos LEDs do kit e as sa´ ıdas devem ser acionadas seq¨encialmente a intervalos de 100ms. u ⇒ O protocolo de comunica¸˜o do MCP23016 ´ similar ao da mem´ria EEPROM, portanto ca e o use as rotinas de leitura e escrita da EEPROM I2C presentes na biblioteca I2C.h para fazer as novas fun¸˜es. co 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. 243
  • 241. XM118 - Microcontroladores PIC18Este manual tem como objetivos principais:• Apresentar o conte´do do kit (equipamentos e documenta¸˜o) u ca• Apresentar um guia r´pido de instala¸˜o e testes a ca• Apresentar detalhes de instala¸˜o de software e hardware ca• Descrever os circuitos do kit, de forma a permitir identifica¸˜o de ca 245
  • 242. XM118 - Microcontroladores PIC18Cap´ ıtulo 9Conte´ do do Kit: u Depois de retirar o seu kit de desenvolvimento da caixa, verifique se o mesmo possui osseguintes itens: • 01 Kit educacional em bastidor met´lico, com fonte de alimenta¸˜o e gravador/depurador a ca X-ICD2 embutido; • 01 Cabo de alimenta¸˜o de trˆs pinos(2P+T); ca e • 01 Cabo de comunica¸˜o serial; ca • 02 Cabos de comunica¸˜o USB (um para grava¸˜o/depura¸˜o e um para aplica¸˜o) ca ca ca ca • 01 header (placa para grava¸˜o de outros microcontroladores) ca • 01 cabo RJ12/RJ12, para conex˜o do kit ao header. a • CDCaso ocorra a falta de algum destes itens ou defeito, consulte a Exsto Tecnologia para esclareci-mentos. 246
  • 243. XM118 - Microcontroladores PIC189.1 Conte´ do do DVD u O CD traz toda a informa¸˜o e programas necess´rios para o uso do kit, tais como: ca a • Esquemas el´tricos do kit. e • Exemplos e exerc´ ıcios resolvidos. • Documenta¸˜o do produto. ca • Manual dos componentes e outros documentos relevantes • Instala¸˜o do Quartus II e outros softwares uteis. ca ´ ⇒Ao inserir o CD no drive ele deve automaticamente iniciar um aplicativo que permite navegarpor seu conte´do. u9.2 Instala¸oes c˜9.2.1 Instala¸˜o do Hardware ca Ao retirar o kit da embalagem confirme a presen¸a de todos os acess´rios e equipamentos, c oconforme descrito no item 1 deste manual. Para alimentar o kit ligue o cabo tripolar ao kit e a uma tomada de alimenta¸˜o. O kit ´ ca eequipado com fontes chaveadas que operam, de forma autom´tica, com 110 ou 220V, em 50 ou a60Hz. Para ligar o kit, use a chave que se encontra junto ao conector tripolar, na parte traseirado kit. Ligue o kit e verifique se os LED’s indicadores de alimenta¸˜o e o logotipo da Exsto na parte cafrontal se acenderam, indicando que est´ tudo funcionando corretamente. a Na parte traseira do bastidor existe um conector USB. Esse conector conecta o computadorao gravador/depurador X-ICD2. Para ligar o seu X-ICD2 siga os passos abaixo: 1. Verifique se o cabo USB que acompanha o produto est´ conectado a uma porta USB do seu a computador; 2. Conecte o X-ICD2 a outra ponta do cabo USB. Depois disto, um led verde com a identi- fica¸˜o ”USB”deve acender. ca 247
  • 244. XM118 - Microcontroladores PIC18 3. Na hora da primeira coloca¸˜o do X-ICD2, ser´ solicitada a instala¸˜o dos drivers do novo ca a ca dispositivo pelo sistema operacional; 4. Depois de indicado a localiza¸˜o dos drivers, o sistema operacional os instalar´ e o X-ICD2 ca a estar´ pronto para uso. a ´ E importante lembrar que o equipamento, estar´ pronto para o uso assim que os seus drivers aestiverem instalados. Na sequˆncia do manual, ser˜o descritos os procedimentos de instala¸˜o dos e a cadrivers e da ferramenta MPLAB da Microchip. Ainda, devemos lembrar que o uso do equipamento ´ feito principalmente atrav´s do software e eMPLAB e por isso seria ideal se o mesmo j´ estivesse instalado. a Depois de alimentada e detectado os drivers da placa, vocˆ estar´ pronto para utilizar o X- e aICD2 . A conex˜o/desconex˜o do X-ICD2 deve ser feita com a ferramenta de software MPLAB a afechada. Caso adicione ou retire o X-ICD2 da conex˜o USB com o MPLAB aberto, o mesmo n˜o a afuncionar´ corretamente no aplicativo. a Al´m das conex˜es de alimenta¸˜o e do X-ICD2 existe ainda a conex˜o USB de aplica¸˜o e e o ca a caserial (RS232). Essas conex˜es ser˜o usadas nas experiˆncias com o kit. o a e Figura 9.1: Diagrama de instala¸˜o do kit ca9.2.2 Instala¸˜o dos Softwares caInstala¸˜o do MPLAB 8.20 ca Execute o arquivo Install MPLAB v820.exe. Para isso clique em ”Instalar MPLAB 8.20”noaplicativo executado quando o CD ´ inserido. e 248
  • 245. XM118 - Microcontroladores PIC18 Figura 9.2: Tela inicial. A primeira tela ´ apenas uma tela de boas vindas. Nela s˜o recomendadas as seguintes a¸˜es e a coantes de instalar o MPLAB: • Fechar qualquer outro aplicativo • Desinstalar qualquer vers˜o do MPLAB j´ existente (em especial as 6.x) a a • Desabilitar o anti-v´ Irus. Tomadas essas precau¸˜es, clique em Next. co Figura 9.3: Contrato de licen¸a do MPLAB. c Esta tela apresenta o contrato de licen¸a do MPLAB. Leia-o atentamente e, estando de acordo, cmarque a op¸˜o ”I accept the terms of the license agreement”e clique em Next. ca 249
  • 246. XM118 - Microcontroladores PIC18 Figura 9.4: Sele¸˜o de vers˜o. ca a Nesta tela ´ poss´ escolher entre a vers˜o completa e personalizada.Recomendamos optar e ıvel apor Completa e clicar em Next. Figura 9.5: Pasta de instala¸˜o do MPLAB. ca Nesta tela ´ poss´ escolher a pasta de instala¸˜o do MPLAB, que n˜o recomendamos. Clique e ıvel ca aem Next. 250
  • 247. XM118 - Microcontroladores PIC18 Figura 9.6: Contrato de licen¸a do Application Maestro. c Esta tela apresenta o contrato de licen¸a do Application Maestro (um aplicativo que ´ instalado c ejuntamente como o MPLAB). Leia-o atentamente e, estando de acordo, marque a op¸˜o ”I accept cathe terms of the license agreement”e clique em Next. Figura 9.7: Contrato de licen¸a do compilador C32. c Esta tela apresenta o contrato de licen¸a do compilador C32. Leia-o atentamente e, estando cde acordo, marque a op¸˜o ”I accept the terms of the license agreement”e clique em Next. ca 251
  • 248. XM118 - Microcontroladores PIC18 Figura 9.8: Resumo da instala¸˜o . ca Esta tela apresenta um resumo da instala¸˜o antes que essa seja iniciada. Estando tudo cacorreto, clique em Next para iniciar a instala¸˜o. ca Figura 9.9: Andamento da instala¸˜o. ca Nesta tela ´ apresentado o andamento da instala¸˜o. Esse processo pode demorar alguns e caminutos. 252
  • 249. XM118 - Microcontroladores PIC18 Figura 9.10: Instala¸˜o do compilador HI-TECH C. ca Essa tela aparece ap´s a copia dos arquivos e questiona sobre a instala¸˜o do compilador o caHI-TECH C, que ´ um compilador (vers˜o demo) associado ao MPLAB. Clique Yes caso queira e ainstal´-lo e No caso contr´rio. a a Figura 9.11: Tela de conclus˜o da instala¸˜o. a ca ca a ´ Ao final da instala¸˜o aparecer´ a tela acima. E necess´rio reiniciar o computador para que o aMPLAB possa ser executado normalmente. Para isso, marque a op¸˜o ”Yes, I want to restart camy computer now”e clique em Finish. 253
  • 250. XM118 - Microcontroladores PIC18Instalando o Compilador C18 Executando o programa de instala¸˜o do C18 a primeira tela que aparece ´ apresentada a ca eseguir. Figura 9.12: Tela inicial de instala¸˜o do C18. ca Conforme a orienta¸˜o apresentada, o MPLAB IDE deve ser fechado antes da instala¸˜o do ca caC18. Clique em Next para a pr´xima tela. o 254
  • 251. XM118 - Microcontroladores PIC18 Figura 9.13: Contrato de licen¸a. c Uma vez lido o contrato de licen¸a e aceito seus termos marque a op¸˜o ”I Accept”e clique c caem Next. Figura 9.14: Diret´rio de instala¸˜o o ca Na tela acima ´ poss´ alterar o diret´rio de instala¸˜o do C18 clicando no bot˜o Browse..., e ıvel o ca aapesar de n˜o recomendarmos que isso seja feito. Clique em Next. a 255
  • 252. XM118 - Microcontroladores PIC18 Figura 9.15: Componentes do pacote do compilador. 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. Figura 9.16: Campos a serem selecionados. 256
  • 253. XM118 - Microcontroladores PIC18 Figura 9.17: Campos a serem selecionados 2. ´ E importante marcar todos os campos nas telas acima para que o MPLAB IDE seja atualizadopara trabalhar com o compilador C18. Ap´s marcar todos os campos, clique em Next. o Figura 9.18: Tela inicio de instala¸˜o. ca Clicando em Next na tela acima a instala¸˜o tem in´ ca ıcio. Esse processo pode levar algumtempo. Uma vez terminado esse processo a tela abaixo ´ apresentada. Clique em Finish para eterminar o processo. 257
  • 254. XM118 - Microcontroladores PIC18 Figura 9.19: Tela de conclus˜o. a9.2.3 Configura¸oes ap´s a instala¸˜o c˜ o caConfigura¸˜o dos drivers do XICD ca O XM118 ´ acompanhado de um CD contendo os programas utilizados para o desenvolvimento ee ainda os drivers necess´rios para a instala¸˜o do hardware do XICD. a ca Este item do manual visa continuar os esclarecimentos quanto a instala¸˜o dos drivers no caprimeiro uso do sistema. Ent˜o, quando o equipamento ´ conectado ao computador atrav´s do cabo USB, isto ´ detec- a e e etado pelo computador mostrando a seguinte tela de identifica¸˜o do dispositivo: ca Figura 9.20: Assistente para adicionar novo hardware. Para a instala¸˜o dos drivers do XICD, podemos proceder de pelo menos duas formas: A ca 258
  • 255. XM118 - Microcontroladores PIC18primeira ´ fazer com que o sistema operacional procure automaticamente os drivers do novo edispositivo, deixando a op¸˜o selecionada como acima. Isso funciona bem quando h´ uma conex˜o ca a ainternet, pois ele procurar´ os drivers automaticamente. a A segunda forma ´ procurar localmente os drivers. Para isso, temos duas localiza¸˜es diferentes e copara os drivers. Para adicionar localmente devemos selecionar a op¸˜o ”Instalar de uma lista ou calocal especifico”e colocar o caminho onde ser˜o encontrados os drivers. a Figura 9.21: Procura avan¸ada de drivers. c Conforme j´ dito, podemos encontrar os drivers em alguns locais distintos. Um destes lugares aseria o diret´rio onde foi instalado o pr´prio MPLAB que pode ser visto como exemplo na figura o oanterior. O caminho padr˜o para a procura dos drivers do XICD no MPLAB ´: ”C:Arquivos de a eprogramasMicrochipMPLAB IDEICD2Drivers”. Neste local teremos os drivers do XICD sevocˆ instalou o MPLAB na pasta padr˜o usando o sistema operacional em portuguˆs. Outro e a elocal onde podemos localizar os drivers seria no CD que acompanha o produto. A localiza¸˜o dele cadentro do CD seria na pasta programas e na subpasta drivers. Depois de instalado o mesmo est´ pronto para uso e a seguinte janela aparecer´. a a 259
  • 256. XM118 - Microcontroladores PIC18 Figura 9.22: Localiza¸˜o do painel de configura¸˜o ca caConfigura¸˜o do IDE MPLAB para uso do XICD ca Como j´ foi dito anteriormente, o XICD pode ser usado como ferramenta de programa¸˜o a cade microcontroladores e tamb´m de depura¸˜o em tempo real. Para ambas as opera¸˜es s˜o e ca co anecess´rias o preparo do MPLAB para usar o XICD para cada uma destas fun¸˜es. Essas fun¸˜es a co cos˜o chamadas de modos de programa¸˜o (Programming mode)e modo de depura¸˜o (Debugger a ca camode) que s˜o descritos aqui. a Para o uso do XICD para ambos os modos de opera¸˜o ´ necess´ria a sua configura¸˜o atrav´s ca e a ca ede um assistente de configura¸˜o do XICD, que define alguns parˆmetros para o seu funciona- ca amento. Abaixo temos um passo a passo de como proceder na instala¸˜o deste modelo de XICD. ca Tanto em modo de depura¸˜o quanto em modo de programa¸˜o ´ necess´ria a configura¸˜o de ca ca e a caqual equipamento ser´ usado pelo MPLAB para acesso ao microcontrolador, que ´ feita atrav´s a e edos menus ”Debugger”e ”Programmer”. Depois que o usu´rio definir que tipo de opera¸˜o far´, ´ s´ selecionar o ICD2 no menu a ca a e oindicado, no nosso caso aqui estamos usando o modo de programa¸˜o: ca Figura 9.23: Selecionando XICD como ferramenta de programa¸˜o ca Depois de selecionado o ICD2 como ferramenta de programa¸˜o vem finalmente ` configura¸˜o ca a cado mesmo, onde temos um wizard para facilitar esta configura¸˜o. ca 260
  • 257. XM118 - Microcontroladores PIC18 Figura 9.24: Tela inicial do wizard para configura¸˜o do XICD ca Pressionando a tecla avan¸ar, temos a pr´xima janela que permite escolher em que porta c oexterna est´ o dispositivo. Sendo o nosso XICD com comunica¸˜o USB, devemos escolher a op¸˜o a ca caUSB na op¸˜o ”Com Port ”. ca Figura 9.25: Op¸˜o de porta de comunica¸˜o do XICD ca ca Em seguida, devemos especificar se o target (placa onde est´ o microcontrolador a ser gravado) aser´ alimentado pelo XICD ou ter´ alimenta¸˜o pr´pria. E a a ca o ´ recomendado que somente circuitoscom baixo consumo sejam colocados para serem alimentados pelo XICD j´ que sua alimenta¸˜o a cavem da porta USB e consequentemente o target ser´ alimentado pela mesma fonte. a 261
  • 258. XM118 - Microcontroladores PIC18 Este tipo de alimenta¸˜o ent˜o deve ser usado com prudˆncia para evitar danos a porta USB. ca a eEm uma porta USB padr˜o temos dispon´ por porta somente 500mA aproximadamente. Assim, a ıvelo consumo do XICD mais o consumo do target n˜o podem superar o valor m´ximo da porta USB. a a No XICD, no termino desta configura¸˜o, possui uma forma de sinalizar se o hardware do caXICD est´ fornecendo a energia ou se ´ o target. a e Abaixo temos a janela de configura¸˜o que permite configurar o XICD para fornecer ali- camenta¸˜o para o target ou se o mesmo tem sua pr´pria fonte de alimenta¸˜o. ca o ca Figura 9.26: Fonte de alimenta¸˜o do target. ca 262
  • 259. XM118 - Microcontroladores PIC18 Figura 9.27: Configura¸˜o da conex˜o autom´tica ca a a A janela acima define se o XICD tentar´ se conectar ao target de forma autom´tica ao ser a aselecionado no programmer ou debugger e a pr´xima definir´ se ser´ de forma autom´tica o o a a acarregamento do sistema operacional para o XICD. Onde cada sistema operacional ´ diferente epara a fam´ de microcontrolador utilizada e necess´ria para a programa¸˜o do target. ılia a ca Figura 9.28: Configura¸˜o do download autom´tico do sistema operacional do XICD ca a 263
  • 260. XM118 - Microcontroladores PIC18 Figura 9.29: Resumo das configura¸˜es do XICD co9.3 Hardware do kit XM118 A Figura abaixo apresenta a serigrafia da placa do Kit Educacional XM118. Figura 9.30: Serigrafia do Kit XM118 264
  • 261. XM118 - Microcontroladores PIC18 O hardware do Kit Educacional XM118 foi concebido para permitir a maior flexibilidadeposs´ nas liga¸˜es. Para os pinos com diversas fun¸˜es foram ligados a chaves dip switch, de ıvel co coforma a permitar a conex˜o com diferentes circuitos de aplica¸˜o. Para configurar corretamente a cao hardware para suas necessidades leia as tabelas indicativas das fun¸˜es das chaves. co Muitos dos circuitos de aplica¸˜o possuem pontos de testes (test points) que facilitam a medida cade seus principais sinais. A seguir s˜o apresentadas detalhadamente as partes do circuito. Elas afazem referˆncia ao esquema el´trico que se encontra no anexo A deste manual e em forma PDF e eno CD.9.3.1 Fonte de alimenta¸˜o ca O kit Educacional CPLD ´ equipado com duas fontes chaveadas independentes de +5VDC/3A ee +12VDC/1A. A tens˜o de entrada dessas fontes ´ de 90 a 240 VAC (fullrange), em 50 ou 60 a eHz. Estas fontes tˆm prote¸˜o de sa´ contra curto-circuito e sobrecarga que desativa as sa´ e ca ıda ıdas,retornando a opera¸˜o normal assim que o problema deixa de existir. Adicionalmente, existe uma caprote¸˜o entrada contra surtos de tens˜o. O bastidor met´lico ´ aterrado, para maior prote¸˜o ca a a e cados usu´rios. a As fontes de alimenta¸˜o est˜o dispon´ ca a ıveis para o usu´rio em conectores apropriados. Seu uso, acontudo, deve respeitar a corrente m´xima dispon´ a ıvel.9.3.2 Microcontrolador PIC18F4550 O kit XM118 foi baseado no PIC18F4550. Trata-se de um microcontrolador de 8 bits de altodesempenho, com uma s´rie de perif´ricos e recursos que o tornam bastante completo, permitindo e eatrav´s de seu estudo explorar v´rios recursos comumente encontrados em microcontroladores. Em e aespecial, este possui um perif´rico USB onde sua comunica¸˜o operando como device , permite e casua conex˜o a um computador ou outro dispositivo host. a A tabela a seguir traz as principais caracter´ ısticas do PIC18F4550. 265
  • 262. XM118 - Microcontroladores PIC18 Caracter´ ıstica PIC18F4520 Frequˆncia de Opera¸˜o e ca DC a 48MHz Mem´ria de programa o 32768 bytes Mem´ria de dados RAM o 2048 bytes Mem´ria de dados EEPROM o 256 bytes Fontes de interrup¸˜o ca 20 Terminais de I/O 36 Temporizadores/Contadores 4 CCP 1 ECCP 1 Comunica¸˜o Serial ca MSSP EUSART Comunica¸˜o USB ca Sim Comunica¸˜o Paralela ca SPP Conversor anal´gico para digital o 10 bits, 13 canais Detector de tens˜o program´vel a a 1 Conjunto de instru¸˜es co 75 convencionais + 8 do modo entendido Tabela 9.1: Caracter´ ısticas dos PIC18F4550 A pinagem desse componente ´ apresentada na figura abaixo. e Figura 9.31: Pinagem do PIC18F4550 Para mais dados t´cnicos, consulte o manual do componente que se encontra no CD do produto. e Al´m do PIC18F4550 outros microcontroladores PIC de 40 pinos podem ser usados na placa, edesde que sejam compat´ ıveis pino a pino (o que ´ verdade para a maioria dos pinos de componentes ecom o mesmo encapsulamento). Alguns modelos muito populares suportados com algumas poucasrestri¸˜es s˜o o PIC18F4520 e o PIC16F877A. co a 266
  • 263. XM118 - Microcontroladores PIC189.3.3 Conectores para acesso de I/O (PORTS) Imediatamente acima do conector de expans˜o de aplica¸˜o existem conectores que d˜o acesso a ca aaos portais do microcontrolador. A serigrafia da placa indica a disposi¸˜o dos pinos. ca9.3.4 ICD e conector ICSP O kit XM118 ´ equipado com um gravador/depurador X-ICD2, que fica embutido dentro do egabinete do kit. Esse equipamento ´ totalmente compat´ e ıvel com o MPLAB e com o gravadorICD-2 da Microchip, sendo reconhecido como um ICD-2 dentro do MPLAB. O XICD-2 est´ conectado ao XM118 e consequentemente ao microcontrolador nele instalado aatrav´s da chave U8, essa chave permite desconectar os pinos do microcontrolador do XICD equando necess´rio, j´ que os pinos de grava¸˜o s˜o pinos de I/O usados em algumas aplica¸˜es e a a ca a coo pino de reset. Al´m disso, o conector CN9 permite gravar/depurar outros componentes externos, seja atrav´s e edo header (placa para grava¸˜o de componente) que acompanha o kit, seja em placas desenvolvidas capelo pr´prio usu´rio. Para isso, um cabo RJ12-RJ12 acompanha o produto. o a Como o hardware do XICD n˜o precisa de nenhuma interven¸˜o do usu´rio ele n˜o ser´ a ca a a aabordado aqui. Contudo ´ necess´rio verificar algumas caracter´ e a ısticas para que o produto possafuncionar corretamente em qualquer tipo de circuito alvo. Algumas dessas caracter´ ısticas podemser citadas como a sequˆncia de pinos do conector e os elementos que est˜o ligados nas vias de e agrava¸˜o/depura¸˜o do microcontrolador. ca ca No XICD, temos quatro leds indicadores que permitem analisar o atual funcionamento doXICD, cuja fun¸˜o ´ descrita pela figura abaixo (esses LEDs s˜o do XICD e portanto est˜o ca e a adentro do bastidor, n˜o estando acess´ a ıveis para o usu´rio, servindo apenas para manuten¸˜o): a ca ¸ˆ FUNCAO/ LED’s Descri¸˜o ca Target/Verde Indica se a placa alvo est´ sendo alimentada pelo XICD a Busy/Amarelo Indica que o XICD est´ executando alguma tarefa a Error/Vermelho Indica se aconteceu algum erro na comunica¸˜o com o XICD ca USB/Verde Indica que o XICD est´ alimentado e pronto para uso a Tabela 9.2: Esquema de pinos do XICD 267
  • 264. XM118 - Microcontroladores PIC18 Al´m desses LEDs internos, existe na placa um LED AZUL que indica quando o microcon- etrolador est´ sendo acessado. Observando esse LED podemos detectar se existem problemas na agrava¸˜o. ca O primeiro ponto a ser abordado ´ a sequˆncia de pinos do XICD. O cabo que acompanha o e eproduto se limita a fazer a liga¸˜o entre o XICD e a placa reader. Entretanto, pode ser necess´rio ca afazer a liga¸˜o do XICD a outro tipo de placa onde o microcontrolador n˜o pode ser colocado no ca areader ou ainda por ser necess´ria a depura¸˜o o microcontrolador tem que estar funcionando na a caplaca de desenvolvimento. Como a sequˆncia dos pinos deve ser respeitada para que o funcionamento seja feito, abaixo etemos uma figura que mostra a forma com que cada pino est´ ligado no conector do XICD. a Figura 9.32: Esquema de pinos do XICD Na pr´xima figura ´ apresentada a conex˜o entre o XICD e a placa de desenvolvimento com o e auso do cabo telefˆnico adaptado. O diagrama tamb´m mostra a conex˜o entre o conector e o o e aPIC na placa de desenvolvimento. Recomenda-se tamb´m que se use um resistor de pull-up, se enecess´rio, entre VPP e VDD de modo que zerando a alimenta¸˜o possa-se reiniciar o PIC alvo. a caO valor deste resistor ´ usualmente de 10KΩ. e Figura 9.33: Liga¸˜o do XICD ca Embora o pino 2 (VDD) possa suprir uma quantidade limitada de corrente para o alvo sobre 268
  • 265. XM118 - Microcontroladores PIC18certas condi¸˜es, nas opera¸˜es seguintes os pinos 2 e 3 ser˜o omitidos. Estes pinos s˜o apresen- co co a atados no diagrama, mas apenas trˆs liga¸˜es s˜o relevantes para opera¸˜o do XICD: VPP, PGC e co a cae PGD. Nos diagramas seguintes os pinos de VDD e VSS (GND) ser˜o ignorados. Mas esteja ciente ade que o VDD da placa de desenvolvimento ´ tamb´m usado para alimentar os drivers de sa´ do e e ıda ´XICD. E importante lembrar que nem todos PIC´s tem entradas para alimenta¸˜es distintas, mas cose elas existirem no PIC que se deseja operar, todas devem estar conectadas corretamente paraque o XICD opere corretamente. A interconex˜o ´ muito simples, qualquer problema comum a e´ frequentemente causado por outras conex˜es ou componentes nas vias de uso do XICD quee ointerferem com seu funcionamento, como os apresentados no cap´ ıtulo abaixo.Circuitos que impedir˜o o funcionamento correto do XICD a Na figura abaixo s˜o apresentados alguns procedimentos que impedir˜o o funcionamento cor- a areto do XICD. Figura 9.34: Liga¸˜o do XICD ca Para o projeto de liga¸˜o do XICD em uma placa de desenvolvimento siga corretamente as carecomenda¸˜es abaixo: co • N˜o use resistores de pull-up nos pinos PGC e PGD: eles ir˜o impedir a transi¸˜o r´pida, a a ca a tanto de dados como do sinal de clock nas opera¸˜es de grava¸˜o e depura¸˜o. co ca ca • N˜o use capacitores no pino VPP: eles ir˜o impedir a transi¸˜o r´pida de VPP. Geralmente a a ca a o resistor de pull-up ´ suficiente. e • N˜o use diodos nos pinos PGC e PGD: eles ir˜o impedir a comunica¸˜o bidirecional entre a a ca a placa e o XICD.9.3.5 Configura¸˜o ca O microcontrolador tem um n´mero limitado de pinos para poder interagir com todos os ucircuitos presentes no kit. Al´m disso, v´rios pinos tˆm mais de uma fun¸˜o, podendo trabalhar e a e cade forma diferente com cada circuito a ele associado. Para maximizar o n´mero de aplica¸˜es u coque podem ser realizadas ,se faz necess´rio atribuir mais de um circuito a cada terminal do acomponentes e selecionar o circuito a ser usado em cada caso. 269
  • 266. XM118 - Microcontroladores PIC18 Alguns circuitos est˜o simplesmente ligados em paralelos, como por exemplo, LEDs e LCD, ateclado e chaves. Outros s˜o selecionados atrav´s de chaves de configura¸˜o. A tabela abaixo a e caapresenta as configura¸˜es poss´ co ıveis, indicando o portal do microcontrolador, o sinal utilizado,sua fun¸˜o e dire¸˜o (em rela¸˜o o microcontrolador). ca ca ca Portal do Sinal Dire¸˜o ca Fun¸˜o ca microcontrolador RC0 555 OUT Entrada Sinal do gerador de sinais ´ TACOGRAFO Entrada Sinal do tac´grafo (conta-giros) da ventoinha o RC1 AQUECEDOR Sa´ ıda Controle da resistˆncia para aquecimento e LAMP Sa´ ıda Controle da lˆmpada DC a RC2 VENTILADOR Sa´ ıda Controle da ventoinha BUZZER Sa´ ıda Controle do buzzer DAC Sa´ ıda Entrada do filtro do DAC do PWM RA3 POT Entrada Sinal anal´gico do potenciˆmetro o o RA2 LCD CS Sa´ ıda Chip Select do display gr´fico a USB SENSE Entrada Entrada indicadora de conex˜o com USB a RA4 ´ TACOGRAFO Entrada Sinal do tac´grafo (conta-giros) da ventoinha o CS REST Sa´ ıda Habilita¸˜o do MCP41010 e do HT1380 ca RS EN Sa´ ıda Habilita¸˜o de transmiss˜o pela porta RS485 ca a RE1 LED 1G Sa´ ıda Aciona cor verde do LED bicolor 1 RE0 LED 1R Sa´ ıda Aciona cor vermelha do LED bicolor 1 RA5 LED 2G Sa´ ıda Aciona cor verde do LED bicolor 2 RA3 LED 2R Sa´ ıda Aciona cor vermelha do LED bicolor 2 RA0 ANALOG1 Entrada Entrada Anal´gica AN1 o POT Entrada Potenciˆmetro o DPOT Entrada Potenciˆmetro digital o TEMP Entrada Sensor de temperatura RA1 ANALOG2 Entrada Entrada Anal´gica AN1 o DAC OUT Entrada Feedback do conversor D/A RA2 0-10V Entrada Entrada Anal´gica de 0 a 10 V o RA3 4-20mV Entrada Entrada Anal´gica de 4 a 20 mA o RC4 D- Bidir Comunica¸˜o USB ca RC5 D+ Bidir RC6 RS 485 TX Sa´ ıda Transmiss˜o serial para RS485 a RS 232 TX Sa´ ıda Transmiss˜o serial para RS232 a RC7 RS 485 RX Sa´ ıda Recep¸˜o serial para RS485 ca RS 232 RX Sa´ ıda Recep¸˜o serial para RS232 ca RC6 ´ RELE 1 Sa´ ıda Aciona Rel´ 1 e RC7 ´ RELE 2 Sa´ ıda Aciona Rel´ 2 e RD6 ´ RELE 3 Sa´ ıda Aciona Rel´ 3 e RD7 ´ RELE 4 Sa´ ıda Aciona Rel´ 4 e Tabela 9.3: Configura¸˜o das chaves. ca 270
  • 267. XM118 - Microcontroladores PIC18A tabela abaixo mostra a configura¸˜o dos dip switch para cada circuito. ca Portal do Sinal Chave Dip Switch microcontrolador PWM e Timers RC0 555 OUT 1 CH3 TACOGRAFO 2 RC1 AQUECEDOR 3 LAMP 4 RC2 VENTILADOR 5 BUZZER 6 DAC 7 RA3 POT 8 Perif´ricos Diversos e RA2 LCD CS 1 CH2 USB SENSE 2 RA4 TACOGRAFO 3 CS REST 4 RE1 LED 1G 5 RE0 LED 1R 6 RA5 LED 2G 7 RA3 LED 2R 8 Perif´ricos Anal´gicos e o RA0 ANALOG1 1 CH1 RA1 ANALOG2 2 RA2 0-10V 3 RA3 4-20mA 4 RA0 POT 5 DPOT 6 TEMP 7 RA1 DAC OUT 8 Portas Seriais RC4 D 1 CH4 RC5 D 2 RA4 RS EN 3 - Snifer 4 RC6 RS 485 TX 5 RS 232 TX 6 RC7 RS 485 RX 7 RS 232 RX 8 Rel´s e RC6 RELE 1´ 1 CH5 RC7 RELE ´ 2 2 RD6 RELE 3´ 3 RD7 RELE ´ 4 4 Tabela 9.4: Configura¸˜o do dip switch ca 271
  • 268. XM118 - Microcontroladores PIC189.3.6 Dispositivos de entradaTeclado Um teclado matricial est´ dispon´ a ıvel. Trata-se de um teclado que opera por varredura, isto´, s˜o aplicados diferentes valores nas linhas e pelo valor lido nas colunas ´ poss´ identificar ae a e ıveltecla pressionado, com uma clara economia de pinos (8 pinos para ler 16 teclas). O teclado est´ aligado ao microcontrolador conforme a tabela abaixo. RB3 Rb2 RB1 RB0 RB4 1 2 3 RB5 4 5 6 B RB6 7 8 9 C RB7 */E 0 #/F D Tabela 9.5: Leitura do teclado matricial pelo microcontroladorChaves Est˜o dispon´ a ıveis 8 chaves dip switch ligadas ao portal B do microcontrolador. Observe queessas chaves foram projetadas para ser baixo ativas, portanto ao serem colocadas na posi¸˜o ON caelas aterram os pinos do microcontrolador. Estando aberto o n´ ıvel l´gico alto nas entradas do omicrocontrolador ´ garantido pelos resistores de pull-up internos. e 272
  • 269. XM118 - Microcontroladores PIC18Push-Buttons Existem 5 chaves pulsativas (push-buttons) ligados a pinos do microcontrolador. Alguns dessespinos possuem fun¸˜es especiais, como interrup¸˜es e contadores. Essas chaves s˜o baixo ativas, co co aportanto ao serem pressionados for¸am n´ l´gico baixo nos pinos do microcontrolador e quando c ıvel on˜o est˜o pressionadas tem n´ l´gico alto garantido por resistores de pull-up. A tabela abaixo a a ıvel omostra a liga¸˜o das chaves PUSH BOTTON ao microcontrolador. ca Chave Nome Ponto ligado ao microcontrolador SW1 RESET MCLR/VPP/RE3 SW4 INT0 RB0/INT SW5 INT1 RB1 SW6 INT2 RB2 SW2 TMR1 RC0 SW3 CH0 RC1 Tabela 9.6: Leitura do teclado matricial pelo microcontrolador9.3.7 Dispositivos de sa´ ıdaDisplay LCD O kit possui um display LCD alfanum´rico de 2 linhas por 16 colunas, ligado ao conector eP1. O ajuste de contraste desse LCD ´ feito pelo trimpot R37. O kit suporta tamb´m displays e eLCD gr´ficos (n˜o inclusos) atrav´s do conector P2. O ajuste de contraste desse LCD ´ feito pelo a a e etrimpot R37. Para habilitar o display tem que ligar a chave 1 do dip switch CH2. Para maisinforma¸˜es sobre o uso do LCD consulte o cap´ co ıtulo dedicado a esse assunto na apostila.Displays de 7 segmentos O kit XM118 possui 4 displays de sete segmentos. Estes displays trabalham de forma mul-tiplexada, isto ´, seus segmentos est˜o todos ligados em paralelo e os comuns dos displays s˜o e a aacionados por um processo de varredura, dando a impress˜o de estarem simultaneamente ativos. aParas habilitar o display consulte a tabela de configura¸˜es. coLEDs No portal D est˜o ligados 8 leds convencionais baixo ativos (acendem com n´ l´gico baixo). a ıvel oH´ ainda 2 LEDs bicolores ligados a outros pinos do microcontrolador, conforme o esquema ael´trico. Para saber como habilitar os leds bicolores consulte a tabela de configura¸˜es. e co 273
  • 270. XM118 - Microcontroladores PIC189.3.8 Acionamentos H´ diversos circuitos de aplica¸˜o que podem ser acionados no XM118. A maioria desses a cacircuitos est˜o associados aos pinos com fun¸˜o de PWM, mas nada impede de usar esse pinos a casimplesmente para ligar e desligar os circuitos em quest˜o. Todos estes circuitos usam como drive ao integrado ULN2803, que possui sa´ open-colector com capacidade de at´ 500mA. ıda e1 Buzzer Um buzzer piezel´trico permite a gera¸˜o de sons no kit. Para esse buzzer operar ´ necess´rio e ca e aaplicar um sinal vari´vel na frequˆncia que se deseja ouvir. Ele n˜o produzir´ som algum se for a e a asimplesmente alimentado.Rel´s e Quatro rel´s est˜o dispon´ e a ´ ıveis para aplica¸˜es do usu´rio. E poss´ ter acesso aos terminais co a ıvelCom (comum), NA (normalmente aberto) e NF (normalmente fechado). Os rel´s tem capacidade ede acionar cargas de at´ 10A, com tens˜o m´xima de at´ 250V. e a a eLˆmpada DC a Diversas aplica¸˜es interessantes podem ser feitas com a lˆmpada DC presente no kit. Em co aespecial, aplica¸˜es de PWM podem variar a intensidade de brilho. Essa lˆmpada ´ alimentada co a ecom 12VDC.Resistˆncia para aquecimento e Para aplica¸˜es envolvendo malhas de controle existe um conjunto de dispositivos formados copela resistˆncia para aquecimento, sensor de temperatura, ventoinha e sensor de rota¸˜o. Um e casensor de temperatura (mais detalhes na se¸˜o que trata de entradas anal´gicas) ´ montado junto ca o eao resistor para realiza¸˜o de medidas Esse resistor de potˆncia est´ ligado a 12VDC e pode ca e atamb´m ser controlado pelo m´dulo PWM. e oVentoinha A ventoinha presente na placa ´ um motor DC que pode ser ligado ou desligado ou ter sua evelocidade controlada por PWM. Essa ventoinha esta ligada ao lado da resistˆncia, podendo ser eusada para refriger´-la. aSensor de rota¸˜o ca Associada a ventoinha foi colocado um sensor de rota¸˜o (tac´grafo). Este ´ composto por um ca o eemissor infravermelho constantemente ativo e um receptor infravermelho, cada um de um lado da 274
  • 271. XM118 - Microcontroladores PIC18ventoinha. Ao girar, as p´s da ventoinha interrompem periodicamente o fluxo, fazendo com que ao circuito do receptor gere um sinal quadrado de frequˆncia proporcional a velocidade de giro da eventoinha.9.3.9 Dispositivos anal´gicos o Diversos circuitos anal´gicos est˜o ligados aos canais do ADC do PIC. o a Para usar o ADC do PIC consulte o cap´ ıtulo espec´ ıfico na apostila.Potenciˆmetro o Trata-se de um potenciˆmetro linear ligado entre +5VDC e GND, de forma que a excurs˜o o ade seu cursor gera valores entre estes limites.Sensor de temperatura Este sensor de temperatura LM35 fica junto ` resistˆncia de aquecimento. Ele fornece uma a etens˜o de 10 mV por grau Celsius, sendo que essa varia¸˜o ´ linear em toda a faixa. a ca eCondicionador de sinais anal´gicos o Para a leitura de sinais anal´gicos externos foram inclusas no kit 4 entradas anal´gicas com o ocircuitos condicionadores de sinal. S˜o elas: a • An1 e An2: entradas amplificadas com ganhos ajust´veis de 1 a 10 vezes. O ganho desses a amplificadores ´ ajustado pelos respectivos trimpots. e • 0 a 10 V: esta entrada divide o sinal por 2. Ela foi pensada para permitir a intera¸˜o com ca 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 e corrente para tens˜o, converte o sinal de entrada de forma que 20 mA corresponderam a 5 a V no terminal do PIC. 275
  • 272. XM118 - Microcontroladores PIC18Conversor D/A Uma possibilidade de uso do PWM ´ para gera¸˜o de n´ e ca ıveis anal´gicos de tens˜o. O princ´ o a ıpiode funcionamento ´ que ao passar o sinal do PWM por um filtro passa baixa, a sa´ apresente um e ıdan´ de tens˜o proporcional ao duty-cicle do sinal de entrada. O filtro passa baixa necess´rio j´ ıvel a a aest´ presente no kit. A sa´ desse filtro ´ amplificada e com ajuste de ganho vari´vel permitindo a ıda e agerar sinais com at´ 10 V de amplitude para o duty-cicle de 100%. Existem muitos dispositivos eindustriais controlados por sinais de tens˜o de 0 a 10 V, como por exemplo o inversor de frequˆncia. a e Existe ainda um feedback do sinal gerado para o microcontrolador, para averiguar o corretofuncionamento.9.3.10 Interfaces seriaisInterface RS-232 O microcontrolador PIC possui uma USART, isto ´, uma interface de comunica¸˜o serial. e caApesar desse m´dulo do microcontrolador realizar toda a temporiza¸˜o e tratamento l´gico da o ca ocomunica¸˜o, para que se possa conect´-lo a um computador ´ necess´rio um conversor de n´ ca a e a ıvelque adapte os sinais de sa´ do microcontrolador para o padr˜o RS-232 (EIA-232C). Isto ´ feito ıda a epelo CI MAX232 e componentes ligados a ele. Existe tamb´m um conector DB-9 (CN4) para a eliga¸˜o do kit ao PC. ca Consulte a tabela de configura¸˜es para verificar as configura¸˜es necess´rias. Para monitorar co co aa atividade da USART foram inclu´ ıdos dois LEDs ligados aos pinos TX e RX do microcontrolador.Interface RS-485 A USART do microcontrolador tamb´m pode ser usada para se comunicar no padr˜o RS-485 e a(EIA-485). Para isso ´ necess´rio a adequa¸˜o dos sinais do microcontrolador a esse padr˜o, e a ca afun¸˜o realizada pelo CI MAX485 (CN8). Nesse caso o conector U19 permite a conex˜o com os ca asinais de comunica¸˜o (A e B) e sinais de alimenta¸˜o para um circuito remoto (+12V e GND). ca ca Consulte a tabela de configura¸˜es para verificar as configura¸˜es necess´rias. Consulte a co co atabela de configura¸˜es para verificar as configura¸˜es necess´rias. Para monitorar a atividade da co co aUSART foram inclu´ ıdos dois LEDs ligados aos pinos TX e RX do microcontrolador.USB O PIC184550 possui uma interface USB Device. O padr˜o USB prevˆ duas classes de disposi- a etivos: device e host. Dispositivos device devem se conectar a um dispositivo host (geralmente umcomputador), n˜o sendo poss´ a comunica¸˜o entre dois devices. a ıvel ca No kit o conector CN9 ´ um conector B (device) que permita a conex˜o do kit a um host e aUSB. O LED USB DETECT (D28) sinaliza quando o kit est´ conectado a um host. a Devido as caracter´ ısticas de comunica¸˜o USB, que opera em altas taxas, os sinais de D+ cae D- est˜o ligados diretamente aos pinos do microcontrolador, havendo chaves que permitem adesconectar esses pinos do restante do circuito. Consulte a tabela de configura¸˜es para verificar coquais as chaves utilizadas. 276
  • 273. XM118 - Microcontroladores PIC189.3.11 Diversos Essa se¸˜o descreve alguns circuitos que se comunicam com o microcontrolador atrav´s dos ca eprotocolos I2C e SPI. A presen¸a desses componentes ´, al´m do estudo deles em si, o estudo desses c e eprotocolos. Para maiores informa¸˜es sobre esses componentes e seus protocolos comunica¸˜o co caconsulte os manuais dos mesmos no CD.Mem´ria EEPROM o O componente 24C08 (U15) ´ uma mem´ria EEPROM que se comunica atrav´s do protocolo e o eI2C. Ela tem capacidade de 8kbit (1 kbyte).Potenciˆmetro digital SPI o Mais uma inova¸˜o do kit. O potenciˆmetro digital utiliza a comunica¸˜o serial SPI (Se- ca o carial Peripheral Interface), que ´ utilizada para a comunica¸˜o entre dois componentes em curta e cadistˆncia. Assim como o potenciˆmetro convencional, o potenciˆmetro digital est´ ligado de tal a o o amaneira que ´ poss´ ler o valor de seu cursor, tens˜o esta que varia de 0 a 5V. e ıvel aRel´gio de tempo real (RTC) o O HT1380 (U12) ´ um rel´gio de tempo real (RTC - Real Time Clock) e calend´rio com e o acomunica¸˜o serial. Ele possui um cristal pr´prio para gera¸˜o da base de tempo (X1) e ´ mantido ca o ca epor uma bateria recarreg´vel(BAT1), mesmo se o kit for desligado da energia. a O protocolo de comunica¸˜o desse componente assemelha-se ao protocolo SPI, por´m apresenta ca ealgumas divergˆncias do padr˜o, consulte seu manual para mais detalhes de funcionamento. e aGerador de Frequˆncia e Muitas aplica¸˜es do microcontrolador precisam de um sinal peri´dico aplicado aos seus pinos. co oPara atender essa necessidade o kit conta com um gerador de frequˆncias capaz de gerar sinais equadrados de 60 Hz a 4 kHz (aproximadamente). Esse circuito tem como n´cleo o CI LM555 u(U26). A frequˆncia pode ser ajustada atrav´s do potenciˆmetro R36. e e oHardware do m´dulo XMM01 - Interface Industrial o O m´dulo XMM01 ´ para ser conectado aos conectores de expans˜o do Kit XM118. Seu o e aobjetivo ´ ser uma interface entre o microcontrolador e circuitos tipicamente usados na ind´stria. e uPara tanto ele ´ composto de um expansor de I/O, entradas fotoacopladas e sa´ e ıdas fotoacopladascom seus respectivos drives protegidos. A seguir ´ apresentada uma explica¸˜o dos circuitos do e cam´dulo. No apˆndice desse manual est˜o os esquemas el´tricos (assim como no CD que acompanha o e a eo kit) que devem ser considerados para melhor entendimento. S˜o duas as fun¸˜es dos circuitos de entrada e sa´ a co ıda: (1)adequar o n´ dos sinais industriais ıvelpara o microcontrolador e vice-versa e (2) isolar galvanicamente os circuitos. Os circuitos deentrada foram constru´ ıdos de forma que s˜o aceitas tens˜es de entrada entre 12Vdc e 24Vdc. a oDa mesma forma, os drivers de sa´ s˜o capazes de acionar sinais de 12Vdc a 24Vdc, sendo ıda aprotegidos com PTC (fus´ rearm´vel) limitando a corrente de sa´ em 300mA. O isolamento ıvel a ıda 277
  • 274. XM118 - Microcontroladores PIC18galvˆnico pode ser observado pela divis˜o de ”terras”na placa, que s˜o propositalmente feitos em a a aformatos diferentes para evidenciar esse fato. Para que o isolamento el´trico seja efetivo, n˜o deve e ahaver conex˜o entre os terras de entrada e/ou sa´ com o terra de controle. A fonte que fornece a ıdatens˜o para as sa´ a ıdas deve ser uma fonte externa, isolada da fonte do kit. A figura abaixo apresenta a placa delimitando os diferentes dom´ ınios de terra. Figura 9.35: Dom´ ınios de terra Tanto entradas como sa´ ıdas possuem LEDs indicadores de seus estados l´gicos. oExpansor de I/O O expansor de I/O (I/O Expander) ´ um componente que, como o pr´prio nome diz, per- e omite expandir a quantidade de entradas e sa´ ıdas do microcontrolador. O componente usado, oMCP23016, possui uma interface serial I2C e dois portais de oito bits. Esses portais s˜o prati- acamente iguais aos portais do microcontrolador. Esses portais podem ser configurados comoentrada ou sa´ e, ainda, ´ poss´ ıda e ıvel configurar interrup¸˜es nos pinos de entradas. Para mais cocaracter´ ısticas t´cnicas e informa¸˜es sobre o uso, consulte o manual desse componente. e coEntradas As entradas foto acopladas identificam como ’1’ sinais entre 12Vdc e 24Vdc, tornando-asaptas a serem conectadas a sensores industriais e controles que operam nessa faixa de tens˜o. aAs entradas s˜o protegidas quanto a invers˜o de polaridade. Tens˜es acima de 30Vdc podem a a odanificar o foto acoplador. Todas as entradas s˜o referenciadas a um ponto comum (COM). A figura abaixo mostra como adevem ser feitas as liga¸˜es. co 278
  • 275. XM118 - Microcontroladores PIC18 Figura 9.36: Liga¸˜o de entradas ao m´dulo XMM01 ca oSa´ ıdas As sa´ ıdas tamb´m s˜o fotoacopladas e possuem um driver que aciona tens˜es de 12 a 24VDC, e a odependendo da alimenta¸˜o aplicada. Isso permite acionar diretamente algumas cargas, como casolenoides e v´lvulas, ou acionar rel´s para ativar cargas de mais alta potˆncia. Todas s˜o prote- a e e agidas contra curto por um PTC (fus´ rearm´vel) que limita a corrente m´xima em 300mA por ıvel a asa´ ıda. A figura abaixo apresenta a forma como fonte e cargas devem ser ligadas `s sa´ a ıdas. Figura 9.37: Liga¸˜o de sa´ ca ıdas ao m´dulo XMM01 o9.4 Resolvendo Problemas9.4.1 Suporte T´cnico e A Exsto Tecnologia oferece suporte t´cnico gratuito para quest˜es de utiliza¸˜o de seus pro- e o cadutos atrav´s do e-mail suporteexsto.com.br ou do telefone (35) 3471-6898. e 279