Você está na página 1de 72

UNIVERSIDADE FEDERAL DO PAR UFPA INSTITUTO DE TECNOLOGIA ITEC FACULDADE DE ENGENHARIA ELTRICA - FEE

APOSTILA PROGRAMAO DE MICROCONTROLADORES DSPIC UTILIZANDO A LINGUAGEM C

Elaboradores: Msc. Fabrcio Gonzalez Nogueira Msc. Anderson Roberto Barbosa de Moraes Prof. Dr. Carlos Tavares da Costa Junior Prof. Dr. Walter Barra Junior

Sumrio
Material Necessrio para o Curso: ......................................................................................... 4 1. Introduo ........................................................................................................................ 5 1.1. Apresentao do DSPIC .......................................................................................... 5 2. Introduo ao MPLAB .................................................................................................... 6 2.1. Criando um Projeto ................................................................................................. 6 2.2. Estrutura Bsica de um Programa em C para DSPIC ....................................... 10 2.3. Simulao do Cdigo Fonte no MPLAB .............................................................. 11 2.4. Visualizao da Memria de Programa ............................................................... 13 3. Gravador/Depurador ICD2 .......................................................................................... 14 3.1. Conectando a ICD2 ao DSPIC .............................................................................. 15 3.2. Programando o DSPIC com a ICD2 no MPLAB................................................ 16 4. Linguagem C no MPLAB .............................................................................................. 17 4.1. Comentrios............................................................................................................ 17 4.2. Variveis ................................................................................................................. 18 4.3. Vetores .................................................................................................................... 19 4.4. Strings ..................................................................................................................... 20 4.5. Matrizes .................................................................................................................. 20 4.6. Operadores Relacionais ......................................................................................... 21 4.7. Operadores Lgicos ............................................................................................... 21 4.8. Operadores Aritmticos e de Atribuio ............................................................. 22 4.9. Operadores Lgicos Bit a Bit ................................................................................ 23 4.10. Estruturas de Controle de Fluxo ...................................................................... 24 4.10.1. Comando IF .................................................................................................... 24 4.10.2. Comando Switch ............................................................................................ 25 4.10.4. Comando While.............................................................................................. 28 4.12. Diretivas de Compilao.................................................................................... 29 5. Caractersticas do DSPIC 30F2011 .............................................................................. 31 5.1. Caractersticas gerais............................................................................................. 31 5.2. Pinagem do Dispositivo.......................................................................................... 31 5.3. Ciclos de Mquina no DSPIC ............................................................................... 32 5.4. Configurando o DSPIC.......................................................................................... 32 5.4.1. Oscilador ......................................................................................................... 33 5.4.2. Clock Switching and Monitor ....................................................................... 33 5.4.3. Watchdog timer (Co de guarda) ................................................................. 33 5.4.4. Master Clear Enable ...................................................................................... 34 5.4.5. PBOR Enable ................................................................................................. 34 5.4.6. Brown Out Voltage ........................................................................................ 34 5.4.7. POR Timer Value .......................................................................................... 34 5.4.8. General Code Segment Code Protect ........................................................... 34 5.4.9. General Code Segment Write Protect .......................................................... 35 5.4.10. Comm Chanell Select ..................................................................................... 35 Prtica 1 Montagem do DSPIC no protoboard ............................................................. 35 6. Portas de Entrada e Sada do DSPIC........................................................................... 36 6.1. Registradores de Configurao de I/O ................................................................. 36 6.2. Acessando a Porta B .............................................................................................. 36 Prtica 2: Pisca LED .......................................................................................................... 38 Prtica 3: Leitura de porta digital. ................................................................................... 39 2

7.

Prtica 4: Pisca dois LEDs com Boto ............................................................................. 39 Mdulo Temporizador do DSPIC ................................................................................ 40 7.1. Noes bsicas ........................................................................................................ 40 7.2. Configurando o Timer para ser utilizado no cdigo........................................... 41 Prtica 5: Acende e apaga LED com temporizador; ...................................................... 44 Prtica 6: Gerao de PWM com temporizador. ............................................................ 44 8. Mdulo de Comunicao Serial;................................................................................... 46 8.1. Introduo .............................................................................................................. 46 8.2. Funo ConfigIntUART1 ...................................................................................... 46 8.3. Funo OpenUART1 ............................................................................................. 47 8.4. Parametro_STA: .................................................................................................... 48 8.5. Parmetro UBRG................................................................................................... 49 8.6. Funo ReadUART1( ) e DataRdyUART1( ) ...................................................... 50 8.7. Funo WriteUART1( ) e BusyUART1( )............................................................ 50 8.8. Conversor TTL-RS232 .......................................................................................... 51 Prtica 7: Envio de dados pelo mdulo de comunicao serial. .................................... 51 Prtica 8: Recepo de dados pelo mdulo de comunicao serial ............................... 52 Prtica 9: Recepo de dados pela serial e utilizao da interrupo do Timer.......... 53 9. Mdulo Conversor A/D de 12 bits; ............................................................................... 55 9.1. Introduo .............................................................................................................. 55 9.2. Funo de Transferncia do Conversor A/D ....................................................... 57 9.3. Etapas de converso ............................................................................................... 57 9.4. Registradores de Controle do Conversor A/D de 12 bits ................................... 58 9.5. Selecionando a Tenso de Referncia .................................................................. 58 9.6. Selecionando a Taxa de Converso do A/D ......................................................... 59 9.7. Selecionando as Entradas Analgicas para Converso A/D .............................. 59 9.8. Habilitando o Mdulo do Conversor A/D............................................................ 60 9.9. Iniciando o Processo de Amostragem do Conversor A/D .................................. 60 9.10. Parando a Amostragem e Iniciando a Digitalizao ....................................... 60 Prtica 10 Converso A/D com amostragem e digitalizao manual......................... 61 Prtica 11 Leitura de canal analgico com comunicao serial ................................. 62 9.11. Converso A/D com Amostragem Automtica ............................................... 62 Prtica 12 Converso A/D com Amostragem Automtica e Digitalizao Manual.. 62 9.12. Converso A/D com Amostragem Manual e Digitalizao Automtica ....... 63 Prtica 13 Converso A/D com Amostragem Manual e Digitalizao Automtica.. 64 9.13. Programando o Conversor A/D com a Biblioteca de Funes do C30.......... 65 10. Mdulo Output Compare .......................................................................................... 66 10.1. Introduo .......................................................................................................... 66 10.2. Modo de Operao PWM.................................................................................. 66 10.3. Registradores de Configurao ........................................................................ 66 Prtica 14: Gerao de PWM com o mdulo output compare. ..................................... 68 Prtica 15: Gerao de PWM com o mdulo output compare e macros do C30......... 69 Prtica 16: Leitura de Sinal Analgico e Escrita em Sada PWM ................................ 69 11. Projeto Final - Projeto de um Controlador Digital................................................. 71 12. Referncias Bsicas .................................................................................................... 72

Material Necessrio para o Curso: Computador com porta de comunicao serial RS-232 ou equipado com conversor USB-232 (um para cada bancada); Osciloscpio (um para cada bancada); Projetor multimdia. Gravadora de DSPIC; Instalador da Ferramenta de Programao MPLAB IDE; Instalador do Compilador C30 (verso de avaliao); Protoboard e componentes eletrnicos diversos; Apostila; Manual de referncia do DSPIC [1]; Datasheet do DSPIC30f2011 [2]; Manual da Biblioteca do Compilador C30 (LANGUAGE TOOLS LIBRARIES) [3].

1.

Introduo Esta apostila apresenta uma introduo sobre a programao de microcontroladores

DSPIC utilizando linguagem C. Dentre os tpicos abordados esto a configurao e uso das portas de entrada e sada, mdulo temporizador, mdulo de comunicao serial, mdulo de converso analgica-digital e mdulo para gerao de sinais PWM (modulao por largura de pulso, do ingls pulse width modulation). Para a realizao dos exemplos prticos dessa apostila, so necessrias ferramentas de software e de hardware. So utilizados dois programas, o ambiente de desenvolvimento MPLAB e o compilador C30. Para a montagem dos circuitos necessrio um protoboard ou uma placa de desenvolvimento. A gravao do cdigo fonte desenvolvido realizada atravs de uma grvadora ICD2. recomendado tambm o uso de osciloscpio. O compilador MPLAB C30 opera em conjunto com o ambiente de desenvolvimento da MICROCHIP, para isso ele deve ser instalado aps o MPLAB IDE e utilizado para a compilao da linguagem C nos controladores de sinais digitais. A Microchip disponibiliza uma verso grtis para estudantes que pode ser obtida diretamente de seu site. A literatura tcnica presente na Seo de Referncias dessa apostila possui informaes muito importantes para o aprendizado e uso no dia a dia do desenvolvedor de sistemas embarcados baseados em DSPIC. Essa apostila e os livros [1-3] apresentam em linguagem simples as funcionalidades do dispositivo. Porm, o aluno muitas vezes ter a necessidade de consultar informaes detalhadas que se encontram nos manuais tcnicos disponibilizados pelo fabricante [4-6]. 1.1. Apresentao do DSPIC O controlador de sinais digitais DSPIC da Microchip so dispositivos que absorvem as principais caractersticas do mundo dos microcontroladores ( baixo custo e variedade de perifricos internos), com a arquitetura voltada para o processamento em tempo real dos DSPs, assim, criando uma linha de dispositivos intermedirios. So dispositivos de alto desempenho, chegando a operar a 120 MHz. Os dsPICs esto disponveis em trs famlias, sendo estas as famlias de controle de motores, sensores e uso geral. Neste curso ser utilizado o DSPIC 30f2011, o qual pertence a ltima famlia citada.

2.

Introduo ao MPLAB MPLAB um software desenvolvido pela Microchip que utilizado como ambiente

de desenvolvimento de projetos para microcontroladores PICs e DSPICs. Com ele possvel desenvolver, compilar, simular e depurar o cdigo desenvolvido. O MPLAB pode ser obtido gratuitamente no site da Microchip (www.microchip.com). A verso utilizada neste curso a MPLAB IDE 8.76. 2.1. Criando um Projeto O MPLAB trabalha com o conceito de projeto. Um projeto abrange os cdigos-fonte e muitas outras informaes necessrias para a compilao e execuo da aplicao. A tela inicial do MPLAB apresentada na Figura 2.1.

Figura 2.1 Tela inicial do MPLAB.

A janela de arquivos do projeto apresentar todos os arquivos relacionados ao projeto. Para criar um novo projeto clique no menu Project -> New, abrir uma janela para inserir o nome e pasta do projeto, como ilustrado na Figura 2.2.

Crie o projeto com o nome Exemplo1 e determine uma pasta de destino onde o projeto ser salvo. A pasta de destino deve ser criada pelo usurio, caso contrrio o MPLAB perguntar se quer cri-la.

Figura 2.2 Janela para a criao de um novo projeto.

Aps a criao do projeto, observa-se que a janela de espao de trabalho (workspace) do projeto apresenta diversas pastas, como visto na Figura 2.3.

Figura 2.3 Janela com os arquivos do projeto Exemplo1.

