PROGRAMADOR PIC DE PORTA SERIAL PARA LINUX

Este projeto foi apenas um ensaio para desenvolver um programador que pudesse operar no Linux usando um conversor USB-Serial onde algumas dificuldades tiveram que ser superadas como:

  1. Escolher um microcontrolador barato com recursos suficientes para hospedar o firmware do programador.
    Para esse fim foi escolhido o PIC16F648A.

  2. Utilizar a própria tensão de 5V, fornecida pelo conversor USB-Serial para alimentar uma bomba multiplicadora de tensão que pudesse fornecer os 13V necessários para colocar o chip alvo em modo de progamação. Após estudar vários modelos, adotamos um que usa o módulo PWM do PIC16F648A para excitar a bomba.

  3. Interpretar o data sheet dos microcontroladores alvo para conseguir entender como funcionam os comandos de programação. Na primeira leitura tudo parece óbvio mas na prática não é bem assim.

  4. Fazer inúmeros teste para adequar as temporizações necessárias para o chip alvo conseguir receber a comunicação.

  5. Desenvolver, no Linux, um programa em linguagem C, o que não é minha praia, para controlar o programador usando a porta USB-Serial. O programa opera na console do Linux passando parâmetros na linha de comando para o programador.

A foto á direita mostra como ficou a placa montada, já com o conversor USB-Serial espetado no soquete.


A foto abaixo mostra a placa em serviço num notebook rodando o sistems operacional Fedora 29.
Nesse caso, o conversor USB-Serial está conectado através de cabinhos e um LCD está sendo usado para debugar o programa durante a fase de desenvolvimento.

Por enquanto o projeto suporta apenas microcontroladores das famílias 12F e 16F.

Foram feitos teste para microcontroladores como o PIC12F675 de 8 pino, PIC16F688 de 14 pinos e os PIC16F628A e PIC16F648A de 18 pinos para os quais o sistema funcionou a contento.

Ainda existem algumas arestas a serem aparadas mas acho que o projeto já pode ser divulgado para os lixadores de bits se divertirem.

Antes de iniciar, faça o download dos módulos necessários para montar esse projeto.

SPPP Programa "sppp" Linux.
FIRMWARE Projeto MPLAB do firmware
PCB Projeto EAGLE do PCB



MONTAGEM DO CIRCUITO PROGRAMADOR

O desenho do circuito programador foi desenvolvido no EAGLE, no Windows.

Se desejar modificar o projeto, descomprima o arquivo "pcb.tar.gz" com ocomando

tar -zxvf pcb.tar.gz

e abra o projeto no EAGLE para alterá-lo.

Veja o "LAYOUT DO PCB" a ser transferido para a placa de cobre.




Bomba Multiplicadora de Tensão

Para amplificar uma tensão é necessário que ela seja alternada.

Para conseguir a tensão de programação de 13V CC a partir de uma saída de 5V CC do conversor USB-Serial, um circuito especial para alternar e multiplicar essa tensão foi usado. Veja a figura abaixo.


Inicialmente, a tensão de 5V CC do conversor USB-Serial entra em USB5V para alimentar o circuito da bomba.

Quando o programador manda um sinal pela porta RA2HI a bomba é habilitada.
Simultaneamente, o programador configura o seu módulo PWM, que envia pulsos para a porta PWM1.
O mesmo pulso PWM passa por um transistor, não visualizado nesse esquema, e é invertido para então entrar na porta PWM2 da bomba. Isso simula um sinal de corrente alternada, isto é, enquanto num ciclo PWM1 estiver alto, PWM2 estará baixo e no ciclo seguinte isso será invertido e, assim, com a ajuda dos diodos e capacitores a tensão pode ser amplificada.

Um par de diodos Zener de 5,1V e 8,0V mantêm a tensão ajustada em 13,1V na saída PGR13V para colocar o chip alvo em modo de programação.

Ao mesmo tempo, o chip programador também comanda a porta RA3LO para ligar a tensão de alimentação de 5V do chip alvo que sai em VDD5V.




INSTALAÇÃO DO FIRMWARE

O firmware é um projeto desenvolvido no MPLAB, no Windows/XP.

Descomprima o arquivo do firmware com o comando

tar -zxvf firmware.tar.gz

