Como fazer upload de programas para um ATmega na protoboard usando conversor USB–Serial

O Arduino standalone e outras montagens com ATmega podem ser programados pela IDE usando uma técnica simples.

Existem infindáveis técnicas para gravar programas feitos para Arduino em um ATmega328 que roda fora de uma placa de desenvolvimento.

Talvez uma das mais simples (do ponto de vista de software) seja simplesmente trocar o ATmega328 que está no soquete de um Arduino Uno pelo ATmega328 que se quer programar, aí transferir o programa (e talvez o bootloader) normalmente para ele, e depois destrocar. Sabendo fazer sem quebrar os terminais, a tendência é funcionar ;-)

Existem muitos outros, e em qualquer reunião de 3 programadores, surgirão pelo menos 4 métodos favoritos para isso. O que eu vou descrever é o que eu uso, mas desde já informo que:

  1. nos próximos dias vou descrever em outro artigo o método que usa um Arduino Uno como intermediário, e
  2. você pode encontrar muitos outros bons métodos, e vale a pena se informar sobre eles.

Programação via USB: como funciona

O upload de um sketch para o Arduino normalmente envolve os pinos RX e TX do microcontrolador, cujos leds associados normalmente você vê piscar ao longo do upload.

Para chegar a esses pinos, entretanto, o programa precisa primeiro passar por uma conversão entre o sinal USB que sai do computador, e o sinal serial mais "clássico" (RS-232) que é entendido neles.

Essa tarefa é desempenhada por um chip adicional na placa da maioria dos modelos de Arduino, e para programar um ATmega "nu" que não disponha desse conversor é necessário recorrer a outros métodos.

O site do Arduino sugere uma forma curiosa de aproveitar o chip de conversão incluído no Arduino Uno, sem instalar nenhum software adicional: remover o ATmega do soquete do Uno, e aí plugar o pino TX do Uno ao pino RX do ATmega externo, e o pino RX do Uno ao pino TX do ATmega externo. Deve funcionar, e até faz algum sentido se o ATmega externo estiver soldado, mas confesso que nunca experimentei.

Também é possível usar como intermediário um Arduino Uno sem remover nenhum componente dele, e essa alternativa será detalhada em um artigo adicional nos próximos dias.

O meu método usual é outro. Ele dispensa completamente o Uno mas envolve um componente adicional: um conversor USB-serial fácil de encontrar no Brasil (com nomes como "módulo FTDI", "Conversor USB TTL RS232 Serial" e similares) por preços entre R$ 30 e R$ 50. As aplicações típicas do ambiente Arduino são bem atendidas por um modelo com suporte a 5V, mas também existem modelos com suporte a 3,3V.

O meu modelo é o chamado "FTDI Basic", idêntico ao da foto acima. Nele o lado esquerdo veio pronto para soldar uma barra de pinos ou outra forma de conectá-lo à protoboard e/ou ao que você quiser fazer comunicar serialmente via USB, e o lado direito é uma porta USB prontinha para conectar a um computador. Entre os 2 fica um chip da FTDI especializado nessa conversão.

Conexão física

O lado do FTDI Basic (ou de outros similares) que se conecta à protoboard ou ao seu dispositivo costuma ter no mínimo os seguintes pinos: GND, CTS, 5V, TX, RX e DTR (ou RTS). Minha montagem usa todos eles, exceto o CTS.

Incluí no diagrama acima todas as conexões necessárias para que um ATmega328 configurado com o bootloader e os fuses do Arduino Lilypad para poder dispensar um cristal externo e outros componentes (na configuração que vimos no artigo anterior) seja programado por um conversor USB-Serial.

Antes de listar as conexões, preciso indicar o diagrama acima, que apresenta a pinagem do ATmega328, da qual quero destacar dois esquemas de numeração: o que está em marrom, que segue a convenção do Arduino, e o que está em dígitos brancos no próprio corpo do chip, que é a contagem física dos pinos. Também são relevantes os indicadores elétricos (VCC e GND, em vermelho e preto, respectivamente) e os indicadores seriais (com fundo azul).

Interprete a tabela de conexões a seguir usando as convenções acima:

FTDI Basic ATmega
GND GND
CTS
5V VCC
TX Pino 0 (Arduino)/ 2 (físico) / RXD (serial)
RX Pino 1 (Arduino)/ 3 (físico) / TXD (serial)
DTR conectado por meio de um capacitor de 0,1µF ao pino 1 (físico) / RESET

Digno de nota:

  • Observe que as conexões dos pinos seriais são invertidas: RX do conversor vai no TX do ATmega, e vice-versa.
  • O capacitor de 0,1µF (geralmente identificado pelo número 104 em sua face) é essencial, pois transforma o sinal do pino DTR em um pulso breve no pino RESET, reinicializando o ATmega no início da transmissão, para que seu bootloader carregue o programa que estamos tentando enviar.
  • Todas as instruções acima se baseiam na premissa de que o ATmega sendo programado recebeu anteriormente o bootloader conforme as instruções do artigo anterior. Se ele estiver sem bootloader, não vai funcionar – e se ele estiver com o bootloader comum do Arduino Uno, você precisará colocar um cristal ou oscilador entre os pinos físicos 9 e 10 (com capacitores, se necessário), segundo as instruções que estiverem orientando a sua montagem.

Com as conexões acima, o meu ATmega está pronto para receber programas enviados pela IDE do Arduino.

Programando o ATmega pela IDE do Arduino

Agora que a montagem já foi feita, você pode fazer o upload de programas para o seu ATmega na protoboard da mesma forma que faria o upload para um Arduino: seleciona o modelo adequado (que no caso do "nosso" bootloader será sempre “Lilypad Arduino w/ ATmega328”) no menu Tools/Board, seleciona a porta correspondente ao FTDI Basic no menu Tools/Serial Port, e aí é só pressionar o botão de upload.

Para testar, coloque um led e um resistor entre o pino 13 (Arduino) / 19 (físico) e o GND, e faça upload do clássico exemplo Blink. Se tudo estiver igual ao meu, logo o led começará a piscar ;-)

Comentar

Dos leds ao Arduino, ESP8266 e mais

Aprenda eletrônica com as experiências de um geek veterano dos bits e bytes que nunca tinha soldado um led na vida, e resolveu narrar para você o que descobre enquanto explora esse universo – a partir da eletrônica básica, até chegar aos circuitos modernos.

Por Augusto Campos, autor do BR-Linux e Efetividade.net.

Recomendados

Livro recomendado


Artigos já disponíveis

Comunidade Arduino

O BR-Arduino é integrante da comunidade internacional de entusiastas do Arduino, mas não tem relação com os criadores e distribuidores do produto, nem com os detentores das marcas registradas.

Livros recomendados