Conhecendo melhor o ATtiny85, ATtiny2313, ATtiny84 e o histórico ATmega8

O minúsculo ATtiny85 tem primos com mais pinos e recursos comparáveis (ou não) – e aproveitamos para inspecionar o ATmega8, do primeiro Arduino.

O ATtiny85 é popular como microcontrolador alternativo para projetos no estilo do Arduino, porque oferece boa parte dos recursos dos microcontroladores dos próprios Arduinos, em um tamanho pequeno e com pinos limitados que estimulam os projetos minimalistas, e justificam diversos aprendizados motivados pela escassez de recursos.

Ele é aquele chip com 8 terminais, na placa da direita da imagem acima. O chip da placa da esquerda, com 20 terminais, é um ATtiny2313, bem maior mas com bem menos recursos que o seu primo. Entre eles existe uma alternativa interessante: o ATtiny84, com mais pinos que o ATtiny85 (e menos do que o ATtiny2313), mas sem abrir mão dos recursos.

Todos os 3 mencionados acima podem ser programados usando a IDE do Arduino. E já que falamos no Arduino, e eu tinha um ATmega8 à mão, incluí na lista dos microcontroladores que iremos analisar hoje também este, que foi o adotado nas versões iniciais do Arduino, na metade da década passada.

Conhecendo o ATtiny85

Para falar dos outros 2 ATtinys, adotarei como referência o ATtiny85, microcontrolador com 8 pinos físicos que, apesar do pequeno tamanho, tem recursos bem interessantes: pinos digitais, entradas analógicas, suporte a PWM, 8KBytes de flash para armazenar programas, e mais.

O ATtiny85 é popular como alternativa para projetos feitos com a IDE do Arduino. Existem até placas de desenvolvimento compatíveis com o Arduino feitas com ele (como o Digispark). Eu já descrevi como programá-lo usando a IDE do Arduino, e até como desenvolver um shield para facilitar essa programação.

Para desenvolver no ATtiny85 projetos baseados no Arduino, convém identificar as principais diferenças entre ele e o ATmega328, que é o microcontrolador dos Arduinos mais populares:

  ATtiny85 ATmega328
Pinos físicos 8 28
Clock interno 1 a 8 MHz 1 a 8 MHz
Clock externo máximo 20 MHz 20 MHz
Flash (kB) 8 32
SRAM (bytes) 512 2048
EEPROM (bytes) 512 1024
Entradas analógicas (ADC) 4 6
Saídas PWM 2 6
Portas digitais 6 23
UART (“serial por hardware”) não sim
I2C sim (via USI) sim
SPI sim (via USI) sim

Observações sobre a tabela acima:

  1. As contagens de entradas analógicas e de portas digitais do ATtiny85 consideram que o pino RESET tenha sido desativado. Se ele estiver com sua funcionalidade ativa — o que normalmente é o ideal durante o desenvolvimento e testes —, ambas as contagens devem ser subtraídas em 1 unidade.
  2. O ATtiny85 não tem serial (UART) em hardware, mas pode ter funcionalidade de serial normal, mas esse suporte é por software, usando a biblioteca SoftwareSerial.

Também para usar como referência, o nosso já tradicional sketch de identificação traz as seguintes informações sobre um ATtiny85 que estava aqui na bancada:

Atmega chip detector.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 1E 93 0B 
Processor = ATtiny85
Flash memory size = 8192 bytes.
Clock calibration = A6 
No bootloader support.

Vale mencionar que, embora a informação sobre não haver suporte a bootloader no ATtiny85 esteja oficialmente correta (e valha para a família ATtiny em geral), faz tempo que a comunidade encontrou maneiras de instalar bootloaders em ATtinys, e isso é essencial para facilitar o funcionamento de placas de desenvolvimento para eles com suporte a USB, como o já mencionado Digispark.

Já o descritor de fuses traz a seguinte listagem:

