Bei meinen Projekten habe ich viel­fach den Atmel Prozessor ATTiny­2313a verwendet. Unter anderem bei den Zubehördecodern, beim adressierbaren 8-Fach S88 Rückmelder, und beim adressierbaren S88 Kopfmodul kommt dieser 8-Bit-Prozessor aus der AVR Familie zum Ein­satz. Damit man die Projekte nachbauen kann, habe ich im­mer den Hexcode bzw. die Pro­duk­tions­da­tei „.elf“ für den 2048 Byte großen Flash Speicher des Chips veröffentlicht. Wenn man über einen ATMEL Program­mer wie STK500, STK600, AVRISP MK2 (oder kompatibles Gerät) verfügt und dazu das Microchip Studio verwendet, kann die Produktionsdatei mit einem Mausklick auf den Prozessor geladen werden. Damit werden mit einem Klick die Fuses ge­setzt, der Flash- und der EPROM-Spei­cher geladen.

Wenn ich aber keinen Atmel Programmer habe?

Sehr verbreitet und kostengünstig sind die Arduino Entwicklungsboards. Man kann sie so program­mieren, dass sie auch zum Programmieren der ATMEL ATTiny Prozessoren – und nicht nur die – verwendet werden können und so einen Atmel ISP-Programmer ersetzen.

Die Arduino Entwicklungsumgebung oder auch Arduino IDE (Integrated Development En­viron­ment) bietet eine integrierte Beispieldatei, einen so­ge­nann­ten Sketch, um aus einem Standard Arduino Modul einen ISP-Programmer zu machen. Dieser Sketch ist eine gut do­­kumentierte C/C++ Quelldatei, die in der IDE zu einem binären Speicherabbild für den Arduino Prozessor kompiliert wird. Das Kompilat wird an­schließend auf das Arduino Entwicklungssystem hoch­ge­la­den (in den Flash­speicher).

Ich zeige hier, wie man aus dem sehr preisgünstigen Arduino Nano einen Programmer für den ATTiny2313a Prozessor macht.

Was brauchen wir?

  1. Arduino Nano mit USB-Kabel
  2. Steckbrett und Jumper-Kabel
  3. einen ATTiny2313a (neu oder gebraucht) und optional einen ZIF-Sockel (mind. 20-polig)
  4. Einen Kondensator 10µF (mind. 10V), 3 Widerstände 220 Ohm und 3 3mm LED (grün, gelb, rot)
  5. Software

Zunächst wird der Arduino Nano pro­gram­miert. Dazu wird die Arduino IDE heruntergeladen und instal­liert. https://www.arduino.cc/en/software/

Unter „Datei“, „Einstellungen“, sollte man „Deutsch“ als Editorsprache auswählen und an­schliessend die IDE noch mal neu starten.

Öffnen Sie das Beispielprojekt „Arduino­ISP“. Schließen Sie das USB-Kabel zwi­schen PC und Arduino Nano an. Eine LED auf dem Nano leuchtet. In der IDE gehen Sie unter „Werk­zeuge“ auf „Board“, „Ardui­no AVR Boards“ und dann auf „Arduino Nano“.

Gehen Sie in der IDE nochmals auf „Werk­zeu­ge“, dann auf „Port“ und wählen Sie den dort an­ge­botenen COM-Port, im Beispiel „COM9“. Werden mehrere Ports angeboten, schauen Sie im Windows Gerätemanager nach, welcher Port dem Arduino Nano zugewiesen wurde.

Laden Sie den Sketch hoch. Das sind eigentlich zwei Vorgänge, die aber mit einem einzigen Mausklick gestartet werden. Zuerst wird kompiliert und an­schlie­ßend wird das Kompilat (die .hex Datei) mithilfe eines Dienstprogramms namens „avrdude“ in den Flash Speicher des Arduino Nano geladen.

Sollte es beim Hochladen Probleme geben, hat Ihr Arduino Nano vielleicht noch einen alten „Bootloader“, eine kleine Soft­ware in seinem ATMega328P Prozessor, die sich mit der Avrdude Software verständigt und das Hochladen ermöglicht. In der IDE kann man dann unter „Werkzeuge“, „Processor“, „ATMega328P (Old Bootloader)“ auswählen und das Hochladen einfach noch mal starten.

Jetzt stecken wir die Hardware nach Schaltplan (fritzing Bild) zusammen. Un­ser Pro­gram­mier­gerät für den ATTiny­2313a ist fertig und kann ver­wen­det wer­den. Mit einem USB-Kabel wird es mit dem PC verbunden.

Steckbrett mit Arduino Nano, ATTiny2313a. Gelbe LED blinkt (Heartbeat – Arduino bereit). Die Rote LED zeigt Fehler an und die grüne LED zeigt den Programmiervorgang an.

Ein Befehlsskript für das AVRDude Programm

