HOME PROJETOS PROGRAMAÇÃO MÓDULOS EMAIL

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: 8 de Setembro de 2020