- kollino.de - https://www.kollino.de -

ATtiny85 programmieren (mit Arduino Uno oder USB-Programmer)

 

attiny85 [1]Heute wollen wir einen ATtiny85 programmieren.

Hierzu ist es wichtig, dass Eure Arduino-IDE ATtiny-Prozessoren unterstützt. Wie Ihr das einstellt, könnt Ihr hier [2] nachlesen.

 

Entscheidet Ihr Euch dazu, Euren Prozessor mit einem USB-Programmer zu programmieren (finde ich am elegantesten, zumal man sich bei häufiger Nutzung ein spezielles Breadboard vorbereiten kann und nicht jedesmal seinen Arduino anschließen muss), so kann ich Euch wärmstens den USB-Programmer [3] aus dem Guloshop [4] ans Herz legen.
Das Teil kostet nicht mal 5 Euro und Ihr könnt gleich noch ein wenig löten üben, da Ihr einen Wannenstecker, so wie das USB-Kabel anlöten müsst.
Bestellt am besten gleich noch ein 10-poliges-Breadboard-Programmierkabel [5] mit, wenn Ihr so ein Kabel wie unten abgebildet nicht habt. Das erleichtert Euch die Arbeit.
Alternativ macht es so wie ich und vielleicht befindet sich in Eurer Restekiste vergangener PCs auch ein RS 232-Kabel (DSUB9). Man nutzt es für die COM-Ports.

Zum Vergrößern Bild anklicken [6]

Zum Vergrößern Bild anklicken

Der Programmer ist super dokumentiert und selbst Anfänger (inklusive mir) sollten mit der Anleitung sehr gut zurechtkommen.
Ein vergleichbares fertiges Gerät gibts ab 15 Euro aufwärts im Handel und ich bezweifle mal, dass die mehr können. Mangels Selbstversuch kann ich das aber nicht wirklich beurteilen.

Folgende Prozessoren sind unter Anderem mit diesem Programmer programmierbar (und alle Mikroprozessoren die mit ISP und TPI umgehen können):
ATtiny 13, 13A, 13V, 25, 25V, 45, 45V, 85, 85V
ATtiny 10, 20, 40 (mit optionalem DIP-Adapter)
ATtiny 2313, 2313A, 4313
ATtiny 24, 24A, 44, 44A, 84, 84A
ATtiny 26, 26L, 261A, 261V, 461A, 461V, 861A, 861V
ATtiny 43U (mit optionalem DIP-Adapter)
ATtiny 48, 88
ATtiny 87, 167 (mit optionalem DIP-Adapter)
ATmega 8, 8L, 48, 48A, 48P, 48PA, 88, 88A, 88P, 88PA
ATmega 168, 168A, 168P, 168PA, 328, 328P
ATmega 16, 16A, 32, 32A, 164A, 164P, 164PA, 324A, 324P, 324PA, 644, 644A, 644P, 644PA, 1284, 1284P, 8535
ATmega 162, 8515
ATmega 32U2/DIP, 32U4/DIP

Und ratet mal, was auf der Programmer-Platine werkelt? Ein ATtiny85. 🙂

Ist diese Hürde überwunden und der USB-Programmer läuft fehlerfrei, dann kann es auch schon weitergehen.

Zum Vergrößern Bild anklicken [7]

Zum Vergrößern Bild anklicken

Wir brauchen ein weiteres Kabel wie Oben erwähnt mit einer 10poligen Buchse, davon aber nur 9 Adern wovon 3 Ground sind. Das andere Ende am besten offen, so kann man es auf dem Breadboard einsetzen. Ich habe die 9 Adern einfach auf eine Stiftleiste gelötet und das Ganze im Anschluss mit einer Ladung Heißkleber isoliert.
Das gibt dem Stecker neben einer Isolierung zusätzlich noch eine gewisse Stabilität.

Achtet im weiteren Ablauf darauf, dass die Reihenfolge richtig ist, wenn es – wie in meinem Fall – kein verpolungssicherer Stecker ist, den man nur richtig herum in den Wannenstecker stecken kann.

DSUB9-Markierung Pin 1 [8]

Zum Vergrößern Bild anklicken