Genauso wie die Arduino IDE die AVRDude software zum Pro­gram­mie­ren der Arduinos ver­wen­det, ver­wen­den wir dieselbe Soft­ware um den ATTiny2313a zu pro­gram­mie­ren. Mit einem Editor erstellen wir ein Skript, das der AVRDude Software sagt, was in die jeweiligen Speicherbereiche des Ziel­prozessors ATTiny2313a ge­schrie­ben werden muss. Da haben wir den Bereich der „Fuses“, wo festgelegt wird, wie sich der Mikroprozessor ver­hal­ten soll (Takt­rate, Überwachung der Ver­sor­gungs­span­nung, Speicher­schutz, usw.). Der Hauptbereich ist der Flash­spei­cher, in den AVRDude die .hex Datei, also das ei­gent­liche Programm, schrei­ben soll. Bei einigen Anwendungen wird auch der EEPROM-Speicher zum dauer­haften Speichern von Programm-Pa­ra­me­tern und -Ein­stellungen verwendet. Auch diesen Speicher­be­reich kann mit AVRDude beschrieben werden.

Um die lange und komplexe Befehlszeile im Skript möglichst kurz und über­sicht­lich zu halten, verwenden wir nicht AVRDude.exe aus der Arduino-IDE-In­stal­lation, sondern installieren das Pro­gramm noch mal in einem ein­fachen, kurzen Pfad, z. B. C:\Programme\avrdude. Dazu kann das Programm hier her­unter­geladen werden. Auf der AVRDude Github Seite scrollen Sie runter bis zu „Getting AVRDude for ..“ und laden anschießend das für Ihr Be­triebs­sys­tem geeignete AVRDude.zip herunter. Wir ver­wen­den zum Pro­­gram­mieren nicht die einzelnen Dateien für EEPROM und Flash, und explizite Werte für die Fuses, sondern nehmen alle In­for­ma­tio­nen zum Programmieren des Atmel-Prozessors direkt aus der .ELF Datei, der Produktionsdatei. Nach dem Download von der Webseite befindet sich die .ELF Datei (und auch die .HEX und die .EEP Dateien) in meinem Download Verzeichis (C:\Users\g_cle\Downloads). Bei Ihnen muss der Pfad natürlich angepasst werden.

So sieht nun die Skriptdatei aus:

REM Batch Datei
Pause
C:\Programme\avrdude\avrdude.exe -CC:\Programme\avrdude\avrdude.conf -v -v -p t2313a -c arduino_as_isp -P COM9 -b 19200 -D -F -e -U eeprom:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U flash:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U lfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U hfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U efuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U lock:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Pause

Die fertige Textdatei wird auf dem Desk­top gespeichert. Anstelle der Datei-En­dung „.txt“ verwenden wir die Endung „.bat“. Bat steht dabei für das englische „Batch“, also quasi für einen Befehls­sta­pel. Für Windows bedeutet diese Endung, dass die Datei wie ein ausführbares Pro­gramm mit einem Doppelklick gestartet werden kann.

Der Befehl Pause stoppt die Ausführung, die Sie mit einer beliebigen Taste wieder fortsetzen können. AVRDude wird nun mit folgenden Parametern aufgerufen:

-CC:\Programme\avrdude\avrdude.conf   Pfad und Namen der Datei avrdude.conf
-v -v                             Ausführliche Ausgabe im Dos Fenster (verbose)
-p t2313a                              Welcher AVR Prozessor wird programmiert? Hier ATTiny2313a
-c arduino_as_isp                      Name des Programmiergerätes. Hier ArduinoISP
-P COM9                                ArduinoISP ist an Port COM9 angeschlossen
-b 19200                                  Wir programmieren mit 19600 Baud
-U eeprom:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
-U flash:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
-U lfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
-U hfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
-U efuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
-U lock:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e

Die -U Befehle definieren, welche Spei­cher­bereiche des ATTiny2313a ge­schrie­ben werden sollen. Das sind alo nach­ein­an­der EEPROM, Flash, 3 mal Fuses und das Lock-Bit. Im Beispiel habe ich die .ELF Datei für den RM8S88NB ge­nom­men. Das Script kann natürlich für alle Projekte dieser Webseiten, die den ATTiny2313a (oder den ATTiny2313) verwenden, angepasst werden (andere Pfade und eine andere .ELF Datei).

Mit einem Doppelklick auf die .BAT Datei wird das Script gestartet.

Die grüne LED auf dem ArduinoISP blinkt während der Übertragung der Daten in den ATTiny. Bei Fehlern leuchtet die rote LED und ein langsames Auf- und Ab­blen­den der gelben LED zeigt an, dass das ISP Programm aktiv ist. Im Bildschirm des PC wird in einem DOS Fenster die Ausführung der Befehle aus der Batch­da­tei angezeigt. Der ganze Vorgang läuft in wenigen Sekunden ab und im DOS-Fen­ster wird der Vorgang protokolliert:

C:\Users\g_cle\Desktop>REM Batch Datei zum Flashen eines ATTiny2313a mit .ELF Datei

C:\Users\g_cle\Desktop>Pause
Drücken Sie eine beliebige Taste . . .

C:\Users\g_cle\Desktop>REM C:\Programme\avrdude\avrdude.exe -CC:\Programme\avrdude\avrdude.conf -v -v -p t2313a -c arduino_as_isp -P COM9 -b 19200 -D -F -e -U lfuse:w:0xE4:m -U hfuse:w:0xDB:m -U efuse:w:0xff:m -U flash:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e

C:\Users\g_cle\Desktop>C:\Programme\avrdude\avrdude.exe -CC:\Programme\avrdude\avrdude.conf -v -v -p t2313a -c arduino_as_isp -P COM9 -b 19200 -D -F -e -U eeprom:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U flash:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U lfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U hfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U efuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e -U lock:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Avrdude version 8.1
Copyright see https://github.com/avrdudes/avrdude/blob/main/AUTHORS

System wide configuration file is C:\Programme\avrdude\avrdude.conf

Using port : COM9
Using programmer : arduino_as_isp
Programmer baud rate : 19200
AVR part : ATtiny2313A
Programming modes : SPM, ISP, HVPP, debugWIRE

Memory Size Pg size
-----------------------------
eeprom 128 4
flash 2048 32
lfuse 1 1
hfuse 1 1
efuse 1 1
lock 1 1
prodsig/sigrow 24 1
sernum 10 1
io 64 1
sram 128 1
signature 3 1
calibration 2 1

Variants Package F max T range V range
----------------------------------------------------------------
ATtiny2313A-MMH VQFN20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-MMHR VQFN20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-MU QFN20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-MUR WQFN20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-PU PDIP20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-SU SOIC20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]
ATtiny2313A-SUR SOIC20 20 MHz [-40 C, 85 C] [1.8 V, 5.5 V]

Programmer type : STK500
Description : AVR as programmer with Arduino-as-ISP FW
HW Version : 2
FW Version : 1.18
Topcard : Unknown
SCK period : 0.0 us
XTAL frequency : 7.372800 MHz

AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02 s
Device signature = 1E 91 0A (ATtiny2313, ATtiny2313A)
Erased chip

Processing -U eeprom:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 2 bytes for eeprom from input file RM8S88NB.elf
in 1 section [0, 1]: 1 page and 2 pad bytes
Writing 2 bytes (0x00 FF) to eeprom
Writing | ################################################## | 100% 0.21 s
Reading | ################################################## | 100% 0.01 s
2 bytes of eeprom verified

Processing -U flash:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 844 bytes for flash from input file RM8S88NB.elf
in 1 section [0, 0x34b]: 27 pages and 20 pad bytes
Writing 844 bytes to flash
Writing | ################################################## | 100% 1.81 s
Reading | ################################################## | 100% 0.75 s
844 bytes of flash verified

Processing -U lfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 1 byte for lfuse from input file RM8S88NB.elf
in 1 section [0, 0]
Writing 1 byte (0xE4) to lfuse
Writing | ################################################## | 100% 0.01 s
Reading | ################################################## | 100% 0.01 s
1 byte of lfuse verified

Processing -U hfuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 1 byte for hfuse from input file RM8S88NB.elf
in 1 section [0, 0]
Writing 1 byte (0xDB) to hfuse
Writing | ################################################## | 100% 0.01 s
Reading | ################################################## | 100% 0.01 s
1 byte of hfuse verified

Processing -U efuse:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 1 byte for efuse from input file RM8S88NB.elf
in 1 section [0, 0]
Writing 1 byte (0xFF) to efuse
Writing | ################################################## | 100% 0.01 s
Reading | ################################################## | 100% 0.01 s
1 byte of efuse verified

Processing -U lock:w:C:\Users\g_cle\Downloads\rm8s88nb_fw\RM8S88NB.elf:e
Reading 1 byte for lock from input file RM8S88NB.elf
in 1 section [0, 0]
Writing 1 byte (0xFC) to lock
Writing | ################################################## | 100% 0.03 s
Reading | ################################################## | 100% 0.01 s
1 byte of lock verified

Avrdude done. Thank you.

C:\Users\g_cle\Desktop>pause
Drücken Sie eine beliebige Taste . . .

Jetzt kann der Chip aus dem Arduino-Programmiergerät genommen und in die Zielhardware eingesetzt werden. Da wir bei diesem Verfahren auch die Daten des EEPROM Speichers über­tragen haben, hat z.B.der RM8S88NB schon die Adres­se 1 (1-8) und funtioniert ohne weiteres Anlernen auf Anhieb.


Stand 26.11.2025 Gerard Clemens