Atmega fuse calculator.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x93 0x0B 
Processor = ATtiny85
LFuse = 0xE2 
HFuse = 0xDF 
EFuse = 0xFF 
Lock byte = 0xFF 
Clock calibration = 0xA6 
Self Programming Enable................. [ ]
External Reset Disable.................. [ ]
Debug Wire Enable....................... [ ]
Enable Serial (ICSP) Programming........ [X]
Watchdog Timer Always On................ [ ]
Preserve EEPROM through chip erase...... [ ]
Divide clock by 8....................... [ ]
Clock output............................ [ ]
Start-up time: SUT0: [X]  SUT1: [ ] (see datasheet)
Clock source: calibrated internal oscillator.
Brownout detection at: disabled.

Usando as informações acima como referência, vamos explorar outros microcontroladores a seguir.

Conhecendo o ATtiny2313

Acima (e também no artigo anterior) eu fiz uma leitura de configuração do diminuto (para os padrões DIP, ao menos) ATtiny85, de 8 pinos – e agora vou explorar as leituras de um primo maior dele: o ATtiny2313.

O ATtiny2313 é fisicamente bem maior: ele tem 20 pinos físicos, dos quais até 18 podem estar disponíveis como pinos de entrada e saída digital (o ATtiny2313 não tem entrada analógica), e 4 oferecem PWM.

A pinagem é parecida com a do ATtiny85: o Reset, GND e VCC estão nos mesmos quadrantes físicos, e o trio de pinos da comunicação SPI (SCK, MISO, MOSI) está igualmente colado no pino VCC.

Assim como ocorre com o ATtiny85 (cuja programação eu descrevi em um artigo anterior), existe suporte para programar o ATtiny2313 usando a IDE do Arduino.

Mas hoje não vamos programá-lo, e sim explorar sua configuração. Começando pela leitura de identificação básica:

Atmega chip detector.
Written by Nick Gammon.
Version 1.13
Entered programming mode OK.
Signature = 1E 91 0A 
Processor = ATtiny2313A
Flash memory size = 2048 bytes.
Lock byte = FF 
Clock calibration = 4D 
No bootloader support.

O detalhe mais interessante da listagem acima, para mim, é um elemento essencial para comparar o ATtiny2313 com o ATtiny85: embora seja fisicamente muito maior, o ATtiny2313 tem meros 2K de memória flash (para armazenamento de programas), 1/4 do oferecido pelo ATtiny85.

Vamos agora aos fuses:

Atmega fuse calculator.
Written by Nick Gammon.
Entered programming mode OK.
LFuse = 0x64 
HFuse = 0xDF 
EFuse = 0xFF 
Lock byte = 0xFF 
Clock calibration = 0x4D 
Self Programming Enable................. [ ]
Debug Wire Enable....................... [ ]
Preserve EEPROM through chip erase...... [ ]
Enable Serial (ICSP) Programming........ [X]
Watchdog Timer Always On................ [ ]
External Reset Disable.................. [ ]
Divide clock by 8....................... [X]
Clock output............................ [ ]
Start-up time: SUT0: [X]  SUT1: [ ] (see datasheet)
Clock source: low-frequency crystal.
Brownout detection at: disabled.

Nada de inédito aqui: os fuses são os mesmos que apareceram na listagem do ATtiny85, embora estejam em outra ordem e com valores diferentes. Chamou minha atenção que este ATtiny2313 estava configurado para usar clock externo.

Conhecendo o ATtiny84

Já vimos que o ATtiny2313 é bem maior que o ATtiny85, mas também é bem mais limitado quanto aos recursos: tem só 1/4 da capacidade de armazenar programas, e não tem pinos de entrada analógica, por exemplo.

O ATtiny84, lançado 3 anos depois do ATtiny85, traz um ponto de equilíbrio diferente. Ele também é maior (14 pinos físicos, contra 8 do ATtiny85, e 20 do ATtiny2313), mas não abre mão das funcionalidades (incluindo as entradas analógicas), nem do tamanho da memória flash para armazenar programas.

