Herunterladen von Controllern ohne Verwendung einer Arduino IDE-Konsole

Einführung

Wenn Sie mit Controllern eines verteilten Systems arbeiten, müssen Sie die Controller häufig neu starten. Die Verwendung der Arduino IDE-Konsole zum Neustart durch den Kunden ist nicht sehr praktisch, da für jeden Controllertyp die Art der Karte und die COM-Port-Nummern konfiguriert (oder überprüft) werden müssen. Diese Arbeiten sollten von mit der IDE vertrauten Mitarbeitern durchgeführt werden, und nicht jeder Kunde möchte wissen, dass das System aufgebaut ist auf Arduino-Controllern.

In dieser Arbeit betrachten wir die Optionen zum Herunterladen von Controllern (Arduino auf Atmega328 und Atmega32u4 und einem kompatiblen Teensy-Controller) in separaten Befehlen und über eine Batch-Datei ohne Verwendung der IDE.

Anordnung der USB-COM-Kommunikationskarten Arduino

Je nach Organisation des seriellen Kommunikationskanals können Arduino-Karten in Karten mit einem USB-UART-Konverter und Karten mit Mikrocontrollern unterteilt werden, die die USB-Kommunikation ohne externe Konverter unterstützen. Die ersten umfassen Arduino UNO, Arduino NANO, Arduino Mini, Arduino UNO Ethernet und Arduino UNO WiFi-Karten, die auf Atmega328- Mikrocontrollern basieren. Die zweiten sind Arduino Leonardo, Arduino Micro, Arduino Yun Mini, Arduino Industrial 101 und Arduino Leonardo Ethernet-Karten mit Atmega32u4- Controllern [1].

Laden Sie Arduino Controller (Atmega328) mit avrdude.exe herunter

Das Herunterladen der Hex- Datei auf den Arduino-Controller kann mit avrdude.exe erfolgen . Dieses Programm ist Teil des IDE-Konsolenpakets, z. B. Arduino Version 1.8.5. Der Loader avrdude.exe wird vom Dienstprogramm cmd oder der Eingabeaufforderung gestartet, die wie in Abbildung 1 dargestellt gestartet werden.


Abbildung 1 Ein Beispiel für die Ausführung des Dienstprogramms "Eingabeaufforderung".

Führen Sie die folgende Sequenz aus, um ein Beispiel für das Schreiben eines Befehls zum Laden von Hex- Code in einen Arduino-Controller auf Ihrem Computer zu erhalten.

• Verbinden Sie Arduino
• Laden Sie die Arduino IDE herunter
• Wählen Sie einen Arduino-Board-Typ aus dem Menü> Extras> Board>
• Wählen Sie den COM-Anschluss auf der Karte aus dem Menü> Extras> Anschluss>
• Setzen Sie das Upload-Flag auf der Registerkarte Einstellungen: Arduino IDE-Menü> Datei> Einstellungen> Ausführliche Ausgabe während> Upload anzeigen
• Startmenü> Skizze> Hochladen
Suchen Sie nach Abschluss des Downloads im Ausgabefenster der Arduino IDE-Konsole den Befehl mit avrdude . Er sieht beispielsweise folgendermaßen aus:

C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i 

Um den Befehl avrdude mit dem Dienstprogramm Eingabeaufforderung auszuführen, müssen doppelte Anführungszeichen in den Befehl eingegeben werden, wie unten gezeigt.

 "C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/<b>avrdude</b>" -"CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf" -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w:C:\Users\user-2\AppData\Local\Temp\arduino_build_628118/Blink.ino.hex:i 

Mit dem obigen Befehl können Hex- Programme in einen Arduino-Controller mit einem Atmega328-Chip und einem separaten USB-UART-Konverter geladen werden. Bei Controllern mit Atmega32u4, die USB-Kommunikation ohne Hardwarekonverter unterstützen, sind zusätzliche Schritte erforderlich, um den Befehl auszuführen, die im entsprechenden Abschnitt beschrieben werden.

