Você está na página 1de 120

UNIVERSIDADE FEDERAL DE MINAS GERAIS DEPARTAMENTO DE ENGENHARIA ELETRNICA

PIC32F
Curso de microcontroladores baseado no PIC32MX360F512L e no kit de desenvolvimento EXPLORER16BR da Labtools.

Autor : Marconi de Oliveira Jnior marconieletrica@yahoo.com.br Engenheiro Eletricista Universidade Federal de Minas Gerais

Orientador : Professor Ricardo de Oliveira Duarte ricardoduarte@ufmg.br Departamento de Engenharia Eletrnica Universidade Federal de Minas Gerais

CITACAO...

AGRADECIMENTOS...

Sumrio
1. Introduo.........................................................................................................................................9 2. Microcontroladores, microprocessadores e sistemas embarcados.................................................10 3. Material utilizado no curso.............................................................................................................11 4. Mplab IDE e Mplab C32..........................................................................................................15 4.1. Instalao Mplab IDE..........................................................................................................15 4.2. Instalao Mplab C32..........................................................................................................22 5. Criao de Projeto..........................................................................................................................27 6. Gravao do Projeto no PIC...........................................................................................................35 7. Atividades Prticas.........................................................................................................................38 7.1. Aula 1 Leitura de Botes e Acionamento de Leds...............................................................39 7.2. Aula 2 - Uso de timers e contadores.......................................................................................44 7.3. Aula 3 Comunicao com LCDs Alfa-Numricos...............................................................51 7.4. Aula 4 Configurao e uso do conversor A/D.....................................................................60 7.5. Aula 5 Interrupes Externas...............................................................................................69 7.6. Aula 6 Comunicao UART via RS232...............................................................................73 7.7. Aula 7 Perifrico PWM e acionamento de motores de passo..............................................84 ANEXOS............................................................................................................................................89 Anexo I : Adicionando arquivos durante a criao do projeto......................................................90 Anexo II : Adicionando arquivos depois da criao do projeto.....................................................97 Anexo III : Utilizao do Socket para Gravao/Depurao.........................................................98 Anexo IV : Mplab SIM...............................................................................................................99 ERRATAS.........................................................................................................................................112 Errata I : Esquemtico Leds e Botoes..........................................................................................113 Errata II : Efeito de carga do ICD2BR.........................................................................................116

ndice de ilustraes
Figura 1: Explorer16BR.....................................................................................................................11 Figura 2: ICD2BR..............................................................................................................................11 Figura 3: Socket DIP..........................................................................................................................11 Figura 4: Plugin PIC32MX360F512L................................................................................................12 Figura 5: Extrator...............................................................................................................................12 Figura 6: Conector RJ12.....................................................................................................................12 Figura 7: Conector USB.....................................................................................................................13 Figura 8: Fonte Alimentao..............................................................................................................13 Figura 9: CD Explorer 16BR..............................................................................................................13 Figura 10: CD ICD2BR......................................................................................................................14 Figura 11: CD Explorer 16BR............................................................................................................15 Figura 12: Pastas CD Explorer16BR..................................................................................................16 Figura 13: Mplab IDE - instalao..................................................................................................16 Figura 14: Mplab IDE termo de compromisso.............................................................................17 Figura 15: Mplab IDE - modo de instalao ..................................................................................17 Figura 16: Mplab IDE - local de instalao.....................................................................................18 Figura 17: Mplab IDE termo de compromisso 2..........................................................................19 Figura 18: Mplab IDE termo de compromisso 3..........................................................................19 Figura 19: Mplab IDE reviso da instalao................................................................................20 Figura 20: Mplab IDE Status da instalao..................................................................................20 Figura 21: Mplab IDE compilador HI-TECH C...........................................................................21 Figura 22: Mplab IDE - fim da instalao.......................................................................................21 Figura 23: Mplab IDE - executvel.................................................................................................22 Figura 24: Mplab C32 - boas vindas...............................................................................................23 Figura 25: Mplab C32 - termo de compromisso.............................................................................23 Figura 26: Mplab C32 - local de instalao.....................................................................................24 Figura 27: Mplab C32 - instalao..................................................................................................25 Figura 28: Mplab C32 - progresso da instalao.............................................................................25 Figura 29: Mplab C32 - fim da instalao.......................................................................................26 Figura 30: Localizao Mplab.........................................................................................................27 Figura 31: Mplab IDE.....................................................................................................................27 Figura 32: Criao de Projetos - Tela de Boas Vindas.......................................................................28 Figura 33: Criao de Projetos - Seleo do Dispositivo...................................................................29 Figura 34: Criao de Projetos - Seleo do Compilador..................................................................30 Figura 35: Criao de Projetos - Nome e Localizao do Projeto.....................................................31 Figura 36: Criao de Projetos - Adio de Arquivos........................................................................32 Figura 37: Criao de Projetos - Resumo...........................................................................................33 Figura 38: Criao de Projetos - Workspace......................................................................................34 Figura 39: Seleo do PIC..................................................................................................................36 Figura 40: Conexo ICD....................................................................................................................36 Figura 41: Warning ICD2...................................................................................................................37 Figura 42: ICD2 Conectado................................................................................................................37 Figura 43: Compilao correta do programa......................................................................................42 Figura 44: ICD2BR Corretamente conectado....................................................................................42 Figura 45: Gravao concluda com sucesso......................................................................................43 Figura 46: Circuito de Clock do Timer...............................................................................................46 Figura 47: Overload do registrador PR1............................................................................................50 Figura 48: LCD alfa-numrico 16x2..................................................................................................51 Figura 49: Inicializao do display HDM16216H-B.........................................................................52 Figura 50: Comandos do LCD...........................................................................................................53

Figura 51: Endereo das clulas do LCD 16x2..................................................................................54 Figura 52: Cronometro. Aula 4 - Atividade 3.....................................................................................59 Figura 53: Converso A/D - D/A........................................................................................................60 Figura 54: Circuito de amostragem do sinal.......................................................................................61 Figura 55: Sequencia de amostragem e converso do ADC...............................................................62 Figura 56: Esquema eltrico do trimpot do kit EXPLORER16BR para utilizaco do conversor AD ............................................................................................................................................................65 Figura 57: Diagrama em blocos mdulo AD......................................................................................66 Figura 58: Formato do dado convertido.............................................................................................66 Figura 59: Esquema eltrico do sensor de temperatura do kit EXPLORER16BR para utilizaco do conversor AD......................................................................................................................................68 Figura 60: Conexo cabo DB9...........................................................................................................73 Figura 61: Conector DB9Macho/DB9Femea (esquerda), DB9MAcho/USB (direita)......................74 Figura 62: Esquema eltrico do conector DB9 e Driver MAX232 do kit EXPLORER16BR para comunicao RS232...........................................................................................................................74 Figura 63: Exemplo de clculo do Baud Rate....................................................................................77 Figura 64: Hyperterminal...................................................................................................................78 Figura 65: Porta COM........................................................................................................................79 Figura 66: Parmetros da comunicao RS232..................................................................................79 Figura 67: Finalizar comunicao RS232..........................................................................................80 Figura 68: Comunicao RS232. Aula 6 - Atividade 1......................................................................80 Figura 69: Tela inicial programa de senha..........................................................................................81 Figura 70: Tela LCD programa de senha............................................................................................82 Figura 71: Senha correta.....................................................................................................................82 Figura 72: Senha incorreta..................................................................................................................83 Figura 73: Gerao do sinal PWM.....................................................................................................85 Figura 74: Diagrama em blocos do mdulo output compare.............................................................86 Figura 75: Anexo I - Criao de Pasta................................................................................................90 Figura 76: Anexo I - Criao dos Arquivos........................................................................................91 Figura 77: Anexo I - Adio de Arquivos...........................................................................................92 Figura 78: Anexo I - Workspace.........................................................................................................93 Figura 79: Anexo I - Modificao dos Arquivos................................................................................94 Figura 80: Anexo I - Arquivos da Pasta myProject1 Alterados..........................................................95 Figura 81: Anexo I - Somente o Arquivo do Tipo 'C' Criado..........................................................95 Figura 82: Anexo I - Tipos de Arquivos.............................................................................................96 Figura 83: Utilizao do Socket para PIC tipo DIP...........................................................................98 Figura 84: MPLAB SIM.....................................................................................................................99 Figura 85: Menu debug para o Mplab SIM...................................................................................100 Figura 86: Programa em execuo...................................................................................................101 Figura 87: Fim de execuo da simulao.......................................................................................102 Figura 88: Breakpoints.....................................................................................................................102 Figura 89: Step Into..........................................................................................................................103 Figura 90: Watch Window................................................................................................................104 Figura 91: Mudana no estado dos leds (PORTA, bits A0-A3) de zero para um.............................104 Figura 92: Estmulo Assncrono.......................................................................................................105 Figura 93: Estmulo para troca de estado do boto 2 representado pelo PORT RD7.......................105 Figura 94: Alterao do estado dos PORTs RD7 e RA1..................................................................106 Figura 95: Sequncia de estmulos para alterar o estado dos PORTs...............................................106 Figura 96: Visualizando variveis atravs do Watch Window.........................................................107 Figura 97: Mensagem devido a no inicializao das variveis.......................................................108 Figura 98: Visualizao das variveis inicializadas no watch window............................................108 Figura 99: Visualizao da variao dos valores das variveis no watch window...........................108

Figura 100: Alterao manual do valor das variveis......................................................................109 Figura 101: Opo Trace All para utilizao do Logic Analyzer.....................................................109 Figura 102: Logic Analyzer..............................................................................................................110 Figura 103: Seleo dos Registradores para o Logic Analyzer........................................................110 Figura 104: Visualizao da alterao do valor dos PORTs com o Logic Analyzer.........................111 Figura 105: Esquema Eltrico dos Botes do kit EXPLORER16BR.................................................113 Figura 106: Esquema Eltrico dos Leds do kit EXPLORER16BR..................................................114 Figura 107: Circuito resultante para o PORT RA7...........................................................................115

ndice de tabelas

1. Introduo
Esta apostila tem por objetivo conduzir o aluno a explorar o uso de perifricos e funcionalidades do microcontrolador PIC32MX360F512L, bem como disponibilizar informaes relevantes sobre o uso do kit de desenvolvimento EXPLORER16BR da [Labtools] para testes das atividades prticas propostas. Para acompanh-la indispensvel que o aluno possua conhecimento em linguagem C. Nesta apostila sero abordados os seguintes temas: Diferenas entre microcontroladores e microprocessadores Apresentao do ambiente de desenvolvimento Mplab Apresentao do compilador Mplab-C32 Apresentao da Placa de gravao ICD2 Criao de projetos no Mplab Apresentao do ambiente de simulao Mplab SIM. Atividades prticas As atividades prticas abordaro os seguintes perifricos: Leitura de botes e acionamento de LEDs Uso de timers e contadores. Comunicao com LCDs alfa-numricos. Configurao e uso do conversor A/D. Interrupes externas. Comunicao serial UART via RS-232. Perifrico PWM e acionamento de motores de passo.

Cada atividade prtica est dividida em 3 nveis de dificuldade. A tarefa 1 uma tarefa simples e completamente funcional, na qual o aluno poder atestar o uso e o funcionamento do perifrico sem necessidade de recorrer a instrutores ou referncias adicionais. Na etapa 2 ele dever ser capaz de realizar uma modificao na tarefa anterior. A terceira e ltima etapa exigir criatividade do aluno para realiz-la de forma autnoma.

Curso Microcontroladores PIC32F | 9

2. Microcontroladores, embarcados

microprocessadores

sistemas

O microprocessador um circuito integrado responsvel por realizar clculos e executar instrues. Ele se divide basicamente em: unidade lgico aritmtica (ULA), responsvel por executar as instrues; unidade de controle, responsvel por gerenciar o trfego de informao nos barramentos; registradores, responsveis por armazenar dados ou instrues. Os microprocessadores no possuem perifricos tais como interfaces de entrada e sada de dados, conversores AD, timers, mdulos de comunicao e mdulos PWM integrados. Sendo assim, a utilizao de um microprocessador, Digital Signal Processor (DSP) por exemplo, requer sua interligao junto aos perifricos. O microcontrolador por sua vez possui uma unidade de processamento e todos os perifricos em um nico chip, Programmable Interface Controller (PIC), por exemplo. Mesmo no possuindo os perifricos integrados em um nico chip os microprocessadores so largamente utilizados em processamento de dados haja visto que sua capacidade de clculo superior a dos microcontroladores. importante compreender que existem no mercado uma infinidade de empresas fabricantes de microcontroladores tais como : [Microchip], [Texas Instruments], [Atmel], [National Instruments] dentre outros. Considerando que a diferena entre microprocessadores e microcontroladores est clara para o aluno passaremos a definio de sistemas embarcados. Desktops e notebooks possuem processadores (Intel, Pentium, Athlon, etc) e perifricos (monitor, teclado, mouse, impressora, etc) que podem ser utilizados de maneira geral (edio de texto, internet, softwares de engenharia, banco de dados, etc), ou seja, os computadores no so concebidos para uma finalidade especfica. Os sistemas embarcados por sua vez possuem um microcontrolador e executam tarefas especificas. Como exemplo de sistema embarcado podemos citar o controle de acesso de uma catraca, celulares, relgios, brinquedos, etc. O objetivo principal deste curso fornecer a base para o projeto com microcontroladores de forma que o aluno possa construir sistemas embarcados variados tais como : Letreiros luminosos, controladores, sistemas de acionamento de mquinas, equipamentos mdicos, etc. No capitulo 4 sero apresentadas as ferramentas necessrias para a realizao de projetos utilizando microcontroladores.

Curso Microcontroladores PIC32F | 10

3. Material utilizado no curso


O kit de desenvolvimento da [Labtools] contm os seguintes materiais: 1 placa de desenvolvimento EXPLORER16BR.

Figura 1: Explorer16BR 1 placa de gravao ICD2BR.

Figura 2: ICD2BR 1 soquete para gravao de microcontroladores PIC montados em encapsulamentos do tipo DIP (Dual In-line Package)

Figura 3: Socket DIP

Curso Microcontroladores PIC32F | 11

1 Plugin montado com o microcontrolador PIC32MX360F512L

Figura 4: Plugin PIC32MX360F512L 1 extrator para Plugin (microcontrolador soldado em uma placa com conectores)

Figura 5: Extrator 1 conector RJ12

Figura 6: Conector RJ12 1 cabo USB

Curso Microcontroladores PIC32F | 12

Figura 7: Conector USB

1 fonte de alimentao

Figura 8: Fonte Alimentao 2 CDs

Figura 9: CD Explorer 16BR

Curso Microcontroladores PIC32F | 13

Figura 10: CD ICD2BR

Curso Microcontroladores PIC32F | 14

4. Mplab IDE e Mplab C32


O [Mplab IDE] (Integrated Development Environment) um ambiente de trabalho para programao e simulao de projetos baseados em PIC. A Microchip fornece ainda um compilador em linguagem C para PIC. O [Mplab C18] o compilador da Microchip para a famlia PIC 8 bits, o [Mplab C30] o compilador para a famlia de 16 bits: PIC24, dsPIC30F e dsPIC33F e o [Mplab C32] para a famlia 32 bits, como o PIC32MX360F512L que iremos utilizar durante o curso. importante que o aluno tenha conscincia de que, da mesma forma que existe uma infinidade de microcontroladores no mercado (PIC, dsPIC, DSP, ARM, etc) temos, alm do Mplab , diversas plataformas (IDE) e compiladores para desenvolvimento de projetos, por exemplo: [HITECH], [MicroC], [CCS], dentre outros, que apresentam particularidades prprias para descrio de cdigo fonte e portanto no so compatveis uns com os outros.

4.1. Instalao Mplab IDE


