Microchip: MPLAB X e MPLAB XC – parte 2

Neste artigo é apresentado como criar um projeto desde o inicio utilizando a IDE MPLAB X juntamente com o compilador MPLAB XC8.
mplab
Este post faz parte da série Microchip - Microcontroladores PIC de 8 bits. Leia também os outros posts da série:

No artigo anterior apresentamos as ferramentas da Microchip para o desenvolvimento de projetos com sua linha de microcontroladores de 8 bits, a qual apresentamos no primeiro artigo dessa série.

Neste artigo vamos apresentar como criar um projeto desde o inicio utilizando a IDE MPLAB X juntamente com o compilador MPLAB XC8.

Explicaremos passo a passo como configurar o ambiente e, no final, apresentaremos um exemplo em linguagem C para piscar um LED utilizando o PIC12F675, assim como utilizar o simulador para debug do código desenvolvido.

Iniciando um novo projeto no MPLAB X

Para iniciar um novo projeto deve-se escolher a opção: File->New Project onde será aberta uma janela para escolha do tipo de projeto, conforme exibido na figura 1:

MPLAB-New-Project
Figura 1 – Escolha do tipo de projeto

Selecione as opções Microchip Embedded -> Standalone Project e clique no botão Next.

O próximo passo será a escolha do microcontrolador alvo do seu projeto. No nosso caso vamos escolher o PIC12F675 para o nosso primeiro exemplo. Esse é um microcontrolador da família Mid-Range, fácil de achar no mercado, com poucos periféricos e recursos e bem interessante para entender a estrutura dos microcontroladores PIC. A figura 2 abaixo exibe a seleção do mesmo. Após a escolha clique no botão Next novamente.

MPLAB-New-Project
Figura 2 – Escolha do Microcontrolador

A próxima janela será a escolha do debug header, como apresentado na figura 3. Em nosso caso não utilizaremos este recurso e deixaremos a opção None selecionada. Pressione o botão Next nessa janela.

MPLAB-Escolha do Debug Header
Figura 3 – Escolha do Debug Header

Agora vamos escolher a ferramenta de DEBUG. Como este será apenas um exemplo para simulação, escolheremos a opção Simulator, conforme exibido na figura 4 a seguir:

MPALAB -Escolha de ferramenta de Programação/Debug
Figura 4 – Escolha de ferramenta de Programação/Debug

Nesta janela é feita a seleção do compilador que será utilizado no projeto. Escolheremos a opção XC8, conforme figura 5 a seguir:

MPLAB- Escolha do compilador
Figura 5 – Escolha do compilador

Por último, vamos dar um nome ao projeto e selecionar a pasta onde o mesmo será salvo. Dê um nome apropriado ao projeto e escolha um diretório para o mesmo, conforme figura 6 abaixo. Para finalizar clique no botão Finish:

MPLAB-Nomeando o projeto
Figura 6 – Nomeando o projeto

Pronto! O nosso projeto foi criado e deverá exibir uma tela inicial conforme a figura 7 a seguir:

MPLAB - Tela inicial do projeto
Figura 7 – Tela inicial do projeto

Criando o código fonte

Com a estrutura do projeto criada, é necessário criar o código fonte para o mesmo. Existem várias formas para criar o código fonte, porém vamos apresentar a forma mais fácil de fazer isso: utilizando a IDE MPLAB X. Para criar o código fonte em linguagem C, basta clicar com o botão direito do mouse no nome do projeto, e escolher a opção New -> C Source File, conforme exibido na figura 8 a seguir:

MPLAB-add-c
Figura 8 – Criando um arquivo .c

Será exibida uma janela para criar o novo código fonte em C, conforme figura 9. Vamos dar o nome de “main” para este arquivo e depois clicar em Finish:

MPLAB-main
Figura 9 – Nomeando o arquivo .c

Será aberto um arquivo em branco no editor de código fonte conforme Figura 10. Para iniciar a programação, vamos inserir as seguintes linhas de código:

MPLAB-edit-main
Figura 10 – Editando o código fonte

A estrutura de código apresentada é o mínimo necessário para poder compilar o programa. A diretiva #include<xc.h> é necessária em todos os projetos com o compilador XC independente do microcontrolador utilizado no projeto. Nesse arquivo header, o compilador terá acesso às características do microcontrolador, como nome de registradores e demais estruturas. A função main() é a função principal do nosso código fonte.

Para que o microcontrolador PIC funcione corretamente, além da lógica do programa, é necessário também fazer a correta configuração dos Configurations bits, também conhecidos como Fuse bits. No MPLAB X existe uma interface gráfica que auxilia nessa tarefa. O acesso a esse recurso é feito em: Window -> PIC Memory Views -> Configurations Bits, conforme exibido na figura 11, a seguir:

Acessando os configurations bits
Figura 11 – Acessando os configurations bits

Será aberta uma janela para a configuração dos bits, conforme exibido na figura 12 seguir:

MPLAB-configuration-bits
Figura 12 – Configurations bits

Selecione as opções de Configurations bits conforme apresentados na figura 12. Este microcontrolador apresenta poucos bits de configuração, porém é necessária a correta seleção para que tudo funcione conforme o esperado. Após a configuração, pressione o botão Generate Source Code to Output, e será gerado o código, conforme figura 13:

MPLAB-codigo-configuration-bits
Figura 13 – Código gerado para bits de configuração

O código gerado deverá ser inserido no código fonte do projeto. Para isso selecione e copie todo o código gerado e depois cole no código fonte, que deverá ficar da seguinte forma:

Para fazer a compilação do projeto existem algumas formas dentro do MPLAB X, porém há também ícones para rápido acesso a essa função. A figura 14 exibe esses ícones. Pressione o ícone Build Project.

MPLAB-BUILD-MAIN-PROJECT
Figura 14 – Ícones para compilação do projeto

Exemplo

Para teste e simulação do nosso projeto, vamos fazer um exemplo para piscar um LED. O esquema elétrico na figura 15 servirá como base para nossa aplicação. Note que temos um LED ligado ao pino GP5, com o devido resistor para limitação de corrente:

Esquema elétrico para simulação
Figura 15 – Esquema elétrico para simulação

O nosso exemplo ligará e desligará o LED em intervalos de 1 segundo. Para isso precisamos digitar a seguinte sequência de código em nosso projeto:

Note que o código apresentado acima está dividido em 3 partes. Na primeira parte temos a inclusão dos arquivos externos através da diretiva #include. Temos também as configurações dos bits para o correto funcionamento do microcontrolador através das diretivas #pragma. Temos ainda a definição de uma constante, _XTAL_FREQ, através da diretiva #define. Esta constante é necessária para o uso da macro de temporização __delay_ms(). O valor definido deve ser igual ao valor a frequência, em Hz, do oscilador principal do microcontrolador. A seguir é exibido o código de criação dessa macro, que encontra-se no arquivo pic.h, dentro da pasta include, no diretório de instalação do XC8:

Outra parte do código encontra-se na função main(), onde estão as configurações do registradores de funções especiais (SFR). Inicialmente foram desligados todos os pinos, através do registrador GPIO. Para que se possa utilizar o pino GP5 como saída, configurou-se o bit TRISIO5 do registrador TRISIO com o nível lógico ‘0’. A última configuração foi desligar o comparador analógico para que não interferisse no funcionamento dos pinos de I/O digitais, já que não foi utilizada a função de comparação.

A última parte é o loop principal do programa dentro do laço while(). Note a presença de um loop infinito, pois a condição sempre será verdadeira, igual a 1. Nesse loop o estado do pino é invertido a cada segundo. Para inversão do estado utilizou-se o operador ~ (not, bit a bit) e para temporização a função __delay_ms(), que aguarda o tempo passado em milissegundos baseada na frequência definida em _XTAL_FREQ, que no caso foi 4MHz.

Após a compilação deverá ser exibida a mensagem da figura 16, a seguir:

Mensagem após compilação bem sucedida
Figura 16 – Mensagem após compilação bem sucedida

Simulação

Para Debugar/Simular nosso projeto, deve-se clicar no ícone Debug main Project, veja o ícone na figura 17:

Botão para debug
Figura 17 – Botão para debug

Após alguns segundos será iniciada a simulação com a parada na primeira linha da função main(), conforme exibido na figura 18:

 Inicio da simulação
Figura 18 – Inicio da simulação

Para simular passo a passo seu projeto, use os botões de Debug que são exibidos na figura 19 a seguir:

botões-debbug
Figura 19 – Botões para Debug

Outro recurso interessante da simulação é a visualização de registradores e variáveis durante cada passo, sendo possível mudar os seus valores durante a simulação. Para acessar esse recurso basta acessar: Window -> Debugging. Confira figura 20,  para ver esse caminho:

ecursos de Debug
Figura 20 – Recursos de Debug

Conclusão

O MPLAB X, juntamente com o compilador XC, são ótimas ferramentas para o desenvolvimento de projetos com os microcontroladores PIC. Conforme apresentado nesta série de artigos, essas ferramentas vieram para agilizar o processo de desenvolvimento, substituindo a antigo MPLAB IDE e apresentando um ótimo compilador C integrado. O desenvolvedor possui agora ótimos recursos com a possibilidade de trabalhar em diferentes sistemas operacionais e com facilidade de configuração dos projetos.

Aprenda mais

Configuration Bits do Microchip PIC16F877A – Francesco Sacco

Outros artigos da série

<< Microchip: MPLAB X e MPLAB XC – parte 1

Engenheiro, especialista em sistemas embarcados. Hoje é diretor de operações do portal Embarcados, onde trabalha para levar conteúdos de eletrônica, sistemas embarcados e IoT para o Brasil.

Também atua no ensino eletrônica e programação. É entusiasta do movimento maker, da cultura DIY e do compartilhamento de conhecimento, publica diversos artigos sobre eletrônica e projetos open hardware.

Com iniciativas como o projeto Franzininho e projetos na área de educação, leva a cultura maker para o Brasil capacitando e incentivando professores e alunos a usarem tecnologia em suas vidas. Participou da residência hacker 2018 no Red Bull Basement.

Notificações
Notificar
guest
13 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
MILTON SIERRA SOLANO
Milton
27/10/2019 20:57

Para aqueles pic mais antigos é possível compilar vários .c e .h num projeto?

Robert Marques
Robert Marques
18/12/2015 15:24

Olá, boa tarde.
Fiz um programinha no XC8 utilizando o PIC18f27j13. O problema é que ele funciona no debug, mas não funciona quando compilamos normal. Tem alguma instrução que habilite a compilação correta das duas formas?

Laelson Oliveira
Laelson Oliveira
10/12/2015 07:34

Olá, bom dia.

Cara como eu vou saber as diretivas certas pra usar? tipo, quando eu quiser usar um bloco em asm, como chama-lo? ou melhor setar um bit de tal variável ?

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Laelson Oliveira
10/12/2015 09:46
Laelson Oliveira
Laelson Oliveira
Reply to  Fabio_Souza_Embarcados
11/12/2015 07:24

Fabio muito obrigado, este material será de grande valia. Ontem já iniciei o projeto com xc8, anteriormente eu utilizava o MikroCforPic e por causa de problemas do compilador tive que mudar para o xc8, e estou começando a me acostumar com essa nova estrutura. Só não consegui um maneira versátil de criar um #define para um bit de uma variável ou algo similar que me ajude a não ter que ficar decorando bit a bit de cada variável já que isso se torna cansativo. Exemplo, no MikroC : unsigned char flag_menu; #define menu_ok flag_menu.f0 // isso define que o bit… Leia mais »

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Laelson Oliveira
11/12/2015 22:25

Olá Laelson,

pelo que entendi você quer criar variáveis tipo bit. Você pode criar bit fields para isso: http://www.tutorialspoint.com/cprogramming/c_bit_fields.htm

No manual tem uma seção explicando sobre isso também.

Você também pode fazer operações de bits, para acessar bits específicos em uma variável: http://embarcados.com.br/bits-em-linguagem-c/

veja se consegue usar, e me da um retorno.

Abraços

Samuel Garcia
Samuel Garcia
02/10/2015 10:15

Parabéns pelo artigo! O que você pode me dizer sobre a Calibração do PI12F675 (OSCCAL), já que está usando o oscilador interno? Tenho a necessidade em um projeto da calibração, pois necessito dos exatos 4 MHz+/- 1%.
Obrigado.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Samuel Garcia
13/11/2015 22:20

Olá Samuel, eu sinceramente nunca precisei ajustar o oscilador interno. Só em alguns casos onde durante a programação foi sobrescrito o valor de calibração de fabrica. Para calibração você pode gerar um sinal e ir ajustando até chegar no valor desejado.

Porém com a variação pode variar mesmo calibrado.

Abraços

Vagner Rodrigues
Vagner Rodrigues
09/11/2014 16:20

Muito bom mesmo, Fabio.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Vagner Rodrigues
09/11/2014 18:32

Muito Obrigado Vagner!

Rafael Dias
Rafael Dias
03/11/2014 08:04

muito bom o artigo.
É o tipo de referência que não se encontra muito na internet. Está de parabéns!

Um aspecto que eu ainda não vi como funciona direito é a operação do MPLABX com o SDCC + gputils.

Fabio_Souza_Embarcados
Fabio_Souza_Embarcados
Reply to  Rafael Dias
09/11/2014 18:34

Obrigado Rafael.

Veja esse artigo do Rodrigo Almeida sobre SDCC:
https://sites.google.com/site/rmaalmeida/mplabx-sdcc-toolchain

Grande abraço

Philipe Lima
Philipe Lima
13/06/2017 21:03

Olá Fábio Souza, você chegou a testar a opção de avaliar os 60 dias de XC8 PRO, porque eu fiz todo o processo e rodei o arquivo que gera a licença, mas continua compilando normal, só aparasse para compara a build com a PRO…

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H