Existem vrios tipos de arquivos, dentre eles tem-se: Source Files (Arquivos Fonte), composto por arquivos de programas feitos em assembler ou linguagem C. Header Files (Arquivos Cabealhos), composto por arquivos de especificaes do microcontrolador. Object Files (Arquivos Objeto), composto por arquivos objetos, arquivos prcompilados, muitas vezes so mdulos que so utilizados em vrios projetos (como rotina de display LCD, sensors, etc). So utilizados para ter-se um processo de compilao mais rpido. Library Files (Arquivos Biblioteca), composto por bibliotecas de sub-rotinas que so chamadas pelo arquivo fonte. Linker Script um arquivo necessrio para a compilao do projeto.

O MPLAB um ambiente integrado de desenvolvimento, visto que este permite a utilizao de diversas linguagens de programao, tais como C, Assembler, Basic, dentre outras. Dessa forma, deve-se informar ao MPLAB qual linguagem de programao ser utilizada no projeto. Esta seleo realizada no menu Project -> Select Language Toolsuite. A janela da Figura 2.4 abrir. Note que em Active Toolsuite est selecionada a opo default, que o Microchip MPASM. Altere para Microchip C30 Toolsuite, que a ferramenta de programao em linguagem C para o DSPIC.

Figura 2.4 Janela de seleo de linguagem de programao.

Outra configurao que deve ser realizada a seleo do componente a ser utilizado. Esta ao realizada no menu Configure-> Select Device. A janela da Figura 2.5 ser aberta e no campo Device selecione o DSPIC 30F2011.

Figura 2.5 Janela de seleo de linguagem de programao.

O prximo passo criar e adicionar os arquivos do projeto. necessrio a incluso de dois arquivos, o arquivo Library (bibilioteca) e o arquivo Linker (Conexo). Estes arquivos so utilizados no momento da compilao do C30. Para isto, na rea de trabalho do projeto clique com o boto direito do mouse na pasta Libray Files e em seguida em Add Files. Se voc instalou o compilador C30 na pasta padro informada na instalao, o arquivo est disponvel na pasta C:\Arquivos de Programas\Microchip\MPLAB C30\Lib\. Dentre os arquivos contidos na pasta, selecione a opo libp30F2011-coff.a. Para selecionar o arquivo Linker, clique com o boto direito em Linker scripts e em seguida Add Files. Selecione o arquivo p30F2011.gld na pasta C:\Arquivos de programas\Microchip\mplabc30\v3.30\support\dsPIC30F\gld. A partir deste ponto o projeto est pronto para a criao do arquivo com o cdigo fonte. Observe que o campo Source Files da rea de trabalho do projeto no apresenta nenhum arquivo fonte. Para criar um arquivo novo clique no menu da barra de ferramentas File -> New. Salve este novo arquivo no menu File -> Save. Salve o arquivo na pasta onde o projeto foi salvo, com o nome Cdigo_Exemplo1.c. A extenso .C utilizada para representar que este arquivo se trata de um arquivo fonte a ser compilado pelo compilador C. Agora que o arquivo foi criado, deve-se associar este arquivo ao projeto. Para isso, clique como boto direito do mouse na opo Source Files da rea de trabalho do projeto. Em seguida clique em Add Files e selecione o arquivo fonte que foi salvo na pasta do projeto. O projeto est pronto para a entrada de instrues e compilao do cdigo fonte. O processo de compilao trata da conveso do cdigo desenvolvido no arquvo .C para um cdigo no qual o microcontrolador consiga entender, que o cdigo de mquina. Para iniciar o processo de compilao clique no menu Project -> Make, ou pressione a tecla F10 o teclado. Sempre aps a compilao, aberta uma janela denominada Output, que tem a funo de apresentar ao desenvolvedor o resultado da compilao do cdigo do projeto. Note que a tela da Figura 2.6 foi apresentada aps a realizao do projeto. Neste caso, o MPLAB encontrou uma falha no processo de compilao, pois retornou um erro denominado BUILD FAILED (erro de compilao). O erro aconteceu devido no haver nenhum cdigo escrito no arquivo fonte do projeto.

Figura 2.6 Falha de compilao no MPLAB.

2.2.

Estrutura Bsica de um Programa em C para DSPIC A sintaxe bsica de um programa em C para DSPIC : #include <dspic_utilizado> main() { } O cdigo apresentado acima o cdigo bsico para um programa em C. A primeira

linha, onde h o #include <dspic_utilizado> chamado de arquivo de cabealho e neste que deve ser definido qual o DSPIC que ser utilizado no projeto. No caso desse curso, esta linha ficar da seguine forma: #include <p30f2011.h>. O bloco main (principal) a rotina principal do programa. Entre as duas chaves que compem o main(), ser feita toda lgica de funcionamento do projeto. O cdigo ficar dessa fora ento:

10

#include <p30f2011.h> main() { } Digite este cdigo no arquivo fonte e em seguida compile o mesmo. Observe que na linguagem C existe diferena entre letras minsculas e maisculas. Note na Figura 2.7 que na janela Output apresentada uma mensagem informando que a compilao foi bem sucedida (BUILD SUCCEEDED).

Figura 2.7 Compilao realizada com sucesso no MPLAB.

Sempre que uma compilao foi realizada com sucesso, criado um arquivo com extenso .hex na pasta do projeto. O MPLAB utiliza este arquivo para a gravao do programa no microcontrolador. 2.3. Simulao do Cdigo Fonte no MPLAB

11

O MPLAB possui uma ferramenta para a simulao do cdigo C desenvolvido. O simulador habilitado no menu Debugger -> Select Tool -> MPLAB SIM. Aparecer uma barra de ferramentas conforme a tela ilustrada na Figura 2.8.

Figura 2.8 Janela do MPLAB SIM.

A partir desses botes o desenvolvedor pode avanar a execuo do programa de forma manual, instruo por instruo. O Boto Run (Executar) permite executar o

programa continuamente, como se estivesse rodando no microcontrolador. O boto Pause (pausa) utilizado para parar a execuo do programa caso o mesmo esteja sendo simulado. O terceiro boto, Animate (animao) , similar ao Run, porm neste caso existe um tempo de atraso entre a execuo de duas linhas de cdio, o que permite o desenvolvedor observar o que est ocorrendo com o programa durante a execuo. A execuo do cdigo passo a passo pode ser realizada pelo boto Step Into chamadas, ou pelo boto Step Over , o qual entra dentro das rotinas

, execuo passo a passo do programa no entrando reincia o programa e o boto breakpoint

dentro das rotinas chamadas. O boto Reset

define um ponto de parada de execuo. Quando o programa estiver em execuo e alcanar o ponto com o breakpoint o programa pra e aguarda a continuidade de execuo do programa atravs da interveno do usurio. Para inser-lo clique um pouco antes do incio

12

da linha onde se quer inserir o breakpoint, aparecer um crculo vermelho com a letra B dentro, como visto na Figura 2.9. Para a visualizao de variveis e registradores durante a execuo do programa o MPLAB possui a janela Watch, que acessada pelo menu View -> Watch (Figura 2.10). Para inserir um registrador clique sobre a linha em branco, no campo Symbol Name e escreva o nome do registrador. Para selecionar um registrador especial pode-se selecionar e depois clicar no boto Add SFR.

Figura 2.9 Simulao de cdigo no MLPAB SIM.

2.4.

Visualizao da Memria de Programa A memria de programa e de dados utilizada no programa que est sendo

desenvolvido no MPLAB pode ser visualizada atravs do menu View -> Memory Usage Gauge. Aps clicar nesse menu, aparecer uma janela conforme a Figura X.

Figura 2.10 Quantidade de memria disponvel no DSPIC.

13

3.

Gravador/Depurador ICD2 Os programadores realizam a gravao do cdigo de mquina que vem dos ambientes

de desenvolvimento integrado no componente. Para os controladores de sinais digitais dsPICs existem alguns modelos de programadores que geralmente tambm so depuradores. A caracterstica de depurao em tempo real significa que possvel rodar o firmware passo a passo. Da mesma forma como se faz a simulao no ambiente de desenvolvimento integrado, pode-se fazer diretamente no componente. Esta uma possibilidade que facilita muito na verificao do cdigo e na busca de erros no software. Esse processo geralmente denominado de depurao In-Circuit. Para os controladores de sinais DsPICs temos o programador e depurador ICD2 (Figura 3.1) que um equipamento produzido pela Microchip que possui uma caracterstica interessante. Ele tem em seu interior um software que controla a gravao dos componentes. Mas a cada programao ele baixa automaticamente suas caractersticas, permitindo sempre estar atualizado como melhor processo de gravao e tambm oferece a possibilidade de trabalho com novos componentes. Essas informaes vm junto com o MPLAB IDE, por isso sempre interessante utilizar a ltima verso do MPLAB IDE.

Figura 3.1 Gravadora ICD2. O ICD2 se comunica com o computador atravs de uma interface porta USB. A porta USB tem capacidade de alimentar a aplicao, mas com um determinado limite de corrente. Aplicaes que contenham motores, rels, devem ser alimentadas por uma fonte externa. Esse limite deve ser respeitado; caso contrrio pode ocorrer algum dano nos equipamentos envolvidos.

14

Outra caracterstica dessa ferramenta est associada forma de conexo com o componente, pois ela no possui nenhum socket. O ICD2 deve ser ligado diretamente aplicao, fornecendo uma gravao In-Circuit. O driver da ICD2 j faz parte do pacote de ferramentas do MPLAB. A configurao da ferramenta de programao ICD2 facilmente realizada com a ajuda de um assistente de configurao existente no MPLAB. Para selecionar a ICD2 como ferramenta de programao, clique no menu Programmer -> Select Programmer -> MPLAB ICD2. A confugurao da ICD2 pode ser realizada por um assistente, no menu Programmer -> MPLAB ICD2 Setup Wizard. 3.1. Conectando a ICD2 ao DSPIC A conexo entre a barra de pinos da ICD2 (conector header) e os pinos do DSPIC realizada basicamente por 4 fios, assim como ilustrado na Figura 3.2. O sinal ligado ao pino MCLR do microcontrolador atingir uma tenso de aproximadamente 13V durante a gravao, por este motivo, o DSPIC a ser gravado in-circuit no pode estar com o MCLR ligado diretamente ao +5V. Recomendamos o uso de um resistor de 10K ligando o MCLR ao +5V, de forma que a tenso de gravao (+13V) possa ser aplicada ao pino MCLR sem problemas. Quanto aos pinos SCK (clock) e SDA (dados) utilizados pela gravao, deve-se observar o sentido de corrente em relao ao circuito j presente na placa. Caso os pinos PGD e PGC do DSPIC sejam compartilhados entre a ICD2 e outros circuitos, o ideal isolar os circuitos do ICD2 atravs de dois resistores de pelo menos 1kW. A figura abaixo ilustra a forma de conectar o gravador ao DSPIC para gravao in-circuit.

Figura 3.2 Conexo entre a ICD2 e o DSPIC.

15

