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
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
                                                        iv
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




                                                  v
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
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

                                  vii
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




                                viii
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
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

                                                                   x
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




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


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


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


                                                     4
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



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




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




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




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




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




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




                                               12
Tabela 2. Características dos grupos de microcontroladores PIC
Palavra de
                      12 bits                         14 bits                        16 bits
instrução
Grupo                                                        Enhanced
                     Baseline         Mid-Range                                     PIC18
                                                             Mid-Range
Pinos                   6-40             8-64                   8-64                18-100
Interrupções      Não possui       Tratamento          Tratamento único de Tratamento múltiplo
                  tratamento de    único de            interrupção salvando de interrupção
                  interrupções     interrupção         contexto de hardware salvando contexto de
                                                                            hardware
Performance          5 MIPS*           5 MIPS*                8 MIPS*           Até 16 MIPS*
Nº de
                         33               35                    49                     83
Instruções
Memória de
                   Até 3K bytes     Até 14K bytes          Até 28K bytes         Até 128K bytes
Programa
Memória de
                   Até 134 bytes     Até 368 bytes        Até 1.5K bytes          Até 4K bytes
Dados
Pilha (Stack)          2 níveis         8 níveis              16 níveis              32 níveis
Módulos            Comparador     Além da             Além do Mid-Range:     Além do Enhanced
internos           8 bits A/D     Baseline:            Múltipla             Mid-Range:
                   Memória de      SPI (Serial         comunicação de        Multiplicação 8x8
                    dados            Peripheral          periféricos            em hardware
                   Oscilador        Interface)/I²C     Espaço de             CAN
                    interno         UART                programação linear    CTMU (Charge
                                    PWMs               PWMs com Time          Time Measurement
                                    LCD                 Base independentes     Unit)
                                    10 bits A/D                               USB
                                    Amplificador                              Ethernet
                                     Operacional                               12 bits A/D
Destaque          Menor custo      Ótimo custo         Custo efetivo com      Alta performance,
                  nos menores      benefício em        mais performance e     otimização em
                  modelos          performance         memória                programas em C,
                                                                              periféricos avançados
Total de
                         16               58                    29                    193
dispositivos
Famílias          PIC10, PIC12,                           PIC12F1XXX,
                                    PIC12, PIC16                                     PIC18
                     PIC16                                PIC16F1XXX
*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.




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




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




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




                                              16
Tabela 3. Descrição das funcionalidades dos pinos compatíveis entre os microcontroladores PIC
exemplificados
                                                      Nome da função          Nome da função
Pino        Descrição da função compatível
                                                     para família PIC16      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
       Entrada do sinal de reset                            MCLR                   MCLR
  4
       Entrada de tensão para modo programação               VPP                    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
       E/S digital                                          RB6                     RB6
 12
       Entrada do clock de programação ICSPTM            ICSPCLK*                   PGC
       E/S digital                                          RB7                     RB6
 13
       Entrada do dados de programação ICSPTM            ICSPDAT*                   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,



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




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




                                                19
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



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



                                                21
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




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



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




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




                                                     25
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



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




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



                                               28
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”.




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




                                               30
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


                                                     31
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


                                                    32
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


                                                33
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



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




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



                                               36
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;


                                                        37
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”.




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



                                              39
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


                                               40
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



                                                41
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;



                                                42
    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-


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




                                                   44
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.
                        Procedimento que assegura que a mensagem, em modo multi-mestre, não
Arbitragem
                        seja comprometida.
                        Procedimento para sincronizar os sinais de clock de dois ou mais
Sincronização
                        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.



                                                45
(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).




                                                 46
(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.




                                                  47
(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


                                                 48
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


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


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




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




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


                                                53
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”.


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




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


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




                                                 57
=       ∗ 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
                  Corrente na         Corrente na       Ciclo ativo do sinal Ciclo ativo do sinal
Micro-passo
                   Bobina 1            Bobina 2         digital na Bobina 1 digital na Bobina 2
      1                1              sen        ∗1            100%                   9.8%
                                            32
      2                1              sen        ∗2            100%                   19.5%
                                            32
      3                1              sen        ∗3            100%                   29.0%
                                            32
      4                1              sen        ∗4            100%                   38.3%
                                            32
      5                1              sen        ∗5            100%                   47.1%
                                            32
      6                1              sen        ∗6            100%                   55.6%
                                            32
      7                1              sen        ∗7            100%                   63.4%
                                            32
      8                1              sen        ∗8            100%                   70.7%
                                            32
      9                1              sen    ∗9                100%                   77.3%
                                         32
      10               1             sen    ∗ 10               100%                   83.1%
                                         32
      11               1             sen    ∗ 11               100%                   88.2%
                                         32
      12               1             sen    ∗ 12               100%                   92.4%
                                         32
Fonte: Adaptado de Yedamale e Chattopadhyay (2002).




                                                  58
Tabela 7. Proporção de ocupação do ciclo ativo de um sinal para 32 micro-passo por passo
(continuação)
                 Corrente na         Corrente na      Ciclo ativo do sinal Ciclo ativo do sinal
Micro-passo
                  Bobina 1            Bobina 2        digital na Bobina 1 digital na Bobina 2
      13               1            sen        ∗ 13          100%                   95.7%
                                          32
      14               1            sen        ∗ 14          100%                   98.1%
                                          32
      15               1            sen        ∗ 15          100%                   99.5%
                                          32
      16               1            sen        ∗ 16          100%                   100%
                                          32
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).




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




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




                                                 61
Tabela 8. Exemplo de varredura em uma matriz de ordem quatro, onde c23 foi pressionado.
                Escrita nas Linhas   Leitura das Colunas
    Varredura                                                            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


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




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




                                                64
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)
                         0 = bits de dados são interpretados como comando de instrução
    4           RS
                         1 = bits de dados são interpretados como caracteres
                         0 = escreve dado (do controlador para o LCD)
    5           R/W
                         1 = lê dado (do LCD para o controlador)
                         0 = acesso ao LCD desabilitado
    6            E       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”;



                                                 65
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
                                       Liga (sem cursor)                             0C
    Display
                                       Desliga                                     0A / 08
    Limpa display com cursor home                                                    01
                                       Liga                                          0E
                                       Desliga                                       0C
                                       Desloca para esquerda                         10
    Controle do cursor                 Desloca para direita                          14
                                       Cursor home                                   02
                                       Cursor piscante                               0D
                                       Cursor com alternância                        0F
    Sentido de deslocamento do         Para esquerda                                 04
    cursor ao entrar com caractere     Para direita                                  06
    Deslocamento da mensagem ao        Para esquerda                                 07
    entrar com caractere               Para direita                                  05
    Deslocamento da mensagem           Para esquerda                                 18
    Sem entrada de caractere           Para direita                                  1C
                                       Primeira linha                                80
    Endereço da primeira posição
                                       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.


                                                    66
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
                                                     Matriz de caracteres
  Nº de bits de dados      Linhas do display                                Código Hexadecimal
                                                      (Coluna x linha)
                                                             5x8                   20-23
                                    1
                                                            5x11                   24-27
           4
                                                             5x8                   28-2B
                                    2
                                                            5x11                   2C-2F
                                                             5x8                   30-33
                                    1
                                                            5x11                   34-37
           8
                                                             5x8                   38-3B
                                    2
                                                            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.




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




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




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




               Módulo                                                       Módulo
                I2C                                                       Motor de Passo

                                             Módulo
                                            Controlador

              Módulo                                                          Módulo
          Teclado Matricial                                                 Display LCD




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.




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



                                               72
   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;




                                              73
   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;




                                                74
   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


                                               75
   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


                                                76
