Ferramentas open-source para pic

- por Sergio Prado

Categorias: Hardware, Linux Tags: , , , , , , , , , ,

Minha paixão pela comunidade open-source é recente. Foi de alguns anos para cá que comecei a entrar e entender este universo, cheio de gente competente, criativa e disposta a contribuir. Estas pessoas não buscam recompensas financeiras, mas sim conhecimento e troca de experiências. É muito mais fácil construir um castelo quando cada um esta disposto a ajudar com um tijolo. E esta é a filosofia que sigo quando penso em contribuir com meu pequeno tijolo aqui no blog.

E se você pensa em entrar para a área de sistemas embarcados, ou se aprofundar nela, não precisa gastar 1 centavo. A comunidade open-source está aí para te ajudar. Você quer aprender ou se aprofundar em microcontroladores PIC? Basta um PC, e você terá compiladores e ambientes de desenvolvimento completos, debuggers e simuladores, todos open-source. De desculpa pra aprender aqui, só sobra a preguiça. 

Quem quiser conhecer mais sobre a filosofia open-source pode começar lendo o artigo da Wikipedia aqui.

Vamos ver então algumas ferramentas open-source para desenvolvimento de sofware em C para microcontroladores PIC. Vou apenas apresentar as ferramentas, o processo de instalação e configuração vocês podem verificar diretamente no link da página da ferramenta.

Compilador C

Para o compilador C, usaremos o SDCC. O SDCC é um compilador ANSI-C otimizado para microcontroladores de pequeno porte, como 8051, Z80 e 68HC08. Segundo a página do projeto, o suporte a PIC está em andamento ("Work in progress"), mas todas as vezes que usei funcionou perfeitamente. Ele está disponivel sob a licensa GPL para Windows, Linux e Mac.

Ele é apenas um compilador C, e vai apenas transformar seus arquivos ".c" em arquivos ".asm". Então ele precisa do assembler e do linker para gerar o binário da sua aplicação.

Assembler e Linker

Para o assembler e o linker usaremos a ferramenta GPUTILS. Esta ferramenta é voltada exclusivamente para microcontroladores PIC, e além do assembler (gpasm) e do linker (gplink), também fornece uma ferramenta para criar bibliotecas (gplib).

Esta ferramenta também está disponivel através da licensa GPL para Linux, Windows e Mac.

IDE – Ambiente de Desenvolvimento

Para alguns, escolher um ambiente integrado de desenvolvimento (IDE) é quase a mesma coisa que escolher uma religião, e o defendem como tal. Para mim, é apenas uma forma de ser mais produtivo no seu ambiente de trabalho. Portanto, escolha uma ferramenta que se adapte melhor à você. Existem muitas ferramentas disponíveis, alguma específicas para PIC, dentre elas:

  • PiKdev, compativel com assembly para todos os PICs e linguagem C apenas para a série PIC18.
  • Piklab, é mais completo, bem parecido com o MPLAB, e totalmente integrado com SDCC e GPUTILS.
  • Eclipse, ambiente mais genérico, mas pode ser extendido através de plugins. Particularmente acho ainda um pouco lento e complexo para configurar e trabalhar com projetos. Mas uma vez configurado pode se tornar um ambiente de desenvolvimento altamente produtivo.
  • Kdevelop, ambiente com visual bem limpo e fácil de usar. É mais generico, mas para desenvolver em C está ótimo. É o que estou usando atualmente.

Gravadores

Se você tem um gravador PIC, existem algumas ferramentas open-source como o PICProg, compativel com os microcontroladores da série PIC12/16/18.

Simuladores

Um ótimo simulador open-source para PIC é o GPSIM. Também disponibilizado sob a licensa GPL, possui tudo o que um decente simulador precisa ter (breakpoints, execução passo-a-passo, disassembler, etc; e suporta até in-circuit emulator). Tem versões para Windows e Linux.

Integrando tudo

Vamos desenvolver aqui um projeto bem simples para exemplificar o uso de todas estas ferramentas.

Primeiro, nosso codigo-fonte em C, cujo único objetivo é acender um led ligado ao port B do PIC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "pic16/pic18f452.h"
 
/* configuration bits */
code char at __CONFIG1H _conf0 = _OSC_HS_1H;
code char at __CONFIG2L _conf1 = _PUT_OFF_2L & _BODEN_OFF_2L;
code char at __CONFIG2H _conf2 = _WDT_OFF_2H;
code char at __CONFIG3H _conf3 = _CCP2MUX_RC1_3H;
code char at __CONFIG4L _conf4 = _LVP_OFF_4L & _STVR_OFF_4L;
code char at __CONFIG5L _conf5 = _CP_0_OFF_5L & _CP_1_OFF_5L & _CP_2_OFF_5L & _CP_3_OFF_5L;
code char at __CONFIG5H _conf6 = _CPD_OFF_5H & _CPB_OFF_5H;
code char at __CONFIG6L _conf7 = _WRT_0_OFF_6L & _WRT_1_OFF_6L & _WRT_2_OFF_6L & _WRT_3_OFF_6L;
code char at __CONFIG6H _conf8 = _WRTD_OFF_6H & _WRTB_OFF_6H & _WRTC_OFF_6H;
code char at __CONFIG7L _conf9 = _EBTR_0_OFF_7L & _EBTR_1_OFF_7L & _EBTR_2_OFF_7L & _EBTR_3_OFF_7L;
code char at __CONFIG7H _conf10 = _EBTRB_OFF_7H;
 