A Tabela 3.1 apresenta a conexo entre os pinos da ICD2 e do DSPIC. Note que na Figura X no foi utilizado o pino 3 da ICD2 (VDD = 5Vcc), pois a alimentao do circuito foi realizada por uma fonte externa, ao invs da prpria ICD2. Tabela 3.1 - Pinos de conexo do ICD2. ICD2 Conector Header Pino Funo 1 No usado 2 GND 3 4 5 6 VDD SCK SDA VPP DSPIC 30F2011 Pino Funo No usado No usado 13 VSS 14 12 11 1 VDD (Opcional) PGC PGD MCLR

3.2. Programando o DSPIC com a ICD2 no MPLAB A gravadora ICD2 acessada diretamente pela interface do MPLAB. Os comandos para gravao podem ser acessados diretamente na barra de ferramentas para programao ou atravs do menu Programmer. Aps a compilao e configurao do dispositivo, o cdigo est pronto para gravao no DSPIC, o que realizado a partir do menu programmer >
program.

Quando este comando executado, a ICD2 automaticamente apaga o dispositivo,

grava o novo cdigo e verifica a gravao.

16

4.

Linguagem C no MPLAB Nesta seo da apostila so apresentados os conceitos bsicos da linguagem de

programao C a qual tem se tornado cada dia mais popular, devido sua versatilidade e ao seu poder. Um ponto de suma importncia no C "Case Sensitive", isto , maisculas e minsculas fazem diferena. Se declarar uma varivel com o nome soma ela ser diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C if e for, por exemplo, s podem ser escritos em minsculas pois seno o compilador no ir interpret-los como sendo comandos, mas sim como variveis. 4.1. Comentrios Os comentrios de um cdigo desenvolvido em linguagem C so de vital importncia para a rpida compreenso do programa durante atualizaes futuras. Sempre que o compilador encontrar algo comentado, o mesmo simplesmente o ignora, assim o comentrio possui somente funcionalidade ao desenvolvedor. Existem duas formas de comentrios aceitas: Tipo //... /* ..... */ Funcionalidade Comentrio de fim de linha, significa que tudo que estiver aps o // comentrio, ele perde o efeito ao terminar a linha; Comentrio de mltiplas linhas, tudo que estiver entre /* e */ ser considerado comentrios.

Veja os dois tipos de comentrios no exemplo abaixo:

#include <p30f2011.h> // Arquivo de cabealho definindo o DSPIC20f2011 main() { } /* Meu primeiro programa Na linguagem C */ // Bloco principal do programa

17

4.2.

Variveis As variveis so espaos de memria que podem ser modificados ao longo da

execuo do programa. Existem algumas regras gerais para a utilizao de variveis: Todas as variveis devem ser previamente declaradas antes de serem utilizadas; Todo nome de varivel iniciado por uma letra (a-z ou A-Z) ou o caracter trao baixo (_), e o restante do nome pode ser composto por letras, trao baixo ou nmeros. O nome de uma varivel no pode coincidir com algumas palavras reservadas da linguagem C, tais como: void, main, break, for, while, if, dentre outras. O nome de uma varivel no pode ser igual ao nome de uma funo declarada pelo programador, ou pelas bibliotecas do C. O C tem 5 tipos bsicos de variveis: char, int, float, double e long. Para cada um dos tipos de variveis existem os modificadores de tipo. Os modificadores de tipo do C so quatro: signed, unsigned, long e short. Ao float no se pode aplicar nenhum e ao double pode-se aplicar apenas o long. Os quatro modificadores podem ser aplicados a inteiros. A Tabela X apresenta os tipos e os respectivos tamanhos de variveis disponveis no C.

Tipo
char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double

Num de bits
8 8 8 16 16 16 16 16 16 32 32 32 32 64 80

Intervalo Inicio
-128 0 -128 -32.768 0 -32.768 -32.768 0 -32.768 -2.147.483.648 -2.147.483.648 0 3,4E-38 1,7E-308 3,4E-4932

Fim
127 255 127 32.767 65.535 32.767 32.767 65.535 32.767 2.147.483.647 2.147.483.647 4.294.967.295 3.4E+38 1,7E+308 3,4E+4932

18

A forma geral da declarao de variveis : tipo_da_varivel lista_de_variveis; As variveis da lista de variveis tero todas o mesmo tipo e devero ser separadas por vrgula. H trs lugares nos quais podemos declarar variveis. O primeiro fora de todas as funes do programa. Estas variveis so chamadas variveis globais e podem ser usadas a partir de qualquer lugar no programa. Pode-se dizer que, como elas esto fora de todas as funes, todas as funes as vem. O segundo lugar no qual se pode declarar variveis no incio de um bloco de cdigo. Estas variveis so chamadas locais e s tm validade dentro do bloco no qual so declaradas, isto , s a funo qual ela pertence sabe da existncia desta varivel, dentro do bloco no qual foram declaradas. O terceiro lugar onde se pode declarar variveis na lista de parmetros de uma funo. Mais uma vez, apesar de estas variveis receberem valores externos, estas variveis so conhecidas apenas pela funo onde so declaradas. Veja por exemplo o programa abaixo:

#include <p30f2011.h>

// Arquivo de cabealho definindo o DSPIC20f2011

char letra;
unsigned int numero1, numero2; main() { float soma = 0.0; }

// varivel global do tipo char // varivel global do tipo inteiro


// Bloco principal do programa

// varivel local do tipo float

So declaradas duas variveis globais tipo int (numero1 e numero2) e uma varivel global do tipo char (letra). Dentro da funo main declarada uma varivel local do tipo float (soma), a qual inicializada com o valor 0,0. 4.3. Vetores Vetores so uma estrutura de dados muito utilizada. importante notar que vetores, matrizes bidimensionais e matrizes de qualquer dimenso so caracterizadas por terem todos

19

os elementos pertencentes ao mesmo tipo de dado. Para se declarar um vetor podemos utilizar a seguinte forma geral: tipo_da_varivel nome_da_varivel [tamanho]; Quando o C v uma declarao como esta ele reserva um espao na memria para armazenar o nmero de clulas especificadas em tamanho. Por exemplo, se declararmos: float exemplo [20]; o C ir reservar 4x20=80 bytes. Estes bytes so reservados de maneira contgua. Na linguagem C a numerao comea sempre em zero. Isto significa que, no exemplo acima, os dados sero indexados de 0 a 19. Para acess-los vamos escrever: exemplo[0], exemplo[1], ...,exemplo[19] 4.4. Strings Strings so vetores do tipo char. Devemos apenas ficar atentos para o fato de que as strings tm o seu ltimo elemento como um '\0'. Dessa forma, deve-se lembrar que o tamanho da string deve incluir o '\0' final. A biblioteca padro do C possui diversas funes que manipulam strings. A declarao geral para uma string : char nome_da_string [tamanho]; 4.5. Matrizes J vimos como declarar matrizes unidimensionais (vetores). Vamos tratar agora de matrizes bidimensionais. A forma geral da declarao de uma matriz bidimensional muito parecida com a declarao de um vetor: tipo_da_varivel nome_da_varivel [altura][largura]; muito importante ressaltar que, nesta estrutura, o ndice da esquerda indexa as linhas e o da direita indexa as colunas. Mais uma vez bom lembrar que, na linguagem C, os ndices variam de zero ao valor declarado menos um. Manter os ndices na faixa permitida tarefa do programador. O uso de matrizes multidimensionais na linguagem C simples. Sua forma geral : tipo_da_varivel nome_da_varivel [tam1][tam2] ... [tamN];

20

Podemos inicializar matrizes, assim como podemos inicializar variveis. A forma geral de uma matriz com inicializao : tipo_da_varivel nome_da_varivel [tam1][tam2] ... [tamN] = {lista_de_valores}; A lista de valores composta por valores (do mesmo tipo da varivel) separados por vrgula. Os valores devem ser dados na ordem em que sero colocados na matriz. Abaixo vemos alguns exemplos de inicializaes de matrizes: float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 }; int matriz [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; char str [10] = { 'J', 'o', 'a', 'o', '\0' }; char str [10] = "Joao"; char str_vect [3][10] = { "Joao", "Maria", "Jose" }; O primeiro demonstra inicializao de vetores. O segundo exemplo demonstra a inicializao de matrizes multidimensionais, onde matriz est sendo inicializada com 1, 2, 3 e 4 em sua primeira linha, 5, 6, 7 e 8 na segunda linha e 9, 10, 11 e 12 na ltima linha. No terceiro exemplo vemos como inicializar uma string e, no quarto exemplo, um modo mais compacto de inicializar uma string. O quinto exemplo combina as duas tcnicas para inicializar um vetor de strings. Repare que devemos incluir o ; no final da inicializao. 4.6. Operadores Relacionais Os operadores relacionais do C realizam comparaes entre variveis. Os operadores relacionais retornam verdadeiro (1) ou falso (0). So eles:

Operador > >= < <= == != 4.7. Operadores Lgicos

Ao Maior do que Maior ou igual a Menor do que Menor ou igual a Igual a Diferente de

21

Para fazer operaes com valores lgicos (verdadeiro e falso) temos os operadores lgicos: Operador Ao && AND (E) || OR (OU) ! NOT (NO) Usando os operadores relacionais e lgicos podemos realizar uma grande gama de testes. 4.8. Operadores Aritmticos e de Atribuio Os operadores aritmticos so usados para desenvolver operaes matemticas. A seguir apresentamos a lista dos operadores aritmticos do C:

Operador + * / % ++ --

Ao Soma (inteira e ponto flutuante) Subtrao ou Troca de sinal (inteira e ponto flutuante) Multiplicao (inteira e ponto flutuante) Diviso (inteira e ponto flutuante) Resto de diviso (de inteiros) Incremento (inteiro e ponto flutuante) Decremento (inteiro e ponto flutuante)

O C possui operadores unrios e binrios. Os unrios agem sobre uma varivel apenas, modificando ou no o seu valor, e retornam o valor final da varivel. Os binrios usam duas variveis e retornam um terceiro valor, sem alterar as variveis originais. A soma um operador binrio pois pega duas variveis, soma seus valores, sem alterar as variveis, e retorna esta soma. Outros operadores binrios so os operadores - (subtrao), *, / e %. O operador - como troca de sinal um operador unrio que no altera a varivel sobre a qual aplicado, pois ele retorna o valor da varivel multiplicado por -1. O operador / (diviso) quando aplicado a variveis inteiras, nos fornece o resultado da diviso inteira; quando aplicado a variveis em ponto flutuante nos fornece o resultado da diviso "real". O operador % fornece o resto da diviso de dois inteiros.

22

Os operadores de incremento e decremento so unrios que alteram a varivel sobre a qual esto aplicados. O que eles fazem incrementar ou decrementar, a varivel sobre a qual esto aplicados, de 1. Ento x++; x--; EXERCCIO 4.1: O programa 4.1 realiza a normalizao entre 0 e 1 de um valor de entrada. Simule no MPLAB o seguinte trecho de cdigo. Utilizando a ferramenta Watch, visualize o valor da varivel de sada para diferentes valores da varivel de entrada. => => x=x+1; x=x-1;

#include <p30f2011.h> main() { float entrada= 3.0, sada=0.0; float min = -2.0; float max = 7.0;

// Arquivo de cabealho definindo o DSPIC30f2011 // Bloco principal do programa // variveis locais // varivel local // varivel local // normalizao entre 0 e 1

saida = (entrada-(min))/((max)-(min)); }