Entre na pasta "SPPP" e abra o arquivo de projeto "sppp.mcp" para ver o código fonte ou para alterá-lo.

O projeto prevê um LCD para debug mas isso é opcional. Para elimirar o LCD do programa, comente a linha 59 do arquivo "sppp.asm" referente ao símbolo "LCD_REQUIRED" e recompile o programa.

Após estar satisfeito, grave o programa num microcontrolador PIC16F648A usando um programador de sua preferência. Após a gravação insira o microcontrolador no soquete do programador.




INSTALAÇÃO DO PROGRAMA SPPP

Para instalar o programa "sppp", copie o arquivo "sppp_make.tar.gz" para uma pasta de sua preferência, descomprima o arquivo com o comando:  tar -zxvf sppp_make.tar.gz"



INSTALAÇÃO COM GNU AUTOTOOLS

Se você baixou a instalação GNU AUTOTOOLS execute os comandos:
./configure prefix=/path.... make make install

O arquivo executável será colocado na pasta bin.
Para testar, dar o comando:  bin/sppp



INSTALAÇÃO COM GCC

Se você baixou a instalação com GCC execute o comando:
 ./install
ou
 gcc -o sppp main.c
O arquivo executável será colocado na mesma pasta.
Para testar, dar o comando:  ./sppp




IDENTIFICAÇÃO DO CHIP ALVO

Por uma questão de segurança, antes programar um chip, o programa "sppp" deve saber se o chip informado é o mesmo que está montado no programador.

Para identificar o chip alvo, o programa "sppp" usa o arquivo "sppp_config.cfg" que contem o chip ID e o nome do microcontrolador.

O processo de programação do chip alvo consiste em dar o comando

./sppp /dev/ttyUSB0 -pic <nome_do_pic> -wp <nome_do_arquivo.hex>

Para ter certeza que o chip alvo, que está montado no programador, é o mesmo que você informou na opção -pic <nome_do_pic>, o programa "sppp" vai:

  1. Ler o arquivo "sppp_config.cfg" e procurar o ID do chip informado em -pic <nome_do_pic>.

  2. Requisitar ao firmware do circuito programador as informações sobre o chip alvo montado.

  3. Comparar o ID do chip informado com o ID do chip alvo.

Se os dois ID's forem iguais, então a programação do chip alvo será realizada, caso contrário, o processo será encerrado.

Assim, se optar por compilar o programa "sppp" manualmente, o arquivo "sppp_config.cfg" deve ser copiado para o diretório onde o programa foi gravado.

Se quiser inserir um novo microcontrolador o arquivo "sppp_config.cfg", basta editá-lo e digitar o ID e o nome do microcontrolador separados por uma vírgula.

Para saber qual o ID de um microcontrolador, monte o chip no soquete de programação e dê o comando

./sppp /dev/ttyUSB0 -v

Serão listadas as informações do chip, dentre elas o ID entre colchetes, algo como:

O SEGUINTE MICROCONTROLADOR ESTA MONTADO DEVICE ID...................... 0x0fd0 [0x7e] PIC12F675 CONFIGURATION WORD............. 0x31e4 USER ID........................ 0x3fff3fff3fff3fff


Edite o arquivo "sppp_config.cfg" e insira a linha:

7e,PIC12F675

iniciando na coluna 1 e, em seguida, salve o arquivo.




Imagens do programa SPPP executando na console do Linux

A imagem abaixo mostra o resultado da execução do programa quando nenhuma opção é informada.
Nesse caso o programa mostra uma tela de ajuda e alguns exemplos.




A imagem abaixo é o resultado de uma requisição de dump da memória EEPROM.




A imagem abaixo é o resultado de uma requisição de dump da memória de programa.
Como a listagem é longa, fazemos um pipe para o comando "less".




Na imagem abaixo vê-se as mensagens do programa durante a gravação de um programa no chip alvo.
Note que o programa mostra cada linha enviada ao chip alvo.




A imagem abaixo mostra o resultado da requisição para pedir informação sobre o chip alvo.




CONCLUSÃO

Muitas melhorias ainda podem ser feitas mas deixo pra vocês.

Divirtam-se!!!












Índice dos circuitos




H P S P I N

Desde 04 de Março de 2010

Atualização: 08 de Dec de 2024