Programmieren eines ATtiny mit Arduino 1.0.1

In diesem Beitrag werde ich erklären, wie man einen ATtiny45, ATTINY85, ATtiny44 oder ATTINY84 Mikrocontroller mit der Arduino-Software (Version 1.0.1) programmiert. Die ATtiny Microcontroller sind klein, günstig und für die meisten kleinen Projekte absolut ausreichend. Der ATtiny85 unterscheidet sich vom ATTINY45 nur durch den doppelten Speicher wodurch auf ihm komplexere Programme gespeichert werden können. Beide verfügen über acht Beine. ATtiny44 und ATTINY84 haben vierzehn Beine und verfügen über mehr Ein-und Ausgänge.

Um diesen Beitrag aktiv nachvollziehen zu können, sollten Sie die aktuellste Arduino Version 1.0.1 und die aktuellste damellis-attiny-6bff522.zip installiert haben.
Sollte die damellis-attiny-68ff522.zip auf GitHub einmal nicht verfügbar sein, dann kann diese auch direkt hier herunter geladen werden.

Arduino ATtiny-Unterstützung installieren

  • damellis-attiny-6bff522.zip downloaden
  • Suchen Sie nach Ihrem Sketchbook-Speicherort. Wo sich dieser befindet, können Sie in den Arduino-Einstellungen erkennen.
  • Wenn noch nicht vorhanden, erstellen Sie im Sketchbook-Verzeichnis einen neuen Unterordner und nennen Sie diesen „Hardware“.
  • Entpacken Sie die Datei damellis-attiny-6bff522.zip und kopieren Sie den darin befindlichen Ordner attiny in den Ordner Hardware.  Bei mir sieht das Ganze nun so aus. Documents -> Arduino -> Hardware -> ATtiny. Im Ordner ATtiny befindet sich der Unterordner „Varianten“ und die Datei boards.txt.
  • Starten Sie das Arduino-Programm.
  • Im Menü unter „Tools“ sollten nun einige neue Einträge mit „ATtiny“ im Namen zu sehen sein.

ATtiny-Microcontroller mit dem Arduino verbinden

ATtiny45-85

 

ATtiny44-84

 

Um einen ATtiny, unter Zuhilfenahme des Arduino als ISP, programmieren zu können, müssen wir folgende Pins des ATtiny mit dem Arduino verbinden.

 

Beispiel für den ATtiny45 und ATtiny85
ATtiny -> Arduino
  • VCC(+) -> +5V
  • Pin2 (Analog Input 1, SCK) -> Pin13
  • Pin1 (PWM, MISO) -> Pin12
  • Pin0 (PWM, AREF, MOSI) -> Pin11
  • (-) GND -> GND
  • Reset -> Pin10
Beispiel für ATtiny44 und ATtiny84
ATtiny -> Arduino
  • (+) VCC -> +5V
  • Pin4 (Analog Input 4, SCK) -> Pin13
  • Pin5 (Analog Input 5, PWM, MISO) -> Pin12
  • Pin0 (Analog Input 0, AREF) -> Pin11
  • GND (-) -> GND

ATtiny-Arduino-Pionbelegung

 

Das war hardwaremäßig schon alles.
Um dem Arduino nun die Fähigkeit zu verleihen, einen ATtiny zu programmieren, gehen wir wie folgt vor.

 

  • Vergewissern Sie sich dass Ihr Arduino im Menü unter „Tools->Board“ ausgewählt ist
  • Öffnen Sie das Sketch „ArduinoISP“ aus dem Menü „Datei->Beispiele“
  • Klicken Sie auf „Upload“ um das Sketch auf Ihren Arduino zu übertragen
Wenn Sie nun folgende Meldung im Terminal sehen, hat alles geklappt. Die zwei roten Meldungen können Sie getrost ignorieren.
Arduino Upload erfolgreich
ACHTUNG: Dieser Schritt muss immer dann wiederholt werden, wenn Sie einen ATtiny programmieren wollen, Sie zwischenzeitlich aber wieder ein anderes Sketch auf den Arduino übertragen haben. Wenn Sie das nicht machen, erhalten Sie unter Umständen folgende Fehlermeldung.
Uploadfehler - ATtiny kann nicht programmiert werden

ATtiny programmieren

Um nun den ATtiny programmieren zu können, wählen wir im Menü unter „Tools->Board“ den ATtiny den wir mit dem Arduino verbunden haben. In meinem Fall ist dies der ATtiny85 mit Internal 1MHz Clock. Anschließend wählen wir unter „Tools->Programmer“, den Eintrag „Arduino as ISP“.

Testen wir anhand eines kleinen Sketches ob die Übertragung zum ATtiny wirklich funktioniert, indem wir das Sketch „Blink“ aus dem Menü unter „Datei->Beispiele->01.Basics“ öffnen.
Nehmen Sie eine LED und einen Vorwiderstand und verbinden Sie die Kathode (kurzes Bein) der LED mit Ground und die Anode (langes Bein) der LED mit Pin0 des ATtiny. Vergessen Sie nicht den obligatorischen Vorwiderstand zwischen Anode und Pin0.

LED am ATtiny

YouTube-Video

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  This example code is in the public domain.
 */

// Pin 13 has an LED connected on most Arduino boards.
// Pin 11 hes the LED on Teensy 2.0
// Pin 6 hes the LED on Teensy++ 2.0
// give it a name:
int led = 0; //13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

