kit modular de desenvolvimento baseado em microcontrolador pic
DESCRIPTION
O trabalho buscou relacionar em hardware os princípios de modularidade de software para resolução de um problema complexo, onde foram confeccionados cinco módulos distintos, sendo: um destinado à utilização de microcontrolador PIC18F4520, um para controle dos periféricos RTC e memória EEPROM via barramento I²C, um para o controle de dois motores de passo unipolares de forma direta e indireta, um para controle de display LCD e mais um para utilização de teclado matricial. Para construção do kit foram realizadas as etapas previstas no processo de criação e inovação de produtos eletrônicos, como: pesquisa de mercado, levantamento de requisitos, modelagem, virtualização, prototipação e finalização, além de programação em linguagem C de softwares para teste dos módulos. Para projetos de freelancer, interesse em adquirir as placas industriais e/ou duvidas sobre o trabalho, entre em contato comigo por email ([email protected])TRANSCRIPT
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE ENGENHARIA DE COMPUTAÇÃO
KIT MODULAR DE DESENVOLVIMENTO BASEADO EM MICROCONTROLADOR PIC
Área de Sistemas Embarcados
por
Bruno Rodrigues Silva
Paulo Roberto Oliveira Valim, M.Eng.
Orientador
São José (SC), junho de 2011
UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR
CURSO DE ENGENHARIA DE COMPUTAÇÃO
KIT MODULAR DE DESENVOLVIMENTO BASEADO EM MICROCONTROLADOR PIC
Área de Sistemas Embarcados
por
Bruno Rodrigues Silva Relatório apresentado à Banca Examinadora do Trabalho de Conclusão do Curso de Engenharia de Computação para análise e aprovação. Orientador: Paulo Roberto Oliveira Valim, M.Eng.
São José (SC), junho de 2011
SUMÁRIO
LISTA DE ABREVIATURAS ................................................................ vi
LISTA DE FIGURAS ............................................................................. ix
LISTA DE TABELAS ............................................................................ xii
LISTA DE EQUAÇÕES ....................................................................... xiii
RESUMO ............................................................................................... xiv
ABSTRACT ............................................................................................ xv
1 INTRODUÇÃO.................................................................................... 1 1.1 KITS DE DESENVOLVIMENTO BASEADOS EM PIC ............................. 1 1.2 PROBLEMATIZAÇÃO ................................................................................... 2 1.2.1 Formulação do problema ............................................................................... 2 1.2.2 Solução proposta ............................................................................................ 3 1.3 JUSTIFICATIVA ............................................................................................. 4 1.3.1 Importância .................................................................................................... 4 1.4 OBJETIVOS ..................................................................................................... 5 1.4.1 Objetivo Geral ................................................................................................ 5 1.4.2 Objetivos Específicos...................................................................................... 5 1.5 METODOLOGIA ............................................................................................. 5 1.6 ESTRUTURA DO TRABALHO ..................................................................... 7
2 FUNDAMENTAÇÃO TEÓRICA ...................................................... 8 2.1 MICROCONTROLADORES .......................................................................... 8 2.1.1 Exemplo de fabricantes de microcontroladores de 8 bits........................... 10 2.2 MICROCHIP TECHNOLOGY..................................................................... 11 2.2.1 Famílias e grupos de microcontroladores PIC de 8 bits ............................. 11 2.2.2 Exemplos de microcontroladores PIC de 8 bits .......................................... 14 2.2.3 Encapsulamento ........................................................................................... 18 2.3 MICROCONTROLADOR PIC18F4520 ....................................................... 22 2.3.1 Estrutura externa ......................................................................................... 22 2.3.2 Estrutura interna ......................................................................................... 22 2.3.3 Recursos de hardware .................................................................................. 24 2.4 BARRAMENTO I2C ...................................................................................... 41 2.4.1 Características do barramento I2C ............................................................. 42 2.4.2 Protocolo I2C ................................................................................................ 44 2.5 COMPONENTES PERIFÉRICOS ............................................................... 50 2.5.1 Motor de passo ............................................................................................. 51 2.5.2 Teclado matricial .......................................................................................... 59 2.5.3 Módulo LCD ................................................................................................. 62 2.6 CONSIDERAÇÕES ....................................................................................... 68
iv
3 DESENVOLVIMENTO .................................................................... 69 3.1 METODOLOGIA PARA DEFINIÇÃO DO MODELO .............................. 69 3.2 VISÃO GERAL .............................................................................................. 71 3.3 REQUISITOS ................................................................................................. 72 3.3.1 Requisitos Gerais do Kit Modular de Desenvolvimento ............................ 72 3.3.2 Requisitos do Módulo Controlador ............................................................. 72 3.3.3 Requisitos do Módulo I2C ............................................................................ 73 3.3.4 Requisitos do Módulo Motor de Passo ........................................................ 74 3.3.5 Requisitos do Módulo Display LCD ............................................................ 75 3.3.6 Requisitos do Módulo Teclado Matricial .................................................... 76 3.4 ARQUITETURA DE HARDWARE ............................................................. 76 3.5 IMPLEMENTAÇÃO VIRTUAL ................................................................... 79 3.5.1 Seleção dos componentes virtuais ................................................................ 79 3.5.2 Validação da Implementação Virtual ......................................................... 85 3.6 IMPLEMENTAÇÃO FÍSICA ....................................................................... 95 3.6.1 Diferenças entre os circuitos virtuais e físicos dos módulos ....................... 95 3.6.2 Prototipação do kit ....................................................................................... 96 3.6.3 Modularidade dos protótipos .................................................................... 100 3.6.4 Validação dos protótipos ............................................................................ 100 3.7 CONFECÇÃO DAS PLACAS FINAIS DOS MÓDULOS DO KIT .......... 103 3.7.1 Mudanças dos protótipos para as placas finais ........................................ 103 3.8 CUSTOS DO PROJETO .............................................................................. 104 3.8.1 Custo dos componentes .............................................................................. 105 3.8.2 Custo das placas ......................................................................................... 108 3.9 CONSIDERAÇÕES ..................................................................................... 109
4 CONCLUSÃO .................................................................................. 110 4.1 OPORTUNIDADES DE TRABALHOS FUTUROS .................................. 112
REFERÊNCIAS BIBLIOGRÁFICAS ................................................ 113
APÊNDICE A ....................................................................................... 118
APÊNDICE B ....................................................................................... 119
APÊNDICE C ....................................................................................... 120
APÊNDICE D ....................................................................................... 121
APÊNDICE E ....................................................................................... 124
APÊNDICE F ....................................................................................... 126
APÊNDICE G ....................................................................................... 128
APÊNDICE H ....................................................................................... 130
APÊNDICE I ........................................................................................ 132
APÊNDICE J ........................................................................................ 133
v
APÊNDICE K ....................................................................................... 134
APÊNDICE L ....................................................................................... 135
APÊNDICE M ...................................................................................... 136
APÊNDICE N ....................................................................................... 137
APÊNDICE O ....................................................................................... 138
APÊNDICE P ....................................................................................... 139
APÊNDICE Q ....................................................................................... 140
APÊNDICE R ....................................................................................... 141
APÊNDICE S........................................................................................ 142
LISTA DE ABREVIATURAS
A/D Analógico/Digital ACK Acknowledge ANSI-C American National Standards Institute padrão C ASCII American Standard Code for Information Interchange BOR Bourn-out Reset BSR Bank Select Register C Carry flag CAN Controller Area Network CCP Capture/Compare/PWM CCPRx CCPx Register CCPxCON CCPx Control Register CFGS Flash Program/Data EEPROM or Configuration Select bit CISC Complex Instruction Set Computer CLRWDT Clear Watchdog Timer CMOS Complementary Metal-Oxide-Semiconductor COP8 8-bit Control-Oriented Processor CPU Central Processing Unit CTMU Charge Time Measurement Unit E/S Entrada/Saída ECCP Enhanced Capture/Compare/PWM EEADR EEPROM Address Register EECON EEPROM Control Register EEDATA EEPROM Data Register EEPGD Flash Program or Data EEPROM Memory Select bit EEPROM Electrically-Erasable Programmable Read-Only Memory EUA Estados Unidos da América EUSART Enhanced USART FSR File Select Register GND Ground GPR General Purpose Register I2C Inter-Intergrated Circuit ICSP In-Circuit Serial Programming INTCON Interrupt Control Register IPR Peripheral Interrupt Priority Register KMD Kit Modular de Desenvolvimento LCD Liquid Crystal Display MCT Módulo Controlador MCU Microcontrolador MDL Módulo Display LCD MIC Módulo I²C MIPS Milhões de Instruções Por Segundo MMP Módulo Motor de Passo MSSP Master Synchronous Serial Port MTM Módulo Teclado Matricial NACK Not Acknowledge NC No Connect
vii
PC Program Counter PCI Placa de Circuito Impresso PDIP Plastic Dual In-Line Packages PIC Peripherical Interface Controller PIER Peripheral Interrupt Enable Register PIR Peripheral Interrupt Request Register POR Power-on Reset PPR Passos Por Rotação PPS Passos por segundo PR2 Period Register 2 PWM Pulse-Width Modulation QFN Quad Flat, No Lead Package R/W Read/Write RAM Random Access Memory RC Resistor Capacitor RCON Reset Control Register RD Read Control bit REF Requisitos funcionais RISC Reduced Instruction Set Computer RNF Requisitos não funcionais ROM Read Only Memory RTC Real Time Clock SCK Serial Clock SCL Serial Clock SDA Serial Data SDI Serial Data In SDO Serial Data Out SFR Special Function Registers SOIC Small Outline Plastic Packages SPI Serial Peripheral Interface SS Slave Select SSPBUF MSSP Buffer Register SSPCON1 MSSP Control Register 1 SSPCON2 MSSP Control Register 2 SSPSR MSSP Shift Register SSPSTAT MSSP Status Register SSOP Shrink Small Outline Packages T0CON Timer 0 Control Register T1CON Timer 1 Control Register T2CON Timer 2 Control Register T3CON Timer 3 Control Register TCC Trabalho de Conclusão de Curso TMR0 Timer 0 Register TMR0H Timer 0 Register High TMR0L Timer 0 Register Low TMR1 Timer 1 Register TMR2 Timer 2 Register TMR3 Timer 3 Register UFES Universidade Federal do Espírito Santo
viii
UFLA Universidade Federal de Lavras UFRGS Universidade Federal do Rio Grande do Sul UFSC Universidade Federal de Santa Catarina ULA Unidade Lógica Aritmética UNIVALI Universidade do Vale do Itajaí USART Universal Synchronous Asynchronous Receiver Transmitter USB Universal Serial Bus UTFPR Universidade Tecnológica Federal do Paraná W Working Register WDT Watchdog Timer WERN Flash Program/Data EEPROM Write Enable bit
LISTA DE FIGURAS
Figura 1. Microcontrolador .............................................................................................................. 8 Figura 2. Arquitetura do microcontrolador: (a) von-Newmann; (b) Harvard ..................................... 9 Figura 3. Gráfico ilustrado da organização dos PICs em tamanho da palavra de instrução. ............. 12 Figura 4. Diagrama simplificado dos pinos do PIC16F54............................................................... 14 Figura 5. Diagrama simplificado dos pinos do PIC16F628A. ......................................................... 15 Figura 6. Diagrama simplificado dos pinos do PIC16F1826. .......................................................... 15 Figura 7. Diagrama simplificado dos pinos do PIC18F1320. .......................................................... 16 Figura 8. Vista em perspectiva do encapsulamento QFN em um chip com 28 pinos. ...................... 18 Figura 9. Vista em perspectiva do encapsulamento SOIC em um chip com 28 pinos. ..................... 19 Figura 10. Vista em perspectiva do encapsulamento SSOP em um chip com 28 pinos. .................. 20 Figura 11. Vista em perspectiva do encapsulamento PDIP em um chip com 28 pinos. ................... 20 Figura 12. Vista superior do encapsulamento PDIP em um chip com 28 pinos. .............................. 21 Figura 13. (a) Vista lateral e (b) vista frontal do encapsulamento PDIP em um chip com 28 pinos. 21 Figura 14. Diagrama dos pinos do PIC18F4520 em encapsulamento PDIP de 40 pinos.................. 22 Figura 15. Estrutura interna do microcontrolador PIC18F4520. ..................................................... 23 Figura 16. Oscilador externo por (a) circuito RC, (b) cristal/ressonador. ........................................ 24 Figura 17. Circuito de reset externo (a) POR e (b) BOR. ............................................................... 26 Figura 18. Mapa da memória de dados do PIC18F4520. ................................................................ 27 Figura 19. Leitura do dado do endereço 0x33 da EEPROM e escrita em W (Working Register). .... 28 Figura 20. Escrita do valor 5 no endereço 0x33 da EEPROM. ....................................................... 29 Figura 21. Estrutura do mapa da memória de programa do PIC18F4520. ....................................... 30 Figura 22. Exemplo de leitura e escrita no PORTA. ....................................................................... 32 Figura 23. Modo PWM em saída única. ......................................................................................... 39 Figura 24. Modo PWM em meia ponte para controle de circuito de (a) meia ponte ou (b) ponte
completa. ............................................................................................................................... 39 Figura 25. Modo PWM em ponte completa para controle de circuito de ponte completa. ............... 39 Figura 26. Modo SPI de comunicação serial síncrona. ................................................................... 40 Figura 27. Modo I2C de comunicação serial síncrona. .................................................................... 40 Figura 28. Sincronização entre mestre-escravo no modo SPI. ........................................................ 41 Figura 29. Comunicação mestre-escravo no barramento I2C. ......................................................... 42 Figura 30. Aspectos físicos do barramento I2C (a) sem e (b) com resistores em série (RS). ............. 43 Figura 31. Gráfico da relação dos resistores de pull-up e de proteção no circuito I2C. .................... 44 Figura 32. Condições do protocolo I2C para transferência de dados. .............................................. 45 Figura 33. Condições de (a) Start e (b) Stop do protocolo I2C. ....................................................... 46 Figura 34. Identificação do componente com (a) 7 bits e (b) 10 bits de endereço. ......................... 47 Figura 35. Validação de um bit em nível lógico (a) alto e (b) baixo no protocolo I2C. .................... 48 Figura 36. Transferência completa no protocolo I2C. ..................................................................... 48 Figura 37. Sincronização do relógio entre dois mestres concorrentes. ............................................ 49 Figura 38. Arbitragem entre dois mestres concorrentes. ................................................................. 50 Figura 39. Gráfico relacionando entre torque e velocidade em PPS (Passos por segundo). ............. 52 Figura 40. Ilustração dos terminais dos enrolamentos de um motor unipolar. ................................. 52 Figura 41. Ilustração dos terminais dos enrolamentos de um motor bipolar. ................................... 53 Figura 42. Circuito para o controle de motor de passo unipolar. ..................................................... 54 Figura 43. Circuito para o controle de motor de passo bipolar. ....................................................... 54 Figura 44. Sinal digital controlando a corrente aplicada em uma bobina do motor de passo. .......... 57 Figura 45. Chave de acionamento momentâneo com identificação do bounce. ............................... 60
x
Figura 46. Matriz m x n de interconexão de chaves momentâneas. ................................................. 61 Figura 47. Representação dos módulos LCD (a) gráficos e (b) alfanuméricos. ............................... 63 Figura 48. LCD Hitachi com drive HD44780................................................................................. 64 Figura 49. Conexões dos pinos do driver do LCD com um microcontrolador. ................................ 64 Figura 50. Visão geral do projeto. .................................................................................................. 71 Figura 51. Arquitetura do Kit Modular de Desenvolvimento. ......................................................... 77 Figura 52. Circuito de simulação do Módulo Controlador. ............................................................. 80 Figura 53. Circuito de simulação do Módulo I²C. .......................................................................... 81 Figura 54. Circuito de simulação do Módulo Motor de Passo......................................................... 83 Figura 55. Circuito de simulação do Módulo Display LCD. ........................................................... 84 Figura 56. Circuito de simulação do Módulo Teclado Matricial. .................................................... 85 Figura 57. Janela do Hyper Terminal na validação do Experimento B. ........................................... 86 Figura 58. Janela do ANALISADOR I2C do Experimento C. ........................................................ 88 Figura 59. Janela do ANALISADOR I2C do Experimento D. ........................................................ 89 Figura 60. Janela do RTC com a data gravada no Experimento D. ................................................. 89 Figura 61. Gráfico do acionamento do MOTOR 1 em sentido horário no Experimento E. .............. 90 Figura 62. Gráfico do acionamento do MOTOR 1 em sentido anti-horário no Experimento E. ....... 91 Figura 63. Chaveamento dos sinais PWM no Experimento F. ........................................................ 92 Figura 64. LCD com contagem de 0 até 100 no Experimento G. .................................................... 93 Figura 65. Identificação da chave pressionada no Experimento H. ................................................. 94 Figura 66. Imagem em 3D do protótipo do Módulo Controlador. ................................................... 97 Figura 67. Imagem em 3D do protótipo do Módulo I²C. ................................................................ 98 Figura 68. Imagem em 3D do protótipo do Módulo Motor de Passo. ............................................. 98 Figura 69. Imagem em 3D do protótipo do Módulo Display LCD. ................................................. 99 Figura 70. Imagem em 3D do protótipo do Módulo Teclado Matricial. .......................................... 99 Figura 71. Resultado da validação 9 com os protótipos físicos. .................................................... 102 Figura 72. Resultado da validação 10 com os protótipos físicos. .................................................. 103 Figura 73. Código fonte do Experimento A.................................................................................. 118 Figura 74. Código fonte do Experimento B. ................................................................................. 119 Figura 75. Código fonte do Experimento C. ................................................................................. 120 Figura 76. Código fonte do Experimento D.................................................................................. 121 Figura 77. Código fonte do Experimento E. ................................................................................. 124 Figura 78. Código fonte do Experimento F. ................................................................................. 126 Figura 79. Código fonte do Experimento G.................................................................................. 128 Figura 80. Código fonte do Experimento H.................................................................................. 130 Figura 81. Circuito esquemático do Módulo Controlador. ............................................................ 132 Figura 82. Circuito esquemático do Módulo I²C. ......................................................................... 133 Figura 83. Circuito esquemático do Módulo Motor de Passo. ...................................................... 134 Figura 84. Circuito esquemático do Módulo Display LCD. .......................................................... 135 Figura 85. Circuito esquemático do Módulo Teclado Matricial. ................................................... 136 Figura 86. Footprint da placa do Módulo Controlador. ................................................................ 137 Figura 87. Layer da placa do Módulo Controlador. ...................................................................... 137 Figura 88. Footprint da placa do Módulo I²C. .............................................................................. 138 Figura 89. Layer da placa do Módulo I²C..................................................................................... 138 Figura 90. Footprint da placa do Módulo Motor de Passo. ........................................................... 139 Figura 91. Layer da placa do Módulo Motor de Passo. ................................................................. 139 Figura 92. Footprint da placa do Módulo Display LCD. .............................................................. 140 Figura 93. Layer da placa do Módulo Display LCD. .................................................................... 140 Figura 94. Footprint da placa do Módulo Teclado Matricial. ....................................................... 141
xi
Figura 95. Layer da placa do Módulo Teclado Matricial. ............................................................. 141 Figura 96. Footprint da placa do Módulo Controlador na versão final. ......................................... 142 Figura 97. Footprint da placa do Módulo I²C na versão final. ...................................................... 142 Figura 98. Footprint da placa do Módulo Motor de Passo na versão final. ................................... 143 Figura 99. Footprint da placa do Módulo Display LCD na versão final. ....................................... 143 Figura 100. Footprint da placa do Módulo Teclado Matricial na versão final. .............................. 144
LISTA DE TABELAS
Tabela 1. Exemplos de kits de desenvolvimento baseados no PIC16F877A ..................................... 2 Tabela 2. Características dos grupos de microcontroladores PIC .................................................... 13 Tabela 3. Descrição das funcionalidades dos pinos compatíveis entre os microcontroladores PIC
exemplificados ....................................................................................................................... 17 Tabela 4. Definições do protocolo I2C ........................................................................................... 45 Tabela 5. Sequência de acionamento do motor de passo unipolar para passo completo .................. 55 Tabela 6. Sequência de acionamento do motor de passo unipolar para meio passo ......................... 56 Tabela 7. Proporção de ocupação do ciclo ativo de um sinal para 32 micro-passo por passo .......... 58 Tabela 8. Exemplo de varredura em uma matriz de ordem quatro, onde c23 foi pressionado. .......... 62 Tabela 9. Descrição das funções dos pinos do LCD ....................................................................... 65 Tabela 10. Instruções de comando mais comuns do LCD 2x16 ...................................................... 66 Tabela 11. Código de identificação do tipo de operação do LCD para inicialização ....................... 67 Tabela 12. Relação dos pinos do PIC18F4520 com os módulos do kit ........................................... 77 Tabela 13. Relação de as imagens da PCI com os módulos do kit .................................................. 96 Tabela 14. Validação dos experimentos realizados nas combinações dos módulos ....................... 100 Tabela 15. Mudanças dos protótipos para as placas finais dos módulos ........................................ 104 Tabela 16. Custo de compra dos componentes do protótipo do Módulo Controlador .................... 105 Tabela 17. Custo de compra dos componentes do protótipo do Módulo I²C ................................. 106 Tabela 18. Custo de compra dos componentes do protótipo do Módulo Motor de Passo .............. 106 Tabela 19. Custo de compra dos componentes do protótipo do Módulo Display LCD .................. 107 Tabela 20. Custo de compra dos componentes do protótipo do Módulo Teclado Matricial ........... 107 Tabela 21. Custo de compra dos materiais para produção dos protótipos ..................................... 108 Tabela 22. Descrição dos pinos do PIC18F4520 .......................................................................... 146 Tabela 23. Instruções de operações orientadas a byte ................................................................... 150 Tabela 24. Instruções de operações orientadas a bit ..................................................................... 151 Tabela 25. Instruções de operações literais .................................................................................. 151 Tabela 26. Instruções de operações de controle ............................................................................ 151
LISTA DE EQUAÇÕES
Equação 1 ...................................................................................................................................... 37 Equação 2 ...................................................................................................................................... 37 Equação 3 ...................................................................................................................................... 57 Equação 4 ...................................................................................................................................... 57 Equação 5 ...................................................................................................................................... 57 Equação 6 ...................................................................................................................................... 58
RESUMO
SILVA, Bruno Rodrigues. Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC. São José, 2011. 178 f. Trabalho de Conclusão de Curso (Graduação em Engenharia de Computação) – Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, São José, 2011. A prototipação de sistemas embarcados microcontrolados, tanto profissionais quanto acadêmicos, normalmente, utilizam um kit de desenvolvimento voltado ao uso do microcontrolador de um fabricante específico. Isso faz com que o kit não possa ser reutilizado em outros projetos que visam à utilização dos mesmos recursos periféricos, contidos na placa de circuito impresso do kit, com microcontrolador de outro fabricante qualquer. Essa característica encontrada em kits tradicionais acarreta uma limitação da flexibilidade do uso do kit, além de um aumento no custo de um determinado projeto pela compra de outro kit com os mesmos recursos para o microcontrolador do fabricante desejado. Para evitar esses problemas, este trabalho procurou relacionar em hardware os princípios de modularidade para resolução de um problema complexo. Assim, o objetivo foi conceber um kit modular de desenvolvimento que possibilite ao usuário combinar os módulos de acordo com as suas necessidades, de modo que seus recursos sejam reutilizados em diferentes projetos, independentemente do microcontrolador. Para este kit foram confeccionados cinco módulos distintos, sendo: um módulo destinado a utilização de microcontrolador PIC de 8 bits, um para utilização de componentes periféricos compatíveis com o barramento I2C, um para o controle de motores de passo unipolares, um para a utilização de display LCD alfanumérico e mais um para utilização de teclado matricial de ordem 4. Neste trabalho foram realizadas as etapas correspondentes ao levantamento de informações, modelagem, virtualização e prototipação do kit modular de desenvolvimento, além de atividades práticas para os testes de validação de cada módulo. Palavras-chave: Kit. Desenvolvimento. Modular. Microcontrolador. PIC.
ABSTRACT
The prototyping of embedded system, both professionals and academics, normally use a development kit directed to use microcontroller of a specific manufacturer. This makes the kit can not be reused in other projects that aim the utilization the same peripheral resources, contained in the printed circuit board of the kit, with microcontroller of any other manufacturer. These feature found in traditionals kits entails in a limitation of the flexibility of the use of the kit, beyond an increase in the cost of a project by buying another kit with the same resources for the microcontroller of the manufacturer desired. To avoid these problems, this work searched to relate, in hardware, the principles of modularity for solving of a complex problem. So, the objective was conceive a modulate development kit that allows the user combine the modules accordance with his needs, so that its resources be reused in different projects, independently of the microcontroller. For this development kit will be made five distinct modules, being one module for the use of 8-bit PIC microcontroller, one for the use of peripherals components compatible with the I2C bus, one for control of stepper motors, one for the use of LCD display and one for use of a matrix keyboard. At this work were realized the corresponding steps at the information survey, modeling, virtualization and prototyping of the modular development kit, beyond as practical activities for the validation tests for each module. Keywords: Kit. Development. Modulate. Microcontroller. PIC.
1 INTRODUÇÃO
Normalmente, as instituições de ensino do Brasil, que oferecem cursos de nível técnico,
tecnólogo e engenharia, reservam, em suas disciplinas, horas/aula dedicadas ao ensino prático dos
assuntos abordados, de modo teórico, em sala de aula. Essa prática pedagógica é fundamental para a
absorção do conteúdo por parte do estudante (FRAGA, 2008).
O curso de Engenharia de Computação apresenta, em sua matriz curricular, disciplinas com
ementas que envolvem aplicações práticas em laboratórios, equipados com recursos que, na maioria
das vezes, vão além de computadores e internet. Sendo assim, algumas universidades como UFRGS
(Universidade Federal do Rio Grande do Sul), UFES (Universidade Federal do Espírito Santo) e
UNIVALI (Universidade do Vale do Itajaí), já abordam microcontroladores/microprocessadores no
conteúdo programático de algumas disciplinas, onde utilizam kits de desenvolvimento na
implementação das atividades práticas realizadas em laboratórios.
À medida que são avaliados por suas implementações práticas, os alunos demonstram
interesse em realizar suas atividades fora do horário de aula, podendo assim melhorar seus trabalhos
(FRAGA, 2008). Infelizmente, os laboratórios não podem ficar abertos a todo o momento para o
estudante, que por sua vez, em alguns casos, não dispõe do tempo em que os laboratórios estão
disponíveis. Para esses casos, supõe-se que o aluno deveria comprar um kit por conta própria, e
assim, praticar os conteúdos da matéria em horário extra disciplinar. Algumas empresas que
comercializam esses kits e materiais didáticos visam, em sua maioria, apresentar produtos com uma
gama de possibilidades de aplicações elevada. Assim, seus materiais podem abranger diversas
funcionalidades e, consequentemente, ampliar o leque de clientes em potencial.
1.1 KITS DE DESENVOLVIMENTO BASEADOS EM PIC
Os kits podem se diferenciar muito de um para o outro, dependendo do foco de sua
utilização e dos recursos contidos. Entre os kits de desenvolvimento baseados em microcontrolador
PIC (Peripherical Interface Controller), destacam-se os fabricantes: LabTools, Microgenios, Cerne-
Tec e AcePIC, os quais disponibilizam seus kits através de sites de comércio eletrônico para todo o
Brasil. Na Tabela 1, são apresentados alguns exemplos de kits de desenvolvimento que são
vendidos com o microcontrolador PIC16F877A, no qual apresentam recursos comuns entre eles,
tais como: display LCD (Liquid Crystal Display), display de 7 segmentos, teclas, leds e etc.
2
Tabela 1. Exemplos de kits de desenvolvimento baseados no PIC16F877A
Fabricante Nome Preço à vista Ilustração
LabTools McLab 2 - 16F R$ 556,60
Microgenios Kit PICgenios PIC16F877A R$ 580,00
Cerne-Tec PICLAB16F877A R$ 399,90
AcePIC ACEPIC 40 v2.0 (PIC16F877A) R$ 275,90
Fonte: Adaptado de AcePIC (2010), Cerne-Tec (2010), LabTools (2010) e Microgenios (2010).
Todos os kits citados são confeccionados em uma única placa de circuito impresso, onde
possuem várias possibilidades de operação a serem trabalhadas com o microcontrolador. Porém,
essa abordagem de fabricação de kit, traz consigo desvantagens importantes quanto à prototipação
de projetos e, até mesmo, quanto a sua utilização didática.
1.2 PROBLEMATIZAÇÃO
1.2.1 Formulação do problema
Do ponto de vista de projeto, o prejuízo encontra-se na reutilização. Um kit que possui os
recursos necessários para uma prototipação, com exceção da abordagem do microcontrolador, não
serve para o projeto. Um determinado kit de desenvolvimento, construído em uma única placa de
circuito impresso, estará limitado a um determinado fabricante. Assim, o desenvolvedor necessitará
de artifícios técnicos para resolver esta questão, ou até mesmo comprar outro kit voltado ao uso do
microcontrolador do fabricante desejado.
Esse problema também é verdade quando o microcontrolador é compatível, mas não
apresenta um determinado recurso considerado fundamental para o desenvolvedor. Nesse caso, os
3
fabricantes dos kits procuram amenizar este problema introduzindo um conector de expansão,
derivado das portas de entrada/saída do microcontrolador, no qual pode-se conectar uma outra placa
com a funcionalidade desejada.
Para ambas as situações possíveis de se encontrar em um determinado projeto, torna-se
evidente o aumento no custo de desenvolvimento.
Do ponto de vista didático, o valor agregado em kits “super completos”, com recursos que o
estudante desconhece ou não utilizará, torna o investimento inicial muito elevado para o aluno. Isso
pode acarretar em uma desmotivação na compra desse material didático e, até mesmo, na matéria
lecionada. Assim, geralmente, o único kit no qual o estudante pode testar suas aplicações na prática
é o do próprio laboratório. Nesses moldes, a disciplina tem de ser conduzida de tal forma que vários
alunos tenham que dividir tempos de utilização do kit, dificultando o estudante a realizar uma
determinada tarefa prática, acarretando em um possível mau aproveitamento de horas/aula prática
da disciplina, por parte do estudante.
1.2.2 Solução proposta
Para suprir as carências apresentadas em relação aos kits de desenvolvimento tradicionais,
este trabalho propôs como solução construir um kit de desenvolvimento modular, a qual foi baseada
em microcontrolador PIC. Com isso, busca-se oferecer um produto educacional de forma a facilitar
o acesso por parte dos interessados, possibilitando a inclusão gradual de funcionalidades ao kit.
Além disso, flexibilizar a reutilização de recursos de entrada e saída de dados, para prototipação de
sistemas embarcados, respeitando a conectividade entre os módulos.
O trabalho busca aplicar uma das principais metodologias de programação utilizada em
construção de software, a qual consiste em dividir um determinado problema em partes menores
para que facilite sua resolução. Em relação à esta abordagem, Boratti (2004, p. 95) cita que,
Em determinadas situações, a solução de problemas passa pela solução de problemas menores (subproblemas) os quais não se constituem em novos métodos. Nesses casos, pode-se fazer com que a implementação do método seja dividida em módulos, onde cada módulo resolverá um subproblema.
Esse conceito de software foi aplicado à solução proposta no desenvolvimento do hardware,
de modo que suas funcionalidades estejam em placas para serem combinadas e/ou utilizadas
separadamente. Um kit construído desta forma possibilita montar projetos de pequeno, médio e
grande porte, diferenciados apenas pelo número de módulos utilizados.
4
Foram considerados módulos periféricos, os módulos construídos para atuarem
passivamente em um sistema embarcado, ou seja, eles receberão ação direta do usuário e/ou do
microcontrolador. Por sua vez, o módulo contendo o microcontrolador foi considerado módulo
principal. Em uma solução semelhante, Melo e Zapelini (2003, p. 8) utilizaram em um de seus
módulos principais o microcontrolador AT89S8252 (Atmel), onde concluíram em seu artigo que,
Ao permitir uma ampla variedade de experimentos didáticos, em diferentes níveis de complexidade, e a construção rápida de protótipos, o equipamento proposto neste artigo demonstra-se uma importante ferramenta de apoio ao processo ensino/aprendizagem em cursos de Engenharia, Técnicos ou de Tecnologia.
Com a solução proposta, esse trabalho pretende atingir resultados semelhantes aos de Melo e
Zapelini, porém o microcontrolador que foi aplicado ao módulo principal foi o PIC, da Microchip.
Diferente do 8051 (Intel) e o AVR (Atmel), o PIC não é abordado nas disciplinas do curso,
tornando a realização do trabalho uma oportunidade de aprendizado desse que é um dos
microcontroladores mais populares do mercado. Além disso, possui ampla documentação,
ferramentas de desenvolvimento disponíveis, abrangência de aplicações que podem ser
desenvolvidas.
1.3 JUSTIFICATIVA
A execução deste projeto também se justifica em nível de Trabalho de Conclusão de Curso
(TCC) para o Curso de Engenharia da Computação, uma vez que trata do desenvolvimento de um
sistema embarcado que faz uso de várias tecnologias, conceitos e teorias relevantes à essa área,
como: (i) construção de protótipo físico com componentes eletrônicos; (ii) programação em
linguagem C para microcontroladores PIC; (iii) construção de sistemas embarcados com diferentes
periféricos; e (iv) elaboração e simulação de circuitos eletrônicos em software.
1.3.1 Importância
Esse projeto de TCC não busca substituir os kits de desenvolvimentos comerciais, mas
desenvolver uma solução que possibilite montar um kit de acordo com as necessidades do
projetista, podendo ser, possivelmente, de custo mais acessível para alunos, professores e/ou
interessados que desejam utilizar kits de forma particular, em seus projetos.
Não fazem parte do escopo deste trabalho o projeto da fonte de alimentação, no qual foi
utilizada uma fonte criada em outros projetos, e a implementação de roteiros e/ou tutoriais de
experiências com o kit, apenas os programas que validem a funcionalidade dos módulos.
5
Limitações podem ocorrer na implementação do módulo principal do kit, tornando-o restrito
a utilização do microcontrolador escolhido para o projeto. Porém, como mencionado anteriormente,
o projetista pode criar seu modulo principal específico apenas respeitando a conectividade com os
outros módulos do kit.
1.4 OBJETIVOS
1.4.1 Objetivo Geral
O objetivo geral deste trabalho é construir um kit modular de desenvolvimento baseado no
microcontrolador PIC de 8 bits para utilização em experimentos diversos relacionados à área de
sistemas embarcados, em cursos de nível técnico, tecnólogo e engenharia.
1.4.2 Objetivos Específicos
Os objetivos específicos deste trabalho são:
Definir os módulos periféricos que compõem o kit;
Escolher a forma de conexão entre os módulos do kit;
Desenvolver os módulos do kit;
Validar a funcionalidade dos módulos do kit; e
Documentar o trabalho.
1.5 METODOLOGIA
Foram considerados cinco etapas a fim de executar este trabalho, sendo elas: estudo, projeto,
desenvolvimento, validação e documentação. As etapas de estudo e de projeto foram efetuadas no
TCC (Trabalho de Conclusão de Curso) I, enquanto que as etapas de desenvolvimento, validação e
documentação foram efetuadas no TCC II.
Na etapa de estudo, foi realizado um levantamento bibliográfico com o objetivo de
identificar referências que permitam fundamentar os conceitos necessários ao desenvolvimento
deste trabalho. Este levantamento bibliográfico foi baseado em livros e artigos. As referências
foram obtidas através de compras realizadas pela internet em sites de livrarias e editoras, por
locação nas bibliotecas da UNIVALI e da UFSC (Universidade Federal de Santa Catarina) e em
6
publicações disponibilizadas na internet em sites de fabricantes de microcontroladores e de revistas
eletrônicas.
Na etapa de projeto foi realizado um levantamento dos módulos que foram implementados
no trabalho, além do tipo de conexão utilizado entre eles. No levantamento dos módulos, foram
analisados quais os componentes principais que seriam utilizados em cada módulo. No
levantamento do tipo de conexão entre os módulos, foram analisados os requisitos de conexão de
cada módulo periférico com o módulo principal, a fim de determinar um tipo de conexão padrão
entre os módulos. A análise foi baseada na revisão bibliográfica realizada na etapa de estudo.
Na etapa de desenvolvimento foram implementados os módulos do kit em duas plataformas
distintas, plataforma virtual e física. Na implementação virtual, os circuitos necessários para
funcionamento virtual dos módulos foram desenvolvidos no software de simulação de circuitos
eletrônicos Proteus, abstraindo alguns componentes discretos no sistema, utilizando em seu lugar
componentes completos adequados para a aplicação pertencente a sua biblioteca. Na implementação
física, foram adicionados ao circuito dos módulos os componentes discretos abstraídos na
implementação virtual, onde foram montados os esquemas e o layout das placas de circuito
impresso de cada protótipo dos módulos no software de confecção de PCI (Placa de Circuito
Impresso) Eagle.
Na etapa de validação foram desenvolvidos alguns experimentos em linguagem C no
compilador MikroC PRO for PIC, para que fossem compilados e gravados no microcontrolador PIC
a fim de testar os circuitos desenvolvidos. Foram utilizados os mesmos softwares para validação
tanto dos circuitos virtuais quanto dos circuitos físicos, tendo como objetivo o mesmo
comportamento do sistema em ambas as plataforma.
A etapa de documentação foi realizada ao longo de todo trabalho, procurando-se registrar a
execução das etapas descritas anteriormente para elaboração do produto proposto neste TCC. As
informações levantadas para a fundamentação teórica estão registradas no Capítulo 2, enquanto que
as informações relativas ao desenvolvimento do projeto estão no Capítulo 3.
7
1.6 ESTRUTURA DO TRABALHO
Este documento está estruturado em quatro capítulos. O Capítulo 1, Introdução, apresentou
uma visão geral do trabalho. No Capítulo 2, Fundamentação Teórica, é apresentada uma revisão
bibliográfica sobre: Microcontroladores, os microcontroladores de 8 bits fabricados pela Microchip
Technology, assim como uma análise a respeito da compatibilidade entre os eles. Nesse capítulo,
também é feita uma descrição dos recursos do microcontrolador PIC18F4520, do Barramento I2C
(Inter-Intergrated Circuit) e dos Componentes periféricos, relevantes para o trabalho. O Capítulo 3
apresenta o desenvolvimento dos módulos que foram desenvolvidos, incluindo o a metodologia
usada para a elaboração da visão geral projeto, seus requisitos e a arquitetura de hardware utilizada
para o kit modular de desenvolvimento. O capítulo também discute os tipos de implementações dos
módulos e como eles foram desenvolvidos e validados. Concluindo, no Capítulo 4, são apresentadas
as conclusões, onde são avaliadas as metodologias empregadas, as dificuldades enfrentadas e os
resultados obtidos para alcançar as metas estipuladas no escopo deste trabalho.
2 FUNDAMENTAÇÃO TEÓRICA
Neste capitulo é apresentada uma introdução aos microcontroladores e exemplo de
fabricantes, à empresa Microchip Technology e sua classificação sobre seus microcontroladores
fabricados, aos recursos do microcontrolador PIC18F4520 considerados relevantes no trabalho, ao
barramento I2C e aos periféricos selecionados para o kit.
2.1 MICROCONTROLADORES
Um microcontrolador (MCU) é um componente que possui microprocessador, memória e
periféricos no mesmo encapsulamento (ZANCO, 2007).
Os microcontroladores são chips que podem ser programados para realizarem tarefas
específicas. Os MCUs reagem às entradas de dados, de acordo com o programa gravado em
memória, gerando uma saída correspondente. Na Figura 1, estão representadas algumas unidades de
hardware presentes no microcontrolador, dispensando a utilização de outros componentes em um
circuito, tornando-o um elemento poderoso no controle de processos lógicos utilizados em muitos
equipamentos de uso diário como calculadoras, celulares, eletrodomésticos, brinquedos, etc.
Figura 1. Microcontrolador
Fonte: Verle (2008).
9
A estrutura interna do microcontrolador pode variar de acordo com o modelo adotado pelo
fabricante. Grande parte dos microcontroladores apresentam uma arquitetura tradicional do tipo
von-Newmann, existindo apenas um barramento interno por onde passam as instruções e os dados,
enquanto que outros utilizam a arquitetura Harvard, composto por dois barramentos internos, sendo
um de dados e outro de instruções (SOUZA, 2008).
A Figura 2.a representa a arquitetura von-Newmann com apenas um barramento tanto para
dados (contido na memória de dados) quanto para instruções (contido na memória de programa). Já
na Figura 2.b o acesso à memória de dados e memória de programa são realizados por barramentos
separados fisicamente. Nos microcontroladores de 8 bits, os dados são armazenados na memória em
tamanhos de 1 byte (8 bits), dessa forma, na arquitetura von-Newmann, o barramento de dados e
instrução são normalmente de 8 bits (de acordo com o tamanho do dado armazenado na memória de
dados), enquanto que na arquitetura Harvard as instruções podem ser armazenadas em tamanhos
maiores, de 12, 14 e 16 bits, sendo acessadas pelo barramento de instruções de forma independente.
------------------------- (a) ---------------------------------------------------------- (b)
Figura 2. Arquitetura do microcontrolador: (a) von-Newmann; (b) Harvard
Fonte: Verle (2008).
Os microcontroladores de arquitetura Harvard utilizam tecnologia RISC (Reduced
Instruction Set Computer – Computador com Conjunto de Instruções Reduzido). Eles possuem
poucas instruções básicas, executadas tipicamente em apenas um ciclo de clock. Já os MCU de
arquitetura von-Newmann, tipicamente utilizam tecnologia CISC (Complex Instruction Set
Computer – Computador com Conjunto de Instruções Complexas) que usa uma grande quantidade
de instruções para operar (BRAGA, 2010).
10
2.1.1 Exemplo de fabricantes de microcontroladores de 8 bits
A seguir, serão apresentados alguns fabricantes de microcontroladores de 8 bits entre muitos
existentes no mercado. Dentre as informações citadas de cada fabricante selecionado, recebem
destaque a arquitetura e algumas características adotadas para a linha de microcontroladores de 8
bits produzidas pelas mesmas.
National Semiconductor
A National Semiconductor fabrica os microcontroladores COP8 (8-bit Control-Oriented
Processor). Esses MCUs possuem uma arquitetura do tipo Harvard modificada, onde apesar da
memória de dados e a memória de programa ter seus barramentos separados, essa arquitetura
permite a transferência de dados da memória de programa para a memória de dados. O COP8
apresenta um número de instruções superior que os RISC puros, onde quase todas (77%) tem 1 byte
de tamanho, no entanto, contém também instruções multiprogramas (realizam mais de uma tarefa e
utilizam mais de um ciclo de clock), comum em arquiteturas CISC. O COP8 da família S possue até
5 portas de 8 bits de propósito geral para entrada e saída e memória ROM (Read Only Memory) que
pode chegar até a 32 kbytes encapsulado em pastilhas de 28, 40 e 44 pinos. Ele também conta com
periféricos internos como USART (Universal Synchronous Asynchronous Receiver Transmitter),
um par de comparadores analógicos e até 3 timers de 16 bits (NATIONAL SEMICONDUCTOR,
2001).
Freescale Semiconductor
A Freescale, cuja matriz fica em Austin, Texas – EUA (Estados Unidos da América),
autodenominada líder mundial na indústria de processadores integrados, foca tecnologias para
clientes dos setores automotivo, de produtos de consumo e de comunicações. Ela apresenta uma
ampla variedade de microcontroladores de 8 bits para as famílias HCS08, HC08, HC05 e HC11. A
arquitetura utilizada nos microcontroladores da Freescale é do tipo von-Newmann, onde os MCUs
das famílias HC05 e HC11 chegam a conter 210 instruções. Quanto aos periféricos, a família
HCS08 conta com módulos de conversor A/D (Analógico/Digital), Timer/PWM (Pulse-Width
Modulation), comunicação serial, além de memória de programa com capacidade de 4 kbytes à 60
kbytes e memória de dados entre 128 bytes à 4 kbytes e pode operar em frequência máxima de 40
MHz (FREESCALE SEMICONDUCTOR, 2007).
11
Por ser fabricante do microcontrolador escolhido para realização do trabalho, a Microchip
Technology recebe uma atenção diferenciada. A empresa será abordada a seguir, separadamente das
que foram citadas até agora.
2.2 MICROCHIP TECHNOLOGY
A Microchip Technology, fabricante dos microcontroladores PIC, é uma empresa norte
americana de semicondutores, com sede em Chandler - Arizona - EUA. Tendo como foco principal
a venda de dispositivos semicondutores, a empresa disponibiliza, para os desenvolvedores,
softwares, documentação e bibliotecas gratuitamente, através do seu site.
Em 1990, a Microchip iniciou seus negócios no Brasil, em parceria com a Artimar
(representante e distribuidora de várias empresas americanas no setor de eletrônica). Hoje muitas
empresas divulgam e comercializam os produtos fabricados pela Microchip, porém a Artimar
mantém-se como sua representante exclusiva no país (SOUZA, 2008).
2.2.1 Famílias e grupos de microcontroladores PIC de 8 bits
As famílias de microcontroladores PIC de 8 bits, fabricados pela Microchip Technology,
utilizam arquitetura Harvard com tecnologia RISC, limitadas a 83 instruções de 16 bits para as de
maior performance. Os MCUs podem trabalhar com frequências de até 32MHz com oscilador
interno. Os PIC podem variar entre 6 pinos até 100 pinos contendo até 128 kbytes para memória de
programa e 4 kbytes para memória de dados. Pode-se encontrar PIC com controladores periféricos
para comunicação serial, PWM, conversor A/D e comparadores, além de outros especializados para
USB (Universal Serial Bus), LCD, CAN (Controller Area Network) e Ethernet (MICROCHIP
TECHNOLOGY, 2010).
Os microcontroladores PIC são divididos em quatro grupos de performance, arranjados de
acordo com o tamanho da instrução armazenada em memória de programa e módulos internos de
hardware: Baseline (instruções de 12 bits), Mid-Range (instruções de 14 bits), Enhanced Mid-
Range (instruções de 14 bits, com módulos de hardware avançados) e PIC18 (instruções de 16 bits).
Na Figura 3, é apresentado um gráfico das famílias de microcontroladores PIC associados aos
agrupamentos por tamanho da palavra de instrução no qual eles pertencem.
12
Figura 3. Gráfico ilustrado da organização dos PICs em tamanho da palavra de instrução.
Fonte: Microchip Technology (2010).
Tendo em vista um ambiente de desenvolvimento mais flexível, a Microchip oferece
características de migração entre os microcontroladores. Em geral, os MCUs de 8 bits são
classificados em famílias de compatibilidade de pinos e de codificação, de modo que um PIC com
um determinado número de pinos seja compatível a outro pertencente da mesma família. Desta
forma, a empresa oferece maior adaptabilidade em projetos para reagir às mudanças de requisito,
característica importante para sistemas embarcados (MICROCHIP TECHNOLOGY, 2010).
Uma família de microcontroladores pode estar contida em diferentes grupos de performance.
Assim, um MCU utilizado em um determinado projeto pode ser substituído por outro mais
adequado, sem significativas mudanças no hardware e/ou software. No site do fabricante é
normalmente disponibilizado um documento de migração de um microcontrolador para outro
compatível com o mesmo, facilitando ainda mais a adaptação do código montado em um
determinado microcontrolador para um de outro grupo contendo o mesmo número de pinos. Na
Tabela 2, são apresentadas algumas características dos grupos dos PICs relacionando as famílias
pertencentes a cada um deles.
13
Tabela 2. Características dos grupos de microcontroladores PIC
Palavra de instrução 12 bits 14 bits 16 bits
Grupo Baseline Mid-Range Enhanced Mid-Range PIC18
Pinos 6-40 8-64 8-64 18-100 Interrupções Não possui
tratamento de interrupções
Tratamento único de interrupção
Tratamento único de interrupção salvando contexto de hardware
Tratamento múltiplo de interrupção salvando contexto de hardware
Performance 5 MIPS* 5 MIPS* 8 MIPS* Até 16 MIPS* Nº de Instruções 33 35 49 83
Memória de Programa Até 3K bytes Até 14K bytes Até 28K bytes Até 128K bytes
Memória de Dados Até 134 bytes Até 368 bytes Até 1.5K bytes Até 4K bytes
Pilha (Stack) 2 níveis 8 níveis 16 níveis 32 níveis Módulos internos
Comparador 8 bits A/D Memória de
dados Oscilador
interno
Além da Baseline: SPI (Serial
Peripheral Interface)/I²C
UART PWMs LCD 10 bits A/D Amplificador
Operacional
Além do Mid-Range: Múltipla
comunicação de periféricos
Espaço de programação linear
PWMs com Time Base independentes
Além do Enhanced Mid-Range: Multiplicação 8x8
em hardware CAN CTMU (Charge
Time Measurement Unit)
USB Ethernet 12 bits A/D
Destaque Menor custo nos menores modelos
Ótimo custo benefício em performance
Custo efetivo com mais performance e memória
Alta performance, otimização em programas em C, periféricos avançados
Total de dispositivos 16 58 29 193
Famílias PIC10, PIC12, PIC16 PIC12, PIC16 PIC12F1XXX,
PIC16F1XXX PIC18
*MIPS: Milhões de Instruções Por Segundo
Fonte: Adaptado da Microchip Technology (2010).
A seguir serão apresentados alguns exemplos de microcontroladores PIC de 8 bits
compatíveis pertencentes a grupos diferentes.
14
2.2.2 Exemplos de microcontroladores PIC de 8 bits
Foram selecionados, neste estudo, quatro microcontroladores pertencentes a grupos
diferentes: três da família PIC16 e um da família PIC18. Eles estão disponíveis em
encapsulamentos de 18 pinos.
PIC16F54
O PIC16F54 pertence ao grupo Baseline de microcontroladores PIC de 8 bits. Ele possui 33
instruções de 12 bits, 0.75 kbytes de memória de programa, 25 bytes de memória RAM (Random
Access Memory) e até 12 pinos de E/S (Entrada/Saída) digital. Quanto a periféricos, ele apresenta 1
temporizador de 8 bits. O MCU pode operar em 20 MHz de clock com velocidade de 5 MIPS
(MICROCHIP TECHNOLOGY, 2007). A Figura 4 apresenta o diagrama de pinos do PIC16F54.
Figura 4. Diagrama simplificado dos pinos do PIC16F54. Fonte: Microchip Technology (2007).
PIC16F628A
O PIC16F628A pertence ao grupo Mid-Range de microcontroladores PIC de 8 bits. Ele
possui 35 instruções de 14 bits, 3.5 kbytes de memória de programa, 224 bytes de memória RAM e
até 16 pinos de E/S digital. Quanto a periféricos, ele apresenta 2 temporizador de 8 bits, 1
temporizador de 16 bits, memória EEPROM (Electrically-Erasable Programmable Read-Only
Memory) de 128 bytes, comparador, CCP (Capture/Compare/PWM) e USART. O MCU pode
operar em 20 MHz de clock com velocidade de 5 MIPS (MICROCHIP TECHNOLOGY, 2009). A
Figura 5 apresenta o diagrama de pinos do PIC16F628A.
15
Figura 5. Diagrama simplificado dos pinos do PIC16F628A.
Fonte: Microchip Technology (2009).
PIC16F1826
O PIC16F1826 pertence ao grupo Enhanced Mid-Range de microcontroladores PIC de 8
bits. Ele possui 49 instruções de 14 bits, 3.5 kbytes de memória de programa, 256 bytes de memória
RAM e até 16 pinos de E/S digital. Quanto a periféricos, ele apresenta 2 temporizador de 8 bits, 1
temporizador de 16 bits, memória EEPROM de 256 bytes, comparador, ECCP (Enhanced
Capture/Compare/PWM), USART, MSSP (Master Synchronous Serial Port), conversor A/D. O
MCU pode operar em 32 MHz de clock com velocidade de 8 MIPS (MICROCHIP
TECHNOLOGY, 2010). A Figura 6 apresenta o diagrama de pinos do PIC16F1826.
Figura 6. Diagrama simplificado dos pinos do PIC16F1826.
Fonte: Adaptado de Microchip Technology (2010).
16
PIC18F1320
O PIC18F1320 pertence ao grupo e família PIC18 de microcontroladores PIC de 8 bits. Ele
possui 77 instruções de 16 bits, 8 kbytes de memória de programa, 256 bytes de memória RAM e
até 16 pinos de E/S digital. Quanto a periféricos, ele apresenta 1 temporizador de 8 bits, 3
temporizador de 16 bits, memória EEPROM de 256 bytes, ECCP, USART e conversor A/D. O
MCU pode operar em 40 MHz de clock com velocidade de 10 MIPS e pode realizar multiplicação
de 8 bits por 8 bits em hardware (MICROCHIP TECHNOLOGY, 2007). A Figura 7 apresenta o
diagrama de pinos do PIC18F1320.
Figura 7. Diagrama simplificado dos pinos do PIC18F1320.
Fonte: Microchip Technology (2007).
Abstraindo as funções dos pinos que não são comuns para todos, na Tabela 3 é apresentado
o número da ordem do pino (primeira coluna), a descrição da função do pino compatível entre os
microcontroladores citados (segunda coluna), o nome da função do pino compatível entre os
microcontroladores para a família PIC16 (terceira coluna) e o nome da função do pino compatível
entre os microcontroladores para a família PIC18 (quarta coluna). A descrição completa dos pinos
pode ser encontrada no data sheet individual do microcontrolador disponibilizado no site do
fabricante.
17
Tabela 3. Descrição das funcionalidades dos pinos compatíveis entre os microcontroladores PIC exemplificados
Pino Descrição da função compatível Nome da função para família PIC16
Nome da função para família PIC18
1 E/S digital RA2 RA0 2 E/S digital RA3 RA1 3 Entrada de clock do temporizador 0 T0CKI T0CKI
4 Entrada do sinal de reset Entrada de tensão para modo programação
MCLR VPP
MCLR VPP
5 Aterramento do chip VSS VSS 6 E/S digital RB0 RA2 7 E/S digital RB1 RA3 8 E/S digital RB2 RB0 9 E/S digital RB3 RB1
10 E/S digital RB4 RB4 11 E/S digital RB5 RB5
12 E/S digital Entrada do clock de programação ICSPTM
RB6 ICSPCLK*
RB6 PGC
13 E/S digital Entrada do dados de programação ICSPTM
RB7 ICSPDAT*
RB6 PGD
14 Alimentação do chip VDD VDD 15 Saída para oscilador externo OSC2/CLKOUT OSC2/CLKO 16 Entrada para oscilador externo OSC1/CLKIN OSC1/CLKI 17 E/S digital RA0 RB2 18 E/S digital RA1 RB3
Fonte: Adaptado de Microchip Technology (2007), Microchip Technology (2009), Microchip Technology (2010) e Microchip Technology (2007).
Compatibilidade entre PICs
Observa-se que os microcontroladores PIC, com o mesmo número de pinos, pertencentes a
mesma família, são fortemente compatíveis. Um MCU compatível com outro familiar, porém de um
grupo mais avançado, mantém a funcionalidade primária do pino associando novas funcionalidades
relativas ao grupo de evolução. No caso do microcontrolador da família PIC18 e os da família
PIC16, em alguns casos, eles são fracamente compatíveis, onde o hardware pode ser mantido, mas a
codificação da arquitetura é alterada. Se levado em consideração esses aspectos, pode-se realizar a
troca de um microcontrolador em um projeto por outro mais adequado sem grandes mudanças no
hardware de um sistema computacional qualquer.
Em geral, a compatibilidade dos pinos entre os microcontrolador PIC é identificada nos
pinos de E/S digital, alimentação e aterramento do chip, além dos pinos para as funções de reset,
18
oscilador externo e as relacionadas à gravação do microcontrolador. Por conter essa característica, o
PIC tornou-se a escolha de microcontrolador para o trabalho proposto.
Com exceção do PIC16F54, os microcontroladores citados podem ser encontrados em
encapsulamentos de 18, 20 e 28 pinos. A diferença básica entre os encapsulamentos de 18 e o de 20
pinos, está na presença de mais um pino para aterramento e mais um pino para alimentação do chip.
A diferença entre os encapsulamentos de 20 e 28 pinos, está na presença de pinos que não exercem
conexão chamados de NC (No Connect). Esses diferentes encapsulamentos possíveis para os
microcontroladores citados serão abordados a seguir.
2.2.3 Encapsulamento
Dentre os tipos de encapsulamentos disponibilizados pela Microchip, são brevemente
apresentados os tipos QFN (Quad Flat, No Lead Package), SOIC (Small Outline Plastic Packages),
SSOP (Shrink Small Outline Packages) e PDIP (Plastic Dual In-Line Packages). Esses são os tipos
de encapsulamento mais comuns entre os microcontroladores PIC de 8 bits.
QFN
O encapsulamento QFN pode ser encontrado em circuitos integrados com 16, 20, 24, 28, 40,
44, e 64 pinos. Possui um formato quadrangular com tamanho de largura e altura que podem variar
de 3mm até 9mm com a espessura mantendo-se em 0.9mm. Os pinos são situados na parte inferior
do chip, com largura entre 0.20mm e 0.38mm, altura entre 0.35mm e 0.55mm e espessura constante
em 0.20mm para tamanhos normais dos contatos (MICROCHIP TECHNOLOGY, 2010). Na Figura
8, pode-se visualizar um chip em encapsulamento QFN.
Figura 8. Vista em perspectiva do encapsulamento QFN em um chip com 28 pinos.
Fonte: Digi-Key (2010).
19
SOIC
Os circuitos integrados em encapsulamentos SOIC podem ser encontrados com 8, 14, 16,
18, 20, 24 e 28 pinos. Com formato retangular, a largura do chip pode variar de 4.90mm até
17.90mm, sendo encontrado tanto com altura de 3.90mm e espessura 1.25mm, quanto com 7.50mm
de largura e 2.05mm de espessura. Os pinos são situados nas laterais do chip, sendo eles levemente
curvados para soldagem na superfície da placa. Para todos os tamanhos dos chips, a largura, altura e
espessura dos pinos têm tamanho mínimo de 0.31mm, 1.04mm e 0.17mm, respectivamente, e
máximo de 0.51mm, 1.40mm e 0.25mm, respectivamente. As dimensões do chip variam de acordo
com o número de pinos do circuito integrado (MICROCHIP TECHNOLOGY, 2010). Na Figura 9,
pode-se visualizar um chip em encapsulamento SOIC.
Figura 9. Vista em perspectiva do encapsulamento SOIC em um chip com 28 pinos.
Fonte: Digi-Key (2010).
SSOP
O encapsulamento SSOP está disponível em 20, 24 e 28 pinos. A estrutura do chip é
semelhante ao encapsulamento SOIC, porém o chip mantém a altura entre 5.00mm e 5.60mm e a
espessura entre 1.65mm e 1.85mm independente da quantidade dos pinos. A variação de pinos
altera apenas a largura, variando entre 6.90mm, tamanho mínimo para 20 pinos, até 10.50mm,
tamanho máximo para 28 pinos. Quanto aos pinos, a largura permanece entre 0.22mm e 0.38mm, a
altura é fixa em 1.25mm e a espessura fica em torno de 0.09mm e 0.25mm também independente da
quantidade no encapsulamento (MICROCHIP TECHNOLOGY, 2010). Na Figura 10, encontra-se
um chip em encapsulamento SSOP.
20
Figura 10. Vista em perspectiva do encapsulamento SSOP em um chip com 28 pinos.
Fonte: Digi-Key (2010).
PDIP
O encapsulamento PDIP é comumente observado em circuitos integrados utilizados para
prototipação devido à facilidade de utilização em protótipos montados em placas protoboard.
Assim como os encapsulamentos SOIC e SSOP, também possui uma estrutura retangular, porém os
pinos são retilíneos e rígidos semelhantes a um “prego achatado”, tendo em vista o encaixe do chip
em superfícies perfuradas. Na Figura 11, pode-se observar um circuito integrado em
encapsulamento PDIP.
Figura 11. Vista em perspectiva do encapsulamento PDIP em um chip com 28 pinos.
Fonte: Digi-Key (2010).
São encontrados microcontroladores com 8, 14, 16, 18, 20, 24, 28, 40 e 64 pinos neste
encapsulamento. Independente do número de pinos, a haste perfurante dos pinos varia entre
0.34mm e 0.56mm de largura, 2.54mm e 5.8mm de altura e 0.20mm e 0.38mm de espessura,
excluindo a “cabeça” do pino. A distância de uma haste do pino à outra é de 2.54mm. O corpo do
21
chip pode variar bastante na largura com o aumento do número de pinos, permanecendo entre
8.84mm (tamanho mínimo para 8 pinos) e 57.91mm (tamanho máximo para 64 pinos), na altura
varia em 6.10mm (tamanho mínimo até 20 pinos) e 17.53mm (tamanho máximo em 64 pinos) e na
espessura mantém-se entre 2.92mm e 4.95mm (MICROCHIP TECHNOLOGY, 2010). Na Figura
12, observam-se as dimensões 37.40mm, para largura, e 13.53mm, para altura, de um chip de
encapsulamento PDIP. A Figura 13 apresenta as dimensões 0.46mm, para largura, e 3.30mm, para
altura, da haste perfurante do pino e as medidas das espessuras do corpo, com 3.30mm, e do pino,
com 0.25mm, do circuito integrado.
Figura 12. Vista superior do encapsulamento PDIP em um chip com 28 pinos.
Fonte: Adaptado da Microchip Technology (2010).
(a) (b)
Figura 13. (a) Vista lateral e (b) vista frontal do encapsulamento PDIP em um chip com 28 pinos.
Fonte: Adaptado da Microchip Technology (2010).
Tendo em vista a utilização em laboratório do produto gerado deste trabalho, procurou-se
selecionar um microcontrolador pertencente ao grupo de maior performance dos microcontroladores
PIC de 8 bits. Além disso, o MCU da família PIC18 deve ser de manuseio simplificado,
possibilitando a troca de microcontrolador em um soquete correspondente ao seu encapsulamento.
Com essas premissas, o microcontrolador escolhido foi o PIC18F4520 em encapsulamento PDIP.
Alguns de seus recursos serão apresentados na seção seguinte.
22
2.3 MICROCONTROLADOR PIC18F4520
O PIC18F4520 pertence ao grupo e família de microcontroladores de 8 bits PIC18, de maior
performance entre as famílias de 8 bits da Microchip. Ele possui um conjunto de 83 instruções
RISC de 16 bits. A seguir, o microcontrolador é apresentado de forma mais detalhada, inicialmente,
com as características da estrutura externa e interna do MCU em encapsulamento PDIP e após, são
apresentados seus recursos básicos e avançados considerados relevantes ao trabalho.
2.3.1 Estrutura externa
O microcontrolador PIC18F4520 em encapsulamento PDIP de 40 pinos é ilustrado na
Figura 14. Com exceção dos pinos dedicados a alimentação e aterramento do microcontrolador, são
atribuídas mais de uma função para os pinos do PIC18F4520 conforme apresentada na Tabela 22
contido no Anexo I (MICROCHIP TECHNOLOGY, 2008).
---
Figura 14. Diagrama dos pinos do PIC18F4520 em encapsulamento PDIP de 40 pinos. Fonte: Adaptado de Microchip Technology (2008).
2.3.2 Estrutura interna
Internamente, o PIC18F4520 assume a arquitetura Harvard, com a unidade central de
processamento (CPU – Central Processing Unit) acessando a memória de programa e memória de
dados em barramentos distintos. Acompanhando o barramento de dados, estão os conjuntos de
23
portas A, B, C, D e E de comunicação digital externa, a memória de dados EEPROM, entre outros
elementos do MCU. Na Figura 15 é apresentada a estrutura interna do microcontrolador.
Figura 15. Estrutura interna do microcontrolador PIC18F4520.
Fonte: Adaptado de Microchip Technology (2008).
24
2.3.3 Recursos de hardware
Entre os recursos básicos do MCU, estão os módulos presentes em alguns PIC do grupo de
menor performance: oscilador, watchdog timer, reset, memória de dados, memória de programa,
conjunto de instruções e portas de E/S. Eles são os elementos principais para o funcionamento do
microcontrolador e serão abordados de forma simplificada nos itens seguintes.
Oscilador
O clock é quem dá o ritmo de operação do microcontrolador. Um oscilador determina a
velocidade com que o clock do microcontrolador opera (BRAGA, 2010). Quanto maior a frequência
de oscilação, maior será o número de instruções executada em um determinado período. Não existe
uma fórmula para a escolha do oscilador ideal para o projeto, porém a escolha do tipo deve atender
primeiramente ao requisito de eficácia (funcionar corretamente conforme a especificação inicial) e,
em segundo, o requisito de custo (ZANCO, 2007).
O PIC18F4520 possui um módulo oscilador interno, que está calibrado para operar em 8
MHz, porém, com um circuito oscilador externo, a frequência de oscilação pode chegar á 40 MHz
com utilização de cristais osciladores. Nessa caso, existe o viés da utilização exclusiva das portas de
entrada e saída (RA6 e RA7) para conexão do oscilador (MICROCHIP TECHNOLOGY, 2008). A
Figura 16 apresenta dois circuitos osciladores externos, um formado por circuito RC (Resistor
Capacitor) e outro formado por um cristal oscilador ou ressonador, ligado ao microcontrolador. Os
valores para os capacitores são sugeridos pela Microchip no data sheet do componente.
(a) (b)
Figura 16. Oscilador externo por (a) circuito RC, (b) cristal/ressonador.
Fonte: Adaptado de Microchip Technology (2008).
25
A frequência gerada pelo oscilador, dá origem ao ciclo de máquina do microcontrolador.
Nos microcontroladores PIC, esse ciclo é equivalente a um quarto da frequência de operação
(ZANCO, 2007). Souza (2008, p. 24) acrescenta que a divisão do ciclo de máquina forma quatro
fases (Q1, Q2, Q3 e Q4),
O program counter é incrementado automaticamente na fase Q1 do ciclo de máquina e a instrução seguinte é buscada da memória de programa e armazenada no registrador de instruções no ciclo Q4. Ela é decodificada e executada no próximo ciclo, no intervalo de Q1 até Q4. Essa característica de buscar a informação num ciclo de máquina e executá-la no próximo é conhecida como PIPELINE.
O pipeline torna o sistema muito mais rápido, permitindo que quase todas as instruções
sejam executadas em apenas um ciclo de máquina. A exceção fica por conta das instruções de
“salto” no registrador PC (program counter) que contém o endereço da próxima instrução a ser
buscada. A arquitetura Harvard dos PIC permite que esse recurso seja implementado facilmente,
devido à separação dos barramentos de instrução e de dados (ZANCO, 2007).
Watchdog Timer (WDT)
O WDT consiste em com contador de 16 bits que possui um oscilador próprio, independente
do oscilador principal, utilizado para monitorar a execução do software gravado no
microcontrolador, sendo inacessível ao programador tanto para escrita, quanto para leitura. Quando
o contador incrementa o valor máximo armazenado no registrador WDT (0xFF), retornando ao
valor mínimo (0x00), o MCU é imediatamente reinicializado, caso esteja operando em condições
normais, ou acordado, caso esteja em modo de espera ativado pela instrução SLEEP. Essa condição
é identificada como estouro do watchdog (SOUZA, 2008).
Zanco (2007, p. 112) afirma que “a principal função do WDT é proteger o sistema contra
possíveis travamentos, fazendo com que o sistema resete e volte a funcionar”. Normalmente, o
PIC18F4520 mantém o período de 4ms por incremento no contador WDT levando 1.02s para
estourar, porém, com postscale (escala de estouro por voltas realizada pelo contador) de 1 para 128,
pode chegar à 2.18 minutos. A única forma de evitar o estouro do watchdog é através das instruções
CLRWDT (Clear Watchdog Timer), no qual o registrador WDT é zerado, evitando que ele estoure
(MICROCHIP TECHNOLOGY, 2008).
26
Reset
O reset é o mecanismo de inicializar ou reinicializar o funcionamento do microcontrolador.
Quando o reset é acionado, o MCU volta a executar as instruções a partir do endereço 0x00. Esse
desvio pode ocorrer em algumas situações durante a operação normal, tais como: quando o chip é
ligado (POR – Power-on Reset), quando há uma queda na tensão de alimentação do chip (BOR –
Bourn-out Reset), quando acionado o sinal de reset externo (o pino MCLR atinge o nível baixo de
tensão), quando o software força um desvio para o endereço 0x00 (pode ser realizado pela instrução
GOTO) e quando ocorre um estouro do watchdog timer (ZANCO, 2007).
O PIC18F4520 possui um módulo dedicado para essa funcionalidade, porém ela pode ser
implementada em um circuito externo acoplado ao pino MCLR, desabilitando esse recurso. Desta
forma, o pino pode ser usado para entrada e saída de dados digital (RE3). O POR mais básico pode
ser implementado ligando o pino MCLR, quando habilitado, diretamente na alimentação do chip
(SOUZA, 2008). Na Figura 17, são ilustrados dois circuitos externos, POR e BOR, associados ao
pino MCRL do microcontrolador.
(a) (b)
Figura 17. Circuito de reset externo (a) POR e (b) BOR. Fonte: Adaptado de Souza (2008) e Zanco (2007).
Memória de dados
O grupo PIC18 possui dois tipos de memória de dados, ambas capazes de armazenar um
dado de 8 bits: a memória de dados RAM, volátil (mantem os dados armazenados somente
enquanto estiver energizado), e a memória de dados EEPROM, não-volátil (mantém os dados
27
mesmo depois do chip desligado). É na RAM que são armazenadas as variáveis e registradores de
finalidades especiais (SFR – Special Function Registers) utilizados no programa. Por outro lado, a
EEPROM é utilizada para armazenar dados ou configurações que precisam ser mantidos e/ou
recuperados após um desligamento do microcontrolador (SOUZA, 2008).
O PIC18F4520 possui uma memória RAM de 4096 bytes (apenas 1536 bytes são usados),
divididos em 16 bancos de 256 bytes, endereçáveis por 12 bits, sendo que os 4 bits mais
significativos identificam o banco que será acessado (BSR – Bank Select Register), enquanto que os
8 bits menos significativos identificam o endereço de memória do banco que será acessado
(MICROCHIP TECHNOLOGY, 2008). Na Figura 18, é apresentado o mapa da memória de dados
do PIC18F4520.
Figura 18. Mapa da memória de dados do PIC18F4520. Fonte: Adaptado de Microchip Technology (2008).
28
Deve-se evitar o acesso aos primeiros 128 bytes da memória RAM, pois são neles que estão
contidos os registradores de manipulação da Unidade Lógica Aritmética (ULA) e de configuração
do microcontrolador, por exemplo, o program counter. Os 128 bytes subsequentes do banco 0 e os
256 bytes dos bancos 1 ao 5, são os registradores de propósito geral (GPR – General Purpose
Register) usados para armazenamento de dados de operações do programa. Utiliza-se os 6 primeiros
bancos de memória RAM para calcular a capacidade total de armazenamento do PIC18F4520,
sendo 1536 bytes. Os bancos 6 ao 14 e os primeiros 128 bytes do banco 15 não foram
implementados; sempre que forem lidas essas memórias, será atribuído valor 0 (zero) ao retorno e a
escrita nas mesmas é ignorada. Nos últimos 128 bytes do banco 15 da memória RAM estão
contidos os SFR que e são usados pela CPU e módulos periféricos para controle de operações do
dispositivo (MICROCHIP TECHNOLOGY, 2008).
A memória de dados EEPROM, além de ter menor velocidade de leitura/escrita do que a
memória RAM, necessita dos SFRs para operações de leitura e escrita: EEADR (EEPROM Address
Register), registrador que recebe o endereço da memória que será lida ou escrita; EEDATA
(EEPROM Data Register), registrador que recebe o dado que será lido ou escrito de um
determinado endereço; EECON1 (EEPROM Control Register), registrador de controle, dá início
aos ciclos de leitura e escrita; EECON2, registrador de controle que armazena, obrigatoriamente,
uma sequência de valores (0x55 e 0xAA) para dar início ao processo de gravação. (ZANCO, 2007).
É possível armazenar até 256 bytes na memória EEPROM interna do PIC18F4520.
Para ler um dado de determinado endereço da EEPROM, deve-se escrever o endereço no
registrador EEADR (entre 0x00 e 0xFF), limpar o bit EEPGD (Flash Program or Data EEPROM
Memory Select bit) do registrador EECON1 (bit 7), limpar o bit CFGS (Flash Program/Data
EEPROM or Configuration Select bit) do registrador EECON1 (bit 6) e habilitar o bit RD (Read
Control bit) do registrador EECON1 (bit 0) (MICROCHIP TECHNOLOGY, 2008). Na Figura 19,
é apresentado um exemplo de leitura de um dado da EEPROM.
MOVLW 0x33 ; registrador W recebe valor 0x33 MOVWF EEADR ; registrador EEADR recebe endereço que será lido BCF EECON1, EEPGD ; habilita acesso à memória de dados BCF EECON1, CFGS ; habilita acesso à EEPROM BSF EECON1, RD ; EEDATA recebe conteúdo do endereço MOVF EEDATA, W ; registrador W recebe valor de EEDATA
Figura 19. Leitura do dado do endereço 0x33 da EEPROM e escrita em W (Working Register). Fonte: Adaptado de Microchip Technology (2008).
29
Para escrever um dado em um determinado endereço da EEPROM, deve-se escrever o
endereço, da EEPROM, que o dado será armazenado no registrador EEADR, escrever o valor do
dado no registrador EEDATA, limpar o bit EEPGD do registrador EECON1 (bit 7), limpar o bit
CFGS do registrador EECON1 (bit 6), habilitar o bit WERN (Flash Program/Data EEPROM Write
Enable bit) do registrador EECON1 (bit 2), desabilitar as interrupções (recomendação do
fabricante), realizar a sequência de gravação do registrador EECON2, habilitar as interrupções (se
for desabilitada) e limpar o bit WERN do registrador EECON1 (MICROCHIP TECHNOLOGY,
2008). Na Figura 20, é apresentado um exemplo de escrita de um dado na EEPROM.
MOVLW 0x33 MOVWF EEADR MOVLW 5 MOVWF EEDATA BCF EECON1, EEPGD BCF EECON1, CFGS BSF EECON1, WREN ; habilita escrita BCF INTCON, GIE ; desabilita interrupções MOVLW 0x55 ; MOVWF EECON2 ; Sequência de gravação do registrador ECON2 MOVLW 0xAA ; MOVWF EECON2 ; BSF EECON1, WR ; inicia gravação BSF INTCON, GIE ; habilita interrupções BCF EECON1, WREN ; desabilita escrita com a gravação completada
Figura 20. Escrita do valor 5 no endereço 0x33 da EEPROM. Fonte: Adaptado de Microchip Technology (2008).
Memória de programa
A memória de programa do PIC18F4520 é do tipo Flash, podendo ser gravados milhares de
vezes, sem a necessidade de apagar a gravação anterior. Os microcontroladores que possuem a
memória de programa desse tipo, são considerados a melhor opção para testes de programas e
implementação final de projetos (ZANCO, 2007). Souza (2008, p. 27) acrescenta que os MCUs
desse tipo “são muito mais fáceis de trabalhar para o desenvolvimento do sistema, mas, por outro
lado, são muito mais caros para uma fabricação em série”.
30
O PIC18F4520 possui 32 kbytes de memória de programa Flash, podendo armazenar 16.384
palavras de instrução, de 16 bits cada. O registrador program counter é implementado em 21 bits,
podendo endereçar até 2 Mbytes de memória, porém o acesso à memória de programa não
implementada fisicamente retornará sempre valor 0 (zero). Ele ainda conta com uma pilha de 31
níveis ligada diretamente ao registrador PC, um vetor de reset contido no endereço 0x0000, um
vetor de interrupções de alta prioridade contido no endereço 0x0008 e um vetor de interrupções de
baixa prioridade no endereço 0x0018 (MICROCHIP TECHNOLOGY, 2008). Na Figura 21, é
apresentada a estrutura do mapa da memória de programa do PIC18F4520.
Figura 21. Estrutura do mapa da memória de programa do PIC18F4520. Fonte: Adaptado de Microchip Technology (2008).
31
Conjunto de instruções
Algumas das instruções do PIC18F4520 já foram citadas anteriormente, porém sua
funcionalidade não foi descrita. Como definição, Zanco (2007, p. 53) afirma que,
As instruções são constituídas por um conjunto de bits, que ficam armazenados na memória de programa do microcontrolador. Esses bits são lidos na memória de programa, são decodificados para serem acionadas as variáveis de controle internas ao sistema, para que a operação correspondente à instrução seja executada.
O PIC18F4520 incorpora 75 instruções padrão do núcleo de instruções do grupo PIC18,
contando ainda com mais 8 instruções de extensão (otimização de códigos ou de utilização da pilha
de software) usadas para gravação da memória de programa. Ao todo, 83 instruções formam o seu
conjunto de instruções, onde a maioria delas ocupa o espaço de uma única palavra de 16 bits da
memória de programa, sendo que apenas quatro instruções necessitam de 32 bits. Em geral, todas as
instruções, que ocupam uma palavra da memória de programa, são executadas em um único ciclo
de máquina, exceto as instruções de teste condicional verdadeiro ou quando o program counter é
alterado devido ao resultado da instrução, no qual necessitam de dois ciclos de máquina para serem
executadas (MICROCHIP TECHNOLOGY, 2008).
As instruções de núcleo do PIC são agrupadas em quatro categorias: operações orientadas a
byte, operações orientadas a bit, operações literais e operações de controle (MICROCHIP
TECHNOLOGY, 2008). Na Tabela 23, Tabela 24, Tabela 25 e Tabela 26 do Anexo II são
apresentadas brevemente a descrição das instruções reconhecidas pelo montador assembler da
Microchip (MPASMTM).
Portas de E/S
É através das portas de E/S que se podem realizar interações homem-máquina e/ou máquina-
máquina, desenvolvendo uma comunicação entre o microcontrolador e outros dispositivos
associados. A resposta de um MCU às ações externas pode ser observada desde um simples acender
de um led até a escrita de uma frase em um display LCD. Por sua vez, essas ações podem ser
realizadas a partir de um botão aplicando uma mudança no nível lógico de uma porta, por exemplo.
As portas do PIC são bidirecionais, ou seja, podem ser configuradas tanto para entrada
quanto para saída de informação. Para que o microcontrolador possa identificar a direção dos dados,
deve-se configurar o registrador TRIS correspondente ao conjunto de pinos da porta do MCU.
Souza (2008, p. 42) destaca que “quando é colocado ‘1’ em um bit do TRIS, o pino relacionado a
32
ele é configurado como entrada. Para configurar o pino como saída, você deve escrever ‘0’ no bit
relacionado”. Tanto a operação de leitura, quanto a de escrita, podem ser feitas em conjunto,
operando com todos os pinos da porta de uma só vez, ou individualmente, operando com um único
pino da porta de cada vez (bit a bit). Zanco (2007, p. 56) acrescenta que,
Quando escrevemos um valor em um PORT no qual nem todos os bits estejam configurados como saída, os níveis lógicos nos bits que estão configurados como entrada são desprezados, prevalecendo o respectivo nível lógico aplicado pelo hardware em cada pino configurado como entrada.
Porém, mesmo que o nível lógico do pino não seja alterado, a mudança de estado em uma
operação de escrita é identificada e armazenada em um registrador temporário da porta (LAT).
Assim, caso o TRIS correspondente à porta alterada seja posteriormente configurado como saída, a
porta assume imediatamente o nível lógico armazenado temporariamente (SOUZA, 2008). Na
Figura 22, é representado um código onde, inicialmente, é realizada a leitura de todos os bits da
porta A (PORTA) e, em seguida, é atribuído nível lógico “1” apenas para o bit 0 da mesma porta
(RA0).
MOVLW 0Fh MOVWF TRISA ; TRISA configura todas os bits de PORTA como entrada MOVF PORTA, 0 ; Working register recebe a leitura do PORTA NOP BCF TRISA, 0 ; TRISA muda configuração do bit RA0 para saída BSF PORTA, 0 ; passa para nível lógico "1" o bit RA0 do PORTA
Figura 22. Exemplo de leitura e escrita no PORTA.
Fonte: Adaptado de Microchip Technology (2008).
O PIC18F4520 possui um conjunto de cinco portas, onde a cada uma delas está associado
um registrador TRIS e um registrador temporário LAT. Somados, os pinos das portas do MCU
podem chegar a 36 pinos de E/S assim distribuídas: 8 para PORTA (RA0 até RA7), 8 para PORTB
(RB0 até RB7), 8 para PORTC (RC0 até RC7), 8 para PORTD (RD0 até RD7) e 4 para PORTE
(RE0 até RE3). Como os pinos das portas também podem ser configurados para realizar outras
funções, na leitura é atribuído o valor 0 (zero) para o bit do PORT, quando não estão trabalhando
como E/S digital (MICROCHIP TECHNOLOGY, 2008).
O PORTB possui um circuito de pull-up interno, no qual assume nível lógico “0”
automaticamente quando configurado como saída. Além disso, quatro de seus pinos (RB4 ao RB7)
tem recurso de interrupção de mudança de estado, mas para isso necessitam estar configurados
como entrada, onde a leitura atual é comparada com a última leitura realizada na porta. Esse
33
mecanismo de memorização é dado pelo registrador temporário LATB, o qual armazena o valor da
última leitura feita no PORTB (MICROCHIP TECHNOLOGY, 2008).
Interrupções
Zanco (2007, p. 103) define que “uma interrupção é um evento de hardware que, quando
ocorre, provoca um desvio no programa, para que o evento seja tratado”. A ocorrência desse evento
interrompe o programa imediatamente, guardando o endereço da próxima instrução a ser executada.
Em seguida, o programa é desviado para um endereço fixo da memória de programa, onde está
armazenada a função de tratamento. Finalizada a rotina que trata a interrupção gerada, o programa
torna a executar a partir da instrução do endereço armazenado anteriormente (SOUZA, 2008).
Além das interrupções de mudança de estado dos bits do PORTB, existem outras fontes de
interrupções do PIC18F4520, tais como: interrupção por estouro do temporizador, interrupções
externas nos pinos INT e interrupções geradas por periféricos. Em sua maioria, são classificadas
como interrupções de alta ou baixa prioridade. As interrupções estão alocadas nos endereços
0x0008 (para interrupções de alta prioridade) ou 0x0018 (para interrupções de baixa prioridade).
Uma interrupção de alta prioridade pode interromper outra de baixa prioridade durante o processo
de execução da mesma. São usados dez registradores para controlar as operações de interrupção
(MICROCHIP TECHNOLOGY, 2008):
Reset Control Register (RCON): registrador que identifica a causa do último reset ou
despertar (saída do modo SLEEP) ocorrido no microcontrolador;
Interrupt Control Register (INTCON, INTCON2 e INTCON3): registradores que
habilitam ou desabilitam as interrupções globais;
Peripheral Interrupt Request Register (PIR1 e PIR2): registradores que identificam
interrupções ocasionadas por um periférico específico;
Peripheral Interrupt Enable Register (PIER1 e PIER2): registradores que habilitam ou
desabilitam interrupções ocasionadas por um periférico específico; e
Peripheral Interrupt Priority Register (IPR1 e IPR2): registradores que atribuem
prioridade alta ou baixa para as interrupções ocasionadas por um periférico específico.
Em geral, as interrupções possuem três bits que controlam suas operações: Flag bit, indica
qual evento de interrupção ocorreu; Enable bit, permite desviar a execução do programa para o
34
endereço da interrupção quando habilitado; Priority bit, seleciona a interrupção como de alta ou
baixa prioridade (MICROCHIP TECHNOLOGY, 2008).
Os eventos de interrupção externa ou mudança de estado do PORTB possuem uma latência
de três à quatro ciclos de máquina, não importando se a instrução executada na interrupção é de um
ou dois ciclos de máquina. Não se deve usar a instrução MOVFF para modificar qualquer
registrador INTCON, enquanto qualquer interrupção estiver sendo tratada. Fazer isso pode causar
problemas de comportamento do microcontrolador (MICROCHIP TECHNOLOGY, 2008).
Módulo Temporizador 0 (Timer0)
O temporizador 0 do PIC18F4520 pode trabalhar tanto como um temporizador, quanto como
um contador. Sua configuração é dada a partir do registrador T0CON (Timer0 Control Register),
onde a seleção dos bits do registrador determina se operará com contagem em 8 bits ou 16 bits, se
contará os ciclos de máquina ou um pulso de sinal externo e se será associado a um fator prescale
ao temporizador 0. O T0CON utiliza três bits para determinar o fator prescale, no qual aplica um
retardo na contagem do temporizador, que pode chegar à estala de 1 para 256, ou seja, são
necessários 256 ciclos de máquina para incrementar o temporizador (ZANCO, 2007).
A contagem do temporizador 0 é dada pelo registrador TMR0 (Timer0 Register), parte alta
TMR0H (Timer0 Register High) e parte baixa TMR0L (Timer0 Register Low), mapeado na região
SFR da memória RAM. Assim que o temporizador 0 ultrapassa seu limite, ou seja, passa de 0xFF
para 0x00 (operando em 8 bits) ou 0xFFFF para 0x0000 (operando em 16 bits), uma interrupção é
gerada, caso esteja habilitada. Souza (2008, p. 136), acrescenta que a utilização do temporizador 0
“incrementado por pulsos externos pode ser utilizado para muitas outras funcionalidades além de
contagem de tempo, tais como: freqüencímetro, contadores, etc.”. Nesse tipo de operação, pode-se
determinar se o temporizador 0 será incrementado na borda de subida ou de descida do pulso
externo aplicado no pino T0CKI (MICROCHIP TECHNOLOGY, 2008).
Módulo Temporizador 1 (Timer1)
O temporizador 1 do PIC18F4520 pode ser usado como um contador assíncrono. Pode-se
adicionar um oscilador externo de cristal, nos pinos T1OSO/T13CKI e T1OSI, para utilizá-lo como
um relógio de tempo real (RTC – Real Time Clock) nas aplicações do microcontrolador. O circuito
oscilador externo aplicado nos pinos do temporizador 1 é semelhante ao da Figura 16.b apresentada
35
na página 24, porém o fabricante determina que o cristal/ressonador aplicado seja de 32.768KHz,
enquanto que os capacitores C1 e C2 sejam de 27pF (MICROCHIP TECHNOLOGY, 2008).
O temporizador 1 também possui um registrador de controle próprio (T1CON) e suas outras
funções são semelhantes a do temporizador 0, porém são dedicados apenas 2 bits para o fator
prescale, atingindo, no máximo, 8 ciclos de máquina para 1 incremento. Ele também gera uma
interrupção quando é estourado, além disso, pode ser configurado para sincronizar com a subida de
pulso externo ou com o ciclo de máquina (MICROCHIP TECHNOLOGY, 2008).
Zanco (2007, p. 185) expõe que o temporizador 1 “pode ser resetado pelo módulo CCP se
este último estiver operando no modo comparador. Para utilizar esse recurso, o TMR1 deve estar
funcionando como temporizador ou contador síncrono”. O módulo CCP (Capture/Compare/PWM)
é abordado após o módulo temporizador 3.
Módulo Temporizador 2 (Timer2)
Assim como os anteriores, o temporizador 2 do PIC18F4520 é controlado por um
registrador próprio (T2CON), porém apresenta diferenças expressivas em relação aos dois
primeiros. Primeiramente, este temporizador possui apenas um registrador de 8 bits (TMR2) para
contagem de tempo, em segundos, funciona apenas como temporizador, ou seja, só pode ser
incrementado pelo ciclo de máquina. Mesmo assim, apresenta características vantajosas em relação
aos temporizadores 0 e 1 (ZANCO, 2007).
Além do prescale, o temporizador 2 possui um postscale que conta a quantidade de estouros
antes de gerar uma interrupção, ambos com seus fatores podendo ser configurado em até 1 para 16.
Desta forma, caso o temporizador seja configurado, por exemplo, com os fatores prescale de 1 para
8 e postscale de 1 para 4, ele será incrementado a cada 8 ciclos de máquina levando 4 estouros para
gerar uma interrupção (SOUZA, 2008).
O estouro do temporizador 2 é dado pelo registrador PR2 (Period Register 2) de 8 bits, no
qual é armazenado o número com o limite de incrementos do temporizador. Assim, sempre que o
temporizador 2 for incrementado, ele é comparado com o PR2. Caso sejam iguais, será identificado
o estouro e o registrador TMR2 tornará ao seu valor inicial (0x00) (MICROCHIP TECHNOLOGY,
2008).
36
Módulo Temporizador 3 (Timer3)
O temporizador 3 do PIC18F4520, é semelhante ao temporizador 1. Eles até compartilham o
mesmo circuito oscilador. Tanto o temporizador 1, quanto o temporizador 3 podem ser usados em
conjunto com o módulo CCP (descrito em seguida), quando configurado para gerar um evento em
modo Compare, no qual pode reinicializar o temporizador determinado gerando uma interrupção. A
diferença entre os dois está no registrador controlador do temporizador 3 (T3CON), que possibilita
escolher qual dos temporizadores (1 ou 3) será associado em qual módulo CCP (MICROCHIP
TECHNOLOGY, 2008).
Módulo CCP
O PIC18F4520 possui dois módulos CCP (CCP1 e CCP2). Ambos os módulos possuem um
registrador de 16 bits, que pode operar em três modos diferentes: Capture, Compare e PWM. Os
temporizadores 1 e 3 estão disponíveis para os dois primeiros modos de operação (a associação de
um temporizador com o um módulo CCP, é feita pelo registrador T3CON), enquanto que o
temporizador 2 está para o último (MICROCHIP TECHNOLOGY, 2008). Souza (2008, p. 33)
lembra que “O módulo CCP também possui uma interrupção associada a ele para informar ao
programa uma das duas situações possíveis: Fim da captura (Capture) ou Fim da comparação
(Compare)”.
No modo Capture, o valor do temporizador (TMR1 ou TMR3) é copiado (capturado) para o
registrador CCPRx (CCPx Register). Esse evento pode ser configurado, a partir do registrador
CCPxCON (CCPx Control Register), para ocorrer: em cada borda de descida, em cada borda de
subida, em cada 4 bordas de subida ou em cada 16 bordas de subida. Para este modo de operação, o
pino correspondente ao módulo CCP deve estar configurado como entrada e o temporizador
trabalhando como contador síncrono (SOUZA, 2008).
No modo Compare, o valor do temporizador (TMR1 ou TMR3) é comparado com o do
registrador CCPRx constantemente. Quando for identificada uma igualdade entre os valores,
dependendo da configuração do registrador CCPxCON, um dos seguintes eventos ocorre no pino
CCPx: passa para nível lógico “1”, passa para nível lógico “0”, troca de nível lógico (de “1” para
“0” ou de “0” para “1”) ou permanece como está (porém é gerada uma interrupção do
temporizador). O CCPx e o temporizador, devem receber a mesma configuração que o modo
Compare (MICROCHIP TECHNOLOGY, 2008).
37
Para Zanco (2007, p. 236), o modo PWM
é o modo de funcionamento mais poderoso do módulo CCP e pode ser utilizado em diversas aplicações, como, por exemplo, conversor digital/analógico, fonte chaveada, nobreaks, etc. O PWM, conhecido como Modulação por Largura de Pulso, é um sinal digital com frequência fixa, mas largura de pulso (ciclo ativo) variável.
A frequência fixa do sinal digital é dada pelo inverso do período do PWM. A saída PWM é
produzida por até 10 bits de precisão do registrador CCPx, tendo como base o temporizador 2.
Sabendo-se que TMR2 é formado por 8 bits, Souza (2008, p. 168) complementa, “os 2 bits faltantes
serão adquiridos através do clock interno da máquina” e referindo-se as fases Q1 até Q4, “a divisão
do clock por 4 gera esses tempos internos, que são utilizados para incrementar o TMR2 e também
para controlar o PWM. Esses quatro tempos geram os 2 bits faltantes”. Desta forma o período do
PWM é determinado pela Equação 1, onde: PR2 representa o valor de estouro do temporizador 2,
TOSC o valor do inverso da frequência do oscilador do microcontrolador e TMR2prescale o valor do
fator prescale aplicado ao temporizador 2.
푃푊푀 í = [(푃푅2) + 1] ∗ 4 ∗ 푇 ∗ 푇푀푅2 Equação 1
A largura de pulso ou Duty Cycle (DC) é o tempo em que o sinal permanece em nível lógico
“1”. Ela é especificada por 10 bits, sendo os 8 bits mais significativos dados pelo registrador
CCPRxL e os 2 bits menos significativos pelos bits 5 e 4 do registrador CCPxCON (MICROCHIP
TECHNOLOGY, 2008). Assim sendo, o Duty Cycle do PWM é determinado pela Equação 2, onde
CCPRxL:CCPxCON[5:4] representa o valor determinado pela especificação citada dos 10 bit, TOSC
o valor do inverso da frequência do oscilador do microcontrolador e TMR2prescale o valor do fator
prescale aplicado ao temporizador 2.
푃푊푀 = (퐶퐶푃푅푥퐿:퐶퐶푃푥퐶푂푁[5: 4]) ∗ 4 ∗ 푇 ∗ 푇푀푅2 Equação 2
A Microchip (2008, p. 145) recomenda os seguintes passos para operar o módulo CCP em
modo PWM:
1. Determine o período do PWM escrevendo o valor no registrador PR2;
2. Determine o Duty Cycle escrevendo o valor no registrador CCPRxL e nos bits 5 e 4 do
registrador CCPxCON;
38
3. Configure o pino do CCPx como saída limpando o bit do TRIS apropriado;
4. Determine o fator prescale do temporizador 2, então habilite-o a partir do registrador
T2CON; e
5. Configure o módulo CCPx para operar em modo PWM.
No PIC18F4520, o módulo CCP1 é implementado como um CCP padrão, porém com o
modo PWM com reforço na saída com o módulo ECCP. Esse modo de operação do PWM é
normalmente utilizado para controle de motores elétricos. Ele é configurado pelo registrador
CCP1CON e pode trabalhar com até 4 canais de saída PWM (pinos P1A, P1B, P1C e P1D) de
diferentes maneiras (VERLE, 2008):
Saída única: o mesmo sinal PWM é aplicado nos canais de saída, com até um par de
canais com polaridade invertida. Nesse caso, um par deve ser P1A e P1C e o outro par
P1B e P1D, necessariamente. Na Figura 23 é ilustrado o controle interno do modo PWM
de saída única;
Meia ponte: um sinal PWM é aplicado no canal de saída P1A e outro sinal,
complementar ao primeiro, é aplicado no canal P1B de saída, simultaneamente. Deve-se
aplicar um atraso no canal de saída complementar para evitar curto-circuito. Na Figura
24 é ilustrado os circuitos de meia ponte e ponte completa controlados pelo PWM de
meia ponte;
Ponte completa em modo avançado: utiliza quatro canais de saída. A sequência de pulso
é aplicada no canal de saída P1D, enquanto que P1A permanece sempre em nível lógico
“1” e os canais P1B e P1C permanecem em nível lógico “0”. Na Figura 25 é ilustrado o
circuito modo PWM de ponte completa; e
Ponte completa em modo reverso: utiliza quatro canais de saída. A sequência de pulso é
aplicada no canal de saída P1B, enquanto que P1C permanece sempre em nível lógico
“1” e os canais P1A e P1D permanecem em nível lógico “0”.
39
Figura 23. Modo PWM em saída única.
Fonte: Verle (2008).
(a) (b)
Figura 24. Modo PWM em meia ponte para controle de circuito de (a) meia ponte ou (b) ponte completa. Fonte: Verle (2008).
Figura 25. Modo PWM em ponte completa para controle de circuito de ponte completa. Fonte: Verle (2008).
40
Módulo MSSP
O MSSP consiste em um módulo de interface serial usado para comunicação com outros
dispositivos periféricos ou microcontroladores. Sua característica principal é a comunicação
síncrona adequada para uso em sistemas de um mestre para um ou mais escravos. Ele pode operar
em modo SPI ou I2C. Em ambos os modos, o mestre é quem estabelece a comunicação e é quem
gera o clock para transmissão de dado, enquanto que o escravo só espera o pedido de transmissão de
dado do mestre. Existem três registradores associados ao módulo, sendo um registrador de status
(SSPSTAT – MSSP Status Register) e dois registradores de controle (SSPCON1 – MSSP Control
Register 1 – e SSPCON2 – MSSP Control Register 2) (MICROCHIP TECHNOLOGY, 2008). Nas
Figura 26 e Figura 27, estão representados os modos SPI e I2C de comunicação serial síncrona,
respectivamente.
Figura 26. Modo SPI de comunicação serial síncrona. Fonte: Verle (2008).
Figura 27. Modo I2C de comunicação serial síncrona.
Fonte: Verle (2008).
O modo SPI permite que 8 bits de dados sejam transmitidos e recebidos simultaneamente,
utilizando apenas 3 pinos: saída de dados ou linha transmissor SDO (Serial Data Out), entrada de
dados ou linha receptora SDI (Serial Data In) e clock serial ou linha de sincronização SCK (Serial
Clock). No caso do microcontrolador operar como escravo, utiliza-se um pino extra de seleção de
41
escravo SS (Slave Select) (VERLE, 2008). Na Figura 28, é representado o modo SPI de operação
selecionando o escravo com quem será estabelecida a comunicação mestre-escravo.
Figura 28. Sincronização entre mestre-escravo no modo SPI. Fonte: Verle (2008).
O módulo MSSP utiliza quatro registradores para o modo SPI: SSPCON1 e SSPSTAT para
controle, SSPBUF (MSSP Buffer Register) utilizado para armazenar temporariamente o dado
recebido e SSPSR (MSSP Shift Register) utilizado para transmitir/receber/deslocar um dado para
dentro e fora do dispositivo (MICROCHIP TECHNOLOGY, 2008).
O modo I2C é comumente utilizado por dispositivos como memórias, sensores de
temperatura, relógios de tempo real, etc. A transferência de dados é semelhante ao modo SPI,
porém a linha de dados é bidirecional utilizando apenas dois pinos no barramento. Esses pinos
devem ser configurados como entrada ou saída através dos bits 3 e 4 do registrador TRISC
(VERLE, 2008). Este modo de operação do MSSP do PIC18F4520 é abordado mais
detalhadamente na seção seguinte deste capítulo, onde os pinos 18 e 23 do MCU podem ser
associados às linhas de clock e de dados do barramento, respectivamente.
2.4 BARRAMENTO I2C
O barramento I2C foi desenvolvido pela Philips Semiconductors, hoje como NXP
Semiconductors, para prover uma comunicação eficiente de circuitos integrados através de um
barramento simplificado. O I2C é adotado por muitas empresas de semicondutores, além da NXP,
tais como Texas Instruments, Atmel, Intel, entre outras. Por ser amplamente aceito pelo mercado, é
comum encontrar dispositivos eletrônicos que podem ser inseridos em um barramento I2C, tais
42
como microcontrolador, microprocessador, relógio de tempo real, memória EEPROM, etc.
(PRADO, 2007).
Na Figura 29 é apresentado um exemplo do barramento I2C onde estão associados alguns
componentes no barramento. São usados dois fios para comunicação, um para os dados (SDA –
Serial Data) e outro para o clock de sincronização (SCL – Serial Clock). Os dispositivos conectados
no barramento são endereçáveis via software (através de um endereço único), onde é realizada a
comunicação mestre-escravo.
Figura 29. Comunicação mestre-escravo no barramento I2C.
Fonte: Verle (2008).
2.4.1 Características do barramento I2C
Algumas outras características e benefícios são apresentados pela NXP Semiconductors
(2007) em relação ao barramento:
Os mestres podem operar como mestre-transmissor ou mestre-receptor;
Dois ou mais mestres podem transmitir dados simultaneamente (multi-mestre), incluíndo
detecção de colisões e mecanismo de arbitragem para prevenir corrupção dos dados;
Os dados podem ser transmitidos em até 3.4 Mbits/s;
Picos de tensão no barramento de dados são detectados e filtrados pelo chip, garantindo
a integridade dos dados;
O número de dispositivos conectados é limitado apenas pela capacitância máxima do
barramento;
43
Endereçamento integrado e o protocolo de transferência de dados permitem que o
sistema seja definido completamente por software;
Os circuitos integrados podem ser adicionados e removidos sem afetar o circuito no
barramento;
Redução no tempo de projeto devido à compatibilidade dos componentes;
A utilização de componentes compatíveis ao barramento proporciona ao sistema um
baixo consumo de corrente, além de imunidade a ruídos; e
Redução no custo de fabricação de placas de circuito impresso, devido à mínima
interconexão entre os componentes.
Considerando o aspecto físico, devem-se adicionar mais dois fios ao barramento, um com 5
volts para alimentação dos dispositivos (VDD) e outro com 0 volts para o aterramento (VSS ou GND
– Ground). Quando as linhas de dados e do relógio estiverem livres, eles devem permanecer em
nível lógico alto. Para isso, é utilizado um resistor de pull-up em ambas as linhas (ROBOT
ELECTRONICS, 2010). A NXP Semiconductors (2007) sugere que para proteger os dispositivos
de picos de tensão nas linhas, pode ser usado um resistor em série aos pinos de dados e de clock do
dispositivo. Na Figura 30 é apresentado o barramento I2C considerando-se os aspectos físicos
citados, onde na 30.a não é considerado o resistor em série (RS), enquanto que na 30.b ele está
presente.
(a) (b)
Figura 30. Aspectos físicos do barramento I2C (a) sem e (b) com resistores em série (RS). Fonte: Adaptado de NXP Semiconductors (2007).
A alimentação do dispositivo deve ser verificada no data sheet do componente, sendo que a
energização em 5 volts é dada para dispositivos de tecnologia CMOS (Complementary Metal-
44
Oxide-Semiconductor), como microcontroladores, por exemplo. O valor correspondente aos
resistores é dado pelo gráfico apresentado na Figura 31, onde a reta representa a voltagem da linha
de alimentação dos dispositivos, enquanto que os eixos cartesianos correspondem ao valor dos
resistores RP de pull-up (eixo vertical) e de série RS (eixo horizontal).
Figura 31. Gráfico da relação dos resistores de pull-up e de proteção no circuito I2C.
Fonte: NXP Semiconductors (2007).
A comunicação entre os dispositivos conectados no barramento I2C é realizada por um
protocolo de comunicação serial síncrona chamado de protocolo I2C.
2.4.2 Protocolo I2C
O protocolo I2C foi desenvolvido para transferir informações entre os dispositivos
conectados no barramento I2C. Cada componente é reconhecido por um endereço único, em geral,
podendo operar como um transmissor ou receptor de informação, assumindo o papel de mestre ou
escravo. O mestre é quem inicia a transmissão dos dados gerando o sinal do clock, permitindo a
transferência da informação. Quando um componente assume o papel de mestre, todos os outros são
considerados escravos para o mesmo. Essas e outras definições do protocolo de comunicação estão
descritos na Tabela 4.
45
Tabela 4. Definições do protocolo I2C
Termo Descrição Transmissor Dispositivo que envia dados para o barramento. Receptor Dispositivo que recebe dados do barramento. Mestre Dispositivo que gera sinais de clock e inicia/termina uma transferência. Escravo Dispositivo endereçado pelo mestre. Multi-mestre Mais de um mestre pode tentar controlar o barramento ao mesmo tempo.
Arbitragem Procedimento que assegura que a mensagem, em modo multi-mestre, não seja comprometida.
Sincronização Procedimento para sincronizar os sinais de clock de dois ou mais dispositivos
Fonte: Adaptado de NXP Semiconductors (2007).
A transmissão entre os dispositivos é realizada com base em algumas condições do
protocolo. Na Figura 32 está representada a ordem das condições presentes no protocolo I2C para
transferência de dados no barramento entre mestre e escravo. Inicialmente, o mestre sinaliza a
condição de início de transferência (Start) no barramento, seguida do endereço do escravo com
quem estará se comunicando e a informação da operação que será realizada (R/W – Read/Write),
sendo de leitura ou escrita. Após isso, o escravo confirma ao mestre o recebimento do chamado
(ACK – Acknowledge), dando início a transferência dos dados. A cada dado transmitido, o escravo
confirma seu recebimento. Terminado o envio dos dados, o mestre sinaliza a condição de parada
(Stop) finalizando a comunicação com o escravo.
Figura 32. Condições do protocolo I2C para transferência de dados.
Fonte: Adaptado de NXP Semiconductors (2007).
Start e Stop
As condições de Start e Stop são apresentadas na Figura 33. Ambas são dadas pela mudança
de estado da linha de dados (SDA) enquanto que a linha do clock (SCL) é mantida em nível lógico
alto. Para o Start, a linha de dados deve mudar de nível lógico alto para nível lógico baixo. Para o
Stop, a mudança da linha de dados é de nível lógico baixo para nível lógico alto. Em alguns casos,
pode ser necessário reiniciar a comunicação entre mestre e escravo. Para esses casos, o reinício é
realizado aplicando uma condição de Stop seguida de um Start.
46
(a) (b)
Figura 33. Condições de (a) Start e (b) Stop do protocolo I2C. Fonte: Robot Electronics (2010).
Endereço e Dado
O endereço de identificação do escravo é exclusivo para cada componente. Ele é transmitido
pelo mestre através da barramento de dados de dados (SDA). Após a condição de Start ser
estabelecida com os escravos do barramento, eles comparam o endereço recebido com seu próprio
endereço. Caso o escravo solicitado pelo mestre não seja o receptor destinatário, os dados que serão
transmitidos pelo mestre serão ignorados. Apenas o escravo receptor correto irá considerar as
informações do mestre.
Podem ser usados dois tipos de endereçamento, um de 7 bits ou outro de 10 bits.
Considerando 7 bits, seria possível endereçar até 128 escravos em um barramento I2C. Isso não é
permitido devido às limitações de capacitância do barramento. Verle (2008) cita que é possível
incluir, no máximo, 112 circuitos integrados no mesmo barramento de transmissão.
A Figura 34 apresenta os dois tipos de endereçamento. Os dois tipos de endereçamento
utilizam a mesma quantidade de bits (7 bits) para o identificação do endereço no barramento,
porém, para identificar um dispositivo com 10 bits de endereço, o mestre envia como endereço a
sequência de bits “11110” com dois bits mais significativos do endereço do escravo. Após a
confirmação do escravo (existe a possibilidade de confirmação de mais de um escravo), o mestre
envia um dado contendo os outros 8 bits menos significativos de identificação do escravo.
O dado é formado por 8 bits (1 byte), onde os bits mais significativos de um dado é enviado
primeiro. O mestre pode enviar n dados para o escravo, sendo que sempre após o envio de um dado,
o escravo envia uma confirmação de recebimento (ACK).
47
(a)
(b)
Figura 34. Identificação do componente com (a) 7 bits e (b) 10 bits de endereço.
Fonte: Adaptado de NXP Semiconductors (2007).
R/W e ACK
Tanto a informação da operação que será realizada (R/W), quanto a confirmação do escravo
(ACK), são identificadas por apenas 1 bit. Quando o R/W é identificado com o bit em nível lógico
baixo, o mestre realizará uma operação de escrita, quando for identificado com nível lógico alto,
será realizada uma operação de leitura. Quando o escravo aplica nível lógico baixo na linha de
dados (SDA), previamente mantida em nível lógico alto pelo mestre, o mestre identifica um
recebimento bem sucedido das informações transmitidas (ACK) e quando a modificação não for
realizada pelo escravo, o mestre identifica um NACK (Not Acknowledge). O NACK pode ser
originado por vários motivos, porém os motivos podem ser interpretados como uma falha na
comunicação entre o mestre e o escravo. Quando um NACK é identificado, deve-se reiniciar a
comunicação.
Validação de um bit
Os bits de endereço, dados, R/W e ACK (ou NACK) são validados pela barramento de
clock. A validação é dada pela estabilidade do barramento de dados (SDA) durante o pulso no
barramento de clock (SCL). A Figura 35 apresenta o mecanismo de validação do bit no protocolo
I2C, onde o nível lógico do barramento de dados permanece estável enquanto o barramento de clock
altera o nível lógico duas vezes, primeiro de baixo para alto seguido de alto para baixo.
48
(a) (b)
Figura 35. Validação de um bit em nível lógico (a) alto e (b) baixo no protocolo I2C. Fonte: Robot Electronics (2010).
Na Figura 36 é apresentada uma transferência completa de comunicação realizada entre um
mestre e um escravo pelo protocolo I2C, onde é possível identificar a condição de Start, os 7 bits de
endereço, o bit de operação (endereço e operação formando 1 byte), mais o bit de confirmação do
escravo, além da transmissão de dois bytes de dados (seguidos do ACK) antes da finalização pela
condição de Stop.
Figura 36. Transferência completa no protocolo I2C.
Fonte: Adaptado de NXP Semiconductors (2007).
Pela possibilidade de haver mais de um mestre, o barramento I²C é considerado multi-
mestre. Assim como os escravos, os mestres também são endereçáveis, podendo ser escravos de
outros mestres. Desta forma, um mestre irá trabalhar como um mestre-transmissor, enquanto que
outro trabalhará como mestre-receptor. A comunicação entre eles é idêntica à comunicação mestre-
escravo, onde o mestre-transmissor é considerado o mestre do barramento e o mestre-receptor é o
49
escravo. Quando ocorrer de dois ou mais mestres tentarem ocupar o barramento ao mesmo tempo,
ambos como mestre, são utilizados mecanismos de sincronização do relógio e arbitragem para
determinar quem irá assumir o controle do barramento (quando não houver concorrência não há
necessidade dos mesmos).
Sincronização do relógio
A sincronização do clock é realizada por uma conexão AND na interface do barramento de
clock (SCL) dos dispositivos mestres. A Figura 37 representa a sincronização do clock entre dois
mestres concorrentes. A transição de nível lógico alto para baixo do barramento SCL, iniciando a
contagem do período de nível baixo do clock de todos os mestres concorrentes. Os mestres
permanecem em estado de espera, após mudarem o nível de sua linha de clock, até que o último
mestre altere o nível de SCL para alto. Assim, a sincronização é dada pelo mestre que primeiro
finalizar a contagem do período de nível alto de sua linha de clock, passando o barramento SCL
para nível baixo.
Figura 37. Sincronização do relógio entre dois mestres concorrentes.
Fonte: Adaptado de NXP Semiconductors (2007).
Desta forma, os mestres estarão sincronizados, sendo que o nível baixo do SCL é mantido
pelo mestre com maior período de nível baixo de sua linha de clock, enquanto que o nível alto do
SCL é mantido pelo mestre com menor período de nível alto.
Arbitragem
O mecanismo de arbitragem é aplicado no barramento de dados (SDA), sendo realizado na
validação de cada bit, prevenindo a perda da informação transmitida no barramento. A Figura 38
apresenta o mecanismo de arbitragem aplicado em dois mestres concorrentes que iniciaram a
50
comunicação. O mecanismo da preferência à transmissão dos bits em nível lógico baixo, onde se
um determinado mestre estiver transmitindo um bit em nível alto enquanto a linha SDA do
barramento estiver em nível baixo, ele perde o controle do barramento.
Figura 38. Arbitragem entre dois mestres concorrentes.
Fonte: Adaptado de NXP Semiconductors (2007).
Caso a perda do controle seja durante a transmissão dos bits de endereço, o mestre que
perdeu o controle do barramento deve assumir o papel de escravo (mestre-receptor), pois pode ser
que o mestre vencedor esteja tentando endereçá-lo. Assim que o barramento for liberado, o mestre
que perdeu o controle do barramento pode reiniciar a comunicação.
Como citado na Subseção 2.3.3 deste capítulo, o PIC18F4520 possui o recurso MSSP, no
qual possibilita a utilização do microcontrolador como um dispositivo mestre do barramento I2C.
Este trabalho visa abordar esse recurso no projeto de um módulo periférico voltado a aplicação do
barramento I²C, através da comunicação de dispositivos periféricos compatíveis com o mesmo.
Outros componentes periféricos serão abordados em outros módulos do kit proposto. Esses
componentes serão mais detalhados na seção seguinte.
2.5 COMPONENTES PERIFÉRICOS
Neste trabalho, considera-se como componentes periféricos os elementos passivos de um
sistema computacional, ou seja, os dispositivos que sofrem ação direta do usuário ou de um outro
dispositivo. O microcontrolador, por exemplo, é composto por uma unidade central de
processamento, memória e periféricos internamente no chip. Alguns dos recursos periféricos do
PIC18F4520 foram citados na Seção 2.3 deste capítulo.
51
Neste momento serão tratados os periféricos externos ao microcontrolador, que por sua vez,
receberão ações do usuário ou do microcontrolador a fim de desempenhar uma determinada tarefa.
Dentre os periféricos selecionados para o estudo estão o motor de passo, teclado matricial e display
LCD, que são apresentados, respectivamente, nas Subseções 2.5.1 , 2.5.2 e 2.5.3 .
2.5.1 Motor de passo
Um motor de passo consiste em um dispositivo que converte pulsos elétricos em
movimentos mecânicos angulares. Esta conversão é dada por um rotor central que rotaciona a fim
de alinhar-se com o campo magnético produzido por uma ou mais bobinas do estator. Os motores
de passo são normalmente utilizados em equipamentos que requerem estabilidade e precisão como,
por exemplo, câmeras de vídeo, impressoras e robôs (BRITES e SANTOS, 2008).
A variação angular proveniente do movimento do rotor é denominada “passo”. A precisão
do motor é dada pelo número de passos em uma rotação completa (360º). Esse fator de precisão é
chamado de resolução e quanto maior a resolução mais preciso é o motor. Pode-se encontrar
motores de passo menos precisos com resolução de apenas 4 PPR (Passos Por Rotação), onde o
rotor gira 90º por passo, ou até motores mais precisos com resolução de 500 PPR, com 0.72º por
passo (PRESTES, LEÃO, et al., 2001).
Os motores de passo trabalham com três estados de operação: desligado (quando não há
energização do motor ou de nenhuma bobina do estator), parado (quando pelo menos uma bobina é
energizada mantendo o rotor em uma posição fixa) ou rodando (quando as bobinas são energizadas
de forma sequencial forçando o rotor a se movimentar aplicando um giro no mesmo) (MESSIAS,
2006).
A velocidade de rotação do rotor nos motores de passo está ligada à indutância das bobinas,
sendo que o tempo de saturação da corrente nas bobinas do estator varia de um motor para outro. A
corrente nas bobinas produz o campo magnético que atrai o rotor, sendo que quanto maior a
corrente maior é o torque de atração. Em altas velocidades, a bobina não é energizada
adequadamente para aplicar um torque no rotor, possibilitando a perda de passos do motor. Na
Figura 39 é apresentado um gráfico da relação entre torque e velocidade de um determinado motor
de passo. Observa-se duas curvas da relação torque e velocidade, uma curva considerando o motor
inicialmente em estado rodando e outra em estado inicial parado.
52
Figura 39. Gráfico relacionando entre torque e velocidade em PPS (Passos por segundo). Fonte: Adaptado de Yedamale e Chattopadhyay (2002).
Normalmente, os motores de passo possuem 4 bobinas no estator. Para este estudo, foram
considerados dois tipos de classificação em relação ao acionamento das bobinas do estator, sendo
unipolar ou bipolar.
Na Figura 40, é apresentada uma ilustração dos terminais dos enrolamentos de um motor
unipolar. Observa-se que o motor unipolar possui um center-tape no enrolamento de suas bobinas,
sendo ele ligado na alimentação do motor. A corrente é aplicada em meio enrolamento aterrando
uma das extremidades, onde uma bobina do estator é polarizada atraindo o rotor.
Figura 40. Ilustração dos terminais dos enrolamentos de um motor unipolar.
Fonte: Adaptado de McComb (2007).
53
Na Figura 41, é apresentada uma ilustração dos terminais dos enrolamentos de um motor
bipolar. No motor bipolar, o enrolamento não possui o center-tape, sendo a alimentação aplicada
em uma das extremidades aterrando a outra. Assim, a corrente é aplicada em todo enrolamento
polarizando duas bobinas do estator (CONDIT, 2004).
Figura 41. Ilustração dos terminais dos enrolamentos de um motor bipolar.
Fonte: Adaptado de McComb (2007).
Essa diferença entre o motor unipolar e o bipolar traz consigo diferenças nos seus circuitos
de acionamento e na relação entre energia consumida por torque para realizar o passo do rotor. O
circuito controlador de motor de passo unipolar é mais simples se comparado ao do bipolar
(CONDIT et al, 2004). McComb (2007, p.45) ainda acrescenta que os motores de passo unipolares
podem ser acionados como bipolares, aplicando-os em um circuito controlador correspondente
ignorando o center-tape.
Nas Figura 42 e Figura 43 são apresentados os circuitos para o controle da corrente em um
enrolamento do motor de passo unipolar e bipolar. Eles recebem o nome de ponte H devido ao
formato do circuito montado, podendo ser de meia ponte (Figura 42), quando a corrente passa em
apenas meio enrolamento para o acionamento unipolar, ou de ponte completa (Figura 43), quando a
corrente passa por todo enrolamento para o acionamento bipolar. Os elementos A, B, C e D são
transistores que funcionam como chaves, sendo que quando recebem um sinal digital em nível
lógico alto, fecham o circuito permitindo a passagem de corrente e quando em nível lógico baixo,
abrem o circuito. Um enrolamento deve ser controlado por dois sinais digitais do controlador. Como
existe um par de enrolamentos, mais dois (quatro no total) sinais digitais são necessários para
controlar todo o motor de passo.
54
Figura 42. Circuito para o controle de motor de passo unipolar.
Fonte: Adaptado de Yedamale e Chattopadhyay (2002).
Figura 43. Circuito para o controle de motor de passo bipolar.
Fonte: Adaptado de Yedamale e Chattopadhyay (2002).
Ambos os circuitos podem controlar o sentido da rotação do motor de passo em horário ou
anti-horário. Para determinar o sentido de rotação dos passos do rotor, o controlador deve acionar as
bobinas em uma certa sequência. Primeiramente deve-se estabelecer o tipo de passo que será
realizado pelo rotor. Em geral, os passos podem ser realizados em passos completos ou em meio
passo. O passo completo ocorre quando os enrolamentos do estator são acionados um à um, ou seja,
apenas um enrolamento, ou meio no caso de ser unipolar, é acionado por vez. O meio passo ocorre
quando os enrolamentos do estator são acionados em sequências individuais seguidas de um par, ou
seja, são acionados um (ou meio) enrolamento, seguido de dois (ou dois meios) enrolamentos,
seguido de um (ou meio) enrolamento e assim por diante. O acionamento em passo completo é mais
rápido, enquanto que o meio passo é mais preciso (MESSIAS, 2006). Brites e Santos (2008, p. 12)
lembram que “Como todos os objetos que existem, o motor de passo também tem uma frequência
de ressonância. Caso as revoluções do mesmo se deêm nesta frequência, este pode começar a
oscilar, aquecer e perder passos”.
55
Na Tabela 5 é apresentada a sequência de acionamento do motor de passo unipolar para
passo completo e, na Tabela 6, a sequência para meio passo. É considerado, nas tabelas 5 e 6, o
sentido horário de rotação do rotor e o número de passos necessário para completar uma volta. O
valor “1” atribuído às bobinas representa o acionamento das bobinas do estator, enquanto que o
valor “0” representa o não acionamento. A ilustração apresentada na última coluna de ambas as
tabelas, demonstra a posição das bobinas no estator, enquanto que a seta central, representa a
atração de um dos pólos do rotor pelo campo magnético produzido no acionamento da bobina em
destaque.
Tabela 5. Sequência de acionamento do motor de passo unipolar para passo completo
Passo Bobina 1 Bobina 2 Bobina 3 Bobina 4 Ilustração da posição do rotor
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
Fonte: Adaptado de Messias (2006).
A sequência de passos do acionamento bipolar do motor de passo em passo completo é
semelhante à sequência do motor unipolar, porém é acionada também a bobina oposta ao indicado
pela seta do rotor contendo polaridade invertida. O passo completo do motor unipolar consome
menos energia, pois apenas uma bobina (meio enrolamento) é energizada de cada vez, enquanto que
no bipolar são energizadas duas bobinas (um enrolamento) para movimentar o rotor. Essa diferença
no consumo é compensada pelo torque que o bipolar aplica no rotor, sendo até 30% (trinta
porcento) maior que a do unipolar (BRAGA, 2010).
56
Tabela 6. Sequência de acionamento do motor de passo unipolar para meio passo
Passo Bobina 1 Bobina 2 Bobina 3 Bobina 4 Ilustração da posição do rotor
1 1 0 0 0
2 1 1 0 0
3 0 1 0 0
4 0 1 1 0
5 0 0 1 0
6 0 0 1 1
7 0 0 0 1
8 1 0 0 1
Fonte: Adaptado de Messias (2006).
O motor de passo ainda pode operar em micro-passo. Braga (2010, p. 1) ressalta que “Com a
técnica do micro-passo pode-se obter maior resolução e ao mesmo tempo aumentar a eficiência do
sistema, já que a corrente dos enrolamentos do motor é controlada de modo inteligente e não
simplesmente ligada e desligada”. Esse tipo de passo é baseado na modulação da largura de pulso
digital realizando a transferência gradual de corrente entre bobinas subsequentes (CONDIT, 2004).
Na Figura 44 é apresentado um exemplo de um sinal digital controlando a corrente aplicada em uma
bobina do motor de passo, sendo que ton representa o período em que o sinal está em nível lógico
alto, toff o período em nível lógico baixo e ton.mais toff o período completo.
57
Figura 44. Sinal digital controlando a corrente aplicada em uma bobina do motor de passo.
Fonte: Adaptado de Yedamale & Chattopadhyay (2002).
Desta forma é possível controlar o motor para trabalhar em 1/4, 1/8, 1/16 ou 1/32 de passo
completo, aumentando ainda mais a precisão do motor. Seu funcionamento é parecido com o meio
passo, porém procura-se obter uma transição de corrente que se aproxime da forma de onda
senoidal, tornando os passos do motor mais suaves. Essa forma de onda é obtida calculando a
magnitude da corrente aplicada nas bobinas (YEDAMALE & CHATTOPADHYAY, 2002). A
Equação 3 e a Equação 4 representam a magnitude da corrente aplicada nas bobinas 1 e 2, sendo IB1
para uma bobina 1 e IB2 para o bobina 2, em um determinado ângulo θ do passo completo. A soma
do quadrado das magnitudes das correntes das bobinas 1 e 2 corresponde ao quadrado da magnitude
da corrente resultante (IR), sendo a corrente resultante presentada na Equação 5.
퐼 = 퐼 ∗ cos휃 Equação 3
퐼 = 퐼 ∗ sen휃 Equação 4
퐼 = 퐼 + 퐼 = 퐼 ∗ (cos휃) + (sen 휃) Equação 5
Na prática, mantém-se energizada a bobina 1 enquanto são aplicados pulsos na bobina 2,
mantendo uma corrente correspondente ao ângulo do passo desejado (YEDAMALE &
CHATTOPADHYAY, 2002). Assim, considerando um passo completo, a corrente resultante
depende da variação de corrente de apenas uma bobina para cada meio passo do motor. A Equação
6 demonstra a relação citada.
58
퐼 = 퐼 ∗ 1 + (sen 휃) Equação 6
Usualmente utiliza-se uma tabela onde já estão calculados os ciclos ativos do sinal aplicado
nos enrolamentos, pois o tempo para calcular os senos e cossenos da corrente do enrolamento para
parar o rotor na posição fixa do micro-passo é impraticável. Assim, utiliza-se apenas uma tabela de
valores para ambos os enrolamentos, sendo preciso compensar 90º para os valores do cosseno
(CONDIT, 2004). Na Tabela 7 é apresentada uma relação da proporção de ocupação do ciclo ativo
em um sinal digital aplicado nas bobinas 1 e 2 para realização de até meio passo, sendo que o motor
de passo esteja trabalhando com 32 micro-passo por passo completo (16 por meio passo). Para
simplificar, é considerado o valor de 1A (um ampere) para a corrente de pico (IPico) nas bobinas.
Tabela 7. Proporção de ocupação do ciclo ativo de um sinal para 32 micro-passo por passo
Micro-passo Corrente na Bobina 1
Corrente na Bobina 2
Ciclo ativo do sinal digital na Bobina 1
Ciclo ativo do sinal digital na Bobina 2
1 1 sen휋
32 ∗ 1 100% 9.8%
2 1 sen휋
32 ∗ 2 100% 19.5%
3 1 sen휋
32 ∗ 3 100% 29.0%
4 1 sen휋
32 ∗ 4 100% 38.3%
5 1 sen휋
32 ∗ 5 100% 47.1%
6 1 sen휋
32 ∗ 6 100% 55.6%
7 1 sen휋
32 ∗ 7 100% 63.4%
8 1 sen휋
32 ∗ 8 100% 70.7%
9 1 sen휋
32 ∗ 9 100% 77.3%
10 1 sen휋
32 ∗ 10 100% 83.1%
11 1 sen휋
32 ∗ 11 100% 88.2%
12 1 sen휋
32 ∗ 12 100% 92.4%
Fonte: Adaptado de Yedamale e Chattopadhyay (2002).
59
Tabela 7. Proporção de ocupação do ciclo ativo de um sinal para 32 micro-passo por passo (continuação)
Micro-passo Corrente na Bobina 1
Corrente na Bobina 2
Ciclo ativo do sinal digital na Bobina 1
Ciclo ativo do sinal digital na Bobina 2
13 1 sen휋
32 ∗ 13 100% 95.7%
14 1 sen휋
32 ∗ 14 100% 98.1%
15 1 sen휋
32 ∗ 15 100% 99.5%
16 1 sen휋
32 ∗ 16 100% 100%
Fonte: Adaptado de Yedamale e Chattopadhyay (2002).
O PWM do módulo CCP, citado anteriormente na Subseção 2.3.3 contido no PIC
PIC18F4520, pode ser usado em aplicações de motores de passo devido sua capacidade de
modulação da largura de pulso. Este módulo é muito útil para controle de motores unipolares e
bipolares, operando em passo completo, meio passo e micro-passo.
2.5.2 Teclado matricial
Muitos equipamentos embarcados, tais como máquina de fax, copiadoras, impressoras,
máquinas industriais e etc. utilizam teclados como interface de entrada para os usuários. O teclado
pode ser usado tanto para entrada de dados numéricos, quanto para seleção de modo de operação
para controlar um determinado dispositivo. Os teclados são formados por componentes que
possibilitam selecionar o estado de um circuito entre aberto ou fechado, como, por exemplo, relés
ou teclas.
Na Figura 45, pode-se observar um circuito formado por uma chave de contato momentâneo
mantendo o circuito normalmente aberto, permanecendo em nível lógico “1” proveniente de um
resistor de pull-up. Quando e enquanto for aplicada uma ação sobre a chave, fechando o circuito, o
nível lógico é alterado para “0”. No momento da ação aplicada, nesse tipo de chave, é identificado
alguns “saltos” do contato, denominada bounce, onde o circuito oscila entre aberto e fechado por
um curto período de tempo, tipicamente entre 5 e 30 milissegundos (LABROSSE, 1999).
60
Figura 45. Chave de acionamento momentâneo com identificação do bounce.
Fonte: Adaptado de Labrosse (1999).
Alguns teclados podem apresentar um conjunto de chaves organizadas em uma matriz m x n
de interconexões. Esses teclados são chamados de teclados matriciais, normalmente usados em
aparelhos telefônicos. Esse tipo de organização das chaves economiza o número de pinos do
microcontrolador dedicados ao teclado, quando são necessárias mais de cinco chaves para entrada
de dados no sistema.
Na Figura 46 é apresentada uma matriz m x n de interconexão de chaves, onde as linhas são
controladas por pinos de saída da porta do microcontrolador, enquanto que as colunas são
controladas por pinos de entrada, sendo aplicado um resistor de pull-up para cada coluna da matriz.
61
Figura 46. Matriz m x n de interconexão de chaves momentâneas.
Fonte: Adaptado de Labrosse (1999).
A chave pressionada é identificada aplicando nível lógico “0” em todas as m linhas da
matriz para cada uma das colunas. Se nenhuma chave for pressionada, identificado nível lógico “1”
para todas as linhas de todas as colunas. No caso de uma chave cij for pressionada, ela será
identificada pela leitura em nível lógico “0”, quando for realizada a varredura na linha i da coluna j
da matriz. Na Tabela 8 é apresentada uma varredura de uma matriz de ordem quatro, sendo que a
chave c23 foi pressionada. Na primeira coluna, é identificada a iteração do processo de varredura, na
segunda coluna, é apresentado o nível lógico dos pinos aplicado na linha (da linha 0 até a linha 3),
na terceira coluna é apresentado o nível lógico dos pinos de leitura da coluna (da coluna 0 até a
coluna 3), e na última coluna, é apresentada uma descrição em relação a varredura realizada.
62
Tabela 8. Exemplo de varredura em uma matriz de ordem quatro, onde c23 foi pressionado.
Varredura Escrita nas Linhas Leitura das Colunas
Descrição 0 1 2 3 0 1 2 3
1 0 1 1 1 1 1 1 1 Chave c00 não pressionada 2 1 0 1 1 1 1 1 1 Chave c10 não pressionada 3 1 1 0 1 1 1 1 1 Chave c20 não pressionada 4 1 1 1 0 1 1 1 1 Chave c30 não pressionada 5 0 1 1 1 1 1 1 1 Chave c01 não pressionada 6 1 0 1 1 1 1 1 1 Chave c11 não pressionada 7 1 1 0 1 1 1 1 1 Chave c21 não pressionada 8 1 1 1 0 1 1 1 1 Chave c31 não pressionada 9 0 1 1 1 1 1 1 1 Chave c02 não pressionada 10 1 0 1 1 1 1 1 1 Chave c12 não pressionada 11 1 1 0 1 1 1 1 1 Chave c22 não pressionada 12 1 1 1 0 1 1 1 1 Chave c32 não pressionada 13 0 1 1 1 1 1 1 1 Chave c03 não pressionada 14 1 0 1 1 1 1 1 1 Chave c13 não pressionada 15 1 1 0 1 1 1 1 0 Chave c23 pressionada e identificada 16 1 1 1 0 1 1 1 1 Chave c33 não pressionada
.
Para filtrar o problema do bounce das chaves, podem-se realizar amostras do teclado em
intervalos tipicamente entre 20 e 100 milissegundos. Ainda pode-se utilizar um buffer, trabalhando
como uma fila, para armazenar temporariamente a identificação das teclas pressionadas, enquanto
que a aplicação não puder tratá-las. Além disso, pode-se atribuir funcionalidade de incremento ou
decremento automático em relação ao tempo em que a chave é pressionada (LABROSSE, 1999).
Além de possuir uma ampla quantidade de pinos para trabalharem como linhas e colunas de
um teclado matricial, alguns pinos do PIC18F4520 com funções de interrupção externa podem ser
ligados a chaves, gerando interrupção quando a chave for pressionada.
2.5.3 Módulo LCD
Os LCDs são tecnologias de display passivas, ou seja, eles não emitem luz própria, mas
refletem parte da luz manipulando-a para apresentar imagens ou símbolos. Desta forma, eles gastam
pouca energia. Eles são normalmente disponibilizados em módulos, nos quais estão presentes o
LCD, podendo ser gráfico ou alfanumérico, juntamente com o driver controlador, que faz a
interface do LCD com outros dispositivos eletrônicos (LABROSSE, 1999). Na Figura 47, estão
representados os módulos LCD gráfico e alfanumérico, onde a aplicação do usuário faz uso de um
63
software driver de LCD que se comunica com driver do módulo. Para as situações onde a presença
da luz ambiente é escassa ou inexistente, Barbacena e Fleury (1996, p. 1) informam que “Os
módulos podem ser encontrados com LED backlight (com uma iluminação de fundo) para facilitar
as leituras durante a noite”.
(a)
(b)
Figura 47. Representação dos módulos LCD (a) gráficos e (b) alfanuméricos.
Fonte: Adaptado de Labrosse (1999).
No caso dos displays gráficos, todos são disponíveis com o driver controlador em módulos,
sendo eles extremamente flexíveis para as aplicações, podendo representar imagens e textos em
qualquer idioma ou formatação de fonte de letra. São organizados em colunas e linhas de pixels,
onde cada um é endereçado individualmente podendo ser ligado ou desligado. Seu tamanho é bem
variado, podendo ser encontrado em resoluções de 64x32 até 640x480 pixels (coluna x linha).
Normalmente, os displays alfanuméricos, ou orientado a caracteres, são também
disponibilizados com o driver controlador em módulos, sendo eles compostos por uma matriz de
blocos de 16 até 40 colunas e 1 até 4 linhas, com cada bloco da matriz formado por uma matriz de
pontos com 5 colunas e 8 até 11 linhas, onde são representados os caracteres ASCII (American
Standard Code for Information Interchange) além de um número limitado de outros símbolos.
64
Para o estudo será considerado o módulo LCD representado na Figura 48, sendo do tipo
alfanumérico de 16 colunas e 2 linhas de bloco, com matriz de pontos de 5 colunas e 8 linhas, no
qual utiliza o padrão Hitachi equipado com o drive HD44780.
Figura 48. LCD Hitachi com drive HD44780.
Fonte: Verle (2008).
Na Figura 49, pode-se observar a comunicação do microcontrolador com o LCD, realizada
através dos pinos do driver. Esses pinos são utilizados para envio de instruções de controle e 8 (ou
4) bits para envio de dados pelo usuário, mediante um protocolo de comunicação (BARBACENA e
FLEURY, 1996).
Figura 49. Conexões dos pinos do driver do LCD com um microcontrolador. Fonte: Verle (2008).
65
Na Tabela 9 é apresentada a identificação do pino (primeira coluna), o nome do pino
relacionado com a Figura 49 (segunda coluna) e a sua descrição (terceira coluna) de acordo com o
nível lógico aplicado (quando necessário). Na Figura 49, os pinos de nome A e K não recebem
numeração, porém na Tabela 9 eles são identificados pelos números 15 e 16, respectivamente. Isso
ocorre porque nem todos os LCDs possuem a função backlight. Em alguns casos, o nome do pino
pode ser diferente, porém sua função não é alterada.
Tabela 9. Descrição das funções dos pinos do LCD
Pino Nome Função 1 GND Aterramento do módulo 2 VCC Alimentação do módulo 3 VEE Tensão para ajuste de contraste (pode ser variado)
4 RS 0 = bits de dados são interpretados como comando de instrução 1 = bits de dados são interpretados como caracteres
5 R/W 0 = escreve dado (do controlador para o LCD) 1 = lê dado (do LCD para o controlador)
6 E 0 = acesso ao LCD desabilitado 1 = operação normal De 1 para 0 = bits de dados são transferidos para o LCD
7 D0 Bit de dado 0 (menos significativo) 8 D1 Bit de dado 1 9 D2 Bit de dado 2 10 D3 Bit de dado 3 11 D4 Bit de dado 4 12 D5 Bit de dado 5 13 D6 Bit de dado 6 14 D7 Bit de dado 7 (mais significativo) 15 A Anodo para o backlight 16 K Catodo para o backlight
Fonte: Adaptado de Barbacena e Fleury (1996).
Como apresentado na Tabela 9, o dado enviado ao LCD pode ser interpretado, dependendo
do nível lógico do pino RS, tanto como um caractere, quanto como um comando. Quando o LCD
utiliza 4 pinos para envio de dados, são considerados os pinos dos 4 bits mais significativos (D4 até
D7), como visto na Figura 49.
Matic (2003) informa que as operações de leitura e escrita do LCD são realizadas seguindo o
procedimento:
1. Pino R/W recebe nível lógico “0”;
66
2. Pino RS recebe nível lógico “0”, para instrução, ou “1”, para caractere;
3. Escrever o código nos pinos de dado (para operação de escrita);
4. Pino E recebe nível lógico “1”;
5. Pino E recebe nível lógico “0”; e
6. Ler o dado dos pinos de dados (para operação de leitura).
Antes de enviar os dados para o LCD, o mesmo deve ser inicializado. A inicialização é dada
por escrever uma sequência de códigos no LCD, sempre que ele for alimentado. As instruções de
comando mais comuns são apresentada na Tabela 10. Operando em apenas 4 bits, os comandos
devem ser escrito primeiramente o nibble1 mais significativo e, em seguida, o menos significativo
referente ao código hexadecimal do comando.
Tabela 10. Instruções de comando mais comuns do LCD 2x16
Descrição Modo de operação Código Hexadecimal
Display Liga (sem cursor) 0C Desliga 0A / 08
Limpa display com cursor home 01
Controle do cursor
Liga 0E Desliga 0C Desloca para esquerda 10 Desloca para direita 14 Cursor home 02 Cursor piscante 0D Cursor com alternância 0F
Sentido de deslocamento do cursor ao entrar com caractere
Para esquerda 04 Para direita 06
Deslocamento da mensagem ao entrar com caractere
Para esquerda 07 Para direita 05
Deslocamento da mensagem Para esquerda 18 Sem entrada de caractere Para direita 1C
Endereço da primeira posição Primeira linha 80 Segunda linha C0
Fonte: Barbacena e Fleury (1996).
Ao ser energizado, deve-se esperar um período de 15 milissegundos para escrever os
comandos de inicialização do LCD. A sequência é iniciada pelo código identificador do tipo de 1 Conjunto de 4 bits.
67
operação do LCD, seguido do código de limpar o display, seguido do código de sentido de
deslocamento do cursor ao entrar com caractere e finalizando com o código de ligar o display. O
código que identifica do LCD varia com o número de bits de dados, linhas de caracteres do display
e a matriz de pontos que forma o caractere. A Tabela 11 apresenta o código de identificação do
LCD de acordo com as variações citadas. A variação observada nos códigos hexadecimais é
decorrida da desconsideração dos dois bits menos significativos no dado.
Tabela 11. Código de identificação do tipo de operação do LCD para inicialização
Nº de bits de dados Linhas do display Matriz de caracteres (Coluna x linha) Código Hexadecimal
4 1 5x8 20-23
5x11 24-27
2 5x8 28-2B 5x11 2C-2F
8 1 5x8 30-33
5x11 34-37
2 5x8 38-3B 5x11 3C-3F
Fonte: Adaptado de Sica (2010).
Depois de inicializado, o LCD pode receber os dados (comandos e caracteres). A medida
que os caracteres são escritos, eles são armazenados na memória RAM. Ela pode armazenar até 80
bytes de caracteres. Além dessa, existe ainda outra memória RAM geradora de caracteres, onde
podem ser criados caracteres especiais para a aplicação do usuário. Contudo, o LCD contém os
caracteres da tabela ASCII em uma memória ROM, no qual é consultada para apresentar o caractere
no bloco do display.
Com as características apresentadas, o PIC18F4520 pode ser utilizado como o
microcontrolador, representado na Figura 49, para realizar a comunicação com o LCD configurando
seus pinos para tal. Seriam utilizados até 11 pinos de E/S digital para serem ligados aos pinos de
controle e de dados do LCD. Os pinos do backlight (quando presente), do controle de contraste e de
alimentação e aterramento do LCD não ficariam a cargo do microcontrolador, e sim, de um circuito
externo.
68
2.6 CONSIDERAÇÕES
Neste capítulo foram apresentados conceitos fundamentais para a execução deste Trabalho
de Conclusão de Curso. Dentre eles, foram abordados as características gerais dos
Microcontroladores, os microcontroladores fabricados pela Microchip Technology e suas
classificações, alguns recursos do Microcontrolador PIC18F4520, o Barramento I2C para
comunicação serial síncrona entre dispositivos, além de alguns Componentes periféricos de entrada
e saída.
Para maiores informações e detalhes dos assuntos abordados, podem ser consultadas as
referências citadas no trabalho.
3 DESENVOLVIMENTO
Esse capítulo apresenta a metodologia utilizada para o projeto e execução do kit de
desenvolvimento proposto pelo TCC. Em seguida, é apresentada a visão geral do kit modular de
desenvolvimento construído, os requisitos e definições dos módulos e a arquitetura de hardware
especificada para o kit. Após é apresentada a documentação das implementações e validações
virtuais e físicas dos módulos. Ao final é apresentado os custos envolvidos no desenvolvimento
deste trabalho.
3.1 METODOLOGIA PARA DEFINIÇÃO DO MODELO
Inicialmente, foi realizada uma pesquisa para obtenção de informações a respeito de kits
didáticos de desenvolvimento disponíveis no mercado, baseados em microcontroladores PIC de 8
bits, a fim de identificar os recursos de utilização do MCU presente nos mesmos. Foram
selecionados kits similares para a comparação, tendo como critério de similaridade o
microcontrolador abordado. Na Tabela 1, contida na Seção 1.1, é apresentado um quadro
comparativo de preços entre quatro kits selecionados de fabricantes diferentes, podendo ser
visualizado uma ilustração de cada um deles. Observou-se, em todos os kits pesquisados, a presença
de componentes eletrônicos capazes de realizar atividades práticas visando à utilização dos módulos
de hardware MSSP (especialmente o barramento I2C) e PWM presentes no microcontrolador
(PIC16F877A em todos os kits). Além disso, também estão disponíveis nos kits dispositivos de
interação com o usuário, como LCD, teclas e teclado (na maioria em formato de uma matriz).
Em seguida, os kits de desenvolvimento comerciais foram confrontados com os conteúdos
programáticos de duas disciplinas: Microprocessadores e Projetos Lógicos e Integração Software-
Hardware do curso de Engenharia de Computação da UNIVALI, onde visam à realização de uma
atividade final dos alunos, baseando-se em um projeto de implementação de sistemas digitais (o
conteúdo programático é obtido pelo estudante através da intranet pelo site da instituição).
Como resultado dessa análise, percebe-se que ambas as disciplinas têm o objetivo de
apresentar os recursos de hardware presentes em microcontroladores, onde o foco principal da
primeira disciplina está nos recursos básicos e da segunda nos recursos avançados.
Assuntos relacionados aos recursos de microcontroladores foram observados em ementas,
disponíveis na internet, semelhantes às das disciplinas citadas, de cursos de outras instituições de
70
ensino, como por exemplo: Microprocessadores II do curso de Engenharia Elétrica da Universidade
Presbiteriana Mackenzie – SP – (UNIVERSIDADE PRESBITERIANA MACKENZIE, 2010),
Introdução aos Sistemas Embarcados e Microcontroladores do curso de pós-graduação em
Engenharia de Sistemas da UFLA – MG – (UNIVERSIDADE FEDERAL DE LAVRAS, 2010) e
Sistemas Microprocessados do curso Tecnologia em Automação Industrial da UTFPR – PR –
(UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ, 2010). Essas disciplinas, por sua
vez, também requerem o desenvolvimento de um projeto final pelos alunos como forma de
avaliação.
A análise realizada entre kits e disciplinas mostrou que embora algumas delas não
abordassem o mesmo microcontrolador dos kits (o PIC), a utilização dos principais recursos
encontrados nos kits está presente em suas ementas. Em alguns casos, quando o conteúdo
programático esteve disponível, observou-se a aplicação de componentes periféricos específicos,
como: memórias externas, motor de passo, display LCD e teclado matricial.
Para identificar os critérios para construção dos módulos, foi realizado um brainstorm
(técnica difundida entre os profissionais de tecnologia da informação para obtenção de requisitos de
um sistema) entre o autor e o professor da disciplina de Integração Software-Hardware do curso de
Engenharia de Computação da UNIVALI. Dentre os critérios identificados, os mais relevantes
foram:
1. Modularidade: os módulos devem proporcionar uma interface de comunicação bem
definida, possibilitando que sejam combinados pelo usuário da maneira que lhe for mais
conveniente para um determinado sistema;
2. Usabilidade: os módulos devem possibilitar que sejam combinados pelo usuário de
forma simples, sem necessidade de muitas configurações para realização de uma
determinada atividade; e
3. Reusabilidade: os módulos periféricos não devem estar restritos a utilização um
determinado microcontrolador contido em um módulo principal, possibilitando que
sejam controlados por outros módulos principais contendo microcontroladores e/ou
microprocessadores de diferentes fabricantes.
A partir destes critérios foi elaborada a visão geral do projeto, apresentado a seguir.
71
3.2 VISÃO GERAL
O projeto segue o modelo ilustrado na Figura 50, sendo que os seus recursos estarão
presentes em módulos separados fisicamente. O kit é constituído de um módulo principal e módulos
periféricos. Neste trabalho são considerados quatro módulos periféricos identificados por Módulo
I2C, Módulo Motor de Passo, Módulo Display LCD e Módulo Teclado Matricial. O módulo
principal é identificado por Módulo Controlador, o qual conta com um microcontrolador
PIC18F4520, sendo responsável por controlar os componentes periféricos, contidos em seus
respectivos módulos, conectados ao mesmo.
Figura 50. Visão geral do projeto.
O Módulo I2C consiste em uma interface de comunicação via barramento I2C com outros
dispositivos compatíveis com o mesmo, como um RTC ou uma memória EEPROM externa, por
exemplo. O Módulo Motor de Passo consiste em uma interface de hardware capaz de realizar o
acionamento do motor de passo através de um controle digital. O Módulo Display LCD é
responsável por realizar a comunicação do LCD com o Módulo Controlador. O Módulo Teclado
Matricial é responsável por realizar a interface do usuário com os outros módulos do kit.
Foram levantados os requisitos funcionais (REF), ações e comportamento que agregam
valor ao sistema, e não funcionais (RNF), especificações e restrições impostas ao sistema, dos
módulos do kit. Eles são apresentados na seção seguinte.
Módulo Controlador
Módulo Teclado Matricial
Módulo Motor de Passo
Módulo Display LCD
Módulo I2C
72
3.3 REQUISITOS
Nesta seção, inicialmente, são apresentados os requisitos funcionais e não funcionais do Kit
Modular de Desenvolvimento e, em seguida, dos módulos que compõem o kit. Eles estão
identificados e descritos nas subseções seguintes, sendo que eles descrevem a arquitetura de
hardware do kit como um todo e de cada um dos módulos.
3.3.1 Requisitos Gerais do Kit Modular de Desenvolvimento
Requisitos funcionais do Kit Modular de Desenvolvimento (REF.KMD):
REF.KMD1: Os módulos do kit devem apresentar uma interface de conexão
padronizada entre o módulo principal e os módulos periféricos;
REF. KMD2: O kit deve possibilitar que o usuário conecte de zero até quatro módulos
periféricos ao módulo principal; e
REF.KMD3: O kit deve permitir que o usuário conecte os módulos periféricos sem a
necessidade de configuração de hardware nem ordem de conexão.
Requisitos não funcionais do Kit Modular de Desenvolvimento (RNF.KMD):
RNF.KMD1: A identificação dos módulos do kit para o usuário deve ser realizada pelo
nome do módulo;
RNF.KMD2: Os pinos de conexão dos módulos do kit devem ser identificados para o
usuário; e
RNF.KMD3: Os módulos periféricos do kit não necessitam apresentar características hot
swapping, onde a combinação dos módulos deve ser realizada antes do kit ser
energizado.
3.3.2 Requisitos do Módulo Controlador
Requisitos funcionais do Módulo Controlador (REF.MCT):
REF.MCT1: O Módulo Controlador deve fornecer uma fonte de tensão regulada em 5
volts e repassar a tensão 12 volts da fonte externa para alimentação tanto dos
componentes contidos no mesmo quanto nos módulos periféricos.
73
REF.MCT2: O Módulo Controlador deve conter o microcontrolador e permitir que o
mesmo seja alterado pelo usuário por um outro compatível com o mesmo;
REF.MCT3: O Módulo Controlador deve possuir um oscilador externo ligado
adequadamente ao microcontrolador;
REF.MCT4: O Módulo Controlador deve permitir que o microcontrolador seja
reiniciado pelo usuário através de uma chave (reset);
REF.MCT5: O Módulo Controlador deve permitir que o usuário gere interrupções
externas do microcontrolador com a ação de uma chave;
REF.MCT6: O Módulo Controlador deve apresentar um canal de comunicação serial
RS-232 ligado adequadamente ao microcontrolador; e
REF.MCT7: O Módulo Controlador deve permitir que o microcontrolador seja gravado
sem a necessidade de retira-lo do módulo.
Requisitos não funcionais do Módulo Controlador (RNF.MCT):
RNF.MCT1: O Módulo Controlador deve sinalizar a energização das linhas de
alimentação;
RNF.MCT2: O microcontrolador utilizado no Módulo Controlador deve ser um PIC em
encapsulamento PDIP de 40 pinos; e
RNF.MCT3: O Módulo Controlador deve identificar ao usuário as chaves contidas no
mesmo.
3.3.3 Requisitos do Módulo I2C
Requisitos funcionais do Módulo I2C (REF.MIC):
REF.MIC1: O Módulo I2C deve apresentar o barramento I2C com dispositivos
compatíveis ligados ao mesmo adequadamente;
REF.MIC2: O Módulo I2C deve apresentar, no mínimo, dois dispositivos escravos
compatíveis com o barramento I2C de diferentes funcionalidades;
74
REF.MIC3: Os dispositivos escravos serão energizados através do Módulo Controlador,
portanto esses módulos não possuirão fontes próprias, ou qualquer outra forma de
energização independente do Módulo Controlador;
REF.MIC4: O Módulo I2C deve permitir que os dispositivos escravos sejam
substituídos, por outros iguais, pelo usuário; e
REF.MIC5: no caso dos dispositivos escravos necessitarem de recursos não fornecidos
pelo Módulo Controlador, eles devem estar presentes no próprio Módulo I2C.
Requisitos não funcionais do Módulo I2C (RNF.MIC) são listados a seguir:
RNF.MIC1: Os dispositivos escravos devem ser conectados ao Módulo I2C por um
soquete adequado ao seu encapsulamento;
RNF.MIC2: As linhas de relógio e de dados do barramento I²C devem corresponder aos
pinos de comunicação I²C do microcontrolador, provenientes da conexão com o Módulo
Controlador; e
RNF.MIC3: O Módulo I²C deve identificar ao usuário as linhas do barramento I²C
relacionando-as com a conexão do o Módulo Controlador.
3.3.4 Requisitos do Módulo Motor de Passo
Requisitos funcionais do Módulo Motor de Passo (REF.MMP):
REF.MMP1: O Módulo Motor de Passo deve permitir o controle do acionamento de
dois motores de passo unipolares;
REF.MMP2: O Módulo Motor de Passo deve permitir que a alimentação dos motores de
passo seja realizada pelas linhas de alimentação provenientes da conexão com o Módulo
Controlador;
REF.MMP3: O Módulo Motor de Passo deve permitir a regulagem de tensão adequada
para cada motor de forma independente;
REF.MMP4: O Módulo Motor de Passo deve apresentar um conector para cada motor
motores de passo, possibilitando que sejam inseridos e/ou substituídos pelo usuário;
75
REF.MMP5: O Módulo Motor de Passo deve permitir que um dos motores seja
acionado por dois sinais PWM e o outro por sinais lógicos constantes;
REF.MMP6: O motor de passo acionado por sinais lógicos constantes deve ser
controlado por quatro pinos de E/S do microcontrolador provenientes da conexão com o
Módulo Controlador; e
REF.MMP7: O motor de passo do acionado por dois sinais PWM deve ser controlado
por dois pinos de E/S, além dos pinos de sinal PWM, do microcontrolador provenientes
da conexão com o Módulo Controlador.
Requisitos não funcionais do Módulo Motor de Passo (RNF.MMP):
RNF.MMP1: Os conectores de motor de passo devem conter, no mínimo, cinco
terminais para ligação dos center-tapes e das quatro bobinas dos dois enrolamentos;
RNF.MMP2: O Módulo Motor de Passo deve permitir que os circuitos integrados
utilizados para o controle de acionamento dos motores de passo possam ser substituídos,
por outros iguais, pelo usuário; e
RNF.MMP3: O Módulo Motor de Passo deve identificar ao usuário as conexões do
motor de passo com os pinos de conexão e o conector do Módulo Controlador que
controlam cada um dos motores.
3.3.5 Requisitos do Módulo Display LCD
Requisitos funcionais do Módulo Display LCD (REF.MDL):
REF.MDL1: O Módulo Display LCD deve permitir o controle do display LCD por um
barramento contendo quatro linhas de dados e três linhas de controle;
REF.MDL2: As quatro linhas de dados e três linhas de controle devem ser associadas a
seis pinos de E/S do microcontrolador proveniente da conexão com o Módulo
Controlador;
REF.MDL3: O Módulo Display LCD deve permitir que o usuário substitua o display
LCD por outro, de pinagem idêntica;
REF.MDL4: O Módulo Display LCD deve permitir a regulagem tanto do contraste
quanto do LED backlight do display LCD pelo usuário; e
76
REF.MDL5: A alimentação do display LCD deve ser proveniente das linhas de
alimentação da conexão com o Módulo Controlador.
Requisitos não funcionais do Módulo Display LCD (RNF.MDL):
RNF.MDL1: O Módulo Display LCD deve identificar ao usuário quais os pinos de
conexão do Módulo Controlador correspondentes as linhas de controle e dados do
display LCD.
3.3.6 Requisitos do Módulo Teclado Matricial
Requisitos funcionais do Módulo Teclado Matricial (REF.MTM):
REF.MTM1: O Módulo Teclado Matricial deve apresentar uma matriz de interconexões
de chaves; e
REF.MTM2: As linhas e colunas da matriz devem ser associadas aos pinos de E/S do
microcontrolador do Módulo Controlador.
Requisitos não funcionais do Módulo Teclado Matricial (RNF.MTM):
RNF.MTM1: A matriz de interconexões de chaves do Módulo Teclado Matricial deve
ser de ordem 4, no máximo;
RNF.MTM2: Os resistores de pull-up das colunas da matriz devem ser ligados ao pinos
de alimentação proveniente do Módulo Controlador; e
RNF.MTM3: O Módulo Teclado Matricial deve identificar ao usuário quais os pinos de
conexão do Módulo Controlador correspondentes as linhas e colunas da matriz.
Na próxima seção, são apresentadas as definições da arquitetura de hardware elaboradas a
partir dos requisitos levantados para o desenvolvimento do projeto.
3.4 ARQUITETURA DE HARDWARE
A arquitetura de hardware é utilizada como base para o desenvolvimento dos módulos do
kit. Sua principal função é demonstrar as conexões dos módulos periféricos com o módulo
principal. A Figura 51 representa a arquitetura desenvolvida para atender aos requisitos levantados,
onde os módulos estão conectados através do Barramento KMD. Este barramento é uma extensão
77
dos pinos do microcontrolador e da fonte de alimentação (12 volts, 5 volts e terra) contidos no
Módulo Controlador.
Figura 51. Arquitetura do Kit Modular de Desenvolvimento.
Devido a grande variedade de pinos do microcontrolador e a necessidade de eliminar as
configurações de hardware pelo usuário, optou-se por não utilizar o mesmo pino do MCU para mais
de uma função. Exceto 3 pinos, os demais não são utilizados por mais de um módulo no kit
projetado, minimizando problemas de mau funcionamento dos componentes periféricos. A Tabela
12 apresenta a relação dos pinos do PIC18F4520 com a sua função associada em cada módulo do
kit.
Tabela 12. Relação dos pinos do PIC18F4520 com os módulos do kit
PIC18F4520 Módulo Controlador
Módulo I²C
Módulo Motor de Passo
Módulo Display LCD
Módulo Teclado Matricial Pino Nome
1 RE3 Reset 2 RA0 Sinal digital 1 3 RA1 Sinal digital 2 4 RA2 Sinal digital 3 5 RA3 Sinal digital 4 6 RA4 Chave do PWM 1 7 RA5 Chave do PWM 2 8 RE0 Controle RW 9 RE1 Controle E
10 RE2 Controle RS 13 RA7 Osc. Ext. 14 RA6 Osc. Ext. 15 RC0 16 RC1 Sinal PWM 2 17 RC2 Sinal PWM 1 18 RC3 SCL
* A função ICSP corresponde à gravação In-Circuit do microcontrolador PIC
Barramento KMD
Módulo Controlador
Módulo Teclado Matricial
Módulo Motor de
Passo
Módulo Display LCD
Módulo I2C
78
Tabela 12. Relação dos pinos do PIC18F4520 com os módulos do kit (continuação)
PIC18F4520 Módulo Controlador
Módulo I²C
Módulo Motor de Passo
Módulo Display LCD
Módulo Teclado Matricial Pino Nome
19 RD0 Coluna 1 20 RD1 Coluna 2 21 RD2 Coluna 3 22 RD3 Coluna 4 23 RC4 SDA 24 RC5 25 RC6 TX 26 RC7 RX 27 RD4 Linha 1 28 RD5 Linha 2 29 RD6 Linha 3 30 RD7 Linha 4 33 RB0 INT 0 34 RB1 INT 1 35 RB2 INT 2 36 RB3 Led I/O 37 RB4 D4 38 RB5 ICSP* D5 39 RB6 ICSP* D6 40 RB7 ICSP* D7
* A função ICSP corresponde à gravação In-Circuit do microcontrolador PIC
Como pode-se observar na Tabela 12, os únicos pinos que apresentam mais de uma função
no kit são os RB5, RB6 e RB7. Esses pinos correspondem à função de gravação In-Ciruit do
microcontrolador, possibilitando gravar o software no PIC sem a necessidade de retirá-lo do
circuito. Alguns pinos do microcontrolador não foram utilizados em nenhum dos módulos devido à
preferência em agrupar a funcionalidade em um conjunto de pinos pertencentes a uma mesma porta
de E/S do microcontrolador, facilitando a manipulação dos bits pelo programador.
É importante destacar que embora alguns pinos não tenham utilidade no kit proposto neste
trabalho, eles também pertencem ao Barramento KMD, totalizando 39 linhas no barramento.
As definições de hardware permitiram que os módulos pudessem ser construídos
virtualmente com um software de simulação, onde são apresentados a seguir.
79
3.5 IMPLEMENTAÇÃO VIRTUAL
A implementação virtual consiste em selecionar os principais componentes dos módulos e
simular a comunicação do microcontrolador, contido no módulo principal, com os componentes
periféricos, contidos nos módulos periféricos. Seu principal objetivo é validar o funcionamento dos
componentes de acordo com os requisitos levantados e a arquitetura de hardware projetada.
3.5.1 Seleção dos componentes virtuais
A virtualização foi iniciada com a seleção dos componentes virtuais no software Proteus.
Este software foi escolhido devido à possibilidade de simular aplicações de microcontroladores com
uma fidelidade satisfatória aos componentes reais em relação ao projeto. Desta forma, não se
pretende determinar o circuito real dos módulos, mas sim, determinar os componentes básicos do
sistema para validação dos módulos quanto a sua funcionalidade.
Os componentes selecionados para os módulos são apresentados a seguir. Para que seja
realizada a simulação dos módulos periféricos, o microcontrolador e o reset, identificados na Figura
52, necessitam estar presentes. Isso não implica em um MCU e um reset em cada módulo
fisicamente, mas apenas para simulação dos módulos. Assim, mesmo que sejam necessários para a
simulação, não serão apresentados como componentes dos módulos periféricos.
Para o Módulo Controlador, na Figura 52, além do microcontrolador PIC18F4520
denominado de PIC, foram selecionados os seguintes componentes:
RESET: chave tipo botão, ligada ao pino RE3, para reiniciar o microcontrolador;
INT. EXT. 0, INT. EXT. 1 e INT. EXT. 2: chaves tipo botão, ligadas ao pino RB0, RB1
e RB2, respectivamente, para gerar interrupção externa;
LED I/O: led ligado ao pino RB3, para iterações com o usuário; e
RS-232: componente COMPIM com a interface do conector DB9, com os pinos RXD e
TXD ligado aos pinos RC7 e RC6 do PIC, respectivamente, para comunicação RS-232.
80
Figura 52. Circuito de simulação do Módulo Controlador.
O componente COMPIM corresponde a um componente virtual o qual pode ser configurado
para simular uma conexão com uma porta serial (COM) de um computador. Desta forma, pode-se
abrir uma conexão UART via Hyper Terminal2 com as mesmas configurações do COMPIM,
fazendo com que o teclado do computador se comunique com o Proteus. Esse componente
apresenta uma ilustração do conector DB9, normalmente utilizado para comunicação RS-232, com
o pino de aterramento (pino 5 do DB9) já implementado internamente.
Para o Módulo I²C, na Figura 53, foram selecionados os seguintes componentes:
RTC: circuito integrado correspondente a um relógio de tempo real como um dispositivo
escravo I²C, com os seus pinos SCL e SDA ligados aos pinos RC3 e RC4 do PIC,
respectivamente;
2 Software que acompanha o sistema operacional Windows XP
81
EEPROM: circuito integrado correspondente a uma memória EEPROM de 4 kbytes
como outro dispositivo escravo I²C, com os seus pinos SCL e SDA ligados aos pinos
RC3 e RC4 do PIC, respectivamente; e
ANALISADOR I2C: componente I2C DEBUGGER, com os pinos SCL e SDA ligados
aos pinos RC3 e RC4 do PIC, respectivamente.
Figura 53. Circuito de simulação do Módulo I²C.
O componente I2C DEBUGGER corresponde a um instrumento de depuração virtual para
comunicação I²C. Ele funciona como um sniffer3 que captura os bits transmitidos no barramento
I²C, formado pelas linhas dos pinos RC3 e RC4 do microcontrolador, para que sejam analisados.
Com ele é possível identificar quais os dados que estão sendo transmitidos e possíveis problemas na
comunicação do protocolo I²C entre os dispositivos envolvidos.
Para o Módulo Motor de Passo, na Figura 54, foram selecionados os seguintes componentes:
CI_NOT: circuito integrado de portas lógicas digitais tipo “not”, com os pinos:
o 1 de entrada da porta A ligado ao pino RA4 do PIC e o 2 de saída é ligado à uma das
entradas da porta B do CI_AND;
3 Ferramenta ou componente que captura os bits ou pacotes transmitidos em um determinado barramento de comunicação.
82
o 3 de entrada da porta B ligado ao pino RA5 do PIC e o 4 de saída é ligado à uma das
entradas da porta D do CI_AND;
CI_AND: circuito integrado de portas lógicas digitais tipo “and”, com os pinos:
o 1 e 2 de entrada da porta A ligados aos pinos RC2 e RA4 do PIC e o 3 de saída é
ligado à linha PWM1_B3;
o 4 de entrada da porta B ligado ao pino RC2 do PIC, o 5 de entrada da porta B ligado
ao pino 2 de saída da porta A do CI_NOT e o 6 de saída é ligado à linha PWM1_B1;
o 9 de entrada da porta C ligados ao pino RC1 do PIC, o 10 de entrada da porta C
ligado ao RA5 do PIC e o 8 de saída é ligado à linha PWM2_B4; e
o 12 de entrada da porta D ligado ao pino RC1 do PIC, o 13 de entrada da porta D
ligado ao pino 4 de saída da porta B do CI_NOT e o 11 de saída é ligado à linha
PWM2_B2;
MOTOR 1 e MOTOR 2: motor de passo unipolar virtual com 6 linhas (2 center-tape e 4
bobinas) com as linhas de center-tape ligadas a fonte de 12 volts;
DRIVER: circuito integrado correspondente a uma driver de controle de periféricos, com
os pinos:
o 1B, 2B, 3B e 4B ligados aos pinos RA0, RA1, RA2 e RA3 do PIC, respectivamente;
o 5B ligado a linha PWM1_B1, correspondente a saída do CI_AND:B;
o 6B ligado a linha PWM2_B2, correspondente a saída do CI_AND:D;
o 7B ligado a linha PWM1_B3, correspondente a saída do CI_AND:A;
o 8B ligado a linha PWM2_B4, correspondente a saída do CI_AND:C;
o 1C, 2C, 3C e 4C ligados as linhas M1_B1, M1_B2, M1_B3 e M1_B4 do MOTOR 1,
respectivamente; e
o 5C, 6C, 7C e 8C ligados as linhas M2_B1, M2_B2, M2_B3 e M2_B4 do MOTOR 2,
respectivamente.
83
Figura 54. Circuito de simulação do Módulo Motor de Passo.
As linhas M1_B1, M1_B2, M1_B3 e M1_B4 correspondem as linhas de energização das
bobinas 1, 2, 3 e 4 do motor de passo 1, respectivamente, denominado de MOTOR 1. As linhas
M2_B1, M2_B2, M2_B3 e M2_B4 correspondem as linhas de energização das bobinas 1, 2, 3 e 4
do motor de passo 2, respectivamente, denominado de MOTOR 2.
Para o Módulo Display LCD, na Figura 55, foi selecionado apenas um display LCD,
denominado de LCD, com os pinos VSS, D0, D1, D2 e D3 ligados ao terra, o pino VDD ligado à
fonte de 5 volts, os pinos RS, RW, E, D4, D5, D6 e D7 ligados aos pinos RE2, RE0, RE1, RB4,
RB5, RB6 e RB7 do PIC, respectivamente.
Os pinos do LED backlight não estão presentes no componente LCD, pois na biblioteca de
componentes contida no Proteus, não foi encontrado nenhum display LCD com pinos do LED
backlight.
84
Figura 55. Circuito de simulação do Módulo Display LCD.
O pino de controle do contraste, VEE, permaneceu aberto, tendo em vista não ter efeitos na
simulação, independente da tensão aplicada.
Para o Módulo Teclado Matricial, na Figura 56, foram selecionadas chaves do tipo botão
para montar a matriz, sendo elas denominadas:
L1C1, L1C2, L1C3 e L1C4: com um terminal ligado ao pino RD0 e o outro ligado ao
pino RD4, RD5, RD6 e RD7 do microcontrolador, respectivamente;
L2C1, L2C2, L2C3 e L2C4: com um terminal ligado ao pino RD1 e o outro ligado ao
pino RD4, RD5, RD6 e RD7 do microcontrolador, respectivamente;
L3C1, L3C2, L3C3 e L3C4: com um terminal ligado ao pino RD2 e o outro ligado ao
pino RD4, RD5, RD6 e RD7 do microcontrolador, respectivamente;
L4C1, L4C2, L4C3 e L4C4: com um terminal ligado ao pino RD3 e o outro ligado ao
pino RD4, RD5, RD6 e RD7 do microcontrolador, respectivamente;
As colunas da matriz correspondente aos pinos RD4, RD5, RD6 e RD7 do microcontrolador
são ligadas a fonte de 5 volts pelos pinos através de resistores de pull-up. As linhas da matriz
correspondem aos pinos RD0, RD1, RD2 e RD3 do MCU.
85
Figura 56. Circuito de simulação do Módulo Teclado Matricial.
3.5.2 Validação da Implementação Virtual
Para validar as implementações dos módulos virtualmente, foi necessário elaborar alguns
experimentos simples de programação do microcontrolador PIC. Para isso, foi utilizado o software
MikroC PRO for PIC, o qual possibilita desenvolver um software em linguagem C para
microcontroladores PIC, além de já dispor de bibliotecas e manuais das mesmas que facilitam o
desenvolvimento do software pelo programador. Ao compilar o código fonte, é gerado um arquivo
HEX4 que, nessa etapa do projeto, é utilizado na validação das ligações dos componentes
periféricos selecionados com o PIC18F4520.
4 Extensão do arquivo utilizado para gravação do código fonte no microcontrolador.
86
Simulação do Módulo Controlador
Para simulação do Módulo Controlador foram desenvolvidas duas atividades distintas, sendo
uma para validação do funcionamento das chaves de interrupção externa, denominada de
Experimento A, e outra para validação da comunicação RS-232, denominada de Experimento B. Na
primeira atividade, estão envolvidos também, além das chaves INT. EXT. 0, INT. EXT. 1 e INT.
EXT. 2, o LED I/O.
O Experimento A consiste em: (i) ligar o LED I/O e (ii) habilitar as interrupções externas do
PIC. No tratamento da interrupção externa, o LED I/O deve ser ligado, caso esteja desligado, ou
desligado, caso esteja ligado. Ao compilar o código fonte, contido na Figura 73 de Apêndice A, e
gravar o arquivo HEX gerado no PIC18F4520 virtual, o sistema se comportou conforme esperado.
Toda a fez que o os botões INT. EXT. 0, INT. EXT. 1 ou INT. EXT. 2 foram pressionados, uma
interrupção foi gerada e tratada pela função “interrupt()”, responsável pelo tratamento das
interrupções, ligando/desligando o LED I/O (dependendo da sua situação anterior à interrupção).
O Experimento B consiste em: (i) enviar o conjunto de caracteres “alo mundo!”, seguido dos
caracteres de quebra de linha (0x13 e 0x10), para o cliente Hyper Terminal e (ii) enviar de volta
para o cliente Hiper Terminal todo caractere enviado para o PIC. Ao compilar o código fonte,
contido na Figura 74 do Apêndice B, e gravar o arquivo HEX gerado no PIC18F4520 virtual, o
sistema também se comportou conforme esperado. Ao iniciar a simulação, o MCU enviou os
caracteres iniciais “alo mundo!” mais a quebra de linha, seguindo para o estado de leitura
indefinidamente. Os caracteres “teste rs-232” foram digitados no Hyper Terminal e, para cada um
deles, o PIC realizou a leitura correta dos mesmos, enviando novamente para o Hyper Terminal o
caractere lido. A Figura 57 mostra uma imagem do cliente Hyper Terminal na validação do o
Experimento B.
Figura 57. Janela do Hyper Terminal na validação do Experimento B.
87
Os resultados das simulações dos Experimentos A e B foram considerados bem sucedidos,
atendendo as expectativas do enunciado dos mesmos. Em ambos os experimentos, o botão RESET
foi testado e validado sua funcionalidade, sendo melhor visualizado na Figura 57, através da
repetição dos caracteres “alo mundo!” no Hyper Terminal, como indicado pela seta, sendo que esses
caracteres só devem aparecer no início do programa.
No Experimento B, foi utilizada a biblioteca UART do compilador MicroC PRO for PIC.
Algumas das funções da biblioteca, utilizadas nos experimentos, estão descritas no Anexo III desse
trabalho.
Simulação do Módulo I²C
Para simulação do Módulo I²C, foram desenvolvidas duas atividades distintas, sendo uma
para validação do funcionamento da comunicação I²C com a EEPROM, denominada de
Experimento C, e outra para validação da comunicação I²C com o RTC, denominada de
Experimento D.
O Experimento C consiste em: (i) iniciar a comunicação I²C, sendo o PIC como mestre do
barramento, (ii) escrever o valor 9 no endereço 0x00 da EEPROM, (iii) escrever os valores 8, 7, 6 e
5 nos endereços 0x01, 0x02, 0x03 e 0x04 da EEPROM, de uma só vez e (iv) ler o valor contido no
endereço 0x02 da EEPROM. Ao compilar o código fonte, contido na Figura 75 do Apêndice C, e
gravar o arquivo HEX gerado no PIC18F4520 virtual, o sistema atendeu as expectativas do
enunciados para o experimento.
Na Figura 58 é apresentada a janela de depuração do ANALISADOR I2C, onde estão
destacados os itens do experimento, demonstrando um resultado bem sucedido do algoritmo. Nela é
possível observar os sinais enviados pelo mestre, sublinhado em vermelho, enquanto o mesmo
ocupa o barramento e os sinais enviados pelo escravo, destacado em azul.
88
Figura 58. Janela do ANALISADOR I2C do Experimento C.
O Experimento D consiste em: (i) iniciar a comunicação I²C, sendo o PIC como mestre do
barramento, (ii) atualizar todos os campos do RTC de uma só vez e (iii) atualizar cada campo do
RTC um por um. Ao compilar o código fonte, contido na Figura 76 do Apêndice D, e gravar o
arquivo HEX gerado no PIC18F4520 virtual, o sistema também se comportou conforme esperado.
Na Figura 59 é apresentada a janela de depuração do ANALISADOR I2C, onde estão destacados os
itens do Experimento D, demonstrando um resultado bem sucedido do algoritmo.
89
Figura 59. Janela do ANALISADOR I2C do Experimento D.
Mesmo que sejam atualizados com os mesmos valores, existe uma diferença de
aproximadamente 1.56 milissegundos entre o primeiro sinal de Start e o último sinal de Stop da
atualização dos itens (ii) e (iii) desse experimento, mostrando que a atualização do item (iii) é
aproximadamente 250% mais lenta que a do item (ii). Em sistemas onde a velocidade de
comunicação mestre-escravo é crítica, deve-se dar prioridade, na comunicação serial síncrona I²C,
para atualizações de endereços consecutivos a partir de um único chamado do mestre.
O Proteus ainda permite que seja visualizada a data armazenada no RTC, ajudando o
desenvolvedor na depuração do código fonte e validar o Experimento D. A janela do RTC, após a
execução do algoritmo, é apresentada na Figura 60.
Figura 60. Janela do RTC com a data gravada no Experimento D.
Em ambos os experimentos C e D, foi utilizada a biblioteca I2C do compilador MicroC PRO
for PIC. Algumas das funções da biblioteca, utilizadas nos experimentos, estão descritas no Anexo
IV desse trabalho.
90
Simulação do Módulo Motor de Passo
Para simulação do Módulo Motor de Passo, foram desenvolvidas duas atividades distintas,
sendo uma para validação do controle do MOTOR 1 por controle do acionamento direto das
bobinas através das portas digitais do PIC, denominado de Experimento E, e outra para validação
do controle do MOTOR 2 por chaveamento digital de sinais PWM aplicados nas bobinas,
denominado de Experimento F.
O Experimento E consiste em girar o MOTOR 1 em sentido horário ou anti-horário,
movendo-se em passos completos ou meio passo, sendo eles determinados por um valor qualquer
antes do início do giro do MOTOR 1. Ao compilar o código fonte, contido na Figura 77 do
Apêndice E, e gravar o arquivo HEX gerado no PIC18F4520 virtual, o motor de passo realizou o
giro de acordo com a lógica aplicada nos pinos de acionamento do MOTOR 1, cumprindo o
objetivo do enunciado para o Experimento D.
O algoritmo não prevê a alteração do sentido ou do divisor de passo durante a simulação,
pois não faz parte do escopo do experimento. Nesse caso, seria necessário um melhor tratamento de
mudanças no sentido e no passo do motor em relação às mudanças em tempo real.
É apresentado um gráfico dos acionamentos lógicos aplicados no MOTOR 1 em sentido
horário, na Figura 61, e anti-horário, na Figura 62, tanto em passo completo quanto em meio passo.
(a) Passo completo
(b) Meio passo
Figura 61. Gráfico do acionamento do MOTOR 1 em sentido horário no Experimento E.
91
O gráfico foi gerado a partir de uma ferramenta gráfica do Proteus, chamada de Graph
Mode.
(a) Passo completo
(b) Meio passo
Figura 62. Gráfico do acionamento do MOTOR 1 em sentido anti-horário no Experimento E.
O Experimento F consiste em girar o MOTOR 2 em sentido horário em micro-passos, sendo
que para o experimento foi utilizado um divisor de 1/8 (um oitavo) de passo. Ao compilar o código
fonte, contido na Figura 78 do Apêndice F, e gravar o arquivo HEX gerado no PIC18F4520 virtual,
o motor de passo realizou o giro através do chaveamento dos sinais PWM aplicados aos
enrolamentos do MOTOR 2, como pode ser observado na Figura 63, cumprindo o objetivo do
enunciado para o Experimento F.
92
(a)
(b)
Figura 63. Chaveamento dos sinais PWM no Experimento F.
A Figura 63 representa um osciloscópio virtual onde podem ser analisados os sinais digitais
aplicados nas bobinas. Em (a) o sinal PWM 1 é chaveado para a bobina 1 do MOTOR 2, tendo
70.7% do período PWM ocupado com o ciclo ativo e o sinal PWM 2 é chaveado para a bobina 4,
93
tendo 100% do período PWM ocupado com o ciclo ativo. Em (b) o sinal PWM 1 é chaveado para a
bobina 3 do MOTOR 2, tendo 100% do período PWM ocupado com o ciclo ativo e o sinal PWM 2
é chaveado para a bobina 2, tendo 92.4% do período PWM ocupado com o ciclo ativo.
No Experimento F, foi utilizada a biblioteca PWM do compilador MicroC PRO for PIC.
Algumas das funções da biblioteca, utilizadas nesse experimento, estão descritas no Anexo V desse
trabalho.
Simulação do Módulo Display LCD
Para simulação do Módulo Display LCD, foi desenvolvida uma atividade no qual deve-se
apresentar uma contagem de 0 até 100, repetindo o processo continuamente ao retornar para o valor
0 depois do valor 100. Esse experimento foi denominado de Experimento G. Ao compilar o código
fonte, contido na Figura 79 do Apêndice G, e gravar o arquivo HEX gerado no PIC18F4520 virtual,
o LCD cumprindo o objetivo do enunciado para o Experimento G. Como Resultado da simulação, é
apresentada a Figura 64 com imagens do LCD em execução.
Figura 64. LCD com contagem de 0 até 100 no Experimento G.
No Experimento G, foi utilizada a biblioteca LCD do compilador MicroC PRO for PIC.
Algumas das funções da biblioteca, utilizadas nesse experimento, estão descritas no Anexo VI desse
trabalho.
94
Simulação do Módulo Teclado Matricial
Para simulação do Módulo Teclado Matricial, foi desenvolvida uma atividade na qual deve-
se apresentar no display a identificação da tecla pressionada a partir de uma varredura no teclado
matricial. Esse experimento foi denominado de Experimento H. Ao compilar o código fonte,
contido na Figura 80 do Apêndice H, e gravar o arquivo HEX gerado no PIC18F4520 virtual, a
matriz de interconexão de chaves cumprindo o objetivo do enunciado para o Experimento H. Como
Resultado da simulação, é apresentada a Figura 64 com imagens do LCD após a ação de pressionar
uma das teclas da matriz.
Figura 65. Identificação da chave pressionada no Experimento H.
Utilizou-se o LCD devido a validação prévia do mesmo no Experimento G, facilitando a
validação do Experimento H. O valor apresentado na igualdade, “1,2” corresponde a coordenada da
chave pressionada na matriz, sendo ela identificada como linha 1 e coluna 2.
As atividades desenvolvidas para validar o funcionamento dos módulos do kit são utilizadas
para validar os protótipos físicos dos módulos. A etapa de implementação física é descrita na seção
seguinte.
95
3.6 IMPLEMENTAÇÃO FÍSICA
A implementação física consiste em determinar os circuitos dos módulos e aplicar os testes
de validação utilizados na etapa de simulação. Nesta etapa do trabalho, não é determinada a placa
de circuito impresso de confecção final dos módulos, mas, para o desenvolvimento dos protótipos
físicos, são apresentadas as principais diferenças entre os circuitos de simulação e o de prototipação
dos módulos, além da confecção das PCI (Placa de Circuito Impresso) de validação física. Para o
desenvolvimento do circuito e do layout da placa de circuito impresso de cada módulo, foi utilizado
o software Eagle, na versão 5.11.
3.6.1 Diferenças entre os circuitos virtuais e físicos dos módulos
As principais diferenças entre os circuitos implementados virtualmente com os projetados
para a confecção dos protótipos são:
Módulo Controlador
o Elaboração do circuito da alimentação de 12 volts e 5 volts;
o Elaboração do circuito do oscilador externo conectado ao PIC;
o Elaboração do circuito do conector de gravação ICSP; e
o Substituição do componente COMPIM pelo circuito típico RS-232 contendo o
componente MAX232.
Módulo I2C
o Adição de capacitores de desacoplamento entre os pinos VCC e o GND do RTC e da
EEPROM.
Módulo Motor de Passo
o Elaboração dos circuitos reguladores de tensão independentes para o MOTOR 1 e
MOTOR 2; e
o Adição de capacitores de desacoplamento entre os pinos VCC e o GND do CI_AND
e CI_NOT.
Módulo Display LCD
o Elaboração do circuito regulador de tensão LED backlight;
96
o Adição de um trimpot para o controle de contraste; e
o Adição do conector do display LCD.
Em todos os módulos
o Adição do conector do Barramento KMD.
No Módulo Teclado Matricial, foi mantido o mesmo circuito da simulação.
As figuras dos circuitos esquemáticos desenvolvidos para cada módulo estão contidos nos
Apêndice I (Módulo Controlador), Apêndice J (Módulo I²C), Apêndice K (Módulo Motor de
Passo), Apêndice L (Módulo Display LCD) e Apêndice M (Módulo Teclado Matricial).
3.6.2 Prototipação do kit
Para a prototipação dos módulos do kit, foi necessário desenvolver os layouts5 das placas de
circuito impresso (posicionando os componentes na placa e traçando as trilhas de conexão entre
eles), preparar a PCI e, por fim, soldar os componentes.
A Tabela 13 apresenta a relação das figuras presentes nos apêndices desse trabalho,
contendo o footprint6 (coluna 3) e o layer7 (coluna 4) das placas, com os módulos do kit (coluna 1).
Foi a partir dessas imagens que os protótipos foram confeccionados.
Tabela 13. Relação de as imagens da PCI com os módulos do kit
Módulo Apêndice Footprint Layer Controlador Apêndice N Figura 86 Figura 87
I²C Apêndice O Figura 88 Figura 89 Motor de Passo Apêndice P Figura 90 Figura 91 Display LCD Apêndice Q Figura 92 Figura 93
Teclado Matricial Apêndice R Figura 94 Figura 95
Para preparar as placas de circuito impresso com os layers criados foi adaptado o método
térmico de confecção de PCI (SOARES, 2008), cujos passos de desenvolvimento foram:
1. Imprimir o layer em transparência com uma impressora laser;
5 Representação gráfica da placa de circuito impresso. 6 Máscara do componente real na placa de circuito impresso. 7 Face com as trilhas de uma placa de circuito impresso.
97
2. Limpar o cobre da placa com lã de aço;
3. Untar o cobre da placa com Thinner;
4. Posicionar a transparência sobre cobre da placa com a tinta da impressão voltada para o
cobre;
5. Aplicar um ferro de passar, em temperatura média, durante 3 à 5 minutos sobre a
transparência;
6. Colocar a placa de molho em água fria de 1 à 2 minutos; e
7. Retirar, cuidadosamente, a transparência da placa.
Com as trilhas sobre o cobre, a placa foi imersa em uma solução de percloreto de ferro
diluído em água para corrosão do cobre. Após a completa remoção do cobre exposto na solução, a
placa foi limpa com água e a tinta da impressão retirada com lã de aço.
Para a soldagem dos componentes, foram realizados furos na placa, considerando que os
componentes são dispostos no lado da placa que não contém cobre e a soldagem é aplicada na face
da placa com cobre. Depois de soldados os componentes, os módulos aproximaram-se muito das
imagens em 3D geradas a partir dos layouts desenvolvidos, apresentadas na Figura 66 (Módulo
Controlador), Figura 67 (Módulo I²C), Figura 68 (Módulo Motor de Passo), Figura 69 (Módulo
Display LCD) e Figura 70 (Módulo Teclado Matricial).
Figura 66. Imagem em 3D do protótipo do Módulo Controlador.
98
Figura 67. Imagem em 3D do protótipo do Módulo I²C.
Figura 68. Imagem em 3D do protótipo do Módulo Motor de Passo.
99
Figura 69. Imagem em 3D do protótipo do Módulo Display LCD.
Figura 70. Imagem em 3D do protótipo do Módulo Teclado Matricial.
As imagens foram geradas a partir do comando “run” no campo de inserção de comando do
Eagle em conjunto com o software POV-Ray, para geração de imagens em 3D referente ao layout
criado no Eagle.
100
3.6.3 Modularidade dos protótipos
Como é possível observar nas imagens dos protótipos dos módulos apresentados na
Subseção anterior, dois módulos continham apenas um conector do Barramento KMD, enquanto
que os outros três possuem dois conectores (na base maior do retângulo da placa). Desta forma, os
módulos que contam com dois conectores KMD podem ser combinados livremente na montagem
do kit, enquanto que os com apenas um único conector devem ser utilizados nas extremidades da
combinação.
Assim, foi possível combinar os módulos periféricos conjuntamente com o módulo
principal, formando diferentes combinações, considerando-se que o Módulo Motor de Passo e o
Módulo Controlador sejam posicionados nas extremidades do kit.
3.6.4 Validação dos protótipos
Para uma adequada validação dos protótipos físicos, os mesmos arquivos HEX utilizados na
validação virtual dos módulos foram gravados fisicamente no PIC18F4520 do Módulo Controlador.
Além disso, para validar os aspectos de modularidade de cada protótipo, os mesmos foram
combinados em diferentes formas possíveis de utilização do kit para realização dos experimentos.
A Tabela 14 apresenta as combinações em que foram testados os módulos, sendo que a
primeira coluna identifica a validação realizada, a segunda coluna relaciona o arquivo HEX do
experimento realizado na validação virtual com a combinação dos módulos, representados pelas
colunas seguintes, tendo em vista que as colunas das posições 1 e 5 representam os módulo situados
nas extremidades da combinação no kit, enquanto que as colunas das posições 2, 3 e 4 representam
os módulos situados no meio.
Tabela 14. Validação dos experimentos realizados nas combinações dos módulos
Validação Experimento Combinação dos Módulos Posição 1 Posição 2 Posição 3 Posição 4 Posição 5
1 A Controlador I²C Teclado Matricial
Display LCD
Motor de Passo
2 B Controlador I²C Display LCD
Teclado Matricial
Motor de Passo
3 C Controlador Teclado Matricial I²C Display
LCD Motor de
Passo
4 D Controlador Teclado Matricial
Display LCD I²C Motor de
Passo
101
Tabela 14. Validação dos experimentos realizados nas combinações dos módulos (continuação)
Validação Experimento Combinação dos Módulos Posição 1 Posição 2 Posição 3 Posição 4 Posição 5
5 E Controlador Display LCD
Teclado Matricial I²C Motor de
Passo
6 F Controlador Display LCD I²C Teclado
Matricial Motor de
Passo
7 G Controlador I²C Teclado Matricial
Display LCD
Motor de Passo
8 H Controlador I²C Display LCD
Teclado Matricial
Motor de Passo
9 C* Controlador Teclado Matricial I²C Display
LCD Motor de
Passo
10 D* Controlador Teclado Matricial
Display LCD I²C Motor de
Passo
* Recompilado o código fonte com funções para apresentar resultados no display LCD
Os procedimentos para validação foram realizados com todos os módulos conectados,
mesmo que desnecessariamente, a fim de verificar algum problema nas trilhas das placas. Sendo
assim, nenhum problema foi identificado. Com exceção das validações 9 e 10, os resultados das
aplicações gravadas no PIC foram idênticos às simuladas na validação virtual.
As validações 9 e 10 foram criadas para comprovar a veracidade dos resultados das
validações 3 e 4, correspondente aos dos experimentos C e D. Foram acrescentadas as funções
criadas para o display LCD, no experimento G, para apresentar no display as informações
armazenadas nos endereços da memória EEPROM, no Experimento C, e as informações
armazenadas no RTC, no Experimento D. Logo, o código teve de ser recompilado e gravado no
PIC.
Na Figura 71 é apresentado o resultado da validação 9, onde:
(a) São gravados os valores 8, 7, 6 e 5 nos endereços 0x01, 0x02, 0x03 e 0x04 da EEPROM;
(b) Apresentado o conteúdo do endereço 0x02, contendo o valor 7;
(c) Apresentado o conteúdo do endereço 0x03, contendo o valor 6;
(d) Apresentado o conteúdo do endereço 0x04, contendo o valor 5;
102
(a) (b)
(c) (d)
Figura 71. Resultado da validação 9 com os protótipos físicos.
Na Figura 72 é apresentado o resultado da validação 10, onde:
(a) São gravados os valores no RTC:
o 1 para no endereço correspondente ao segundos (0x00);
o 2 para no endereço correspondente ao minutos (0x01);
o 3, em formato americano, para no endereço correspondente ao horas (0x02);
o 4 para no endereço correspondente ao dia da semana (0x03);
o 5 para no endereço correspondente ao dia do mês (0x04);
o 6 para no endereço correspondente ao mês (0x05);
o 7 para no endereço correspondente ao ano (0x06);
(b) Apresentado o conteúdo atual dos endereços formatado para o display LCD;
103
(a) (b)
Figura 72. Resultado da validação 10 com os protótipos físicos.
Desta forma, considerou-se que os protótipos foram aprovados nos testes, dando início a
confecção das placas finais dos módulos do kit.
3.7 CONFECÇÃO DAS PLACAS FINAIS DOS MÓDULOS DO KIT
Nesta última etapa de implementação do Kit Modular de Desenvolvimento, são expostas
algumas mudanças dos módulos em relação à usabilidade das placas no desenvolvimento dos
experimentos. Além disso, é apresentado o orçamento dos custos de confecção dos protótipos
físicos e das placas finais dos módulos.
3.7.1 Mudanças dos protótipos para as placas finais
Durante a validação da implementação física, observou-se que algumas características
físicas das placas poderiam ser aprimoradas, para proporcionar maior usabilidade dos módulos. Para
não invalidar os processos das etapas anteriores do projeto, tanto os requisitos levantados quanto os
circuitos dos protótipos não foram afetados pelas alterações.
A Tabela 15 relaciona a mudança aplicada (coluna 1) com os módulos do kit (coluna 2),
além de uma justificativa de sua aplicação (coluna 3).
104
Tabela 15. Mudanças dos protótipos para as placas finais dos módulos
Mudança Módulos afetados Justificativa Adicionado um conector do Barramento KMD
Controlador Motor de Passo
Possibilitar que o Módulo seja posicionado de forma aleatória no kit
Substituído um dos conectores do Barramento KMD
I²C Display LCD
Teclado Matricial
Possibilitar que os módulos sejam conectados sem necessidade de componentes externos
Adicionadas identificações dos pinos do Barramento KMD
Controlador I²C
Motor de Passo Display LCD
Teclado Matricial
Possibilitar que o usuário identifique os pinos do Barramento KMD na própria placa
Adicionadas identificações dos recursos da placa
Controlador I²C
Motor de Passo Display LCD
Teclado Matricial
Possibilitar que o usuário identifique os componentes de um determinado recurso do módulo na própria placa
Reposicionados os componentes no módulo
Controlador Motor de Passo
Agrupamento dos componentes na placa de acordo com sua funcionalidade
Adicionado componente de seleção do oscilador externo
Controlador
Possibilitar que o usuário escolha entre utilizar o oscilador externo ou o oscilador interno do MCU, liberando os pinos RA7 e RA6 para serem usados em um determinado projeto
Substituídos conectores dos motores de passo Motor de Passo
Possibilitar que o usuário conecte os motores de passo a partir de um conector padrão de fácil acesso
As figuras com o footprint das placas finais estão expostas no Apêndice S desse trabalho.
Após a execução das alterações finais, foram gerados os arquivos necessários para produção
das placas industrialmente. Esses arquivos são conhecidos como “Gerber” e podem ser gerados a
partir do software de confecção de PCI, Eagle, nesse caso.
3.8 CUSTOS DO PROJETO
Como forma de comparar o custo na aquisição de um kit de desenvolvimento comercial
apresentado na Tabela 1 da Seção 1.1 com o kit proposto e desenvolvido nesse trabalho, esta seção
apresenta os valores de compra dos componentes eletrônicos utilizados nos protótipos dos módulos
e a diferença entre os custos de confecção das placas dos protótipos físicos e das placas finais.
105
3.8.1 Custo dos componentes
Foram realizados três pedidos no total, sendo a primeira em 30 de março de 2011, a segunda
em 08 de abril de 2011 e a terceira em 14 de abril de 2011, em duas empresas diferentes, Ichip
Tecnologia Ltda. – http://www.soldafria.com.br – e Infotronic Componentes Eletronicos –
http://www.infotronic-pe.com/loja/.
Os custos dos componentes do kit modular estão separados pelos módulos nas tabelas desta
seção, sendo possível identificar o componente eletrônico pertencente ao módulo, a quantidade de
componentes utilizado no módulo e o valor total de custo de compra dos componentes no módulo.
Tabela 16. Custo de compra dos componentes do protótipo do Módulo Controlador
Componente Valor Unitário Qtd. Valor Total Barra de Pinos 1x40 vias 20mm 180 graus R$ 0,72 1 R$ 0,72 Capacitor Disco Cerâmico 15pF x 50V R$ 0,09 3 R$ 0,27 Capacitor Eletrolítico 10uF x 25V R$ 0,10 1 R$ 0,10 Capacitor Eletrolítico 1uF x 50V R$ 0,15 4 R$ 0,60 Capacitor Eletrolítico 47uF x 25V R$ 0,15 1 R$ 0,15 Chave Tactil 4,5x4,5x3,8mm 4 Terminais R$ 0,39 4 R$ 1,56 Circuito Integrado LM7805 R$ 0,99 1 R$ 0,99 Circuito Integrado MAX232 (ICL232, HIN232) R$ 1,96 1 R$ 1,96 Conector DB9 Femea 90 Graus Solda Placa R$ 1,49 1 R$ 1,49 Cristal 16 MHz Meia caneca - HC49S R$ 0,75 1 R$ 0,75 Diodo 1N4007 R$ 0,15 2 R$ 0,30 Dissipador 180357 R$ 1,79 1 R$ 1,79 Jack J4 DC-005 P/ Placa 2,5mm x 5,5mm R$ 0,39 1 R$ 0,39 Led Azul Difuso 3mm R$ 0,66 1 R$ 0,66 Led Verde Difuso 3mm R$ 0,15 1 R$ 0,15 Led vermelho Difuso 3mm R$ 0,15 1 R$ 0,15 Microcontrolador PIC18F4520-I/P R$ 23,20 1 R$ 23,20 Resistor de 270R Carbono 5% 1/4W R$ 0,10 2 R$ 0,20 Resistor de 330R Carbono 5% 1/4W R$ 0,10 3 R$ 0,30 Resistor de 39K Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Resistor de 3K3 Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Resistor de 910R Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Soquete de Barra 1x40 MCI 90 Graus R$ 2,69 2 R$ 5,38 Soquete Torneado 16 Pinos R$ 0,88 1 R$ 0,88 Soquete Torneado 40 Pinos R$ 2,24 1 R$ 2,24
A Tabela 16 apresenta o custo de compra dos componentes eletrônicos protótipo físico do
Módulo Controlador, totalizando os gastos em R$ 44,53. Já para a placa final, os gastos com os
componentes foram R$ 46,55.
106
Tabela 17. Custo de compra dos componentes do protótipo do Módulo I²C
Componente Valor Unitário Qtd. Valor Total Barra de Pinos 1x40 vias 20mm 180 graus R$ 0,72 1 R$ 0,72 Bateria 3V CR2032 R$ 0,59 1 R$ 0,59 Capacitor Disco Cerâmico 10nF x 50V (0,01uF/10K/10KpF/103) R$ 0,09 2 R$ 0,18
Circuito Integrado 24C04 (ATMLU934 04B/ATMLU938 04B) R$ 1,19 1 R$ 1,19
Circuito Integrado DS1302 (RTC) R$ 8,20 1 R$ 8,20 Cristal 32.768 Khz R$ 0,39 1 R$ 0,39 Resistor de 4K7 Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Resistor de 8K2 Carbono 5% 1/4W R$ 0,10 2 R$ 0,20 Soquete de Barra 1x40 MCI 90 Graus R$ 2,69 2 R$ 5,38 Soquete Torneado 8 Pinos R$ 0,59 2 R$ 1,18 Suporte P/ Bateria CR2032/CR2025 R$ 0,75 1 R$ 0,75
A Tabela 17 apresenta o custo de compra dos componentes eletrônicos protótipo físico do
Módulo I²C, totalizando os gastos em R$ 18,88. Já para a placa final, os gastos com os componentes
foram R$ 16,18.
Tabela 18. Custo de compra dos componentes do protótipo do Módulo Motor de Passo
Componente Valor Unitário Qtd. Valor Total Barra de Pinos 1x40 vias 20mm 180 graus R$ 0,72 1 R$ 0,72 Borne KF-301 3T R$ 0,75 4 R$ 3,00 Capacitor Disco Cerâmico 100nF x 50V (0,1uF/100K/100Kpf/104) R$ 0,10 2 R$ 0,20
Capacitor Disco Cerâmico 10nF x 50V (0,01uF/10K/10KpF/103) R$ 0,09 2 R$ 0,18
Capacitor Eletrolítico 1uF x 100V R$ 0,15 2 R$ 0,30 Circuito Integrado 74HC04 R$ 0,74 1 R$ 0,74 Circuito Integrado 74HC08 R$ 0,66 1 R$ 0,66 Circuito Integrado LM317T R$ 1,19 2 R$ 2,38 Circuito Integrado ULN2804 R$ 1,51 1 R$ 1,51 Dissipador 180357 R$ 1,79 2 R$ 3,58 Resistor de 1K Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Resistor de 240R Carbono 5% 1/4W R$ 0,10 2 R$ 0,20 Soquete de Barra 1x40 MCI 90 Graus R$ 2,69 1 R$ 2,69 Soquete Torneado 14 Pinos R$ 0,79 2 R$ 1,58 Soquete Torneado 18 Pinos R$ 1,49 1 R$ 1,49 Trimpot 3386F 5K R$ 1,12 2 R$ 2,24
A Tabela 18 apresenta o custo de compra dos componentes eletrônicos protótipo físico do
Módulo Motor de Passo, totalizando os gastos em R$ 21,57. Já para a placa final, os gastos com os
componentes foram R$ 19,10.
107
Tabela 19. Custo de compra dos componentes do protótipo do Módulo Display LCD
Componente Valor Unitário Qtd. Valor Total Barra de Pinos 1x40 vias 11,2mm 180 graus R$ 0,69 1 R$ 0,69 Barra de Pinos 1x40 vias 20mm 180 graus R$ 0,72 1 R$ 0,72 Capacitor Disco Cerâmico 100nF x 50V (0,1uF/100K/100Kpf/104) R$ 0,10 1 R$ 0,10
Capacitor Eletrolítico 1uF x 100V R$ 0,15 1 R$ 0,15 Circuito Integrado LM317LZ R$ 0,39 1 R$ 0,39 Display LCD 16x2 Com Back Fundo Verde Letra Preta (80x36x13) R$ 15,99 1 R$ 15,99
Resistor de 240R Carbono 5% 1/4W R$ 0,10 1 R$ 0,10 Soquete de Barra 1x40 MCI 180 Graus R$ 0,78 1 R$ 0,78 Soquete de Barra 1x40 MCI 90 Graus R$ 2,69 2 R$ 5,38 Trimpot 3386F 5K R$ 1,12 2 R$ 2,24
A Tabela 19 apresenta o custo de compra dos componentes eletrônicos protótipo físico do
Módulo Display LCD, totalizando os gastos em R$ 26,54. Já para placa final, os gastos com os
componentes foram R$ 23,84.
Tabela 20. Custo de compra dos componentes do protótipo do Módulo Teclado Matricial
Componente Valor Unitário Qtd. Valor Total Barra de Pinos 1x40 vias 20mm 180 graus R$ 0,72 1 R$ 0,72 Chave Tactil 4,5x4,5x3,8mm 4 Terminais R$ 0,39 16 R$ 6,24 Resistor de 1K Carbono 5% 1/4W R$ 0,10 4 R$ 0,40 Soquete de Barra 1x40 MCI 90 Graus R$ 2,69 2 R$ 5,38
A Tabela 20 apresenta o custo de compra dos componentes eletrônicos protótipo físico do
Módulo Teclado Matricial, totalizando os gastos em R$ 12,74. Já para a placa final, os gastos com
os componentes foram R$ 10,04.
A diferença do custo total dos componentes entre o protótipo e a versão final dos módulos é
de R$ 8,55, sendo o valor total de compra dos componentes do protótipo de R$ 124,26 e da versão
final de R$ 115,71. Essa diferença deve-se as mudanças citadas na Tabela 15 da Subseção 3.7.1 .
108
3.8.2 Custo das placas
Para produção dos protótipos, descrito na Subseção 3.6.2 , foi necessário comprar os
materiais de confecção de placa de circuito impresso dos protótipos físicos, sendo eles apresentados
na Tabela 21.
Tabela 21. Custo de compra dos materiais para produção dos protótipos
Material Valor Unitário Qtd. Valor Total Placa de Circuito Impresso de Fenolite Virgem Simples 10x15cm R$ 2,79 5 R$ 13,95
Kit para Confecção de PCI Suekit CK-15: - 1 cortador de placa simples; - 1 caneta para traçagem; - 1 perfurador de placa; - 1 percloreto de ferro; e - 1 manual de instruções.
R$ 27,99 1 R$ 27,99
Impressão a lazer em papel transparente R$ 1,50 5 R$ 7,50 Thinner 900ml R$ 7,20 1 R$ 7,20
Para as placas finais, não são atribuídos os custos apresentados na Tabela 21, pois as placas
confeccionadas industrialmente já são entregues completas, necessitando apenas a soldagem dos
componentes na placa. Desta forma, foi realizado um orçamento com a empresa DIGICART
Indústria e Comércio de Circuitos Impressos Ltda. onde o custo de confecção das placas finais
totalizou R$ 122,15. É importante lembrar que, para o primeiro pedido, é cobrado a o custo da
fotoplotagem8 de cada placa.
No total, o custo de produção dos protótipos foi de R$ 180,90, correspondente ao custo total
dos componentes mais o custo total das placas, enquanto que as placas finais totalizaram em R$
237,86 (sem o custo da fotoplotagem).
Ferramentas como ferro de solda, estanho, parafuso, porca, etc. não foram contabilizados
devido à disponibilidade desses materiais no laboratório da UNIVALI.
8 Termo dado ao processo de criação dos fotolitos a partir dos arquivos Gerber.
109
3.9 CONSIDERAÇÕES
Nesse capítulo foi apresentada a documentação do desenvolvimento desse TCC, mostrando
a metodologia utilizada na definição da visão geral, os requisitos do kit como um todo e de seus
módulos individualmente e a arquitetura de hardware aplicada. Na sequência do capítulo são
descritas as implementações e validações dos módulos tanto vitualmente quanto fisicamente. Por
fim, o capítulo é encerrado com a apresentação dos custos do projeto.
Desta forma, o autor considera concluído o desenvolvimento do produto proposto no
trabalho.
4 CONCLUSÃO
Esse trabalho apresentou e discutiu o projeto e a execução de um kit modular de
desenvolvimento baseado no microcontrolador PIC18F4520.
A revisão bibliográfica para fundamentar o desenvolvimento do projeto, apresentada no
Capítulo 2, mostrou-se ser vital importante para execução deste trabalho, onde algumas das
tecnologias envolvidas não eram de conhecimento do autor. Os softwares utilizados nas
implementações virtuais e físicas mostraram-se ser de fácil utilização e aprendizado, onde a
interface intuitiva do software permitiu o desenvolvimento do kit mesmo com o desconhecimento
prévio de sua utilização.
A metodologia utilizada para definição do produto desenvolvido nesse trabalho foi baseada
em técnicas de análise para inovação de produtos, onde são verificados os produtos concorrentes ao
do projeto, fabricados por outras empresas, e as necessidades de nicho de clientes em potencial.
Esta análise mostrou-se ser de grande importância no desenvolvimento do produto proposto.
A metodologia utilizada na criação do produto foi semelhante às utilizadas por empresas de
desenvolvimento de sistemas embarcados, aplicada logo após a metodologia citada anteriormente.
As etapas desta metodologia apresentam grandes dependências entre etapas subsequentes, onde a
prototipação só pode dar início com a finalização da validação virtual e a confecção final só foi
iniciada após a validação dos protótipos. Nas empresas, essas dependências são minimizadas com o
aumento do número de envolvidos no projeto, onde um determinado módulo poderia seguir para a
etapa seguinte sem necessidade de validar todos os módulos na etapa atual. Os benefícios da
modularidade das atividades no desenvolvimento do produto não foram significativos nesse
trabalho, devido ao número de envolvidos no mesmo serem restrito ao autor.
Os principais problemas encontrados no desenvolvimento desse trabalho ficam a cargo dos
componentes utilizados na criação dos protótipos. Foram encontradas poucas lojas na região de
Florianópolis para compra dos componentes eletrônicos e as encontradas apresentaram pouca
variedade.
Como solução, a compra foi realizada pela internet através de site de comércio eletrônico.
Mesmo assim, a variedade e disponibilidade dos componentes continuaram sendo um problema,
onde a solução foi comprar um número maior de componentes e de diferentes modelos para
111
adaptação no projeto. Além disso, alguns componentes do projeto não estavam disponíveis no
estoque das empresas, fazendo com que fosse necessário realizar mais de uma compra pela internet
para obtenção de todos os componentes específicos que seriam utilizados no trabalho. Desta forma,
os custos da prototipação dos módulos foram maiores que o esperado.
Os softwares utilizados nesse trabalho satisfizeram as necessidades do autor na criação do
kit proposto, como exceção do POV-Ray, pois apresentou uma limitação quanto à criação da
imagem em 3D das placas de circuito impresso dos módulos, devido ao software possuir um
número limitado de imagens de componentes em seu banco de imagens.
Tendo em vista que os interessados em montar o kit modular necessitariam comprar apenas
os componentes eletrônicos, as placas de circuito impresso e as impressões em transparência dos
layers, contidas nos apêndices N, O, P, Q e R, o custo total para confecção de cada protótipo dos
módulos individualmente seria:
Módulo Controlador = R$ 48,82;
Módulo I²C = R$ 23,17;
Módulo Motor de Passo = R$ 25,86;
Módulo Display LCD = R$ 30,83; e
Módulo Teclado Matricial = R$ 17,03.
Considerando-se um custo inicial de R$35,19 (Kit para Confecção de PCI mais Thinner
900ml) e que os módulos poderiam ser confeccionados pelo próprio interessado de acordo com a
sua necessidade, os custos dos módulos mostraram que o kit modular é de maior acessibilidade que
os kits tradicionais pesquisados, cumprindo mais um dos objetivos deste trabalho.
O principal objetivo do trabalho foi cumprido com a validação dos protótipos físicos em
diferentes combinações dos módulos do kit, apresentado nas Subseções 3.6.3 e 3.6.4 . Assim, o
autor da como concluídas as metas estipuladas no escopo desse trabalho possibilitando que novos
trabalhos sejam realizados sobre esse tema.
112
4.1 OPORTUNIDADES DE TRABALHOS FUTUROS
A partir dos resultados apresentados, algumas oportunidades de trabalhos futuros podem ser
consideradas sobre o tema:
Desenvolvimento de outros módulos principais baseados em microcontroladores PIC de
outras famílias;
Desenvolvimento de novos módulos principais baseados em microcontroladores de
outros fabricantes como Freescale e Atmel, por exemplo;
Desenvolvimento de novos módulos periféricos com utilização de outros componentes
periféricos como display de 7 segmentos, LCD gráfico e relés, por exemplo;
Desenvolvimento de novos módulos periféricos para aplicação de outros protocolos de
comunicação como SPI e USB, por exemplo;
Desenvolvimento de novas versões dos módulos desenvolvidos; e
Estudo de usabilidade do kit modular em ambiente de desenvolvimento.
REFERÊNCIAS BIBLIOGRÁFICAS
ACEPIC. Kit de Desenvolvimento ACEPIC 40 v2.0 (PIC16F877A), 2010. Disponivel em: <http://acepiccamp.com.br/produtos_descricao.asp?lang=pt_BR&codigo_categoria=8&codigo_produto=1>. Acesso em: 15 ago. 2010.
BARBACENA, I. L.; FLEURY, C. A. Display LCD, outubro 1996. Disponivel em: <http://www2.eletronica.org/apostilas-e-ebooks/componentes/LCD_30324b.pdf>. Acesso em: 12 out. 2010.
BORATTI, I. C. Programação Orientada a Objetos (usando Delphi). 3ª. ed. Florianópolis: VisualBooks, 2004.
BRAGA, N. C. Conheça os microcontroladores PIC – parte 1 (MIC001), 2010. Disponivel em: <http://www.newtoncbraga.com.br/index.php/microcontroladores/103-microchip-pic/1243-mic001.html>. Acesso em: 15 set. 2010.
BRAGA, N. C. Controle de motor de passo com PIC (MEC0003), 2010. Disponivel em: <http://www.newtoncbraga.com.br/index.php/artigosmec/779-controle-de-motor-de-passo-com-pic-mec0003.html>. Acesso em: 6 out. 2010.
BRITES, F. ; SANTOS, V. P. D. A. Motor de Passo - PETele, Niterói, julho 2008. Disponivel em: <http://www.telecom.uff.br/pet/petws/downloads/tutoriais/stepmotor/stepmotor2k81119.pdf>. Acesso em: 12 out. 2010.
CERNE-TEC. Detalhes do Kit microcontrolador PIC16F877A, 2010. Disponivel em: <http://www.cerne-tec.com.br/detalheskitpic16f877a.htm>. Acesso em: 15 ago. 2010.
CONDIT, R. AN907. Stepping Motors Fundamentals, 2004. Disponivel em: <http://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf>. Acesso em: 12 out. 2010.
DIAS, R. P. A. F. Protocolo de Comunicação I2C, 2008. Disponivel em: <http://www.eletronica.org/modules.php?name=News&file=print&sid=13>. Acesso em: 13 out. 2010.
DIGI-KEY. media.digikey.com - /photos/Microchip Tech Photos/, 2010. Disponivel em: <http://media.digikey.com/photos/Microchip Tech Photos/>. Acesso em: 20 set. 2010.
FRAGA, M. Ensino aliado à tecnologia. Cadernos Temáticos, Brasília, n. 19, p. 22-24, fev. 2008.
FREESCALE SEMICONDUCTOR. M68HC05 Family Understanding Small Microcontrollers, Austin, p. 66, janeiro 1998. Disponivel em: <http://www.freescale.com/files/microcontrollers/doc/ref_manual/M68HC05TB.pdf>. Acesso em: 8 set. 2010.
FREESCALE SEMICONDUCTOR. HCS08 Family Reference Manual, Austin, p. 16-18, abril 2007. Disponivel em: <http://www.freescale.com/files/microcontrollers/doc/ref_manual/HCS08RMV1.pdf>. Acesso em: 8 set. 2010.
114
LABROSSE, J. J. Embedded Systems Building Blobks. San Francisco: CMP Books, 1999. cap. 3 e 5.
LABTOOLS. McLab 2 - 16F, 2010. Disponivel em: <http://www.labtools.com.br/index.asp?area=21&subarea=b&idioma=por&script=produtos&prod=192>. Acesso em: 15 ago. 2010.
MATIC, N. The PIC microcontrollers, for beginners too. [S.l.]: mikroElektronika, 2003. Disponivel em: <http://www.mikroe.com/pt/product/books/picbook/>. Acesso em: 10 set. 2010.
MCCOMB, M. Stepper Motors Part 1: Types of Stepper Motors, 2007. Disponivel em: <http://techtrain.microchip.com/webseminars/documents/StepMtrP1_091407.pdf>. Acesso em: 6 out. 2010.
MELO, F. É. N. D.; ZAPELINI, W. B. Um Equipamento Didático Constituído de Módulos de Microcontrolador e de PLD, Florianópolis, 2003. 9p.
MESSIAS, A. R. Controle de motor de passo através da porta paralela, 2006. Disponivel em: <http://www.rogercom.com/pparalela/IntroMotorPasso.htm>. Acesso em: 5 out. 2010.
MICROCHIP TECHNOLOGY. PIC18XXXX MCU Family Product Overview, Chandler, dezembro 2003. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/30327b.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Data Sheet PIC16F5X, Chandler, p. 1-9, abril 2007. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/41213D.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Data Sheet PIC18F1220/1320, Chandler, p. 1-9, fevereiro 2007. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/39605F.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Data Sheet PIC18F2420/2520/4420/4520, Chandler, novembro 2008. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/39631E.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Data Sheet PIC16F627A/628A/648A, Chandler, p. 1-12, outubro 2009. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/40044G.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Data Sheet PIC16F/LF1826/27, Chandler, p. 1-15, junho 2010. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/41391C.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. 8-bit PIC® Microcontroller Solutions, Chandler, agosto 2010. Disponivel em: <http://ww1.microchip.com/downloads/en/DeviceDoc/39630g.pdf>. Acesso em: 15 set. 2010.
MICROCHIP TECHNOLOGY. Package Specification, Chandler, 2010. Disponivel em: <http://www.microchip.com/stellent/groups/techpub_sg/documents/packagingspec/en012702.pdf>. Acesso em: 15 set. 2010.
115
MICROGENIOS. Kit PICgenios PIC16F877A - Kit de Desenvolvimento Profissional Família PIC16F, 2010. Disponivel em: <http://www.microgenios.com/detalhes.asp?id=137&produto=467>. Acesso em: 15 ago. 2010.
NATIONAL SEMICONDUCTOR. MICROCONTROLADOR COP8™, Guadalajara, p. 17-23, fevereiro 2001. Disponivel em: <www.national.com/appinfo/mcu/files/ManualDeUsuario.pdf>. Acesso em: 8 set. 2010.
NXP SEMICONDUCTORS. UM10204. I2C-bus specification and user manual, junho 2007. Disponivel em: <http://www.nxp.com/documents/user_manual/UM10204.pdf>. Acesso em: 13 out. 2010.
PRADO, S. Barramento I2C, 2007. Disponivel em: <http://www.embarcados.com.br/Artigos/Hardware-Embarcado/Barramento-I2C.html>. Acesso em: 13 out. 2010.
PRESTES, R. F. et al. Estudo do Motor de Passo e seu controle digital, 2001. Disponivel em: <http://recreio.gta.ufrj.br/grad/01_1/motor/>. Acesso em: 5 out. 2010.
ROBOT ELECTRONICS. Using the I2C Bus, 2010. Disponivel em: <http://www.robot-electronics.co.uk/acatalog/I2C_Tutorial.html>. Acesso em: 14 out. 2010.
SICA, C. B. S. D. Programando displays de cristal líqüido a partir da porta paralela do PC, 2010. Disponivel em: <http://www.din.uem.br/sica/material/artigo-lcd.pdf>. Acesso em: 12 out. 2010.
SOARES, M. J. Faça placas de circuito impresso com acabamento semiprofissional. Saber Eletrônica, 2008. Disponivel em: <http://www.sabereletronica.com.br/secoes/leitura/728>. Acesso em: 17 Abr 2011.
SOUZA, J. D. Desbravando o PIC: ampliado e atualizado para PIC16F628A. 12ª. ed. São Paulo: Érica, 2008.
UNIVERSIDADE FEDERAL DE LAVRAS. UFLA - Programa de Pós-Graduação em Engenharia de Sistemas, 2010. Disponivel em: <http://www.prpg.ufla.br/ppg/esistemas/_adm/upload/file/Ementas/sistemas embarcados pos graduacao.pdf>. Acesso em: 20 ago. 2010.
UNIVERSIDADE PRESBITERIANA MACKENZIE. Portal Mackenzie: Microprocessadores I, 2010. Disponivel em: <http://www.mackenzie.br/5919.html>. Acesso em: 20 ago. 2010.
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ. UTFPR — Site, 2010. Disponivel em: <http://pessoal.utfpr.edu.br/amauriassef/arquivos/2010_2 Pens AI32C - Sistemas Microprocessados_Amauri_D.pdf>. Acesso em: 20 ago. 2010.
VERLE, M. PIC microcontrollers. 1ª. ed. [S.l.]: mikroElektronika, 2008. Disponivel em: <http://www.mikroe.com/eng/products/view/11/book-pic-microcontrollers/>. Acesso em: 10 set. 2010.
116
YEDAMALE, P.; CHATTOPADHYAY, S. AN822. Stepper Motor Microstepping with PIC18C452, março 2002. Disponivel em: <http://ww1.microchip.com/downloads/en/AppNotes/00822a.pdf>. Acesso em: 15 out. 2010.
ZANCO, W. D. S. Microcontrolador PIC16F628A/648A: uma abordagem prática e objetiva. 2ª. ed. São Paulo: Érica, 2007.
APÊNDICES
118
APÊNDICE A
/***************************************************************************** ------------------------------------------------------------------- | Validação das chaves de Interrupção Externa (INT0, INT1 e INT2) | ------------------------------------------------------------------- PIC18F4520 => Interrupções Externas PORTB.RB0 => INT0 PORTB.RB1 => INT1 PORTB.RB2 => INT2 PORTB.RB3 => LED I/O *****************************************************************************/ /* Função de tratamento de interrupções */ void interrupt() { if (INTCON.INT0IF) { // Limpa flag sinalizador de interrupção externa INT0 INTCON.INT0IF = 0; PORTB.RB3 = ~PORTB.RB3; } if (INTCON3.INT1IF) { // Limpa flag sinalizador de interrupção externa INT1 INTCON3.INT1IF = 0; PORTB.RB3 = ~PORTB.RB3; } if (INTCON3.INT2IF) { // Limpa flag sinalizador de interrupção externa INT2 INTCON3.INT2IF = 0; PORTB.RB3 = ~PORTB.RB3; } } void main() { ADCON1 = 0x0F; // Configura todos os pinos A/D como I/O TRISB.RB0 = 1; TRISB.RB1 = 1; TRISB.RB2 = 1; TRISB.RB3 = 0; PORTB.RB3 = 1; RCON.IPEN = 0; // interrupções sem prioridade INTCON.GIE = 1; // habilita interrupção globais INTCON.PEIE = 1; // habilita interrupção de periféricos INTCON2.RBPU = 1; // desabilita resistores de pull-up internos do PORTB INTCON.INT0IE = 1; // habilita interrupção externa INT0 INTCON3.INT1IE = 1; // habilita interrupção externa INT1 INTCON3.INT2IE = 1; // habilita interrupção externa INT2 INTCON.INT0IF = 0; // limpa ocorrência da interrupção externa INT0 INTCON3.INT1IF = 0; // limpa ocorrência da interrupção externa INT1 INTCON3.INT2IF = 0; // limpa ocorrência da interrupção externa INT2 INTCON2.INTEDG0 = 0; // aciona interrupção INT0 na borda de descida INTCON2.INTEDG1 = 1; // aciona interrupção INT1 na borda de subida INTCON2.INTEDG2 = 0; // aciona interrupção INT2 na borda de descida }
Figura 73. Código fonte do Experimento A.
119
APÊNDICE B
/***************************************************************************** ----------------------- | Validação do RS-232 | ----------------------- PIC18F4520 => RS-232 PORTC.RC6 => T1IN PORTC.RC7 => R1OUT Obs.: Usar a biblioteca UART do MikroC PRO for PIC *****************************************************************************/ void main() { unsigned char uart_rd; UART1_Init(9600); // Inicializa UART em 9600 bps Delay_ms(100); UART1_Write_Text("alo mundo!"); // visualizar no Hyper Teninal UART1_Write(13); UART1_Write(10); // quebra de linha while (1) { if (UART1_Data_Ready()) { uart_rd = UART1_Read(); if (uart_rd == 13) { UART1_Write(10); } UART1_Write(uart_rd); } } }
Figura 74. Código fonte do Experimento B.
120
APÊNDICE C
/***************************************************************************** ------------------------------- | Validação do I²C com EEPROM | ------------------------------- PIC18F4520 => Memoria Eeprom I²C PORTC.RC3 => SCL PORTC.RC4 => SDA Obs.: Utilizar biblioteca I2C do MikroC PRO for PIC *****************************************************************************/ #define I2C_EEPROM_ADDR_AND_WRITE 0xA2 // Endereço da EEPROM + W #define I2C_EEPROM_ADDR_AND_READ 0xA3 // Endereço da EEPROM + R #define FREQ_CLOCK_SCL 100000 // frequência de clock do I²C void i2c_eeprom_write(unsigned char endereco, unsigned char valor) { I2C1_Start(); // sinal de Start I2C1_Wr(I2C_EEPROM_ADDR_AND_WRITE); // envia endereço da EEPROM + W I2C1_Wr(endereco); // envia endereço interno EEPROM I2C1_Wr(valor); // envia valor a ser gravado I2C1_Stop(); // sinal de Stop } void i2c_eeprom_write_array(unsigned char endereco, unsigned char* valor, unsigned char n) { unsigned char i; I2C1_Start(); // sinal de Start I2C1_Wr(I2C_EEPROM_ADDR_AND_WRITE); // envia endereço da EEPROM + W I2C1_Wr(endereco); // envia endereço interno da EEPROM for (i = 0; i < n; i++) { I2C1_Wr(valor[i]); // envia valor a n vezes } I2C1_Stop(); // sinal de Stop } unsigned char i2c_eeprom_read(unsigned char endereco) { unsigned char valor = 0; I2C1_Start(); // sinal de Start I2C1_Wr(I2C_EEPROM_ADDR_AND_WRITE); // envia endereço da EEPROM + W I2C1_Wr(endereco); // envia endereço interno da EEPROM I2C1_Repeated_Start(); // repetir sinal de Start I2C1_Wr(I2C_EEPROM_ADDR_AND_READ); // envia endereço da EEPROM + R valor = I2C1_Rd(0); // recebe valor do endereço corrente I2C1_Stop(); // sinal de Stop return valor; } void main() { unsigned char array_valor[] = {8, 7, 6, 5}; unsigned char i; I2C1_Init(FREQ_CLOCK_SCL); i2c_eeprom_write(0x00, 9); Delay_ms(10); i2c_eeprom_write_array(0x01, array_valor, 4); Delay_ms(10); i = i2c_eeprom_read(0x02); }
Figura 75. Código fonte do Experimento C.
121
APÊNDICE D
/***************************************************************************** ---------------------------- | Validação do I²C com RTC | ---------------------------- PIC18F4520 => Relógio de Tempo Real PORTC.RC3 => SCL PORTC.RC4 => SDA Obs.: Utilizar biblioteca I2C do MikroC PRO for PIC *****************************************************************************/ #define FREQ_CLOCK_SCL 100000 #define I2C_RTC_ADDR_AND_WRITE 0xD0 // Endereço do RTC + W #define I2C_RTC_ADDR_AND_READ 0xD1 // Endereço do RTC + R #define ADDR_SECONDS 0x00 // Endereço de segundos #define ADDR_MINUTES 0x01 // Endereço de minutos #define ADDR_HOURS 0x02 // Endereço de hora #define ADDR_DAY 0x03 // Endereço de dia da semana #define ADDR_DATE 0x04 // Endereço de dia do mes #define ADDR_MONTH 0x05 // Endereço de mes #define ADDR_YEAR 0x06 // Endereço de ano #define ADDR_CTRL 0x07 // Endereço de controle unsigned char i2c_char_to_rtc(unsigned char endereco, unsigned char valor) { if (endereco != ADDR_CTRL) { valor = ((valor/10) << 4) + (valor % 10); } return valor; } unsigned char i2c_rtc_to_char(unsigned char endereco, unsigned char valor) { if (endereco != ADDR_CTRL) { valor = 10*(valor >> 4) + (valor & 0x0F); } return valor; } unsigned char i2c_char_to_rtc_hora(unsigned char hora, unsigned char formato_hora) { unsigned meio_dia = 0; formato_hora = (formato_hora != 0) << 6; if (formato_hora) { if (hora == 0) { hora = 12; } else { if (hora >= 12) { meio_dia = 0b00100000; hora -= hora > 12 ? 12 : 0; } } } hora = i2c_char_to_rtc(ADDR_HOURS, hora); hora += formato_hora + meio_dia; return hora; }
Figura 76. Código fonte do Experimento D.
122
unsigned char i2c_rtc_to_char_hora(unsigned char hora) { hora = hora & 0b00011111; return i2c_rtc_to_char(ADDR_HOURS, hora); } void i2c_rtc_set(unsigned char endereco, unsigned char valor) { I2C1_Start(); // sinal de Start I2C1_Wr(I2C_RTC_ADDR_AND_WRITE); // envia endereço do RTC + W I2C1_Wr(endereco); // envia endereço interno do RTC I2C1_Wr(valor); // envia valor a ser gravado I2C1_Stop(); // sinal de Stop } void i2c_rtc_set_all(unsigned char* tempo) { unsigned char i; I2C1_Start(); // sinal de Start I2C1_Wr(I2C_RTC_ADDR_AND_WRITE); // envia endereço do RTC + W I2C1_Wr(0x00); // envia endereço interno do RTC for (i = 0; i < 8; i++) { I2C1_Wr(tempo[i]); // envia valores a serem gravados } I2C1_Stop(); // sinal de Stop } unsigned char i2c_rtc_get(unsigned char endereco) { unsigned char valor; I2C1_Start(); // sinal de Start I2C1_Wr(I2C_RTC_ADDR_AND_WRITE); // envia endereço do RTC + W I2C1_Wr(endereco); // envia endereço interno do RTC I2C1_Repeated_Start(); // repetir sinal de Start I2C1_Wr(I2C_RTC_ADDR_AND_READ); // envia endereço RTC + R valor = I2C1_Rd(0); // leitura do valor no endereço corrente I2C1_Stop(); // sinal de Stop return valor; } void i2c_rtc_set_segundo(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_SECONDS, valor); i2c_rtc_set(ADDR_SECONDS, valor); } void i2c_rtc_set_minuto(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_MINUTES, valor); i2c_rtc_set(ADDR_MINUTES, valor); } void i2c_rtc_set_hora(unsigned char hora, unsigned char formato_hora) { hora = i2c_char_to_rtc_hora(hora, formato_hora); i2c_rtc_set(ADDR_HOURS, hora); } void i2c_rtc_set_semana(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_DAY, valor); i2c_rtc_set(ADDR_DAY, valor); }
Figura 76. Código fonte do Experimento D. (continuação).
123
void i2c_rtc_set_dia(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_DATE, valor); i2c_rtc_set(ADDR_DATE, valor); } void i2c_rtc_set_mes(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_MONTH, valor); i2c_rtc_set(ADDR_MONTH, valor); } void i2c_rtc_set_ano(unsigned char valor) { valor = i2c_char_to_rtc(ADDR_YEAR, valor); i2c_rtc_set(ADDR_YEAR, valor); } void main() { unsigned char tempo[] = {1, 2, 3, 4, 5, 6, 7, 0b00000011}; I2C1_Init(FREQ_CLOCK_SCL); i2c_rtc_set_all(tempo); i2c_rtc_set_segundo(1); i2c_rtc_set_minuto(2); i2c_rtc_set_hora(3, 1); i2c_rtc_set_semana(4); i2c_rtc_set_dia(5); i2c_rtc_set_mes(6); i2c_rtc_set_ano(7); }
Figura 76. Código fonte do Experimento D. (continuação).
124
APÊNDICE E
/***************************************************************************** ----------------------------------------------- | Validação do acionamento digital do MOTOR 1 | ----------------------------------------------- PIC18F4520 => MOTOR 1 PORTA.RA0 => Acionamento digital Bobina 1 PORTA.RA1 => Acionamento digital Bobina 2 PORTA.RA2 => Acionamento digital Bobina 3 PORTA.RA3 => Acionamento digital Bobina 4 *****************************************************************************/ #define M1_B1 PORTA.RA0 #define M1_B2 PORTA.RA1 #define M1_B3 PORTA.RA2 #define M1_B4 PORTA.RA3 unsigned char posicao; // indice de passo unsigned char passo[] = { // passos em acionamento digital (b4, b3, b2, b1) 0b1001, 0b1000, 0b1100, 0b0100, 0b0110, 0b0010, 0b0011, 0b0001, }; void motor1_init(){ ADCON1 = 0x0F; // Configura todas as portas analógicas para digitais TRISA.RA0 = 0; TRISA.RA1 = 0; TRISA.RA2 = 0; TRISA.RA3 = 0; } void motor1_set_passo() { M1_B1 = (passo[posicao] & 0b00000001) == 0 ? 0 : 1; M1_B2 = (passo[posicao] & 0b00000010) == 0 ? 0 : 1; M1_B3 = (passo[posicao] & 0b00000100) == 0 ? 0 : 1; M1_B4 = (passo[posicao] & 0b00001000) == 0 ? 0 : 1; }
Figura 77. Código fonte do Experimento E.
125
/* Seta a nova posicao do MOTOR 1 * - sentido = se 1 gira em sentido horário. * = se -1 gira em sentido anti-horário. * - divisor_de_passo = se 1 anda em passo completo. * = se 2 anda em meio passo. */ void motor1_set_nova_posicao(signed char sentido, signed char divisor) { switch (sentido * divisor) { case 1 : posicao = posicao < 7 ? posicao + 2 : 1; break; case 2 : posicao = posicao < 7 ? posicao + 1 : 0; break; case -1 : posicao = posicao > 1 ? posicao - 2 : 7; break; case -2 : posicao = posicao > 0 ? posicao - 1 : 7; break; } } void main() { signed char sentido, divisor_passo; motor1_init(); sentido = 1; // 1 ou -1 divisor_passo = 1; // 1 ou 2 posicao = divisor_passo == 1 ? 1 : 0; if (sentido == -1) { motor1_set_nova_posicao(sentido, divisor_passo); } while (1) { motor1_set_passo(); motor1_set_nova_posicao(sentido, divisor_passo); Delay_ms(200); } }
Figura 77. Código fonte do Experimento E. (continuação).
126
APÊNDICE F
/***************************************************************************** -------------------------------------------- | Validação do controle do MOTOR 2 com PWM | -------------------------------------------- PIC18F4520 => MOTOR 2 PORTA.RA4 => CHAVE_B1_B3, Sinal de chaveamento do PWM1 entre as Bobinas 1 e 3 PORTA.RA5 => CHAVE_B2_B4, Sinal de chaveamento do PWM2 entre as Bobinas 2 e 4 PORTC.RC2 => Sinal PWM1 (CCP1) PORTC.RC1 => Sinal PWM2 (CCP2) Obs.: Utilizar biblioteca PWM do mikroC for PIC PRO FREQ_PWM => frequência de inicialização do sinal PWM PAUSA => delay aplicado entre as mudanças de sinal PWM (ms) *****************************************************************************/ #define CHAVE_B1_B3 PORTA.RA4 #define CHAVE_B2_B4 PORTA.RA5 #define FREQ_PWM 5000 #define PAUSA 200 const unsigned char duty_cicle[] = {255, 236, 180, 98, 0}; //8 const unsigned char upasso = 8; void motor2_set_chave(unsigned char b1_b3, unsigned char b2_b4) { CHAVE_B1_B3 = b1_b3; CHAVE_B2_B4 = b2_b4; } void motor2_start_pwm() { PWM1_Start(); PWM2_Start(); } void motor2_stop_pwm() { PWM1_Stop(); PWM2_Stop(); } void motor2_set_pwm(unsigned char pwm1_duty, unsigned char pwm2_duty) { motor2_stop_pwm(); PWM1_Set_Duty(pwm1_duty); PWM2_Set_Duty(pwm2_duty); motor2_start_pwm(); } void motor2_init() { ADCON1 = 0x0F; // Configura todas as portas analogicas para digitais TRISA.RA4 = 0; TRISA.RA5 = 0; motor2_set_chave(0, 1); PWM1_Init(FREQ_PWM); // Initialize PWM1 module at 5KHz PWM2_Init(FREQ_PWM); // Initialize PWM2 module at 5KHz motor2_start_pwm(); }
Figura 78. Código fonte do Experimento F.
127
void main() { signed char enrolamento_a, enrolamento_b; a = 0; b = 0; motor2_init(); motor2_set_pwm(duty_cicle[enrolamento_a], duty_cicle[enrolamento_b]); Delay_ms(PAUSA); while (1) { // diminui Duty Cicle do PWM 1 na bobina 1 while (a < upasso/2) { motor2_set_pwm(duty_cicle[++a], duty_cicle[b]); Delay_ms(PAUSA); } motor2_set_chave(1, 1); // chaveia PWM 1 para bobina 3 // aumenta Duty Cicle do PWM 1 na bobina 3 do { motor2_set_pwm(duty_cicle[--a], duty_cicle[b]); Delay_ms(PAUSA); } while (a > 0); // diminui Duty Cicle do PWM 2 na bobina 4 while (b < upasso/2) { motor2_set_pwm(duty_cicle[a], duty_cicle[++b]); Delay_ms(PAUSA); } motor2_set_chave(1, 0); // chaveia PWM 2 para bobina 2 // aumenta Duty Cicle do PWM 2 na bobina 2 do { motor2_set_pwm(duty_cicle[a], duty_cicle[--b]); Delay_ms(PAUSA); } while (b > 0); // diminui Duty Cicle do PWM 1 na bobina 3 while (a < upasso/2) { motor2_set_pwm(duty_cicle[++a], duty_cicle[b]); Delay_ms(PAUSA); } motor2_set_chave(0, 0); // chaveia PWM 1 para bobina 1 // aumenta Duty Cicle do PWM 1 na bobina 1 do { motor2_set_pwm(duty_cicle[--a], duty_cicle[b]); Delay_ms(PAUSA); } while (a > 0); // diminui Duty Cicle do PWM 2 na bobina 2 while (b < upasso/2) { motor2_set_pwm(duty_cicle[a], duty_cicle[++b]); Delay_ms(PAUSA); } motor2_set_chave(0, 1); // chaveia PWM 2 para bobina 4 // aumenta Duty Cicle do PWM 2 na bobina 2 do { motor2_set_pwm(duty_cicle[a], duty_cicle[--b]); Delay_ms(PAUSA); } while (b > 0); } }
Figura 78. Código fonte do Experimento F. (continuação).
128
APÊNDICE G
/****************************************************************************** ----------------------- | Configuração do LCD | ----------------------- PIC18F4520 => Display LCD PORTB.RB7 => D7 PORTB.RB6 => D6 PORTB.RB5 => D5 PORTB.RB4 => D4 PORTE.RE0 => R/W PORTE.RE1 => EN PORTE.RE2 => RS Obs.: Utilizar biblioteca LCD do mikroC PRO for PIC ******************************************************************************/ // LCD module connections sbit LCD_RS at RE2_bit; sbit LCD_EN at RE1_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISE2_bit; sbit LCD_EN_Direction at TRISE1_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // End LCD module connections void lcd_pic_config() { ADCON1 = 0x0F; TRISE.RE0 = 0; TRISE.RE1 = 0; TRISE.RE2 = 0; TRISB.RB4 = 0; TRISB.RB5 = 0; TRISB.RB6 = 0; TRISB.RB7 = 0; PORTE.RE0 = 0; // R/W aterrado } void lcd_start() { lcd_pic_config(); Lcd_Init(); Lcd_Cmd(0x28); //identifica LCD = 4 bits, 2 linha, 5x8 matriz de caracter Lcd_Cmd(0x0C); //liga LCD (sem cursor) Lcd_Cmd(0x01); //limpa LCD com cursor home Lcd_Cmd(0x06); //desloca cursor para direita ao entrar caracter }
Figura 79. Código fonte do Experimento G.
129
void lcd_num(unsigned char num) { unsigned char valor[3]; valor[0] = num/100; valor[1] = (num/10) % 10; valor[2] = num % 10; if (valor[0] == 0) { Lcd_Chr_Cp(' '); } else { Lcd_Chr_Cp(valor[0] + 0x30); } if (valor[1] == 0 && valor[0] == 0) { Lcd_Chr_Cp(' '); } else { Lcd_Chr_Cp(valor[1] + 0x30); } Lcd_Chr_Cp(valor[2] + 0x30); } void lcd_cursor_pos(unsigned short int coluna, unsigned short int linha) { unsigned short int i; if (linha == 1) { Lcd_Cmd(0x80); } else { Lcd_Cmd(0xC0); } for (i = 1; i < coluna; i++) { Lcd_Cmd(0x14); } } void main(){ unsigned short int i = 0; lcd_start(); Lcd_Out(1, 1, "Contar ate 100"); Lcd_Out(2, 1, "i = "); while (1) { lcd_cursor_pos(5, 2); lcd_num(i); i = i < 100 ? i + 1 : 0; Delay_ms(50); } }
Figura 79. Código fonte do Experimento G. (continuação).
130
APÊNDICE H
#include "lib/lcd.c" // funções LCD do Apêndice G /****************************************************************************** ----------------------------------------- | Configuração do Teclado Matricial 4x4 | ----------------------------------------- PIC18F4520 => Teclado Matricial 4x4 PORTD.RD0 => Linha 1 PORTD.RD1 => Linha 2 PORTD.RD2 => Linha 3 PORTD.RD3 => Linha 4 PORTD.RD4 => Coluna 1 PORTD.RD5 => Coluna 2 PORTD.RD6 => Coluna 3 PORTD.RD7 => Coluna 4 ******************************************************************************/ sbit LINHA_1 at RD0_bit; sbit LINHA_2 at RD1_bit; sbit LINHA_3 at RD2_bit; sbit LINHA_4 at RD3_bit; sbit COLUNA_1 at RD4_bit; sbit COLUNA_2 at RD5_bit; sbit COLUNA_3 at RD6_bit; sbit COLUNA_4 at RD7_bit; void teclado_init() { //Linhas como saidas e Colunas como entrada TRISD = 0b11110000; LINHA_1 = 1; LINHA_2 = 1; LINHA_3 = 1; LINHA_4 = 1; } void teclado_escreve_linha(unsigned char linha) { switch (linha) { case 1 : { LINHA_1 = 0; LINHA_2 = 1; LINHA_3 = 1; LINHA_4 = 1; break; } case 2 : { LINHA_1 = 1; LINHA_2 = 0; LINHA_3 = 1; LINHA_4 = 1; break; } case 3 : { LINHA_1 = 1; LINHA_2 = 1; LINHA_3 = 0; LINHA_4 = 1; break; } case 4 : { LINHA_1 = 1; LINHA_2 = 1; LINHA_3 = 1; LINHA_4 = 0; break; } } }
Figura 80. Código fonte do Experimento H.
131
unsigned char teclado_le_coluna() { if (COLUNA_1 == 0) { return 1; } if (COLUNA_2 == 0) { return 2; } if (COLUNA_3 == 0) { return 3; } if (COLUNA_4 == 0) { return 4; } return 0; } /* Retorna Hexa do codigo da tecla do teclado - coordenada da LINHA = 4 bits mais significativos - coordenada da COLUNA = 4 bits menos significativos - 0x00 = nao apertou nenhuma tecla */ unsigned char teclado_varredura() { unsigned char t_linha, t_coluna, tecla; t_linha = 0; t_coluna = 0; tecla = 0x00; while (t_linha < 5 && t_coluna == 0) { t_linha++; teclado_escreve_linha(t_linha); t_coluna = teclado_le_coluna(); } if (t_coluna != 0) { tecla = (t_linha << 4) + t_coluna; } return tecla; } void main(){ unsigned char teclado; unsigned char linha, coluna; lcd_start(); teclado_init(); Lcd_Out(1, 1, "TECLADO MATRICIAL"); Lcd_Out(2, 1, "TECLA(L,C) = "); while (1) { teclado = teclado_varredura(); if (teclado > 0x00) { linha = (teclado & 0xF0) >> 4; coluna = (teclado & 0x0F); lcd_cursor_pos(14, 2); Lcd_Chr_Cp(linha + 0x30); Lcd_Chr_Cp(','); Lcd_Chr_Cp(coluna + 0x30); } Delay_ms(50); } }
Figura 80. Código fonte do Experimento H. (continuação).
132
APÊNDICE I
Figura 81. Circuito esquemático do Módulo Controlador.
133
APÊNDICE J
Figura 82. Circuito esquemático do Módulo I²C.
134
APÊNDICE K
Figura 83. Circuito esquemático do Módulo Motor de Passo.
135
APÊNDICE L
Figura 84. Circuito esquemático do Módulo Display LCD.
136
APÊNDICE M
Figura 85. Circuito esquemático do Módulo Teclado Matricial.
137
APÊNDICE N
A Figura 86 mostra o footprint da placa protótipo do Módulo Controlador, sendo que as
ligações entre as vias devem ser realizadas com jumpers.
Figura 86. Footprint da placa do Módulo Controlador.
A Figura 87 representa o layer do protótipo do Módulo Controlador em escala 1:1.
Figura 87. Layer da placa do Módulo Controlador.
138
APÊNDICE O
A Figura 88 mostra o footprint da placa protótipo do Módulo I²C.
Figura 88. Footprint da placa do Módulo I²C.
A Figura 89 representa o layer do protótipo do Módulo I²C em escala 1:1.
Figura 89. Layer da placa do Módulo I²C.
139
APÊNDICE P
A Figura 90 mostra o footprint da placa protótipo do Módulo Motor de Passo, sendo que as
ligações entre as vias devem ser realizadas com jumpers.
Figura 90. Footprint da placa do Módulo Motor de Passo.
A Figura 91 representa o layer do protótipo do Módulo Motor de Passo em escala 1:1.
Figura 91. Layer da placa do Módulo Motor de Passo.
140
APÊNDICE Q
A Figura 92 mostra o footprint da placa protótipo do Módulo Display LCD, sendo que as
ligações entre as vias devem ser realizadas com jumpers.
Figura 92. Footprint da placa do Módulo Display LCD.
A Figura 93 representa o layer do protótipo do Módulo Display LCD em escala 1:1.
Figura 93. Layer da placa do Módulo Display LCD.
141
APÊNDICE R
A Figura 94 mostra o footprint da placa protótipo do Módulo Teclado Matricial, sendo que
as ligações entre as vias devem ser realizadas com jumpers.
Figura 94. Footprint da placa do Módulo Teclado Matricial.
A Figura 95 representa o layer do protótipo do Módulo Teclado Matricial em escala 1:1.
Figura 95. Layer da placa do Módulo Teclado Matricial.
142
APÊNDICE S
As figuras deste Apêndice apresentam o footprint das placas finais dos módulos do kit.
Figura 96. Footprint da placa do Módulo Controlador na versão final.
Figura 97. Footprint da placa do Módulo I²C na versão final.
143
Figura 98. Footprint da placa do Módulo Motor de Passo na versão final.
Figura 99. Footprint da placa do Módulo Display LCD na versão final.
144
Figura 100. Footprint da placa do Módulo Teclado Matricial na versão final.
ANEXOS
146
ANEXO I
O Anexo I apresenta Tabela 22 com a descrição dos pinos do PIC18F4520 contendo a
identificação do pino na ordem de distribuição, seu nome quanto as funções que ele exerce e uma
descrição das mesmas.
Tabela 22. Descrição dos pinos do PIC18F4520
Pinos Nome Descrição
1 MCLR
VPP RE3
Entrada do sinal de reset Entrada de tensão para modo programação Entrada digital
2 RA0 AN0
E/S digital Entrada analógica 0
3 RA1 AN1
E/S digital Entrada analógica 1
4
RA2 AN2 VREF- CVREF
E/S digital Entrada analógica 2 Entrada da voltagem A/D de referência negativa Saída da voltagem de referência
5 RA3 AN3 VREF+
E/S digital Entrada analógica 3 Entrada da voltagem A/D de referência positiva
6 RA4
T0CKI C1OUT
E/S digital Entrada do clock do temporizador 0 Saída do comparador C1
7
RA5 AN4
SS HLVDIN C2OUT
E/S digital Entrada analógica 4 Entrada SPI de seleção de escravo Entrada de detecção de voltagem alta/baixa Saída do comparador C2
8 RE0 RD
AN5
E/S digital Porta de leitura do controle de escravo paralelo Entrada analógica 5
9 RE1 WR AN6
E/S digital Porta de escrita do controle de escravo paralelo Entrada analógica 6
10 RE2 CS
AN7
E/S digital Porta seletora do controle de escravo paralelo Entrada analógica 7
11 VDD Alimentação do chip 12 VSS Aterramento do chip
Fonte: Adaptado de Microchip Technology (2008).
147
Tabela 22. Descrição dos pinos do PIC18F4520(continuação)
Pinos Nome Descrição
13 OSC1 CLKI RA7
Entrada de oscilador externo Entrada do clock externo. Sempre associado ao OSC1 E/S digital
14
OSC2 CLKO
RA6
Saída de oscilador externo Saída do clock externo. No modo RC, CLKO mantém ¼ da frequência de OSC1 contendo o ciclo de instrução E/S digital
15 RC0
T1OSO T13CKI
E/S digital Saída do oscilador externo do temporizador 1 Entrada do clock externo do temporizador 1 ou 3
16
RC1 T1OSI CCP2
E/S digital Entrada do oscilador externo do temporizador 1 Entrada Captura 2/ Saída Compara 2/ Saída PWM 2 (alternativa para CCP2 quando CCP2MX desabilitado)
17 RC2
CCP1 P1A
E/S digital Entrada Captura 1/ Saída Compara 1/ Saída PWM 1 Saída CCP1 reforçada
18 RC3 SCK SCL
E/S digital E/S do clock de comunicação serial síncrona para SPI E/S do clock de comunicação serial síncrona para I2C
19 RD0 PSP0
E/S digital E/S de dados do escravo paralelo
20 RD1 PSP1
E/S digital E/S de dados do escravo paralelo
21 RD2 PSP2
E/S digital E/S de dados do escravo paralelo
22 RD3 PSP3
E/S digital E/S de dados do escravo paralelo
23 RC4 SDI SDA
E/S digital Entrada de dados SPI E/S de dados I2C
24 RC5 SDO
E/S digital Saída de dados SPI
25
RC6 TX
CK
E/S digital Saída do transmissor EUSART (Enhanced USART) assíncrono E/S do clock EUSART síncrono
26 RC7 RX DT
E/S digital Entrada do receptor EUSART assíncrono E/S de dados EUSART síncrono
27 RD4 PSP4
E/S digital E/S de dados do escravo paralelo
Fonte: Adaptado de Microchip Technology (2008).
148
Tabela 22. Descrição dos pinos do PIC18F4520 (continuação)
Pinos Nome Descrição
28 RD5 PSP5 P1B
E/S digital E/S de dados do escravo paralelo Saída CCP1 reforçada
29 RD6 PSP6 P1C
E/S digital E/S de dados do escravo paralelo Saída CCP1 reforçada
30 RD7 PSP7 P1D
E/S digital E/S de dados do escravo paralelo Saída CCP1 reforçada
31 VSS Aterramento do chip 32 VDD Alimentação do chip
33
RB0 INT0 FLT0 AN12
E/S digital Entrada Interrupção externa 0 Entrada de Falha PWM para reforço em CCP1 Entrada analógica 12
34 RB1 INT1 AN10
E/S digital Entrada Interrupção externa 1 Entrada analógica 10
35 RB2 INT2 AN8
E/S digital Entrada Interrupção externa 2 Entrada analógica 8
36
RB3 AN9 CCP2
E/S digital Entrada analógica 9 Entrada Captura 2/ Saída Compara 2/ Saída PWM 2 (alternativa para CCP2 quando CCP2MX habilitado)
37 RB4 KBI0 AN11
E/S digital Interrupção de mudança de estado Entrada analógica 11
38
RB5 KBI1 PGM
E/S digital Interrupção de mudança de estado E/S de habilitação de programação ICSP (In-Circuit Serial Programming) em baixa voltagem
39 RB6 KBI2 PGC
E/S digital Interrupção de mudança de estado E/S do clock do depurador e de programação ICSP
40
RB7 KBI3 PGD
E/S digital Interrupção de mudança de estado E/S de dados do depurador in-Circuit e programação ICSP
Fonte: Adaptado de Microchip Technology (2008).
149
ANEXO II
O Anexo II contém a Tabela 23, Tabela 24, Tabela 25 e Tabela 26 onde são apresentadas
brevemente a descrição das instruções reconhecidas pelo montador assembler da Microchip
(MPASMTM). Em cada tabela, está contido o mnemónico da instrução (primeira coluna), os
operandos (segunda coluna), números de ciclos gastos para executar a instrução (terceira coluna) e
uma descrição baseada nos operadores aritméticos, lógicos, bit a bit e relacionais da linguagem
ANSI-C (American National Standards Institute padrão C, quarta coluna). Para entendimento das
tabelas, é necessária a compreensão de alguns símbolos:
a : bit de acesso a memória RAM. Se a for ‘0’ (zero), acessa os primeiros 128 bytes
(registrador BSR é ignorado). Se a for ‘1’ (um) ou for omitido, acessa os registradores
GPR, do banco especificado em BSR;
f : registrador ou posição da memória de dados;
W : registrador Working Register para as operações da ULA;
d : destino de operação. Se d for ‘0’ (zero), resultado é armazenado em W. Se d for ‘1’
(um) ou for omitido, resultado é armazenado em f;
b : endereço de um bit dentro de um registrador;
C : bit Carry flag (bit indicador de “vai-um”);
k : valor numérico constante;
{ } : elementos entre chaves podem ser omitidos;
n : endereço relativo ou absoluto de uma instrução ou rótulo de uma sub-rotina;
s : bit de seleção do modo Fast Call/Return. Se s for ‘1’ (um), salva o contexto de
hardware do microcontrolador. Se s for ‘0’ (zero) ou for omitido, não salva o contexto
de hardware do microcontrolador; e
--- : a instrução não utiliza operandos.
150
Tabela 23. Instruções de operações orientadas a byte
Mnemônico Operandos Ciclos Descrição ADDWF f{, d{, a}} 1 d = W + f ADDWFC f{, d{, a}} 1 d = W + f + C ANDWF f{, d{, a}} 1 d = W & f CLRF f{, a} 1 f = 0x000 COMF f{, d{, a}} 1 d = ~f
CPFSEQ f{, a} 1 (2 ou 3) f – W (comparação sem sinal). Não realiza a próxima instrução se f = W
CPFSGT f{, a} 1 (2 ou 3) f – W (comparação sem sinal). Não realiza a próxima instrução se f > W
CPFSLT f{, a} 1 (2 ou 3) f – W (comparação sem sinal). Não realiza a próxima instrução se f < W
DECF f{, d{, a}} 1 d = f – 1
DECFSZ f{, d{, a}} 1 (2 ou 3) d = f – 1. Não realiza a próxima instrução se resultado for 0
DCFSNZ f{, d{, a}} 1 (2 ou 3) d = f – 1. Não realiza a próxima instrução se resultado for diferente de 0
INCF f{, d{, a}} 1 d = f + 1
INCFSZ f{, d{, a}} 1 (2 ou 3) d = f + 1. Não realiza a próxima instrução se resultado for 0
INFSNZ f{, d{, a}} 1 (2 ou 3) d = f + 1. Não realiza a próxima instrução se resultado for diferente de 0
IORWF f{, d{, a}} 1 d = W | f MOVF f{, d{, a}} 1 d = f MOVFF forigem, fdestino 2 fdestino = forigem MOVWF f{, a} 1 f = W MULWF f{, a} 1 PRODH:PRODL = W * f NEGF f{, a} 1 d = ~f + 1 RLCF f{, d{, a}} 1 d = f << 1 rotação à esquerda passando por C RLNCF f{, d{, a}} 1 d = f << 1 rotação à esquerda sem passar por C RRCF f{, d{, a}} 1 d = f >> 1 rotação à direita passando por C RRNCF f{, d{, a}} 1 d = f >> 1 rotação à direita sem passar por C SETF f{, a} 1 f = 0xFF SUBFWB f{, d{, a}} 1 d = W – f – (~C) SUBWF f{, d{, a}} 1 d = f – W SUBWFB f{, d{, a}} 1 d = f – W – (~C) SWAPF f{, d{, a}} 1 fL = fH e fH = fL (troca parte alta com parte baixa de f) TSTFSZ f{, a} 1 (2 ou 3) Testa f. Não realiza se f = 0 XORWF f{, d{, a}} 1 d = W ^ f
Fonte: Adaptado de Microchip Technology (2008).
151
Tabela 24. Instruções de operações orientadas a bit
Mnemônico Operandos Ciclos Descrição BCF f, b{, a} 1 f[b] = 0 BSF f, b{, a} 1 f[b] = 1 BTFSC f, b{, a} 1 (2 ou 3) Não realiza a próxima instrução se f[b] == 0 BTFSS f, b{, a} 1 (2 ou 3) Não realiza a próxima instrução se f[b] == 1 BTG f, b{, a} 1 f[b] = ~f[b]
Fonte: Adaptado de Microchip Technology (2008).
Tabela 25. Instruções de operações literais
Mnemônico Operandos Ciclos Descrição ADDLW k 1 W = W + k ANDLW k 1 W = W & k IORLW k 1 W = W | k LFSR f, k 2 FSR (File Select Register) = k (apontado por f) MOVLB k 1 BSR = k MOVLW k 1 W = k MULLW k 1 PRODH:PRODL = W * k SUBLW k 1 W = k – W XORLW k 1 W = W ^ k
Fonte: Adaptado de Microchip Technology (2008).
Tabela 26. Instruções de operações de controle
Mnemônico Operandos Ciclos Descrição
BC n 1 (2) Salta para o endereço relativo n se o bit Carry de STATUS for 1
BN n 1 (2) Salta para o endereço relativo n se o bit Negative de STATUS for 1
BNC n 1 (2) Salta para o endereço relativo n se o bit Carry de STATUS for 0
BNN n 1 (2) Salta para o endereço relativo n se o bit Negative de STATUS for 0
BNOV n 1 (2) Salta para o endereço relativo n se o bit Overflow de STATUS for 0
BNZ n 1 (2) Salta para o endereço relativo n se o bit Zero de STATUS for 0
BOV n 1 (2) Salta para o endereço relativo n se o bit Overflow de STATUS for 1
BRA n 2 Salta para o endereço relativo rotina n (incondicional)
Fonte: Adaptado de Microchip Technology (2008).
152
Tabela 26. Instruções de operações de controle (continuação).
Mnemônico Operandos Ciclos Descrição
BZ n 1 (2) Salta para o endereço relativo n se o bit Zero de STATUS for 1
CALL n{, s} 2 Salta para a sub-rotina de rótulo n podendo salvar registradores W, STATUS e BSR
CLRWDT --- 1 WDT (Watchdog Timer) = 0x000 DAW --- 1 Converte valor de W para decimal GOTO n 2 Salta para o endereço absoluto n (incondicional) NOP --- 1 Não realiza operação por um ciclo de clock POP --- 1 Descarta valor do topo da pilha PUSH --- 1 Armazena o endereço da próxima instrução no topo da pilha
RCALL n 2 Armazena o endereço da próxima instrução no topo da pilha e salta para a sub-rotina de rótulo n
RESET --- 1 Reinicializa o microcontrolador
RETFIE {s} 2 Retorna de uma interrupção podendo recuperar o contexto de hardware (caso tenha sido salvado)
RETLW k 2 Retorna de uma sub-rotina e W = k RETURN {s} 2 Retorna de uma sub-rotina SLEEP ---- 1 Microcontrolador entra em modo de espera
Fonte: Adaptado de Microchip Technology (2008).
No data sheet do PIC18F4520, pode-se encontrar maiores detalhes do seu conjunto de
instruções.
153
ANEXO III
O Anexo III corresponde a algumas das funções da biblioteca UART, do compilador
MicroC PRO for PIC, utilizada a validação do Módulo Controlador. Sua documentação pode ser
obtida através do Help contido no compilador, onde é descrita por “The UART hardware module is
available with a number of PIC compliant MCUs. The mikroC PRO for PIC UART Library
provides comfortable work with the Asynchronous (full duplex) mode.”.
ROTINAS DA BIBLIOTECA UART
As rotinas da biblioteca UART utilizadas, foram:
UART1_Init:
o Protótipo: void UART1_Init(const unsigned long baud_rate);
o Retorno: Nada;
o Descrição: Inicializa módulo de hardware UART com a taxa de transmissão
desejada. Consulte o data sheet do componente para as taxas de transmissão
permitidas para a frequência do oscilador especificada. Se especificado uma taxa de
transmissão não suportada, o compilador retornará um erro.
o Requisitos: O microcontrolador PIC necessita do módulo de hardware UART.
UART1_Init precisa ser chamada antes de usar outras funções da biblioteca;
o Parâmetros: baud_rate (taxa de transmissão desejada);
o Exemplo: Inicialização do módulo de hardware UART1 com taxa de transmissão de
2400 bps. UART1_Init(2400).
UART1_Data_Ready:
o Protótipo: char UART1_Data_Ready();
o Retorno: 1, se o dado está pronto para leitura, ou 0, se não tiver nenhum dado no
registrador do buffer de recepção;
o Descrição: Usado para testar se os dados no buffer de recepção estão preparados
para a leitura.
o Requisitos: Módulo de hardware UART1 necessita ser inicializado;
154
o Exemplo: Se o dado estiver pronto, leia-o. if (UART1_Data_Ready() == 1) { /*
leitura do dado*/ };
UART1_Read:
o Protótipo: char UART1_Read();
o Retorno: Retorna o dado recebido;
o Descrição: Recebe o dado via UART. Deve-se usar primeiro a função
UART1_Data_Ready para testar se o dado está pronto para ser lido.
o Requisitos: Módulo de hardware UART1 necessita ser inicializado;
o Exemplo: receive = UART1_Read();
UART1_Write:
o Protótipo: void UART1_Write(char _data);
o Retorno: Nada;
o Descrição: Transmite um byte via módulo de hardware UART.
o Parâmetros: _data (sado a ser transmitido);
o Requisitos: Módulo de hardware UART1 necessita ser inicializado;
o Exemplo: unsigned char _data = 0x1E; UART1_Write(_data);
UART1_Write_Text:
o Protótipo: void UART1_Write_Text(char * UART_text);
o Retorno: Nada;
o Descrição: Transmite um texto via módulo de hardware UART. O texto necessita ter
valor 0 na terminação;
o Parâmetros: UART_text (texto a ser transmitido);
o Requisitos: Módulo de hardware UART1 necessita ser inicializado;
o Exemplo: unsigned char *output = “texto”; UART1_Write_Text(output);
155
ANEXO IV
O Anexo IV corresponde a algumas das funções da biblioteca I2C, do compilador MicroC
PRO for PIC, utilizada a validação do Módulo I²C. Sua documentação pode ser obtida através do
Help contido no compilador, onde é descrita por “I²C full master MSSP module is available with a
number of PIC MCU models. mikroC PRO for PIC provides library which supports the master I²C
mode.”.
ROTINAS DA BIBLIOTECA I2C
As rotinas da biblioteca I2C utilizadas, foram:
I2C1_Init:
o Protótipo: void I2C1_Init(const unsigned long clock);
o Retorno: Nada;
o Descrição: Inicializa módulo de hardware I²C com clock desejado. Consulte o data
sheet do componente para os valores corretos correspondentes frequência do
oscilador. Necessita ser chamada antes de usar as outras funções da biblioteca. Não
necessita configurar as portas manualmente para usar o módulo, a biblioteca realiza
o tratamento na inicialização.
o Requisitos: O microcontrolador PIC necessita do módulo de hardware MSSP no
PORTB ou PORTC;
o Parâmetros: clock (frequência da linha de clock);
o Exemplo: Inicializa comunicação I²C com 100 kHz. I2C1_Init(100000);.
I2C1_Start:
o Protótipo: unsigned short I2C1_Start(void);
o Retorno: Se não houver erro, retorna 0;
o Descrição: Determina se o barramento I²C está livre e aplica sinal de Start.
o Requisitos: I²C necessita ser configurado antes de usar a função;
o Exemplo: I2C1_Start();
156
I2C1_Repeated_Start:
o Protótipo: void I2C1_Repeated_Start(void);
o Retorno: Nada;
o Descrição: Repete o sinal de Start.
o Requisitos: I²C necessita ser configurado antes de usar a função;
o Exemplo: I2C1_Repeated_Start();
I2C1_Rd:
o Protótipo: unsigned short I2C1_Rd(unsigned short ack);
o Retorno: Retorna um byte do escravo;
o Descrição: Retorna um byte do escravo e envia um sinal NACK, se o parâmetro for
0, caso contrário envia um ACK.
o Parâmetros: ack (sinal de resposta ao escravo pelo recebimento do byte);
o Requisitos: I²C necessita ser configurado antes de usar a função. Deve-se enviar um
sinal de Start antes de usar essa função;
o Exemplo: unsigned short take; take = I2C1_Rd(0);
I2C1_Wr:
o Protótipo: unsigned short I2C1_Wr(unsigned short data_);
o Retorno: Retorna 0 se não houver erro;
o Descrição: Envia um byte de dado via barramento I²C;
o Parâmetros: data_ (byte a ser enviado para o escravo pelo barramento I²C);
o Requisitos: I²C necessita ser configurado antes de usar a função. Deve-se enviar um
sinal de Start antes de usar essa função;
o Exemplo: I2C1_Write(0xA3);
I2C1_Stop:
o Protótipo: void I2C1_Stop(void);
o Retorno: Nada;
157
o Descrição: Envia um byte de dado via barramento I²C;
o Requisitos: I²C necessita ser configurado antes de usar a função;
o Exemplo: I2C1_Stop();
158
ANEXO V
O Anexo V corresponde a algumas das funções da biblioteca PWM, do compilador MicroC
PRO for PIC, utilizada a validação do Módulo Motor de Passo. Sua documentação pode ser obtida
através do Help contido no compilador, onde é descrita por “CCP module is available with a
number of PIC MCUs. mikroC PRO for PIC provides library which simplifies using PWM HW
Module.”.
ROTINAS DA BIBLIOTECA PWM
As rotinas da biblioteca PWM utilizadas, foram:
PWM1_Init:
o Protótipo: void PWM1_Init(const long freq);
o Retorno: Nada;
o Descrição: Inicializa módulo de hardware PWM com ciclo ativo do período PWM
em 0, determinado pelo parâmetro freq correspondente a frequência do sinal PWM
desejado em Hz. Consulte o data sheet do componente para os valores corretos
correspondentes. Necessita ser chamada antes de usar as outras funções da
biblioteca.
o Requisitos: O microcontrolador PIC necessita do módulo de hardware CCP;
o Parâmetros: freq (frequência do sinal PWM em Hz);
o Exemplo: PWM1_Init(5000);
PWM1_Set_Duty:
o Protótipo: void PWM1_Set_Duty(unsigned short duty_ratio);
o Retorno: Nada;
o Descrição: Determina o ciclo ativo do sinal PWM. Pode variar de 0 até 255, onde 0
corresponde à 0% , 127 à 50%, e 255 à 100% de ciclo ativo. Outros valores do ciclo
ativo pode ser calculado a partir de (Percent*255)/100;
o Parâmetros: duty_ratio (ciclo ativo do sinal PWM);
159
o Requisitos: Microcontrolador necessita do módulo de hardware CCP. A função
PWM1_Init necessita ser chamada antes de utilizar essa função;
o Exemplo: PWM1_Set_Duty(192);
PWM1_Start:
o Protótipo: void PWM1_Start(void);
o Retorno: Nada;
o Descrição: Inicia PWM.
o Requisitos: Microcontrolador necessita do módulo de hardware CCP. A função
PWM1_Init necessita ser chamada antes de utilizar essa função;
o Exemplo: PWM1_Start();
PWM1_Stop:
o Protótipo: void PWM1_Stop(void);
o Retorno: Nada;
o Descrição: Para PWM.
o Requisitos: Microcontrolador necessita do módulo de hardware CCP. A função
PWM1_Init necessita ser chamada antes de utilizar essa função. PWM1_Start deve
ser chamada antes dessa função, caso contrário não terá efeito;
o Exemplo: PWM1_Stop();
160
ANEXO VI
O Anexo VI corresponde a algumas das funções da biblioteca LCD, do compilador MicroC
PRO for PIC, utilizada a validação do Módulo Display LCD. Sua documentação pode ser obtida
através do Help contido no compilador, onde é descrita por “The mikroC PRO for PIC provides a
library for communication with Lcds (with HD44780 compliant controllers) through the 4-bit
interface. An example of Lcd connections is given on the schematic at the bottom of this page.”.
ROTINAS DA BIBLIOTECA LCD
As rotinas da biblioteca LCD utilizadas, foram:
Lcd_Init:
o Protótipo: void Lcd_Init();
o Retorno: Nada;
o Descrição: Inicializa módulo LCD.
o Requisitos: Variáveis globais que devem ser definidas antes de utilizar a função:
LCD_D7: Pino do bit de dados 7 do LCD
LCD_D6: Pino do bit de dados 6 do LCD
LCD_D5: Pino do bit de dados 5 do LCD
LCD_D4: Pino do bit de dados 4 do LCD
LCD_RS: Pino de controle RS do LCD
LCD_EN: Pino de controle E do LCD
LCD_D7_Direction: Direção do pino do bit de dados 7 do LCD
LCD_D6_Direction: Direção do pino do bit de dados 6 do LCD
LCD_D5_Direction: Direção do pino do bit de dados 5 do LCD
LCD_D4_Direction: Direção do pino do bit de dados 4 do LCD
LCD_RS_Direction: Direção do pino de controle RS do LCD
LCD_EN_Direction: Direção do pino de controle E do LCD.
161
o Parâmetros: Nenhum;
o Exemplo:
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
...
Lcd_Init();
Lcd_Out:
o Protótipo: void Lcd_Out(char row, char column, char *text);
o Retorno: Nada;
o Descrição: Imprimi texto no Lcd a partir de uma posição específica;
o Parâmetros:
row: linha da posição inicial
column: coluna da posição inicial
text: texto (literal ou variável) a ser impresso;
o Requisitos: o módulo LCD necessita ser inicializado;
o Exemplo:
// Impressão do texto "Hello!" no LCD iniciando na linha 1, coluna 3
Lcd_Out(1, 3, "Hello!");
162
Lcd_Out_Cp:
o Protótipo: void Lcd_Out_Cp(char *text);
o Retorno: Nada;
o Descrição: Imprimi texto no Lcd a partir de uma posição atual do cursor;
o Parâmetros: text: texto (literal ou variável) a ser impresso;
o Requisitos: o módulo LCD necessita ser inicializado;
o Exemplo:
// Impressão do texto "Here!" no LCD iniciando na posição atual do cursor
Lcd_Out_Cp("Here!");
Lcd_Chr:
o Protótipo: void Lcd_Chr(char row, char column, char out_char);
o Retorno: Nada;
o Descrição: Imprimi caractere no Lcd em uma posição específica;
o Parâmetros:
row: linha da posição
column: coluna da posição
out_char: caractere (literal ou variável) a ser impresso;
o Requisitos: o módulo LCD necessita ser inicializado;
o Exemplo:
// Impressão do caractere "i" na linha 2, coluna 3
Lcd_Chr(2, 3, 'i');
Lcd_Chr_Cp:
o Protótipo: void Lcd_Chr_Cp(char out_char);
o Retorno: Nada;
o Descrição: Imprimi caractere no Lcd na posição atual do cursor;
o Parâmetros: out_char: caractere (literal ou variável) a ser impresso;
163
o Requisitos: o módulo LCD necessita ser inicializado;
o Exemplo:
// Impressão do caractere "e" na posição atual do cursor
Lcd_Chr_Cp('e');
Lcd_Cmd:
o Protótipo: void Lcd_Cmd(char out_char);
o Retorno: Nada;
o Descrição: Envia um comando ao Lcd;
o Parâmetros: out_char: comando a ser enviado (deve ser um comando válido);
o Requisitos: o módulo LCD necessita ser inicializado;
o Exemplo:
// limpa LCD com cursor em home
Lcd_Cmd(0x01);