4.9.

Operadores Lgicos Bit a Bit O C permite que se faa operaes lgicas "bit-a- bit" em nmeros. Ou seja, neste

caso, o nmero representado por sua forma binria e as operaes so feitas em cada bit dele. Imagine um nmero inteiro de 16 bits, a varivel i, armazenando o valor 2. A representao binria de i, ser: 0000000000000010 (quinze zeros e um nico 1 na segunda posio da direita para a esquerda). Poderemos fazer operaes em cada um dos bits deste nmero. Por exemplo, se fizermos a negao do nmero (operao binria NOT, ou operador binrio ~ em C), isto , ~i, o nmero se transformar em 1111111111111101. As operaes binrias ajudam programadores que queiram trabalhar com o computador em "baixo nvel". As operaes lgicas bit a bit s podem ser usadas nos tipos char, int e long int. Os operadores so:

23

Operador & | ^ ~ >> <<

Ao AND OR XOR (OR exclusivo) NOT Deslocamento de bits direita Deslocamento de bits esquerda

Os operadores &, |, ^ e ~ so as operaes lgicas bit a bit. A forma geral dos operadores de deslocamento : valor>>nmero_de_deslocamentos valor<<nmero_de_deslocamentos O nmero_de_deslocamentos indica o quanto cada bit ir ser deslocado. Por exemplo, para a varivel i anterior, armazenando o nmero 2: i << 3; far com que i agora tenha a representao binria: 0000000000010000, isto , o valor armazenado em i passa a ser igual a 16. 4.10. Estruturas de Controle de Fluxo As estruturas de controle de fluxo so fundamentais para qualquer linguagem de programao. Sem elas s haveria uma maneira do programa ser executado: de cima para baixo comando por comando. No haveria condies, repeties ou saltos. A linguagem C possui diversos comandos de controle de fluxo. possvel resolver todos os problemas sem utilizar todas elas, mas devemos nos lembrar que a elegncia e facilidade de entendimento de um programa dependem do uso correto das estruturas no local certo. 4.10.1. Comando IF

24

O comando if (significa Se) permite a implementao de tomada de deciso. Sua forma geral : if (condio) instrues 1; else instrues 2 Inicialmente a expresso, na condio, avaliada. Caso a condio seja satisfeita (neste caso, diferente de zero), as instrues 1 so executadas. Caso contrrio (else), so executadas as instrues 2. O comando else e opcional. EXERCCIO 4.2: O programa 4.2 limita uma entrada entre valores min e max. Simule no MPLAB o seguinte trecho de cdigo. Utilizando a ferramenta Watch, visualize o valor da varivel de sada para diferentes valores da varivel de entrada.

#include <p30f2011.h> main() { float entrada= 3.0, sada=0.0; float min = -10.0; float max = 10.0; saida = entrada; if (entrada>=max) saida = max; if (entrada<=min) saida = min; }

// Arquivo de cabealho definindo o DSPIC30f2011 // Bloco principal do programa // variveis locais // varivel local // varivel local

4.10.2. Comando Switch O comando switch prprio para se testar uma varivel em relao a diversos valores pr-estabelecidos. Sua forma geral : switch(Varivel) { case Valor1: 25

Comandos a serem executados; break; case ValorN: Comandos a serem executados; break; default: Comandos a serem executados; break; } O switch compara a varivel com os valores dos cases. Caso sejam iguais, o switch executa as instrues do respectivo case. A declarao default opcional e ser executada apenas se a varivel, que est sendo testada, no for igual a nenhum dos valores declarados nos cases. O comando break, faz com que o switch seja interrompido assim que uma das declaraes seja executada. Mas ele no essencial ao comando switch. Se aps a execuo da declarao no houver um break, o programa continuar executando. EXERCCIO 4.3: O programa 4.3 seleciona o ganho de um sistema de acordo com a posio de uma chave. Simule no MPLAB o seguinte trecho de cdigo. Utilizando a ferramenta Watch, visualize o valor do ganho para diferentes valores da varivel chave.

26

#include <p30f2011.h> void main() { int chave = 3; int ganho =0; switch (chave) { case 1: ganho 10; break; case 2: ganho 20; break; case 3: ganho 30; break; default: ganho 1; break; }

// Arquivo de cabealho definindo o DSPIC30f2011 // Bloco principal do programa

4.10.3. Comando For O comando for uma estrutura de repetio (loop). Como j foi dito, o loop for usado para repetir um comando, ou bloco de comandos, diversas vezes, enquanto uma condio satisfeita. Sua forma geral : for (inicializao;condio;incremento) { Comandos a serem executados; } Podemos ver, ento, que o for executa a inicializao incondicionalmente e testa a condio. Se a condio for falsa ele no faz mais nada. Se a condio for verdadeira ele executa a declarao, faz o incremento e volta a testar a condio. Ele fica repetindo estas

27

operaes at que a condio seja falsa. Um ponto importante que podemos omitir qualquer um dos elementos do for, isto , se no quisermos uma inicializao poderemos omiti-la. EXERCCIO 4.4: Abaixo vemos um programa que conta de 1 at 100. Simule no MPLAB o seguinte trecho de cdigo. Utilizando a ferramenta Watch, visualize o valor do contador durante a execuo do loop.

#include <p30f2011.h> void main() { int entrada;

// Arquivo de cabealho definindo o DSPIC30f2011 // Bloco principal do programa

for (int contador = 1; contador<=100; contador++) { }

4.10.4. Comando While O comando while tem a seguinte forma geral: while (condio) comandos; Se a condio for satisfeita (diferente de zero), os comandos do lao while so executados uma vez e a condio avaliada novamente. Este ciclo de teste e execuo repetido at que a condio seja falsa (igual a zero). Quando isso ocorre, o lao termina e o programa passa para a linha seguinte ao lao while. O comando break pode ser utilizado no corpo de qualuer estrutura de lao. Este causa a sada imediata do lao. 4.11. Funes do Usurio Funes so subrotinas criadas para facilitar a programao. O C possui uma srie de funes que permitem que o programador utilize-as para o desenvolvimento de seus projetos, como por exemplo, funes para clculo de seno, cosseno, manipulao de vetores e matrizes, dentre outras. Alm disso, o C permite o desenvolvedor implementar suas prprias funes, as quais so denominadas de funes do usurio e tm a seguinte sintaxe: 28

tipo_de_dado_de_saida nome_da_funcao (tipo_de_dado_de_entrada){ comandos; return(dado_de_saida) } Os tipos de dados que as funes podem receber e retornar so os mesmos que foram apresentados na seo de variveis, porm h um novo tipo que no foi citado anteriormente, o void. Ele utilizado quando a funo no retorna ou recebe dados. Quando uma funo chamada durante a execuo de um programa, os comandos da funo so executados e quando 4.12. Diretivas de Compilao O pr-processador C um programa que examina o programa fonte escrito em C e executa certas modificaes nele, baseado nas Diretivas de Compilao. As diretivas de compilao so comandos que no so compilados, sendo dirigidos ao pr-processador, que executado pelo compilador antes da execuo do processo de compilao propriamente dito. Portanto, o pr-processador modifica o programa fonte, entregando para o compilador um programa modificado. Todas as diretivas de compilao so iniciadas pelo caracter #. As diretivas podem ser colocadas em qualquer parte do programa. J vimos, e usamos muito, a diretiva #include. Sabemos que ela no gera cdigo mas diz ao compilador que ele deve incluir um arquivo externo na hora da compilao. As diretivas do C so identificadas por comearem por #. A diretiva #define tem a seguinte forma geral: #define nome_da_macro sequncia_de_caracteres Quando voc usa esta diretiva, voc est dizendo ao compilador para que, toda vez que ele encontrar o nome_da_macro no programa a ser compilado, ele deve substitu-lo pela sequncia_de_caracteres fornecida. Isto muito til para deixar o programa mais geral. Veja um exemplo: #define PI 3.1416 29

#define VERSAO "2.02"

30

5. 5.1.

Caractersticas do DSPIC 30F2011 Caractersticas gerais O DSPIC utiliza memria de programa do tipo Flash, a qual pode ser apagada e

gravada eletricamente at 100.000 vezes. Dentre os perifricos internos disponveis no DSPIC 30f2011 destacam-se: 5.2. 12Kbytes de memria de programa; 1024 bytes de memria SRAM; 12 Portas de I/O configurveis; 3 temporizadores de 16 bits; 2 entradas para deteco e temporizao de pulsos (mdulo Input Capture); 2 sadas PWM (mdulo Output Compare); 8 canais de converso A/D de 12 bits; 1 porta serial UART; 1 porta SPI; 1 porta I2C

Pinagem do Dispositivo O DSPIC 30f2011 um dispositivo de 18 pinos disponvel em encapsulamentos

PDIP, SOIC e QFN. Neste curso ser utilizado o modelo PDIP, o qual possvel conectar diretamente a matrizes de contatos didticas (protoboards). A pinagem deste componente em encapsulamento PDIP ilustrada na Figura 5.1.

Figura 5.1 Pinagem do DSPIC 30f2011.

31

5.3.

Ciclos de Mquina no DSPIC O DSPIC utiliza 4 pulsos do clock principal do sistema para gerar 1 ciclo de mquina.

Caso a fonte de clock seja de 10 MHz, por exemplo, o perodo 1/10MHz, que igual a 100 ns. Para o DSPIC gerar uma instruo real, sero utilizados 4 pulsos. Este tempo devido ao ciclo de execuo de instrues interno da CPU do DSPIC. Ou seja, o tempo necessrio para o DSPIC ler e executar a instruo proveniente na memria de programa. Dessa forma, a velocidade de processamento do DSPIC de a velocidade do clock do sistema. Essa informao importante para definirmos o termo Fcy, quantidade de instrues por segundo.
Fosc 4

Fcy =

(5.1)

5.4.

Configurando o DSPIC
Antes de gravar o projeto importante configurar algumas opes do DSPIC. Para

realizar estas configuraes por meio do MPLAB, clique em Configure > Configuration Bits, em seguida a tela mostrada na Figura 5.2 aparecer.

Figura 5.2 Janela de configurao do DSPIC no MPLAB.

32

5.4.1. Oscilador
A primeira opo a seleo do Oscilador do sistema. O oscilador o componente que determina a velocidade de processamento de um processador. A famlia DSPIC 30f possui um limite mximo de 120 MHz de clock. A Tabela 6.1 apresenta os principais tipos de osciladores compatveis com a famlia DSPIC 30f. A lista detalhada encontrada no manual do fabricante [4]. Oscilador XTL XT (PLL 4x,8x,16x) LP HS HS/2 (PLL 4x,8x,16x) HS/3 (PLL 4x,8x,16x) FRC (PLL 4x,8x,16x) LFRC Descrio 200 kHz 4 MHz 4 MHz 10 MHz 32 kHz 10 MHz 20 MHz 10 MHz 20 MHz 10 MHz 20 MHz 7.37 MHz 521 KHz Conexo Externo (OSC1:OSC2) Externo (OSC1:OSC2) Externo (OSC1:OSC2) Externo (OSC1:OSC2) Externo (OSC1:OSC2) Externo (OSC1:OSC2) Interno Interno

