Table of Contents

ATtiny Mikrokontroller und Arduino IDE

Die ATtiny Mikrokontroller aus der tinyAVR Modellreihe von Atmel bieten für spezialisierte Projekte wo nicht alle Funktionen oder über 8KB Speicher benötigt werden eine stromsparende und kostengünstige Alternative zu den ATmega Mikrokontrollern der megaAVR Modellreihe von Atmel wie z.B. 328, 1280, 2560 etc. welche in den Arduino Boards eingesetzt werden.

Dank dem Board Manager der seit v1.6.3 in der Arduino IDE eingebaut ist können die etwas kleineren ATtiny Mikroprozessoren auch problemlos mit der Arduino IDE programmiert werden. Leider wird die Originale Implementierung der Arduino-Tiny nicht mehr weiterentwickelt. Es gibt jedoch einen “Fork” welcher die meisten ATtiny Mikroprozessoren direkt in der Arduino IDE unterstützt.

- https://github.com/SpenceKonde/ATTinyCore

Die alten Quellen finden immer noch die Arduino IDE < 1.6.3 Verwendung:

  1. Arduino-Tiny 1) (Wenn Du Unterstützung für den ATtiny1634 benötigst, verwende bitte den Clone von microtherion)

Übersicht ATtiny Mikrokontroller

Im folgenden stellen wir die ATtiny Mikrokontroller welche sich für einen Einsatz mit der Arduino IDE eignen kurz vor:

MCU Memory Flash Memory EEPROM Pins I/O Pins ADC Pins nutzbare PWM UART SPI TWI (I2C) Max. Frequenz VCC Datenblatt
ATtiny13 64Bytes 1kB 64Bytes 8 6 4 2 0 0 0 20MHz 1.8-5.5V Datenblatt
ATtiny2313 128Bytes 2kB 128Bytes 20 18 0 4 1 2 1 20MHz 1.8-5.5V Datenblatt
ATtiny24 128Bytes 2KB 128Bytes 14 12 8 4 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny25 128Bytes 2KB 128Bytes 8 6 4 3 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny4313 256Bytes 4kB 256Bytes 20 18 0 4 1 2 1 20MHz 1.8-5.5V Datenblatt
ATtiny44 256Bytes 4kB 256Bytes 14 12 8 4 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny45 256Bytes 4kB 256Bytes 8 6 4 3 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny84 512Bytes 8kB 512Bytes 14 12 8 4 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny85 512Bytes 8kB 512Bytes 8 6 4 3 0 1 1 20MHz 1.8-5.5V Datenblatt
ATtiny1634 1024Bytes 16kB 256Bytes 20 18 12 2 2 1 1 12MHz 1.8-5.5V Datenblatt

Das Muster ist schnell zu erkennen, die erste Zahl nach dem “ATtiny” steht für die Anzahl Kilobytes (1, 2, 4 und 8), die zweite Zahl gibt die Pinzahl an (x4 = 14Pin, x5 = 8Pin).

Mit dieser Tabelle sollte es Dir leicht fallen, den für Dein Projekt richtigen ATtiny Mikrokontroller auszuwählen.

Vorbereiten der Arduino IDE

Arduino IDE ab 1.6.3

Dank dem Board Manager ist es sehr einfach die Arduino IDE für die Attiny Programmierung zu nutzen. Dazu einfach unter den Einstellungen die “Zusätzliche Board Manager URL” angeben von der SpenceKonde Implementierung:

http://drazzy.com/package_drazzy.com_index.json

Danach einfach den Board Manager unter “Tools-Boards” starten und die gewünschte Attiny Bibliothek installieren.

Danach stehen alle installierten Attiny Boards zur Auswahl zur Verfügung.

Der “Programmer” muss auch noch ausgewählt werden. Da ich über deinen Arduino ISP programmier habe ich “Arduino/Leo as ISP (Attiny Modern)” ausgewählt.

Arduino IDE kleiner 1.6.3

