Primeira simulação: piscar um LED com o PIC16F877A no PICSimLab

Piscar um LED é o “olá, mundo” dos microcontroladores — e também a maneira mais rápida de confirmar que todo o seu fluxo de trabalho no PICSimLab está funcionando: escolha da placa, geração do projeto, compilação com o XC8, carregamento do arquivo hex e execução da simulação. Neste tutorial usamos o PIC16F877A, o PIC mais documentado do PICSimLab, em uma das duas placas que o suportam oficialmente.

O que você precisa

  • PICSimLab 0.9.3 instalado — veja a página de download em português, com os arquivos oficiais do GitHub.
  • MPLAB X IDE e o compilador XC8. O PICSimLab não edita código-fonte: para placas PIC16F e PIC18F, o assistente de projetos (Code Project Wizard) gera projetos do MPLAB X, e o MPLAB X com o XC8 precisa estar instalado antes.
  • Placa: McLab2 ou PICGenios. As duas suportam oficialmente o PIC16F877A (além de PIC16F777, PIC18F452, PIC18F4520, PIC18F4550 e PIC18F4620).
  • Uma peça LEDs das Spare Parts (adicionada nos passos abaixo), para que o pino de saída fique visível mesmo em uma configuração mínima de placa.

Passo a passo

1. Selecione a placa e o microcontrolador

Abra o PICSimLab e selecione a placa McLab2 (ou a PICGenios) com o PIC16F877A como microcontrolador. Todos os passos seguintes dependem dessa escolha, porque o assistente gera o projeto para o chip selecionado.

2. Gere o projeto do MPLAB X

Use o Code Project Wizard para gerar um projeto para a placa. Para placas PIC16F e PIC18F, o assistente cria um projeto do MPLAB X que usa o compilador XC8. Como alternativa, abra um dos exemplos prontos da placa pelo menu Help → Examples — os exemplos da McLab2 e da PICGenios usam MPLAB X e XC8 — e salve uma cópia como seu projeto.

3. Substitua o main.c pelo código de exemplo

Cole o código de exemplo abaixo no seu projeto. Ele configura o RB0 como saída digital e alterna o seu estado a cada 500 ms. O valor de _XTAL_FREQ informa ao XC8 a velocidade do chip para que o __delay_ms() calcule os atrasos; ajuste-o para o clock configurado para a placa no PICSimLab (este exemplo considera 20 MHz).

4. Compile no MPLAB X

Compile o projeto no MPLAB X. Uma compilação bem-sucedida gera um arquivo .hex na pasta de saída do projeto. Se a compilação falhar, corrija primeiro os erros no MPLAB X — o PICSimLab só consegue executar um arquivo hex que realmente compilou.

5. Adicione o LED nas Spare Parts

No PICSimLab, abra Modules → Spare parts. No menu Outputs, adicione a peça LEDs (um conjunto de 8 LEDs vermelhos). Clique com o botão direito na peça, abra Properties e conecte o primeiro LED ao pino RB0 do microcontrolador. Clicar com o botão direito em qualquer peça também mostra as opções Move, Rotate, Delete e Help.

6. Carregue o hex e execute

Carregue o arquivo .hex compilado no PICSimLab e inicie a simulação. O LED conectado ao RB0 deve acender e apagar duas vezes por segundo. Pare a simulação antes de carregar outro arquivo hex.

Código de exemplo (XC8)

// Exemplo: piscar um LED no RB0 - PIC16F877A, XC8
#pragma config FOSC = HS        // Oscilador de alta velocidade
#pragma config WDTE = OFF       // Watchdog desligado
#pragma config PWRTE = ON       // Power-up timer ligado
#pragma config BOREN = ON       // Brown-out reset ligado
#pragma config LVP = OFF        // Programacao em baixa tensao desligada
#pragma config CPD = OFF        // Protecao da EEPROM de dados desligada
#pragma config WRT = OFF        // Protecao de escrita da Flash desligada
#pragma config CP = OFF         // Protecao de codigo desligada

#include <xc.h>
#define _XTAL_FREQ 20000000     // Exemplo: igual ao clock da placa no PICSimLab

void main(void) {
    TRISBbits.TRISB0 = 0;       // RB0 como saida
    PORTBbits.RB0 = 0;          // LED apagado no inicio
    while (1) {
        PORTBbits.RB0 = 1;      // LED aceso
        __delay_ms(500);
        PORTBbits.RB0 = 0;      // LED apagado
        __delay_ms(500);
    }
}

O que você deve ver

Um pisca-pisca regular de meio segundo. Se depois você abrir Modules → Oscilloscope e medir o RB0, verá uma onda quadrada com período de aproximadamente um segundo — uma boa primeira confirmação de que o clock da simulação combina com o valor de _XTAL_FREQ do código.

Próximos passos

  • Controle o LED com um botão das Spare Parts em vez de um atraso fixo, e explore outras peças — displays, teclado matricial e sensores — nos tutoriais em inglês do site.
  • Pisque o LED a partir de uma interrupção do Timer0, em vez de um laço de atraso.
  • Use o osciloscópio do PICSimLab para medir a forma de onda do pisca-pisca com precisão.
  • Ainda não tem o simulador? Baixe na página de download em português.

Solução de problemas

O LED nunca muda de estado. Verifique primeiro as Properties da peça: o LED precisa estar conectado ao RB0, e o pino deve ser o mesmo que o código alterna. Depois, confirme que você carregou o arquivo hex mais recente, gerado após a última compilação.

O pisca-pisca está muito mais rápido ou mais lento que 500 ms. O seu _XTAL_FREQ não corresponde ao clock configurado para a placa. Ajuste o define para o clock da placa, recompile e recarregue o hex.

English version

Sobre este site (divulgação)

O PICSimLab Hub (picsimlab.com) é um site de recursos da comunidade, operado de forma independente pelo seu proprietário (contato: [email protected]). Ele não tem afiliação, endosso ou patrocínio de Luis Claudio Gamboa Lopes, do projeto PICSimLab, da Microchip, da Arduino, da Espressif ou da STMicroelectronics. Os downloads oficiais do PICSimLab são distribuídos apenas pelo GitHub e pelo SourceForge (projeto ‘picsim’).