5.4.2. Clock Switching and Monitor


O clock switching and monitor um perifrico que detecta a falha do oscilador externo conectado nos pinos OSC1 e OSC2 e chaveia automaticamente para o clock interno do DSPIC.

5.4.3. Watchdog timer (Co de guarda)


O watchdog timer um recurso que permite o sistema se recuperar de um travamento. O watchdog timer baseado em um temporizador que deve ser resetado pelo programa em um perodo especificado pelo desenvolvedor. Caso o temporizador do watchdog timer estoure, significa que o programa travou. Quando isso acontece, o perifrico reseta o DSPIC. O tempo mnimo de watchdog timer de 2 ms, porm podemos aumentar este tempo

33

utilizando o prescaler A e B, os quais tambm esto na janela Configuration Bits (WDT prescaler A e B ).

5.4.4. Master Clear Enable


O pino 1 (MCLR) do DSPIC30f2011 utilizado para permitir o reset por um sinal externo. Caso esta opo esteja habilitada e o pino MCLR fique em nvel 0 durante um pequeno intervalo de tempo, o microcontrolador reiniciado. Na janela Configuration Bits possvel habilitar ou no o MCLR.

5.4.5. PBOR Enable


O DSPIC funciona em uma faixa de tenso entre 2,5 Vcc a 5,5 Vcc. O circuito de Brown Out detecta se a tenso de alimentao est em nveis inadequados. Na janela Configuration Bits possvel habilitar ou no o circuito de Brown Out.

5.4.6. Brown Out Voltage


Em conjunto com a habilitao do Brown Out, pode-se definir em que tenso o microcontrolador ser reiniciado, caso a tenso de alimentao esteja abaixo da especificada. As opes so: 2,7 Vcc, 4,2 Vcc e 4,5 Vcc.

5.4.7. POR Timer Value


O circuito de POR (Power On Reset) um circuito que permite manter o microcontrolador em estado de reset por u perodo de tempo logo aps a energizao). Este recurso muito til quando existe uma grande quantidade de componentes na mesma placa (conversores A/D e D/A externos, memria externa, dentre outros). Dessa forma, pode-se garantir que quando a CPU comear a processar as instrues, todos os componentes j esto prontos para se comunicar com o DSPIC. O MPLAB permite configurar o tempo em 4 ms, 16 ms e 64 ms.

5.4.8. General Code Segment Code Protect

34

utilizado para proteger a memria de programa do microcontrolador contra leituras, garantindo assim a propriedade intelectual no projeto. Quando esta opo habilitada, no possvel realizar a leitura da memria de programa do DSPIC.

5.4.9. General Code Segment Write Protect


uma proteo que impede a escrita na memria de programa quando o DSPIC estiver executando.

5.4.10. Comm Chanell Select


Esta opo permite a seleo dos pinos de comunicao que sero utilizados no processo de gravao do DPSIC.

Prtica 1 Montagem do DSPIC no protoboard


Conecte o DSPIC 30f2011 no protoboard e com o auxilio de fios monte os circuitos de alimentao e conexo com a gravadora ICD2 (Seo 3.1). Aps a montagem, grave um programa na memria do DSPIC utilizando a ICD2 e o MPLAB. Utilize o esquema abaixo como guia.

Figura 5.3 Montagem do DSPIC no Protoboard.

35

6.

Portas de Entrada e Sada do DSPIC


As portas de entrada e sada (I/O Input and Output) permitem com que o DSPIC

tenha acesso a dispositivos externos. Atravs desses pinos podemos, por exemplo, enviar nveis lgicos (0 ou 1) para acender ou apagar um LED, acionar displays LCD, ou at mesmo ler sinais analgicos de sensores. As portas podem ser configuradas de acordo com a necessidade do projeto. O DSPIC 30f2011 possui um total de 18 pinos, dos quais 12 so de pinos I/O e so divididos em trs portas distintas, Porta B (PORTB), Porta C (PORTC) e Porta D (PORTD). Cada pino de I/O interligado a um perifrico do DSPIC, dessa forma, quando o perifrico habilitado, o pino no pode ser utilizado como I/O padro. A folha de dados do DSPIC 30f2011 [5] possui uma tabela com a descrio completa dos pinos do componente.

6.1.

Registradores de Configurao de I/O


Cada pino de I/O possui trs registradores que controlam suas funes: um registrador