Para instalar o Mplab IDE insira o CD Explorer16BR fornecido com o kit. (Figura 11)

Figura 11: CD Explorer 16BR No CD voc encontrar as pastas mostradas na figura 12 a seguir.

Curso Microcontroladores PIC32F | 15

Figura 12: Pastas CD Explorer16BR Por instante iremos nos preocupar somente com a pasta Ambiente de Desenvolvimento. V em: Ambiente de Desenvolvimento >> Mplab >> Mplab_8.40 >> Setup.

Figura 13: Mplab IDE - instalao Na janela que se abriu clique next, leia o termo de compromisso e clique em I accept the terms of the license agreement e novamente em next. (Figura 14)

Curso Microcontroladores PIC32F | 16

Figura 14: Mplab IDE termo de compromisso Selecione o modo de instalao Complete para instalar todas as ferramentas ou o modo Custom para selecionar aqueles de seu interesse caso voc seja um usurio avanado. No nosso caso iremos fazer a instalao Complete. (Figura 15)

Figura 15: Mplab IDE - modo de instalao Curso Microcontroladores PIC32F | 17

Para que no ocorra problemas futuros quando precisarmos referenciar a pasta de instalao do Mplab deixe-a como est: c:\Program Files\Microchip\. (Figura 16)

Figura 16: Mplab IDE - local de instalao Leia o termo de compromisso de utilizao do software, clique em I accept the terms of the license agreement e posteriormente em next. (Figura 17)

Curso Microcontroladores PIC32F | 18

Figura 17: Mplab IDE termo de compromisso 2 Leia o termo de compromisso de utilizao do compilador C32, clique em I accept the terms of the license agreement e posteriormente em next. (Figura 18)

Figura 18: Mplab IDE termo de compromisso 3

Curso Microcontroladores PIC32F | 19

Revise se o diretrio bem como os componentes a serem instalados esto corretos. Caso esteja tudo ok clique em next para iniciar a instalao. (Figura 19)

Figura 19: Mplab IDE reviso da instalao

Figura 20: Mplab IDE Status da instalao Curso Microcontroladores PIC32F | 20

No final da instalao aparecer uma mensagem (Figura 21) solicitando se voc deseja instalar o compilador HI-TECH C, clique em no haja visto que iremos utilizar o Mplab C32.

Figura 21: Mplab IDE compilador HI-TECH C Reinicie o computador para atualizar as configuraes. (Figura 22)

Figura 22: Mplab IDE - fim da instalao Pronto, com o Mplab IDE instalado voc poder acess -lo clicando no cone que se encontra na rea de trabalho ou indo at o diretrio no qual ele foi instalado: "C:\Program Files\Microchip\Mplab IDE\Core\Mplab.exe". (Figura 23)

Curso Microcontroladores PIC32F | 21

Figura 23: Mplab IDE - executvel

4.2. Instalao Mplab C32


Para instalar o compilador C para PICs de 32 bits insira o CD Explorer16BR fornecido com o kit. V em: Ambiente de Desenvolvimento >> C32 >> Mplab-C32 -Academic-v105. Clique em next na tela de boas vindas. (Figura 24)

Curso Microcontroladores PIC32F | 22

Figura 24: Mplab C32 - boas vindas Leia o termo de compromisso, clique em I accept the terms of the license agreement e posteriormente em next. (Figura 25)

Figura 25: Mplab C32 - termo de compromisso

Curso Microcontroladores PIC32F | 23

Para que no ocorra problemas futuros quando precisarmos referenciar a pasta de instalao do MplabC32 deixe-a como est: C:\Program Files\Microchip\Mplab C32. (Figura 26)

Figura 26: Mplab C32 - local de instalao Clique install para iniciar a instalao. (Figura 27)

Curso Microcontroladores PIC32F | 24

Figura 27: Mplab C32 - instalao

Figura 28: Mplab C32 - progresso da instalao Clique em finish para terminar a instalao. (Figura 29)

Curso Microcontroladores PIC32F | 25

Figura 29: Mplab C32 - fim da instalao

Curso Microcontroladores PIC32F | 26

5. Criao de Projeto
Para criar um projeto abra o ambiente de trabalho Mplab. (Figura 30)

Figura 30: Localizao Mplab A seguinte tela dever aparecer. (Figura 31)

Figura 31: Mplab IDE

Curso Microcontroladores PIC32F | 27

Na janela untitled workspace aparecero todos os arquivos contidos no seu projeto e a janela output mostra o resultado da compilao. Para criar um novo projeto faa: Project >> Project Wizard.... A janela que se abre uma tela de boas vindas. Clique Avanar. (Figura 32)

Figura 32: Criao de Projetos - Tela de Boas Vindas Selecione o dispositivo a ser utilizado. No nosso caso selecione PIC32MX360F512L e clique Avanar. (Figura 33)

Curso Microcontroladores PIC32F | 28

Figura 33: Criao de Projetos - Seleo do Dispositivo Na aba Active Toolsuite selecione o compilador a ser utilizado. No nosso caso o Microchip PIC32 C-Compiler Toolsuite. Clique Avanar. (Figura 34)

Curso Microcontroladores PIC32F | 29

Figura 34: Criao de Projetos - Seleo do Compilador Escolha o diretrio, d um nome para seu projeto1 (ex: c:\...\myProject. ) e clique em Avanar. (Figura 35) A extenso do projeto do tipo .mcp que significa Microchip Project.

1 Ateno : No crie pastas com nomes separados por espao, por exemplo, c:\meu projeto\myProject, pois seu programa poder no compilar. Esta dica valida para uma grande variedade de compiladores. Alm do Mplab podemos citar o Code Composer da Texas Instruments.

Curso Microcontroladores PIC32F | 30

Figura 35: Criao de Projetos - Nome e Localizao do Projeto

Na janela que se abre voc poder inserir arquivos em seu projeto2. Neste instante no iremos adicionar nenhum arquivo. Clique Avanar. (Figura 36)

2 Posteriormente o aluno poder verificar no Anexo I as 4 diferentes maneiras de se adicionar um arquivo na criao do projeto. O Anexo II aborda a adio de arquivos depois que o projeto j foi criado.

Curso Microcontroladores PIC32F | 31

Figura 36: Criao de Projetos - Adio de Arquivos

A ltima tela resume as caractersticas do projeto a ser criado: dispositivo, compilador e localizao. Clique Concluir. (Figura 37)

Curso Microcontroladores PIC32F | 32

Figura 37: Criao de Projetos - Resumo Pronto! Seu projeto est criado. Na nova rea de trabalho do Mplab voc ver uma janela com o nome do seu projeto mas com a extenso .mcw (Microchip Workspace), por exemplo myProject.mcw. Esta janela mostra todos os arquivos utilizados no seu projeto. Como ainda no adicionamos nenhum arquivo ela deve estar vazia. (Figura 38) A diferena entre .mcp e .mcw que o project o projeto em si, ele que contm todas as informaes na hora da compilao. O workspace uma rea de trabalho que carrega seu projeto e a disposio das janelas da maneira que voc salvou pela ultima vez. Pode-se dizer, a grosso modo, que o workspace o layout do projeto.

Curso Microcontroladores PIC32F | 33

Figura 38: Criao de Projetos - Workspace

Curso Microcontroladores PIC32F | 34

6. Gravao do Projeto no PIC


Para executar a gravao/depurao do PIC32MX360F512L coloque-o na placa EXPLORER16BR3 que por sua vez deve ser conectada, atravs do conector RJ12 (Figura 6), placa in circuit debugger (ICD2BR), Figura 2. Existem duas formas de utilizar a ICD2BR. A primeira, que ser a forma adotada neste curso, conectando-a diretamente na placa de desenvolvimento EXPLORER16BR (Figura 1) com o PIC colocado na mesma. A segunda maneira colocar o PIC no socket (Figura 3) que ser conectado a placa ICD2BR. Vale ressaltar que o socket utilizado somente para PIC do tipo DIP (Dual In Line Package)4. A instalao do driver da placa ICD2BR feita conectando-se a mesma ao computador atravs da porta USB. Caso a verso do Mplab seja igual ou superior a 7.31 o driver do ICD2BR pode ser pr-instalado durante a instalao do Mplab. Caso voc tenha seguido os passos indicados no capitulo 4 basta conectar a placa ICD2BR e esperar que o Windows reconhea o driver. Para verses do Mplab seja inferior a 7.31 uma janela de instalao do dispositivo USB (placa ICD2BR) ir aparecer. Se isso ocorrer localize o driver na pasta de instalao do Mplab (ICD2\Drivers ou Driversnn\ICD2_USB). Onde nn a verso do sistema operacional. Com a placa conectada USB e devidamente instalada, abra o ambiente de desenvolvimento Mplab IDE. V em: Configure >> Select Device e selecione o PIC a ser utilizado, no nosso caso o PIC32MX360F512L. Perceba que na rea Programmers o ICD2 aparece na cor verde, indicando que o mesmo pode ser utilizado para o PIC em questo. O mesmo valido para Debuggers. Ou seja, a placa ICD2BR pode ser utilizada tando para programao quanto depurao de programas para o PIC32MX360F512L. (Figura 39) O Mplab IDE fornece ainda um simulador (Mplab SIM) que utilizado para testar o programa antes de grav-lo no microcontrolador. Desta forma o usurio pode testar o programa mesmo na ausncia da placa ICD2BR. Mais detalhes do Mplab SIM sero dados no Anexo IV : Mplab SIM. Perceba pela figura 39 que a utilizao deste componente apenas parcial (bola amarela), ou seja, algumas das ferramentas do simulador podem no funcionar para o PIC32MX360F512.

3 Ateno : Ao colocar o PIC32MX360F512L na placa EXPLORER16BR tome cuidado com a pinagem. Tanto na placa EXPLORER16BR quando no PIC32MX360F512L existe uma pequena seta desenhada indicando o pino 1. 4 O Anexo III mostra a forma de utilizar o socket em casos nos quais a placa de desenvolvimento no pode ser utilizada.

Curso Microcontroladores PIC32F | 35

Figura 39: Seleo do PIC Para utilizar a placa ICD2BR v em: Programmer >> Select Programmer >> 2 Mplab ICD2. Provavelmente uma mensagem indicando que a placa no est conectada ir aparecer. Para conect-la clique em: Reset and Connect to ICD na barra de tarefas. (Figura 40)

Figura 40: Conexo ICD

Curso Microcontroladores PIC32F | 36

Uma mensagem ir aparecer. Clique ok.

Figura 41: Warning ICD2 Pronto! A ICD2BR foi instalada e est pronta para gravar/depurar o programa5. (Figura 42)

Figura 42: ICD2 Conectado

5 Durante as aulas experimentais iremos mostrar como se grava um programa haja visto que at o momento no possumos nenhum cdigo para gravao.

Curso Microcontroladores PIC32F | 37

7. Atividades Prticas
Conforme mencionado anteriormente, cada atividade pratica est dividida em 3 nveis de dificuldade. A tarefa 1 uma tarefa simples e completamente funcional. Nessa atividade o aluno poder verificar o funcionamento do perifrico sem necessidade de recorrer a instrutores ou referncias adicionais. Na etapa 2 ele dever ser capaz de realizar uma modificao na tarefa anterior. A terceira e ltima etapa exigir criatividade do aluno para realiz-la de forma autnoma. Cada uma das 7 tarefas contm os objetivos, o material a ser utilizado, as referncias necessrias para execuo da tarefa, uma introduo ao uso dos perifricos e a atividade em si distribuda em 3 nveis de dificuldade.

Curso Microcontroladores PIC32F | 38

7.1. Aula 1 Leitura de Botes e Acionamento de Leds


Objetivo Familiarizao com entrada/sada digitais. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Capitulo 12.0: I/O Ports Esquema Eltrico dos Botes e Leds disponvel no CD1 em Esquemas Eltricos >> mainBoard >> P-CAD EDA [Sheet1]. Introduo Microcontroladores em geral apresentam dois tipos de entrada/sada de dados: as digitais e analgicas essas ltimas usadas por conversores A/D e D/A. Nesta atividade o aluno ir se familiarizar com as entradas (botes) e sadas (leds) digitais. Essas portas so conhecidas tambm como GPIO (General Purpose Input/Output), ou seja, so portas (pinos do microcontrolador) para uso geral, como acionamento de algum circuito eletrnico ou leitura logica (0 ou 1) de algum sensor ou comando. Atividade 1 Os principais registradores do microcontrolador que deveremos programar (configurar) para definir os pinos (entrada ou sada; digital ou analgico) nesta pratica so: Latch, Tris e Port. Todos os pinos de I/O possuem quatro registradores para a sua manipulao e configurao. Esses registradores so: TRISx - usado na configurao da direo do pino de I/O. Colocar "1" no bit correspondente ao pino que se quer configurar significa que esse pino ser uma entrada. Colocar "0" significa que o pino ser uma sada.6 PORTx - usado para a leitura e escrita de um dado no pino de I/O. LATx - usado para a escrita de um dado no pino de I/O. ODCx - usado para configurar um pino de I/O como dreno aberto ou no. Nesta atividade iremos configurar as portas I/O para utilizao dos botes e leds e um pequeno programa para acionamento de um led atravs de um boto.
6 X' representa a letra do PORT em questo. Exemplo: TRISA, TRISB, TRISC, , TRISG. O nmero de ports varia de um microcontrolador PIC a outro.

Curso Microcontroladores PIC32F | 39

Crie um novo projeto. Crie um arquivo main.c. Adicione o(s) cabealho(s) (includes) mnimos necessrios a todo o projeto.
// INCLUDES #include <p32xxxx.h> //include para o PIC32MX360F512L

Em seguida, no mesmo cdigo em C, configure o modo de gravao7.


// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2

Cada registrador do PIC possui um endereo de memoria especfico e um espao de 32bits. Para o PIC32MX360F512L esses endereos esto mapeados no arquivo header Mplab C32 >> pic32-libs >> include >> proc >> p32mx360f512l.h. Cada linha da clusula #define no cdigo abaixo define um nome para cada endereo de registrador do microcontrolador que pode ser configurado pelo programador. Para melhor entendimento do cdigo as entradas (botes) e sadas (leds) foram definidas de acordo com o esquemtico apresentado no CD do kit (Esquemas Eltricos >> mainBoard >> P-CAD EDA [Sheet1]). Dessa forma temos: #define nome endereo Assim, ao invs de PORTDbits.RD6 podemos utilizar, por exemplo, Botao_1 para facilitar a compreenso do cdigo e o torna-lo mais legvel. O mesmo vlido para todos os outros defines listados a seguir.
// 0 Pressionado / 1 Liberado #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7 #define Botao_4 PORTDbits.RD13 // 0 Apagado / 1 Aceso #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA5 #define Led6 LATAbits.LATA6 #define Led7 LATAbits.LATA7 //BOTO 1 //BOTO 2 //BOTO 3 //BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7

Crie a funo Main(). Limpe (reset) todas as portas.


// Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0;

Conforme dito anteriormente o registrador TRIS responsvel por configurar se um pino ir operar como entrada (1) ou sada (0).
7 Esta configurao indica a frequncia de operao do seu microcontrolador. No se preocupe com o entendimento do cdigo nas duas linhas abaixo por instante. Mais detalhes sero dados em uma atividade futura.

Curso Microcontroladores PIC32F | 40

Cada um dos 7 registradores tris (TRISA, TRISB... TRISG) possui 32bits porm, somente os 16 bits menos significativos (bits de 0 a 15) esto disponveis para configurao do usurio conforme o datasheet do PIC. Usualmente os registradores so configurados atravs de nmeros hexadecimais por razes de clareza do cdigo escrito. No cdigo abaixo o comentrio mostra o valor dos 16 bits equivalentes a escrita hexadecimal do respectivo registrador a ttulo de melhor compreenso das entradas (1) e sadas (0). Para configurar a direo dos pinos I/O insira o cdigo abaixo.8
// Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111 1111 1000 0000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110 1111 1100 1111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF;

