Atmel AVR Mikrocontroller mit OpenSuse: ISP-Adapter

Page content

ISP=In System Programming. Der Flash-Speicher des Microcontrollers wird beschrieben, wobei der Controller in der Schaltung verbleibt, er wird also nicht entnommen, programmiert und wiedereingesteckt.

ISP erfolgt mit der passenden Software und einem ISP-Adapter. Im Arduino-Fall ist das einfach ein USB-Kabel, es kann aber auch komplexer sein.

Es gibt unterschiedliche Adapter, für RS232, Parallel, USB, …

Serieller ISP-Adapter

Mein erster ISP Programmer, selbstgebaut aus einigen wenigen Bauteilen. Bauanleitungen dazu gibt es zahlreich im Internet. Mein Adapter passt z.B. direkt an obiges Pollin-Board und entspricht der “Pony Seriell (ponyser)” Definition des avrdude Programms.

Für die ISP-Programmierung benötigt man ein RS232-Kabel, auf dem 1:1 die Anschlüsse 3,4,5,6,7,8,9 durchgeführt sind.

Computerseitig wird ein vollwertiger USB-Anschluss benötigt, der die RS232-Pegel einhält. Siehe Details dazu hier hier.

ISP-Adapter Schaltplan.

Die Schaltung passt komplett auf einer passend gemachten Lochrasterplatine in einen RS232-Stecker hinein. Hier ist der Stecker ohne Gehäuse dargestellt.

Es gibt übrigens auch Boards mit einer 6-poligen Buchse statt der oben dargestellten 10-poligen. Dies gilt z.B. für das LAB-MEGA Board von Dr. Rakers. Für solche Boards habe ich mir einen Adapter gelötet, der auf der einen Seite eine 10-polige Buchse und auf der anderen Seite einen 6-poligen Stecker hat. Das Pin Mapping ist wie folgt:

10-polige Buchse (wie z.B. auf Pollin Board oder Ulrich Radigs Boards)  6-polige Buchse (z.B. Rakers LAB-MEGA)
9 - MISO 1
5 - /RESET 5
6 - GND 6
7 - SCK 3
1 - MOSI 4

Schließlich gibt es noch eine verwirrende Besonderheit beim ATmega128: Dort wird die ISP-Programmierung nicht über die auch vorhandenen Pins MOSI+MISO vorgenommen, sondern über zwei “neue” Pins namens PDI und PDO (nicht zu Verwechseln mit den Port-Pins PD1 und PD0 !!!). Auch hier das Mapping:

ISP Pin Bezeichnung AT mega 128 Port-Pin am AT mega128
MOSI PDI PE0 (Port E, Pin 0)
MISO PDO PE1 (Port E, Pin 1)
# Beispielaufruf
avrdude  -p m644 -c ponyser -P /dev/ttyUSB0  -U flash:w:/home/dennis/CLionProjects/clockGenerator_50Hz/.pio/build/program_via_AVRISP_mkII/firmware.hex

Nutzung eines USB Programmers von Atmel

Mangels serieller Schnittstellen an neueren PCs (besonders bei Notebooks) bietet sich eher die Nutzung eines solchen Programmers an.

Der AVR ISP mkII von Atmel

Das Innere des Programmers - wesentlich komplexer als der triviale RS232 Programmer. Von diesem Programmer gibt es zahlreiche Nachbauten, die nicht unbedingt 100% kompatibel sind.

Falls bei Nutzung des USB-Programmers der Programmer nicht gefunden wird, sind eventuell die Regeln für den Zugriff auf USB nicht ausreichend. Dazu die Datei /etc/udev/rules.d/15-atmel.rules neu anlegen und dort hineinschreiben:

# Atmel AVR ISP mkII 
SUBSYSTEM=="usb", SYSFS{idVendor}=="03eb", SYSFS{idProduct}=="2104", GROUP="users", MODE="0660"
# reload rules with "udevadm control --reload-rules"
# 
# Beispielaufruf
avrdude  -p m644 -c avrispmkII -P usb  -U flash:w:/home/dennis/CLionProjects/clockGenerator_50Hz/.pio/build/program_via_AVRISP_mkII/firmware.hex

Nachtrag 2023: Diese Datei ist beispielsweise bei OpenSuse Leap 15.4 zwingend erforderlich. Ohne die Datei wird der Adapter nicht richtig angesprochen und kann nicht verwendet werden.

Nutzung usbasp Programmer

Sehr stabiler, kleiner USB Programmer. Für unter 10€ erhältlich. Erfinder ist Thomas Fischl, auf seiner Website sind ausführliche Informationen und z.B. neuere Firmware-Versionen erhältlich. Verwendet wird ein AtMega8, 12 Mhz Quarz. Es gibt einen Jumper J3 für Slow Clock und einen Jumper J2, mit dem man einen FW-Update einleiten kann.J1 dient der Versorgung des Zielsystems mit 3.3 bzw 5 Volt.

Im Bild oben ist auch ein Adapter 10-auf-6-polig zu sehen, Kostenpunkt rund 3€.

Aufruf mit:

avrdude -p m644 -c usbasp  -P usb  -U flash:w:flash.hex

udev rule für Linux:

cat /etc/udev/rules.d/99-USBasp.rules 
# USBasp - USB programmer for Atmel AVR controllers
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", MODE="0666"
SYMLINK+="usbasp"
# reload rules with "udevadm control --reload-rules"

Firmware Update

For Slow Clock option may be required. Follow https://blog.podkalicki.com/how-to-update-avr-usbasp-firmware-to-latest-version/

Nutzung DIAMEX PROG-SE

Dieser Adapter funktioniert bei mir nicht zuverlässig. Nur bei jedem zweiten Aufruf funktioniert die Übertragung. Dazu müssen die beiden Schalter des Adapters auf ON stehen. Ich empfehle den Adapter daher nicht.