Escrevendo Seu Primeiro Programa com Microcontrolador PIC e Configurando Bits de Configuração

Tempo de leitura: 10 minutes

Este é o segundo tutorial da nossa série de tutoriais PIC. Em nosso tutorial anterior Introdução ao Microcontrolador PIC: Introdução ao PIC e MPLABX, aprendemos o material básico sobre o nosso microcontrolador PIC, também instalamos o software necessário e adquirimos um novo programador PicKit 3 que usaremos em breve. Agora estamos prontos para começar com o nosso Primeiro programa de piscar LED usando o PIC16F877A . Também aprenderemos sobre os Registros de Configuração neste tutorial.

Este tutorial espera que você tenha instalado o software necessário no seu computador e conheça alguns princípios básicos decentes sobre o PIC MCU. Caso contrário, volte ao tutorial anterior e comece a partir daí.

Preparando-se para a programação :

Como decidimos usar o PIC16F877A, com o compilador XC8, vamos começar com a folha de dados. Eu recomendo que todos baixem o DataSheet PIC16F877A e o Manual do compilador XC8, como nos referiremos a eles com frequência à medida que avançamos em nosso tutorial. É sempre uma boa prática ler a folha de dados completa de qualquer MCU antes de começarmos a programar com ela.

Agora, antes de abrirmos o MPLAB-X e iniciarmos a programação, há poucas coisas básicas que é preciso conhecer. De qualquer forma, como este é o nosso primeiro programa, não quero discutir com vocês muita teoria, mas vamos parar por aqui e por lá enquanto programamos e explicarei as coisas como tal.

Criando um novo projeto usando o MPLAB-X :

Etapa 1 : Inicie o MPLAB-X IDE que instalamos na classe anterior, uma vez carregado, ele deve ficar assim.

Etapa 2 : Clique em Arquivos -> Novo projeto ou use a tecla de atalho Ctrl+Shift+N. Você receberá o seguinte POP-UP, do qual precisará selecionar Projeto Independente e clique em Avançar.

Etapa 3 : Agora temos que selecionar nosso dispositivo para o projeto. Então digite como PIC16F877A sobre o Selecione o dispositivo seção suspensa. Uma vez feito, deve ser assim e, em seguida, Clique em Avançar.

Etapa 4 : A próxima página nos permitirá selecionar a ferramenta para o nosso projeto. Este seria o PicKit 3 para o nosso projeto. Selecione PicKit 3 e clique em Avançar

Etapa 5 : A próxima página solicitará a seleção do compilador, selecione o compilador XC8 e clique em Avançar.

Etapa 6 : Nesta página, precisamos nomear nosso projeto e selecionar o local em que o projeto deve ser salvo. Eu nomeei este projeto como Pisque e salvou na minha área de trabalho. Você pode nomear e salvá-lo da sua maneira preferível.  Nosso projeto será salvo como uma pasta com a extensão . .X, que pode ser lançado diretamente pelo MAPLB-X. Clique em Concluir uma vez feito.

Etapa 7 : É isso aí!!! Nosso projeto foi criado. A janela mais à esquerda mostrará o nome do projeto (Here Blink), clique nela para que possamos visualizar todos os diretórios dentro dela.

Para iniciar a programação, precisamos adicionar um arquivo C Main, dentro do nosso diretório de arquivos de código-fonte. Para fazer isso, basta clicar com o botão direito do mouse no arquivo de origem e selecionar New -> C Main File, conforme mostrado na imagem abaixo.

Etapa 8 : A caixa de diálogo a seguir aparecerá na qual o nome do arquivo C deve ser mencionado. Eu nomeei Blink novamente, mas a escolha é deixada para você. Nomeie-o na coluna Nome do arquivo e clique em terminar.

Etapa 9 :  Depois que o arquivo principal C for criado, o IDE o abrirá para nós com alguns códigos padrão, conforme mostrado abaixo.

Etapa 10 : É isso agora que podemos começar a programar nosso código no arquivo principal C. O código padrão não será usado em nossos tutoriais. Então, vamos excluí-los completamente.

Conhecendo os registros de configuração :

Antes de começar a programar qualquer microcontrolador, precisamos conhecer seus registros de configuração.

Então, quais são esses registros de configuração, como e por que devemos defini-los?

Os dispositivos PIC têm vários locais que contêm os bits ou fusíveis de configuração. Esses bits especificam a operação fundamental do dispositivo, como o modo oscilador, timer de vigilância, modo de programação e proteção de código. Esses bits devem ser configurados corretamente para executar o código, caso contrário, teremos um dispositivo que não funcione. Portanto, é muito importante conhecer esses registros de configuração antes mesmo de começarmos com o nosso programa Blink.

Para usar esses registros de configuração, precisamos ler a folha de dados e entender quais são os diferentes tipos de bits de configuração disponíveis e suas funções. Esses bits podem ser definidos ou redefinidos com base em nossos requisitos de programação usando um pragma de configuração.

O pragma tem as seguintes formas.

#pragma config setting = state|value
#pragma config register = value