A pinagem do ATtiny84 é bem diferente da dos seus 2 primos que vimos acima. VCC e GND estão ambos "no alto", RESET está no meio, e o trio de pinos da comunicação SPI está separado.

Quanto ao restante, as suas similaridades com o ATtiny85 são muito maiores do que suas diferenças ;-)

Conhecendo o ATmega8

O ATmega8 foi muito importante para a história do Arduino, tendo sido o microcontrolador central dos seus modelos originais, incluindo o protótipo inaugural, em 2005.

Veja acima um modelo histórico do Arduino, com o ATmega8, e ainda com entrada serial pré-USB e um pino de 9V, entre outras diferenças em relação aos modelos de hoje.

A sua pinagem é praticamente idêntica à de seus sucessores ATmega168 e ATmega328, usados nos Arduinos posteriores.

  ATmega8A ATmega168P ATmega328P
Bootloader Sim Sim Sim
Flash 8192 16384 32768
SRAM 1024 1024 2048
EEPROM 512 512 1024
Clock máximo (MHz) 16 20 20
Interrup. externas 2 24 24
picoPower Não Sim Sim
Vcc 2,7 a 5,5 1,8 a 5,5 1,8 a 5,5
Comparador In 1 1 1
Comparador Out 3 6 6
PWM 3 6 6

Sua arquitetura interna também é bastante similar, embora você possa conferir na tabela acima as suas limitações: ele tem menos memória (flash, SRAM e EEPROM), menor limite de clock, menos interrupções externas, menor amplitude de tensão e menor quantidade de pinos PWM que os seus sucessores.

Para completar, hoje em dia ele é mais caro, embora existam muitos deles perdidos pelas gavetas das bancadas pelo mundo, e ainda sendo incluídos em projetos de hobby.

Eis o que o descritor de configuração de microcontroladores do nosso artigo anterior tem a dizer sobre um ATmega8A que estava à mão aqui na bancada:

Atmega chip detector.
Written by Nick Gammon.
Version 1.13
Entered programming mode OK.
Signature = 1E 93 07 
Processor = ATmega8A
Flash memory size = 8192 bytes.
Lock byte = FF 
Clock calibration = B3 
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 2048 bytes starting at 1800
No bootloader (all 0xFF)

Nada de muito especial: o modelo foi reconhecido, e está com o bootloader desativado. Essa é a configuração original, de fábrica.

Vamos agora ao descritor de fuses, também o mesmo do artigo anterior:

Atmega fuse calculator.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x93 0x07 
Processor = ATmega8A
LFuse = 0xE1 
HFuse = 0xD9 
EFuse = 0xFF 
Lock byte = 0xFF 
Clock calibration = 0xB3 
External Reset Disable.................. [ ]
Watchdog Timer Always On................ [ ]
Self Programming Enable................. [X]
Oscillator Options...................... [ ]
Preserve EEPROM through chip erase...... [ ]
Boot into bootloader.................... [ ]
Brown out detector level................ [ ]
Brown out detector enable............... [ ]
Bootloader size: 2048 bytes.
Start-up time: SUT0: [X]  SUT1: [ ] (see datasheet)
Clock source: calibrated internal oscillator.

Aqui encontrei algumas diferenças entre os fuses do ATmega8 e os que eu havia encontrado quando observei a configuração de seu sucessor ATmega32: no ATmega8 estão listados fuses referentes a opções do oscilador (para escolher entre faixas de operação para o clock) e ao detector de baixa tensão (brown-out).

Outra observação interessante exemplifica um fator importante da configuração default desses microcontroladores: eles saem de fábrica configurados para dispensar clock externo, funcionando com seu próprio oscilador.

Tudo que escrevi acima é referente ao ATmega8A, variante atualizada do ATmega8 original. Comparado com o ATmega8, o ATmega8A consome 45% menos corrente (em modo ativo) quando opera a 5V, além de incluir algumas outras diferenças referentes principalmente a tensões de operação.

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