montebaur.tech

This is the website's legacy version. Access the current one here.
ATtiny's mit dem Arduino programmieren
Dezember 2013
Wenn man ein Arduino-Projekt fertigstellt und es beispielsweise in ein Gehäuse einbauen will, gibt es Möglichkeiten viel Platz zu sparen. Auf dem Arduino Board sind ja viele Ports, die vielleicht nicht gebraucht werden. Außerdem braucht man bei einem fertigen Projekt ja vielleicht keinen USB-Anschluss mehr, weil man den Mikrocontroller ein mal programmieren will und er dann fest verbaut und/oder verklebt in einem Gehäuse verstaut wird. Deshalb kann man darüber nachdenken das Arduino-Board, auf dem ja ein kleines Netzteil, ein großer USB-Anschluss und noch vieles mehr befestigt ist, dass nicht gebraucht wird, durch einen kleinen Mikrocontroller zu ersetzen. Dieser braucht weniger Platz, weniger Strom und kann trotzdem mit dem schon bestehenden Arduino-Programm programmiert werden. Das ganze funktioniert aber nicht mit jedem Mikrocontroller. In diesem Artikel verwende ich den Atmel ATtiny 85, den Atmel ATtiny 84 und den Atmel ATtiny 2313. Diese sind alle zu günstigen Preisen bei eBay erhältlich. Für die Programmierung benötigen wir außerdem einen 10µF Elektrolytkondensator (kurz: Elko). Im folgenden werde ich beschreiben, wie man die oben genannten Mikrocontroller mit dem Arduino programmieren kann.


Vorwort

Der Mikrocontroller auf meinem Arduino Uno Rev 3 ist ein Atmel ATmega328P. Dieser hat ohne externe Hardware schon digitale Ein- und Ausgänge und auch analoge Eingänge. Warum lässt man also nicht einfach das Arduino-Board weg und nimmt nur den Mikrocontroller? Das hat mehrere Gründe: Natürlich ist es zum Ausprobieren viel praktischer, wenn man die Kabel nicht an den ATmega löten muss, sondern man diese in dafür vorgesehene Buchsen stecken kann. Außerdem muss so ein Mikrocontroller immer mit 5V versorgt werden. Da man die nicht immer hat, sondern meistens Netzteile mit 12V, oder eine 9V-Block-Batterie, befindet sich auf dem Arduino-Board auch noch ein kleines Netzteil, dass aus diesen höheren Spannungen die benötigten 5V macht. Das aber wohl wichtigste ist der zweite ATmega auf dem Arduino-Board! Hinter dem USB-Anschluss befindet sich ein ATmega16U2. Er wandelt die USB-Signale in serielle Signale um, die der ATmega328P „versteht”. Man kann einen Mikrocontroller nämlich nicht einfach mit Anlauf in den USB-Anschluss vom heimischen PC rammen. Um den ATmega328P über USB mit dem Computer zu verbinden und zu programmieren braucht man einen zweiten Mikrocontroller, der die Kommunikation zwischen Computer und dem zu programmierenden Mikrocontroller erst möglich macht.


Vorbereitung

Um die Mikrocontroller mit dem Arduino programmieren können, müssen wir unsere Arduino IDE (Entwicklungsumgebung) noch etwas erweitern. Beginne damit, dass du die Arduino-Software auf deinem Computer schließt. Nun navigierst du im Finder bzw. Windows Explorer (je nach Betriebssystem) zu deinem Arduino Sketchordner. Wo dieser ist, kannst du in den Einstellungen deiner Arduino IDE sehen. Wenn du den Ordner gefunden hast, muss in ihm ein Ordner namens „hardware” erstellt werden. Nun lädst du diese Datei herunter (hier) und entpackst sie in den eben erstellten Ordner Hardware. Schließe deinen Arduino Uno an deinen Computer an und klicke in der Arduino IDE auf Datei > Beispiele > Arduino ISP. Dieses Programm lädst du unverändert auf deinen Arduino Uno.


Aufbau

