Como piscar um LED com o PIC16F877A

Construa projetos utilizando o microcontrolador 8 bits mais tradicional do desenvolvimento embarcado.

Os microcontroladores PIC desenvolvidos pela Microchip são famosos no meio do desenvolvimento embarcado, são chips baratos que podem ser encontrados a venda em qualquer parte da internet. Existem PICs baseados em 8 bits, 16 bits ou recentemente em 32 bits, sendo que os mais procurados são os chips de 8 bits. Encontram-se diversos tipos de famílias 8 bits deste microcontrolador como por exemplo o PIC16 e sua extensa lista de modelos ou o PIC18.

O PIC16F877A é o modelo mais conhecido entre a sua família, segundo o datasheet este chip contém 40 pinos disponíveis sendo separados em 5 grupos de portas I/O. Sua base é desenvolvida na arquitetura de Harvard, igualmente ao microcontrolador Atmega328p da Atmel. O clock permite trabalhar em diferentes frequências como 8 MHz, 16 MHz ou em seu máximo, 20 MHz. Existem pinos dedicados para comunicação serial USART, SPI e I2C. Confira a pinagem do PIC16F877A abaixo:

Pinagem do PIC16F877A - Datasheet Microchip
Pinagem do PIC16F877A - Datasheet Microchip


Materiais

O primeiro passo para inicializar o projeto é montar uma estrutura adequada para receber o microcontrolador PIC16F877A no protoboard, para isso pegue uma caneta e um papel para anotar os seguintes componentes e módulos necessário para esta montagem.

Dica: Sempre que possível reutilize componentes da sucata e teste com um multímetro antes de utilizá-los no protoboard, isso ajuda na falta de algum componente.

  • 1 Microcontrolador Microchip PIC16F877A
  • 1 Programador universal MiniPro 40 pinos USB
  • 1 Cristal de 20 MHz
  • 2 Capacitores cerâmicos de 22 pF NPO
  • 1 Capacitor eletrolítico de 1 uF
  • 1 Chave push button N/O de 2 pinos
  • 1 Diodo 1n4148
  • 1 Resistor de 4K7 ohms
  • 1 Resistor de 220 ohms
  • 1 Protoboard de 830 furos
  • 1 Módulo de fonte para protoboard (5V e 3.3V)
  • 1 Fonte de 9V ou cabo USB para alimentação
  • Cabos jumper Macho - Macho
  • 1 LED

Montando o PIC

Com estes materiais em mãos podemos inicializar a montagem do PIC16F877A, para isso encaixe ele no protoboard e observe atentamente a pinagem no esquema abaixo:

Esquema do PIC16F877A
Esquema do PIC16F877A

Clique nas imagens para ampliar.

No pino 1 coloque o catodo do diodo 1n4148 interligando o Capacitor eletrolítico de 1 uF, o Resistor de 4K7 ohms e a Chave push button para realizar o tempo do Reset do PIC.

No pino 11 coloque um cabo para o 5V e o pino 12 para o GND.

Os pinos 13 e 14 são responsáveis pelo clock, então coloque o Cristal de 20 MHz e em cada pino um Capacitor cerâmico de 22 pF NPO para realizar a oscilação da frequência do clock.

No pino 31 coloque um cabo para o GND e o pino 32 para o 5V.

IDE e Compilador

Com todas as ligações realizadas corretamente, por enquanto deixe o protoboard de lado. O primeiro passo é instalar uma IDE e um compilador que interprete os registradores do PIC16F877A.

Existem diversos ambientes de desenvolvimento (IDE) e compiladores para o PIC, neste tutorial foi utilizado a IDE oficial da Microchip MPLAB X com o compilador XC8. Curiosidade: Quem trabalha com o NetBeans irá reconhecer o MPLAB X!

Na página oficial do MPLAB X clique na aba "Downloads" ao lado da aba "Features" e baixe a última versão correspondente ao seu sistema operacional. Este tutorial foi realizado com a versão IDE 64x para Windows. Se você tiver dúvidas com o MPLAB X, na aba "Documentation" estão disponíveis várias documentações em PDF para consulta.

Clicando somente em Next, no final da instalação irá abrir uma janela indicando links úteis, o link que temos que dar atenção é o primeiro, o instalador indica que é necessário baixar o compilador XC8.

Na página oficial do compilador clique na aba "Downloads" ao lado da aba "Additional Information" e faça o donwload da última versão do XC8 para microcontroladores 8 bits correspondente ao seu sistema operacional.

Clicando somente em Next, você irá perceber no final da instalação que esta versão do compilador é free, porém para este tutorial não influenciará em nenhuma função,

Tudo pronto para inicializar o MPLAB X IDE! A janela que você deverá visualizar é semelhante a imagem abaixo:

Microchip MPLAB X IDE - v4.05
Microchip MPLAB X IDE - v4.05

Pronto para criar o seu primeiro projeto? Siga os passos necessários para esta tarefa:

  • No menu File -> New Project.
  • Em Categories -> Microchip Embedded e em Projects -> Standalone Project e Next.
  • Em Family -> All Families e Device -> PIC16F877A e Next.
  • O passo Select Tool é para selecionar o tipo de gravador, como vamos utilizar um gravador universal sem debugger, deixe selecionado o ICD 3 (padrão da IDE) e Next.
  • Selecione o compilador XC8 e Next.
  • Coloque um nome para seu projeto como por exemplo "PiscarLED" e um local para salvar o projeto e Finish!

Clique nas imagens para ampliar.

Seu projeto está criado, feche as abas da página inicial e da loja do MPLAB, como o projeto está em branco será necessário um arquivo main.c para escrever o código, para isso observe a imagem abaixo para criar este arquivo.

  • Source Files -> New -> main.c...
  • Coloque um nome para seu arquivo .c como por exemplo "led" e Finish!
  • Abra o arquivo led.c com 2 cliques.

Clique nas imagens para ampliar.

Codificando o PIC

Se você chegou até aqui parabéns! Para começar a programar é importante entender como funciona os registradores utilizando o compilador XC8.

Para cada porta podem ser associados 2 registradores, o TRIS (Tri-State) e PORT. Todos os pinos do PIC possuem diferentes PORTs e TRISs, como PORTD e PORTB ou TRISB e TRISD contendo grupos de pinos GPIO (General Purpose Input Output), sendo que cada PORT contém 8 pinos I/O, por exemplo PORTB7 ou PORTD2. Para definir se um pino é Input ou Output utilizamos o registrador TRIS, se TRIS = 1 significa Input e TRIS = 0 significa Output.

Do modo geral, se o registrador TRIS = 0 e o registrador PORT = 1 corresponderá a o estado HIGH ou 5V, e se o PORT = 0 será LOW ou GND. Outra condição é se o TRIS = 1 e o PORT = 1 temos o estado de alta impedância ou terceiro estado do Tri-State, levando o pino ao HIGH ou 5V, igualmente se a condição for TRIS = 1 e o registrador PORT = 0 corresponderá ao estado LOW ou GND como demonstra a imagem abaixo.

Registradores do PIC - TRIS e PORT
Registradores do PIC - TRIS e PORT

Para definir as pontas e seus registradores você pode escreve-los utilizando números decimais, octais, hexadecimais e com a técnica bitwise.

A forma que é definido com as bases numéricas são representados da seguinte forma:

  • 0b indica números binários.
  • indica números octais e decimais.
  • 0x indica números hexadecimais

Veja a tabela abaixo com algumas conversões:

Decimal Binário Octal Hexadecimal
0 0b00000000 00 0x00
1 0b00000001 01 0x01
128 0b10000000 0200 0x80
255 0b11111111 0377 0xFF

Estes exemplos de código mostram como são utilizados na programação para o PIC:

PORTD = 0xFF; // Todos os pinos PORTD setados como 1/HIGH
TRISD = 0x00; // Todos os pinos TRISD setados como 0/OUTPUT
PORTB = 128;  // Seta o sétimo bit do PORTB como 1/HIGH
PORTA = 0b00000001; // Seta o primeiro bit do PORTA como 1/HIGH
TRISB = 0b00100000; // Seta o quinto bit como 1/INPUT e os demais como 0/OUTPUT

A imagem abaixo demonstra a atribuição dos bits de entrada e saída em binário do TRISB do código acima TRISB = 0b00100000;:

Exemplo de atribuições de bits entrada/saída em binário de um registrador TRISB
Exemplo de atribuições de bits entrada/saída em binário de um registrador TRISB

A técnica bitwise em C++ significa bit a bit, a forma utilizada com esta técnica consiste em operações de deslocamento a direita e a esquerda de bits. Observe os exemplos de códigos que são interpretados pelo PIC:

// Seta o pino TRISB como OUTPUT

TRISB = (0 << TRISB0);

// Seta os pinos TRISD1 e TRISD2 como OUTPUT

TRISD = (0 << TRISD1)||(0 << TRISD2); 


Agora que você entendeu o básico sobre os registradores do PIC, cole este código em seu main.c e clique no botão "Build Main Project". Se apareceu a mensagem no painel Output da IDE "BUILD SUCCESSFUL" seu código foi compilado com sucesso!

/*
 * File:   led.c
 * Author: Ana Paula Messina - TecDicas
 *
 * Created on 2 de Novembro de 2017, 20:05
 */

#define _XTAL_FREQ 20000000 // 20 MHz

#include <xc.h>

// Padrão de configurações
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = ON // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

int main()
{
  TRISD = (0 << TRISD2); //RD2 (Pino 21) definido como OUTPUT
  while(1)
  {
    PORTDbits.RD2 = 1;  // PORTBbits permite acesso a um único bit
    __delay_ms(100); // 100 ms
    PORTDbits.RD2 = 0; // PORTBbits permite acesso a um único bit
    __delay_ms(100); // 100 ms
  }
  return 0;
}

Gravando no PIC

Para este tutorial foi utilizado um gravador universal de 40 pinos USB sem debbuger, o único problema é que você terá que tirar o PIC toda vez do protoboard para gravar um firmware. 

O gravador utilizado é o MiniPro e o software para gravação é do mesmo fabricante disponível em seu site oficial.

Gravador universal MiniPro USB
Gravador universal MiniPro USB

Para gravar utilizando o MiniPro precisamos do arquivo hexadecimal do nosso projeto "PiscaLED" desenvolvido na IDE MPLAB X, quando você clicou para compilar o projeto automaticamente ele gera esse arquivo no diretório do projeto. Para encontrá-lo acesse a pasta do projeto e siga este caminho: 

  • \dist\default\production\PiscarLED.X.production.hex

Com o arquivo hexadecimal em mãos podemos abrir o software de gravação MiniPro, para isso retire com cuidado o PIC do protoboard sem amassar os pinos e coloque no gravador, neste gravador indica o lado correto para ser encaixado com uma flecha. Siga estes passos para configurar o software e gravar o hex em seu PIC.

Clique nas imagens para ampliar.

Voltando ao protoboard

Seu PIC está gravado com o código para piscar um LED, agora retire o PIC do gravador e encaixe novamente no protoboard com a pinagem correta e veja o esquema para ligar um LED com o resistor de 220 ohms conectado na porta 21 do PIC.

Esquema do PIC16F877A com LED e resistor
Esquema do PIC16F877A com LED e resistor

Com as conexões realizadas corretamente, ligue a fonte de 9V ou um cabo USB de alimentação no módulo de fonte e veja o resultado!

PIC16F877A no protoboard com um LED e resistor
PIC16F877A no protoboard com um LED e resistor

Comente qual foi sua experiência em ter montado este projeto com PIC! Ou tire suas dúvidas.


Comentários



Voltar ao topo
Aguarde..