Ferramentas open-source para pic

Em 17/06/2010, em Ferramentas, por Sergio Prado

Minha paixão pela comu­nidade open-source é recente. Foi de alguns anos para cá que come­cei a entrar e enten­der este uni­verso, cheio de gente com­pe­tente, cria­tiva e dis­posta a con­tribuir. Estas pes­soas não bus­cam rec­om­pen­sas finan­ceiras, mas sim con­hec­i­mento e troca de exper­iên­cias. É muito mais fácil con­struir um castelo quando cada um esta dis­posto a aju­dar com um tijolo. E esta é a filosofia que sigo quando penso em con­tribuir com meu pequeno tijolo aqui no blog.

E se você pensa em entrar para a área de sis­temas embar­ca­dos, ou se apro­fun­dar nela, não pre­cisa gas­tar 1 cen­tavo. A comu­nidade open-source está aí para te aju­dar. Você quer apren­der ou se apro­fun­dar em micro­con­tro­ladores PIC? Basta um PC, e você terá com­pi­ladores e ambi­entes de desen­volvi­mento com­ple­tos, debug­gers e sim­u­ladores, todos open-source. De des­culpa pra apren­der aqui, só sobra a preguiça. 

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

Vamos ver então algu­mas fer­ra­men­tas open-source para desen­volvi­mento de sofware em C para micro­con­tro­ladores PIC. Vou ape­nas apre­sen­tar as fer­ra­men­tas, o processo de insta­lação e con­fig­u­ração vocês podem ver­i­ficar dire­ta­mente no link da página da fer­ra­menta.

Com­pi­lador C

Para o com­pi­lador C, usare­mos o SDCC. O SDCC é um com­pi­lador ANSI-C otimizado para micro­con­tro­ladores de pequeno porte, como 8051, Z80 e 68HC08. Segundo a página do pro­jeto, o suporte a PIC está em anda­mento (“Work in progress”), mas todas as vezes que usei fun­cio­nou per­feita­mente. Ele está disponivel sob a licensa GPL para Win­dows, Linux e Mac.

Ele é ape­nas um com­pi­lador C, e vai ape­nas trans­for­mar seus arquivos “.c” em arquivos “.asm”. Então ele pre­cisa do assem­bler e do linker para gerar o binário da sua apli­cação.

Assem­bler e Linker

Para o assem­bler e o linker usare­mos a fer­ra­menta GPUTILS. Esta fer­ra­menta é voltada exclu­si­va­mente para micro­con­tro­ladores PIC, e além do assem­bler (gpasm) e do linker (gplink), tam­bém fornece uma fer­ra­menta para criar bib­liote­cas (gplib).

Esta fer­ra­menta tam­bém está disponivel através da licensa GPL para Linux, Win­dows e Mac.

IDE — Ambi­ente de Desen­volvi­mento

Para alguns, escol­her um ambi­ente inte­grado de desen­volvi­mento (IDE) é quase a mesma coisa que escol­her uma religião, e o defen­dem como tal. Para mim, é ape­nas uma forma de ser mais pro­du­tivo no seu ambi­ente de tra­balho. Por­tanto, escolha uma fer­ra­menta que se adapte mel­hor à você. Exis­tem muitas fer­ra­men­tas disponíveis, alguma especí­fi­cas para PIC, den­tre elas:

  • PiKdev, com­pa­tivel com assem­bly para todos os PICs e lin­guagem C ape­nas para a série PIC18.
  • Pik­lab, é mais com­pleto, bem pare­cido com o MPLAB, e total­mente inte­grado com SDCC e GPUTILS.
  • Eclipse, ambi­ente mais genérico, mas pode ser exten­dido através de plu­g­ins. Par­tic­u­lar­mente acho ainda um pouco lento e com­plexo para con­fig­u­rar e tra­bal­har com pro­je­tos. Mas uma vez con­fig­u­rado pode se tornar um ambi­ente de desen­volvi­mento alta­mente produtivo.
  • Kde­velop, ambi­ente com visual bem limpo e fácil de usar. É mais gener­ico, mas para desen­volver em C está ótimo. É o que estou usando atual­mente.

Gravadores

Se você tem um gravador PIC, exis­tem algu­mas fer­ra­men­tas open-source como o PICProg, com­pa­tivel com os micro­con­tro­ladores da série PIC12/16/18.

Sim­u­ladores

Um ótimo sim­u­lador open-source para PIC é o GPSIM. Tam­bém disponi­bi­lizado sob a licensa GPL, pos­sui tudo o que um decente sim­u­lador pre­cisa ter (break­points, exe­cução passo-a-passo, dis­as­sem­bler, etc; e suporta até in-circuit emu­la­tor). Tem ver­sões para Win­dows e Linux.

Inte­grando tudo

Vamos desen­volver aqui um pro­jeto bem sim­ples para exem­pli­ficar o uso de todas estas fer­ra­men­tas.