Pronto. A configurao dos botes e leds esta feita. Para testar crie um loop infinito e faa com que o Botao_1 acenda o LED1, o Botao_2 acenda o LED2, o Botao_3 o LED3 e o Botao_4 o LED4.
while(1) { if(!Botao_1) Led1 = 1; else Led1 = 0; if(!Botao_2) Led2 = 1; else Led2 = 0; if(!Botao_3) Led3 = 1; else Led3 = 0; if(!Botao_4) Led4 = 1; else Led4 = 0; } //TESTE BOTO 1 //TESTE BOTO 2 //TESTE BOTO 3 //TESTE BOTO 4

Compile o programa (Ctrl+F10). Se voc executou tudo corretamente uma mensagem dizendo que o programa foi corretamente compilado ir aparecer. (Figura 43)

8 No final do material existe um captulo denominado erratas cujo captulo 1 (Errata : Esquemtico Led e Botoes) demonstra o porque de utilizar a porta RA7 como Boto_3 e no como LED8.

Curso Microcontroladores PIC32F | 41

Figura 43: Compilao correta do programa Antes de gravar o programa no PIC interessante simul-lo (test-lo) afim de verificar se o programa est funcionando como o esperado. Essa atividade de simulao e validao do seu cdigo dever ser feita antes do dia da aula, usando como ferramenta o simulador Mplab SIM cujo modo de operao mostrado no Anexo IV : Mplab SIM. O complemento dessa atividade, ou seja, gravao com o ICD2 e teste na placa EXPLORER16BR devero ser realizados em laboratrio sob o acompanhamento do professor. Aps verificar o correto funcionamento do programa com o Mplab SIM conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Para gravar o programa no PIC com o ICD2BR v em: Programmer >> Select Programmer >> Mplab ICD 2. Na barra de tarefas clique em: Reset and Connect to ICD. Se a placa estiver corretamente instalada a seguinte mensagem ir aparecer: (Figura 44)

Figura 44: ICD2BR Corretamente conectado Para gravar o programa clique em: Program Target Device. Se a gravao foi bem sucedida a seguinte mensagem ir aparecer: (Figura 45)

Curso Microcontroladores PIC32F | 42

