Post de minha autoria, originalmente publicado no Embarcados.

No Brasil uma das linhas de microcontroladores mais utilizada é a PIC, da Microchip, ensinada em cursos técnicos, profissionalizantes e de graduação nas áreas de eletrônica e automação. Um de seus maiores representantes é o modelo PIC18F4550, caracterizado por uma arquitetura RISC de 8 bits com USB integrado, dentre muitas coisas mais.

Porém, programar código para PIC não é uma coisa das mais triviais, e algumas plataformas como MikroC tentam tornar o desenvolvimento mais fácil e intuitivo, com código mais enxuto e bibliotecas a tira gosto. Programar então usando as famosas plataformas como CCS e MPLAB, é para o espartanos de plantão.

Juntando o útil ao agradável, muitos dos entusiastas que lidam com PIC também gostam de Arduino (lá vem as pedras!!!). Então…Que tal unir as duas coisas? Não seria muito interessante e prático ter uma ferramenta que permitisse programar PIC com a mesma abordagem com que o Arduino é programado? Desta forma surgiu o Pinguino!

Pinguino

O projeto Pinguino é OpenSoftware e OpenHardware, ou seja, todo o software desenvolvido e esquemáticos de placas utilizados são disponibilizados abertamente. E para atender os objetivos de praticidade, o Pinguino faz uso de alguns modelos PIC18F e PIC32, que possuem USB integrado, de modo a permitir o desenvolvimento de código para PIC com a mesma facilidade com que a ferramenta Arduino IDE permite para seus correlatos. Ou seja, com a placa em mãos, cabo USB plugado e ferramenta aberta no computador, basta alguns cliques e o código já está carregado e em execução. Sem gravador, sem muitos fios. Rápido e prático.

Pinguino

Figura 1 – Logo do Pinguino e lema

Apenas para elucidar melhor, seguem as famílias de PIC suportadas pela ferramenta:

  • 8 bits : PIC18Fx550, PIC18Fx5K50, PIC18Fx6J50 e PIC18Fx7J53  (x: indica qualquer variante numérica);
  • 32 bits: PIC32MX.

 

Além disso, o projeto fornece esquemáticos de placa e vende também kits compatíveis.

O Pinguino é composto por uma IDE, onde estão todos os artefatos necessários ao desenvolvimento, como editor de código, comandos para compilação e gravação de código no PIC, além de depuração via USB. E para usufruir da plenitude da ferramenta, é bom que o PIC utilizado também esteja com o firmware Pinguino gravado, de modo que o programa possa ser diretamente gravado pela IDE via USB.

Gravação do Firmware Pinguino

 

Antes de começar, o primeiro passo é gravar o firmware Pinguino em um PIC compatível com a ferramenta. Para este exemplo irei utilizar o PIC18F4550, juntamente com a placa PROTO’n PIC18F4550, da SmartRadio. Eu possuo em mãos um gravador PicKit2, e fazendo as devidas conexões de pinagem, fiz a gravação do firmware Bootloader_v4.13_18f4550_X20MHz.hex, para PICs compatíveis de 8 bits.

PROTOn PIC18F4550

Figura 2 – Plata PROTO’n PIC

Em seguida, é necessário ter em mãos um gravador ICD2, PicKit2, PicKit3 ou compatíveis, de modo a gravar o bootloader no PIC.

Para quem ainda não é muito familiarizado com as ligações e procedimentos, apenas mostrarei um breve descritivo de como fazer essa parte, sem demais delongas. Na Figura 3 é mostrado o esquema de ligações do PicKit2/PicKit3 para gravação do microcontrolador PIC18F4550.

picKitPic

Figura 3 – Esquema de pinagem do PicKit2 para gravar PIC18F4550

E na Figura 4, mostro como ficaram as conexões na placa PROTO’n PIC18F4550, conforme mostrado na Figura 3. Não ficou diferente, exatamente pelo fato de que a placa PROTO’n PIC basicamente espelha os pinos laterais do PIC. O único “porém” é a necessidade de possuir fios (ou “jumpers”) com ponta fêmea, de modo a ter acesso e conexão aos terminais da placa.

Quando conectado ao PicKit2 ou PicKit3, o microcontrolador PIC é energizado pelos sinais VCC e GND do PicKit. Todavia, mantenho a placa PROTO’n PIC conectada via USB.

PROTO'n PIC - Gravacao com PicKit2

Figura 4 – PROTO’n PIC conectada para gravação com PicKit2

Com o PICKit 2 devidamente conectado ao dispositivo PIC 18F4550, e com o programa PICkit 2 aberto, selecionado o arquivo *.hex correspondente ao bootloader Pinguino, basta então proceder com a gravação do firmware no microcontrolador, clicando no botão “Write” do PICkit 2, tal como mostrado na Figura 5.

pickit2Pinguino

Figura 5 – Imagem com destaque para o PicKit2 para gravar

Pronto!

O firmware Pinguino gravado possui as seguintes características:

  • A aplicação do usuário inicia sem delay algum em Power-on Reset;
  • O bootloader só será iniciado se o botão de Reset for pressionado!
  • O modo de bootloader ficará ativo até que um programa seja carregado, sem tempo limite;
  • Um LED ficará piscando com período T=2*43ms.

 

 

Considerações iniciais

 

Após ter gravado o firmware do bootloader Pinguino no microcontrolador PIC18F4550, agora é a hora de instalar o Pinguino IDE e demais componentes correlacionados. Entretanto, o processo envolve também a instalação de drivers não assinados digitalmente, principalmente os drivers do Bootloader e de CDC do Pinguino.

De modo mais direto, veja no Escreve Assim o guia para reiniciar o Windows 8.1 desativando a assinatura de drivers. Após isso, proceda então com os tópicos adiante 🙂

 

Instalação da ferramenta

Para instalar o Pinguino IDE, basta acessar o link de download e baixar o Pinguino para o seu correspondente sistema operacional, seja Windows, Linux ou Mac. Caso escolha Windows, você será direcionado para este link de download, e como referência para o presente artigo foi utilizado o Pinguino v1.1.0-beta3 release. Um pouco mais abaixo na página está o link de download para o arquivo “pinguino-11.2015.02.02-setup.exe“. Clique nesse link para iniciar o download.

Completado o download, inicie o programa executável de instalação, e será aberta uma janela para escolha de idioma tal como mostrado na figura 6. É possível escolher o idioma Português Brasileiro na instalação.

Instalação do Pinguino - Configuração do idioma

Figura 6 – Início da instalação do Pinguino – Escolha do idioma

Depois de selecionar o idioma, o processo de instalação então segue com uma janela de boas-vindas, em português do Brasil, por exemplo, como mostrado na Figura 7. Clique em “Instalar” para continuar com o processo.

Instalação do Pinguino - Tela 1

Figura 7 – Janela do guia de instalação em português brasileiro.

Após isso, é aquele “procedimento padrão”, clique em “Instalar”, concorde com demais contratos e “próximo”, “próximo”, etc, até que o programa inicie sua instalação, propriamente. Nesta versão do Pinguino o instalador está bem versátil pelo seguinte aspecto: Ele basicamente faz o download e a instalação de todos os componentes necessários para a execução do Pinguino, tais como Python2.7, PySide, PyUSB, libusb, compilador sdcc, e demais. Esse processo pode demorar em decorrência do download dos componentes, então, paciência! Para se ter uma noção do processo, segue a janela mostrada pela Figura 8, destacando o download e instalação dos componentes.

Instalação do Pinguino - Tela 2

Figura 8 – Exemplo de andamento de instalação