Primeiro, nosso codigo-fonte em C, cujo único obje­tivo é acen­der um led lig­ado 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 pre­cisar de um arquivo Make­file para com­pi­lar, inte­grando o uso das fer­ra­men­tas 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 Make­file que usamos a fer­ra­menta “sdcc” para com­pi­lar o “.c” e gerar o “.asm”, depois usamos o “gpasm” para con­verter 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 sim­u­lar sua apli­cação, com o comando abaixo:

gpsim –pp18f452 –L. teste.hex

Exem­plo de uma tela do GPSIM:

gpsim Ferramentas open source para pic


Muito bem, agora é com você! Aprenda, troque exper­iên­cias e aproveite o que a comu­nidade open-source têm para lhe ofer­e­cer. E depois, a mel­hor forma de agrade­cer é deixar tam­bém sua con­tribuição para a comu­nidade!

Um abraço,

Ser­gio Prado

VN:F [1.9.13_1145]
Rat­ing: 10.0/10 (1 vote cast)
Fer­ra­men­tas open-source para pic, 10.0 out of 10 based on 1 rating

Sem posts relacionados.

Tags:  
  • Marcelo

      Olá Sér­gio, blz?
      Seguinte… dig­amos que vc tenha o ICD2 ou qquer outra fer­ra­menta da microchip pra pro­gra­mar e debugar… sabe se é pos­sível  debugar passo a passo? Aliás, isso é algo que eu sem­pre tive dúvi­das no open source, pois só usei sdk pro­pri­etários e aí vc com­pila, grava em modo debug e sai exe­cu­tando.
      Como fun­ciona isso no open source?

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Marcelo, tudo bem?

      É pos­sível debugar passo-a-passo com o MPLAB ICD2 sem prob­le­mas. Com relação à soft­ware open-source, o ambi­ente de desen­volvi­mento Pik­lab (http://piklab.sourceforge.net/), que citei neste artigo, suporta inclu­sive gravação e debug­ging via ICD2. Se você tiver a opor­tu­nidade de tes­tar, deixe suas exper­iên­cias por aqui.

      Um abraço!

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • Tiago

    Olá Sér­gio
    Sug­estão: O MPLAB já traz um com­pi­lador Assem­bly e um Linker tam­bém e ambos são gra­tu­itos.
    Por­tanto é mais uma alternativa

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • http://www.sergioprado.org ser­gio­prado

    Olá Tiago,

    É ver­dade. Nunca testei a inte­gração destes caras com o SDCC, mas acred­ito que deva fun­cionar sem problemas.

    Um abraço!

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • Arlei de Almeida

    Sér­gio, bom dia. Primeiro gostaria de lhe dar os parabéns, não só por esta matéria, mas por todas as out­ras que venho lendo no seu blog com certa fre­quên­cia. Gostaria de saber se exis­tem fer­ra­men­tas gra­tu­itas como estas para o desen­volvi­mento em código C de micro­con­tro­ladores 8051. Outra coisa que me deixa pensativo…como gravo infor­mações numa memória E2PROM?? Ou seja, quais os coman­dos em C para os micro­con­tro­ladores 8051, para esta tarefa? Des­culpe se as per­gun­tas são bási­cas, mas come­cei estas pesquisas, menos de uma sem­ana. Grande abraço e con­tinue este exce­lente tra­balho. Arlei

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Arlei,

      O SDCC que apre­sen­tei neste post é um ótimo com­pi­lador 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 hard­ware. Se a inter­face for ser­ial, você pode pre­cisar de um bar­ra­mento SPI ou I2C, e imple­men­tar um dri­ver para inter­facear seu dis­pos­i­tivo. Se a caso con­trário, você pode até pre­cisar de um hard­ware a parte para pro­gra­mar sua E2PROM.

      Um abraço!

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • Pingback: Tweets that mention Ferramentas open-source para pic -- Topsy.com

  • Léo…

    boa ser­jão!!!
    ja colo­quei seu blog nos favoritos! pre­cisamos de bas­tante apoio nessa área qnd se trata de open source!

    []‘s
    Léo…

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • Valdemiro

    Como eu con­fig­uro “cre­ate Make target”?

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Valdemiro,

      À qual IDE você se refere?

      Um abraço!

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • Valdemiro

    Eu estou usando o eclipse

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • chico

    favoritei sua página tem­po­rari­a­mente. mas pode ser eterno, depen­dendo da resposta pois vou me envolver no mundo open source tbém
    tam­bém quero saber como con­figura o eclipse. vou insta­lar ainda.
    grato

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • chico

    grato colega! agora posso tirar seu blog dos meus favoritos. rs tô brin­cando. vou ten­tar insta­lar e se con­seguir, caso queiramos/possamos (eu e você), uso seu espaço para pub­licar o cam­inho das pedras (no win­dows, sorry)
    abç

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • http://www.sergioprado.org ser­gio­prado

    Olá Chico,

    Ótima idéia! Me avise se você desco­brir o cam­inho das pedras.

    Abraços!

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • chico

    venho através desta infor­mar que desisti (tem­po­rari­a­mente) de usar o eclipse. ao invés dele, preferi, após algu­mas pesquisas, usar o mplab mesmo o qual já uso há alguns anos. veja um tuto­r­ial em:
    https://sites.google.com/site/rmaalmeida/extra/usandoocompiladorsdccnomplab
    caso alguém tente usar e não con­siga, tem alguns detal­hes não descritos que estou a dis­posição para infor­mar. descobri-os com alguma exper­iên­cia pois não os encon­trei na net (ainda). Caso alguem con­siga usar como está descrito, gen­tileza me avisar através desta via pra que cor­rija min­has 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. Gen­tileza me cor­ri­gir mostrando algum (não achado ainda) exem­plo de pro­jeto com­pleto sdcc/mplab

    Mudando de assunto mas man­tendo no assunto, gostaria tam­bém de reg­is­trar minha sat­is­fação com as fer­ra­men­tas free avrstu­dio e winavr pois com elas um código de pro­grama (fun­cional) ficou menor (pasme!) do que seu “con­cor­rente” IAR que custa uma mini for­tuna. Foi um pro­grama para um ATTINY26.
    Sem mais para o momento, devo man­ter seu blog nos meus favoritos e even­tual­mente visitá-lo para troca de infor­mações e claro parabenizá-lo pelo blog/trabalho. Ah, o email não existe, mas se insi­s­tir, posto um de ver­dade.
    abç

     

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Chico,

      Com­bi­nado. Colo­quei na minha lista de próx­i­mos posts um estudo sobre a dupla Eclipse + PIC.

      Um abraço!

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • Felipe Adri­ano

    Parabéns Ser­gio, seus arti­gos sobre soft­ware e Had­ware embar­cado con­tribuiram sig­ni­fica­ti­va­mente para decisão de qual car­reira seguir na Uni­ver­si­dade. Eles real­mente são de qual­i­dade.
    A pouco tempo me envolvi nesta área de sis­temas embar­ca­dos. Come­cei pro­gra­mando PIC com o com­pi­lador CCS que por sinal anda dando muita dor de cabeça. Por isso decidi migrar pra outro com­pi­lador. Pro­gramei no MikroC mas estou afim de migrar para o SDCC entre­tando não con­segui usá-lo no win­dows e sequer con­segui insta­lar o PIKLAB. Min­has humildes per­gun­tas são:
     É pos­sível usar o PIK­lab no Win­dows? Como eu faço?
    Obrigado!

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Felipe, como vai?

      O Pik­lab foi desen­volvido exata­mente para suprir uma neces­si­dade que exis­tia em ambi­entes Linux: uma inter­face IDE para PIC. Os com­po­nentes que ele usa o torna muito depen­dente do sis­tema opera­cional, e acred­ito que será bem com­pli­cado rodá-lo em Win­dows. Em uma busca ráp­ida que fiz, não encon­trei nen­hum tuto­r­ial sobre isso.

      Talvez você tenha que bus­car out­ras alter­na­tiva: ir para Linux ou usar algum com­pi­lador C com­er­cial como MPLAB ou IAR.

      Abraços,

      Ser­gio Prado.

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • tri­ton

    Olá Ser­gio como vai, amigo gostaria que vc podesse me ori­en­tar de como pro­ceder 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 microba­sic, em C, pas­cal, ou mplab, pois tenho uma per­sonal pic , um pik kit3, e uma easypic 6 da mikroelek­tron­ica fico grato por sua atenção.

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org ser­gio­prado

      Olá Tri­ton,

      Não entendi dire­ito suas neces­si­dades. Qual o prob­lema que você quer resolver?

      Abraços!

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • tri­ton

    eu já tenho var­ios exem­p­los, só que não con­sigo junta eles em um só, uma vez con­segui ele com­pi­lou não deu erro más quando gravei no pic só um funcionou.

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
  • Cás­sio

    Olá Sér­gio,
    Estou tra­bal­hando numa espé­cie de boot­loader para pics com a final­i­dade de gravar meu firmware remo­ta­mente. Então, pre­ciso entrar em modo de pro­gra­mação e enviar o .hex remo­ta­mente. Para isso pre­ciso enten­der como fun­ciona a escrita dessas instruções na memória de pro­grama. É pos­sível ter acesso aos códi­gos dessas fer­ra­men­tas de gravação ?
     
    Obrigado

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    • http://www.sergioprado.org Ser­gio Prado

      Olá Cás­sio,

      Tenho certeza que exis­tem boot­load­ers de código aberto para PIC. Dá uma olhada nesta página por exemplo:

      http://www.etc.ugal.ro/cchiculita/software/picbootloader.htm

      Um abraço.

      VA:F [1.9.13_1145]
      Rating: 0.0/5 (0 votes cast)
  • Cas­sio

    Olá Sér­gio,
    Obri­gado pela indi­cação, vou estu­dar. Abraço!

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)