zurück

ATtiny

25.03.2020

Der ATtiny wird oft als alternativer Mikrocontroller zum ATMega (z.B. Arduino UNO) oder ESP32 verwendet, wenn Platz bzw. Strom limitiert sind. Die ATTiny-Familie besitzt etliche Typen an Controllern, die beliebtesten sind der ATtiny84A und der ATtiny85. Sie unterscheiden sich nur durch die Anzahl ihrer Pins und damit durch die Anzahl ihrer Ein- und Ausgänge.

Atmel ATtiny85 DIP-8
Abb.: Der Atmel ATtiny85 als DIP8-Version

ATtiny84A und ATtiny85 laufen im Auslieferungszustand mit 1 MHz. Der Takt kann auf bis zu 8 MHz erhöht werden, mit einem externen Taktgeber sind auch 16 MHz möglich. Bei einem Takt von 1 MHz -ausreichend für die meisten Anwendungen- arbeiten die Chips in einem Spannungsbereich von 1,8V bis 5,5V. Im Betrieb kommen sie mit 300 µA aus, im Tiefschlaf sogar nur mit 0,1 µA.

Der ATtiny85 hat 8 Pins, wobei Pin 8 (als VCC), Pin 4 (als GND) und Pin 1 (als RESET) reserviert sind. Damit bleiben 5 GPIO-Pins für eigene Anwendungen übrig, wobei 3 davon als Analog-Digitalwandler genutzt werden können.
Mehr Auswahlmöglichkeiten für die Pinbelegung bringt der große ATtiny84 mit. Er hat 14 Pins, abzüglich GND, VCC und RESET, womit 11 GPIOs zur freien Verfügung stehen. 8 davon dienen auch als Analog-Digitalwandler.

Etlichen der ICs aus der ATTiny-Familie fehlt -im Gegensatz zu dem ATmega- ein Hardwaremultiplizierer, d.h. jede Multiplikation muss also in der Software ausgeführt werden!

Vergleich einiger ATtiny-Typen

Typ Flash EEPROM SRAM GPIO-Pins
ATtiny13A 1kB 64Bytes 64Bytes 5
ATtiny84A 8kB 512Bytes 512Bytes 11
ATtiny85 8kB 512Bytes 512Bytes 5

Anschlüsse

Anschlüsse des ATtiny13A
Anschlüsse des ATtiny24/44/84
Anschlüsse des ATtiny25/45/85

Verwendete Bauteile

Programmierung

Da der ATtiny nicht Teil eines Entwicklungs-Boards wie der Arduino ist, sondern als blanker IC ausgeliefert wird, so muss bei der Programmierung mit einem ISP ("In-System-Programmer") gearbeitet werden, der über SPI mit dem ATtiny-Mikrocontroller kommuniziert.
Solche ISPs gibt es günstig zu kaufen (Suchbegriff "ISP AVR"). Eine andere Möglichkeit ist es, einen Arduino Uno (oder einen kompatiblen Clone) als ISP zu verwenden. Die letztere Möglichkeit wird im Folgenden vorgestellt:

Arduino Uno als ISP programmieren

Zunächst wird der Arduino Uno von allen Verbindungen an seinen GPIOs gelöst und per USB mit dem PC verbunden. Nun lädt man in der Arduino-IDE über den Menüpunkt Datei » Beispiele » 11.ArduinoISP den Sketch ArduinoISP. Dieser wird kompiliert und auf den Arduino hochgeladen.
Den Sketch gibt es hier auch noch alternativ zum Herunterladen:

ArduinoISP.ino [8 kB]

Arduino als ISP aufbauen

Je nachdem, welcher ATtiny-Typ programmiert werden soll, wird einer der folgenden Schaltungen verwendet:

Aufbau zur Programmierung eines ATtiny84 mit dem Arduino Uno als ISP
Abb.: Aufbau zur Programmierung eines ATtiny84 mit dem Arduino Uno als ISP
Aufbau zur Programmierung eines ATtiny85 mit dem Arduino Uno als ISP
Abb.: Aufbau zur Programmierung eines ATtiny85 mit dem Arduino Uno als ISP

ATtiny als Board auswählen

Damit nun der ATtiny als Board ausgewählt und verwendet werden kann, muss zunächst eine zusätzliche Konfiguration für den Board-Manager vorgenommen werden:
Im Menüpunkt Datei » Voreinstellungen wird im Feld Zusätzliche Boardverwalter-URLs folgende URL hinzugefügt (kann zu evtl. anderen vorhandenen URL mit einem Komma separatiert werden):
https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Im Menüpunkt Werkzeuge » Board » Boardverwalter muss nun in der Liste nach dem .. gesucht werden und dies wird dann installiert:

Boardverwalter attiny installieren
Abb.: Der Boardverwalter "attiny" wird installiert

Nun kann das entsprechende Board im Menüpunkt Werkzeuge » Board mit seinen Konfigurationen eingestellt werden:

Board auswählen
Abb.: Das gewünschte ATtiny-Board wird in der Arduino-IDE ausgewählt.
Board konfigurieren
Abb.: Das gewünschte ATtiny-Board wird in der Arduino-IDE konfiguriert.

Nun wird im Menüpunkt Werkzeuge » Programmer noch von "AVRISP mkII" zu "Arduino as ISP" umgeschaltet, damit nicht der Arduino selbst beschrieben wird, sondern das Ziel-Board: der ATtiny.

Nun sind alle Vorbereitungen getroffen und der ATtiny kann wie der Arduino programmiert werden...

Schaltung mit dem ATtiny84A

Sketch

Die Test-Schaltung soll 5 LEDs in verschiedenen Takt-Zyklen blinken lassen (300ms, 600ms, 900ms, 1200ms und 1800ms). Dafür werden die Arduino-Pins 6, 7, 8, 9 und 10 auf dem ATtiny84A verwendet.

#define AMOUNT_LEDS 5

const byte leds[AMOUNT_LEDS] = {10, 9, 8, 7, 6};
unsigned long lastAction[AMOUNT_LEDS];

void setup()
{
    for(byte i=0; i<AMOUNT_LEDS; i++) {
        pinMode(leds[i], OUTPUT);
        lastAction[i] = 0;
    }
}

void loop()
{
    for (byte i=0; i<AMOUNT_LEDS; i++) {
        if (millis()-lastAction[i] > (i+1)*300) {
            lastAction[i] = millis();
            digitalWrite(leds[i], !digitalRead(leds[i]));
        }
    }
}

Der ATtiny84A wird nun in den ISP-Aufbau gesetzt und der Sketch wie gehabt kompiliert und hochgeladen.

Aufbau der Schaltung

Nun kann der ATtiny84A dem Programmier-Aufbau entnommen und in die folgende Schaltung eingesetzt werden:

Aufbau für den Test-Sketch des ATtiny84A
Abb.: Aufbau der Test-Schaltung für den ATtiny84A

Resultat

So (oder so ähnlich) sollte dann die fertige Schaltung mit dem programierten ATtiny84A aussehen. Statt einem 18650-LiPo habe ich eine CR3230-Knopfzelle ausprobiert. Sie reicht aus, um die Schaltung ausreichend zu versorgen.

Programmer als Arduino-Shield

Wenn man viel mit dem ATtiny arbeiten möchte, bietet sich ein eigens erstelltes Arduino-Shield als Programmer an. Das von mir selbst erstellte Shield ist hier frei herunterzuladen. Damit kann sowohl der ATtiny84 als auch der ATtiny85 programmiert werden. Vorsicht: nur immer einen der beidem Mikrocontroller einsetzen und niemals beide gleichzeitig!

Gerber-Dateien für ATtiny-Programmer (Arduino shield) [12kB]
ATtiny-Programmer als Arduino-Shield
Abb.: ATtiny-Programmer als Arduino-Shield

Weiterführende Links