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:
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 | |
ATtiny2313 | 128Bytes | 2kB | 128Bytes | 20 | 18 | 0 | 4 | 1 | 2 | 1 | 20MHz | 1.8-5.5V | |
ATtiny24 | 128Bytes | 2KB | 128Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny25 | 128Bytes | 2KB | 128Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny4313 | 256Bytes | 4kB | 256Bytes | 20 | 18 | 0 | 4 | 1 | 2 | 1 | 20MHz | 1.8-5.5V | |
ATtiny44 | 256Bytes | 4kB | 256Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny45 | 256Bytes | 4kB | 256Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny84 | 512Bytes | 8kB | 512Bytes | 14 | 12 | 8 | 4 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny85 | 512Bytes | 8kB | 512Bytes | 8 | 6 | 4 | 3 | 0 | 1 | 1 | 20MHz | 1.8-5.5V | |
ATtiny1634 | 1024Bytes | 16kB | 256Bytes | 20 | 18 | 12 | 2 | 2 | 1 | 1 | 12MHz | 1.8-5.5V |
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.
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.
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.
Für tiny:
Für attiny:
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):
Die Board-Definitionen mit einem @ stammen von der tiny Implementation, die ohne von der attiny Implementation.
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)
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.
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… 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!
Arduino Pin | ATtiny Pin | |
---|---|---|
MOSI | D11 | 5 |
MISO | D12 | 6 |
SCK | D13 | 7 |
Reset | D10 | 1 |
Wähle den folgenden Programmierer unter Tools | Programmer > Arduino as 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.
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 |
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.
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); }
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.
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).
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.
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.
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.
Diese Meldung erscheint immer zweimal auch bei erfolgreichen Uploads. Wenn es die einzige Fehlermeldung ist kann sie getrost ignoriert werden.
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)
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) |
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.