PIC18F2550: Controle de Iluminação LED

717 views

Neste post monte com a gente um circuito utilizando o PIC18F2550. Nossa primeira programação na interface do MPLAB e enviando para o PIC através do gravador PICkit3.

PIC18F2550

Neste circuito que montaremos, haverá a provisão da conexão do PIC18F2550 com o gravador PICkit3. Desta forma, será possível programar o PIC diretamente na protoboard.

Conhecendo e utilizando o PIC18F2550

O PIC 18F2550 é um micro processador de alta performance desenvolvido pela Microchip Inc., com a capacidade de interface com um computador através de uma comunicação serial via porta USB além da tradicional interface padrão ICSP (para programação em protoboards). Sua programação pode ser realizada com as linguagens Assembly ou C. Para nosso projeto, usaremos uma saída digital RA1 pertencente a porta A (pino 3) e programaremos com a linguagem C.

Figura 01: Diagrama de localização de portas e correspondência com os terminais do PIC18F2550 com destaque na porta que usaremos em nosso circuito.

Este micro controlador possui 24 terminais multifuncionais, sendo as principais características 10 terminais capazes de gerar sinais PWM com resolução de 10 bits, 4 timers e 2 comparadores. Há também um oscilador interno capaz de operar em 8 frequências definidas entre 31kHz e 8MHz e é capaz de trabalhar com dois osciladores externos de frequências de até 48MHz. Seus terminais são agrupados em 4 “portas”, identificadas pelas letras A, B, C e E. Neste projeto, utilizaremos apenas a função de saída digital identificada por RA1.

Figura 02: Diagrama de identificação dos terminais do PIC18F2550 com destaque nos terminais da porta A e a saída digital RA1 no pino 3.

Os significados dos acrônimos das funções utilizadas com este PIC estão listados abaixo para auxiliá-lo a identificar os recursos que serão ser utilizados neste projeto:

PortaNome da funçãoDescrição
EMCLRMaster Clear
EVppTensão de programação (entrada)
EOSC#
Ex.: OSC1
Cristal oscilador interno ou fonte de frequência (clock) externa
ECLK#
Ex.: CLK1
Entrada de pulsos de Clock externos (associado com o terminal com função OSC#)
AR(A/B/C/E)#
Ex.: RA6
Terminal de sinais I/O bidirecional (identificação de porta letras e função por números)
AVref-Tensão de referência para a entrada de sinal analógico (nível lógico baixo)
ACVrefSaída de sinal do comparador analógico
AVref+Tensão de referência para a entrada de sinal analógico (nível lógico alto)
BPGCDepurador para conexão direta ao circuito e terminal de clock de programação ICSP
BPGDDepurador para conexão direta ao circuito e terminal de tranferência de dados de programação ICSP
VssTerra (GND) de referência para lógica e terminais I/O
VddTensão de alimentação para lógica e terminais I/O
ACLKIEntrada de sinal de clock externo. Sempre associado com o terminal com função OSC1
ACLKONo modo RC, o terminal de função CLKO será a saída da função OSC2, o qual a frequência é 1/4 do sinal de OSC1 e denota a instrução de razão de ciclo.

Materiais necessários

Montagem do circuito

Em nosso circuito utilizando o PIC18F2550, utilizaremos a função de clock externo fornecido por um cristal oscilador de 8kHz e um botão para a função reset. Para mais detalhes sobre a montagem deste circuito mínimo de funcionamento, confira nosso primeiro post “Montando o circuito de funcionamento do PIC18F2550”.

Em seguida, iremos conectar na protoboard o LED com o terminal 3 (RA1 – entrada e saída digital da Porta A) do PIC18F2550:

Figura 05: Diagrama Fritzing do circuito completo.

Antes de iniciarmos a programação, vamos identificar no diagrama acima cada um dos circuitos descritos periféricos anteriormente:

Figura 06: Circuito externo de clock.
Figura 07: Circuito do comando externo Reset e LED.

Programando na linguagem C no MPLAB

Na árvore de projetos localizada do lado esquerdo da janela principal do MPLAB, clique o o botão direito do mouse em “Source Files”, vá em “New” e selecione “C Source File…”. Em seguida, surgirá uma janela para definir o nome do arquivo de programação.

Figura 13: Tela principal do MPLAB IDE com o menu de ações da pasta “Source Files” aberto.

Antes de incluirmos nossa programação, a última etapa de preparação que precisamos definir, são alguns parâmetros específicos para que o Bootloader faça nosso PIC trabalhar de acordo com o circuito que montamos na protoboard. Para acessar a lista de itens configuráveis do PIC, vá à barra de ferramentas e selecione: Production > Set Configuration Bits.

Figura 14: Janela principal do MPLAB com o ambiente de programação em branco e pronto para edição.

Na aba Configuration Bits, deverão ser alterados os seguintes itens:

FieldOptionDescrição
FOSCHSTipo de oscilador – HS: High Speed. Indicado no datasheet para configurar o
bootloader para considerar a frequência do clock externo
WDTOFFDesabilitar o timer do watchdog – sistema de verificação de falhas do sistema
CCP2MXOFFFunção do comparador de sinal desabilitado. Liberada função de porta I/O (RB3)
PBADENOFFTerminais da porta B configurados para funcionamento com sinais digitais
LVPOFFFunção de programação com fornecimento de tensão de baixa tensão desabilitado
Figura 15: Ambiente de programação do MPLAB IDE com a aba de configuração de bits visível e editável.

Após realizar estas alterações, Clique em “Generate Source Code to Output” na parte inferior da janela. Este comando fará o MPLAB IDE gerar o nosso bootloader padrão para o nosso PIC18F2550 de acordo com nossas preferências. Selecione e copie toda a programação gerada pelo MPLAB IDE na aba “Output – Config Bits Source” e cole no campo de edição da aba “Pisca_LED.c” na parte superior:

Figura 16: Ambiente de programação do MPLAB IDE com a programação do bootloader gerada de acordo com as preferências estabelecidas.

Como comparação, o Arduino possui o Bootloader já gravado em seu microcontrolador Atmega, necessitando gravar apenas a programação de seu projeto. Já para aplicações com PIC, o Bootloader é enviado junto de sua programação. É necessária a gravação do Bootloader em conjunto com sua programação, porque o Bootloader é a programação que iniciará o PIC com a identificação de suas funções básicas (como um mini sistema operacional). O Bootloader gerado pelo MPLAB possui comentários em inglês indicando os significados das principais funções e algumas funções que serão utilizadas em seu programa.

Agora com o Bootloader pronto, podemos inserir nossa programação para piscar o LED no terminal 3 (RA1) na linha logo após a instrução #include <xc.h>. Nossa programação final será:

Figura 17: Programação de comando de acendimento de LED.

Salve as alterações do arquivo de programação clicando no ícone com desenho de 2 disquetes (destacado na imagem acima) e então clique no ícone com desenho de um martelo (destacado na imagem abaixo) para gerar o arquivo do projeto em hexadecimal (extensão “.hex”). Um relatório de progresso será criado na sub aba “Pisca_LED (Build, Load)” na seção inferior da janela do MPLAB.

Figura 18: Janela principal do MPLAB exibindo a programação e o status da criação do arquivo da programação em hexadecimal concluída.

Agora conecte seu PICkit3 ao computador com o cabo USB e confirme se a conexão com a protoboard está correta conforme o indicado no esquema elétrico indicado no início deste post.

Figura 19: Esquema simplificado da interface do PICkit3 com a protoboard com PIC e o computador.

Com o circuito na protoboard energizado com 5V e o gravador PICkit3 conectado ao computador, clique em “Run Main Project” no MPLAB (ícone de um triângulo verde – destacado na imagem abaixo):

Figura 20: Janela principal do MPLAB exibindo a programação e o status da criação do arquivo da programação em hexadecimal concluída.

O MPLAB abrirá uma janela e solicitará a confirmação de qual tipo de gravador será utilizado para enviar a programação ao PIC. Selecione o subitem do PICkit3 da lista exibida e clique em OK.

Figura 21: Janela com lista de seleção de gravadores compatíveis com o MPLAB para gravação do PIC.

No caso de primeira gravação com o MPLAB, antes da gravação ser iniciada, surgirá uma (última) janela de aviso sobre a tensão de gravação. No caso do PIC18F2550, a tensão de gravação é de 5V, por isso a alimentação externa se faz necessária. Para gravação de PICs com tensão de trabalho de 3.3V, é possível utilizar o terminal 6 do PICkit3 com a opção LVP habilitada. Clique em OK e a programação será iniciada.

Figura 22: MPLAB durante o processo de gravação da programação no PIC18F2550.

A gravação da programação durará alguns segundos e as informações sobre o progresso da gravação até sua conclusão serão mostradas na parte inferior da janela do MPLAB (na sub aba “PICkit 3”).

Figura 23: Janela principal do MPLAB exibindo a programação e o status da programação concluída.

Após o término da gravação do programa no PIC, você verá o PIC aceso e apagado em intervalos de 1 segundo, confira:

Analisando a programação

Como você pôde reparar na maior parte da programação deste projeto, existem várias linhas de comando que são dedicadas para cada parâmetro. A configuração do PIC na linguagem C utiliza a sintaxe #pragma para fornecer instruções específicas ao compilador. Desta forma, as atribuições e funções de cada terminal serão definidas conforme as necessidades de seu projeto. Veremos abaixo o que cada parte da programação é responsável por:

CONFIG1L: Esta seção da programação configura as características do clock que será utilizado durante a utilização do PICkit3 (recomendamos fortemente utilizar esta configuração, pois desta forma o PIC utilizará o clock do computador:

 

CONFIG1H: Esta seção da programação configura as características do clock gerado pelo oscilador externo (a opção FOSC = HS está de acordo com a indicação do datasheet do PIC18F2550 para trabalhar com osciladores de 8MHz):

 

CONFIG2L: Esta seção da programação configura as características da comunicação do PIC18F2550 na condição USB (as configurações BOR e BORV são aplicáveis tanto para as comunicações via USB quanto para ICSP):

 

CONFIG2H: Esta seção da programação (des)habilita a função Watchdog, que é um recurso interessante em processos que necessitam de comparação dos dados dos sensores com a programação do projeto:

 

CONFIG3H: Esta seção da programação (des)habilita as funções de multiplexador, conversor analógico/digital, timer de baixa tensão e Master Clear externo:

 

CONFIG4L: Esta seção da programação (des)habilita as funções

 

CONFIG5L: Esta seção da programação pode habilitar a proteção contra leitura de seu programa após da gravação em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

CONFIG5H: Esta seção da programação também pode habilitar a proteção contra leitura de seu programa após da gravação em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

CONFIG6L: Esta seção da programação pode habilitar a proteção contra regravação de outro programa em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

CONFIG6H: Esta seção da programação também pode habilitar a proteção contra leitura de seu programa após da gravação em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

CONFIG7L: Esta seção da programação também pode habilitar a proteção contra leitura de seu programa após da gravação em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

CONFIG7H: Esta seção da programação também pode habilitar a proteção contra leitura de seu programa após da gravação em seu PIC. Esta função deverá estar na condição OFF em todos os parâmetros, para que seja possível utilizar o mesmo PIC para outros projetos no futuro:

 

A programação para executar a função de piscar o LED utiliza a sintaxe #define _XTAL_FREQ para informar a frequência de clock externo (valor número em Hertz), a inclusão da biblioteca xc.h, o registrador TRIS para identificar a porta (no nosso caso a porta A – definido pela expressão TRISA) e seu modo de trabalho (saída digital – definido a partir do código hexadecimal 0X0), além das linhas de comando condicional WHILE(1) (o número 1 indica a condição ser verdadeira), a função de pino digital RA1 (terminal 3 do PIC), contagem de tempo do período com o LED aceso e apagado com a função __delay_ms() (valor em milissegundos) e o comando return 0 para finalizar o ciclo de ações:

Em nossos próximos posts, iremos reproduzir alguns dos projetos mais usuais da plataforma Arduino.

Confira os posts anteriores:

Montagem do Circuito de funcionamento
Configurando o software MPLAB IDE


Esperamos que tenham gostado deste tutorial. Para dúvidas e sugestões, deixe um comentário abaixo! Aproveite e confira outros produtos em nossa loja!

 

(Visited 592 times, 1 visits today)