Onde configuração é um descritor de configuração de configuração, p., WDT e estado é uma descrição textual do estado desejado, p., DESLIGADO. Considere os seguintes exemplos.

#pragma config WDT = ON // ligar o cronômetro de watchdog
#pragma config WDTPS = 0x1A // especifique o valor pós-escala do cronômetro

RELAXE!! ….. RELAXE!!…. RELAXE!!……

Eu sei que isso foi demais em nossas cabeças e definir esses bits de configuração pode parecer um pouco difícil para um novato!! Mas, desafiadoramente, não é com o nosso MPLAB-X

Configurando os bits de configuração no MPLAB-X:

O Microchip facilitou muito esse processo cansativo usando representações gráficas dos diferentes tipos de bits de configuração. Então agora, para defini-los, basta seguir as etapas abaixo.

Etapa 1 : Clique em Janela -> Visualização de memória PIC -> bits de configuração. Como mostrado abaixo.

Etapa 2 : Isso deve abrir a janela de bits de configuração na parte inferior do nosso IDE, conforme mostrado abaixo. Este é o lugar onde podemos definir cada um dos bits de configuração de acordo com nossas necessidades. Explicarei cada um dos bits e seu objetivo à medida que avançamos nas etapas.

Etapa 3 : O primeiro bit é o bit de seleção do oscilador.

O PIC16F87XA pode ser operado em quatro modos diferentes de oscilador. Esses quatro modos podem ser selecionados programando dois bits de configuração (FOSC1 e FOSC0) :

  • LP de cristal de baixa potência
  • XT Crystal/Resonator
  • Cristal/ressonador de alta velocidade HS
  • Resistor/Capacitor RC

Para nossos projetos, estamos usando um Osc de 20Mhz, portanto precisamos selecione o HS da caixa suspensa.

Etapa 4 : O próximo bit será o nosso cronômetro de vigilância Enable Bit.

O Watchdog Timer é um oscilador RC de execução livre no chip que não requer nenhum componente externo. Este oscilador RC é separado do oscilador RC do pino OSC1 / CLKI. Isso significa que o WDT funcionará mesmo que o relógio nos pinos OSC1 / CLKI e OSC2 / CLKO do dispositivo tenha sido parado. Durante a operação normal, um tempo limite WDT gera um dispositivo Redefinir (Redefinição do Temporizador do Watchdog). O bit TO no registro de status será liberado após um tempo limite do Watchdog Timer. Se o timer não estiver limpo na codificação do software, todo o MCU será redefinido a cada estouro do timer WDT. O WDT pode ser desativado permanentemente limpando o bit de configuração.

Não estamos usando o WDT em nosso programa, então vamos esclarecê-lo selecionando OFF da caixa suspensa.

Etapa 5 : O próximo bit será o temporizador de inicialização Bit.

O temporizador de inicialização fornece um tempo limite nominal fixo de 72 ms na inicialização apenas a partir do POR. O temporizador de inicialização opera em um oscilador RC interno. O chip é mantido em Redefinir enquanto o PWRT estiver ativo. O atraso de tempo do PWRT permite que o VDD suba para um nível aceitável. Um bit de configuração é fornecido para ativar ou desativar o PWRT

Não precisaremos de tais atrasos em nosso programa, então vamos desativar isso também

Etapa 6 : O próximo bit será a programação de baixa tensão.

O bit LVP da palavra de configuração permite a programação ICSP de baixa tensão. Esse modo permite que o microcontrolador seja programado via ICSP usando uma fonte VDD na faixa de tensão operacional. Isso significa apenas que o VPP não precisa ser trazido para o VIHH, mas pode ser deixado na tensão operacional normal. Nesse modo, o pino RB3 / PGM é dedicado à função de programação e deixa de ser um pino de E / S de uso geral. Durante a programação, o VDD é aplicado ao pino MCLR. Para entrar no modo de programação, o VDD deve ser aplicado ao RB3 / PGM, desde que o bit LVP esteja definido.

Vamos desligar o LVP para que possamos usar o RB3 como um pino de E/S. Para fazer isso, basta girar isso FORA usando a caixa suspensa.

Etapa 7 : Os próximos bits serão EEPROM e bits de proteção de memória do programa. Se esse bit estiver ativado, uma vez programado o MCU, ninguém recuperará nosso programa do hardware. Mas por enquanto vamos deixar todos os três desligados .

Depois que as configurações forem feitas conforme as instruções, a caixa de diálogo deverá ficar assim.

Etapa 8 : Agora clique em Gerar código-fonte para saída, nosso código será gerado agora, basta copiá-lo junto com o arquivo de cabeçalho e colar no arquivo C do Blink.c, como mostrado abaixo.

É isso que nosso trabalho de configuração está concluído. Podemos ter essa configuração para todos os nossos projetos. Mas se você estiver interessado, poderá mexer com eles mais tarde.

Programando PIC para piscar um LED :