Da das kompilierte Programm - die Hex-Datei im Ordner für temporäre Dateien gespeichert ist, während die IDE-Konsole geöffnet ist (.. \ AppData \ Local \ Temp \ ..), ist es besser, die Hex-Datei in einen separaten Ordner zu kopieren, den Bootloader avrdude.exe und die Datei avrdude.conf dort zu kopieren .

Nachdem Sie die Dateien (Abbildung 2) beispielsweise in den Ordner C: \ ArdIDE verschoben haben, hat der Download-Befehl mit den aktualisierten Dateizugriffspfaden die in Abbildung 3 gezeigte Form.

Bild
Abbildung 2 Platzieren des Bootloaders und der Hex-Datei in einem separaten Ordner.

Bild
Abbildung 3 Starten des avrdude-Bootloaders mit der Eingabeaufforderung.

Teensy-Controller wird mit dem Loader teensy_post_compile.exe geladen
Nach der Installation der Teensyduino- Software für die Teensy- Controller werden die entsprechenden Controller in der Geräteliste der Arduino IDE-Konsole angezeigt (siehe Abbildung 4).

Bild
Abbildung 4 Liste der Teensy-Controller in der Arduino IDE-Konsole.

Ein Beispiel für das Schreiben eines Befehls zum Laden von Hex-Code in einen Teensy- Controller erhalten Sie, indem Sie die oben für Arduino-Controller gezeigte Reihenfolge befolgen . Im Ausgabefenster müssen Sie das Bootloader-Beispiel finden - den Befehl teensy_post_compile . Zum Offline-Download können Sie die erforderlichen Dateien beispielsweise in einen separaten Ordner kopieren, wie unten gezeigt. Die Dateien teensy_post_compile, teensy_post_compile.exe und teensy.exe können dem Arduino-Paket entnommen werden, das durch die Teensy-Anwendung ergänzt wird.

Bild

Im Folgenden finden Sie Beispiele für Befehle zum Herunterladen der Hex-Dateien Blink_1.ino und Blink_2.ino auf zwei Teensy-Controller, die über einen USB-Hub an einen Computer angeschlossen sind.

 "C:\TnsIDE/teensy_post_compile" -file=Blink_2.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy 

 "C:\TnsIDE/teensy_post_compile" -file=Blink_1.ino "-path=C:\TnsIDE" "-tools=C:\TnsIDE" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy 

In diesen Einträgen werden die Hub-Ports als usb: 0 / 1A0000 / 0/1/1/1 und usb: 0 / 1A0000 / 0/1/1/2 bezeichnet.

Laden Sie Arduino Controller (Atmega32U4) mit avrdude.exe herunter

Arduino UNO-, Leonardo-, Micro- usw. Karten basieren auf dem ATmega32U4-Mikrocontroller. Dieser Mikrocontroller verfügt über einen eingebauten USB-Kanal (Full Speed ​​USB 2.0). Daher unterscheidet sich das Herunterladen von Programmen von dem in Betracht gezogenen Laden in ATmega328-Mikrocontroller über einen zusätzlichen USB-UART-Konverter.

Die COM-Portnummer des Arduino-Controllers ist beispielsweise in der Gerätemanagerliste aufgeführt.

Bild

Wenn der virtuelle COM-Port des Arduino pro Micro-Controllers geöffnet wird (mit einer Übertragungsfrequenz von 1200, ..., 9600, ... 115200 Baud), wird der Controller zurückgesetzt und das Anwenderprogramm gestartet. In der MATLAB-Umgebung lautet das Programm zur Erstellung virtueller Ports wie folgt.

 % create port. s=serial('COM15','Baudrate',9600); % 115200 fopen(s); 

Nach dem Schließen des virtuellen COM-Ports mit einer Frequenz ungleich 1200 Baud, wie unten gezeigt

 fclose(s); delete(s); clear s 

Das Anwenderprogramm der Steuerung wird ausgeführt.

Das Zurücksetzen des Controllers und das Starten des Controller-Bootloaders erfolgt nach dem Öffnen und Schließen des COM-Ports mit einer Frequenz von 12000 Baud durch die externe Umgebung, z. B. MATLAB, wie unten gezeigt.

 % create port. s=serial('COM15','Baudrate',1200); % 115200 fopen(s); pause(1.5); fclose(s); delete(s); clear s 

Dieselbe Operation kann mit dem Befehl mode ausgeführt werden, wie in Abbildung 5 dargestellt.

Bild
Abbildung 5 Ausführen des Modusbefehls in der Eingabeaufforderung. Der Befehl legt die Übertragungsfrequenz für den COM15-Port auf 1200 Baud fest, wodurch der Controller zurückgesetzt und der Bootloader gestartet wird. Außerdem werden die virtuellen Portnummern des Controllers in der Geräteliste vorübergehend geändert.

Nach dem Schließen des Ports (Befehl fclose (s)) erstellt der Controller Loader einen eigenen virtuellen (CDC) Port, der in der Gerätemanagerliste mit einer neuen Nummer für ca. 8 Sekunden angezeigt wird.

Bild

Nach dem Zeitpunkt des Bestehens des neuen virtuellen Ports (8 Sekunden) wird der COM-Port mit der ursprünglichen Nummer in die Liste der Geräte-Manager zurückgegeben.

Bild

Während des Bestehens des neuen COM-Ports kann das Benutzerprogramm über diesen mit dem Beispielbefehl avrdude der Arduino IDE-Konsole auf den Controller heruntergeladen werden. Das Abrufen eines Beispielbefehls für den avrdude-Bootloader in einer Arduino-IDE ähnelt der obigen Option für Atmega328-Mikrocontroller. Der erstellte virtuelle Port verschwindet aus der Liste der Geräte, nachdem die Karte neu gestartet und der COM-Port mit der ursprünglichen Nummer wieder in die Liste aufgenommen wurde.

Der Bootloader kann auch durch Verbinden des RST-Pins der Arduino-Platine mit GND-Masse gestartet werden.
Wenn das automatische Zurücksetzen des Controllers (durch Erstellen und Deaktivieren des COM-Ports mit einer Frequenz von 1200 Baud) nicht funktioniert, kann das Laden von Geräten (Arduino Leonardo, Arduino Pro Micro) auf Basis des ATmega32U4-Mikrocontrollers in der folgenden Reihenfolge über die Arduino IDE-Konsole durchgeführt werden.

1. Halten Sie die Reset-Taste gedrückt (oder schließen Sie den RST-Pin gegen Masse kurz). Die serielle USB-Verbindung wird getrennt. Der COM-Port des Controllers verschwindet aus der Liste der Geräte-Manager.

2. Drücken Sie die Taste Bild Laden Sie die Arduino-IDE (Strg + U) hoch. Abbildung 6 zeigt den Anfangszustand des Geräte-Managers (links) und der Arduino-IDE (rechts) zu diesem Zeitpunkt
Bild
Abbildung 6 Die COM-Portnummer im Geräte-Manager und eine Anzeige des Programmkompilierungsprozesses in der Arduino IDE-Konsole.

3. Warten Sie, bis die Statusanzeige das Kompilieren von „Kompilieren“ abgeschlossen hat, und fahren Sie mit dem Herunterladen von „Hochladen“ fort, wie in Abbildung 7 dargestellt.

Bild
Abbildung 7 Die Nummer des neuen temporären COM-Ports im Geräte-Manager und eine Anzeige des Programmladevorgangs in der Arduino IDE-Konsole.

4. Lassen Sie die Taste „Reset“ los (öffnen Sie den RST-Pin). Die USB-Verbindung wird wiederhergestellt. Download läuft. Der Indikator zeigt das Ende des Uploads mit der Phrase Fertig Upload an (siehe Abbildung 8).

Bild
Abbildung 8 Die COM-Portnummer im Geräte-Manager und ein Hinweis auf den Abschluss des Programmladens in der Arduino IDE-Konsole.