void main( )
{
    TRISB = 0;
    PORTB = 0x01;
 
    while(1);
}

Vamos precisar de um arquivo Makefile para compilar, integrando o uso das ferramentas SDCC e GPUTILS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
teste.hex: teste.o
	gplink \
        -c \
        -s /usr/share/gputils/lkr/18f452.lkr \
        -o $@ \
        -m \
        $^ \
        -I /usr/share/sdcc/lib/pic16 \
        libdev18f452.lib
 
teste.o: teste.asm
	gpasm -c $<
 
crt018.o: crt018.asm
	gpasm -c $<
 
teste.asm: teste.c
	sdcc -S -mpic16 -p18f452 $<

Veja no Makefile que usamos a ferramenta "sdcc" para compilar o ".c" e gerar o ".asm", depois usamos o "gpasm" para converter o ".asm" em ".o", para então linkar usando o "gplink" e criar o arquivo binário ".hex".

Agora, se você tiver um gravador pode gravar usando o PICProg com o comando abaixo:

picprog –erase –burn –input teste.hex –pic /dev/ttyS0

Ou então você pode usar o GPSIM para simular sua aplicação, com o comando abaixo:

gpsim -pp18f452 -L. teste.hex

Exemplo de uma tela do GPSIM:

Muito bem, agora é com você! Aprenda, troque experiências e aproveite o que a comunidade open-source têm para lhe oferecer. E depois, a melhor forma de agradecer é deixar também sua contribuição para a comunidade!

Um abraço,

