Hoje vou falar de uma placa para quem gosta de “escovar bits”, como se dizia (não tão) antigamente: o Gravador USBasp AVR .
Este gravador, como o próprio nome diz, é utilizado para programar microcontroladores Atmel AVR. É composto por uma pequena placa, com conector USB, um ATMega8 e mais uns poucos componentes, utilizando um driver genérico para comunicação com o computador. Abaixo, o gravador que eu usei para criar este post:
O gravador USBasp permite a programação de microcontroladores em baixo nível, inclusive mexendo na configuração de fuse bits, lock bits, clock e outras configurações que podem otimizar o desempenho do seu microcontrolador… ou travá-lo. Sim, nos testes eu consegui “travar” uns 2 microcontroladores, mas pretendo recuperá-los em breve. Portanto, tenha cuidado ao mexer nas configurações mais avançadas. 🙂
Hoje, vou utilizar o USBasp para programar o ATmega328P. Existem vários tutoriais na internet sobre como utilizar o USBasp para programar esse microcontrolador usando o próprio Arduino Uno, mas o que este tutorial vai mostrar é como programar diretamente o microcontrolador, utilizando um programa gerado na IDE do Arduino.
Como esse tutorial é um pouco extenso, vou separá-lo em seções. Vamos aos passos:
- Instalação do USBasp e seus drivers
- Criação do programa na IDE do Arduino
- Geração do arquivo HEX à partir do programa criado na IDE
- Instalação do programa Extreme Burner AVR para gravação do Microcontrolador
- Ligação do gravador USBAsp AVR no ATMEGA328P
- Gravar no ATMEGA328P o programa HEX gerado no passo 3
- Teste do ATMEGA328P no Arduino Uno
Material a ser utilizado:
- 3 leds, de preferência de cores diferentes
- 3 Resistores de 330 ohms ou valores compatíveis com os leds
- 1 Chip ATmega328P
- 1 Módulo Gravador AVR USBasp
1 – Instalação do gravador USBasp e seus drivers
O procedimento abaixo foi testado no Windows 7 (64 bits) com Service Pack 1, e também no Windows XP, logo não deve apresentar problemas nas demais versões do Windows. Para Linux e MacOS, não há necessidade de drivers.
O gravador USBasp pode ser conectado diretamente na porta USB do computador, porém, antes de plugar o dispositivo, recomendo o download do driver , nesse link:
http://www.fischl.de/usbasp/usbasp-windriver.2011-05-28.zip
Descompacte o arquivo e será gerada uma pasta chamada usbasp-windriver.2011-05-28. Plugue o USBasp e, após o dispositivo ser detectado pelo Windows, escolha “PROCURAR SOFTWARE DE DRIVER NO COMPUTADOR”. Indique a pasta que foi descompactada e o driver será instalado automaticamente. No painel de controle do seu computador, em GERENCIADOR DE DISPOSITIVOS, será mostrado um novo dispositivo chamado USBasp:
2 – Criação do programa na IDE do Arduino
Carregue este programa exemplo no Arduino, que acende e apaga 3 leds em sequencia, com intervalos de 1 segundo:
// Programa : Teste USBasp // Autor : Arduino e Cia int pinoledvermelho =3; int pinoledverde = 4; int pinoledamarelo = 5; void setup() { pinMode(pinoledvermelho, OUTPUT); pinMode(pinoledverde, OUTPUT); pinMode(pinoledamarelo, OUTPUT); } void loop() { digitalWrite(pinoledvermelho, HIGH); delay(1000); digitalWrite(pinoledvermelho, LOW); digitalWrite(pinoledverde, HIGH); delay(1000); digitalWrite(pinoledverde, LOW); digitalWrite(pinoledamarelo, HIGH); delay(1000); digitalWrite(pinoledamarelo, LOW); delay(1000); }
3 – Geração do arquivo HEX à partir do programa criado na IDE
O programa que vamos utilizar para gravar o microcontrolador, o Extreme Burner AVR, não aceita, por exemplo, que um arquivo .INO seja carregado diretamente e gravado no microcontrolador. Para isso, será necessário gerar um arquivo com extensão HEX (formato hexadecimal). Esse arquivo HEX, por sua vez, será convertido pelo Extreme Burner para 0s e 1s, ou seja, o formato que o microcontrolador “entende”.
Por padrão, esse arquivo HEX não é criado quando você compila um programa na IDE, mas com uma pequena mudança na configuração da IDE, podemos gerar esse arquivo no computador.
Entre na IDE do Arduino, em ARQUIVO, depois em PREFERÊNCIAS:
Escolha EXIBIR MODO VERBOSO, conforme destacado:
Clique em OK e volte para a IDE, compilando o programa. Na parte inferior da janela, serão exibidas várias informações, e nas últimas linhas, o local em que o programa gerou o arquivo HEX. Note que no seu computador esse caminho provavelmente será diferente:
Anote/copie essa informação sobre o local do arquivo, pois ela será utilizada daqui a pouco.
4 – Instalação do programa Extreme Burner AVR para gravação do microcontrolador
Essa parte vai dar um pouco mais de trabalho, pois exige a mudança de alguns arquivos de configuração, já que o programa Extreme Burner AVR não possui o microcontrolador ATmega328P em sua lista de chips, e precisaremos inserí-lo manualmente. O programa pode ser baixado nesse link e tem versões para Windows e Linux. Nos meus testes usei a versão 1.4.2 do programa.
A instalação é bem simples. Execute o arquivo extreme_burner_avr_v1.4.2_setup.exe (ou a versão que você baixou), confira as informações sobre a pasta de instalação e criação de ícones no desktop, e o programa será instalado. Ignore a instalação do driver no final do processo, mantendo o driver do USBasp que você instalou no passo 1.
Depois de instalado, precisamos adicionar o chip ATmega328P à lista de chips suportados pelo Exreme Burner. Para isso, vá até a pasta de instalação, normalmente em C:Program FilesExtreme Burner -AVRData, e abra o arquivo chips.xml. Pode ser usado o próprio notepad para isso, mas certifique-se que você tem as permissões de administrador para abrir o arquivo.
No final do arquivo chips.xml, insira as seguintes linhas :
<CHIP>
<NAME>ATmega328P</NAME>
<FLASH>32768</FLASH>
<EEPROM>1024</EEPROM>
<SIG>0x000F951E</SIG>
<PAGE>128</PAGE>
<LFUSE layout=”2″>YES</LFUSE>
<HFUSE layout=”5″>YES</HFUSE>
<EFUSE layout=”4″>YES</EFUSE>
<LOCK>YES</LOCK>
<CALIB>YES</CALIB>
<PLACEMENT>.ImagesPlacementsZIF_DIP_40.bmp</PLACEMENT>
</CHIP>
Seu arquivo chips.xml deve ficar mais ou menos assim, com a alteração em destaque:
Salve o arquivo e abra o Extreme Burner. Na aba CHIP, certifique-se que o controlador ATmega328P aparece no final da lista:
5 – Ligação do gravador USBasp AVR no microcontrolador
Hora de ligarmos o USBasp no microcontrolador que será programado. Com o USBasp desplugado da USB, efetue as seguintes conexões, seguindo o esquema de ligação:
Esta configuração está de acordo com a pinagem da placa que estou usando, e o seu módulo pode ser um pouco diferente, mas basta seguir o esquema de ligação acima. Fique atento à tensão de alimentação do microcontrolador (pino VCC do USBasp), que no meu caso é 5v, mas em outros módulos USBasp pode ser configurado para 3.3 ou 5v.
6 – Gravar no ATmega o programa HEX gerado no passo 3
Com o programa HEX gerado, o caminho do arquivo anotado e as ligações ao microcontrolador conferidas e reconferidas, vamos à gravação. Conecte o USBasp na porta USB do seu computador, abra o Extreme Burner, e clique em OPEN, no lado esquerdo da tela….
… e vá até a pasta que você anotou no passo 3, abrindo o arquivo HEX:
Clique em OPEN e, na parte superior da janela do programa, será mostrado o caminho do arquivo HEX que foi carregado:
Para finalizar, no menu WRITE, escolha FLASH, e aguarde o final do processo de gravação, que deve mostrar uma tela como essa :
7 – Teste do ATmega328P gravado
Para testar o ATmega328P que foi gravado, simplesmente coloque o chip no Arduino UNO, montando o seguinte circuito :
Desta maneira, o programa que foi criado no passo 1 será executado continuamente. Você não precisa necessariamente de uma placa do Arduino para testar. Também é possível montar o circuito externamente, com alguns componentes como cristal, capacitores e resistores.
Note que o chip que foi gravado contém apenas o programa do Arduino, sem o bootloader. Ou seja, se você tentar programar o Arduino UNO com este chip que foi gravado pelo Extreme Burner, não vai conseguir. Outro detalhe é que você pode apagar e reprogramar o chip quantas vezes quiser, usando as funções do Extreme Burner.
Isso é útil quando você precisa de um chip dedicado para o seu projeto, ou então existe a necessidade de gravar microcontroladores em série. Inclusive o USBasp funciona com uma grande variedade de controladores, como você pode ver na tabela abaixo:
Este foi apenas um exemplo de utilização, pois como comentei no início do post as opções de programação são as mais variadas possíveis. Reforço que deve-se tomar cuidado nas configurações avançadas, evitando danificar/travar o microcontrolador, ok ?
Gostou? Veja também o post Como gravar o bootloader do ATMega328 usando Arduino Uno.