Figura 45: Gravao concluda com sucesso Pera testar o programa desconecte a placa ICD2BR do kit EXPLORER16BR, pressione os botes e veja o que acontece.9 Atividade 2 Modifique o programa 1 para que o Botao_1 acenda o LED 1 e este se apague somente se o boto 2 for pressionado. Atividade 3 Quando o Botao_1 for pressionado os LEDS devero acender na seguinte sequencia (LED7, LED6, LED5, LED4, LED3 LED2, LED1, LED7, LED6...), ou seja, da direita para esquerda. Quando o Botao_2 for pressionado os LEDS devero acender da esquerda para direita. Quando o Botao_3 for pressionado todos os LEDS devero piscar. Quando o Botao_4 for pressionado todos os LEDS devero se apagar. Dica: Utilize um loop for de 0 a 30000 como mostrado no trecho de cdigo abaixo, para gerar um atraso suficiente, de forma que o usurio possa conseguir ver os LEDs piscarem na ordem proposta. Observe o cdigo a seguir.
int main(){ while(1){ // AQUI VEM O PROGRAMA for (tempo=0; tempo<20000; tempo++); // temporizao } // Fim While } // Fim Main

9 No final do material existe um capitulo denominado erratas cujo capitulo 2 (Errata : Efeito de carga ICD2BR) demonstra o porque de desconectar a placa ICD2BR do kit EXPLORER16BR para testar o programa.

Curso Microcontroladores PIC32F | 43

7.2. Aula 2 - Uso de timers e contadores


Objetivo Utilizao de timers e contadores para sincronizao de tarefas. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Captulos 13.0 Timer1 e 14.0 Timers 2,3,4,5 Aula prtica 1 Introduo O microcontrolador PIC32MX360F512L possui 5 contadores (timers) de 16 bits, que podem ser configurados independentemente para trabalharem como temporizadores (timers, ou contadores de tempo) ou simplesmente como contadores (contadores de eventos externos, i.e.: nmero de vezes que um boto for pressionado) dependendo da aplicao que se quer desenvolver. Para contagem de tempo consideraremos que o contador ser configurado no modo de contagem de tempo (temporizador ou timer). Com esse sentido usaremos o termo temporizador ou timer. Para contagem de eventos consideraremos que o contador ser configurado no modo de contagem de eventos (contador de eventos ou simplesmente contador). Para configurar esse perifrico do microcontrolador PIC32MX360F512L precisaremos usar os seguintes registradores: TMRx: contador de 16 bits associado ao timer x; PRx: registrador de perodo associado ao timer x; TxCON: registrador de controle associado ao timer x. Para cada contador, teremos tambm bits relativos ao controle de interrupo. Uma interrupo de timer (contador de tempo) ou do contador de eventos sempre ocorrer na CPU do microcontrolador, toda vez que uma contagem chegar ao fim (o fim de contagem depender de com qual valor cada registrador foi configurado)10. Os timers podem ser chamados pelo usurio atravs de uma funo (ex: delay_1ms(x) que escreveremos a seguir) ou ser utilizados como geradores de interrupo. Nesse caso ele inicia uma contagem e, ao chegar na contagem pr-determinada (valor mximo), gera uma interrupo fazendo com que o programa pare sua execuo sequencial e executa a rotina (funo) especifica do timer. Outro modulo que tambm pode trabalhar com interrupes o conversor A/D. Mas sua
10 O registrador pode ser configurado com 16 bits ou utilizar a combinao de dois contadores (timers) de 16 bits cada um para formar um contador (timer) de 32 bits.

Curso Microcontroladores PIC32F | 44

abordagem ser dada em uma atividade posterior. Atividade 1.a O PIC32MX360F512L apresenta 5 timers de 16 bits. Sendo que os timers 2 e 3 ou 4 e 5 podem ser agrupados para formar um timer de 32 bits. Os principais registradores utilizados nos timers so: TxCON, TMRx, PRx, IFS0, IEC0, IPCx. O algarismo 'x' representa o timer em questo: 1, 2, 3, 4 ou 5. O registrador TxCON usado basicamente para habilitar/desabilitar o Timer e selecionar o divisor de frequncias (prescaler11). O TMRx utilizado para zerar o timer e o PRx utilizado para configurar a frequncia de operao. Os registradores IFS0, IEC0 e IPCx so utilizados pelas interrupes geradas pelos timers. Nesta atividade iremos fazer o LED1 acender a durante 2 segundos toda vez que o Botao_1 for pressionado utilizando o contador do Timer5. Crie um novo projeto. Crie um arquivo main.c. Adicione os includes.
// INCLUDES #include <p32xxxx.h> #include <pblib.h> //include para o PIC32MX360F512L

Configure o modo de gravao.


// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8 //(PBCLK is SYSCLK divided by 8,4,2,1)

Adicione os defines dos botes e leds.

// DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 //BOTO 1 #define Botao_2 PORTDbits.RD7 //BOTO 2 #define Botao_3 PORTAbits.RA7 //BOTO 3 #define Botao_4 PORTDbits.RD13 //BOTO 4 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

Basicamente o clock do timer dado por (Figura 46):


11 Prescaler um circuito interno do PIC que reduz a frequncia de 8MHz do cristal da placa EXPLORER16BR por valores pr-determinados (1,2,4,8,16,32 e 64). Por exemplo sendo o cristal de 8MHz se usarmos um prescaler de 8 a frequncia de operao passar a ser de 1MHz.

Curso Microcontroladores PIC32F | 45

Figura 46: Circuito de Clock do Timer O clock dos perifricos pode ser obtido de varias formas, a mais usual a que iremos utilizar, atravs do oscilador de 8MHz da placa EXPLORER16BR. Neste modo de operao o sinal de 8MHz passa pelo divisor PBDIV e pelo PRESCALER (divisor de frequncia). O inverso da frequncia obtida comparado com o perodo desejado (PR1) e quando o contador do timer chega a esse valor ele gera uma interrupo, sinalizando que o tempo desejado foi atingido. O exemplo abaixo ajuda a entender melhor o funcionamento.
SYS _ FREQ=8000000Hz ; Frequencia do Sistema PBDIV =8 ; Definido no modo de gravao como : FPBDIV = DIV _ 8 PRESCALER=8 Definido pelo usuario Assimtemos : 1 T= 8000000 /8 /8 O tempo desejado para o timer ex : 1ms dado por : t= PRT Logo : PR=0.0018000000 /8 / 8=125 ;

Inclua a rotina de temporizao de 1ms.


void delay_1ms_x(unsigned int x) { T5CONbits.TON = 0;// Timer5 desligado TMR5 = 0; // Zera o timer para incio de contagem // Configura o registrador de perodo // PR5 = (Fosc * Tempo)/(FPBDIV * PS) // PR5 = (8000000 * 0,001)/(8 * 8) = 125 PR5 = 125; T5CONbits.TCS = 0; T5CONbits.TGATE = 0; T5CONbits.TSIDL = 0; // Timer5 Prescaler // TCKPS -> Prescaler // 0 -> 1:1 // 1 -> 1:2 // 2 -> 1:4 // 3 -> 1:8 // 4 -> 1:16 // 5 -> 1:32 // 6 -> 1:64 // Modo timer (clock interno) // Timer ligado em modo Idle

Curso Microcontroladores PIC32F | 46

// 7 -> 1:256 T5CONbits.TCKPS = 3; IFS0bits.T5IF = 0; T5CONbits.TON = 1;

// Prescaler 1:8 // Limpa o flag // Timer5 ligado

while(x != 0) { while(IFS0bits.T5IF == 0); IFS0bits.T5IF = 0; x--; } T5CONbits.TON = 0; }

// Aguarda o tempo de 1 ms // Limpa o flag // Decrementa x // Desliga o Timer5

A varivel IFS0bits.T5IF no cdigo acima um flag que sinaliza o fim da temporizao de 1ms. Ou seja, quando a contagem termina esse flag vai para nvel logico alto. Ao reset-lo (IFS0bits.T5IF=0) o timer reinicia sua contagem. Crie a funo Main(). Limpe (reset) todas as portas.
// Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0;

Configure a direo dos pinos I/O.


// Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF;

Insira o cdigo para fazer com que o LED1 permanea ligado durante 2 segundos aps o boto 1 ser pressionado.
while(1) { // Atividade 1 if(!Botao_1) { Led1 = 1; delay_1ms_x(2000); Led1=0; } // Fim Atividade 1 }

Teste o programa e mea o tempo transcorrido entre o acender e o apagar do LED no Mplab SIM. Analise o resultado observado. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Curso Microcontroladores PIC32F | 47

Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Atividade 1.b Nesta atividade faremos o Timer1 habilitar uma interrupo, assim, ao invs de chamar a funo delay_1_ms_x() o timer ir gerar uma interrupo a cada 2 segundos fazendo o led piscar. Crie um novo projeto. Crie um arquivo main.c. Adicione os includes, configure o modo de gravao, adicione os define.
// INCLUDES #include <p32xxxx.h> #include <pblib.h> //include para o PIC32MX360F512L

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8 //(PBCLK is SYSCLK divided by 8,4,2,1) // DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 //BOTO 1 #define Botao_2 PORTDbits.RD7 //BOTO 2 #define Botao_3 PORTAbits.RA7 //BOTO 3 #define Botao_4 PORTDbits.RD13 //BOTO 4 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

Adicione a rotina que sera executada quando a interrupo do Timer1 ocorrer.


void __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void) { Led1=!Led1; IFS0bits.T1IF = 0; // Limpa o flag }

Sempre que ocorre o estouro do contador do Timer1 o flag T1IF vai para nvel lgico 1, sinalizando a ocorrncia de uma interrupo. Ao terminar a rotina de tratamento de interrupo do Timer o usurio deve reset-lo via software, por isso a linha (IFS0bits.T1IF = 0; // Limpa o flag) no cdigo acima. Inclua uma funo para configurao do Timer. Perceba que uma funo semelhante poderia ter sido utilizada na atividade 1.a.

void configura_timer1(){

Curso Microcontroladores PIC32F | 48

T1CONbits.TON = 0; TMR1 = 0;

// Timer1 Desligado // Zera o timer para incio de contagem

// Timer1 Prescaler // TCKPS -> Prescaler // 0 -> 1:1 // 1 -> 1:8 // 2 -> 1:64 // 3 -> 1:256 T1CONbits.TCKPS = 2; // Prescaler 1:64 // Configura o registrador de perodo // PR1 = (Fosc * Tempo)/(FPBDIV * PS) // PR1 = (8000000 * 2)/(8 * 64) = 31250 PR1 = 31250; // Configura o registrador de perodo T1CONbits.TCS = 0; T1CONbits.TGATE = 0; IFS0bits.T1IF = 0; // Modo timer (clock interno) // Limpa o flag

// Configura Inetrrupcao IPC1bits.T1IP = 7; //Priority 7 (0,1,...7) IPC1bits.T1IS = 0; //SubPriority 0 (0,1,2,3) IEC0bits.T1IE = 1; // TMR1 Enable Bit // Habilita Interrupo global INTEnableSystemMultiVectoredInt(); T1CONbits.TON = 1; // TMR1 ligado }

Crie a funo Main(). Dentro da funo Main(), limpe (reset) todas as portas e configure a direo dos pinos I/O.
// Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0; // Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF;

Configure o Timer1 e insira um loop while infinito para que o programa no termine sua execuo.
configura_timer1(); while(1) ;

Teste o programa com o Mplab SIM. Volte a mensurar o tempo transcorrido entre o acender e o apagar do led. Analise o resultado mensurado. Compare com o que voc observou na atividade 1a. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo Curso Microcontroladores PIC32F | 49

RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Atividade 2 Faa o timer1 contar at 8 segundos. Perceba que se voc fizer:
// Configura o registrador de perodo // PR1 = (Fosc * Tempo)/(FPBDIV * PS) // PR1 = (8000000 * 8)/(8 * 64) = 125000 PR1 = 125000; // Configura o registrador de perodo

O programa no contar corretamente, pois PR1 um registrador de 16 bits, logo o valor que lhe sera atribudo 59464. Fazendo com que o timer1 opere com 59464/(8000000/8/64) = 3.8 segundos. Veja figura 47.

Figura 47: Overload do registrador PR1 Em outras palavras, sendo PR1 um registrador de 16 bits o valor mximo que podemos atribui-lo 2^6-1 = 65535. Desta forma, altere o prescaler do timer1 (T5CONbits.TCKPS) e o contador (PR1) para obter os 8 segundos desejados.

Atividade 3 O LED1 deve piscar com velocidades que variam de 1 a 5 segundos com incrementos de 1 segundo. Para tanto o boto 1 servir para incrementar a velocidade enquanto o boto 2 para decrement-la.

Curso Microcontroladores PIC32F | 50

7.3. Aula 3 Comunicao com LCDs Alfa-Numricos


Objetivo Utilizao de displays LCD (liquid crystal display) para interface homem maquina. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12 Display LCD 16x2

Referncias Manual do display Hantronix (HDM16216H-B), disponvel em: http://www.hantronix.com/down/char-comm.pdf Aula prtica 1 Aula prtica 2 Introduo Displays LCDs podem ser do tipo alfa-numricos (exibem caracteres) ou grficos (pontos, linhas, curvas, etc). Os LCDs alfanumricos podem ser classificados segundo o nmero de colunas e linhas de caracteres que ele pode exibir. Nesta pratica iremos trabalhar com LCD alfa-numrico 16x2 (16 colunas e 2 linhas) para exibio de letras e nmeros. (Figura 48)

Figura 48: LCD alfa-numrico 16x2 O LCD possui 8 pinos para dados (D0-D7), 3 pinos para controle e 2 de alimentao. Alguns ainda possuem uma luz na parte posterior do visor (back-light) para iluminar o LCD em condies de pouca luminosidade. Os pinos de controle (RS, R/W e E) servem para a comunicao do microcontrolador com o LCD e vice-versa. O pino RS informa se os bits contidos no barramento (D0-D7) so dados (1) ou instruo (0). O pino R/W seleciona entre a escrita (0) na RAM do LDC e leitura (1) da RAM do LCD. Por fim, o pino E (enable) habilita ou no o envio/leitura da informao contida em D0-D7. Para inicializar o display necessrio enviar os comandos corretos e respeitar o tempo prCurso Microcontroladores PIC32F | 51

estabelecido pelo fabricante para realizar a prxima tarefa. A figura 49 abaixo mostra a inicializao do display [Hantronix HDMI16216H-B] e logo a seguir um pequeno cdigo escrito em C, baseado nos dados da figura 49, a ttulo de comparao.

Figura 49: Inicializao do display HDM16216H-B


void inicializa_LCD(void) { TRIS_E = 0; TRIS_RS = 0; // RS=0 TRIS_RW = 0; // R/W=0 RW_PIN = 0; delay_1ms(20); comando_LCD(0x30); delay_1ms(4); comando_LCD(0x30); delay_10us(10); comando_LCD(0x30); comando_LCD(0x38); comando_LCD(0x0c); comando_LCD(0x01); comando_LCD(0x06); } // Wait 20ms or more after VDD reaches 4.5V // COMANDO 0x30 : Envia Comando para Inicializar o Display // my_timer.c //COMANDO 0x30 : Envia Comando para Inicializar o Display // my_timer.c //COMANDO 0x30 : Envia Comando para Inicializar o Display //8 BITS DE DADOS, DISPLAY COM 2 LINHAS, CARACTER 7x5 PONTOS //DISPLAY ON, SEM CURSOR, SEM BLINK //LIMPA DISPLAY //DESLOCAMENTO DO CURSOR P/ DIREITA

Curso Microcontroladores PIC32F | 52

Os comandos a seguir foram extrados do manual do display [Hantronix HDMI16216H-B].

Figura 50: Comandos do LCD Curso Microcontroladores PIC32F | 53

Outra informao relevante para a correta utilizao do display saber o endereo da posio de cada caractere.

Figura 51: Endereo das clulas do LCD 16x2 Atividade 1 Como os programas tendem a aumentar muito de tamanho a medida que vamos acrescentando mais perifricos, por exemplo, nesta aula iremos usar botes, timers e o LCD, o cdigo fica muito confuso. Por isso, uma boa prtica de programao para microcontroladores ser adotada a partir de agora. Trata-se da modularizao do cdigo, onde criaremos arquivos fonte com extenso (.c) e arquivos de cabealho (headers) com extenso (.h) a fim de tornar o cdigo mais legvel e organizado. Primeiramente crie um arquivo chamado init_sys.c e init_sys.h. Salve-os na pasta do seu projeto. (File New, File Save as...) Esse arquivo possuir a inicializao do sistema. Inclua os arquivos no seu projeto: Na aba Source Files da rea de trabalho clique com o boto direito do mouse e escolha Add Files..., na janela que se abre selecione o arquivo init_sys.c. Na aba Header Files da rea de trabalho clique com o boto direito do mouse e escolha Add Files.., na janela que se abre selecione o arquivo init_sys.h. No arquivo init_sys.h insira o seguinte cdigo:
#ifndef INIT_SYS_H #define INIT_SYS_H #include <p32xxxx.h> //include para o PIC32MX360F512 void init_sys(void); #endif

No arquivo init_sys.c Insira o seguinte cdigo:


#include "..\\header/init_sys.h" void init_sys(){ // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0; // Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF; }

Inclua a referncia do arquivo em main.c. Curso Microcontroladores PIC32F | 54

#include "..\\header/init_sys.h"

Isso far com que as funes e variveis do arquivo init_sys.h possam ser interpretadas dentro do arquivo main.c. Agora faa o mesmo para my_timer.c e my_timer.h. Esses arquivos contero as temporizaes necessrias para utilizao do LCD. Em my_timer.c inclua o seguinte cdigo:
#include "..\\header/init_sys.h" void delay (int PR, unsigned int x) { T5CONbits.TON = 0; TMR5 = 0; PR5 = PR; T5CONbits.TCKPS = 3; T5CONbits.TCS = 0; T5CONbits.TGATE = 0; IFS0bits.T5IF = 0; T5CONbits.TON = 1; while(x != 0) { // Temporizacao while(IFS0bits.T5IF == 0); IFS0bits.T5IF = 0; x--; } T5CONbits.TON = 0; } // Delay = 1ms*X void delay_1ms(unsigned int x) { // Periodo TMR : (Fosc * Tempo)/(FPBDIV * PS) // PR5 = (8000000 * 0,001)/(2 * 8) = 500 PR5 = 500; delay(500,x); } // TMR OFF // TMR OFF // ZERA CONTADOR // Prescaler 1:8 // CLK INTERNO // Limpa flag // TMR ON

// Delay = 10us*X void delay_10us(unsigned int x) { // Periodo TMR : (Fosc * Tempo)/(FPBDIV * PS) // PR5 = (8000000 * 0.000010)/(2 * 8) = 5 PR5 = 5; delay(5,x); }

Esse cdigo contem o clculo do perodo do timer e do prescaler necessrios para se obter o tempo desejado. Caso voc no entenda o cdigo acima, retorne a aula 2 e estude como configurar os registradores necessrios ao uso de timers e contadores. Em my_timer.h insira o cdigo:
#ifndef MY_TIMER_H #define MY_TIMER_H #include <p32xxxx.h> //include para o PIC32MX360F512

void delay(int, unsigned int); //ATRASO

Curso Microcontroladores PIC32F | 55

void delay_1ms(unsigned int); //ATRASO MLTIPLO DE 1MS void delay_10us(unsigned int); //ATRASO MLTIPLO DE 10US #endif

Por fim crie os arquivos my_lcd.c e my_lcd.h. Esses arquivos contero as funes especificas do lcd. Em my_lcd.c inclua o seguinte cdigo:
#include "..\\header/my_lcd.h" // LCD Init void inicializa_LCD(void) { TRIS_E = 0; TRIS_RS = 0; // RS=0 TRIS_RW = 0; // R/W=0 RW_PIN = 0; delay_1ms(100); comando_LCD(0x30); delay_1ms(4); comando_LCD(0x30); delay_10us(10); comando_LCD(0x30); comando_LCD(0x38); comando_LCD(0x0c); comando_LCD(0x01); comando_LCD(0x06); } // Limpa LCD void limpar_LCD(void) { comando_LCD(0x01); delay_1ms(2); } // Envia Dado void dado_LCD(unsigned char dado) { LATE = (TRISE&0xFFFFFF00); // Configura pinos LCD como saida RS_PIN = 1; // SELECIONA PARA DADOS LATE = (LATE&0xFFFFFF00)|dado; // Escreve Dados na Port E_PIN = 1; // Envia Dado delay_10us(1); E_PIN = 0; delay_10us(4); LATE = (TRISE|0x000000FF); // Configura pinos LCD como entrada } // Envia Comando void comando_LCD(unsigned char dado) { LATE = (TRISE&0xFFFFFF00); // Configura pino como sada RS_PIN = 0; // SELECIONA PARA DADOS LATE = (LATE&0xFFFFFF00)|dado; // Escreve Dados na Port E_PIN = 1; // Envia Dado delay_10us(1); E_PIN = 0; delay_10us(4); //ENVIA COMANDO 0x01 //DELAY DE 2ms // Wait 20ms or more after VDD reaches 4.5V // COMANDO 0x30 : Envia Comando para Inicializar o Display //COMANDO 0x30 : Envia Comando para Inicializar o Display //COMANDO 0x30 : Envia Comando para Inicializar o Display //COMANDO DISPLAY DE 8 VIAS, 2 LINHAS, E CARACTER 7X5 //DISPLAY ON, SEM CURSOR, SEM BLINK //LIMPA DISPLAY //DESLOCAMENTO DO CURSOR P/ DIREITA

Curso Microcontroladores PIC32F | 56

LATE = (TRISE|0x000000FF); // Configura pinos LCD como entrada } // Escreve Lcd void escreve_frase_LCD(const char *frase) { do { dado_LCD(*frase); }while(*++frase); }

Em my_lcd.h inclua o seguinte cdigo:


#ifndef MY_LCD_H #define MY_LCD_H #include <p32xxxx.h> // PINOS LCD (CONTROLE E DADOS) #define DATA_PIN_7 #define DATA_PIN_6 #define DATA_PIN_5 #define DATA_PIN_4 #define DATA_PIN_3 #define DATA_PIN_2 #define DATA_PIN_1 #define DATA_PIN_0 #define TRIS_DATA_PIN_7 #define TRIS_DATA_PIN_6 #define TRIS_DATA_PIN_5 #define TRIS_DATA_PIN_4 #define TRIS_DATA_PIN_3 #define TRIS_DATA_PIN_2 #define TRIS_DATA_PIN_1 #define TRIS_DATA_PIN_0 #define E_PIN #define RS_PIN #define RW_PIN #define #define #define TRIS_E TRIS_RS TRIS_RW //include para o PIC32MX360F512 LATEbits.LATE7 LATEbits.LATE6 LATEbits.LATE5 LATEbits.LATE4 LATEbits.LATE3 LATEbits.LATE2 LATEbits.LATE1 LATEbits.LATE0 TRISEbits.TRISE7 TRISEbits.TRISE6 TRISEbits.TRISE5 TRISEbits.TRISE4 TRISEbits.TRISE3 TRISEbits.TRISE2 TRISEbits.TRISE1 TRISEbits.TRISE0 LATDbits.LATD4 LATBbits.LATB15 LATDbits.LATD5 TRISDbits.TRISD4 TRISBbits.TRISB15 TRISDbits.TRISD5 //INCIALIZA LCD //LIMPA LCD //ENVIA COMANDO AO LCD //ESCREVE BYTE NO LCD //ESCREVE FRASE NO LCD

void inicializa_LCD(void); void limpar_LCD(void); void comando_LCD(unsigned char); void dado_LCD(unsigned char); void escreve_frase_LCD(const char *); #endif

Em main.c insira o cdigo para a atividade 1.


// INCLUDES #include <p32xxxx.h> #include <stdio.h> #include <stdlib.h> #include "..\\header/init_sys.h" #include "..\\header/my_timer.h" //include para o PIC32MX360F512

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2 // DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7

//BOTO 1 //BOTO 2 //BOTO 3

Curso Microcontroladores PIC32F | 57

#define

Botao_4 PORTDbits.RD13

//BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

// LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 void aula4_atividade1 (void){ inicializa_LCD(); limpar_LCD(); while(1) {

//INICIALIZA LCD //LIMPA O LCD

if(!Botao_1) { limpar_LCD(); // LIMPA LCD comando_LCD(0x80); // POSICIONA CURSOR NA LINHA 0 COLUNA 0 escreve_frase_LCD("TECLA 1"); // ESCREVE MENSAGEM while(!Botao_1); limpar_LCD(); } else if(!Botao_2) { limpar_LCD(); comando_LCD(0xC0); //POSICIONA CURSOR NA LINHA 1 COLUNA 0 escreve_frase_LCD("TECLA 2"); while(!Botao_2); limpar_LCD(); } else if(!Botao_3) { limpar_LCD(); comando_LCD(0x89); //POSICIONA CURSOR NA LINHA 0 COLUNA 9 escreve_frase_LCD("TECLA 3"); while(!Botao_3); limpar_LCD(); } else if(!Botao_4) { limpar_LCD(); comando_LCD(0xC9); //POSICIONA CURSOR NA LINHA 1 COLUNA 9 escreve_frase_LCD("TECLA 4"); while(!Botao_4); limpar_LCD(); } else { comando_LCD(0x80); //POSICIONA CURSOR NA LINHA 0 COLUNA 0 escreve_frase_LCD("UFMG - AULA4"); comando_LCD(0xC0); //POSICIONA CURSOR NA LINHA 1 COLUNA 0 escreve_frase_LCD("Atividade 1"); LATA = 0; } } }

int main(void) { init_sys(); aula4_atividade1(); }

// Inicializa o sistema // Chamada da funcao para atividade 1

Curso Microcontroladores PIC32F | 58

Conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Atividade 2 Escreva a seguinte frase (centralizada) no display:
U A F T M I G V I D A A D U E L A # 4 1

Quando o boto 1 for pressionado devera aparecer a seguinte mensagem:


T P r e s s i o n a d a e c l a

Atividade 3 Faa um cronmetro de segundos e minutos conforme mostrado na figura 52. Dica: Utilize uma temporizao de 1 segundo, haja visto que essa a menor unidade de medida temporal necessria para a atividade.

Figura 52: Cronometro. Aula 4 - Atividade 3

Curso Microcontroladores PIC32F | 59

7.4. Aula 4 Configurao e uso do conversor A/D


Objetivo Utilizao de conversores analgico-digitais para aquisio de sinais. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12 Display LCD 16x2

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Captulo 22.0: Analog-Digital Converter Aula prtica 1 Aula prtica 2 Aula pratica 3 Introduo Enquanto sistemas reais so contnuos no tempo os sistemas digitais trabalham em tempo discreto. Dessa forma, conversores analgico-digitais so importantes para se fazer a amostragem de sinais reais afim de discretiz-los para operarem em conjunto com os sistemas digitais (ex: microcontrolador). Existem ainda os conversores digitais-analgicos os quais fazem a converso de sinais discretos no tempo, provenientes do controlador, para sinais contnuos afim de gerar uma referncia/comando para os sistemas reais. A interface entre sistemas digitais e analgicos est exemplificada na figura 53.

Figura 53: Converso A/D - D/A

Curso Microcontroladores PIC32F | 60

Nesta prtica ser analisado o uso do conversor analgico-digital (A/D) para leitura do nvel de tenso em uma das portas do microcontrolador. Os conversores analgico-digitais se diferenciam basicamente por 4 aspectos, a saber: tipo de converso, resoluo, frequncia de Amostragem e forma de apresentao do resultado da converso. Quanto ao tipo de converso ele pode ser: realimentado, paralelo (flash), sigma-delta, aproximaes sucessivas, dentre outros. O PIC32MX360F512, por exemplo, utiliza o mtodo de aproximaes sucessivas. A resoluo diz respeito ao numero de nveis que podem ser representados pelo conversor. Por exemplo, o PIC32MX360F512, que possui 10bits para converso, apresenta 210 = 1024 nveis. A frequncia de amostragem relaciona-se com quo rpido o dispositivo ir fazer a aquisio do sinal. Essa frequncia deve ser maior que duas vezes a maior frequncia contida do sinal de entrada. Por exemplo, se quisermos fazer a leitura de um sinal cuja frequncia mxima seja 2Khz, a frequncia de amostragem deve ser superior a 4Khz. Geralmente utiliza-se uma frequncia de 5 a 10 vezes maior que a maior frequncia do sinal. Pois se aumentarmos muito a frequncia o custo computacional tambm ir aumentar. O ltimo aspecto, apresentao do resultado da converso, determina quantos bits sero utilizados para a converso (para o PIC32MX360F512 podemos escolher entre 16 ou 32 bits), se o resultado ser sinalizado ou no e ainda se ele ser armazenado nos bits mais significativos ou nos bits menos significativos do registrador. No PIC32MX360F512 os canais de converso AD so pinos representados pela sigla Anx, onde x representa o nmero do conversor em questo (0-15). importante ressaltar que esses pinos podem ser utilizados para outras tarefas que no o conversor AD. Por exemplo, o pino 25 do PIC32MX360F512 denominado PGD1/EMUD1/AN0/CN2/RB0 pode ser utilizado como: canal de comunicao para o debugger in circuit (PGD1); canal de comunicao para o emulador in circuit (EMUD1); conversor analgico-digital (AD0), interrupo (CN2) ou ainda canal de comunicao digital (RB0). Compreendido que os canais de converso A/D esto associados a pinos especficos do PIC, que a quantidade e localizao dos conversores variam conforme o microcontrolador utilizado e, tendo em vista que o PIC32MX360F512 trabalha com o mtodo de aproximaes sucessivas e possui 10 bits para converso passaremos para a explicao de como feita a converso do sinal. Quando o sinal analgico inserido no pino correspondente do conversor existe um circuito denominado Sample and Hold (amostra e congela). Em um primeiro momento o capacitor se carrega com a tenso do sinal de entrada, esse instante denominado Acquisition Time (perodo de aquisio). Posteriormente o capacitor chaveado para se realizar a leitura do valor obtido no primeiro passo, esse instante denominado A/D Conversion Time (perodo de converso). (Veja figuras 54 e 55) nesse instante que o mtodo de converso por aproximaes sucessivas utilizado.

Figura 54: Circuito de amostragem do sinal

Curso Microcontroladores PIC32F | 61

Figura 55: Sequencia de amostragem e converso do ADC Para melhor entendimento imagine uma tenso que varie de 0 a 3,3 volts. Se tivermos um conversor A/D de 1 bit s teremos dois estados, logo s seremos capazes de identificar 0V ou 3,3V com cada passo equivalente a 3,3V. Agora, se tivermos um conversor de 2 bits teremos 4 estados, logo, seremos capazes de representar os nmeros 0V, 1,1V, 2,2V e 3,3V com cada passo equivalente a 1,1V. Se tivermos um conversor de 3 bits teremos 8 estados e podemos representar os nmeros 0V, 0,47V, 0,94V, 1,41V, 1,88V, 2,35V, 2,82V e 3,29V com cada passo equivalente a 0,47V. Ou seja, quanto maior o nmero de bits do conversor menor o passo e portanto maior a possibilidade de nmeros que podem ser representados corretamente em relao tenso de referncia. No caso do conversor A/D existente no PIC32MX360F512 temos 10bits de resoluo, portanto 210=1024 passos. O valor de cada passo dado por: V REF/210 = VREF/1024. Nesta pratica iremos utilizar VREF = 3,3V, que a tenso de referencia interna do PIC32MX360F512 12. Em uma representao binria o bit mais significativo (Msb Most Significant Bit) representa metade do valor mximo representvel. O segundo bit mais significativo representa metade da metade, ou seja, um quarto do valor mximo representvel. O terceiro bit mais significativo representa um oitavo e assim sucessivamente. Como exemplo considere um nmero de 4 bits. O valor mximo que podemos representar 24=16, quando todos os bits esto em '1'. Agora, se somente o bit mais significativo estiver em '1' o resultado ser '1000' o que equivale a 8 (metade do valor mximo). Se somente o segundo bit mais significativo estiver em '1' o resultado ser '0100' o que equivale a 4 (um quarto do valor mximo). O mtodo de converso por aproximaes sucessivas realiza a converso baseado nesse principio. Primeiro ele verifica se a tenso a ser convertida maior ou menor que metade da tenso de referncia (no nosso caso, 3,3V).Caso a tenso seja maior o MSB recebe '1', caso a tenso seja menor o MSB recebe '0'. Depois o conversor considera um quarto da tenso de referncia. Caso o MSB tenha sido '1' o conversor compara a tenso de entrada com metade mais um quarto da tenso de referncia. Caso o MSB tenha sido
12 Embora seja utilizado nessa pratica a tenso de referencia interna possvel utilizar referencias externas de tenso atravs da configurao correta do mdulo ADC.

Curso Microcontroladores PIC32F | 62

'0' o conversor compara a tenso de entrada com metade menos um quarto da tenso de referncia. Este processo de comparao prossegue at o dcimo bit ser preenchido, momento no qual a converso finalizada. Como exemplo considere uma tenso de entrada de 2,0365V e a tenso de referncia de 3,3V. 1o - o conversor verifica de a tenso de entrada superior ou inferior a 3,3/2=1,65V. No caso ela superior. Dessa forma o MSB recebe o valor '1'. 2o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)=2,475V. No caso ela inferior. Dessa forma o segundo bit recebe o valor '0'. 3o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)=2,0625V. No caso ela inferior. Dessa forma o terceiro bit recebe o valor '0'. 4o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)=1,856V. No caso ela superior. Dessa forma o quarto bit recebe o valor '1'. 5o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/32)=1,959V. No caso ela superior. Dessa forma o quinto bit recebe o valor '1'. 6o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/32)+(3,3/64)=2,011V. No caso ela superior. Dessa forma o sexto bit recebe o valor '1'. 7o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/32)+(3,3/64)+(3,3/128)=2,0367V. No caso ela inferior. Dessa forma o stimo bit recebe o valor '0'. 8o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/64)+(3,3/128)-(3,3/256)=2,0238V. No caso ela superior. Dessa forma o oitavo bit recebe o valor '0'. 9o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/64)+(3,3/128)-(3,3/256)+(3,3/512)=2,0303V. No caso ela superior. Dessa forma o nono bit recebe o valor '1'. 10o - o conversor verifica se a tenso de referncia superior ou inferior a (3,3/2)+(3,3/4)(3,3/8)-(3,3/16)+(3,3/64)+(3,3/128)-(3,3/256)+(3,3/512)+(3,3/1024)=2,0334V. No caso ela superior. Dessa forma o dcimo bit (LSB Less Significant Bit) recebe o valor '1'. Assim o resultado binrio da converso : 1001110011 Perceba que sero necessrias 10 iteraes para se converter os 10 bits que representam o resultado da converso. Em geral, para um conversor de n bits so necessrias n iteraes com o mtodo de aproximaes sucessivas. Uma maneira simples de transformar o valor da converso (valor entre 0 e 1023, no nosso caso) em um valor real (valor entre 0 e VREF) multiplicar o resultado da converso pela resoluo do conversor. Para o nosso caso teremos: V REF =3,3V N =10 Bits niveis=210=1024 Resoluo=3,3/1024=0,00322265625 Logo : valor real =resultado ad0.00322265625. Curso Microcontroladores PIC32F | 63