PORT, um LAT e um registrador TRIS. Os registradores PORTx (PORTB, PORTC e PORTD) pertencem aos SFRs e armazena os dados das portas paralelas (I/O's) do microcontrolador. Qualquer escrita realizada em um desses registros automaticamente altera todo o contedo presente na sada do chip. O registrador TRISx (onde o x pode ser B, C ou D) utilizado para configurar cada pino da respectiva porta como entrada ou sada. Assim, cada bit desse registrador corresponde a um pino da porta. Se o bit estiver em 1 (um), o pino correspondente esta configurado como entrada de dados, e se estiver em 0 (zero) configuramos este pino como sada de dados. Por fim, a partir do registrador LATx (onde o x pode ser B, C ou D) possvel realizar a leitura ou escrita no LATCH de sada do microcontrolador. Normalmente so utilizados os registradores TRISx e o PORTx.

6.2.

Acessando a Porta B

36

Conforme apresentado na seo anterior, a Porta B possui trs registradores de configurao, que so os registradores TRISB, PORTB E LATB. A Tabela 6.1 apresenta o registrador TRISB com as respectivos pinos do DSPIC associados aos bits do registrador.
Tabela 6.1 Registrador TRISB.

Registrador TRISB Bit 15


-----

Bit 14
-----

Bit 13
-----

Bit 12
-----

Bit 11
-----

Bit 10
-----

Bit 9
-----

Bit 8
-----

Bit 7
RB7

Bit 6
RB6

Bit 5
RB5

Bit 4
RB4

Bit 3
RB3

Bit 2
RB2

Bit 1
RB1

Bit 0
RB0

Observe que o registrador TRISB de 16 bits, numerados de 0 a 15, sendo que cada bit associado a um pino de I/O do DSPIC. Caso um dos bits estiver em 1, por exemplo, o respectivo pino configurado como entrada. Dessa forma, possvel configurar cada pino da Porta B como entrada ou sada. Veja, por exemplo, como seria a configurao do registrador TRISB caso os pinos RB0 , RB1 e RB2 sejam entrada e os restantes so sadas. TRISB = 0b0000 0000 0000 0111; // , ou o equivalente: TRISB = 0x0007 ; Alm dos trs registradores j citados, a Porta B possui um registrador denominado ADPCFG. Este registrador configura os pinos da porta em analgicos de entrada ou E/S digitais. O ADPCFG um registrador especial da Porta B, pois nesta porta que esto as entradas analgicas (AN0 a AN7) para o conversor A/D de 12 bits. Para configurar o pino como entrada analgica, utiliza-se 0 no respectivo bit. Por outro lado, para configurar o pino como I/O digital, utiliza-se o valor 1. Continuando o exemplo anterior, considere que os pinos RB0 , RB1 e RB2 sejam entradas analgicas e os restantes so sadas digitais: ADPCFG = 0b1111 1111 1111 1000; // , ou o equivalente: ADPCFG = 0xFFF8 ;

37

Aps a configurao da porta, o processo de escrita realizado no registrador PORTB. Caso o programa tenha que setar os pinos RB0 e RB1, a escrita deve ser implementada conforme: PORTB = 0x03; // Este comando escreve na Porta B o valor 0x03; // equivalente ao comando acima;

PORTB = 0b000000011;

Neste caso, todos os valores da Porta B foram alterados. Caso seja necessrio alterar o valor de apenas um pino, o comando realizado na seguinte forma: _RB0 = 1; _RB1 = 1; No caso da leitura da porta, o cdigo pode ser implementado das seguintes maneiras: Varivel = PORTB; // Armazena na varivel o valor de todos os bits da Porta B. Varivel = _RB1; // Neste caso, armazena o valor 1 ou 0 referente ao pino RB1

Prtica 2: Pisca LED


Conecte um LED na porta RB1 do DSPIC e desenvolva um programa que faa o LED piscar. Segue em seguida um exemplo de cdigo fonte.

38

Prtica 3: Leitura de porta digital.


Conecte uma chave na porta RB0 do DSPIC e desenvolva um programa que faa o LED da porta RB1 acender quando a chave pressionada. Segue em seguida um exemplo de cdigo fonte.

Prtica 4: Pisca dois LEDs com Boto


Mantendo o circuito anterior, conecte um LED 2 na porta RC14. Desenvolva um programa no qual um boto ir definir qual dos LED ir piscar. Se o boto estiver pressionado, acende o LED1, caso contrrio acende o LED 2. A rotina de atraso deve ser uma funo (subrotina) do programa. Segue em seguida um exemplo de cdigo fonte.

39

7. 7.1.

Mdulo Temporizador do DSPIC Noes bsicas


O mdulo temporizador (tambm conhecido como TIMER) um perifrico utilizado

nas mais diversas aplicaes digitais envolvendo contagem de tempo. Este mdulo especialmente projetado para incrementar automaticamente um registrador cada vez que recebe um pulso. A origem deste pulso pode ser escolhida de forma externa, atravs de um pino do microcontrolador, ou de forma interna, atravs do sinal de relgio principal do sistema. O mdulo tambm conta com um recurso que permite ampliar a capacidade de contagem utilizando o mesmo tamanho do registro atravs de um divisor de frequncia (PRESCALER). Este recurso pode atrasar o incremento do registro de 8, 64 ou 256 vezes, ou seja, pode fazer com que o registro seja incrementado a cada 8, 64 ou 256 pulsos. Desta forma pode-se fazer facilmente a contagem de tempo ou at mesmo cronometrar alguns eventos. Os trs TIMERS presentes no DSPIC funcionam em modo de 16 bits, ou seja, podem contar de 0 a 65535. Cada um destes TIMERS (TIMER1, TIMER2 e TIMER3) composto por trs registradores: TMRx, PRx, TxCON (onde x pode ser 1, 2 ou 3 de acordo com o TIMER utilizado). O registrador TMRx responsvel pela contagem do TIMER, sendo incrementado a cada ciclo de mquina (ou a cada 8, 64 ou 256 vezes este ciclo, de acordo com o PRESCALER). O registrador PRx funciona como limitador da contagem, onde a cada incremento, o valor do TMRx comparado ao programado no PRx e no momento em que o valor do TMRx atingir o valor do PRx, o TMRx zerado e sua contagem recomea. A este momento chamado de estouro do TIMER. O ciclo de mquina (CM) pode ser calculado atravs da seguinte expresso:

onde

a frequncia do ciclo de mquina. A frmula genrica para se calcular o tempo de estouro do timer : Normalmente, define-se um tempo de estouro desejado e calcula-se o valor do

registrador PRX da seguinte maneira:

40

7.2.

Configurando o Timer para ser utilizado no cdigo


Primeiramente deve-se adicionar o arquivo timer.h ao projeto para que o compilador

reconhea os termos e funes relacionadas ao TIMER que ser utilizado. Para isto, digite com a linha de cdigo #include <timer.h> na regio superior do cdigo, juntamente com outros arquivos que possam vir a ser adicionados ao projeto. A configurao e inicializao dos timers feita atravs do uso da funo OpenTimerx(CONFIG, PERIODO), onde x pode ser 1, 2 ou 3 de acordo com o timer escolhido. O local onde deve ser utilizada esta funo internamente ao escopo principal. Normalmente, as funes que inicializam perifricos so utilizadas apenas uma vez. Portanto, nos exemplos apresentados neste curso no faremos uso destas funes dentro de lao de repetio (como WHILE, FOR, etc). O parmetro CONFIG pode ser formado pelas opes a seguir: Liga/desliga o modulo (Timer Module On/Off) Tx_ON Tx_OFF Liga/desliga o modo econmico (Timer Module Idle mode On/Off) Tx_IDLE_CON Tx_IDLE_STOP Habilita o GATE (Timer Gate time accumulation enable) Tx_GATE_ON Tx_GATE_OFF PRESCALER (Timer prescaler) Tx_PS_1_1 Tx_PS_1_8 Tx_PS_1_64 Tx_PS_1_128 Habilita o sincronismo do relgio (Timer Synchronous clock enable) 41

Tx_SYNC_EXT_ON Tx_SYNC_EXT_OFF Seleciona a fonte de sinal (Timer clock source) Tx_SOURCE_EXT Tx_SOURCE_INT onde x pode ser 1, 2 ou 3 dependendo do TIMER utilizado. O parmetro PERIODO define o valor do registrador PRX ou seja, define em que valor de incremento do TIMER acontecer o estouro. O valor de PERIODO pode ser escolhido entre 0 e 65535 (na base hexadecimal, de 0x0000 a 0xFFFF). Exemplo de utilizao da funo OpenTimer:

Dentre vrias maneiras de se utilizar o mdulo temporizador (TIMER) nos cdigos dos programas, veremos neste curso um modo simples e muito utilizado pelos programadores. Trata-se do modo da interrupo associada ao tempo de estouro. Neste modo, a cada estouro do timer gerada uma interrupo, desviando o processamento do microcontrolador para uma rotina de tratamento desta interrupo. Assim, pode-se utilizar o timer para contar um tempo ( conversores A/D; e outras. A rotina de tratamento da interrupo um escopo declarado fora do escopo principal. Esta rotina pode ser declarada da seguinte maneira: ) e executar uma tarefa, como por exemplo: alternar o estado de uma sada digital; efetuar clculos; fazer a leitura de

42

A habilitao da interrupo para os TIMERS feita atravs do uso da funo ConfigIntTimerx(CONFIG_INT), onde o parmetro CONFIG_INT formado pela prioridade da interrupo e tambm do estado da interrupo do mdulo (ligado/desligado). Timer Interrupt Priority (Prioridade da Interrupo do Timer) Tx_INT_PRIOR_7 Tx_INT_PRIOR_6 Tx_INT_PRIOR_5 Tx_INT_PRIOR_4 Tx_INT_PRIOR_3 Tx_INT_PRIOR_2 Tx_INT_PRIOR_1 Tx_INT_PRIOR_0 Timer Interrupt Enable (Habilitao a Interrupo do Timer) Tx_INT_ON Tx_INT_OFF onde x pode ser 1, 2 ou 3 dependendo do TIMER utilizado. Exemplo da utilizao da funo ConfigIntTimer:

Independentemente da habilitao da interrupo, o estouro de um TIMER sempre ser marcado pelo valor 1 em um bit sinalizador correspondente. Os bits sinalizadores (T1IF, T2IF e T3IF) localizam-se no registrador IFS0.

IMPORTANTE: Aps o tratamento da interrupo, deve-se atribuir o valor 0 ao bit


sinalizador do timer utilizado, liberando-o para novos tratamentos, pois o valor 1 neste bit indica ao microcontrolador que uma chamada de interrupo ocorrida anteriormente ainda no foi tratada ou est sendo tratada. No quadro a seguir exemplificado este procedimento.

43

Prtica 5: Acende e apaga LED com temporizador;


Conecte um LED a porta RD0 e desenvolva um programa para alternar o estado lgico do LED a cada estouro de 500ms, ou seja, ao ocorrer o estouro, teste o estado do LED e atribua seu estado complementar. Segue um exemplo de cdigo fonte.

Prtica 6: Gerao de PWM com temporizador.


Com o mesmo circuito da prtica 4, desenvolva um programa para gerar um sinal do tipo PWM com frequncia de 10Hz utilizando o timer 1 para contar o perodo deste sinal sem

44

gerar interrupo. Caso seja necessrio, pode-se utilizar mais de um TIMER. Segue um exemplo de cdigo fonte.

45

8. 8.1.

Mdulo de Comunicao Serial; Introduo


O mdulo de comunicao serial, tambm conhecido como mdulo UART (Universal

Asynchronous Receiver/Transmitter), um perifrico do microcontrolador responsvel por transmitir e receber dados em um meio fsico entre dois dispositivos, utilizando o protocolo RS232. Este protocolo baseado no transporte de uma sequncia de bits a uma velocidade constante (baud rate), onde o primeiro e o ultimo bit so chamados de start-bit e stop-bit, respectivamente. O tamanho do pacote de dados pode ser 8 ou 9 bits. O mdulo permite a utilizao de um bit de paridade que oferece maior segurana para a integridade da informao trafegada. No dsPIC, o mdulo UART est associado a 5 registradores, so eles: U1MODE (Registrado do modo de operao do mdulo UART), U1STA (Registrador de Controle e Status da UART), U1TXREG (Registrador de Recebimento de dados pela UART), U1RXREG (Registrador de Transmisso de dados pela UART), U1BRG (Registrador de Baud-Rate da UART). Estes registradores so utilizados por meio de funes definidas no arquivo uart.h, que deve ser includa no projeto atravs da insero do comando #include <uart.h>.

8.2.

Funo ConfigIntUART1
A funo ConfigIntUART1 habilita/desabilita a interrupo e tambm estabelece a

prioridade desta interrupo. Parametro_Int: Habilitar/ Desabilitar Interrupo da Recepo da UART UART_RX_INT_EN UART_RX_INT_DIS UART_RX_INT_PR0 UART_RX_INT_PR1 UART_RX_INT_PR2 UART_RX_INT_PR3 46 (Habilita) (Desabilita)

Prioridade da Interrupo da Recepo da UART

UART_RX_INT_PR4 UART_RX_INT_PR5 UART_RX_INT_PR6 UART_RX_INT_PR7 Habilitar/ Desabilitar Interrupo da Envio da UART UART_TX_INT_EN UART_TX_INT_DIS (Habilita) (Desabilita)

Prioridade da Interrupo da Envio da UART UART_TX_INT_PR0 UART_TX_INT_PR1 UART_TX_INT_PR2 UART_TX_INT_PR3 UART_TX_INT_PR4 UART_TX_INT_PR5 UART_TX_INT_PR6 UART_TX_INT_PR7 Exemplo:

8.3.

Funo OpenUART1
A funo OpenUART1 utilizada para configurar as sees de recebimento e

transmisso de dados e estabelece o baud-rate da UART. Esta funo deve ser localizada dentro do escopo principal do programa. Cada um dos 3 parmetros da funo OpenUART1 est apresentado a seguir. OpenUART1(Parametro_MODE, Parametro_STA, Parametro_UBRG):

47

Parametro_MODE: Habilita/Desabilita o mdulo UART UART_EN UART_DIS Modo de operao Idle na UART UART_IDLE_CON UART_IDLE_STOP diminuir o consumo de energia). Utilizar pinos alternativos para RX/TX na UART UART_ALTRX_ALTTX UART_RX_TX UART_EN_WAKE UART_DIS_WAKE Habilitar/Desabilitar o modo Loopback da UART UART_EN_LOOPBACK UART_DIS_LOOPBACK Habilitar/Desabilitar o mdulo Capture UART_EN_ABAUD UART_DIS_ABAUD UART_NO_PAR_9BIT UART_ODD_PAR_8BIT UART_EVEN_PAR_8BIT UART_NO_PAR_8BIT Nmero de Stop bits UART_2STOPBITS UART_1STOPBIT (2 bits de parada) (1 bit de parada) (Habilita o Capture para fazer o auto baud rate) (Desabilita o Capture) (sem paridade e 9 bits de dados) (paridade impar e 8 bits de dados) (paridade par e 8 bits de dados) (sem paridade e 8 bits de dados) (Utiliza os pinos alternativos para RX e TX) (Utiliza os pinos normais RX e TX) (modo contnuo, a UART fica sempre ligada) (modo econmico, a UART pode ser desligada para (Habilita) (Desabilita)

Habilitar/Desabilita o modo Wake-up on Start da UART

Seleo o nmero de bits de dados e paridade

8.4.

Parametro_STA:
Seleo do modo de interrupo na transmisso da UART UART_INT_TX_BUF_EMPTY UART_INT_TX

Bit de parada na transmisso da UART

48

UART_TX_PIN_NORMAL UART_TX_PIN_LOW Habilita/Desabilita a transmisso da UART UART_TX_ENABLE UART_TX_DISABLE Seleo do modo de interrupo na recepo da UART UART_INT_RX_BUF_FUL UART_INT_RX_3_4_FUL UART_INT_RX_CHAR Habilita/Desabilita a deteco de endereo da UART UART_ADR_DETECT_EN UART_ADR_DETECT_DIS Limpar o bit de Overrun da UART UART_RX_OVERRUN_CLEAR

8.5.

Parmetro UBRG
O parmetro UBRG define a velocidade de comunicao de dados, conforme a

equao (8.1): (8.1) Valores padro para o baud rate (em Kbps): 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000. Exemplo:

49

8.6.

Funo ReadUART1( ) e DataRdyUART1( )


A funo ReadUART1 utilizada para obter os dados recebidos pela UART e

armazenados nos buffers deste mdulo. A leitura do buffer de recebimento no deve ser feita enquanto o mdulo UART estiver atualizando este buffer. Para isto, utiliza-se a funo DataRdyUART1 que retorna o estado do buffer e pode ser utilizado para liberar o buffer para leitura. Geralmente, a funo ReadUART1 e a funo DataRdyUART1 so chamadas de dentro da rotina de tratamento de interrupo RX da UART. O quadro a seguir ilustra a utilizao destas funes.

8.7.

Funo WriteUART1( ) e BusyUART1( )


A funo WriteUART1 utilizada para escrever (ou enviar) um caractere pela porta

de comunicao serial por chamada. Durante o processo de escrita deste caractere, no se deve fazer outra chamada da funo de escrita na UART. O correto aguardar at que buffer de transmisso esteja livre. Para isto, utilizada a funo BusyUART1, que retorna o estado da transmisso da UART, podendo ser utilizada para habilita o uso da funo de escrita. No quadro a seguir exemplificado o uso destas funes.

50

8.8.

Conversor TTL-RS232
Do ponto de vista do hardware, os nveis de tenso do padro RS-232 presentes nos

computadores que possuem porta de comunicao serial no se adequam aos nveis de tenso do padro TTL presente em diversos circuitos eletrnicos. Alm da diferena entre os nveis de tenso, h tambm a oposio de fase entre os dois sinais. Para melhor ilustrar, observe a figura a seguir.

Figura 8.1 Comparao entre nveis de tenso dos sinais TTLe RS-232.

Esta diferena entre os sinais resolvida com um circuito integrado que faz a converso entre os dois padres. Trata-se do CI MAX-232, que interliga o microcontrolador ao computador.

Prtica 7: Envio de dados pelo mdulo de comunicao serial.


Conecte um CI MAX-232 ao dsPIC de acordo com a as ligaes ilustradas na Figura 8.2.

Figura 8.2 Conexo entre o DSPIC e o MAX-232.

51

Desenvolva um programa que envie constantemente um caractere pelo canal de comunicao serial para um computador. Segue um exemplo de cdigo fonte.

Observao:
Mesmo que a escrita na UART esteja obedecendo ao teste que verifica se o canal de transmisso est livre ou no, faz-se necessrio provocar um atraso entre as escritas. Portanto, a tarefa agora provocar este atraso neste cdigo e observar a melhora na transmisso dos caracteres.

Sujesto: Utilizar uma rotina de atraso feita com o lao FOR ou ento habilitar a interrupo de um TIMER para que a cada estouro seja enviado o caractere. Prtica 8: Recepo de dados pelo mdulo de comunicao serial
Conecte um LED a porta RD0 no mesmo circuito da prtica anterior e desenvolva um programa que acenda o LED caso o recebido pela porta serial seja igual a letra A. Se no for, o LED permanece apagado. Segue um exemplo de cdigo fonte. 52

Prtica 9: Recepo de dados pela serial e utilizao da interrupo do Timer.


Sem alterar a montagem, desenvolva um programa faa o LED ficar piscando numa freqncia de 1Hz quando for enviado o caractere E para o dsPIC.

53

54

9. 9.1.

Mdulo Conversor A/D de 12 bits; Introduo


O conversor A/D (analgico-digital) conversor um circuito que realiza a

digitalizao dos sinais analgicos externos. Na famlia dsPIC30F existem duas verses de microcontroladores, uma com conversor A/D de 10 bits e outra com conversor de 12-bits. O diagrama funcional do conversor A/D de 12 bits presente em DSPICs da famlia 30f ilustrado na Figura 8.1. O conversor baseado no mtodo de aproximao sucessiva.

Figura 8.1 Diagrama em blocos do conversor A/D de 12 bits do DSPIC.

Quanto ao nmero de portas de entrada, no caso do DSPIC30F2011, esto disponveis 8 entradas analgicas (AN0-AN12), as quais so conectadas um amplificador amostrador (Sample/Hold) via um multiplexador analgico. Note que com apenas um Sample/Hold no possvel realizar a amostragem simultnea de vrios canais de entrada. O conversor permite uma velocidade mxima de converso A/D de 200.000 amostras por segundo. Porm, vale ressaltar que este nmero dividido pelo nmero de canais de entrada. A sada do Sample/Hold conectada entrada do conversor A/D. Existem tambm duas entradas analgicas utilizadas como tenso de referncia externa (VREF+, VREF-), sinais estes que devem ser gerados por um gerador de referncia adequado. Para aplicaes menos exigentes, possvel configurar como tenso de referncia 55

os prprios sinais analgicos de alimentao (AVDD, AVSS) utilizados para alimentar os perifricos internos do DSPIC que possuem estgios analgicos, tal como o conversor A/D. O resultado da converso A/D carregado em uma memria do tipo RAM (buffer), a qual tem capacidade para armazenar 16 valores de 12 bits cada. Os valores armazenados no buffer (ADBUF0, ADBUF1,..., ADBUFF) so lidos via um registrador de sada de 16 bits, de acordo com o formato de sada selecionado na configurao do A/D. O contedo do buffer no podem ser alterados pelo programa, e sim exclusivamente pelo conversor A/D. O conversor AD realiza basicamente duas operaes cada vez que converte um sinal analgico de entrada para um valor correspondente digital. Primeiro, o conversor A/D realiza a amostragem da entrada analgica e armazena a amostra analgica em seu amplificador amostrador (Sample/Hold), um processo conhecido como aquisio. Capturar a amostra analgica anlogo a tirar uma fotografia da forma de onda analgica, com o tempo de aquisio semelhante ao tempo de exposio de uma fotografia. O tempo de amostragem determinado de acordo com o sinal aquisitado. Uma vez que o sinal foi capturado, o conversor A/D realiza a segunda operao principal: ele converte o sinal analgico amostrado para o valor numrico digital correspondente, um processo geralmente denominado como converso. A Figura 8.2 ilustra a relao entre o tempo de amostragem (tempo de aquisio), o tempo de digitalizao e o tempo de ciclo completo do conversor A/D. Dependendo de como o mdulo configurado, o nmero convertido digital disponibilizado em quatro diferrentes formatos.

Figura 8.2 Tempo de converso de um sinal A/D do DSPIC.

56

O DSPIC realiza a amostragem de sinais de forma manual, na qual o cdigo fonte do programa explicitamente inicia cada operao de amostragem, ou ele pode executar a amostragem automtica, na qual o mdulo A/D configurado inicialmente e depois o hardware repetidamente realiza a aquisio e converso, apenas interrompendo o processador para realizar a converso A/D dos canais especificados.

9.2.

Funo de Transferncia do Conversor A/D


A funo de transferncia ideal do conversor A/D de 12 bits ilustrada na Figura 8.3.

A diferena entre as tenses de entrada (VINH VINL) comparada com a referncia (VREFH VREFL).

Figura 8.3 Funo de transferncia do conversor A/D de 12 bits

9.3.

Etapas de converso
Os seguintes passos so realizados durante uma converso completa:

1) Configurar o mdulo A/D:

