H P S P I N E l e t r ô n i c a D i g i t a l e P r o g r a m a ç ã o d e M i c r o c o n t r o l a d o r e s P I C |
HOME PROJETOS PROGRAMAÇÃO |
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:
Escolher um microcontrolador barato com recursos suficientes para
hospedar o firmware do programador.
Para esse fim foi escolhido o PIC16F648A.
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.
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.
Fazer inúmeros teste para adequar as temporizações necessárias para o chip alvo conseguir receber a comunicação.
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 |
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.
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.
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.
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"
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
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
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:
Ler o arquivo "sppp_config.cfg" e procurar o ID do chip informado em -pic <nome_do_pic>.
Requisitar ao firmware do circuito programador as informações sobre o chip alvo montado.
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.
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.
Índice dos circuitos |
H P S P I N Desde 04 de Março de 2010 Atualização: 08 de Dec de 2024 |