Herunterladen von Controllern über eine Batch- (Befehls-) Bat-Datei

Das Offline-Laden (ohne Verwendung der Arduino IDE-Konsole) kann mithilfe einer Batch-Datei (Batch-Datei) erfolgen. Ein Beispiel für eine Batch-Datei (mit der Erweiterung bat) zum Herunterladen von HEX-Dateien auf zwei Arduino Pro Micro-Controller (Atmega32u4), die über den ersten Hub mit dem Computer verbunden sind, auf zwei Teensy-Controller, die über den zweiten Hub mit dem Computer verbunden sind, und auf den Arduino UNO-Controller (Atmega328). unten. Die heruntergeladenen HEX-Dateien und alle dafür erforderlichen Programme wurden zuvor in dem in Abbildung 9 gezeigten freigegebenen Ordner abgelegt.

Bild
Abbildung 9 Beispielinhalt eines Ordners zum Offline-Laden von 5 Controllern: Arduino Pro Micro (Atmega32u4), Teensy und Arduino UNO (Atmega328)

Die Batchdatei mcLoad.bat zum Offline-Laden von fünf Controllern ist unten dargestellt. Vor dem Laden der Arduino Pro Micro-Controller werden Verzögerungen von einer Sekunde (TIMEOUT / T 1 / NOBREAK) hinzugefügt. Vor dem Laden des zweiten Teensy-Controllers wird eine Verzögerung von 2 Sekunden eingegeben. Nachdem alle Controller vollständig geladen wurden, wird das Programmfenster Teensy.exe geschlossen.

 echo OFF echo UPLOAD: Arduino Pro Micro 1 mode COM42 BAUD=12000 TIMEOUT /T 1 /NOBREAK avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM45 -b57600 -D -Uflash:w:micro.ino.hex:i echo UPLOAD: Arduino Pro Micro 2 mode COM43 BAUD=12000 TIMEOUT /T 1 /NOBREAK avrdude -Cavrdude.conf -v -patmega32u4 -cavr109 -PCOM44 -b57600 -D -Uflash:w:micro.ino.hex:i echo UPLOAD: Arduino UNO avrdude -Cavrdude.conf -v -patmega328p -carduino -PCOM3 -b115200 -D -Uflash:w: BlinkUNO.ino.hex:i echo UPLOAD: Teensy 1 "C:\mcLOAD/teensy_post_compile" -file=Blink_1_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/2 -portlabel=COM23 (Teensy 3.2) Serial -portprotocol=Teensy REM Delay 2 seconds: TIMEOUT /T 2 /NOBREAK echo UPLOAD: Teensy 2 "C:\mcLOAD/teensy_post_compile" -file=Blink_2_Teensy.ino "-path=C:\mcLOAD" "-tools=C:\mcLOAD" -board=TEENSY31 -reboot -port=usb:0/1A0000/0/1/1/1 -portlabel=COM19 (Teensy 3.2) Serial -portprotocol=Teensy REM Close Teensy.exe taskkill /f /IM Teensy.exe 

Das Trennen des Controllers von der USB-Leitung wirkt sich nicht auf das Laden der verbleibenden Controller aus.

Um den Arduino-Namen aus der Liste der Geräte-Manager auszuschließen, z. B. "Arduino UNO (COMX)", können Sie Programme wie RegOwnersahipEx oder Hardware-Klone von Arduino-Controllern, z. B. WAVGAT, verwenden, die in der Liste der Geräte als "USB-SERIAL CH340 (COMX" angegeben sind) ) ”.

Bibliografische Liste

1. Vergleich der Arduino-Boards (Tabelle) digitrode.ru/arduino-comparison.html
2. Arduino Micro, shop.pimoroni.com/products/arduino-micro
3. Dr. Bob Davidov. Computersteuerungstechnologien in technischen Systemen portalnp.ru/author/bobdavidov.

Source: https://habr.com/ru/post/de437360/


All Articles