57

Selecionar os canais de entrada do conversor A/D; Selecionar o clock do conversor A/D; Selecionar a fonte de gatilho (trigger) do conversor A/D; Ativar o conversor A/D; Configurar. Limpar o bit ADIF (IFS0,11>); Selecionar a prioridade da interrupo do A/D; Setar o bit ADIE (IEC0<11>);

2) Configurar a interrupo do conversor A/D (se necessrio):

3) Comear a amostragem. 4) Esperar o tempo necessrio para a amostragem. 5) Comear a converso para digital. 6) Esperar a converso completa, o que pode ser realizado de duas formas: esperar a interrupo do A/D ou esperar o bit DONE ser setado. 7) Ler o buffer do conversor A/D. 8) Limpar o bit de interrupo do A/D (ADIF), caso necessrio.

9.4.

Registradores de Controle do Conversor A/D de 12 bits


Para controlar o processo de converso o DSPIC possui seis registradores de 16 bits.

A configurao do modo de operao do conversor A/D realizada atravs dos registradores: ADCON1, ADCON2, ADCON3. A seleo da entrada analgica que ser digitalizada realizada a partir do registrador ADCHS. O ADPCFG utilizado para configurar como entrada analgica os pinos que sero utilizados no conversor A/D e o registrador ADCSSL define quais entradas analgicas sero amostradas seqencialmente, caso este modo de operao esteja ativo.

9.5.

Selecionando a Tenso de Referncia


Por simplicidade de projeto, a tenso de referncia utilizada pelo conversor A/D

geralmente a escala completa da alimentao dos mdulos analgicos do DSPIC (AVss e AVdd). Porm, para melhorar a qualidade das aquisies, as tenses de referncia para

58

converso so limitadas em uma faixa de Vref- e Vref+, o que pode melhorar a relao sinalruido.

9.6.

Selecionando a Taxa de Converso do A/D


A taxa de converso do conversor A/D determinada pelo clock do conversor, no

qual o perodo denominado por TAD. Para realizar uma converso completa so necessrios 14 perodos TAD. O clock do A/D derivado do clock principal do microcontrolador (Tcy) . O perodo TAD gerado por um contador interno de 6 bits e configurado pelos bits ADCS(5-0) do registrador de controle ADCON3. O perodo definido pelo conjunto de equaes (8.1).

(8.1)

9.7.

Selecionando as Entradas Analgicas para Converso A/D


Para reduzir a desnecessria sobrecarga de processamento, o aplicativo pode

especificar quais canais de entrada analgica devem ser convertidos, e o nmero de converses devero ocorrer antes de interromper o processador. Isso libera uma quantidade significativa de tempo de processamento em aplicaes nas quais apenas um subconjunto dos canais de entrada disponveis do A/D so necessrios, uma vez que o firmware no tem que gastar tempo de manipulao de dados convertidos para canais cujos valores nunca sero necessrios. Em todos os modos de amostragem do DSPIC, os dados digitalizados so armazenados no buffer ADCBUF de 16 palavras na ordem em que amostrado, comeando com a localizao ADCBUF0 e continuando at o nmero de amostras especificadas no valor Amotras por interrupo (SMPI) no registrador de controle ADCON2 serem digitalizadas. A partir deste ponto, a prxima digitalizao armazenada novamente na primeira posio do buffer ADCBUF0.

59

9.8.

Habilitando o Mdulo do Conversor A/D


O convesor A/D habilitado quando o bit ADON do registrador de controle

ADCON1 setado. Quando esse bit zerado, o mdulo desativado.

9.9.

Iniciando o Processo de Amostragem do Conversor A/D


Dependendo do modo selecionado para o conversor A/D, a amostragem e

digitalizao poderm iniciar manualmente ou automaticamente. A converso iniciada pelo processo de amostragem pelo amplificador Sample/Hold. A amostragem manual iniciada quano o bit SAMP do registrador de controle ADCON1 setado. Uma de vrias opes podem ser escolhidas para terminar a amostragem e iniciar a digitalizao do sinal para completar a converso. A amostragem no ser retomada at que o bit SAMP seja mais uma vez setado. A amostragem automtica realizada quando o bit ASAM (ADCON1) setado. Neste modo de operao, a amostragem automaticamente iniciada sempre que a o ciclo anterior de converso seja concludo. Da mesma forma que no modo manual, uma de vrias opes podem ser escolhidas para terminar a amostragem e iniciar a digitalizao do sinal para completar a converso.

9.10.

Parando a Amostragem e Iniciando a Digitalizao


O gatilho (trigger) de inicio da digitalizao deve terminar a amostragem e iniciar a