Das Flachbandkabel ist an einer Seite durchgängig rot markiert. Das ist Pin 1. Danach zählt Ihr einfach durch bis Pin 9. (Am Stecker selbst ist Pin 2 unterhalb von Pin 1, dann geht es mit Oben 3, Unten 4, … weiter.
Meist befindet sich auf dem Stecker selbst auch ein kleiner Pfeil am Pin 1 und ein weiterer Pfeil als Gegenstück auf dem Wannenstecker selbst.

Sicherheitshalber könnt Ihr das Ganze auch mit Eurem Multimeter noch einmal überprüfen, dass jede Leitung Eures Kabels auch einwandfrei funktioniert.

Messspitzen Multimeter [9]

Zum Vergrößern Bild anklicken

Nehmt dazu Euer Multimeter und fertigt Euch am besten mit jeweils einem 2-3 cm langem Stück blanken Schaltdraht einen Aufsatz für Eure Messspitzen. Damit kommt Ihr problemlos in den Stecker und in das Breadboard.

Setzt nun Euer  angefertigtes Kabel auf einem Breadbord ein. So könnt Ihr leichter die 9 Leitungen testen.
Stellt Euer Multimeter auf Spannungsprüfung: VGleichstrom

 

Steckt nun die eine Messspitze in das Breadboard in Pin 1 (rote Seite). Im Stecker macht Ihr mit der anderen Messspitze dasselbe.

Zum Vergrößern Bild anklicken [10]

Zum Vergrößern Bild anklicken

Habt Ihr beide Messspitzen in derselben Leitung und habt Ihr sauber gelötet, fällt die Spannung an Eurem Multimeter auf 0,0.
Ihr könnt es ja mal ausprobieren, in dem Ihr eine andere Leitung prüft aber die Messspitze im Stecker auf Pin 1 lasst. Das Multimeter kann den Stromkreis nicht schließen und zeigt so nie 0,0 an.

Testet nun alle 9 Leitungen und wenn alles funktioniert hat, wird es nun ernst. Wir holen den ATtiny aus seiner Verpackung und stecken ihn auf unser Breadboard.

 

 

Nun müssen wir erst einmal im Datenblatt nachsehen, wie die Pins des ATtiny85 belegt sind, damit wir die Leitungen unseres Programmers richtig anschließen können.

Zum Vergrößern Bild anklicken [11]

Zum Vergrößern Bild anklicken

 

Programmieren mit dem USB-Programmer

Im Gegenzug schauen wir uns die Belegung unseres Programmers an.

Steckerbelegung [12]

 

Somit ergibt sich folgende Belegung:

USBasp-Programmer ATtiny85
MOSI Pin 1 <-> Pin 5 PB0
RESET Pin 5 <-> Pin 1 PB5
SCK Pin 7 <-> Pin 7 PB2
MISO Pin 9 <-> Pin 6 PB1
VCC Pin 2 <-> Pin 8 VCC
GND Pin 4 <-> Pin 4 GND

 

Los gehts. Verkabeln wir nun unseren ATtiny nach der Pinbelegung. Pin 1 auf der IC-Fassung erkennt Ihr daran, dass er mit einem kleinen Punkt auf dem Rücken des Bausteins markiert ist.

Die weißen Kabel sind +5V und GND. Alle roten Kabel sind Datenleitungen. [13]

Die weißen Kabel sind +5V und GND-Verbindungen. Alle roten Kabel sind Datenleitungen. Zum Vergrößern Bild anklicken.

So, nachdem wir nun noch einmal überprüft haben, dass alles korrekt verkabelt ist, starten wir unsere Arduino-IDE und klicken “Werkzeuge” an. Dort müssen wir zuerst das “Board” auswählen. Hier muss “ATtiny” eingetragen werden.
Als “Processor” wählen wir “ATtiny85” aus.
Als “Clock” wählen wir “1 Mhz (internal)“. Achtung, das ist sehr wichtig, sonst passiert ein gravierender Fehler (siehe Bootloader kaputt [14]).
Als “Programmer” wählen wir “USBasp” aus, wenn Ihr den oben genannten Programmer aus dem Guloshop verwendet.

So, jetzt brauchen wir nur noch ein Testsketch. Wir nutzen einen kleinen Sketch “Hallo Welt auf der Platine”, sprich, das äquivalent zum Programmieren das ein “Hallo Welt” auf den Monitor zaubert. Bei uns wird am Ende eine LED blinken, wenn wir alles richtig gemacht haben.

 

 

Nun laden wir unseren Sketch hoch, verwenden dafür aber entweder unter “Sketch” den Menüpunkt “Hochladen mit Programmer“, oder halten unsere Großschreibtaste gedrückt und klicken den “Hochladen”-Pfeil an. Es erscheint dann auch nicht wie gewohnt der Text “Hochladen”, sondern “Hochladen mit einem Programmer”.

War das kompilieren und hochladen erfolgreich, testen wir gleich mal unseren Sketch.
Wir programmierten ja, das eine LED auf PB0, also auf dem physischen Pin 5 blinken soll.

Wir lösen zur Sicherheit die USB-Verbindung zu unserem Breadboard um den weiteren Aufbau vornehmen zu können.

Jetzt nehmen wir beispielsweise einen 220 Ohm-Widerstand und eine grüne LED und stecken das eine Ende des Widerstandes an den Pin 5 und die LED mit der Kathode (also dem Minuspol und somit dem kürzeren Beinchen) an das andere Ende des Widerstandes. An die Anode der LED (Pluspol, längeres Beinchen) stellen wir eine Verbindung zu +5V her.

Nun verbinden wir die USB-Verbindung wieder, damit wir Strom bekommen und wenn wir Widerstand und LED richtig eingebaut haben, sollte unsere LED blinken.

Wir verbinden eine LED mit Pin 5 um unsere Testschaltung in Aktion sehen zu können. [15]

Wir verbinden eine LED mit Pin 5 um unsere Testschaltung in Aktion sehen zu können.

Wunderbar. Nun können wir problemlos eine ganze Armada an ATtinys auf diesem Wege programmieren.

Eine weitere Möglichkeit wäre die Verwendung eines Arduinos als Programmer. Da ich nur Unos in meinem Sortiment habe, zeige ich Euch, wie Ihr mit ihm Sketche auf Euren ATtiny hochladen könnt.

 

Programmieren mit dem Arduino Uno als Programmer

Vom Grundprinzip zum programmieren mit einem USB-Programmer ist das hier nicht viel anders. Als erstes müssen wir wissen, wo auf unserem Uno die entsprechenden Datenleitungen sind die wir benötigen. Das wären MOSI, RESET, SCK und MISO. So wie natürlich +5V und GND.

Arduino-Uno-R3-Pinbelegung [16]

Zum Vergrößern Bild anklicken

 

Somit ergibt sich folgende Belegung:

Arduino Uno ATtiny85
MOSI Pin 11 <-> Pin 5 PB0
RESET Pin 10 <-> Pin 1 PB5
SCK Pin 13 <-> Pin 7 PB2
MISO Pin 12 <-> Pin 6 PB1
VCC <-> Pin 8 VCC
GND <-> Pin 4 GND

 

Wir können nun unser Breadboard mit dem ATtiny drauf verbinden. Ich habe aus dem vorherigen Beispiel mit dem Programmieren mit Programmer die Kabelanordnung auf dem Breadboard komplett gleich gelassen. Somit geht das erste linke Kabel vom Pin 11 des Unos zu Pin 5 des ATtinys, das letzte Kabel rechts geht von Pin 12 in Pin 6. Weiß sind +5V und GND.

Die weißen Kabel sind +5V und GND-Verbindungen. Alle roten Kabel sind Datenleitungen. Zum Vergrößern Bild anklicken. [17]

Die weißen Kabel sind +5V und GND-Verbindungen. Alle roten Kabel sind Datenleitungen. Zum Vergrößern Bild anklicken.

Wie immer erfolgt noch einmal der Blick auf die Verkabelung und das alles richtig angeschlossen ist.
Nun verbindet Ihr Euren Uno mit dem Computer und öffnet die Arduino-IDE.

Achtung, jetzt kommt der große Unterschied: Ihr müsst Eurem Uno zuerst ein Sketch verpassen, damit er zum Programmer wird. Hierzu öffnen wir den Sketch unter “Datei” -> “Beispiele” ->”11.ArduinoISP” -> “ArduinoISP” und übertragen ihn wie gewohnt per USB auf unseren Uno.
Jetzt ist er bereit und kann weitere Chips programmieren.

Wir erstellen einen neuen Sketch und nehmen wie ich in unserem obigen Beispiel die “Hallo Welt”-LED. Gegebenenfalls tauscht Ihr hier die delays (Zeile 9 und 11) aus, damit Ihr auch einen Unterschied merkt, solltet Ihr zuvor das gleiche Sketch mit dem USBasp-Programmer hochgeladen haben. Je niedriger der Wert, desto schneller blinkt die LED. Ich habe in diesem Beispiel mal 100 ms statt der zuvor verwendeten 500ms eingestellt.

 

 

Nun laden wir unseren Sketch auf den ATtiny.
Wie in dem anderen Beispiel wählen wir nun in der Arduino-IDE “Werkzeuge” aus.
Dort müssen wir zuerst das “Board” auswählen. Hier muss “Tiny” eingetragen werden.
Als “Processor” wählen wir “ATtiny85” aus.
Als “Clock” wählen wir “1 Mhz (internal)“. Achtung, das ist sehr wichtig, sonst passiert ein gravierender Fehler (siehe Bootloader kaputt [14]).
Als “Programmer” wählen wir “Arduino as ISP” aus. Hinweis: Es gibt einen weiteren Eintrag der vor diesem kommt mit der Bezeichnung “ArduinoISP“. Sehr unglücklich gewählt, denn mit dieser Auswahl wird es nicht funktionieren.

War auch in diesem Beispiel das kompilieren und hochladen erfolgreich, testen wir gleich mal unseren Sketch.
Es soll ja wieder die LED auf PB0, also auf dem physischen Pin 5 blinken.

Wir lösen zur Sicherheit die USB-Verbindung zu unserem Breadboard um den weiteren Aufbau vornehmen zu können.

Jetzt nehmen wir beispielsweise einen 220 Ohm-Widerstand und eine grüne LED und stecken das eine Ende des Widerstandes an den Pin 5 und die LED mit der Kathode (also dem Minuspol und somit dem kürzeren Beinchen) an das andere Ende des Widerstandes. An die Anode der LED (Pluspol, längeres Beinchen) stellen wir eine Verbindung zu +5V her.

Nun stellen wir die USB-Verbindung wieder her, damit wir Strom bekommen und wenn wir Widerstand und LED richtig eingebaut haben, sollte auch hier unsere LED wieder blinken.

Blinkende LED als Ergebnis des erfolgreichen Aufspielen des Sketches. Zum Vergrößern Bild anklcken. [18]

Blinkende LED als Ergebnis des erfolgreichen Aufspielen des Sketches. Zum Vergrößern Bild anklcken.

Sollten bei der Programmierung mit dem Arduino als Programmer Probleme auftreten, dann versucht mal einen Elektrolyt-Kondensator mit einem Wert von rund 10 µF zwischen GND und dem Reset-Pin des Arduinos zu setzen. Unbedingt auf Polarität achten! GND = Minus, Reset = Plus.
Der Kondensator soll einen Reset beim Hochladen des Sketches verhindern. Allerdings habe ich es mit und ohne Kondensator versucht. Es funktioniert beides. Aber ich habs mal erwähnt, falls bei dem ein oder anderen ein Problem auftritt und das die Lösung dafür wäre.

Uno ATiny ELKO 10uf auf Reset [19]

Zum Vergrößern Bild anklicken

 

So, das waren zwei der Wege wie man weitere Prozessoren programmieren kann. Man braucht immer einen Programmer, wenn man “nackte” Prozessoren programmieren will. Dabei ist es gleich, ob wir den Arduino verwenden und ihn mit einem Sketch zu einem Programmer umfunktionieren, oder beispielsweise den USBasp-Programmer verwenden, der ja ebenfalls auf seinem verbauten ATtiny ein Programm installiert hat, was ihn auch zu einem Programmer macht.

Etwas ganz Wichtiges noch am Ende:
Versucht nicht, dem ATtiny ein neues Programm hochzuladen, während beispielsweise die Testschaltung aktiv ist. Oder auch jede andere, denn wenn die Pins noch anderweitig belegt sind, kommt es zu unerwarteten Fehlermeldungen beim Hochladen.
Bei unserer Testschaltung reicht es beispielsweise schon, wenn wir den Draht von der LED zur +5V-Spannung abklemmen. Dann können wir auch ohne Fehlermeldungen einen neuen Sketch hochladen.