Um einen Mikrocontroller zu programmieren müssen wir ihn mit sechs Kabeln mit dem Arduino verbinden. Zum einen natürlich +5V und GND. Die anderen vier Kabel gehen von den Arduino Pins 10 bis 13 zu bestimmten Anschlüssen am ATtiny. Die Tabelle zeigt, welche Pins des Arduino Uno an welche Anschlüsse der Mikrocontroller angeschlossen werden müssen. Das Bild dadrunter zeigt die Pinanordnung der ATtiny Mikrocontroller. Außerdem muss ein 10µF Elko an den Reset Pin des Arduino und dessen GND Pin angeschlossen werden. Dabei ist die Polung des Elkos wichtig: Die mit einem großen Minus gekennzeichnete Seite muss an den GND Pin angeschlossen werden. Wenn in dieser Anleitung die Rede davon ist, dass der Arduino an einen Pin am ATtiny angeschlossen werden muss, ist die Pinnummerierug auf der Innenseite der Darstellung gemeint. Später beim Programmieren müssen die äußeren Pinnummern im Programm genannt werden.


Programmierung

Eben haben wir die benötigte Erweiterung für die Arduino IDE in dem Ordner hardware gespeichert. Um jetzt einen ATtiny zu programmieren müssen wird diesen auch als Board in der Arduino IDE auswählen. Dazu gehen klicken wir auf Tools > Board und dann wählen wir unseren Mikrocontroller aus. Die Geschwindigkeit dieser Mikroprozessoren liegt standardmäßig bei 1 MHz. Außerdem müssen wir noch den Programmer ändern. Dieser ist normalerweise auf „AVRISP mkII” eingestellt. Unter Tools > Programmer stellen wir diesen auf „Arduino as ISP”.
Um zu testen ob alles funktioniert, kann ein Beispielprogramm auf den ATtiny geladen werden. Dafür können wir unter Datei > Beispiele > 01.Basic > Blink auswählen. Normalerweise wird in diesem Programm der Pin 13 unseres Arduino angesteuert. Da beispielsweise ein ATtiny85 keinen Pin 13 hat (sondern nur Pin 0 bis 4), müssen wir das in unserem Programm ändern. Im folgenden Beispiel werde ich Pin 3 von meinem ATtiny85 verwenden. Wenn nach dem programmieren die unten abgebildeten Fehlermeldungen in eurer Arduino IDE erscheinen, habt ihr alles richtig gemacht! Ohne Spaß. Das muss so sein, einfach irgnorieren! Achtung: Wie schon vorher angemerkt, sind beim Programmieren die Pinnummern auf der Außenseite der Grafik (siehe oben) zu beachten.
Jetzt können wir alle Kabel vom Mikrocontroller entfernen. Wir können ihn entweder wieder mit den +5V vom Arduino oder auch mit einer anderen Stromquelle (die aber auch +5V DC bereitstellen muss) versorgen. Nun schließen wir noch eine LED (hier eine rote) und einen Vorwiderstand (in diesem Fall 1k Ohm) an Pin 3 unseres ATtiny85 an. Nun sollte die LED beginnen zu blinken.
Fertig! Der ATtiny wurde erfolgreich programmiert. Das Blinken ist natürlich nur ein sehr einfaches Projekt mit wenig nutzen. Spannender wird es da, wenn man mit dem Arduino ein Projekt fertig gestellt hat und dieses mit Hilfe eine einzelnen Mikrocontrollers in einem kleinen Gehäuse verstauen kann.


Erweitern des Projekts

Damit das Programmieren der Mikrocontroller nicht immer in einem Kabelsalat endet, habe ich ein Shield für meinen Arduino Uno gebaut. Dieses wird einfach auf den Arduino gesteckt. Der zu programmierende Mikrocontroller muss nur noch in die dafür vorgesehen Halterung gesteckt werden und schon kann er programmiert werden. Natürlich kann auch mit dem Shield immer nur ein Mikrocontroller gleichzeitig programmiert werden.


Außerdem habe ich auf eine kleine Platine eine Halterung für einen ATtiny85, eine Betriebs-LED, einen Reset-Taster und Buchsen für Out- und Inputs sowie für eine Stromversorgung gebaut. Auf diese Art und Weise hat man eine Leiste mit fünf Kontakten, bei denen es sich um die Pins 0 bis 4 des Mikrocontrollers handelt. Das macht das Anschließen von externen Geräten einfacher und übersichtlicher.


Downloads

Arduino Programme:
- Beispielprogramm Blinken: hier


Quellen

Boxtech: hier

Marius M.