Programando o ATtiny85 com Arduino

O microcontrolador Atmel ATtiny85 é mais modesto que o Atmel ATmega328 que é muito utilizado em algumas placas da plataforma Arduino como a placa Arduino UNO. Já o ATtiny85 pode ser utilizado em muitas aplicações que não necessitam de muita memória e muitos pinos para funcionar.

O microcontrolador Atmel ATtiny85 é ideal em projetos que exijam baixo consumo de energia. Com apenas uma bateria de 3 Volts, dessas utilizadas na alimentação de controle remoto de automóveis, pode funcionar por meses.

Embora ele só, sem uma placa de suporte, não passe de um simples microcontrolador assim como o ATmega328 fora da placa Arduino, podemos transforma-lo em um pequeno Arduino para ser utilizado em diversas aplicações. Mas isso é assunto para uma outra postagem 😊.

Neste tutorial vamos adquirir o conhecimento necessário para programar nosso microcontrolador ATtiny85 utilizando Arduino UNO.

A circuitaria

Antes de verificamos o circuito, vamos dar uma olhada nos pinos do ATtiny85. É um microcontrolador de 8 bits, com uma memória flash (memória de programa) de 8KB. Composto também de uma memória EEPROM de 512 bytes (serve para armazenar dados de forma não volátil) e uma memória SRAM também de 512 bytes (memória para processar variáveis).

Conforme imagem acima, o ATtiny contém oito pinos, sendo que dois desses pinos 8 (VCC) e 4 (GND) são utilizados para alimentação do microcontrolador. Sobram seis pinos para utilizarmos em nossas aplicações.

Suponha que você necessite de um oscilador externo, lá se vão mais dois pinos 2 (XTAL1) e 3 (XTAL2). Digamos que se queira um reset em minha aplicação e assim perdemos mais um pino 1 (RESET) sobrariam 3 pinos 5, 6 e 7 para configurar como entrada ou saída sendo que apenas um desses três pinos, o pino 7 poderia ser configurado como analógico.

Para gravar o código na memória de programa do ATtiny85, vamos usar os pinos 1, 5, 6 e 7 do microcontrolador, conectados nas portas de 10, 11, 12 e 13 respectivamente do Arduino, conforme imagem abaixo. A alimentação de 5 Volts necessária para o microcontrolador será fornecida pelo próprio Arduino.

Podemos observar no circuito um capacitor de 10uF entre os pinos GND e RESET do Arduino. Esse capacitor serve para impedir que o Arduino reinicie durante o upload do código para o microcontrolador ATtiny.

Preparar o Arduino IDE para o ATtiny

Vamos agora configurar a IDE para gravação do nosso código no ATtiny85.

Entre na Arduino IDE e em Arquivo > Preferências, procure o campo URLs Adicionais para Gerenciadores de Placas e insira a seguinte URL: 

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

em seguida clique em “OK”. Conforme tela abaixo.

agora vá no menu Ferramentas > Placa > Gerenciador de placas:

Na tela seguinte, digite attiny no campo superior e selecione attiny by David. A. Mellis, clicando em seguida em Instalar:

Para finalizar vamos certificar que os microcontroladores ATtuny foram realmente configurados e aparecem na lista:

E com isto já temos o IDE pronta, vamos ver como preparar o Arduino para gravar um Attiny85

Configurando o Arduino Uno como ISP

Vamos agora carregar o código que vai possibilitar que o Arduino Uno funcione como gravador para o nosso ATtiny85. Vá até o menu Arquivo > Exemplos > ArduinoISP e selecione o programa ArduinoISP:

Carregue esse exemplo para a memória do Arduino UNO e com isto já está preparado nosso gravador.

Vamos ao exemplo com ATtiny85

Agora praticamente já está tudo pronto para o nosso primeiro exemplo utilizando o microcontrolador Attiny85. Vamos selecionar na IDE em Ferramentas o Processador: “ATtiny85”, a frequência de operação Clock: “Internal 8 MHz” do microcontrolador e a configuração do Arduino como Programador: “Arduino as ISP” conforme imagem abaixo:

Nesta mesma tela, clique em Gravar Bootloader que é um código de inicialização do nosso microcontrolador ATtiny85. Esse código seta alguns modos de funcionamento de nosso ATtiny85, por exemplo, o Clock interno de 8MHz que selecionamos na IDE.

Utilizando o código abaixo para realizar o teste do nosso gravador, que é o exemplo BLINK da IDE do Arduino. Modificamos apenas o pino utilizado como saída para o pino 0,

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

#define LED_BUILTIN 0 

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

ao finalizar o upload, o LED que está conectado ao pino 0 (fisicamente é o pino 5 do microcontrolador) piscará:

Assim finalizamos a montagem do nosso gravador de ATtiny85 utilizando o Arduino UNO. Breve traremos mais projetos utilizando esse microcontrolador 😊.

Artigos relacionados

Respostas