Gravadora USB para Microcontroladores
AVR Atmel
Luis Felipe da Cruz Figueredo,
Felipe Brandão Cavalcanti
Adaptado do projeto original de Thomas Fischl
∗Abril xx, 2009
Resumo
Esta nota técnica descreve os procedimento para a construção e utili-zação de uma gravadora USB multi-plataforma para microcontroladores AVR Atmel. Adaptada do projeto USBasp desenvolvido por: Thomas Fischl, a gravadora USB é composta basicamente por um microcontrolador (AT-mega8, nesta nota) e um pequeno conjunto de outros componentes de ordinária comercialização. A gravadora utiliza um software embarcado e um driver USB para comunicação com o PC. O processo de gravação pode ser feito através do WinAVR (versões superiores à 20070122) através do AVRDUDE.
Figura 1: Gravadora montada sobre uma placa universal.
∗O projeto original do USBasp é distribuído sobre os termos e condições GNU GPL versão
1
Hardware
A gravadora é um dispositivo responsável pela programação de microcontrola-dores. Usualmente, as gravadoras para microcontroladores da família AVR da Atmel utilizam as portas paralela ou serial do PC. Entretanto, muitos com-putadores e notebooks simplesmente não possuem tais entradas. A gravadora USBasp, então, surge como uma solução viável para a programação destes dis-positivos através da porta USB.
1.1
Lista de Componentes
Para montar a gravadora, são necessários os seguintes componentes (figura 2):
Figura 2: Lista de componentes da gravadora USBasp.
(1) 1 microcontrolador AVR ATmega8 da Atmel; (2) 1 circuito integrado 74LS367;
(3) 1 cristal de quatzo de 12MHz; (4) 2 conectores header 5x2; (5) 1 conector USB do tipo B;
(6) (Opcional) 1 conector RJ-45 fêmea;
(7) (Opcional) 1 cabo com conectores RJ-45 macho;
(8) 1 cabo USB com conectores tipo B e tipo A (computador); (9) 1 cabo flat com 8 ou 10 fios do tamanho desejado;
(11) 1 barra de pinos simples; (12) 2 jumpers;
(13) 2 soquetes DIP14 torneados para o ATmega8. Em conjunto, os dois soquetes formam um soquete de 28 pinos estreito, difícil de ser encontrado no Brasil;
(14) 1 soquete DIP14 (torneado ou não) para o CI 74LS367; (15) 2 leds (preferencialmente de cores distintas);
(16) 2 diodos zener de 3V6; (17) 1 porta-fusíveis; (18) 1 fusível de 500mA;
(19) 1 capacitor eletrolítico de 4,7 τ C;
(20) 3 capacitor de 100 nF, cerâmico ou poliéster; (21) 2 capacitores de 22 pF, cerâmico ou poliéster; (22) 2 resistor de 10 KΩ;
(23) 2 resistores de 220 Ω; (24) 2 resistores de 68 Ω; (25) 1 resistor de 1,2 KΩ; (26) 1 resistor de 6,8 KΩ;
(27) fios para jumpers, normalmente são fios de instalação telefônica. (28) (Opcional) 1 placa de circuito impresso confeccionada para a
grava-dora;
Estes componentes são facilmente encontrados em lojas de eletrônica especi-alizada em Brasília, com excessão do microcontrolador ATmega8 que pode ser encomendado em lojas virtuais de eletrônica.
1.2
A Gravadora
O núcleo da gravadora descrito nesta nota é o microcontrolador AVR ATmega8 com um cristal de 12MHz. A gravadora após a montagem está pronta para ser conectada ao computador através do cabo USB com conectores do tipo B (conexão com a gravadora) e do tipo A (conexão com o computador). O diagrama esquemático da gravadora é apresentado na figura 3. Os resisto-res R4 e R5 são limitadoresisto-res de correntes e os diodos zener são limitadoresisto-res de tensão utilizados em conjunto com o fusível de 500mA para proteção da
Figura 3: Diagrama esquemático da gravadora USBasp.
porta USB. Os leds indicam a transferência de dados e o header é utilizado para a conexão da gravadora com o microcontrolador alvo. A conexão en-tre o ATmega8 e o header 5x2 foi alterada do projeto original para que a gravadora possa ser utilizada com o circuito de referência proposto no guia:
Desenvolvimento com microcontroladores Atmel AVR - Borges et al, 2008). O header do projeto original (figura 4(a)) utiliza o padrão STK (presente nas gra-vadoras comerciais da Atmel), enquanto que o header proposto utiliza o mesmo padrão presente no guia citado (figura 4(b)).
Obs.: Na realidade, a conexão entre o ATmega8, o header 5x2 da grava-dora e o microcontrolador AVR alvo pode ser feita de inúmeras maneiras desde que os pinos do microcontrolador da gravadora estejam conectados aos pinos correspondentes do AVR alvo (tabela 1).
Figura 4: Headers padrão (a) e adaptado (b) utilizados para a conexão com o circuito de referência. O circuito de referência proposto utiliza-se do header adapatado (b).
Tabela 1: Correspondência entre os pinos do ATmega8 da gravadora com os pinos do AVR alvo.
ATmega8 da gravadora AVR alvo
pino 16(PB2) pino 1(RESET )
pino 17(MOSI) pino 17(MOSI)
pino 18(MISO) pino 18(MISO)
pino 19(SCK) pino 19(SCK)
pino 7(Vcc) pino 7(Vcc)
pino 8(GND) pino 8(GND)
A gravadora pode, então, ser montada e soldada sobre uma placa universal de acordo com o esquemático apresentado na figura 3. Ademais, sugere-se uma placa de circuito impresso para a gravadora utilizando o layout proposto na figura 5. O arquivo com o layout de circuito impresso para a gravadora (grava-doraPCB.PcbDoc) se encontra na pasta ..\hardware. O custo unitário para a confecção das placas após a fotoplotagem é de cerca de R$11,50, enquanto que o custo da fotoplotagem é de R$60,00 (orçamento obtido pela empresa STICK CIRCUITOS IMPRESSOS LTDA).
Figura 6: Foto do circuito de referência.
Figura 7: Diagrama esquemático do circuito de referência.
1.3
Jumpers
A gravadora utiliza 2 jumpers de configuração. O conhecimento destes é de extrema importância para o bom funcionamento da gravadora:
J1 - Alimentação Setando este jumper a alimentação da gravadora e do mi-crocontrolador alvo será feita através da porta USB (5V).
J2 - Configuração do clock SCK Sete este jumper se o clock do microcon-trolador alvo for menor que 1,5MHz. Neste caso, a gravadora passará a atuar em low speed, i.e. o SCK será configurado entre 375KHz e 8KHz (1 4
do clock do microcontrolador alvo). Caso o microcontrolador alvo possuir clock maior que 1,5MHz deixe este jumper desconectado.
1.4
Circuito de Referência
O circuito de referência (figura 6) nada mais é do que um circuito básico de de-senvolvimento para um dado microcontrolador, ou seja, é a configuração mínima requerida para seu bom funcionamento em conjunto com a configuração mínima necessária para a sua programação. Nesta nota, utilizaremos como exemplo o circuito de referência descrito no guia: Desenvolvimento com microcontrolador-es Atmel AVR - Borgmicrocontrolador-es et al, 2008). Nele estão os capacitores de desacopla-mento para alimentação e conversor A/D, assim como um conector header para conexão com a gravadora. Seu diagrama esquemático é apresentado na figura 7.
2
Firmware
Após a montagem da gravadora, deve-se programar o ATmega8 com o firmware da gravadora. O firmware que deve ser embarcado é composto por um software gratuito que transforma o microcontrolador em um dispositivo USB,AVR-USB, em conjunto com o código que permite utilizar o ATmega8 como um programa-dor serial de microcontrolaprograma-dores AVR Atmel. Para a programação do ATmega8, outra gravadora de AVRs deve ser utilizada visto que a gravadora USB ainda não está pronta.
2.1
Firmware Versão Pré-Compilada
A versão pré-compilada do firmware (arquivo main.hex) encontra-se na pasta ..\Firmware \Firmware_Atmega8_gravadora_BSD_12MHz\. Para utilizar esta versão pré-compilada do firmware verifique se as seguintes condições são respei-tadas:
• O microcontrolador que será utilizado pela gravadora é o ATmega8; • O microcontrolador possui freqüência definida por um cristal de 12MHz; • A gravadora que irá programar o microcontrolador é a gravadora BSD. Caso alguma destas configurações não corresponda ao seu projeto, (i.e. caso não utilize o ATmega8 como microcontrolador da gravadora, ou não utilize um cristal de 12MHz, ou não utilize uma gravadora BSD para embarcar o firmware) vá até a próxima subsecção 2.2. Entretanto, caso seu projeto envolva estas con-figurações pule para a subseccção 2.3.
Obs.: Mais informações sobre como montar e utilizar a gravadora BSD, veja o guiaDesenvolvimento com microcontroladores Atmel AVR - Borges et al, 2008).
2.2
Compilando Novo Firmware
Caso não queira utilizar o ATmega8 na gravadora ou configurá-lo com 12MHz ou não queira utilizar (ou não tenha) a gravadora BSD, é necessário recompilar os arquivos fontes do firmware e gerar um novo hexadecimal. Todas as alterações devem ser feitas no arquivo Makefile na pasta: ..\Firmware\Firmware_Fontes\. As alterações devem ser feitas nos seguintes campos (figura 8):
(1) microcontrolador utilizado;
(2) fusíveis (definidos pelo microcontrolador e pela freqüência utilizada); (3) gravadora, que será utilizada para carregar o firmware;
t
Figura 8: Alterações no makefile.
Após realizar as alterações no Makefile, recompile os arquivos fontes do firmware para gerar o novo hexadecimal que será carregado no microcontro-lador do USBasp. Caso utilize o software Programmers Notepad do pacote WinAVR, o hexadecimal é gerado da seguinte maneira. No Programmers No-tepad, clique em “Tools->Options”. Na caixa aberta, vá em “Tools” e clique em “add”. Desta forma, uma caixa com as propriedades da nova ferramenta será aberta (figura 9). Nesta caixa, altere os seguintes campos:
• “Name: ” Selecione um nome qualquer;
• “command: ” <endereço do WinAVR>\utils\bin\make.exe; • “Folder: ” ..\Firmware\Firmware_Fontes;
• “Parameters: ” main.hex.
Os outros campos podem ser mantidos sem alteração.
Então, vá ém “Tools” e clique no nome da ferramenta adicionada. Isto deverá gerar o novo hexadecimal na pasta:
..\Firmware\Firmware_Fontes.
2.3
Programando a Gravadora
Para embarcar o firmware no microcontrolador da gravadora pode-se utilizar qualquer programadora capaz de baixar e manipular a ROM de microcontrola-dores AVR. Aconselha-se a utilizar o software gratuitoAVRDUDE. Este utiliza programação ISP para realizar a gravação e manipulação da memória ROM e EEPROM de AVRs. No windows, a programação do firmware no AVRDUDE deve ser feita dentro do console (prompt de comando), no diretório onde se en-contra o AVRDUDE.exe (usualmente, ..\<endereço do WinAVR>\bin\).
Den-h
Figura 9: Adicionando nova ferramenta no Programmers Notepad.
• Utilizando o firmware pré-compilado: avrdude.exe -p m8 -c bsd -P lpt1 -u -U flash:w:“..\Firmware_Atmega8_gravadora_BSD_12MHz\main.hex”:a -U hfuse:w:0xc9:m -U lfuse:w:0xef:m
• Utilizando novo firmware: avrdude.exe -p[código do microcontrolador
alvo]-c[código da gravadora]-P[porta do pc utilizada]-u -U flash:w:“[novo main].hex”:a -U hfuse:w:(hexadecimal):m -U lfuse:w:(hexadecimal):m A opção -u impede a releitura dos fusíveis que quando é feita impede a alteração de seus valores (o comando sem a opção -u é dita como modo se-guro). O hexadecimal do hfuse (high fuse) e do lfuse (low fuse) são determina-dos, entre outras coisas, pelo microcontrolador utilizado e pelo clock determi-nado. Para defini-lo leia o manual do microcontrolador correspondente ou vá emengbedded.com.
3
Identificando a Gravadora - Windows
A gravadora depois de montada (hardware) e programada (firmware) está pronta para ser conectada ao computador. O dispositivo deverá ser identificado (como USBasp) pelo sistema operacional que iniciará o processo de configuração do driver do dispositivo (figura 10). Deve-se, então, indicar o caminho do driver usbasp.inf (“\win-driver-0.1.12.1_paraUSBasp\”). Pronto. O driver deve ter sido instalado (figura 11) e o dispositivo já está pronto para ser utilizado. Para confirmação vá no gerenciador de dispositivos e verifique se a gravadora já está identificada (figura 12).
Figura 10: Identificando a gravadora no Windows.
Figura 11: Identificando o driver para a gravadora.
OBS.: Na página oficial do projeto original, o driver disponibilizado está desatualizado (versão libusb DLL 0.1.10.1) e não deve ser utilizado visto que as novas versões do AVRDUDE não são compatíveis com este driver. As novas ver-sões do libusb podem ser encontradas no site doprojeto libusb. Mais informações emhttp://www.friendlyarm.com/fixed-a-problem-usbasp-in-winavr20080610/.
4
Utilizando a Gravadora - AVRDUDE
Neste ponto, a gravadora já está pronta para ser utilizada. Para programar com o AVRDUDE, deve-se utilizar o aplicativo em linha de comando, visto que, até o momento, o avrdude-gui não possui o USBasp em sua lista de gravadoras. Para utilizar o USBasp na linha de comando, deve-se selecionar a gravadora usbasp com o argumento -c usbasp.
5
Sites Interessantes
(1) [Projeto original]: www.fischl.de/usbasp/
(2) [AVR-USB]: http://www.obdev.at/products/avrusb/ (3) [driver libusb]: http://libusb.sourceforge.net/ (4) [AVRDUDE]: http://www.nongnu.org/avrdude/
(5) [Guia de como instalar a USBasp]: http://www.scienceprog.com/building-and-installing-usbasp-usb-programmer-of-avr-microcontrollers/
(6) [Solucao para o problema do driver para novas versões do AVRDUDE]: http://www.friendlyarm.com/fixed-a-problem-usbasp-in-winavr20080610/
(7) [Programando com o USBasp]: http://www.scienceprog.com/one-click-project-with-usbasp-programmer/
(8) [Calculando fusíveis (AVR):] http://www.engbedded.com/cgi-bin/fc.cgi