dos pinos do microcontrolador e da fonte de alimentação (12 volts, 5 volts e terra) contidos no
Módulo Controlador.



                                               Módulo                              Módulo
        Módulo               Módulo                                Módulo
                                               Motor de                            Teclado
       Controlador            I2C                                Display LCD
                                                Passo                              Matricial


                                            Barramento KMD

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    Módulo           Módulo             Módulo         Módulo
  Pino         Nome Controlador  I²C           Motor de Passo     Display LCD Teclado Matricial
        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



                                                  77
Tabela 12. Relação dos pinos do PIC18F4520 com os módulos do kit (continuação)

  PIC18F4520       Módulo    Módulo           Módulo             Módulo         Módulo
  Pino      Nome Controlador  I²C           Motor de Passo     Display LCD Teclado Matricial
   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.




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




                                                79
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


                                                       80
   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.


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




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




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




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


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


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




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




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


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



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




                                               91
(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,


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




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




                                                94
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;



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


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




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




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




                                             99
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
                                                 Combinação dos Módulos
Validação Experimento
                               Posição 1   Posição 2   Posição 3   Posição 4          Posição 5
                                                        Teclado     Display           Motor de
     1             A         Controlador      I²C
                                                       Matricial     LCD                Passo
                                                        Display     Teclado           Motor de
     2              B        Controlador      I²C
                                                         LCD       Matricial            Passo
                                            Teclado                 Display           Motor de
     3              C        Controlador                  I²C
                                           Matricial                 LCD                Passo
                                            Teclado     Display                       Motor de
     4             D         Controlador                              I²C
                                           Matricial     LCD                            Passo



                                               100
Tabela 14. Validação dos experimentos realizados nas combinações dos módulos (continuação)
                                                      Combinação dos Módulos
Validação Experimento
                                  Posição 1     Posição 2   Posição 3   Posição 4       Posição 5
                                                 Display     Teclado                    Motor de
       5               E        Controlador                                I²C
                                                  LCD       Matricial                     Passo
                                                 Display                 Teclado        Motor de
       6               F        Controlador                    I²C
                                                  LCD                   Matricial         Passo
                                                             Teclado     Display        Motor de
       7               G        Controlador        I²C
                                                            Matricial     LCD             Passo
                                                             Display     Teclado        Motor de
       8               H        Controlador        I²C
                                                              LCD       Matricial         Passo
                                                 Teclado                 Display        Motor de
       9              C*        Controlador                    I²C
                                                Matricial                 LCD             Passo
                                                 Teclado     Display                    Motor de
       10             D*        Controlador                                I²C
                                                Matricial     LCD                         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;




                                                    101
(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;


                                                102
(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).




                                                  103
Tabela 15. Mudanças dos protótipos para as placas finais dos módulos
       Mudança               Módulos afetados                         Justificativa
Adicionado um conector         Controlador         Possibilitar que o Módulo seja posicionado de
do Barramento KMD             Motor de Passo       forma aleatória no kit
Substituído um dos                 I²C
                                                   Possibilitar que os módulos sejam conectados
conectores do                  Display LCD
                                                   sem necessidade de componentes externos
Barramento KMD               Teclado Matricial
                               Controlador
Adicionadas                        I²C
                                                   Possibilitar que o usuário identifique os pinos do
identificações dos pinos      Motor de Passo
                                                   Barramento KMD na própria placa
do Barramento KMD              Display LCD
                             Teclado Matricial
                               Controlador
Adicionadas                        I²C             Possibilitar que o usuário identifique os
identificações dos            Motor de Passo       componentes de um determinado recurso do
recursos da placa              Display LCD         módulo na própria placa
                             Teclado Matricial
Reposicionados os              Controlador         Agrupamento dos componentes na placa de
componentes no módulo         Motor de Passo       acordo com sua funcionalidade
                                                   Possibilitar que o usuário escolha entre utilizar o
Adicionado componente
                                                   oscilador externo ou o oscilador interno do MCU,
de seleção do oscilador         Controlador
                                                   liberando os pinos RA7 e RA6 para serem usados
externo
                                                   em um determinado projeto
                                                   Possibilitar que o usuário conecte os motores de
Substituídos conectores
                              Motor de Passo       passo a partir de um conector padrão de fácil
dos motores de passo
                                                   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.




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



                                              105
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
                                                           R$ 0,09           2      R$ 0,18
(0,01uF/10K/10KpF/103)
Circuito Integrado 24C04 (ATMLU934 04B/ATMLU938
                                                           R$ 1,19           1      R$ 1,19
04B)
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
                                                           R$ 0,10           2      R$ 0,20
(0,1uF/100K/100Kpf/104)
Capacitor Disco Cerâmico 10nF x 50V
                                                           R$ 0,09           2      R$ 0,18
(0,01uF/10K/10KpF/103)
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.


                                               106
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
                                                            R$ 0,10          1      R$ 0,10
(0,1uF/100K/100Kpf/104)
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
                                                            R$ 15,99         1      R$ 15,99
(80x36x13)
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 .




                                               107
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
                                                                                R$ 2,79   5    R$ 13,95
    10x15cm
    Kit para Confecção de PCI Suekit CK-15:
    - 1 cortador de placa simples;
    - 1 caneta para traçagem;
                                                                               R$ 27,99   1    R$ 27,99
    - 1 perfurador de placa;
    - 1 percloreto de ferro; e
    - 1 manual de instruções.
    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.


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




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




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




                                               112
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_pro
duto=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.
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.



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




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




                                           116
APÊNDICES
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.




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




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




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



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




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




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




                                             124
/* 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).




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




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




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



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




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




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




                                              131
APÊNDICE I




Figura 81. Circuito esquemático do Módulo Controlador.



                                                         132
APÊNDICE J




Figura 82. Circuito esquemático do Módulo I²C.



                                                 133
APÊNDICE K




Figura 83. Circuito esquemático do Módulo Motor de Passo.



                                                            134
APÊNDICE L




Figura 84. Circuito esquemático do Módulo Display LCD.



                                                         135
APÊNDICE M




Figura 85. Circuito esquemático do Módulo Teclado Matricial.



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




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




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




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




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




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




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




                                              143
Figura 100. Footprint da placa do Módulo Teclado Matricial na versão final.




                                               144
ANEXOS
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
                   MCLR                 Entrada do sinal de reset
  1                 VPP                 Entrada de tensão para modo programação
                    RE3                 Entrada digital
                    RA0                 E/S digital
  2
                    AN0                 Entrada analógica 0
                    RA1                 E/S digital
  3
                    AN1                 Entrada analógica 1
                    RA2                 E/S digital
                    AN2                 Entrada analógica 2
  4
                    VREF-               Entrada da voltagem A/D de referência negativa
                   CVREF                Saída da voltagem de referência
                    RA3                 E/S digital
  5                 AN3                 Entrada analógica 3
                   VREF+                Entrada da voltagem A/D de referência positiva
                    RA4                 E/S digital
  6                T0CKI                Entrada do clock do temporizador 0
                  C1OUT                 Saída do comparador C1
                    RA5                 E/S digital
                    AN4                 Entrada analógica 4
  7                  SS                 Entrada SPI de seleção de escravo
                  HLVDIN                Entrada de detecção de voltagem alta/baixa
                  C2OUT                 Saída do comparador C2
                    RE0                 E/S digital
  8                  RD                 Porta de leitura do controle de escravo paralelo
                    AN5                 Entrada analógica 5
                    RE1                 E/S digital
  9                 WR                  Porta de escrita do controle de escravo paralelo
                    AN6                 Entrada analógica 6
                    RE2                 E/S digital
  10                 CS                 Porta seletora do controle de escravo paralelo
                    AN7                 Entrada analógica 7
  11                VDD                 Alimentação do chip
  12                VSS                 Aterramento do chip
Fonte: Adaptado de Microchip Technology (2008).




                                               146
Tabela 22. Descrição dos pinos do PIC18F4520(continuação)
Pinos              Nome                                      Descrição
                   OSC1               Entrada de oscilador externo
  13               CLKI               Entrada do clock externo. Sempre associado ao OSC1
                    RA7               E/S digital
                   OSC2               Saída de oscilador externo
                   CLKO               Saída do clock externo. No modo RC, CLKO mantém ¼
  14
                                      da frequência de OSC1 contendo o ciclo de instrução
                    RA6               E/S digital
                    RC0               E/S digital
  15              T1OSO               Saída do oscilador externo do temporizador 1
                  T13CKI              Entrada do clock externo do temporizador 1 ou 3
                    RC1               E/S digital
                   T1OSI              Entrada do oscilador externo do temporizador 1
  16
                   CCP2               Entrada Captura 2/ Saída Compara 2/ Saída PWM 2
                                      (alternativa para CCP2 quando CCP2MX desabilitado)
                   RC2                E/S digital
  17               CCP1               Entrada Captura 1/ Saída Compara 1/ Saída PWM 1
                   P1A                Saída CCP1 reforçada
                   RC3                E/S digital
  18               SCK                E/S do clock de comunicação serial síncrona para SPI
                   SCL                E/S do clock de comunicação serial síncrona para I2C
                   RD0                E/S digital
  19
                   PSP0               E/S de dados do escravo paralelo
                   RD1                E/S digital
  20
                   PSP1               E/S de dados do escravo paralelo
                   RD2                E/S digital
  21
                   PSP2               E/S de dados do escravo paralelo
                   RD3                E/S digital
  22
                   PSP3               E/S de dados do escravo paralelo
                   RC4                E/S digital
  23                SDI               Entrada de dados SPI
                   SDA                E/S de dados I2C
                   RC5                E/S digital
  24
                   SDO                Saída de dados SPI
                   RC6                E/S digital
                    TX                Saída do transmissor EUSART (Enhanced USART)
  25
                                      assíncrono
                    CK                E/S do clock EUSART síncrono
                   RC7                E/S digital
  26                RX                Entrada do receptor EUSART assíncrono
                    DT                E/S de dados EUSART síncrono
                   RD4                E/S digital
  27
                   PSP4               E/S de dados do escravo paralelo
Fonte: Adaptado de Microchip Technology (2008).




                                            147
Tabela 22. Descrição dos pinos do PIC18F4520 (continuação)
Pinos              Nome                                       Descrição
                   RD5                 E/S digital
  28               PSP5                E/S de dados do escravo paralelo
                    P1B                Saída CCP1 reforçada
                   RD6                 E/S digital
  29               PSP6                E/S de dados do escravo paralelo
                    P1C                Saída CCP1 reforçada
                   RD7                 E/S digital
  30               PSP7                E/S de dados do escravo paralelo
                    P1D                Saída CCP1 reforçada
  31                VSS                Aterramento do chip
  32                VDD                Alimentação do chip
                    RB0                E/S digital
                   INT0                Entrada Interrupção externa 0
  33
                   FLT0                Entrada de Falha PWM para reforço em CCP1
                   AN12                Entrada analógica 12
                    RB1                E/S digital
  34               INT1                Entrada Interrupção externa 1
                   AN10                Entrada analógica 10
                    RB2                E/S digital
  35               INT2                Entrada Interrupção externa 2
                   AN8                 Entrada analógica 8
                    RB3                E/S digital
                   AN9                 Entrada analógica 9
  36
                   CCP2                Entrada Captura 2/ Saída Compara 2/ Saída PWM 2
                                       (alternativa para CCP2 quando CCP2MX habilitado)
                   RB4                 E/S digital
  37               KBI0                Interrupção de mudança de estado
                   AN11                Entrada analógica 11
                   RB5                 E/S digital
                   KBI1                Interrupção de mudança de estado
  38
                   PGM                 E/S de habilitação de programação ICSP (In-Circuit
                                       Serial Programming) em baixa voltagem
                    RB6                E/S digital
  39                KBI2               Interrupção de mudança de estado
                    PGC                E/S do clock do depurador e de programação ICSP
                    RB7                E/S digital
                    KBI3               Interrupção de mudança de estado
  40
                    PGD                E/S de dados do depurador in-Circuit e programação
                                       ICSP
Fonte: Adaptado de Microchip Technology (2008).




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




                                                  149
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
                                                f – W (comparação sem sinal). Não realiza a próxima
CPFSEQ         f{, a}              1 (2 ou 3)
                                                instrução se f = W
                                                f – W (comparação sem sinal). Não realiza a próxima
CPFSGT         f{, a}              1 (2 ou 3)
                                                instrução se f > W
                                                f – W (comparação sem sinal). Não realiza a próxima
CPFSLT         f{, a}              1 (2 ou 3)
                                                instrução se f < W
DECF           f{, d{, a}}         1            d=f–1
                                                d = f – 1. Não realiza a próxima instrução se resultado
DECFSZ         f{, d{, a}}         1 (2 ou 3)
                                                for 0
                                                d = f – 1. Não realiza a próxima instrução se resultado
DCFSNZ         f{, d{, a}}         1 (2 ou 3)
                                                for diferente de 0
INCF           f{, d{, a}}         1            d=f+1
                                                d = f + 1. Não realiza a próxima instrução se resultado
INCFSZ         f{, d{, a}}         1 (2 ou 3)
                                                for 0
                                                d = f + 1. Não realiza a próxima instrução se resultado
INFSNZ         f{, d{, a}}         1 (2 ou 3)
                                                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).




                                                      150
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
                                          Salta para o endereço relativo n se o bit Carry de STATUS
BC             n             1 (2)
                                          for 1
                                          Salta para o endereço relativo n se o bit Negative de STATUS
BN             n             1 (2)
                                          for 1
                                          Salta para o endereço relativo n se o bit Carry de STATUS
BNC            n             1 (2)
                                          for 0
                                          Salta para o endereço relativo n se o bit Negative de STATUS
BNN            n             1 (2)
                                          for 0
                                          Salta para o endereço relativo n se o bit Overflow de
BNOV           n             1 (2)
                                          STATUS for 0
                                          Salta para o endereço relativo n se o bit Zero de STATUS for
BNZ            n             1 (2)
                                          0
                                          Salta para o endereço relativo n se o bit Overflow de
BOV            n             1 (2)
                                          STATUS for 1
BRA            n             2            Salta para o endereço relativo rotina n (incondicional)
Fonte: Adaptado de Microchip Technology (2008).




                                                    151
Tabela 26. Instruções de operações de controle (continuação).
 Mnemônico Operandos Ciclos                                     Descrição
                                     Salta para o endereço relativo n se o bit Zero de STATUS for
BZ             n            1 (2)
                                     1
                                     Salta para a sub-rotina de rótulo n podendo salvar
CALL           n{, s}       2
                                     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
                                     Armazena o endereço da próxima instrução no topo da pilha
RCALL          n            2
                                     e salta para a sub-rotina de rótulo n
RESET          ---          1        Reinicializa o microcontrolador
                                     Retorna de uma interrupção podendo recuperar o contexto de
RETFIE         {s}          2
                                     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.




                                               152
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;


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




                                       154
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();



                                                155
   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;



                                         156
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();




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



                                                158
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();




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



                                                160
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!");




                                            161
   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;




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




                                        163

Kit Modular de Desenvolvimento Baseado em Microcontrolador PIC

  • 1.
    UNIVERSIDADE DO VALEDO 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
  • 2.
    UNIVERSIDADE DO VALEDO 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
  • 3.
    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
  • 4.
    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 iv
  • 5.
    APÊNDICE K....................................................................................... 134 APÊNDICEL ....................................................................................... 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 v
  • 6.
    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
  • 7.
    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 vii
  • 8.
    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 viii
  • 9.
    LISTA DE FIGURAS Figura1. 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
  • 10.
    Figura 46. Matrizm 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 x
  • 11.
    Figura 95. Layerda 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 xi
  • 12.
    LISTA DE TABELAS Tabela1. 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
  • 13.
    LISTA DE EQUAÇÕES Equação1 ...................................................................................................................................... 37 Equação 2 ...................................................................................................................................... 37 Equação 3 ...................................................................................................................................... 57 Equação 4 ...................................................................................................................................... 57 Equação 5 ...................................................................................................................................... 57 Equação 6 ...................................................................................................................................... 58
  • 14.
    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.
  • 15.
    ABSTRACT The prototyping ofembedded 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.
  • 16.
    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.
  • 17.
    Tabela 1. Exemplosde 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 2
  • 18.
    fabricantes dos kitsprocuram 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. 3
  • 19.
    Foram considerados módulosperifé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. 4
  • 20.
    Limitações podem ocorrerna 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 5
  • 21.
    publicações disponibilizadas nainternet 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. 6
  • 22.
    1.6 ESTRUTURA DOTRABALHO 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. 7
  • 23.
    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).
  • 24.
    A estrutura internado 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). 9
  • 25.
    2.1.1 Exemplo defabricantes 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). 10
  • 26.
    Por ser fabricantedo 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. 11
  • 27.
    Figura 3. Gráficoilustrado 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. 12
  • 28.
    Tabela 2. Característicasdos grupos de microcontroladores PIC Palavra de 12 bits 14 bits 16 bits instrução Grupo Enhanced Baseline Mid-Range PIC18 Mid-Range Pinos 6-40 8-64 8-64 18-100 Interrupções Não possui Tratamento Tratamento único de Tratamento múltiplo tratamento de único de interrupção salvando de interrupção interrupções interrupção contexto de hardware salvando contexto de hardware Performance 5 MIPS* 5 MIPS* 8 MIPS* Até 16 MIPS* Nº de 33 35 49 83 Instruções Memória de Até 3K bytes Até 14K bytes Até 28K bytes Até 128K bytes Programa Memória de Até 134 bytes Até 368 bytes Até 1.5K bytes Até 4K bytes Dados Pilha (Stack) 2 níveis 8 níveis 16 níveis 32 níveis Módulos  Comparador Além da Além do Mid-Range: Além do Enhanced internos  8 bits A/D Baseline:  Múltipla Mid-Range:  Memória de  SPI (Serial comunicação de  Multiplicação 8x8 dados Peripheral periféricos em hardware  Oscilador Interface)/I²C  Espaço de  CAN interno  UART programação linear  CTMU (Charge  PWMs  PWMs com Time Time Measurement  LCD Base independentes Unit)  10 bits A/D  USB  Amplificador  Ethernet Operacional  12 bits A/D Destaque Menor custo Ótimo custo Custo efetivo com Alta performance, nos menores benefício em mais performance e otimização em modelos performance memória programas em C, periféricos avançados Total de 16 58 29 193 dispositivos Famílias PIC10, PIC12, PIC12F1XXX, PIC12, PIC16 PIC18 PIC16 PIC16F1XXX *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. 13
  • 29.
    2.2.2 Exemplos demicrocontroladores 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. 14
  • 30.
    Figura 5. Diagramasimplificado 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). 15
  • 31.
    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. 16
  • 32.
    Tabela 3. Descriçãodas funcionalidades dos pinos compatíveis entre os microcontroladores PIC exemplificados Nome da função Nome da função Pino Descrição da função compatível para família PIC16 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 Entrada do sinal de reset MCLR MCLR 4 Entrada de tensão para modo programação VPP 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 E/S digital RB6 RB6 12 Entrada do clock de programação ICSPTM ICSPCLK* PGC E/S digital RB7 RB6 13 Entrada do dados de programação ICSPTM ICSPDAT* 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, 17
  • 33.
    oscilador externo eas 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). 18
  • 34.
    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. 19
  • 35.
    Figura 10. Vistaem 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 20
  • 36.
    chip pode variarbastante 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. 21
  • 37.
    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 22
  • 38.
    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). 23
  • 39.
    2.3.3 Recursos dehardware 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). 24
  • 40.
    A frequência geradapelo 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). 25
  • 41.
    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 26
  • 42.
    mesmo depois dochip 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). 27
  • 43.
    Deve-se evitar oacesso 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). 28
  • 44.
    Para escrever umdado 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”. 29
  • 45.
    O PIC18F4520 possui32 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). 30
  • 46.
    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 31
  • 47.
    ele é configuradocomo 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 32
  • 48.
    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 33
  • 49.
    endereço da interrupçãoquando 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 34
  • 50.
    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). 35
  • 51.
    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). 36
  • 52.
    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; 37
  • 53.
    3. Configure opino 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”. 38
  • 54.
    Figura 23. ModoPWM 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). 39
  • 55.
    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 40
  • 56.
    escravo SS (SlaveSelect) (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 41
  • 57.
    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; 42
  • 58.
    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- 43
  • 59.
    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. 44
  • 60.
    Tabela 4. Definiçõesdo 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. Procedimento que assegura que a mensagem, em modo multi-mestre, não Arbitragem seja comprometida. Procedimento para sincronizar os sinais de clock de dois ou mais Sincronização 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. 45
  • 61.
    (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). 46
  • 62.
    (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. 47
  • 63.
    (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 48
  • 64.
    escravo. Quando ocorrerde 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 49
  • 65.
    comunicação. O mecanismoda 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. 50
  • 66.
    Neste momento serãotratados 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. 51
  • 67.
    Figura 39. Gráficorelacionando 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). 52
  • 68.
    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. 53
  • 69.
    Figura 42. Circuitopara 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”. 54
  • 70.
    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). 55
  • 71.
    Tabela 6. Sequênciade 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. 56
  • 72.
    Figura 44. Sinaldigital 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. 57
  • 73.
    = ∗ 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 Corrente na Corrente na Ciclo ativo do sinal Ciclo ativo do sinal Micro-passo Bobina 1 Bobina 2 digital na Bobina 1 digital na Bobina 2 1 1 sen ∗1 100% 9.8% 32 2 1 sen ∗2 100% 19.5% 32 3 1 sen ∗3 100% 29.0% 32 4 1 sen ∗4 100% 38.3% 32 5 1 sen ∗5 100% 47.1% 32 6 1 sen ∗6 100% 55.6% 32 7 1 sen ∗7 100% 63.4% 32 8 1 sen ∗8 100% 70.7% 32 9 1 sen ∗9 100% 77.3% 32 10 1 sen ∗ 10 100% 83.1% 32 11 1 sen ∗ 11 100% 88.2% 32 12 1 sen ∗ 12 100% 92.4% 32 Fonte: Adaptado de Yedamale e Chattopadhyay (2002). 58
  • 74.
    Tabela 7. Proporçãode ocupação do ciclo ativo de um sinal para 32 micro-passo por passo (continuação) Corrente na Corrente na Ciclo ativo do sinal Ciclo ativo do sinal Micro-passo Bobina 1 Bobina 2 digital na Bobina 1 digital na Bobina 2 13 1 sen ∗ 13 100% 95.7% 32 14 1 sen ∗ 14 100% 98.1% 32 15 1 sen ∗ 15 100% 99.5% 32 16 1 sen ∗ 16 100% 100% 32 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). 59
  • 75.
    Figura 45. Chavede 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. 60
  • 76.
    Figura 46. Matrizm 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. 61
  • 77.
    Tabela 8. Exemplode varredura em uma matriz de ordem quatro, onde c23 foi pressionado. Escrita nas Linhas Leitura das Colunas Varredura 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 62
  • 78.
    software driver deLCD 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. 63
  • 79.
    Para o estudoserá 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). 64
  • 80.
    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) 0 = bits de dados são interpretados como comando de instrução 4 RS 1 = bits de dados são interpretados como caracteres 0 = escreve dado (do controlador para o LCD) 5 R/W 1 = lê dado (do LCD para o controlador) 0 = acesso ao LCD desabilitado 6 E 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”; 65
  • 81.
    2. Pino RSrecebe 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 Liga (sem cursor) 0C Display Desliga 0A / 08 Limpa display com cursor home 01 Liga 0E Desliga 0C Desloca para esquerda 10 Controle do cursor Desloca para direita 14 Cursor home 02 Cursor piscante 0D Cursor com alternância 0F Sentido de deslocamento do Para esquerda 04 cursor ao entrar com caractere Para direita 06 Deslocamento da mensagem ao Para esquerda 07 entrar com caractere Para direita 05 Deslocamento da mensagem Para esquerda 18 Sem entrada de caractere Para direita 1C Primeira linha 80 Endereço da primeira posição 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. 66
  • 82.
    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 Matriz de caracteres Nº de bits de dados Linhas do display Código Hexadecimal (Coluna x linha) 5x8 20-23 1 5x11 24-27 4 5x8 28-2B 2 5x11 2C-2F 5x8 30-33 1 5x11 34-37 8 5x8 38-3B 2 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. 67
  • 83.
    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. 68
  • 84.
    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
  • 85.
    ensino, como porexemplo: 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. 70
  • 86.
    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. Módulo Módulo I2C Motor de Passo Módulo Controlador Módulo Módulo Teclado Matricial Display LCD 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. 71
  • 87.
    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. 72
  • 88.
    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; 73
  • 89.
    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; 74
  • 90.
    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 75
  • 91.
    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 76
  • 92.
    dos pinos domicrocontrolador e da fonte de alimentação (12 volts, 5 volts e terra) contidos no Módulo Controlador. Módulo Módulo Módulo Módulo Módulo Motor de Teclado Controlador I2C Display LCD Passo Matricial Barramento KMD 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 Módulo Módulo Módulo Módulo Pino Nome Controlador I²C Motor de Passo Display LCD Teclado Matricial 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 77
  • 93.
    Tabela 12. Relaçãodos pinos do PIC18F4520 com os módulos do kit (continuação) PIC18F4520 Módulo Módulo Módulo Módulo Módulo Pino Nome Controlador I²C Motor de Passo Display LCD Teclado Matricial 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. 78
  • 94.
    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. 79
  • 95.
    Figura 52. Circuitode 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 80
  • 96.
    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. 81
  • 97.
    o 3 deentrada 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. 82
  • 98.
    Figura 54. Circuitode 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. 83
  • 99.
    Figura 55. Circuitode 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. 84
  • 100.
    Figura 56. Circuitode 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. 85
  • 101.
    Simulação do MóduloControlador 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. 86
  • 102.
    Os resultados dassimulaçõ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. 87
  • 103.
    Figura 58. Janelado 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. 88
  • 104.
    Figura 59. Janelado 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. 89
  • 105.
    Simulação do MóduloMotor 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. 90
  • 106.
    O gráfico foigerado 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. 91
  • 107.
    (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, 92
  • 108.
    tendo 100% doperí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. 93
  • 109.
    Simulação do MóduloTeclado 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. 94
  • 110.
    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; 95
  • 111.
    o Adição deum 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. 96
  • 112.
    2. Limpar ocobre 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. 97
  • 113.
    Figura 67. Imagemem 3D do protótipo do Módulo I²C. Figura 68. Imagem em 3D do protótipo do Módulo Motor de Passo. 98
  • 114.
    Figura 69. Imagemem 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. 99
  • 115.
    3.6.3 Modularidade dosprotó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 Combinação dos Módulos Validação Experimento Posição 1 Posição 2 Posição 3 Posição 4 Posição 5 Teclado Display Motor de 1 A Controlador I²C Matricial LCD Passo Display Teclado Motor de 2 B Controlador I²C LCD Matricial Passo Teclado Display Motor de 3 C Controlador I²C Matricial LCD Passo Teclado Display Motor de 4 D Controlador I²C Matricial LCD Passo 100
  • 116.
    Tabela 14. Validaçãodos experimentos realizados nas combinações dos módulos (continuação) Combinação dos Módulos Validação Experimento Posição 1 Posição 2 Posição 3 Posição 4 Posição 5 Display Teclado Motor de 5 E Controlador I²C LCD Matricial Passo Display Teclado Motor de 6 F Controlador I²C LCD Matricial Passo Teclado Display Motor de 7 G Controlador I²C Matricial LCD Passo Display Teclado Motor de 8 H Controlador I²C LCD Matricial Passo Teclado Display Motor de 9 C* Controlador I²C Matricial LCD Passo Teclado Display Motor de 10 D* Controlador I²C Matricial LCD 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; 101
  • 117.
    (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; 102
  • 118.
    (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). 103
  • 119.
    Tabela 15. Mudançasdos protótipos para as placas finais dos módulos Mudança Módulos afetados Justificativa Adicionado um conector Controlador Possibilitar que o Módulo seja posicionado de do Barramento KMD Motor de Passo forma aleatória no kit Substituído um dos I²C Possibilitar que os módulos sejam conectados conectores do Display LCD sem necessidade de componentes externos Barramento KMD Teclado Matricial Controlador Adicionadas I²C Possibilitar que o usuário identifique os pinos do identificações dos pinos Motor de Passo Barramento KMD na própria placa do Barramento KMD Display LCD Teclado Matricial Controlador Adicionadas I²C Possibilitar que o usuário identifique os identificações dos Motor de Passo componentes de um determinado recurso do recursos da placa Display LCD módulo na própria placa Teclado Matricial Reposicionados os Controlador Agrupamento dos componentes na placa de componentes no módulo Motor de Passo acordo com sua funcionalidade Possibilitar que o usuário escolha entre utilizar o Adicionado componente oscilador externo ou o oscilador interno do MCU, de seleção do oscilador Controlador liberando os pinos RA7 e RA6 para serem usados externo em um determinado projeto Possibilitar que o usuário conecte os motores de Substituídos conectores Motor de Passo passo a partir de um conector padrão de fácil dos motores de passo 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. 104
  • 120.
    3.8.1 Custo doscomponentes 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. 105
  • 121.
    Tabela 17. Custode 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 R$ 0,09 2 R$ 0,18 (0,01uF/10K/10KpF/103) Circuito Integrado 24C04 (ATMLU934 04B/ATMLU938 R$ 1,19 1 R$ 1,19 04B) 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 R$ 0,10 2 R$ 0,20 (0,1uF/100K/100Kpf/104) Capacitor Disco Cerâmico 10nF x 50V R$ 0,09 2 R$ 0,18 (0,01uF/10K/10KpF/103) 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. 106
  • 122.
    Tabela 19. Custode 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 R$ 0,10 1 R$ 0,10 (0,1uF/100K/100Kpf/104) 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 R$ 15,99 1 R$ 15,99 (80x36x13) 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 . 107
  • 123.
    3.8.2 Custo dasplacas 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 R$ 2,79 5 R$ 13,95 10x15cm Kit para Confecção de PCI Suekit CK-15: - 1 cortador de placa simples; - 1 caneta para traçagem; R$ 27,99 1 R$ 27,99 - 1 perfurador de placa; - 1 percloreto de ferro; e - 1 manual de instruções. 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. 108
  • 124.
    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. 109
  • 125.
    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
  • 126.
    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. 111
  • 127.
    4.1 OPORTUNIDADES DETRABALHOS 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. 112
  • 128.
    REFERÊNCIAS BIBLIOGRÁFICAS ACEPIC. Kitde Desenvolvimento ACEPIC 40 v2.0 (PIC16F877A), 2010. Disponivel em: <http://acepiccamp.com.br/produtos_descricao.asp?lang=pt_BR&codigo_categoria=8&codigo_pro duto=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.
  • 129.
    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. 114
  • 130.
    MICROGENIOS. Kit PICgeniosPIC16F877A - 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. 115
  • 131.
    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. 116
  • 132.
  • 133.
    APÊNDICE A /***************************************************************************** ------------------------------------------------------------------- | Validaçãodas 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. 118
  • 134.
    APÊNDICE B /***************************************************************************** ----------------------- | Validaçãodo 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. 119
  • 135.
    APÊNDICE C /***************************************************************************** ------------------------------- | Validaçãodo 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. 120
  • 136.
    APÊNDICE D /***************************************************************************** ---------------------------- | Validaçãodo 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. 121
  • 137.
    unsigned char i2c_rtc_to_char_hora(unsignedchar 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). 122
  • 138.
    void i2c_rtc_set_dia(unsigned charvalor) { 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). 123
  • 139.
    APÊNDICE E /***************************************************************************** ----------------------------------------------- | Validaçãodo 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. 124
  • 140.
    /* Seta anova 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). 125
  • 141.
    APÊNDICE F /***************************************************************************** -------------------------------------------- | Validaçãodo 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. 126
  • 142.
    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). 127
  • 143.
    APÊNDICE G /****************************************************************************** ----------------------- | Configuraçãodo 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. 128
  • 144.
    void lcd_num(unsigned charnum) { 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). 129
  • 145.
    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. 130
  • 146.
    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). 131
  • 147.
    APÊNDICE I Figura 81.Circuito esquemático do Módulo Controlador. 132
  • 148.
    APÊNDICE J Figura 82.Circuito esquemático do Módulo I²C. 133
  • 149.
    APÊNDICE K Figura 83.Circuito esquemático do Módulo Motor de Passo. 134
  • 150.
    APÊNDICE L Figura 84.Circuito esquemático do Módulo Display LCD. 135
  • 151.
    APÊNDICE M Figura 85.Circuito esquemático do Módulo Teclado Matricial. 136
  • 152.
    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. 137
  • 153.
    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. 138
  • 154.
    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. 139
  • 155.
    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. 140
  • 156.
    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. 141
  • 157.
    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. 142
  • 158.
    Figura 98. Footprintda 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. 143
  • 159.
    Figura 100. Footprintda placa do Módulo Teclado Matricial na versão final. 144
  • 160.
  • 161.
    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 MCLR Entrada do sinal de reset 1 VPP Entrada de tensão para modo programação RE3 Entrada digital RA0 E/S digital 2 AN0 Entrada analógica 0 RA1 E/S digital 3 AN1 Entrada analógica 1 RA2 E/S digital AN2 Entrada analógica 2 4 VREF- Entrada da voltagem A/D de referência negativa CVREF Saída da voltagem de referência RA3 E/S digital 5 AN3 Entrada analógica 3 VREF+ Entrada da voltagem A/D de referência positiva RA4 E/S digital 6 T0CKI Entrada do clock do temporizador 0 C1OUT Saída do comparador C1 RA5 E/S digital AN4 Entrada analógica 4 7 SS Entrada SPI de seleção de escravo HLVDIN Entrada de detecção de voltagem alta/baixa C2OUT Saída do comparador C2 RE0 E/S digital 8 RD Porta de leitura do controle de escravo paralelo AN5 Entrada analógica 5 RE1 E/S digital 9 WR Porta de escrita do controle de escravo paralelo AN6 Entrada analógica 6 RE2 E/S digital 10 CS Porta seletora do controle de escravo paralelo AN7 Entrada analógica 7 11 VDD Alimentação do chip 12 VSS Aterramento do chip Fonte: Adaptado de Microchip Technology (2008). 146
  • 162.
    Tabela 22. Descriçãodos pinos do PIC18F4520(continuação) Pinos Nome Descrição OSC1 Entrada de oscilador externo 13 CLKI Entrada do clock externo. Sempre associado ao OSC1 RA7 E/S digital OSC2 Saída de oscilador externo CLKO Saída do clock externo. No modo RC, CLKO mantém ¼ 14 da frequência de OSC1 contendo o ciclo de instrução RA6 E/S digital RC0 E/S digital 15 T1OSO Saída do oscilador externo do temporizador 1 T13CKI Entrada do clock externo do temporizador 1 ou 3 RC1 E/S digital T1OSI Entrada do oscilador externo do temporizador 1 16 CCP2 Entrada Captura 2/ Saída Compara 2/ Saída PWM 2 (alternativa para CCP2 quando CCP2MX desabilitado) RC2 E/S digital 17 CCP1 Entrada Captura 1/ Saída Compara 1/ Saída PWM 1 P1A Saída CCP1 reforçada RC3 E/S digital 18 SCK E/S do clock de comunicação serial síncrona para SPI SCL E/S do clock de comunicação serial síncrona para I2C RD0 E/S digital 19 PSP0 E/S de dados do escravo paralelo RD1 E/S digital 20 PSP1 E/S de dados do escravo paralelo RD2 E/S digital 21 PSP2 E/S de dados do escravo paralelo RD3 E/S digital 22 PSP3 E/S de dados do escravo paralelo RC4 E/S digital 23 SDI Entrada de dados SPI SDA E/S de dados I2C RC5 E/S digital 24 SDO Saída de dados SPI RC6 E/S digital TX Saída do transmissor EUSART (Enhanced USART) 25 assíncrono CK E/S do clock EUSART síncrono RC7 E/S digital 26 RX Entrada do receptor EUSART assíncrono DT E/S de dados EUSART síncrono RD4 E/S digital 27 PSP4 E/S de dados do escravo paralelo Fonte: Adaptado de Microchip Technology (2008). 147
  • 163.
    Tabela 22. Descriçãodos pinos do PIC18F4520 (continuação) Pinos Nome Descrição RD5 E/S digital 28 PSP5 E/S de dados do escravo paralelo P1B Saída CCP1 reforçada RD6 E/S digital 29 PSP6 E/S de dados do escravo paralelo P1C Saída CCP1 reforçada RD7 E/S digital 30 PSP7 E/S de dados do escravo paralelo P1D Saída CCP1 reforçada 31 VSS Aterramento do chip 32 VDD Alimentação do chip RB0 E/S digital INT0 Entrada Interrupção externa 0 33 FLT0 Entrada de Falha PWM para reforço em CCP1 AN12 Entrada analógica 12 RB1 E/S digital 34 INT1 Entrada Interrupção externa 1 AN10 Entrada analógica 10 RB2 E/S digital 35 INT2 Entrada Interrupção externa 2 AN8 Entrada analógica 8 RB3 E/S digital AN9 Entrada analógica 9 36 CCP2 Entrada Captura 2/ Saída Compara 2/ Saída PWM 2 (alternativa para CCP2 quando CCP2MX habilitado) RB4 E/S digital 37 KBI0 Interrupção de mudança de estado AN11 Entrada analógica 11 RB5 E/S digital KBI1 Interrupção de mudança de estado 38 PGM E/S de habilitação de programação ICSP (In-Circuit Serial Programming) em baixa voltagem RB6 E/S digital 39 KBI2 Interrupção de mudança de estado PGC E/S do clock do depurador e de programação ICSP RB7 E/S digital KBI3 Interrupção de mudança de estado 40 PGD E/S de dados do depurador in-Circuit e programação ICSP Fonte: Adaptado de Microchip Technology (2008). 148
  • 164.
    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. 149
  • 165.
    Tabela 23. Instruçõesde 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 f – W (comparação sem sinal). Não realiza a próxima CPFSEQ f{, a} 1 (2 ou 3) instrução se f = W f – W (comparação sem sinal). Não realiza a próxima CPFSGT f{, a} 1 (2 ou 3) instrução se f > W f – W (comparação sem sinal). Não realiza a próxima CPFSLT f{, a} 1 (2 ou 3) instrução se f < W DECF f{, d{, a}} 1 d=f–1 d = f – 1. Não realiza a próxima instrução se resultado DECFSZ f{, d{, a}} 1 (2 ou 3) for 0 d = f – 1. Não realiza a próxima instrução se resultado DCFSNZ f{, d{, a}} 1 (2 ou 3) for diferente de 0 INCF f{, d{, a}} 1 d=f+1 d = f + 1. Não realiza a próxima instrução se resultado INCFSZ f{, d{, a}} 1 (2 ou 3) for 0 d = f + 1. Não realiza a próxima instrução se resultado INFSNZ f{, d{, a}} 1 (2 ou 3) 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). 150
  • 166.
    Tabela 24. Instruçõesde 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 Salta para o endereço relativo n se o bit Carry de STATUS BC n 1 (2) for 1 Salta para o endereço relativo n se o bit Negative de STATUS BN n 1 (2) for 1 Salta para o endereço relativo n se o bit Carry de STATUS BNC n 1 (2) for 0 Salta para o endereço relativo n se o bit Negative de STATUS BNN n 1 (2) for 0 Salta para o endereço relativo n se o bit Overflow de BNOV n 1 (2) STATUS for 0 Salta para o endereço relativo n se o bit Zero de STATUS for BNZ n 1 (2) 0 Salta para o endereço relativo n se o bit Overflow de BOV n 1 (2) STATUS for 1 BRA n 2 Salta para o endereço relativo rotina n (incondicional) Fonte: Adaptado de Microchip Technology (2008). 151
  • 167.
    Tabela 26. Instruçõesde operações de controle (continuação). Mnemônico Operandos Ciclos Descrição Salta para o endereço relativo n se o bit Zero de STATUS for BZ n 1 (2) 1 Salta para a sub-rotina de rótulo n podendo salvar CALL n{, s} 2 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 Armazena o endereço da próxima instrução no topo da pilha RCALL n 2 e salta para a sub-rotina de rótulo n RESET --- 1 Reinicializa o microcontrolador Retorna de uma interrupção podendo recuperar o contexto de RETFIE {s} 2 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. 152
  • 168.
    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; 153
  • 169.
    o Exemplo: Seo 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); 154
  • 170.
    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(); 155
  • 171.
    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; 156
  • 172.
    o Descrição: Enviaum byte de dado via barramento I²C; o Requisitos: I²C necessita ser configurado antes de usar a função; o Exemplo: I2C1_Stop(); 157
  • 173.
    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); 158
  • 174.
    o Requisitos: Microcontroladornecessita 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(); 159
  • 175.
    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. 160
  • 176.
    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!"); 161
  • 177.
    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; 162
  • 178.
    o Requisitos: omó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); 163