Atividade 1 Aps criar um projeto inclua os arquivos init_sys.c, init_sys.h, my_lcd.c, my_lcd.h, my_timer.c e my_timer.h utilizados na prtica anterior. Lembre-se de fazer uma cpia dos arquivos para a pasta do projeto que voc acabou de criar. Pois se voc fizer Source Files-> Add Files uma referncia para o arquivo da aula anterior sera criada e no o arquivo propriamente dito. Para melhor esclarecimento veja: Anexo I : Adicionando arquivos durante a criao do projeto e Anexo II : Adicionando arquivos depois da criao do projeto. Agora crie um arquivo chamado my_adc.c e my_adc.h. Salve (File New, File Save as...) e inclua os arquivos no seu projeto: Na aba Source Files da rea de trabalho clique com o boto direito do mouse e escolha Add Files..., na janela que se abre selecione o arquivo my_adc.c. Na aba Header Files da rea de trabalho clique com o boto direito do mouse e escolha Add Files.., na janela que se abre selecione o arquivo my_adc.h. No arquivo my_adc.h insira o seguinte cdigo:
#ifndef MY_ADC_H #define MY_ADC_H #include <p32xxxx.h> #define SYS_FREQ void inicializa_adc(void); #endif //include para o PIC32MX360F512 (80000000L)