Neste programa, vamos usar o nosso Microcontrolador PIC para piscar um LED conectado a um pino de E/S. Vamos dar uma olhada nos diferentes pinos de E/S disponíveis no nosso PIC16F877A.

Conforme mostrado acima, o PIC16F877 possui 5 portas básicas de entrada/saída. Eles geralmente são denotados por PORTA A (R A), PORTA B (RB), PORTA C (RC), PORTA D (RD) e PORTA E (RE). Essas portas são usadas para interface de entrada / saída. Neste controlador, “PORT A” tem apenas 6 bits de largura (RA-0 a RA-5), “PORT B”, “PORT C”, “PORT D” têm apenas 8 bits de largura (RB-0 a RB-7 , RC-0 a RC-7, RD-0 a RD-7), ”PORTA E” tem apenas 3 bits de largura (RE-0 a RE-2).

Todas essas portas são bidirecionais. A direção da porta é controlada usando registros TRIS (X) (TRIS A usado para definir a direção de PORT-A, TRIS B usado para definir a direção de PORT-B, etc.). Definir um bit TRIS (X) ‘1’ definirá o bit PORT (X) correspondente como entrada. Apagar um bit TRIS (X) ‘0’ definirá o bit PORT (X) correspondente como saída.

Para nosso projeto temos que fazer o pino RB3 da PORTA B como saída para que nosso LED possa ser conectado a ela. Aqui está o código para LED piscando com microcontrolador PIC:

#include <xc.h>
#define _XTAL_FREQ 20000000 //Specify the XTAL crystal FREQ
void main() //A função principal
{
TRISB=0X00; //Instrua o MCU que os pinos PORTB são usados como saída.
PORTB=0X00; //Tornar todas as saídas de RB3 BAIXAS
while(1)    //Entre no loop infinito While
    {
    RB3=1; //LED ON
    __delay_ms(500);   //Wait
    RB3=0; //LED OFF
    __delay_ms(500);   //Wait
    //Repeat. 
    }
}

Primeiro especificamos a frequência do cristal externo usando #define _XTAL_FREQ 20000000. Em seguida, na função void main(), instruímos nosso MCU que usaremos o RB3 como um pino de saída (TRISB = 0X00;). Então, finalmente, um loop while infinito é usado para que o LED pisque para sempre. Para piscar um LED, basta ligá-lo e desligá-lo com um atraso perceptível.

Quando a codificação estiver concluída, construa o projeto usando o comando Executar -> Criar projeto principal. Isso deve compilar seu programa. Se tudo estiver bem (como deveria estar), um console de saída na parte inferior da tela mostrará a mensagem CONSTRUIR COM SUCESSO, conforme mostrado na figura abaixo.

Diagrama de circuito e simulação Proteus:

Depois de construir um projeto e se a construção for bem-sucedida, um arquivo HEX teria sido gerado no plano de fundo de nosso IDE. Este arquivo HEX pode ser encontrado dentro do diretório abaixo

Desktop\Blink\Blink.X\dist\default\production

Pode variar para você se você salvou em algum outro local.

Agora, vamos abrir rapidamente o Proteus que instalamos anteriormente e criar esquemas para este projeto. Não vamos explicar como fazer isso, pois está fora do escopo deste projeto. Mas não se preocupe, isso é explicado no vídeo abaixo. Depois de seguir as instruções e construir os esquemas, deve ser parecido com isto

Para simular a saída, clique no botão play no canto inferior esquerdo da tela após carregar o arquivo hexadecimal. Deve piscar o LED conectado ao RB3 do MCU. Se você tiver algum problema, assista ao vídeo, se ainda não tiver resolvido use a seção de comentários para obter ajuda.

Agora fizemos nosso primeiro projeto com microcontrolador PIC e verificamos a saída usando um software de simulação. Vá mexer no programa e observe os resultados. Até nos encontrarmos em nosso próximo projeto.

Ohh espere !!

 

Em nosso próximo projeto, aprenderemos como fazer isso funcionar em um hardware real. Para isso, precisaremos das seguintes ferramentas para mantê-los prontos. Até então FELIZ APRENDIZAGEM !!

  • PicKit 3
  • PIC16F877A IC
  • Suporte de IC de 40 pinos
  • ProtoBoard ou PCB Universal
  • 20Mhz Crystal OSC
  • Alfinetes de Bergstick femininos e masculinos
  • Capacitor 33pf – (2)
  • Resistor de 680 ohm
  • LED de qualquer cor
  • Kit de solda.

 

Código

#include <xc.h>
#define _XTAL_FREQ 20000000 //Especifique o FREQ de cristal XTAL
void main() //A função principal
{
  TRISB=0X00; //Instrua o MCU que os pinos PORTB são usados como saída.
  PORTB=0X00; //Tornar todas as saídas de RB3 BAIXAS
  while(1)    //Entre no loop infinito While
    {
    RB3=1; //LED ON
    __delay_ms(500);   //Wait
    RB3=0; //LED OFF
    __delay_ms(500);   //Wait
    //Repeat. 
  }
}

 

Visits: 2 Visits: 1126300