Bei meinen Projekten habe ich vielfach den Atmel Prozessor ATTiny2313a 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 immer den Hexcode bzw. die Pro­duk­tionsdatei „.elf“ für den 2048 Byte großen Flash Speicher des Chips veröffentlicht. Wenn man über einen ATMEL Programmer 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 sogenannten 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­laden (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 programmiert. 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 „ArduinoISP“. Schließen Sie das USB-Kabel zwischen PC und Arduino Nano an. Eine LED auf dem Nano leuchtet. In der IDE gehen Sie unter „Werkzeuge“ auf „Board“, „Arduino AVR Boards“ und dann auf „Arduino Nano“.

Gehen Sie in der IDE nochmals auf „Werkzeuge“, 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 anschließ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 Software 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 zusammen. Unser Programmiergerät für den ATTiny2313a ist fertig und kann verwendet werden. 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 Programmieren der Arduinos verwendet, ver­wen­den wir dieselbe Software um den ATTiny2313a zu programmieren. Mit einem Editor erstellen wir ein Skript, das der AVRDude Software sagt, was in die jeweiligen Speicherbereiche des Ziel­prozessors ATTiny2313a geschrieben werden muss. Da haben wir den Bereich der „Fuses“, wo festgelegt wird, wie sich der Mikroprozessor verhalten soll (Takt­rate, Überwachung der Versorgungsspannung, Speicher­schutz, usw.). Der Hauptbereich ist der Flashspeicher, in den AVRDude die .hex Datei, also das ei­gent­liche Programm, schreiben soll. Bei einigen Anwendungen wird auch der EEPROM-Speicher zum dauer­haften Speichern von Programm-Parametern und -Einstellungen verwendet. Auch diesen Speicher­be­reich kann mit AVRDude beschrieben werden.

Um die Befehlszeile im Skript kurz und übersichtlich zu halten, verwenden wir nicht AVRDude.exe aus der Arduino-IDE, sondern installieren das Programm noch mal in einem ein­fachen, kurzen Pfad, z. B. C:\Programme\avrdude. Dazu kann das Programm hier her­unter­geladen werden. Wir verwenden zum Pro­­gram­mieren nicht die einzelnen Dateien für EEPROM und Flash, und explzite Werte für die Fuses, sondern nehmen alle Informationen zum Programmieren des Atmel-Prozessors 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 Desktop gespeichert. Anstelle der Datei-Endung „.txt“ verwenden wir die Endung „.bat“. Bat steht dabei für das englische „Batch“, also quasi für einen Befehlsstapel. Für Windows bedeutet diese Endung, dass die Datei wie ein ausführbares Programm 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 Speicherbereiche des ATTiny2313a geschrieben werden sollen. Das sind alo nacheinander EEPROM, Flash, 3 mal Fuses und das Lock-Bit. Im Beispiel habe ich die .ELF Datei für den RM8S88NB beispielhaft genommen. Das Script kann natürlich auch für alle Decoder die ebenfalls den ATTiny2313a verwenden und AKS88NB 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 Abblenden der gelben LED zeigt an, dass das ISP Programm aktiv ist. Im Bildschirm des PC wird in einem DOS Fenster die Ausführung der Befehlszeilen aus der Batchdatei angezeigt. Der ganze Vorgang läuft in wenigen Sekunden ab und im DOS-Fenter 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 Adresse 1 (1-8) und funtioniert ohne weiteres Anlernen auf Anhieb


Stand 05.09.2025 Gerard Clemens