No arquivo my_adc.c insira o seguinte cdigo:


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include "..\\header/my_adc.h" void inicializa_adc(){ AD1CON1bits.ADON = 0; // Desabilita mdulo AD AD1CHSbits.CH0SA = 5; // Conecta canal 5 (RB5/AN5) na entrada positiva do MUXA AD1CHSbits.CH0NA = 0; // Conecta a referencia negativa (Vr-) na entrada negativa do MUXA AD1CON1bits.ADSIDL = 1; // Conversor AD funciona em modo Idle AD1CON1bits.FORM = 0; // Resultado da converso em 16bits AD1CON1bits.SSRC = 7; // Converso automatica apos amostragem AD1CON1bits.ASAM = 1; // Amostragem automtica Habilitada AD1CON2bits.VCFG = 0; // Referencia interna de tenso (AVdd e AVss) AD1CON2bits.CSCNA = 0; // Auto scan desabilitado AD1CON2bits.SMPI = 0; // Interrupo a cada converso AD1CON2bits.BUFM = 0; // Resultado armazenado em 1 buffer de 16bits AD1CON2bits.ALTS = 0; // Nao alterna MUX A com MUXB AD1CON3bits.ADRC = 0; // Clock proveniente do clock de perifericos do PIC (TPB) AD1CON3bits.SAMC = 31; // Tempo de amostragem 31 Tad AD1CON3bits.ADCS = 128; // Tad = 128 x TPB AD1PCFG = 0xFFDF; // RB5/AN5 como entrada analogica AD1CSSL = 0x0000; // Auto scan desabilitado

AD1CON1bits.ADON = 1; // Habilita o mdulo AD }

Para entender a configurao do cdigo acima considere a figura 56. Ela mostra que a entrada RB5/AN5 do PIC est conectada a um divisor de tenso que ser utilizado como entrada do nosso sinal analgico. Por isso a entrada RB5/AN5 deve ser configurada como entrada analgica conforme mostrado na linha 24 do cdigo acima (AD1PCFG = 0xFFDF, 1 indica entrada digital e 0 Curso Microcontroladores PIC32F | 64

indica entrada analgica).

Figura 56: Esquema eltrico do trimpot do kit EXPLORER16BR para utilizaco do conversor AD O diagrama em blocos do conversor AD pode ser visto na figura 57. Ao se fazer AD1CON2bits.VCFG=0 estamos tomando os sinais de alimentao do PIC (AVDD=3.3V e AVSS=0V) como referncia de tenso. Caso seja necessrio podemos utilizar referncias externas (VREF+ e VREF-) variando-se a configurao desse bit. Ao se fazer AD1CHSbits.CH0SA=5 e AD1CHSbits.CH0NA=0 estamos conectando, respectivamente, o pino RB5/AN5 na entrada positiva e a referncia negativa de tenso (AVSS) na entrada negativa do circuito sample and hold.

Curso Microcontroladores PIC32F | 65

Figura 57: Diagrama em blocos mdulo AD A configurao AD1CON1bits.FORM = 0 implica que o resultado da converso sera uma palavra de 16 bits no sinalizada conforme mostra a figura 58. Como o resultado da converso possui 10 bits este pode ser armazenado em um buffer de 16bits (AD1CON2bits.BUFM = 0) ou em dois de 8 bits.

Figura 58: Formato do dado convertido

Curso Microcontroladores PIC32F | 66

Em main.c insira o cdigo para a atividade 1.


// INCLUDES #include "..\\header/init_sys.h" #include "..\\header/my_timer.h" #include "..\\header/my_lcd.h" #include "..\\header/my_adc.h" // CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2 /// DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7 #define Botao_4 PORTDbits.RD13 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 int main(void) { char buffer_lcd[17]; float resultado; init_sys(); // Inicializa o sistema

//BOTO 1 //BOTO 2 //BOTO 3 //BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

inicializa_LCD(); // INICIALIZA LCD limpar_LCD(); // LIMPA O LCD comando_LCD(0x80); escreve_frase_LCD("AULA5-MULTIMETRO"); inicializa_adc(); while(1){ while (!AD1CON1bits.DONE); //Aguarda conversao resultado = (3.3*ADC1BUF0)/1023; // Faz a conversao do resultado AD para tensao sprintf(buffer_lcd,"CH5 : %3.2f V",resultado); // Carrega resultado no buffer comando_LCD(0xC0); escreve_frase_LCD((char *)buffer_lcd); } return 0; } // Inicializa AD

Teste o programa com o Mplab SIM. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Curso Microcontroladores PIC32F | 67

Perceba que como a amostragem automtica est habilitada (AD1CON1bits.ASAM = 1) no final de cada converso (AD1CON1bits.DONE) o modulo AD inicia automaticamente uma nova amostragem para o prximo loop. Atividade 2 Altere o cdigo da atividade 1 de forma que a converso automtica seja desabilitada. Faa com que a converso somente seja efetuada se o boto 1 for pressionado. Ou seja, mesmo variandose o trimpot o valor apresentado no lcd permanece inalterado at que o boto 1 seja pressionado. Atividade 3 A placa EXPLORER16BR apresenta alm do trimpot conectado ao pino RB5/AN5 um sensor de temperatura conectado a entrada analgica conectado ao pino RB4/AN4 (Figura 59). O aluno poder verificar seu funcionamento baixando o datasheet do MCP9700 para estudar a faixa de operao e utilizando o resultado do canal 4 assim como foi feito para o canal 5 nas atividades anteriores.

Figura 59: Esquema eltrico do sensor de temperatura do kit EXPLORER16BR para utilizaco do conversor AD

Curso Microcontroladores PIC32F | 68

7.5. Aula 5 Interrupes Externas


Objetivo Familiarizao com interrupes externas. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Captulo 8.0: Interrupts. Introduo Muitas vezes necessita-se de uma interrupo externa para informar ao controlador que algum evento ocorreu. A diferena entre a utilizao de uma interrupo externa e uma porta digital como a utilizada na aula 1 que as interrupes obrigam o controlador a parar o que ele estiver fazendo para tratar tal evento em uma funo especifica do cdigo. Um evento em uma porta digital normal s sera tratado quando o programa chegar na linha que faz a leitura do pino digital. Assim, interrupes geram saltos incondicionais para outras partes do programa instantaneamente quando um evento gerado. O PIC32MX360F512L apresenta 5 portas de interrupo externa, a saber: INT0, INT1, INT2, INT3 e INT4 presentes nos pinos RF6, RE8, RE9, RA14, RA15, respectivamente. Para utilizar uma interrupo precisaremos configurar os seguintes registradores: INTCON: Define principalmente se a interrupo ser gerada na borda de descida ou de subida. IFS0: Utilizaremos o flag que indica a ocorrncia da interrupo. IEC0: Define principalmente se a interrupo estar habilitada ou no. IPCx: Define a prioridade da interrupo. Atividade 1.a Em main.c insira o cdigo para a atividade 1a.
// INCLUDES #include <p32xxxx.h> #include <plib.h> //include para o PIC32MX360F512

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8 //(PBCLK is SYSCLK divided by 8,4,2,1)

Curso Microcontroladores PIC32F | 69

// DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7 #define Botao_4 PORTDbits.RD13 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 int main(){ int i=0; // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0;

//BOTO 1 //BOTO 2 //BOTO 3 //BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

// Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF; while(1) { for (i=0; i<50000; i++); for (i=0; i<50000; i++); for (i=0; i<50000; i++); for (i=0; i<50000; i++); if(!Botao_1) Led6=!Led6; } }

Este programa foi inserido para percebemos melhor a utilizao da interrupo. Note que a leitura do boto 1 s ser feita aps a execuo dos 4 loops for, utilizados somente para gastar o tempo de execuo do programa. Teste o programa com o Mplab SIM. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Curso Microcontroladores PIC32F | 70

Perceba que o Led 6 no acende imediatamente que o boto 1 pressionado. Atividade 1.b Em main.c insira o cdigo para a atividade 1b.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 // INCLUDES #include <p32xxxx.h> #include <plib.h> //include para o PIC32MX360F512

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8 //(PBCLK is SYSCLK divided by 8,4,2,1) // DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7 #define Botao_4 PORTDbits.RD13 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7

//BOTO 1 //BOTO 2 //BOTO 3 //BOTO 4

//LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

void __ISR(_EXTERNAL_0_VECTOR, ipl2) Int0Handler(void) { Led2=!Led2; IFS0bits.INT0IF = 0; // clear the interrupt flag } int main(){ int i=0; // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0; // Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; // Int0 : PORT F6 (Input) TRISG = 0xFEBF; // INT0 IEC0bits.INT0IE =0; IFS0bits.INT0IF = 0; INTCONbits.INT0EP = 1; // Rising Edge // Configura Inetrrupcao IPC0bits.INT0IP = 7; //Priority 7 (0,1,...7) IPC0bits.INT0IS = 0; //SubPriority 0 (0,1,2,3) IEC0bits.INT0IE =1;

Curso Microcontroladores PIC32F | 71

66 67 68 69 70 71 72 73 74 75 76 77 78 79 80

INTEnableSystemMultiVectoredInt(); while(1) { for (i=0; i<50000; i++); for (i=0; i<50000; i++); for (i=0; i<50000; i++); for (i=0; i<50000; i++); if(!Botao_1) Led6=!Led6; } }

O programa da atividade 1a foi mantido para facilitar a comparao do efeito da interrupo. Perceba, na linha 29 do cdigo acima, que a interrupo que iremos utilizar a INT0 (void __ISR(_EXTERNAL_0_VECTOR, ipl2) Int0Handler(void)). Quando uma borda de subida percebida no pino RF6 (INT0) uma interrupo gerada e a funo Int0Handler chamada. Nessa funo deve ser inserida toda tarefa a ser executada quando a interrupo externa gerada. No nosso caso temos somente uma linha que troca o valor do Led 2 a cada chamada da interrupo. Teste o programa com o Mplab SIM. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Teste o programa. Perceba neste caso que o Led 2 altera seu valor imediatamente aps o sinal no PORT RF6 enquanto que o Led 6 ainda deve esperar o programa executar os loops for. Isso acontece porque a interrupo gera um salto incondicional no programa fazendo com que ele trate a funo de interrupo e depois retome seu curso normal.

Curso Microcontroladores PIC32F | 72

7.6. Aula 6 Comunicao UART via RS232


Objetivo Familiarizao com comunicao serial. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12 Cabo DB9 Macho/Femea ou Cabo DB9 Macho/USB

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Captulo 19.0: Universal Asynchronous Receiver Transmitter (UART) Introduo A UART (Universal Asynchronous Receiver Transmitter) um mdulo para comunicao serial full-duplex via protocolos do tipo RS232, RS422, RS423, RS485. Nesta pratica iremos utilizar o RS232. A comunicao duplex, ou bidirecional, ocorre quando se tm dois ns (pontos) de comunicao, no caso o PIC e o PC. Caso a transmisso de dados seja feita somente em um sentido diz-se que a comunicao simplex (um sistema transmite e o outro recebe). Caso a transmisso seja feita em ambos os sentidos a comunicao denominada half-duplex (enquanto um dispositivo transmite o outro recebe e vice-versa) ou full-duplex (ambos dispositivos enviam e recebem dados simultaneamente). Para a comunicao full-duplex o TX (transmissor) do PIC deve estar ligado ao RX (receptor) do PC e o RX do PIC deve estar ligado ao TX do PC. (Figura 60)

Figura 60: Conexo cabo DB9 Existem alguns cabos do tipo DB9/USB que possuem um driver para emular uma porta serial virtual atravs da conexo USB. Assim poderia-se utilizar um cabo DB9Macho/USB ao invs de um cabo DB9Macho/DB9Femea. (Figura 61) Curso Microcontroladores PIC32F | 73

Figura 61: Conector DB9Macho/DB9Femea (esquerda), DB9MAcho/USB (direita). O RS232 um protocolo de comunicao serial estabelecido pela EIA (Electronic Industries Association) que especifica a temporizao dos sinais, tipos de sinais, tenses, conexes, etc, para a comunicao. As caractersticas principais do protocolo RS232 so: Tenso de Operao: No protocolo RS232 o nvel logico '0' (zero) vai de -12V a -3V e o nvel logico '1' (um) vai de +3V a +12V. Tenses entre -3V e +3V so indeterminadas. Como os sistemas embarcados utilizam circuitos TTL cujo nvel de operao vai de '0' (zero) a '5' (cinco) volts um driver se faz necessrio. Na placa EXPLORER16BR quem faz essa converso o CI MAX232. (Figura 62)

Figura 62: Esquema eltrico do conector DB9 e Driver MAX232 do kit EXPLORER16BR para comunicao RS232. Curso Microcontroladores PIC32F | 74

Baud Rate : ou taxa de transferncia refere-se a quantidade de bits que sero transmitidos por unidade de tempo. Um baud rate tipico de 9600 indica a transmisso de 9600 bits por segundo. Comunicao Sncrona x Assncrona : Na transmisso sncrona um sinal de clock gerado pelo dispositivo mestre afim de se criar uma temporizao regular para o trfego dos dados. Na comunicao assncrona (ex: UART) no existe um sinal de clock indicando o tempo de envio e recebimento dos dados. O controle de informao nesse caso se da atravs de dois pinos a saber: RTS (ready to send) e CTS(clear to send). O transmissor sinaliza atravs do pino RTS que deseja enviar informao. O receptor, ao perceber a sinalizao prepara-se para receber o dado setando o pino CTS. Quando o transmissor recebe a autorizao atravs do sinal CTS ele inicia a transmisso. A utilizao dos sinais RTS e CTS (pinos RF13/U2RTS e RF12/U2CTS do PIC32MX360F512, respectivamente) requer mais uma conexo no cabo DB9 (pinos 7 e 8, respectivamente), observe a figura 62. Tamanho do pacote : O tamanho do pacote de dados pode variar sendo que sua estrutura constituda por: 1 start bit ; 8 ou 9 bits de dados ; 0 ou 1 bit de paridade ; 1 ou 2 bits de parada.

Tipo Start Bit Dado Paridade

Descrio

Tamanho (bits)

O pacote sempre inicia com o nvel logico zero para 1 indicar o inicio da transmisso. Os bits de dados (informao) so enviados logo aps 8 ou 9 o start bit. O bit de paridade serve para checar se a informao 0 ou 1 recebida est correta. Haja visto que a transmisso via cabos13 pode apresentar distrbios (rudos) e modificar o nvel logico de algum bit de dado. Ele adicionado aps a transmisso do pacote de dados para verificao de erros. Sinaliza o fim da transmisso. 1 ou 2

Stop Bit

Perceba que os perifricos conhecem a durao de cada bit devido a configurao do baud rate. Por exemplo, seja um baud rate de 9600, ento um bit ter durao de 104S. Assim que o transmissor sinaliza o bit RTS e recebe de volta a confirmao do bit CTS enviada pelo receptor a temporizao de inicia. Os primeiros 140S determinam a durao do start bit, os 104S posteriores determinam o primeiro bit de dado, aps mais 104S o segundo bit de dado transmitido e assim ocorre at que o stop bit seja transmitido.

Atividade 1
13 O protocolo RS232 limita o tamanho mximo do cabo em 15metros.

Curso Microcontroladores PIC32F | 75

Esta atividade tem por objetivo fazer a comunicao entre o computador e o PIC32MX360F512 atravs do Hyperterminal14. Se voc for usurio do Windows Vista necessrio baixar o software em http://www.hilgraeve.com/. Se voc utiliza o Windows XP ou anterior ele j est instalado em sua mquina. Aps criar um novo projeto inclua os arquivos init_sys.c, init_sys.h, my_lcd.c, my_lcd.h, my_timer.c e my_timer.h utilizados nas praticas anteriores. Agora crie e inclua os arquivos my_rs232.c e my_rs232.h. no seu projeto. No arquivo my_rs232.h insira o seguinte cdigo:
#ifndef MY_RS232_H #define MY_RS232_H #include <p32xxxx.h> //include para o PIC32MX360F512 //INICIALIZA UART2 //LE UART //ESCREVE UART

void inicializa_UART2(void); unsigned int RxUART2(void); void TxUART2(unsigned int data); #endif

No arquivo my_rs232.c insira o seguinte cdigo:


#include "..\\header/my_rs232.h" void inicializa_UART2(void) { // Se BRGH=0 -> U2BRG = (Fosc/FPBDIV)/(16*BaudRate) - 1 // Se BRGH=1 -> U2BRG = (Fosc/FPBDIV)/(4*BaudRate) 1 U2BRG = 25; // BRGH=0 -> U2BRG = (8000000/2)/(16*9600)-1 U2MODEbits.UARTEN = 1; U2MODEbits.UEN = 0; U2MODEbits.ABAUD = 0; U2MODEbits.BRGH = 0; U2MODEbits.PDSEL = 0; U2MODEbits.STSEL = 0; U2STAbits.UTXISEL0 = 0; U2STAbits.UTXISEL1 = 0; U2STAbits.URXISEL = 1; U2STAbits.UTXEN = 1; U2STAbits.URXEN = 1; } unsigned int RxUART2(void) // L UART { if(U2MODEbits.PDSEL == 3) return (U2RXREG); else return (U2RXREG & 0xFF); } void TxUART2(unsigned int data) // Escreve UART { if(U2MODEbits.PDSEL == 3) U2TXREG = data; else U2TXREG = data & 0xFF; } // Habilita UART2 // TX e RX habilitados, CTS e RTS controlados via hardware (MAX232) // Desabilita o autobaudrate // Configurao do BRGH // 8 bits de dados, sem paridade // 1 stop bit // gera interrupcao a cada Tx // gera interrupcao a cada RX // Habilita pino TX // Habilita pino RX

14 [Hyperterminal] um programa capaz de conectar sistemas atravs de redes TCP/IP, DIAL-UP Modems e portas de comunicao COM.

Curso Microcontroladores PIC32F | 76

A configurao do registrador para definio do Baud Rate pode ser melhor interpretada a partir do exemplo extrado do datasheet. (Figura 63)

Figura 63: Exemplo de clculo do Baud Rate Em main.c insira o cdigo para a atividade 1.
// INCLUDES #include "..\\header/init_sys.h" #include "..\\header/my_timer.h" #include "..\\header/my_lcd.h" #include "..\\header/my_rs232.h" // CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2 /// DEFINES // BOTOES (0:PRESSIONADO 1:LIBERADO) #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 #define Botao_3 PORTAbits.RA7 #define Botao_4 PORTDbits.RD13 // LED (0:APAGADO 1:ACESO) #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA4 #define Led6 LATAbits.LATA5 #define Led7 LATAbits.LATA6 //#define Led8 LATAbits.LATA7 int main(void) { char caractere; init_sys(); // Inicializa o sistema

//BOTO 1 //BOTO 2 //BOTO 3 //BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7 //LED8 // Utilizar como Botao_3 e nao Led_8

inicializa_LCD(); // INICIALIZA LCD limpar_LCD(); // LIMPA O LCD inicializa_UART2(); comando_LCD(0x80); escreve_frase_LCD("COMUNICACAORS232"); comando_LCD(0xC0);

Curso Microcontroladores PIC32F | 77

escreve_frase_LCD("Caractere:"); putsUART2("UNIVERSIDADE FEDERAL DE MINAS GERAIS\r\n"); putsUART2("AULA 6 - COMUNICACAO SERIAL VIA RS232\r\n"); putsUART2("Digite algo no teclado para ver o caractere escrito na tela e no lcd\r\n"); while(1) { if(U2STAbits.URXDA){ caractere = RxUART2(); TxUART2(caractere); comando_LCD(0xCD); dado_LCD(caractere); } } } // Espera dado // Recebe dado do pc // Envia dado para pc // Escreve dado no LCD

Conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Para testar o programa desconecte a placa ICD2BR. Em seguida conecte o cabo DB9 Macho na placa EXPLORER16BR e a outra extremidade (DB9 ou USB) no computador. Abra o Hyperterminal. (Figura 64)

Figura 64: Hyperterminal D um nome para sua conexo e clique OK. Na tela que se segue escolha a porta serial (COMx) em que a placa EXPLORER16BR est conectada. (Figura 65) Para cada computador a porta em questo poder variar. Quando se usa um conector USB para emular a porta serial poder aparecer diferentes numeraes das portas como COM4, COM7, COM8, etc.

Curso Microcontroladores PIC32F | 78

Figura 65: Porta COM Selecione os parmetros de comunicao da mesma forma que foram programados no PIC. (Figura 66)

Figura 66: Parmetros da comunicao RS232. Clique OK. Pronto! A comunicao est estabelecida. Para finaliz-la clique desconectar (Figura 67)

Curso Microcontroladores PIC32F | 79

Figura 67: Finalizar comunicao RS232. Para testar seu programa e ver a mensagem inicial na tela do Hyperterminal reste a placa EXPLORER16BR. Assim que voc resetar seu programa e escrever algo as seguintes mensagens devem aparecer no Hyperterminal e lcd. (Figura 68)

Figura 68: Comunicao RS232. Aula 6 - Atividade 1. Atividade 2 Modifique o bit U2MODEbits.BRGH de '0' (zero) para '1' (um) e, modificando o valor do Curso Microcontroladores PIC32F | 80

registrador U2BRG, altere a velocidade de transmisso de 9600bps para 19200bps. Dica: A frmula do clculo para U2BRG, considerando-se U2MODEbits.BRGH=1, pode ser obtida no datasheet. Alm de modificar a taxa de transmisso altere a transmisso para 8bits de dados com bit de paridade par. Atividade 3 Faa um programa de senha composta por 3 dgitos. A senha dever ser armazenada em uma varivel interna ao PIC32MX360F512. A cada caractere digitado um asterisco dever aparecer na tela do LCD. O usurio ter 3 chances para inserir a senha correta. Caso ele acerte a mensagem 'SENHA CORRETA' dever aparecer na tela do computador. Para cada tentativa mal sucedida a mensagem 'SENHA INCORRETA Tentativa x de 3' dever aparecer. Caso a senha seja inserida incorretamente 3 vezes um alarme deve ser acionado (obs: o alarme ser a mensagem 'ALARME!!!' na tela do computador). As figuras 69, 70, 71 e 72 ilustram o funcionamento do programa.

Figura 69: Tela inicial programa de senha.

Curso Microcontroladores PIC32F | 81

Figura 70: Tela LCD programa de senha.

Figura 71: Senha correta.

Curso Microcontroladores PIC32F | 82

Figura 72: Senha incorreta

Curso Microcontroladores PIC32F | 83

7.7. Aula 7 Perifrico PWM e acionamento de motores de passo


Objetivo Familiarizao com o mdulo output compare para modulao PWM. Material Necessrio Placa EXPLORER16BR + PIC32MX360F512L Placa ICD2BR Cabo USB Fonte de Alimentao Cabo RJ12 Motor de Passo

Referncias Datasheet PIC32MX3XX-4XX disponvel no CD1 em Datasheets >> PIC32. Captulo 16.0: Output Compare Aula prtica 2 Introduo A modulao PWM possui vrias aplicaes dentre as quais podemos citar os conversores estticos de potncia nos quais a partir da abertura e fechamento de chaves pode-se controlar o fluxo de potncia entre da fonte carga. Outra aplicao tambm bastante comum, e que ser abordada nesta prtica, so os motores de passo, utilizados em impressoras por exemplo. Para gerar um sinal PWM precisamos do sinal modulante e da portadora. A portadora uma onda do tipo dente de serra com amplitude e frequncia bem definidas. A onda modulante um sinal constante cuja amplitude vai deste o valor mnimo da portadora at seu valor mximo. O sinal PWM gerado fazendo-se a comparao da onda modulante com a portadora. Caso a onda modulante seja maior que a portadora a sada vai para nvel lgico baixo, caso a modulante seja menor que a portadora a sada vai para nvel lgico alto. Como exemplo considere uma portadora com valor mnimo '0' (zero), valor mximo '1' (um) e cuja frequncia seja 2KHz. Considere ainda uma modulante cuja amplitude seja '0.7'. Observe na figura 73 que nos instantes de tempo em que a modulante superior a dente de serra a sada est em nvel lgico baixo e quando a modulante menor a sada est em nvel lgico alto.

