Erste Schritte mit den Mikrocontrollern ATtiny84 und 85
Die Mikrocontroller ATtiny 84 und 85 eignen sich für alle Projekte, bei denen es auf lange Akkulaufzeiten ankommt. So gelingt der Einstieg in die Programmierung.
![Erste Schritte mit den Mikrocontrollern ATtiny 84 und 85](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/6/6/1/9/9/6/breadboard-77e3f82e2ee03021.jpeg)
- Jan Mahn
Bei der Auswahl eines geeigneten Mikrocontrollers für eigene Projekte fällt die Wahl gern auf die bekanntesten Vertreter ihrer Art: ein Mitglied aus der Arduino-Familie oder einen ESP32 oder ESP8266. Beide sind jedoch vergleichsweise schwergewichtig. Die Arduinos vereinen auf der Platine neben dem Mikrocontroller selbst einen USB-Serial-Converter, Spannungswandler, Taster und LEDs. Dank ihrer Bauform eignen sie sich hervorragend für Experimente auf dem Breadboard und sind auch für Einsteiger gut zu verstehen. Für den Energieverbrauch sind die Zusatzkomponenten nicht ideal.
Die ESPs sind immer dann eine geeignete Wahl, wenn eine Verbindung mit einem WLAN hergestellt werden soll. Bei der Spannungsversorgung sind sie aber wählerisch: Fällt die Spannung nur kurz unter 3,2 Volt, verabschieden sie sich sofort mit einem Brownout-Fehler. Wer sie mit Batterien betreiben will, muss sich nach großen Lithium-Ionen-Akkus umschauen.
Wer für sein Mikrocontroller-Projekt eine möglichst kleine Lösung sucht, die selbst mit einer Knopfzelle oder zwei AA-Batterien lange läuft, sollte sich die ATtiny-Reihe von Atmel, vertrieben unter dem Markennamen AVR, ansehen. Die beliebtesten Vertreter sind der ATtiny84 und der ATtiny85. In diesem Artikel geht es um die Hardware- und Software-Grundlagen für eigene Projekte – am Beispiel einer blinkenden LED. Erste Elektronik- und Mikrocontroller-Erfahrungen, zum Beispiel mit einem Arduino, sind hilfreich.
Leistungsschau
Beide Mikrocontroller werden als nackte Chips verkauft und sind bei allen Elektronik-Lieferanten in Deutschland gut verfügbar. Für Bastelprojekte ist die DIP-Bauform die richtige Wahl. Die gute Nachricht: Die Chips kosten etwa 1 Euro. Beim Abziehen vom Sockel bricht gern mal ein Beinchen ab – großzügige Bevorratung ist also empfehlenswert. Wer auf Grundlage des Projekts später eine industriell gefertigte Platine plant, bekommt die ATtiny auch in SMD-Bauform, die wesentlich platzsparender ist.
ATtiny84 und 85 unterscheiden sich nur durch die Anzahl ihrer Pins und damit verbunden durch die Anzahl ihrer Ein- und Ausgänge. Beide 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, der für die meisten Projekte ausreichen dürfte, arbeiten die Chips in einem Spannungsbereich von 1,8 bis 5,5 Volt. Im Betrieb kommen sie mit 300 µA aus, im Tiefschlaf begnügen sie sich mit 0,1 µA.
Für die Firmware stehen 8 kByte Flash-Speicher zur Verfügung, der Entwickler muss sich aber mit 512 Byte SRAM begnügen – für Sensorik-Projekte meist kein Problem.
Der ATtiny85 hat acht Pins (zum Datenblatt). Neben GND und Spannungsversorgung ist Pin 1 als Reset-Pin für den Flash-Vorgang reserviert. Fünf GPIO-Pins (also als Ein- oder Ausgang) bleiben für eigene Anwendungen übrig. Drei davon können als 10-Bit-Analog-Digitalwandler genutzt werden. Mit Peripheriegeräten kommuniziert der ATtiny über I2C oder SPI – mit letzterem Verfahren sind aber schon vier der fünf GPIOs belegt.
Mehr Auswahlmöglichkeiten für die Pinbelegung bringt der große ATtiny84 mit (zum Datenblatt). Er hat 14 Pins, abzüglich GND, VCC und Reset bleiben 11 GPIOs übrig. Acht davon dienen auch als Analog-Digitalwandler. Nutzt man ein SPI-Gerät und braucht mehrere GPIOs, ist der ATtiny84 also die bessere Wahl – der preisliche Unterschied ist klein.
Arbeitsplatz einrichten: Hardware
Um ein eigenes Projekt mit dem ATtiny umzusetzen, sollten Sie sich ein paar Werkzeuge bereitlegen: Ein Breadboard, Jumperkabel, eine LED und ein 220 Ohm-Widerstand reichen für ein Blink-Beispiel aus. Zusammen mit den ATtinys sollten Sie gleich IC-Sockel bestellen. 14-polige für den ATtiny84 oder 8-polige für den ATtiny85.
Zum Überspielen der Programme auf den ATtiny brauchen Sie einen USB-Programmieradapter (In-System-Programmer, ISP), der über SPI mit dem Mikrocontroller kommuniziert. Solche gibt es ab 20 Euro unter dem Suchbegriff "ISP AVR". Wesentlich einfacher, in der Bastler-Werkstatt meist schon vorhanden, ist das Programmieren über einen Arduino Uno (oder einen seiner Klone).
Um diesen als ISP zu nutzen, braucht er eine passende Firmware, die Sie mit der Arduino-IDE schnell installieren können. Falls noch nicht installiert, laden Sie die kostenlose Software für Windows, macOS oder Linux herunter und installieren Sie sie.
Schließen Sie den Arduino Nano am USB-Port an und öffnen Sie das Programm. Navigieren Sie im Menü "Werkzeuge" zum Punkt "Board" und wählen Sie "Arduino/Genuino Uno". "Werkzeuge/Port" wählen Sie den letzten Vorschlag aus der Liste – sofern Sie nach dem Arduino keine weiteren Geräte angesteckt haben.
Die Firmware, die aus dem Arduino einen ISP für den ATtiny macht, finden Sie unter den Beispielen. Öffnen Sie im Menü "Beispiele" den Punkt "11.ArduinoISP" und dort den Sketch "ArduinoISP". Mit einem Klick auf den Pfeil nach rechts in der oberen Leiste lädt ihn auf den Arduino. Die Arduino-IDE hat damit erst einmal ausgedient.
ATtiny programmieren (5 Bilder)
![](https://heise.cloudimg.io/width/696/q50.png-lossy-50.webp-lossy-50.foil1/_www-heise-de_/imgs/71/2/6/6/2/5/3/9/flash_84-090490dfe2ca7025.png)
Jetzt müssen Sie Arduino und ATtiny mit Jumperkabeln verbinden. In der Bilderstrecke oben sehen Sie die Verkabelung für beide Varianten, außerdem die zugehörigen Schaltpläne. Die ATtinys sind so gedreht, dass Pin 1 unten links ist. Auf dem Chip befindet sich an diesem Pin eine kleine Markierung (aufgedruckt oder in Form einer Vertiefung). Beim großen ATtiny ist auf der Seite auch eine kleine Aussparung. Die Pins werden übrigens von Pin 1 aus gegen den Uhrzeigersinn durchnummeriert.
Arbeitsplatz einrichten: Entwicklungsumgebung PlatformIO
Der ATtiny kann theoretisch in der Arduino-IDE programmiert werden. Diese ist für Einsteiger optimiert und wird spätestens dann anstrengend, wenn man mit unterschiedlichen Boards hantiert, viele Bibliotheken als Abhängigkeiten nachlädt oder als erfahrener Entwickler einfach nur Code-Autovervollständigung vermisst, die die gewohnte IDE mitbringt.
Eine moderne Alternative, mit der sowohl erfahrene Entwickler als auch Einsteiger ihre Freude haben, heißt PlatformIO. Diese Umgebung unterstützt 30 Plattformen, darunter auch den ATtiny und basiert auf der Open-Source-IDE Visual Studio Code. Wie Sie PlatformIO auf Ihrem Betriebssystem in Betrieb nehmen, haben wir in einem kostenlosen Online-Artikel beschrieben.
Blink-Beispiel
Die Voraussetzungen für das erste Programm sind geschaffen. Neben dem oben gezeigten Aufbau, in dem der Arduino zum Überspielen des Programms dient, brauchen Sie ein weiteres Breadboard mit einer LED und einem 220 Ohm-Widerstand. Am besten platzieren Sie in beiden Breadboards einen passenden Sockel und stecken den ATtiny nach dem Flashen um.
Am ATtiny ist der Pin 7 (unten rechts) mit der Anode (langes Bein) der LED verbunden. Die Kathode ist über den Widerstand mit GND verbunden. Der ATtiny kann seinen Strom aus einer 3-Volt-Knopfzelle bekommen, Sie können auch den 3V3-Ausgang des Arduinos nutzen.
Das komplette Beispiel-Projekt müssen Sie nicht aus diesem Artikel herauskopieren. Sie finden das Projekt als ZIP-Datei zum Download und als Projektseite bei GitHub. Laden Sie den Ordner herunter und öffnen ihn mit Visual Studio Code (Datei/Ordner zu Arbeitsbereich hinzufügen).
Um das Blink-Programm im Unterordner "src" zu verstehen, müssen Sie zunächst einen Blick auf die Pinbelegung werfen. Der verwendete Pin ist in der Arduino-Welt Pin 6. Damit die LED im Sekundentakt blinkt, reicht folgender Code-Schnipsel:
#include <Arduino.h>
void setup() {
pinMode(6, OUTPUT);
}
void loop() {
digitalWrite(6,HIGH);
delay(1000);
digitalWrite(6,LOW);
delay(1000);
}
Zum Hochladen fehlt noch die zugehörige "platformio.ini" mit den Angaben zur verwendeten Umgebung. Für einen ATtiny84, der über den Arduino als ISP bespielt werden soll, sieht sie so aus:
[env:attiny84]
platform = atmelavr
board = attiny84
platform = atmelavr
framework = arduino
upload_protocol = stk500v1
upload_flags =
-P$UPLOAD_PORT
-b$UPLOAD_SPEED
; edit these lines
upload_speed = 19200
upload_port = IHR_SERIELLER_ANSCHLUSS
Hier ist nur eine Anpassung in der letzten Zeile nötig. Mit den meisten Boards schafft es PlatformIO, den seriellen Anschluss selbst zu finden. Beim Arduino als Programmieradapter funktioniert das leider nicht und Sie müssen für Ihr System herausfinden, welche Adresse der Arduino bekommen hat.
Unter Windows ziehen Sie den Arduino ab, öffnen eine Kommandozeile und führen mode
aus. Schließen Sie anschließend den Arduino an, wiederholen Sie den Befehl und vergleichen Sie die Ausgaben. Das neu hinzugekommene Gerät ist der Arduino – auf unseren Testsystemen landete er immer auf der Adresse "COM6". Tragen Sie diese (ohne Anführungszeichen) in der letzten Zeile ein.
Unter Linux funktioniert das gleiche Verfahren mit folgendem Befehl:
ls -la /dev/ttyACM*
Wenn Sie keine anderen Programmieradapter angeschlossen haben, bekommt der Arduino "/dev/ttyACM". Nutzer von macOS nutzen folgenden Befehl vor und nach dem Einstecken des Arduinor, um die Adresse herauszufinden:
ls /dev/cu.*
Der Arduino hat eine Adresse wie "/dev/cu.usbmodem146101".
Mit der Eintragung in der Datei "platform.io" sind Sie bereit für den Upload. Am unteren Rand finden Sie den Pfeil nach rechts – PlatformIO beginnt mit dem Kompilieren und lädt das Kompilat auf den ATtiny. Am Ende sollte das Terminal "Success" vermelden. Sie können den Chip herausnehmen, in den Blink-Aufbau umsetzen und diesen mit Strom versorgen.
Geschwindigkeitskontrolle
Die LED beginnt zu blinken – allerdings im falschen Takt. Statt sekündlich ein- und auszuschalten, läuft das Programm viel zu langsam. Eine Stoppuhr verrät: Der ATtiny braucht statt einer Sekunde (1000 Millisekunden) genau acht Sekunden. Der Fehler ist leicht erklärt: Die Arduino-Bibliothek, die Funktionen wie delay()
bereitstellt, geht davon aus, dass der Prozessor mit 8 MHz läuft. Stattdessen ist der ATtiny nur mit 1 MHz unterwegs. Um dem Programm mitzuteilen, wie schnell der Chip rechnet, reicht eine Zeile an beliebiger Stelle in der "platformio.ini":
board_build.f_cpu = 1000000L
Nach erneutem Kompilieren und Flashen blinkt die LED in der richtigen Geschwindigkeit. Die Arbeitsumgebung für das erste eigene ATTiny-Projekt ist bereit.
(jam)