Arduino AVRDUDE autoreset

Es gibt zahlreiche Beiträge in Blogs, in denen folgendes Problem beschrieben wird:
Bei bestimmten Arduino-Clones treten beim Hochladen eines Sketch aus der Arduino-IDE „Fehler“ auf, ganz konkret lautet das dann:

stk500v2_ReceiveMessage(): timeout

Der Hintergrund ist wohl, dass das Reset-Signal auf dem Arduino nicht sauber generiert wird und dadurch der Upload fehlschlägt.

Es gibt z.B. Vorschläge im richtigen Moment den Onboard-Reset-Taster zu drücken oder sogar einen bestimmten Kondensator auf dem Board auszutauschen, der bei Clones wohl verantwortlich ist, dass das Reset-Signal nicht sauber generiert wird.

Timeout avrdude Arduino clone

Ich benutze die Arduino-IDE stets auf Raspberry Pi Systemen, die Version 4 des kleinen, preiswerten Computers ist leistungsstark genug, um flüssig zu programmieren und zu testen. Ich dachte mir deshalb, dass man das Reset-Problem auch rein per Software und einem einzigen Reset-Draht zwischen RPi und Arduino lösen könnte und bin zu folgender funktionsfähiger Umsetzung gekommen:

Zur Programmierung wird von der IDE das Programm avrdude verwendet, das die IDE mitbringt und das beim Raspberry Pi in folgendem Verzeichnis liegt:
/opt/arduino-1.8.15/hardware/tools/avr/bin/avrdude
Die Versionsnummer variiert natürlich, hier im Beispiel ist sie die 1.8.15

Der Arduino wird per USB an den Pi angeschlossen, zusätzlich habe ich eine Verbindungsleitung vom Raspberry Pi, Pin 37 zum Reset-Anschluss am Arduino gesteckt, dafür benötigt man ein Kabel mit Kupplung und Stecker (w/m), siehe Fotos.
Ground wird schon über den USB-Stecker gebrückt, d.h. ein zusätzliches Kabel reicht.

Sicherheitshinweise
Wichtig: Arduinos arbeiten i.d.R. mit 5 Volt, der Raspberry Pi mit 3,3 Volt, das kann ohne Pegelwandler oder Widerstände schnell zu einem Schaden führen. In meinem Fall wird aber nur der GPIO-Output des Pi an den Reset-Input am Arduino gesteckt, anders herum wäre eine Verbindung nicht zu empfehlen! Auch ist es ratsam Verbindungen nur zu stecken, wenn die Systeme stromlos sind.

Reset Kabel und Arduino ist über USB-Kabel mit dem Raspberry Pi 4B+ verbunden
Raspberry Pi 4B+, Pin 37 (GPIO 26),
siehe: https://www.raspberrypi.org/documentation/usage/gpio/

Haftungsausschluss
An dieser Stelle sei darauf hingewiesen, dass ich die Anleitung sorgfältig geprüft habe, für evt. Schäden aber nicht hafte!
Um es englisch zu sagen: Be carefully and use it at your own risk.

Installation
Wenn man diese Hinweise verinnerlicht hat, kann man innerhalb von wenigen Sekunden die Scripte von mir über den Benutzer pi installieren, indem man den folgenden Befehl hier herauskopiert und in der Kommandozeile (bash shell) auf den Pi eingibt:

wget -qO- https://mobiletiger.jorba.de/wp-content/uploads/2021/06/autoreset-install.sh | bash -s --

Was macht die Installation?
Es wird ein Verzeichnis /home/pi/autoreset angelegt und dort ein Bash-Script und ein python-Script angelegt. Im Originalverzeichnis von avrdude (siehe oben) wird das Programm avrdude in avrdude-original umbenannt und ein symbolischer Link auf das Script im Homeverzeichnis erzeugt. Das Script erzeugt beim Aufruf einen kurzen Reset-Impuls für den Arduino und zwar genau in dem Moment nach der Kompilierung, wenn avrdude zum Hochladen (flashen) des Programms aufgerufen wird. Danach ruft es das Original avrdude auf, das Script wird durch die Installation quasi nur „dazwischengeklinkt“.
Ablauf: Arduino IDE –> avrdude (symlink) –> Reset-Script –> Original avrdude

Das hat den Vorteil, dass man ganz normal aus der Entwicklungsumgebung kompilieren und hochladen kann und es jetzt auch problemlos jedes Mal klappt – ohne Lötarbeiten oder Drücken des Reset-Tasters im richtigen Moment.

Das Installationsscript ist so geschrieben, dass es testet, ob das Einklinken schon erfolgt ist, dann wird dieser Schritt übersprungen, im Installationsscript kann man ganz vorne unter PIN=37 auch einen anderen GPIO eintragen, wenn man das möchte. Dann sollte man das Script zunächst ins pi-Home Verzeichnis herunterladen, die Pin-Nummer editieren, das Script ausführbar machen und dann starten:

cd
wget -https://mobiletiger.jorba.de/wp-content/uploads/2021/06/autoreset-install.sh
nano autoreset-install.sh
# Die Zeile PIN= anpassen
chmod +x autoreset-install.sh
./autoreset-install.sh

De-Installation:
Falls das Script nicht gefällt oder mit bestimmten Geräten nicht funktionieren sollte, kann man es einfach wieder loswerden, indem man den „symlink“ im Arduino-avrdude-Verzeichnis löscht, das avrdude-Programm zurück-umbenennt und das autoreset-Verzeichnis im Home des Users pi löscht:

# De-Installation:
cd /opt/arduino*/hardware/tools/avr/bin
rm avrdude
move avrdude-original avrdude
rm -r /home/pi/autoreset

Als Alternative entfernt man einfach das Reset-Kabel.

Beitrag erstellt 9

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

I accept that my given data and my IP address is sent to a server in the USA only for the purpose of spam prevention through the Akismet program.More information on Akismet and GDPR.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Verwandte Beiträge

Beginne damit, deinen Suchbegriff oben einzugeben und drücke Enter für die Suche. Drücke ESC, um abzubrechen.

Zurück nach oben