Durante o processo, você também será questionado se deseja instalar os drivers para a placa do Pinguino. Clique em “Yes” (Sim), conforme mostrado na Figura 9, e prossiga com os passos mostrados, inclusive com a instalação do LibUSB Win32 (procedimento padrão, próximo, próximo, etc! 🙂

Instalação do Pinguino - Drivers

Figura 9 – Janela para instalar ou não drivers da placa Pinguino

Não sei se com vocês o processo será diferente, mas comigo não deu muito certo esta parte! Ele irá instalar os drivers, e no final será aberta uma janela para você configurar a libUSB, de modo a criar um “filtro” para o Pinguino via USB. Entretanto, ela não irá aparecer para você selecionar nesta etapa! Então é normal, não se preocupe. A finalização deste processo fica para mais adiante. Após essa última parte dos drivers, a instalação é concluída, e você poderá abrir a IDE do Pinguino, que é desenvolvida em Python.

A IDE é bem direta e objetiva, possuindo botões para criar, abrir e salvar programas, fazer setup de projeto, compilar e gravar o código na parte de cima da IDE, e de modo sobremaneira interessante, possui uma janela lateral com destaque para exemplos de código, tais como os presentes no Arduino IDE, por exemplo. Na parte de baixo da IDE está presente um console para o terminal Python. Um panorama geral da IDE é mostrado na Figura 10.

Pinguino IDE

Figura 10 – Panorama geral da IDE Pinguino

Como mencionado, faço um destaque para a presença da janela lateral de “Tools” (Ferramentas), que permite acessar exemplos de códigos, navegar por sobre a estrutura de projeto e realizar pesquisa sobre o projeto também, tal como mostrado na Figura 11.

Pinguino - Exemplos

Figura 11 – Destaque para a janela com exemplos da IDE

Outro aspecto interessante da interface da Pinguino IDE é o botão presente na parte superior direita, chamado de “Graphical Mode“, que muda a forma de programação do Pinguino IDE para diagrama de blocos, conforme mostrado na parte esquerda da janela do programa, como mostrado na Figura 12.

Pinguino - Blocks

Figura 12 – Indicativo do modo “Blocos” do Pinguino.

Bom, até aqui já fizemos a gravação do bootloader, já instalamos a Pinguino IDE. Agora… Falta mandar bala nesse bendito driver!

Um libUSB para o Pinguino!

Antes de começar, é necessário firmar uma base forte para um elemento primordial para toda a ação do Pinguino: A USB. A plataforma é baseada em Python e faz uso do PyUSB, e,  consequentemente, da biblioteca libUSB para lidar com a comunicação USB com os microcontroladores PIC suportados.

 

Infelizmente, a instalação do Pinguino não cobre 100% dos detalhes necessários para fazer a biblioteca e os drivers operarem no Windows 8.1 x64, por exemplo, que é o sistema que eu utilizo e usarei como base. Semelhantemente, acredito que as rotinas aqui também sirvam para Windows 7 x64 e o 8 x64 também.

A biblioteca libUSB é a que fará o registro do driver do bootloader Pinguino para o seu devido funcionamento em ambiente Windows. Para isso, é preciso baixar a libUSB por completo (a que vem no Pinguino parece ser mais “enxugada”…), e fazer a instalação. Lembrando que é preciso estar rodando o Windows com a assinatura de drivers desativada!!!

 

Para instalar a biblioteca libUSB nativa, é necessário fazer o download do seu instalador na página SourceForge do projeto. A biblioteca não é instalada, ela é fornecida em formato zip. Eu recomendo você descompactar o diretório libUSB dentro do diretório da Pinguino IDE, ou seja, descompacte em C:\pinguino-11\, de modo que o diretório da biblioteca baixado fique como “C:\pinguino-11\libusb-win32-bin-1.2.6.0“.

No diretório descompactado da libUSB, acesse o diretório “bin“, e abra o executável inf-wizard.exe como administrador, tal como mostrado na Figura 13.

Indicativo do executável inf-wizard.exe

Figura 13 – Indicativo do executável inf-wizard.exe

 

Durante o processo, será necessário clicar o botão reset da placa PROTO’n PIC diversas vezes, pelo fato de que enquanto o driver não estiver devidamente instalado, o bootloader mais recente fica ativo por apenas 10 segundos, e depois será desativado, de modo que para o Windows será como se o dispositivo tivesse sido desconectado. Então, quando precisar, pressione o reset para “forçar” esse dispositivo “desconhecido” aparecer, e logo fazer ele ser reconhecido 😉

 

Ao abrir o programa inf-wizard.exe, a janela de informação irá mostrar que este programa trata de criar um arquivo *.inf para instalar o driver USB do dispositivo, como mostrado na Figura 14. Antes de clicar em Next, tenha a PROTO’n PIC18F4550 (por exemplo) conectado via USB no seu computador, e pressione o botão “reset” para fazer o microcontrolador entrar em modo de bootloader, e assim imediatamente clique no botão Next.

 

Primeira janela do Inf-Wizard da libusb para Windows

Figura 14 – Primeira janela do Inf-Wizard da libusb para Windows

Na próxima janela, mostrada na Figura 15, será mostrada uma lista de dispositivos USB conectados à máquina. Selecione o dispositivo com nome igual a “P8”, ou, se preferir, Vendor ID igual a 0x04D8 e Product ID igual a 0xFEAA. Pressione novamente o botão de reset da placa PROTO’n PIC e clique no botão Next.

Seleção do componente adequado

Figura 15 – Seleção do componente adequado – Selecione P8!!!

Na próxima janela, como mostrado na Figura 16, é a parte de Configuração do Dispositivo (Device Configuration). Aqui você poderá mudar, por exemplo, o nome do dispositivo. Eu deixei tudo como está. Clique novamente no botão reset da PROTO’n PIC e clique no botão Next.

 

Modificação ou não de parâmetros do driver

Figura 16 – Modificação ou não de parâmetros do driver

Ao clicar em “Next”, será aberta uma janela para você selecionar onde quer deixar o arquivo inf a ser gerado para o dispositivo em questão. Selecione um diretório fácil para ser encontrado (como por exemplo o próprio Desktop), deixe o nome como está (no meu caso, o nome do arquivo ficou como P8.inf), clique em “Salvar”.

Na próxima janela, como mostrado na Figura 17, é exibido um resumo das informações agregadas do dispositivo USB selecionado, as quais serão usadas para fazer um arquivo *.inf do driver a ser instalado. Pressione o botão reset da PROTO’n PIC e clique no botão Install Now… e o processo para instalar o driver será iniciado.

 

Instalação do driver USB parametrizado

Figura 17 – Instalação do driver USB parametrizado

Caso questionado pelo Windows, autorize o programa a fazer modificações no sistema, e como você está no Windows com assinatura de drivers desativada, será mostrada uma janela lhe questionando se deseja ou não instalar este driver, tal como mostrado na Figura 18. Selecione a opção “Instalar este software de driver mesmo assim”, e o driver será instalado devidamente. UFA!

 

Janela de segurança do Windows para instalação de driver não assinado

Figura 18 – Janela de segurança do Windows para instalação de driver não assinado

Pronto, driver instalado! Vamos só rever alguns detalhes importantes sobre a referência de pinos para programação no Pinguino!

Referência de Pinos no Programa

 

De acordo com a Wiki do Pinguino, temos a Tabela 1, mostrada adiante, com a referência numérica dada por “Pin on chip” (desconsidere “Pin name“). Esta é a principal forma de acessar um dado pino no Pinguino. Ou seja, se você quiser que o sinal RB1, ou seja, o bit 1 do PORTB seja colocado como saída, a forma correta é:

 

setup(){
       pinMode(34,OUTPUT); //define sinal 34 - RB1 como saída.
...
}

loop(){
       digitalWrite(34,HIGH); //coloca sinal 34 - RB1, em nível alto
...
}

 

Adiante, segue a Tabela 1 com as referências citadas.

 

Tabela 1 – Referência de pinos no programa Pinguino – Wiki Pinguino

Pin name PCB Label Digital I/O up to 5.5V tolerant Analog input Other Pin on Chip Microchip name
0 D0 Yes Yes SDA / SDI 33 RB0/AN12/INT0/FLT0/SDI/SDA
1 D1 Yes Yes SCL / SCK 34 RB1/AN10/INT1/SCK/SCL
2 D2 Yes Yes 35 RB2/AN8/INT2/VMO
3 D3 Yes Yes 36 RB3/AN9/CCP2(1)/VPO
4 D4 Yes Yes 37 RB4/AN11/KBI0/CSSPP
5 D5 Yes Yes 38 RB5/KBI1/PGM
6 D6 Yes Yes ICSP PGC 39 RB6/KBI2/PGC
7 D7 Yes Yes ISCP PGD 40 RB7/KBI3/PGD
8 D8 Yes Yes Serial TX 25 RC6/TX/CK
9 D9 Yes Yes Serial RX / SDO 26 RC7/RX/DT/SDO
10 D10 Yes Yes 15 RC0/T1OSO/T13CKI
11 D11 Yes Yes PWM 16 RC1/T1OSI/CCP2(1)/UOE
12 D12 Yes Yes PWM 17 RC2/CCP1/P1A
13 D13 / A0 Yes Yes Yes 2 RA0/AN0
14 D14 / A1 Yes Yes Yes 3 RA1/AN1
15 D15 / A2 Yes Yes Yes 4 RA2/AN2/VREF-/CVREF
16 D16 / A3 Yes Yes Yes 5 RA3/AN3/VREF+
17 D17 / A4 Yes Yes Yes 7 RA5/AN4/SS/HLVDIN/C2OUT
18 D18 / A5 Yes Yes Yes 8 RE0/AN5/CK1SPP
19 D19 / A6 Yes Yes Yes 9 RE1/AN6/CK2SPP
20 D20 / A7 Yes Yes Yes 10 RE2/AN7/OESPP
21 D21 Yes Yes 19 RD0/SPP0
22 D22 Yes Yes 20 RD1/SPP1
23 D23 Yes Yes 21 RD2/SPP2
24 D24 Yes Yes 22 RD3/SPP3
25 D25 Yes Yes 27 RD4/SPP4
26 D26 Yes Yes 28 RD5/SPP5/P1B
27 D27 Yes Yes 29 RD6/SPP6/P1C
28 D28 Yes Yes 30 RD7/SPP7/P1D
29 D29 Yes Yes RUN LED / USERLED 6 RA4/T0CKI/C1OUT/RCV
OSC1 13 OSC1/CLKI
OSC2 14 OSC2/CLKO/RA6
RESET RST Reset switch / ICSP MCLR 1 MCLR/VPP/RE3
USB- USB 23 RC4/D-/VM
USB+ USB 24 RC5/D+/VP
Vusb USB 18 VUSB
VDD (up to 5.5V) 11 VDD
VDD (up to 5.5V) 32 VDD
VSS (Gnd) 12 VSS
VSS (Gnd) 31 VSS

 

Configurando Pinguino para PIC18F4550

Agora sim, é hora de colocar as mãos em código! Mas antes disso, parecidamente ao que é feito na Arduino IDE, é preciso definir na ferramenta Pinguino IDE qual o PIC utilizado. Para isso, clique no botão “Board Configuration” na Pinguino IDE, conforme mostrado na Figura 19.

Indicativo do botão de menu de Configuração de Placa

Figura 19 – Indicativo do botão de menu de Configuração de Placa

Com isso, será aberta a janela “Board Configuration”, e nesta janela deixe marcadas as opções 8-bit em “Architecture”, Bootloader em “Programming mode”, v4.x em “Bootloader”, Pinguino 4550 em “Devices”, e depois clique em Accept”, tal como mostrado na Figura 20.

Indicativo de elementos a serem marcados para configuração do PIC 18F4550 no Pinguino

Figura 20 – Indicativo de elementos a serem marcados para configuração do PIC 18F4550 no Pinguino

Pronto, Pinguino IDE pronto para a brincadeira.

Primeiro programa com Pinguino

 

Ufa! Configurado tudo quanto tinha direito, agora vamos colocar finalmente a mão em código? Então, clique no botão de “Novo” (New) no Pinguino para criar um novo arquivo de programa em branco, tal como indicado na Figura 21.

Botão de new (Novo) no Pinguino

Figura 21 – Botão de new (Novo) no Pinguino

 Com isso, aparecerá uma tela em branco no Pinguino IDE, onde você poderá digitar o código de programa. Nesta janela, coloque o seguinte código para piscar o primeiro LED com Pinguino! 🙂

/*
Piscar um LED
USERLED no programa é referência ao LED conectado em PA4 ok?
No programa ele pode ser referenciado por USERLED, A4 ou 17!
*/

void setup()
{
    // Inicia o sinal como saida.
    pinMode(17, OUTPUT);   
}

void loop()
{
    digitalWrite(17, HIGH); //sinal PA4 em ALTO
    delay(500);		    
    digitalWrite(17, LOW); //sinal PA4 em BAIXO
    delay(500);		     

}

 

E antes de tudo e mais nada, lembre-se sempre de salvar o código/projeto. Para isso, clique no botão “Salvar” (Save) para salvar o código escrito, tal como mostrado na Figura 22, e escolha um nome para o projeto na janela que abrirá para escolher onde salvar e qual nome usar. Eu escolhi “piscaLed” para o meu, e isso resultará no arquivo piscaLed.pde.

Botão de salvar do Pinguino

Figura 22 – Botão de salvar do Pinguino

Agora, antes de salvar é importante um detalhe: Colocar o PIC em modo bootloader. Para isso, basta pressionar o botão “reset” da placa, que no caso estou usando a PROTO’n PIC, e o PIC entrará no modo bootloader, agora com os drivers instalados e configurados. Com o Pinguino IDE aberto, o modo bootloader ficará ativo até que um programa seja carregado no PIC, e no modo bootloader o LED conectado no sinal PA4 na PROTO’n PIC ficará piscando aceleradamente. Isso é normal, é apenas a indicação de que ele está em modo bootloader. Não adianta desplugar a placa da USB e replugar. É preciso pressionar o botão reset, com a placa conectada via USB, para que o bootloader Pinguino entre em ação.

Depois de salvo o programa, é hora de compilar o mesmo. Clique no botão “Compile” (Compilar), tal como mostrado na Figura 23, para iniciar o processo de compilação, que, por curiosidade, é feito com sdcc para o PIC18.

 

Botão de compilar do Pinguino

Figura 23 – Botão de compilar do Pinguino

Terminado o processo, aparecerá uma janela informando que a compilação foi terminada com sucesso, e você pode simplesmente clicar em “Upload Now” para iniciar o processo de subir o código para o microcontrolador PIC com bootloader Pinguino, tal como mostrado na Figura 24. Caso você clique em OK, essa janela será fechada, e posteriormente você terá que ir na devida opção para fazer o upload do código para o PIC.

 

Botão de upload pós-compilação do Pinguino

Figura 24 – Botão de upload pós-compilação do Pinguino

Caso tudo tenha corrido com sucesso, sem demais problemas, outra janela irá aprecer informando que o arquivo foi carregado no PIC com sucesso, tal como mostrado na Figura 25. Basta clicar em OK para essa janela fechar, e você já poderá observar que o LED conectado em PA4 (ou saída de número 17) ficará piscando com frequência de 1 segundo!

 

certo

Figura 25 – Caso bem sucedido

Caso não tenha um PIC com bootloader pinguino ativo conectado ao computador via USB, será mostrada uma janela tal como a vista na Figura 26. Caso você tenha esquecido de colocar o PIC em modo bootloader, basta pressionar o botão reset da placa, e clique no botão “Try Again!“, que o programa tentará novamente fazer  upload do código compilado para o PIC.

 

Problema ao localizar Pinguino

Figura 26 – Problema ao localizar Pinguino

Feito isso, tudo pronto para você começar a brincar com PIC “à lá Arduino” com Pinguino! Brinque com a ferramenta, veja os exemplos de códigos disponibilizados. E, como desafio, veja como comunicar via USB com o PIC usando a USB ou CDC 😉

Abraço e até mais!

Saiba mais

PROTO’n PIC18F4550

Referências

Pinguino Wiki

Pinguino – Placas vendidas

PROTO’n PIC18F4550

Installing Pinguino Drivers on Windows 7

MLAB C Tutorial V3

Pinout PIC18F4550

Pinguino Wiki – Basics

Facebooktwittergoogle_plusredditpinterestlinkedinmailby feather