Es ist kein Problem beide der genannten ATtiny Erweiterungen gleichzeitig installiert zu haben, wie in der Fussnote erwähnt heisst das Verzeichnis der MIT Implmentation attiny und das der Googlecode tiny. Wir installieren in folgendem Beispiel beide, wenn Du sicher bist, dass Du nur eine benötigst/willst, kannst Du den jeweils anderen Teil natürlich überspringen.

Windows und Linux

  1. Beende die Arduino IDE wenn sie gestartet ist
  2. Finde Deinen Sketchbook Ordner und erstelle darin einen Ordner namens hardware. (Unter Menu Datei Einstellungen)

Für tiny:

  1. Lade das zugehörige http://code.google.com/p/arduino-tiny/ Archiv für tiny herunter.
  2. Entpacke nun das Archiv für tiny in den neu erstellten Ordner hardware.
  3. Datei “Prospective Boards.txt” in Boards.txt umbenennen
  4. Nur für Arduino IDE < 1.0: Wenn Du nicht einen Arduino mit ArduinoISP (siehe weiter unten) zum Upload verwendest, passe in der Datei hardware/tiny/boards.txt für die gewünschten Boards den Paramter ATTINY-NAME.upload.using= an (ATTINY-NAME ist z.B. attiny84at8 für einen ATtiny84 @ 8MHz)

Für attiny:

  1. Lade nun das Archiv für attiny herunter.
  2. Entpacke nun das Archiv für attiny in den neu erstellten Ordner hardware.

Wenn Du das gewünschte Archiv oder beide entpackt hast, kannst Du die Arduino IDE wieder starten, unter Tools | Boards finden sich dann die folgenden Boards oder ein Teil davon (in diesem Fall wurden beide Archive entpackt):

Arduino IDE Screenshot

Die Board-Definitionen mit einem @ stammen von der tiny Implementation, die ohne von der attiny Implementation.

Verwendbare Funktionen auf dem ATtiny

Für die Verwendung mit dem ATtiny stehen Ihnen nun folgende Funktionen zur Verfügung (und natürlich auch alle Libraries die mit diesen Funktionen auskommen und deren Verwendung die Speichergrösse des verwendeten ATtiny Chips nicht überschreitet):

Hinweis: Nicht alle zeitabhängigen Funktionen wie z.B. delayMicroseconds() arbeiten mit allen Taktfrequenzen korrekt. 3)

ATtiny mit Arduino IDE programmieren

Mit einem geeigneten Programmierer können nun bereits Sketche auf den ATtiny Chip geladen werden. Am einfachsten geht dies mit einem Arduino Board als ISP mit dem ArduinoISP Sketch, aber auch jeder andere Programmierer wie z.B. USBtiny oder einem Pocket AVR Programmer.

ATtiny mit ArduinoISP programmieren

Verbindung ATtiny mit Arduino ISP

Kondensator zur Verzögerung

Der Kondensator am Reset Pin des Arduino sorgt dafür, dass der Arduino nicht resettet wenn der Upload startet. Dies äussert sich durch die folgende Fehlermeldung in der Arduino IDE:

avrdude: stk500_getsync(): not in sync: resp=0x15

Hinweis: Der Kondensator wird offenbar nur mit Arduino UNO immer benötigt. Wird ein Duemilanove eingesetzt gehen die Meinungen weit auseinander… :-P In Kürze: Wenns Probleme gibt unbedingt mit Kondensator - nützts nix, schads nix! 4)

Hinweis: Der Arduino Leonardo eignet sich erst ab Arduino IDE 1.0.3 für die Verwendung als ISP!

Für ATtiny X4 (24, 44, 84):
Arduino Pin ATtiny Pin
MOSI D11 7
MISO D12 8
SCK D13 9
Reset D10 4

Arduino als ISP für den ATtinyX4

Für ATtiny X5 (25, 45, 85):
Arduino Pin ATtiny Pin
MOSI D11 5
MISO D12 6
SCK D13 7
Reset D10 1

Arduino als ISP für den ATtinyX5

Wähle den folgenden Programmierer unter Tools | Programmer > Arduino as ISP.

ATtiny mit USB ISP programmieren

Verbindung ATtiny mit USB ISP

Verwende die obengenannten Anschlussbelegungen um die MOSI, MISO, SCK und Reset-Leitungen mit Deinem Programmierer zu verbinden.