digitalizao. O bit de controle SSRC (ADCON1) seleciona a fonte do trigger de digitalizao. Similarmente ao processo de amostragem, o desenvolvedor pode escolher entre o modo manual e automtico. Os bits de seleo SSRC no devem ser alterados quando o mdulo A/D estiver ativado (ADON = 1). Se o usurio deseja mudar a fonte de disparo de digitalizao, o mdulo A/D deve ser desativado primeiro limpando o bit ADON (ADON = 0). A digitalizao manual selecionada quando SSRC (ADCON1) = 000, modo no qual o gatilho da digitalizao est sob controle do programa. Limpar o bit SAMP (ADCON1) inicia a seqncia de converso. A Figura 8.4 um exemplo do incio manual da seqncia de converso.

60

Figura 8.4 Um exemplo do modo manual de converso A/D. A Figura 8.4 ilustra o inicio da amostragem aps o bit SAMP ser setado e o inicio manual da digitalizao quando o bit SAMP zerado. O usurio deve setar e zerar o bit SAMP em um tempo de acordo com o bit TSAMP.

Prtica 10 Converso A/D com amostragem e digitalizao manual


Desenvolva um programa que utilizando o conversor A/D de 12 bits do DSPIC converta um sinal analgico na entrada AN0. De acordo com o valor digitalizado, devero ser acesos 5 LEDs, um de cada vez. O primeiro LED ligado para valores prximos de 0 Vcc e o quinto LED deve ser ligado para valores prximos de 5 Vcc. Os outros 3 LEDs para valores intermedirios.

61

Prtica 11 Leitura de canal analgico com comunicao serial


Modifique o programa da Prtica 10 de tal forma que o valor digitalizado seja enviado pela porta serial a um computador.

9.11.

Converso A/D com Amostragem Automtica


A Figura 8.5 ilustra um exemplo de inicio de amostragem automtico (bit ASAM=1).

A amostragem terminada e a digitalizao iniciada assim que o bit SAMP zerado manualmente pelo programa. Aps a converso completa, o mdulo ir automaticamente retornar ao estado de amostragem. O bit SAMP automaticamente setado no incio do intervalo de amostragem. O programa implementado pelo desenvolvedor deve esperar um tempo necessrio para a amostragem ser realizada antes de zerar o bit SAMP.

Figura 8.5 Exemplo de um processo de amostragem automtica do conversor A/D de 12 bits.

Prtica 12 Converso A/D com Amostragem Automtica e Digitalizao Manual


Desenvolva um programa similar ao da Prtica 10, porm utilize a metodologia de amostragem automtica.

62

9.12.

Converso A/D com Amostragem Manual e Digitalizao Automtica


Este modo configurado quando os bits SSRC do registrador de controle ADCON1

esto configurados em 111. Neste caso, o gatilho da digitalizao acionado de acordo com o clock do A/D. O conjunto de bits SAMC (ADCON3) seleciona o nmero de TAD clocks necessrios entre o comeo da amostragem e o inicio da digitalizao. Aps o incio da amostragem, o mdulo ir contar o nmero de TAD clocks especificado pelos bits SAMC e iniciar a digitalizao do sinal. A Figura 8.6 ilustra o funcionamento deste modo de operao do conversor A/D.

63

Figura 8.6 Exemplo de um processo de amostragem automtica do conversor A/D de 12 bits.

Prtica 13 Converso A/D com Amostragem Manual e Digitalizao Automtica


Desenvolva um programa similar ao da Prtica 12, porm utilize a metodologia de amostragem manual e inicio de digitalizao automtico.

64

9.13.

Programando o Conversor A/D com a Biblioteca de Funes do C30


Nos programas para aquisio de sinais analgicos que foram desenvolvidos at esse

momento da apostila os registradores de controle foram configurados manualmente, atravs da seleo de cada bit dos respectivos registradores. Este modo de programao muitas vezes no eficiente, visto que demanda um grande tempo e bastante suscetvel a erros. Para lidar com este trabalho manual, a Microchip disponibiliza uma biblioteca com o compilador C30 que possui diversas funes para a maioria dos perifricos internos do DSPIC, as quais possuem diversas facilidades para a implementao. Consulte as pginas 107 a 113 do documento oficial da Microchip sobre a biblioteca de funes para os perifricos do DSPIC (16-BIT LANGUAGE TOOLS LIBRARIES[6]).

65

10. 10.1.

Mdulo Output Compare Introduo


O mdulo Output Compare (OC) utilizado para gerar trens de pulsos, sinais de

PWM, ou gerar um nico pulso. Esse tem a capacidade de comparar o valor de uma base de tempo selecionada com o valor de um ou dois registros comparadores (dependendo do modo de operao selecionado). Como a maioria dos perifricos dsPIC, ele tambm tem a capacidade de gerar interrupes. O DSPIC 30f2011 possui duas sadas para o mdulo Output compare, que so as sadas OC1 e OC2.

10.2.

Modo de Operao PWM


O sinal PWM possui um perodo constante, mas a largura dos pulsos (ciclo ativo)

varia de acordo com o sinal modulado (Figura 9.1). O mdulo Output Compare se encarrega da gerao dos pulsos de forma independente da execuo do programa, dessa forma, o programa precisa apenas atualizar o ciclo ativo quando desejado e o resto do tempo fica livre para executar outras tarefas. A atualizao do ciclo ativo realizada atravs de um registrador do mdulo.

Figura 9.1 Exemplo de sinal PWM.

10.3.

Registradores de Configurao
Cada modulo OC possui trs registradores de controle, os quais so: OCxCON, OCxR

e OCxRS. Como o DSPIC 30f2011 possui dois mdulos OC, os registradores so ento: 66

OC1CON, OC2CON, OC1R, OC2R, OC1RS e OC2RS. funcionalidade dos bits do registrador de controle OCxCON.

A Tabela 9.1 descreve a

Tabela 9.1 Descrio do registrador de controle do mdulo output compare.

Bit 13 OCSIDL 4 OCFLT 3 OCTSEL 2-0 OCM

Funo Parar Output Compare em modo ocioso Condio de falha no PWM Seleo de fonte de clock Seleo de funcionamento

Descrio 1 = Output compare x no funciona em modo ocioso (IDLE) 0 = Output compare x funciona em modo ocioso (IDLE) 1 Houve condio de falha no PWM 0 No ocorreu condio de falha 1 Fonte de clock o temporizador 3 0 Fonte de clock o temporizador 2 111 = Modo PWM, com pino Fault habilitado 110 = Modo PWM, com pino Fault desabilitado 101 = Inicializa o pino OCx em nvel 0 e gera pulsos contnuos na sada OCx 100 = Inicializa o pino OCx em nvel 0 e gera um pulso nico na sada OCx 011 = O evento de comparao inverte o estado do pino OC1 010 = Inicializa o pino OCx em nvel 1 e um evento de comparao fora o pino para nvel baixo 001 = Inicializa o pino OCx em nvel 0 e um evento de comparao fora o pino para nvel alto 000 = Mdulo output compare desabilitado

O modo de operao PWM habilitado configurando os bits OCM do registrador de controle OCxCON em 110 (veja Tabela 9.1). O registrador OCxRS um registrador que pode ser ecrito pelo usurio para atualizar o valor do ciclo ativo do PWN. A cada fim do perodo do PWM, o valor OCxRS carregado em OCxR. O mdulo Output Compare associado a um temporizador interno do DSPIC. A temporizao do perodo do sinal PWM realizada atravs dos temporizadores 2 ou 3. O registrador que define o tempo de ciclo ativo do sinal PWM o OC1RS. Considere ento que o registrador PR2 (perodo do temporizador 2) est configurado para 0xFFFF, podemos ento escalonar o registrador OC1RS de 0 a 0xFFFF, resultando assim em uma resoluo de 16 bits para o PWM. O perodo do temporizador calculado de acordo com o perodo desejado pela equao (9.1)

67

FOSC 4 PR 2 = PST

T PWM

(9.1)

Onde FOSC a freqncia do oscilador do dispositivo em Hz, PST o prescaler do timer associado e TPWM o perodo desejado para o PWM em segundos. Veja o seguinte exemplo: FOSC = 7.370.000,0 Hz Prescaler do Timer 2 = 1:1 Frequencia do PWM desejada = 1 KHz (Perodo de 0,001 segundos) A partir da equao (9.1), encontra-se o valor do PR2 = 1842,5 => 1842 (tem que ser um nmero inteiro). Para configurar o modulo output compare no modo de operao PWM, os seguintes passos devem ser seguidos: 1) Selecione o perodo do PWM escrevendo no respectivo registrador do temporizador, por exemplo, PR2 para o temporizador 2; 2) Selecione o ciclo ativo do PWM escrevendo o valor no registrador OCxRS (no pode ser maior que o valor em PR2); 3) Selecione o valor de prescaler do termporizador e habilite o temporizador; 4) Escreva no registrador OCxR o valor inicial do ciclo ativo; 5) Configure o mdulo output compare no modo PWM escrevendo 100 nos bits COM do registrador OCxCON. (FRC sem PLL)

Prtica 14: Gerao de PWM com o mdulo output compare.


Desenvolva um programa que utilize o mdulo output compare para gerar um sinal PWM com freqncia de 1 KHz e ciclo ativo de 50%. Monitore a sada do pino OC1 do DSPIC com um osciloscpio.

68

Prtica 15: Gerao de PWM com o mdulo output compare e macros do C30.
Desenvolva um programa que utilize o mdulo output compare com as funes do copilador C30, com o objetivo de gerar um sinal PWM com freqncia de 1 KHz e ciclo ativo de 50%. Monitore a sada do pino OC1 do DSPIC com um osciloscpio.

Prtica 16: Leitura de Sinal Analgico e Escrita em Sada PWM


Desenvolva um programa que adquira um sinal analgico pelo conversor A/D de 12 bits e escreva este valor em uma sada PWM. O PWM deve ter freqncia de 1 KHz.

69

70

11.

Projeto Final - Projeto de um Controlador Digital


Desenvolva um programa que implemente uma lei de controle do tipo proporcional. O

sinal de sada da planta (0-5Vcc) e o sinal de referncia (0-5Vcc) so medidos a partir de duas entradas analgicas do A/D de 12 bits. O sinal de controle ser aplicado pelo mdulo PWM do DSPIC. A planta controlada ser um filtro de 1 ordem passivo do tipo RC. O controlador tambm deve enviar os sinais de entrada e sada pela porta serial a um computador, no qual os dados sero armazenados. Tambm monitore os sinais de entrada e sada com um osciloscpio.

71

12.

Referncias Bsicas

[1] Andr Schneider de Oliveira e Fernando Souza de Andrade, Sistemas Embarcados, Hardware e Firmware na Prtica. So Paulo: Erica 2006. [2] Vitor Amadeu Souza, Programao em C para o Dspic Fundamentos, Ensino Profissional, So Paulo, 2008. [3] Creed Huddleston, Intelligent Sensor Design Using the Microchip dsPIC, Newnes, 2006. [4] Microchip, DsPIC30F Family Reference Manual, Microchip Technology Incorporated, U.S.A., 2006. [5] Microchip, Datasheet DsPIC 30F4013, Microchip Technology Incorporated, U.S.A., 2005. [6] Microchip, 16-Bit Language Tools Libraries Manual, Microchip Technology Incorporated, U.S.A., 2005.

72