Curso Microcontroladores PIC32F | 84

Figura 73: Gerao do sinal PWM Para caracterizar o sinal PWM precisamos de duas grandezas: a frequncia de operao, dada pela frequncia da dente se serra e o ciclo de trabalho. O ciclo de trabalho a porcentagem do tempo em que o sinal PWM permanece em estado ativo. No exemplo apresentado anteriormente a sada permaneceu em nvel lgico alto durante 1,5*10-4s o que representa 30% dos 5*10-4s do perodo da dente se serra. Assim o ciclo de trabalho (ou duty cycle) representado por: D= T ON T

Onde TON o tempo em que o sinal PWM permanece em nvel lgico alto T o perodo da portadora. O mdulo output compare disponvel no PIC nos permite gerar at cinco sinais PWM diferentes, informando apenas a frequncia de operao e o ciclo de trabalho. O modo de funcionamento basicamente o seguinte: O usurio configura o timer com um valor desejado para o perodo, registrador PRx. Este mesmo valor passado ao registrador OCxRS do mdulo output compare e representa o perodo da onda portadora (dente de serra). Em seguida o valor da modulante inicializado no registrador OCxR. O mdulo output compare faz a comparao entre o valor programado pelo usurio (OCxR) e o valor do timer. Quando o valor do timer torna-se maior que o valor armazenado no registrador (OCxR) o modulo output compare gera um evento baseado no modo de operao pr-definido e leva a sada do PWM para nvel lgico alto. Observe o diagrama em blocos do mdulo output compare na figura 74 a seguir.

Curso Microcontroladores PIC32F | 85

Figura 74: Diagrama em blocos do mdulo output compare Para facilitar a compreenso considere o timer como sendo a dente se serra (portadora) e o valor armazenado no registrador do output compare como a referncia (modulante). Alm dos registradores para configurao do timer mostrados na aula prtica 2 devemos configurar o mdulo output compare atravs dos seguintes registradores: OCxCON: Este registrador responsvel por habilitar/desabilitar o modulo output compare, definir se o timer 2 e/ou timer 3 ser utilizado para a comparao, definir se o pino ir de nvel lgico baixo para nvel lgico alto ou vice-versa e se a gerao de pulsos ser contnua ou no. OCxR e OCxRS: O registrador OCxR, denominado registrador primrio, recebe o valor a ser comparado com o contador do timer. O registrador OCxRS, denominado registrador secundrio, recebe o valor mximo da onda portadora (dente de serra).

Curso Microcontroladores PIC32F | 86

Passemos agora a anlise dos motores de passo e sua relao com os sinais PWM. Motores de Passo so um tipo especial de motor que apresentam rotaes precisas caracterizadas pelo nmero de passos por revoluo. Por exemplo, um motor de N passos/revoluo necessita de dar N passos para completar 360o. Ou ainda, cada passo do motor corresponde a 360o/N. Quando maior o nmero de bobinas mais preciso ser o motor, ou seja, menor ser o passo (ngulo entre as posies consecutivas do motor). Embora o motor de passo apresente baixo torque e velocidade seu ponto forte a possibilidade de realizar deslocamentos angulares de forma precisa. Por isso esse tipo de motor amplamente utilizado em aplicaes que no requerem torque nem velocidades elevadas mas cuja preciso essencial. Como exemplo podemos citar impressoras, scanners, cmeras de vdeo, manipuladores robticos, dentre outros.

Atividade 1 Aps criar um novo projeto inclua os arquivos init_sys.c e init_sys.h utilizados nas praticas anteriores. Em main.c insira o cdigo para a atividade 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 // INCLUDES #include <p32xxxx.h> #include <plib.h> //include para o PIC32MX360F512

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_4 //(PBCLK is SYSCLK divided by 8,4,2,1)