Wähle den eingesetzten Programmierer unter Tools | Programmer.

Spezielle Libraries für ATtiny

Es existieren einige I2C Libraries für ATtiny (die Standard Wire Library kann nicht verwendet werden!), jedoch mit Einschränkungen:

Library I2C Master I2C Slave unterstützte ATtiny unterstütze Taktfrequenz
I2C (master and slave) X X ATtiny85 1MHz, 8MHz
TinyWireS X ATtiny2313
ATtiny25/45/85
ATtiny44/84
und weitere
8MHz
SPI ATtiny84/? 8/16MHz
RF24 (nRF24L01+ modules) ATtiny84/? 8/16MHz
RF24Network(nRF24L01+ modules) ATtiny84/? 8/16MHz

ATtiny Serial Debugging

Die tiny Implementation bietet ein spezielles Debugging mit einer seriellen Einwegschnittstelle - der ATtiny kann nur Daten senden, aber nicht empfangen.

Dazu einfach das FTDI Modul mit dem ATtiny verbinden und in der Arduino IDE den Serial Monitor starten.

Bei den ATtinyX4 Modellen befindet sich der TinyDebug Port für die Ausgabe auf Pin 2 (PB0), bei den ATtinyX5 Modellen auf Pin 2 (PB3). Dieser Port wird dann mit dem RX Port vom FTDI Modul verbunden.

ATtinyX4 TinyDebug Anschluss

Die Verwendung von TinyDebug ist dabei identisch mit der ganz normalen Syntax der Serial-Klasse - ausgenommen natürlich die Funktionen zum Empfangen von Daten:

void setup() {
  Serial.begin(9600); 
  Serial.println("Gestartet");
}
 
void loop() {
  Serial.print("Laufzeit: ");
  Serial.print(millis()/1000);  
  Serial.print("s");
  delay(1000);
}

Hinweise & Tipps

Taktfrequenz einstellen / Bootloader brennen

Alle der vorgestellten ATtiny Mikrokontroller können mit 1MHz oder 8MHz mit dem internen Oszillator getaktet werden oder aber mit einer anderen Frequenz wie z.B. 20MHz mit einem externen Oszillator. Um dem ATtiny Chip mitzuteilen welche Taktfrequenz gewünscht ist müssen einmalig gewissen Fuses gesetzt werden. Dies wird erreicht indem man das entsprechende getaktete Board unter Tools | Board anwählt und dann mit dem Menupunkt Tools | Burn Bootloader die Fuses auf dem ATtiny einmalig setzt. Defaultmässig werden die meisten ATtiny auf 1MHz gesetzt ausgeliefert, so dass bei der Verwendung auf 1MHz dieser Vorgang beim erstmaligen Gebrauch des Chips ausfallen kann.

Bootloader ??

Man darf sich hier aber nicht täuschen lassen, die ATtiny enthalten auch nach diesem Vorgang keinen Bootloader wie z.B. der ATmega328 auf einem Arduino Board. Die Programmierung des Boards wird also immer über einen ISP-Programmer erfolgen (z.B. ein Arduino Board mit dem ArduinoISP Sketch, oder ein Programmierer wie USBtiny oder dem Pocket AVR Programmer).

Tunen/Kalibrieren des internen Oszillators

Für viele Anwendungen reicht die Genauigkeit des internen Oszillators vollständig aus die bei rund 10% liegt. Dies hat vor allem auch einen Einfluss auf die serielle Kommunikation. So liegt die maximale Baudrate bei einer Abweichung von 4.5% bei 19200 5) und reduziert sich bei steigender Abweichung natürlich. Mit dem Tiny Tuner besteht nun die Möglichkeit diese Abweichung zu messen und mit einer Korrektur/Drift im Sketch anzugleichen. Dies geschieht unter der Annahme, dass ein sendendes Terminal wie z.B. ein Computer eine hohe Taktgenauigkeit aufweist. Der TinyTuner Sketch misst also ob ein durch 8 Bits definiertes Zeichen zu schnell oder zu langsam oder genau richtig ankommt.

Verwendung des Tiny Tuner