Sergio Prado

  • Marcelo

      Olá Sérgio, blz?
      Seguinte… digamos que vc tenha o ICD2 ou qquer outra ferramenta da microchip pra programar e debugar… sabe se é possível  debugar passo a passo? Aliás, isso é algo que eu sempre tive dúvidas no open source, pois só usei sdk proprietários e aí vc compila, grava em modo debug e sai executando.
      Como funciona isso no open source?

    • Olá Marcelo, tudo bem?

      É possível debugar passo-a-passo com o MPLAB ICD2 sem problemas. Com relação à software open-source, o ambiente de desenvolvimento Piklab (http://piklab.sourceforge.net/), que citei neste artigo, suporta inclusive gravação e debugging via ICD2. Se você tiver a oportunidade de testar, deixe suas experiências por aqui.

      Um abraço!

  • Tiago

    Olá Sérgio
    Sugestão: O MPLAB já traz um compilador Assembly e um Linker também e ambos são gratuitos.
    Portanto é mais uma alternativa

  • Olá Tiago,

    É verdade. Nunca testei a integração destes caras com o SDCC, mas acredito que deva funcionar sem problemas.

    Um abraço!

  • Arlei de Almeida

    Sérgio, bom dia. Primeiro gostaria de lhe dar os parabéns, não só por esta matéria, mas por todas as outras que venho lendo no seu blog com certa frequência. Gostaria de saber se existem ferramentas gratuitas como estas para o desenvolvimento em código C de microcontroladores 8051. Outra coisa que me deixa pensativo…como gravo informações numa memória E2PROM?? Ou seja, quais os comandos em C para os microcontroladores 8051, para esta tarefa? Desculpe se as perguntas são básicas, mas comecei estas pesquisas, menos de uma semana. Grande abraço e continue este excelente trabalho. Arlei

    • Olá Arlei,

      O SDCC que apresentei neste post é um ótimo compilador open-source para 8051. Um bom artigo sobre como usá-lo: http://embeddedtutorial.com/2009/12/using-sdcc-open-source-compilerfor-8051-development/.

      Já com relação à gravação da E2PROM, depende muito do seu hardware. Se a interface for serial, você pode precisar de um barramento SPI ou I2C, e implementar um driver para interfacear seu dispositivo. Se a caso contrário, você pode até precisar de um hardware a parte para programar sua E2PROM.

      Um abraço!

  • Léo…

    boa serjão!!!
    ja coloquei seu blog nos favoritos! precisamos de bastante apoio nessa área qnd se trata de open source!

    []'s
    Léo…

  • Valdemiro

    Como eu configuro "create Make target"?

    • Olá Valdemiro,

      À qual IDE você se refere?

      Um abraço!

  • Valdemiro

    Eu estou usando o eclipse

  • chico

    favoritei sua página temporariamente. mas pode ser eterno, dependendo da resposta pois vou me envolver no mundo open source tbém
    também quero saber como configura o eclipse. vou instalar ainda.
    grato

  • chico

    grato colega! agora posso tirar seu blog dos meus favoritos. rs tô brincando. vou tentar instalar e se conseguir, caso queiramos/possamos (eu e você), uso seu espaço para publicar o caminho das pedras (no windows, sorry)
    abç

  • Olá Chico,

    Ótima idéia! Me avise se você descobrir o caminho das pedras.

    Abraços!

  • chico

    venho através desta informar que desisti (temporariamente) de usar o eclipse. ao invés dele, preferi, após algumas pesquisas, usar o mplab mesmo o qual já uso há alguns anos. veja um tutorial em:
    https://sites.google.com/site/rmaalmeida/extra/usandoocompiladorsdccnomplab
    caso alguém tente usar e não consiga, tem alguns detalhes não descritos que estou a disposição para informar. descobri-os com alguma experiência pois não os encontrei na net (ainda). Caso alguem consiga usar como está descrito, gentileza me avisar através desta via pra que corrija minhas opções. Uma delas: tive que tirar a palavra "extern" do arquivo de #include pois o linker não estava achando as definiçoes de PORT´s. Gentileza me corrigir mostrando algum (não achado ainda) exemplo de projeto completo sdcc/mplab

    Mudando de assunto mas mantendo no assunto, gostaria também de registrar minha satisfação com as ferramentas free avrstudio e winavr pois com elas um código de programa (funcional) ficou menor (pasme!) do que seu "concorrente" IAR que custa uma mini fortuna. Foi um programa para um ATTINY26.
    Sem mais para o momento, devo manter seu blog nos meus favoritos e eventualmente visitá-lo para troca de informações e claro parabenizá-lo pelo blog/trabalho. Ah, o email não existe, mas se insistir, posto um de verdade.
    abç

     

    • Olá Chico,

      Combinado. Coloquei na minha lista de próximos posts um estudo sobre a dupla Eclipse + PIC.

      Um abraço!

    •  Isso está muito antigo, mas vale um comentário, pelo (pouco) que vi sobre o avrstudio ele ele “free” no sentido de *grátis* não de *livre*, procede?

      • É issoaí Johnny. O AVRStudio é gratuito, mas não é livre/aberto. 

  • Felipe Adriano

    Parabéns Sergio, seus artigos sobre software e Hadware embarcado contribuiram significativamente para decisão de qual carreira seguir na Universidade. Eles realmente são de qualidade.
    A pouco tempo me envolvi nesta área de sistemas embarcados. Comecei programando PIC com o compilador CCS que por sinal anda dando muita dor de cabeça. Por isso decidi migrar pra outro compilador. Programei no MikroC mas estou afim de migrar para o SDCC entretando não consegui usá-lo no windows e sequer consegui instalar o PIKLAB. Minhas humildes perguntas são:
     É possível usar o PIKlab no Windows? Como eu faço?
    Obrigado!

    • Olá Felipe, como vai?

      O Piklab foi desenvolvido exatamente para suprir uma necessidade que existia em ambientes Linux: uma interface IDE para PIC. Os componentes que ele usa o torna muito dependente do sistema operacional, e acredito que será bem complicado rodá-lo em Windows. Em uma busca rápida que fiz, não encontrei nenhum tutorial sobre isso.

      Talvez você tenha que buscar outras alternativa: ir para Linux ou usar algum compilador C comercial como MPLAB ou IAR.

      Abraços,

      Sergio Prado.

  • triton

    Olá Sergio como vai, amigo gostaria que vc podesse me orientar de como proceder para que eu junte em um só código as funções de lcd, uart , e led, fico grato se vc poder me indicar de como fazer, pode ser em microbasic, em C, pascal, ou mplab, pois tenho uma personal pic , um pik kit3, e uma easypic 6 da mikroelektronica fico grato por sua atenção.

    • Olá Triton,

      Não entendi direito suas necessidades. Qual o problema que você quer resolver?

      Abraços!

  • triton

    eu já tenho varios exemplos, só que não consigo junta eles em um só, uma vez consegui ele compilou não deu erro más quando gravei no pic só um funcionou.

  • Cássio

    Olá Sérgio,
    Estou trabalhando numa espécie de bootloader para pics com a finalidade de gravar meu firmware remotamente. Então, preciso entrar em modo de programação e enviar o .hex remotamente. Para isso preciso entender como funciona a escrita dessas instruções na memória de programa. É possível ter acesso aos códigos dessas ferramentas de gravação ?
     
    Obrigado

  • Cassio

    Olá Sérgio,
    Obrigado pela indicação, vou estudar. Abraço!

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.