Programmierung (flashen) eines Attiny mit einem Arduino Uno

Es gibt eine ganze Reihe von Attiny-Typen, die sich unter anderem in der Speicherplatzgröße, Taktfrequenz, Anzahl der Ein-/Ausgänge, etc. unterscheiden. Eine Auflistung der Typen findet ihr z.B. hier: www.mikrocontroller.net/articles/AVR_Typen#ATtiny_-_Reihe.

Ich habe bisher nur Attiny45 und Attiny85 genutzt (daher beziehe ich mich immer nur auf diese beiden Typen), wobei der einzige Unterschied meines Wissens die Speichergröße ist. So steht die "4" in der Bezeichnung für 4 kByte Flashspeicher, die "8" für 8 kByte. Auch EEPROM und SRAM sind beim Attiny85 mit je 512 Byte doppelt so groß wie beim 45er. In der Serie gibt es auch noch den Attiny25 mit 2 kByte Flash.

Beispiele für meine Attiny-Anwendungen findet ihr hier:

Drehzahlregelung

Funkübertragung

Modellbahnschranke

Weichensteuerung

Attiny im Schlafmodus


Schaltungsaufbau:

Nachfolgend der Verdrahtungsplan, wobei Reset-Taster und LED zum flashen nicht erforderlich, aber für das erste Testprogramm ganz nützlich sind.


Verbindung Aarduino Uno -> Attiny45/85:

Arduino-Pin               Attiny-Pin

        10           ->          1 (Reset)

        11           ->          5

        12           ->          6

        13           ->          7



Für den Testaufbau verwende ich folgende Komponenten:

  • 1 Arduino Uno
  • 1 Attiny45/85
  • 1 Elektrolytkondensator 10 µF


optional:

  • 1 Resettaster
  • 1 LED
  • 1 Widerstand 220 Ohm


Info zum 10 uF Elektrolytkondensator (+Seite mit Reset, -Seite mit Gnd verbunden):

Der Kondensator soll ein Reset verhindern (was den Bootloader starten würde), wodurch sichergestellt wird, dass die Arduino-IDE mit ArduinoISP während dem Hochladen von Sketches kommuniziert.

Diese Information stammt von highlowtech.org/?p=1706, wo es heißt:

The capacitor prevents the Arduino board from resetting (which starts the bootloader), thus ensuring that the Arduino IDE talks to the ArduinoISP (not the bootloader) during the upload of sketches.


Flashen:

Vorbereitung:

Bevor man mit der Arduino-IDE einen Attiny-Prozessor flashen kann, müssen die Attiny-Prozessoren in die IDE eingebunden werden:

Für die Arduino-Versionen vor 1.6.2 konnte man unter dem Link "github.com/damellis/attiny/tree" für die Unterstützung für Attiny-Prozessoren eine Datei namens "attiny-ide-1.x.x.zip" (also z.B. attiny-ide-1.0.x" oder "attiny-ide-1.6.x) herunterzuladen. Den darin enthaltenen Ordner "attiny" musste man anschließend im Arduino-Ordner unter "Hardware" speichern. Dieser Link ist allerdings nicht mehr vorhanden.

Ab der Arduino-Version 1.6.2 ist die Einbindung viel einfacher und funktioniert mit dem "Boardverwalter". Eine gute Anleitung dazu habe ich hier gefunden: www.kollino.de/arduino/attiny-support-unter-arduino-1-6-installieren/

In der Arduino IDE sollten danach (nach Neustart der IDE) unter "Werkzeuge - Platine" bzw. unter "Tools - Board", neben den Arduino's auch Attiny-Prozessoren zur Auswahl stehen.


Durchführung:

Auf den Uno ist nun das Programm "ArduinoISP", welches unter "Datei - Beispiele" zu finden ist, hochzuladen. Weiters ist nun in der Arduino-IDE unter "Werkzeuge - Programmer"  bzw. unter "Tools - Programmer" die Vorwahl "Arduino als ISP" einzustellen.

Ist der Attiny mit der gewünschten Taktfrequenz ausgewählt, ist bei erstmaliger Verwendung eines neuen Attiny-Chips der Bootloader auf den Attiny zu übertragen. Das geschieht in der Arduino-IDE über "Werkzeuge - Bootloader brennen" bzw. über "Tools - Bootloader installieren". Ebenso, wenn man die Taktfrequenz des Attiny im Nachhinein ändern möchte. Ist die Installation des Bootloaders erfolgreich, erscheint in der Statusanzeige der Arduino-IDE die Meldung: "Bootloader wurde installiert".

Nun kann über den Uno ein in der Arduino-IDE erstellter Sketch auf den Attiny hochgeladen werden. Dazu noch einmal die Einstellungen unter "Werkzeuge"  bzw. unter "Tools":

Vor IDE 1.6.2:

  • Board: Attiny (mit Angabe des Types und der Taktfrequenz)
  • Port: COMx des Unos
  • Programmer: Arduino als ISP

Ab IDE 1.6.2:

  • Board: Attiny25/45/85 oder 24/44/84
  • Prozessor: AttinyXX
  • Clock: 1MHz .. 20 MHz
  • Port: COMx des Unos
  • Programmer: Arduino als ISP

Die von mir verwendeten Attinies habe ich entweder mit 1oder 8 MHz betrieben. Bei diesen Taktfrequenzen ist kein externer Quarzoszillator erforderlich. Es muss aber der entsprechende Bootloader auf den Attiny geflasht sein! Wenn die Taktfrequenz zwischen Bootloader und ausgewähltem Attiny-Typ nicht übereinstimmt, macht sich das z.B. in falschen Timerzeiten bemerkbar, d.h. ein delay(1000) ist dann nicht mehr eine Verzögerung von 1 Sekunde, sondern eine andere Zeit.


Ist der Attiny mit dem richtigen Programm geflashed, kann der Uno abgesteckt werden. Aber solange der Uno angesteckt ist, muss auch der Uno z.B. über das USB-Kabel spannungsversorgt bleiben, auch wenn der Attiny bereits über eine eigene Spannungsversorgung verfügt. Ansonsten läuft das Programm auf dem Attiny nicht (Reset-Zustand).


Eine gut gestaltete Anleitungen zum flashen findet ihr hier:

https://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren