Hej Leute,
im Rahmen meiner Bachelorarbeit habe ich ein eigenes Board entwickelt mit einem ATmega32U4 Chip drauf. Auf den ATmega wurde der Arduino Leonardo Bootloader auch erfolgreich aufgespielt.
Jedoch soll das Board am Ende in Simulink verwendet werden und mithilfe des Arduino Packages dort von den Studierenden programmiert werden. Wieso über Simulink programmieren? Nun, die Studierenden sollen ein Regelsystem auslegen und es ist eine Forderung meines Betreuers dies über Simulink zu machen.
Zum Problem: Mein eigen entwickeltes Board lässt sich einwandfrei in der Arduino IDE bespielen und verwenden. Die Beispielsketches lassen sich also ganz gewöhnlich draufflashen.
In der Simulink Umgebung hingegen schlägt der Upload permanent Fehl. Dasselbe Verhalten tritt auch bei einem Referenzboard, welches ich über Amazon bestellt hatte auf.
Das Problem liegt darin, dass MATLAB sowie Simulink den COM Port des Leonardo nicht richtig identifizieren können. In Matlab selbst genügt es dafür einfach den COM Port mit anzugeben wie beispielsweise so:
>> arduino('/dev/cu.usbmodem111401', 'Leonardo')
ans =
arduino with properties:
Port: '/dev/cu.usbmodem111401'
Board: 'Leonardo'
AvailablePins: {'D0-D13', 'A0-A5'}
AvailableDigitalPins: {'D0-D13', 'A0-A5'}
AvailablePWMPins: {'D3', 'D5-D6', 'D9-D11', 'D13'}
AvailableAnalogPins: {'A0-A5', 'D4', 'D6', 'D8-D10', 'D12'}
AvailableI2CBusIDs: [0]
AvailableSerialPortIDs: [1]
Libraries: {'I2C', 'SPI', 'Servo'}
Show all properties
Versuche ich das ganze ohne angegeben Port:
>> arduino()
erhalte ich folgende Fehlermeldung:
Index exceeds the number of array elements. Index must not exceed 13.
Über Simulink kann man das ganze ebenfalls auch manuell eingeben:
Dort tritt dann am Ende jedoch ebenso folgende Fehlermeldung auf:
Error:The following error occurred during deployment to your hardware board:
Index exceeds the number of array elements. Index must not exceed 13.
Allerdings muss bei dem Arduino Leonardo Board im Gegensatz zum Beispielsweise Arduino Mega der Host COM Port und Bootloader COM Port getrennt voneinander eingegeben werden. Ich steh dazu auch mit dem MATLAB Support im Kontakt nur leider haben die dafür bisher auch keine richtige Lösung gefunden. Ich erinnere mich jedoch dunkel, dass bei dem Leonardo beim Upload intern ein virtueller COM Port aufgemacht wird, wenn der Sketch aufgespielt wird. Korrigiert mich gerne wenn ich da falsch liege.
Jedenfalls wollte ich parallel zum MATLAB Support hier nochmal fragen, ob wer dafür eine Lösungsidee in petto hat oder was man noch austesten könnte.
Mein Betriebssystem ist nen macOS mit M1 Mac Mini. Windows kann ich erst im Laufe der nächsten Woche austesten. Laut Support ist unter macOS die Problematik mit der COM Port Erkennung wohl nicht gänzlich unbekannt, aber die passende Codezeile wurde im Package selbst schon mit der Alternative ausgetauscht. Eventuell stimmt auch nicht die Default Baudrate für das Downloaden des Sketches?