terça-feira, fevereiro 19, 2013

Montando um Arduino: Experiências com a Metaboard

Como vimos anteriormente, a metaboard é um hardware bastante simples, com capacidade de carga de programa pela USB diretamente da IDE, quase totalmente compatível com o Arduino. Veremos aqui algumas experiências com uma montagem em protoboard baseado neste projeto



O hardware que montei possui as seguintes diferenças em relação ao projeto original:
  • Foi montado em uma protoboard, usando uma placa de alimentação para reduzir para 5V a tensão de uma bateria de 9V.
  • Possui três LEDs coloridos (vermelho, verde e amarelo), um dos quais no mesmo pino que o LED da placa do Arduino.
  • Possui um LDR (resistor sensível à luz) ligado a uma porta analógica
A presença dos LEDs e do LDR são para permitir usar esta montagem para pequenos exercícios de programação.

O circuito montado foi:

Circuito do "Metaboard 100 Noção" - clique para ampliar

Gerei uma versão ligeiramente alterada do bootloader original, anexando indicações através dos LEDs e aceitando um comando adicional para evitar um aviso do avrdude. As indicações são:
  • Os três LEDs são acesos quando inicia a execução do bootloader
  • Ao efetuar a conexão USB os LEDs vermelho e amarelo são apagados
  • O LED vermelho pisca quando é feita uma gravação
Os fontes e executável do bootloader estão nos arquivos do blog (veja no alto à direita) com o nome USBaspLoader.Metaboard.zip.

Uma pequena "pegadinha" é que o bootloader só é ativado o ATmega é ressetado externamente com a chave na posição correta. O reset que ocorre quando o ATmega é alimentado não ativa o bootloader, mesmo com a chave posicionada. Isto me confundiu bastante no começo. Ao final da gravação, o firmware dispara automaticamente a aplicação gravada, saindo do bootloader.

Uma vez com o bootloader ativado e o circuito conectado ao PC, ele se apresenta para o avrdude como um programador usbasp. No Windows é necessário instalar um driver, que você encontra aqui.

O vídeo abaixo mostra a entrada no bootloader, a conexão da USB e a gravação do exemplo Blink.



Para completar as experiências, no próximo post vamos ver como fazer a gravação da aplicação de dentro da IDE do Arduino.

14 comentários:

Vitor disse...

Oi ótimo trabalho,

mostre um Metaboard mas quando coloco
o usb dispositivo usb com defeito
poderia me ajuda

Anônimo disse...

Oi ótimo trabalho,

mostrei um Metaboard mas quando coloco
o usb dispositivo usb com defeito
poderia me ajuda

Daniel Quadros disse...

Vitor,

Os principais motivos para dar erro são não ter gravado corretamente o bootloader no ATmega ou ter feito algum erro na montagem (por exemplo, trocado os pinos de D+ e D-).

Unknown disse...

estou usando um gravador USBasp e já monte e monte varias vezes e sempre o mesmo erro? essa placa roda no windows 7??

Obrigado.

Daniel Quadros disse...

Vitor: funciona sim com o Windows 7. Qual o erro que está apresentando?

Unknown disse...

Quando conector no USB nada acontece e não aparece aquele "ícone" no gerenciador de dispositivos. poderia me ajuda??

Daniel Quadros disse...

Está acendendo os LEDs para indicar que entrou no bootloader?

Unknown disse...

nenhum led "liga" quando coloco o usb aparece que instala um drive "unknown device" e não instala o drive certo??




Daniel Quadros disse...

Neste caso ou tem algum erro na montagem ou o ATmega não está com a minha versão do bootloader gravado.

Unknown disse...

Estou gravando o "mega328p_16mhz" na pasta USBaspLoader.Metaboard -> firmware -> hexfiles -> mega328p_16mhz. É mesmo esse arquivo? tenho que fazer alguma coisa ou só grava mesmo? Funciona para win7 64 bit?? Obrigado

Anônimo disse...

Estou gravando o "mega328p_16mhz" na pasta USBaspLoader.Metaboard -> firmware -> hexfiles -> mega328p_16mhz. É mesmo esse arquivo? tenho que fazer alguma coisa ou só grava mesmo? Funciona para win7 64 bit?? Obrigado

Daniel Quadros disse...

Sim, o arquivo é este mesmo. Além de gravar o hex, precisa acertar os fuses conforme descrito no Makefile. Estou (há algum tempo) preparando um passo a passo desta montagem. Espero publicar até o final deste mês (set/14).

Anônimo disse...

Como devo gravar os fusiveis??

Daniel Quadros disse...

Se você com o avr gcc toolchain instalado, basta usar "make fuse". Se você estiver rodando o avrdude "na mão" o comando é "avrdude -c pgm -p atmega328p -u -U lfuse:w:0xf7:m -U hfuse:w:0xda:m -U efuse:w:0x03:m" trocando pgm pelo nome do seu programador (usbasp, usbtiny, arduino, etc).