void init_TMR2(void) { T2CONbits.TON = 0; TMR2 = 0; // Timer2 Prescaler // TCKPS -> Prescaler // 0 -> 1:1 // 1 -> 1:2 // 2 -> 1:4 // 3 -> 1:8 // 4 -> 1:16 // 5 -> 1:32 // 6 -> 1:64 // 7 -> 1:256 T2CONbits.TCKPS = 6;

// Timer2 desligado // Zera o timer para incio de contagem

// Prescaler 1:256

// Configura o registrador de perodo // PR2 = (Fosc * Tempo)/(FPBDIV * PS) // PR2 = (8000000 * 0.1)/(4 * 64) = 3125 PR2 = 3125; T2CONbits.TCS = 0; T2CONbits.TGATE = 0; IFS0bits.T2IF = 0; T2CONbits.TON = 1; } int main(void) { // Modo timer (clock interno) // Limpa o flag // Timer2 ligado

Curso Microcontroladores PIC32F | 87

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

init_sys(); // Configura Timer 2 (100ms) init_TMR2(); // Configura modulo Output Compare OC5CONbits.ON = 1; // Habilita PWM 5 OC5CONbits.OC32 = 0; // Timer 16bits OC5CONbits.OCTSEL = 0; // Selecao do Timer2 como referencia OC5CON |= 0x5; // Pulsos Continuos OC5CON &= 0xFFFFFFF5; // Pulsos Continuos OC5RS = 3125; // Periodo = PRx OC5R = 2500; // Duty Cycle 20% while(1); return (0); }

O cdigo acima possui uma frequncia de operao de 100ms devido a configurao do timer 2. Perceba, na linha 31, que o perodo equivale a 3125. Desta forma para obtermos um ciclo de trabalho de 20% precisamos inicializar o registrador OC5PR, linha 57, com o valor: 0.8*3125 = 2500. Onde 0.8 representa o complemento do ciclo de trabalho desejado (0.2). Caso voc altere a configurao do mdulo output compare para transio de nvel lgico alto para baixo, ao invs de baixo para alto, o valor do registrador OC5R dever ser 0.2*3125=625. Teste o programa com o Mplab SIM. Aps testar o programa conecte o kit EXPLORER16BR na placa ICD2BR atravs do cabo RJ12. Conecte a placa ICD2BR ao computador atravs da porta USB. Alimente o kit EXPLORER16BR com a fonte de alimentao. Compile o programa (Ctrl+F10). Grave o programa (Program Target Device). Atividade 2 Altere o cdigo da atividade anterior para uma frequncia de operao de 0,25Hz com ciclo de trabalho de 70%. Atividade 3 Estude o funcionamento de um servo motor, ou de um motor de passo, e configure o mdulo PWM para fazer o acionamento do mesmo.

Curso Microcontroladores PIC32F | 88

ANEXOS

Curso Microcontroladores PIC32F | 89

Anexo I : Adicionando arquivos durante a criao do projeto


No captulo 5 foi mostrado que possvel adicionar arquivos durante a criao de um projeto, (Figura 36). Ser mostrado nesta seo as diferentes maneiras de se adicionar o arquivo. Para isso crie uma pasta chamada myProject1 e outra chamada myProject2.

Figura 75: Anexo I - Criao de Pasta Dentro da pasta myproject1 crie 4 arquivos chamados: ArqA.c, ArqU.c, ArqS.c e ArqC.c. Escreva a seguinte mensagem em cada arquivo: Arquivo do tipo 'X' contido na pasta myProject1. Onde X deve ser substitudo por 'A', 'U', 'S' ou 'C' de acordo com o nome do arquivo. (Figura 76)

Curso Microcontroladores PIC32F | 90

Figura 76: Anexo I - Criao dos Arquivos

Agora abra o Mplab e crie um novo projeto de acordo com as diretrizes do capitulo 5 e salve-o na pasta myProject2. Quando a janela para adio de arquivos (Figura 36) aparecer inclua os arquivos ArqA.c, ArqU.c, ArqS.c e ArqC.c que esto na pasta myProject1. Na coluna da direita tome cuidado para a letra corresponder ao tipo de arquivo. (Figura 77)

Curso Microcontroladores PIC32F | 91

Figura 77: Anexo I - Adio de Arquivos Finalizada a criao do projeto, a seguinte tela dever aparecer indicando que os arquivos foram inclusos. (Figura 78)

Curso Microcontroladores PIC32F | 92

Figura 78: Anexo I - Workspace

Agora clique em cada um dos arquivos e modifique a frase Arquivo do tipo 'X' contido na pasta myProject1 para Arquivo do tipo 'X' contido na pasta myProject2, onde 'X' deve ser substitudo por A, U, S ou C de acordo com o nome do arquivo. (Figura 79) Salve o projeto (Ctrl+Shift+S).

Curso Microcontroladores PIC32F | 93

Figura 79: Anexo I - Modificao dos Arquivos Agora, para ver o que ocorreu, v na pasta myProject1 e olhe o contedo de cada um dos 4 arquivos. (Figura 80)

Curso Microcontroladores PIC32F | 94

Figura 80: Anexo I - Arquivos da Pasta myProject1 Alterados Perceba que a alterao da frase ...myProject1 por ...myProject2, (Figura 79), alterou tambm os arquivos ArqA.c, ArqU.c e ArqS.c contidos na pasta myProject1. (Figura 80) Isso ocorreu porque somente o tipo 'C' faz uma cpia real do arquivo para a pasta myProject2, os arquivos do tipo 'A', 'U' e 'S', tambm utilizados no projeto, no foram copiados. O que foi copiado foram somente suas referencias. Desta forma a alterao dos arquivos do tipo 'A', 'U' e 'S' ir modificar os arquivos contidos na pasta myProject1 e no myProject2. Para confirmar o que foi dito acima abra a pasta myProject2 e veja que alm do projeto criado existe somente o arquivo do tipo 'C'. (Figura 81)

Figura 81: Anexo I - Somente o Arquivo do Tipo 'C' Criado

Curso Microcontroladores PIC32F | 95

Desta forma deve-se tomar cuidado ao incluir arquivos durante a criao de projetos (Figura 36). Caso se queira criar somente uma referencia escolha a opo 'A', 'U' ou 'S'. Caso queira criar uma cpia real do arquivo para dentro da pasta do projeto escolha a opo 'C'. (Figura 82)

Figura 82: Anexo I - Tipos de Arquivos

Curso Microcontroladores PIC32F | 96

Anexo II : Adicionando arquivos depois da criao do projeto


Para melhor compreenso da adio de arquivos leia o Anexo I. A adio de arquivos durante a criao do projeto pode ser feita criando-se uma cpia do arquivo para dentro da pasta na qual o projeto se encontra ou apenas uma referncia para o arquivo. Porm, a adio de arquivos ('.c', '.h', '.lib', etc) depois que o projeto foi criado s pode ser feita de uma maneira, que atravs da referncia do arquivo. Ou seja, se fizermos: Project >> Add Files To Project somente a referncia do arquivo ser criada. Caso desejamos um '.h' que fizemos em um projeto anterior mas precisamos fazer algumas alteraes no cdigo recomenda-se fazer uma cpia deste arquivo para dentro da pasta do projeto (Ctrl+C, Ctrl+V) e ai sim adicion-lo ao projeto.

Curso Microcontroladores PIC32F | 97

Anexo III : Utilizao do Socket para Gravao/Depurao


O Socket deve ser utilizado para PIC do tipo DIP (Dual In Line Package) de 8,14,18,28 e 40 pinos. Caso o PIC seja de 8,14 ou 18 pinos os dois jumpers 'A' devem ser selecionados. Se o PIC for 28 ou 40 pinos os dois jumpers 'B' devem ser selecionados. (Figura 83)

Figura 83: Utilizao do Socket para PIC tipo DIP Depois que o PIC foi inserido no socket basta conect-lo a placa ICD2BR atravs do conector RJ12 (Figura 6) e seguir os passos de gravao conforme mostrado no capitulo 6.

Curso Microcontroladores PIC32F | 98

Anexo IV : Mplab SIM


Mplab SIM (Mplab Simulator) um dos componentes (software) do Mplab IDE. Este simulador roda diretamente na plataforma Mplab e utilizado para testar o programa a ser gravado no PIC. Para utiliz-lo execute os passos a seguir: V em: Debugger >> Select Tool >> 4 MPLAB SIM. (Figura 84)

Figura 84: MPLAB SIM Agora crie um projeto e no arquivo main.c inclua o seguinte cdigo.15 Perceba que esse cdigo o mesmo apresentado na atividade 1 da primeira aula.

// INCLUDES #include <p32xxxx.h>

//include para o PIC32MX360F512L

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2 // 0 Pressionado / 1 Liberado #define Botao_1 PORTDbits.RD6 #define Botao_2 PORTDbits.RD7 //BOTO 1 //BOTO 2

15 Considerou-se que o aluno j possui conhecimento sobre o procedimento de criao de projetos no ambiente Mplab. Item abordado no captulo 5.

Curso Microcontroladores PIC32F | 99

#define #define

Botao_3 PORTAbits.RA7 Botao_4 PORTDbits.RD13

//BOTO 3 //BOTO 4 //LED1 //LED2 //LED3 //LED4 //LED5 //LED6 //LED7

// 0 Apagado / 1 Aceso #define Led1 LATAbits.LATA0 #define Led2 LATAbits.LATA1 #define Led3 LATAbits.LATA2 #define Led4 LATAbits.LATA3 #define Led5 LATAbits.LATA5 #define Led6 LATAbits.LATA6 #define Led7 LATAbits.LATA7 main(){ // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0;

// Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111 1111 1000 0000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110 1111 1100 1111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF; while(1) { if(!Botao_1) Led1 = 1; else Led1 = 0; if(!Botao_2) Led2 = 1; else Led2 = 0; if(!Botao_3) Led3 = 1; else Led3 = 0; if(!Botao_4) Led4 = 1; else Led4 = 0; } }

//TESTE BOTO 1 //TESTE BOTO 2 //TESTE BOTO 3 //TESTE BOTO 4

Compile o programa (Ctrl+F10). Perceba que ao abrir o Mplab SIM apareceu um menu, denominado debug, com 8 botes a saber: Run, Halt, Animate, Step Into, Step Over, Step Out, Reset e Breakpoints. (Figura 85)

Figura 85: Menu debug para o Mplab SIM Por instante vamos analisar o Breakpoint. Breakpoints so paradas intencionais inseridas ao longo da sequencia de execuo do programa cuja finalidade verificar se o programa esta passando por determinada linha de cdigo ou simplesmente fazer uma pausa em algum ponto para verificao do estado de flags, variveis, registradores, etc.

Curso Microcontroladores PIC32F | 100

No Mplab existem 3 formas de se adicionar um breakpoint: Clicando duas vezes com o boto da esquerda sobre a linha na qual se queira inserir o breakpoint; Clicando com o boto direito sobre a linha e selecionando o item 'Set Breakpoint' ou ainda colocando o cursor do mouse sobre a linha e clicando no cone de Breakpoint no menu mostrado na figura 85. Para verificar seu funcionamento faa duas simulaes: Na primeira simplesmente clique no boto Run apresentado na figura 85 e perceba que o programa fica em execuo constante (Figura 86) mas aparentemente nada acontece.

Figura 86: Programa em execuo Para parar a simulao pressione o boto Halt. Perceba que uma seta verde ir aparecer em alguma linha do cdigo. Essa seta indica o ponto no qual o programa parou sua execuo. (Figura 87)

Curso Microcontroladores PIC32F | 101

Figura 87: Fim de execuo da simulao. Na segunda simulao inclua quatro breakpoints, um para cada teste de acionamento dos botes. (Figura 88)

Figura 88: Breakpoints Pressione o boto Run e, cada vez que o programa parar sua execuo, pressione novamente o boto Run. Perceba que, sempre que o programa para a execuo, uma seta verde aparece indicando o ponto a partir do qual o programa ir recomear. Compreendido o funcionamento de um breakpoint passaremos anlise do boto Step Into com o qual possvel percorrer cada linha de cdigo. Coloque um breakpoint na primeira linha do programa, clique no boto Run e assim que o programa parar sua execuo (seta verde) pressione o boto Step Into continuamente. (Figura 89) Perceba que depois de entrar no loop while o programa sempre entra na linha if mas nunca entra na linha else, a explicao desse fato ser dada a seguir.

Curso Microcontroladores PIC32F | 102

Figura 89: Step Into Basicamente o programa no entra na linha else porque as variveis Botao_1, Botao_2, Botao_3 e Botao_4 esto com o valor '0' e, ao se fazer a negao, viram '1' na expresso avaliada pelo if e por isso o programa nunca entra na linha else. Desta forma podemos inferir que os PORTs RD6, RD7, RA7 e RD13, representados pelos botes, esto com nvel lgico zero e os PORT RA0-RA3, representados pelos LEDs, esto em nvel logico '1' haja visto que o programa sempre entra na linha if. Para comprovar o que foi dito podemos utilizar um recurso oferecido pelo Mplab SIM no qual possvel verificar o estado de todos os registradores do PIC bem como as variveis declaradas no programa. Este recurso denominado Watchpoint.

Curso Microcontroladores PIC32F | 103

Para abrir o watch window v em: View >> Watch. Na janela que se abriu existem dois campos. Com o da direita (Add SFR) possvel adicionar os registradores que se queira observar. Com o campo da esquerda (Add Symbol) possvel adicionar as variveis criadas no programa. Por instante selecione PORTA e PORTD em Add SFR (Add Special Function Registers) para visualizar o estado dos bits correspondentes aos botes e leds. Clicando com o segundo boto do mouse possvel inserir a visualizao em binrio. (Figura 90)

Figura 90: Watch Window Agora pressione o boto Reset e em seguida Run. Seu programa dever parar na primeira linha de cdigo devido ao breakpoint. Pressione o boto Step Into at entrar no loop while. Conforme dito anteriormente os bits 6, 7 e 13 do PORTD e o bit 7 do PORTA esto em nvel lgico zero. Isso faz com que, ao passar pelas lgicas dos if os bits 0, 1, 2 e 3 do PORTA fiquem em nvel um. (Figura 91)

Figura 91: Mudana no estado dos leds (PORTA, bits A0-A3) de zero para um. Para mudar o estado de um dos botes devemos gerar um estmulo e alterar seu estado. Por exemplo, para apagar o LED 1 devemos fazer com que o PORTD6, representado pelo Botao_1, assuma o valor um. Existem dois tipos de estmulo, assncrono ou sncrono. O estmulo assncrono pode ser disparado pelo usurio a qualquer instante. O sncrono disparado a partir de algum evento ocorrido ou em certos instantes de tempo pr-programados pelo usurio. Para alterar o estado dos botes iremos utilizar o evento assncrono. Para isso v em Curso Microcontroladores PIC32F | 104

Debugger >> Stimulus >> New Workbook. Na janela que se abriu v na aba Asynch e inclua os PORTs, referentes aos quatro botes, na coluna Pin/SFR. Na coluna action selecione Toggle, assim toda ver que for disparado um estimulo o valor da porta correspondente ir se alternar. (Figura 92)

Figura 92: Estmulo Assncrono Agora clique em Animate no menu do debug do Mplab SIM (Figura 85). Perceba que a seta verde percorre os quatro testes if e o valor dos leds (PORT A0-A3) continuam em 1. Caso voc queira trocar o estado de qualquer um dos quatro PORTs que representam os botes basta clicar na seta logo a esquerda do PORT desejado mostrado na figura 92. Como exemplo clique na seta que representa o PORT RD7. Perceba que uma mensagem aparece na janela de output (Figura 93) indicando que o estmulo foi dado.

Figura 93: Estmulo para troca de estado do boto 2 representado pelo PORT RD7.

Curso Microcontroladores PIC32F | 105

Alm disso o estado do PORT RD7 (Boto 2) foi alterado de zero para um e o estado do PORT RA1 (Led 2) foi alterado de um para zero. (Figura 94)

Figura 94: Alterao do estado dos PORTs RD7 e RA1. Agora lance vrios estmulos utilizando os PORTS RD6, RD7, RA7 e RD13 e verifique o valor dos bits nos PORTs 'D' e 'A'. (Figura 95)

Figura 95: Sequncia de estmulos para alterar o estado dos PORTs. Caso queira voc poder salvar os estmulos pr-definidos (Figura 92) e utiliz-los em aplicaes futuras.

Como dito anteriormente com o Watch Window (Figura 90) possvel visualizar tanto os registradores do PIC quanto o valor das variveis declaradas no programa. Para compreender como isso funciona altere o cdigo da funo main anterior por:

Curso Microcontroladores PIC32F | 106

int main(void) { int i=0; int j=10000; // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0; // Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF; while(1) { i++; j--; } } // end Main

Perceba que o cdigo inicializa a varivel 'i' com o valor '0' e a varivel 'j' com o valor 10000. A cada ciclo do loop while o valor da varivel 'i' incrementado e o valor da varivel 'j' decrementado. Para visualizar o programa compile-o (Build All), abra o watch window e acrescente as variveis 'i' e 'j' atravs do campo Add Symbol.

Figura 96: Visualizando variveis atravs do Watch Window

Curso Microcontroladores PIC32F | 107

A mensagem 'Out of scope' dever aparecer. (Figura 97) Isso normal haja visto que no rodamos o programa ainda e dessa forma as variveis 'i' e 'j' ainda no foram declaradas.

Figura 97: Mensagem devido a no inicializao das variveis Insira um breakpoint acima da linha do loop while e rode o programa (Run). Assim que o programa parar no breakpoint as variveis j tero sido declaradas e dessa forma seu valor de inicializao poder ser visto no watch window. (Figura 98)

Figura 98: Visualizao das variveis inicializadas no watch window Agora rode o programa passo a passo (Step Into) e veja o incremento da varivel 'i' e decremento da varivel 'j'. (Figura 99)

Figura 99: Visualizao da variao dos valores das variveis no watch window Experimente alterar o valor das variveis atravs do teclado. Clique duas vezes sobre o valor decimal da varivel desejada e coloque algum nmero. Por exemplo vamos colocar o valor 2000 na varivel 'i'. (Figura 100) Curso Microcontroladores PIC32F | 108

Figura 100: Alterao manual do valor das variveis Alm do Watch Window podemos visualizar os registradores do PIC utilizando uma ferramenta denominada Logic Analyzer. Diferentemente do Watch Window que apresenta somente o valor das variveis o Logic Analyzer mostra a respectiva forma de onda. Antes de abrir o Logic Analyzer v em: Debugger >> Settings... e na aba Osc/Trace selecione a opo Trace All. (Figura 101) Esta opo permite termos acesso a lista de pinos do PIC.

Figura 101: Opo Trace All para utilizao do Logic Analyzer Para abrir o Logic Analyzer v em: View >> Simulator Logic Analyzer. (Figura 102)

Curso Microcontroladores PIC32F | 109

Figura 102: Logic Analyzer No boto channels insira os canais RD6, RD7, RA7 e RD13. (Figura 103) Perceba que estes PORTS foram os mesmos utilizados para verificar o funcionamento da ferramenta Watch Window e gerar os estmulos.

Figura 103: Seleo dos Registradores para o Logic Analyzer Clique em Animate no menu do debug do Mplab SIM (Figura 85). Lance vrios estmulos assncronos aleatrios da mesma forma quando o Watch Window foi apresentado. Perceba, na janela do Logic Analyzer, que o valor dos PORTs RD6, RD7, RA7 e RD13 ir se alterar entre os nveis lgicos alto e baixo. (Figura 104) Curso Microcontroladores PIC32F | 110

Figura 104: Visualizao da alterao do valor dos PORTs com o Logic Analyzer Para testar a UART insira o seguinte programa:
// INCLUDES #include <p32xxxx.h> //include para o PIC32MX360F512

// CONFIGURACAO PARA GRAVACAO #pragma config FPLLMUL = MUL_16, FPLLIDIV = DIV_2, FPLLODIV = DIV_8, FWDTEN = OFF #pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_2 // INICIA SISTEMA void init_sys(){ // Reset LATA = 0; LATB = 0; LATC = 0; LATD = 0; LATF = 0; LATG = 0; // Configurao da direo dos pinos de I/O's. (0-Output 1-Input) DDPCONbits.JTAGEN = 0; TRISA = 0xFF80; // 1111111110000000 Leds: PORT A0-A6 (Output), Botao_3: PORT A7 (Input) TRISB = 0xFFFF; TRISC = 0xFFFF; TRISD = 0xEFCF; // 1110111111001111 Botoes: PORT D6,D7,D13 (Input) TRISE = 0xFF00; TRISF = 0xFFFF; TRISG = 0xFEBF; } // FUNCOES UART

Curso Microcontroladores PIC32F | 111

void inicializa_UART1(void) { // Se BRGH=0 -> U2BRG = (Fosc/FPBDIV)/(16*BaudRate) - 1 // Se BRGH=1 -> U2BRG = (Fosc/FPBDIV)/(4*BaudRate) - 1 // BaudRate = 19200bps U2BRG = 51; // BRGH=1 -> U2BRG = (8000000/2)/(4*19200) - 1 U1MODEbits.UARTEN = 1; // Habilita UART2 U1MODEbits.UEN = 0; // TX e RX habilitados, CTS e RTS controlados via hardware (MAX232) U1MODEbits.ABAUD = 0; // Desabilita o autobaudrate U1MODEbits.BRGH = 1; U1MODEbits.PDSEL = 0; U1MODEbits.STSEL = 0; U1STAbits.UTXISEL0 = 0; U1STAbits.UTXISEL1 = 0; U1STAbits.URXISEL = 1; U1STAbits.UTXEN = 1; U1STAbits.URXEN = 1; } unsigned int RxUART1(void) // L UART { if(U1MODEbits.PDSEL == 3) return (U1RXREG); else return (U1RXREG & 0xFF); } void TxUART1(unsigned int data) // Escreve UART { if(U1MODEbits.PDSEL == 3) U1TXREG = data; else U1TXREG = data & 0xFF; } int main(void) { char caractere; init_sys(); inicializa_UART1(); putsUART1("UFMG\r\n"); putsUART1("COMUNICACAO RS232\r\n"); while(1); } // Inicializa o sistema // Configurao do BRGH // 8 bits de dados, sem paridade // 1 stop bit // gera interrupcao a cada Tx // gera interrupcao a cada Rx // Habilita pino TX // Habilita pino RX

A UART foi configurada com uma taxa de 19200bps para aumentar a velocidade de simulao do cdigo. Caso tivssemos usado uma taxa de 9200bps a simulao iria se tornar muito lenta. Para visualizar a sada do programa v em Debugger >> Settings... e na aba Uart1 IO selecione a opo Enable Uart1 IO e no campo Output selecione Window. Assim os dados enviados para a UART pelo seu programa iro aparecer na janela Output. (Figura 105)

Curso Microcontroladores PIC32F | 112

Figura 105: Opo Uart1 IO para visualizao da Sada UART A sada do programa mostrada na figura 106 a seguir.

Figura 106: Sada do programa de simulao da UART Compreendido o funcionamento das ferramentas do Mplab SIM e sua utilidade o programador poder testar os programas antes de grav-los no PIC.

Curso Microcontroladores PIC32F | 113

ERRATAS

Curso Microcontroladores PIC32F | 114

Errata I : Esquemtico Leds e Botoes


O diagrama eltrico da ligao dos leds e botes pode ser obtido no arquivo Esquemas Eltricos >> mainBoard >> P-CAD EDA [Sheet1] disponvel com o CD fornecido com o Kit. Para facilitar a compreenso a ligao dos mesmos foi representada a seguir. (Figuras 107 e 108)

Figura 107: Esquema Eltrico dos Botes do kit EXPLORER16BR

Curso Microcontroladores PIC32F | 115

Figura 108: Esquema Eltrico dos Leds do kit EXPLORER16BR Perceba que tanto o LED8 quanto a chave S3 esto ligados ao PORT RA7 e, para que os leds possam ser usados, o jumper 1 deve ser utilizado. O que resulta em um circuito equivalente segundo a figura 109 a seguir. Curso Microcontroladores PIC32F | 116

Figura 109: Circuito resultante para o PORT RA7 Perceba que sempre haver um circuito entre a alimentao (3.3 V) e o circuito do LED8. Assim, sempre haver uma pequena corrente circulando pelo LED8 e este NUNCA ESTARA TOTALMENTE APAGADO. Isso pode ser confirmado zerando-se todas as sadas para os leds e verificando que somente o LED8 apresenta um pequeno brilho, devido a esta corrente no circuito equivalente. Como soluo iremos manter o jumper para podermos acionar os leds de 1 a 7 e utilizaremos o PORT RA7 como entrada, ou seja, como chave S3, desconsiderando-se assim o uso do LED8.

Curso Microcontroladores PIC32F | 117

Errata II : Efeito de carga do ICD2BR


Ao compilar o programa para acionamento dos leds percebeu-se que quando a placa ICD2BR estava conectada ao kit EXPLORER16BR os leds no acendiam devido a um efeito de carga. Para solucionar este problema deve-se desconectar co cabo RJ12 que liga a placa ICD2BR ao kit EXPLORER16BR e testar o programa.

Curso Microcontroladores PIC32F | 118

Bibliografia
Labtools: Mosaico, LabTools - PICs, Kits Didaticos, Treinamentos, Componentes Eletronicos, Maro 2010, http://www.labtools.com.br/ Microchip: Microchip Technology Inc, Microchip Technology Inc, Maro 2010, http://www.microchip.com/ Texas Instruments: Texas Instruments Incorporated, Analog, Embedded Processing, Semiconductor Company, Texas Instruments, Maro 2010, http://www.ti.com/ Atmel: Atmel Corporation, Atmel Corporation - Industry Leader in the Design and Manufacture of Advanced Semiconductors, Maro 2010, http://www.atmel.com/ National Instruments: National Instruments Corporation, National Instruments - Test and Measurement, Maro 2010, http://www.nationalinstruments.com/ Mplab IDE: Microchip Technology Inc, MPLAB Integrated Development Environment, Maro 2010, http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469&part=SW007002 Mplab C18: Microchip Technology Inc, MPLAB C Compiler for PIC18 MCUs, Maro 2010, http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014 Mplab C30: Microchip Technology Inc, MPLAB C Compiler for PIC24 MCUs and dsPIC DSCs, Maro 2010, http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010065 Mplab C32: Microchip Technology Inc, MPLAB C Compiler for PIC32 MCUs, Maro 2010, http://www.microchip.com/stellent/idcplg? IdcService=SS_GET_PAGE&nodeId=2615&dDocName=en532454 HI-TECH: Microchip Technology Inc, Embedded C Compilers and Tools for Software Development: HI-TECH Software, Maro 2010, http://www.htsoft.com/products/ MicroC: mikroElektronika, mikroC - Advanced C compiler for PIC microcontrollers, Maro 2010, http://www.mikroe.com/en/compilers/mikroc/pic/ CCS: CCS, Inc, CCS, Inc. - CCS C Compilers, Maro 2010, http://www.ccsinfo.com/content.php? page=compilers Hantronix HDMI16216H-B: Hantronix, Inc, :: Welcome to HANTRONIX, Inc. ::, Maio, 2010, http://www.hantronix.com/down/char-comm.pdf Hyperterminal: Hilgrave, Inc., Hilgrave - Hyper Terminal HyperACCESS and DropChute communication software - Hilgrave, Julho, 2010., Curso Microcontroladores PIC32F | 119

Curso Microcontroladores PIC32F | 120

Você também pode gostar