Da es am ATtiny kein Pin13 gibt und wie die LED an Pin0 des ATtiny angeschlossen haben, müssen wir das Sketch Blink anpassen. Dazu ändern wir einfach die Zeile „int led = 13;“ und machen daraus ein „int led = 0„; Klicken Sie nun auf den Upload-Button um das Sketch auf den ATtiny zu übertragen. Nach wenigen Augenblicken sollte die LED anfangen zu blinken.

Nun könnten wir die Verbindungen vom ATtiny zum Arduino trennen, da wir die Verbindungen nur zum programmieren des ATtiny benötigen. Um zu zeigen dass unser ATtiny auch ohne Arduino macht was er soll, werde ich eine externe Stromquelle  benutzen.

ATtiny im Batteriebetrieb

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

16 Kommentare zu “Programmieren eines ATtiny mit Arduino 1.0.1

  1. Ich programmiere die Attinys viel lieber als den Arduino selbst. Man kann damit so schön ganz eigene Sachen verwirklichen.

    • Ja da hast Du recht aber leider gibt es so wenige Pins. Nur zwei PWM z.B.
      Habe mir jetzt aber die ATtiny84 bestellt. die haben mehr. ;-)

      Ich nutze gerade einen ATtiny85 um ein Mondglas zu realisieren. Das ist ein Einweckglas aus Milchglas in dem sich eine RGB-LED befindet. Mit einem Drehpoti kann man einstellen ab welcher Intensität des Umgebungslichts die LED an geht. Außerdem kann man, ebenfalls über einen Poti, einstellen wie schnell sich die Farben ändern sollen. Ich denke dass ich die Tage das erste mal versuchen werde, eine Platine zu erstellen.

  2. Hallo,
    Ich habe allerdings ein Problem mit dem Arduino als ISP.
    Bei mir funktioniert alles bis zu dem Punkt, an dem der Sketch auf den Attiny geladen werden soll: Es erscheint immer die Meldung „Fehler beim Kompleieren“:
    Ich hoffe, ihr könnt mir helfen!

    • Außer „Fehler beim kompilieren“ bekommst Du keine weitere Fehlermeldung ausgegeben?
      Ich kann Dir aktiv nach den Feiertagen helfen. Im Moment habe ich keine Möglichkeit etwas mit Arduino zu machen.

    • Nein, mehr passiert nicht. Ich benutze allerdings einen Attiny85 mit externer clock, aber das sollte doch keine Auswirkungen auf das Kompleieren haben, oder?

  3. Hallo,

    Ich hatte wohl das gleiche Problem mit der neusten 1.0.2 Version der Arduino Entwicklungsumgebung (1.0.1 lief fehlerfrei).

    Der Fehler liess isch relativ schnell auf eine Änderung im ….\hardware\arduino\cores\arduino\HardwareSerial.h zurückführen. Hier wurde in der 1.0.2 eine Konfiguration der Seriellen Schnittstelle für die verschiedenen Arduino Borads eingebaut.

    Ich habe bei mir in HardwareSerial.h:125 die Zeile

    #error TXC0 not definable in HardwareSerial.h

    auskommentiert.

    //#error TXC0 not definable in HardwareSerial.h

    Man kann die Zeile aber auch mit folgendem #if ersetzen

    #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || \
    defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny25__) || \
    defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    #else
    #error TXC0 not definable in HardwareSerial.h
    #endif

    So bleibt die eigentliche Funktion erhalten, wird aber für die ATtiny’s nicht mehr benutzt ;-.)

    Gruß

    Angus

  4. Pingback: Einführung in den Umgang mit einem 433MHz Funkmodul.

  5. Hallo Enrico,
    wenn ich den ArduinoISP-Sketch kompiliere, kommt folgender Fehlerhinweis: Markiert ist “ Serial.begin(19200);“ und der rot unterlegte Fehlertext lautet: Serial was not declared in this scope. Den richtigen Attiny bei Boards habe ich ausgewählt. Weißt du Rat?

    Gruß
    Willi

  6. Hallo,
    hat sich erledigt. Mein Fehler war, dass ich beim Kompilieren das Board Attiny schon ausgewählt hatte… Richtig wäre Uno gewesen.

  7. Hallo,

    Ich habe den Versuch erfolgreich nachgebaut. Nun versuche ich das auf der neuesten Arduino-Version 1.6.1. Aber ergal wo ich den Ordner „attiny“ speichere, die ATTinys werden in der IDE nicht angezeigt.
    Haben Sie hierfür eine Lösung.

    Mit freundlichen Grüßen

  8. Pingback: ATtiny – Programmieradapter für Arduino Mega | Der mit dem Licht spielt

  9. Hallo, ich bin totaler Anfänger was das Programmieren mit dem Arduino als ISP betrifft. Ich hätte zu dem Thema eigentlich bisher nur eine Frage:
    Stimmt es, dass bei dem Programmieren eines ATtiny45 nur folgende Arduino Befehle funktionieren?

    pinMode()
    digitalWrite()
    digitalRead()
    analogRead()
    analogWrite()
    shiftOut()
    pulseIn()
    millis()
    micros()
    delay()
    delayMicroseconds()

    Ich danke euch schon einmal im Voraus! :)

    Gruß Michi

  10. Ich verwende Arduno Uno, unter Boards wird kein Attiny angezeigt, verwende Arduino 1:1.0.5 mit Linux. Woran kann das liegen?