Nach dem Herunterladen des Tiny Tuners wird das Archiv wie eine Arduino Library in das Verzeichnis libraries entpackt und die Arduino IDE neugestartet. Unter File | Examples | TinyTuner stehen nun verschiedene Sketches bereit mit welchen die internen Oszillatoren gemessen und demensprechend später im eigenen Programm angepasst werden können.

Die Beispiele enthalten alle komplette Instruktionen wie die Messung auszuführen ist und welche Anpassung im eigenen Programm nötig sind um die gemessene Abweichung zu korrigieren.

Hinweis zum Betrieb mehrere Arduino IDE Versionen parallel

Wenn Du mehrere Versionen der Arduino IDE installiert hast und verwendest, empfiehlt es sich die Dateien statt unterhalb des sketchbook Verzeichnis die Dateien im hardware Verzeichnis der Installation zu entpacken. Damit wird erreicht, dass die ATtiny Boards Definition nur der Arduino IDE Version zur Verfügung stehen in deren Verzeichnis sie installiert wurden. Im Normallfall bei der eingangs beschriebenen Installation im Sketchbook Verzeichnis stehen die Board Definitionen allen installierten Arduino IDE Versionen zur Verfügung.

Fehler beim Upload auf den ATtiny Chip

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny84

Diese Meldung erscheint immer zweimal auch bei erfolgreichen Uploads. Wenn es die einzige Fehlermeldung ist kann sie getrost ignoriert werden.

avrdude: stk500_getsync(): not in sync: resp=0x15

Dieser Fehler deutet darauf hin, dass das Arduino Board welches als ISP benützt wird nicht bereit war, resp. noch der Bootloader lief nach einem Reset. Um den Reset zu vermeiden reicht ein min. 10uF Kondensator zwischen Reset und GND der den Reset Puls auffängt.6)

Pin Mapping zum Arduino

Leider wirds hier ohne entsprechende Dokumentation zur Hand schon sehr spannend, so kann sich ohne Wissen der Pin Mappings, der Versuch eine LED zu blinken in die Tage ziehen..

Zuerst einmal das Wichtigste: Je nachdem welches Board man im Menu Tools | Board wählt, wird die eine oder andere ATtiny Implementation aktiv und somit komplett verschiedene Pin Mappings. Also z.B. wo D2 bei einem ATtiny84 bei tiny auf Pin 5 liegt ist dieser bei der attiny Implementation auf Pin 11.

Arduino Pin tiny Pin (ATtinyX4)
ATtiny24,44,84
tiny Pin (ATtinyX5)
ATtiny25,45,85
attiny Pin (ATtinyX4)
ATtiny44,84
attiny Pin (ATtinyX5)
ATtiny45,85
tiny Pin
ATtiny2313
D0 2 5 13 5 2
D1 3 6 12 6 3
D2 5 7 11 7 4
D3 6 2 10 2 5
D4 7 3 9 3 6
D5 8 - 8 - 7
D6 9 - 7 - 8
D7 10 - 6 - 9
D8 11 - 5 - 11
D9 12 - 3 - 12
D10 13 - 2 - 13
D11 - - - - 14
D12 - - - - 15
D13 - - - - 16
D14 - - - - 17
D15 - - - - 18
D16 - - - - 19
A0 13 1 13 1 -
A1 12 7 12 7 -
A2 11 3 11 3 -
A3 10 2 10 2 -
A4 9 - 9 - -
A5 8 - 8 - -
A6 7 - 7 - -
A7 6 - 6 - -
Serial-Debug Pin 2 (PB0) 2 (PB3) ? ? 4 (PA1)

Feedback / Korrekturen / Fragen

Wir sind für jede Anregung, Korrektur, Frage und/oder Rückmeldung dankbar. Bitte poste entweder in unser ATtiny Forum oder verwende unser Kontaktform.

Danke für die Unterstützung, wir hoffen diese Informationen sind für Deine ersten Gehversuche mit ATtiny Mikrokontrollern hilfreich.

Referenzen

1) Verzeichnis 'tiny', von Boxtec empfohlen
2) Verzeichnis 'attiny', von Arduino empfohlen