Hallo zusammen.
Ich habe von einem Bekannten (Elektronikbastler) einen Digispark Mini
geschenkt bekommen.
Die Treiber habe ich installiert, den Digispark habe ich in die Arduino
IDE eingebunden und anschließend ein Beispielprogramm geflasht, was auch
das tut was es soll (die auf dem Board aufgelötete LED blinken lassen).
Nun möchte ich ein kleines Programm schreiben, welches über USB (über
den virtuellen COM-Port -> USB) ein paar Zeichen ausgibt.
Allerdings erscheint der Digispark nicht als virt. COM-Port in meinem
Gerätemanager unter Windows, auch nicht im Terminal erscheint ein
COM-Port, den ich auswählen könnte.
Könnt ihr mir weiterhelfen oder hattet ihr bereits ähnliches "Problem",
dass der Digispark nicht als COM-Port aufgeführt wird?
Eine Verbindung hat der Digispark ja zum OS, sonst hätte ich ja
offensichtlich nicht das Beispiel-Blink-Programm flashen können.
In der Arduino IDE erscheint als ausgewähltes Modul übrigens unten
rechts im IDE-Fenster "Digispark (Default - 16.5Mhz) auf COM7".
Vielen Dank und Gruß
Ok, danke!
Immerhin konnte ich jetzt schon mal anhand deines Links die Lib
einbinden und den Controller mit der eingebundenen Lib flashen.
Allerdings wird weiterhin der Controller nicht als virt. COM-Port (im
Terminal und im Gerätemanager) erkannt.
Nach dem Flashen und erneutem Einstecken des Digisparks erscheint in
Win10 die Meldung, dass es sich um ein "unbekanntes USB-Gerät" handelt
(und somit nicht genutzt werden kann).
Sämtliche Versuche haben nun auch nicht weitergeholfen.
Also doch wieder so ein schnell produzierter und wackelig
funktionierender Schrott :-(
Joh schrieb:> Also doch wieder so ein schnell produzierter und wackelig> funktionierender Schrott
Das Ding nutzt V-USB, und CDC (serielle Schnittstelle) ist via V-USB
nicht unter Einhaltung der USB-Spezifikation umsetzbar.
Ältere Betriebssysteme waren da etwas toleranter.
Schrott ist das Ding trotzdem nicht, denn niemand zwingt einen, CDC
damit umzusetzen. Für Tastatur-, Maus- oder Joystick-Anwendungen lässt
sich das Biest nämlich auch einsetzen, das alles nutzt HID, und das kann
mit V-USB spezifikationskonform umgesetzt werden.
Ok..
Und wie bringe ich das Gerät nun dazu, dass es als virt. COM-Port ein
harmloses Zeichen an den PC (Terminal) schickt?
Treiberinstallation hat auch mit der HID-Lib ("keyboard example")
funktioniert..
Jk schrieb:> Und wie bringe ich das Gerät nun dazu, dass es als virt. COM-Port ein> harmloses Zeichen an den PC (Terminal) schickt?
Gar nicht. Virtueller COM-Port setzt CDC voraus, und das kann V-USB
nicht standardkonform umsetzen, weswegen Dein Windows sich dem ganzen
verweigert.
> Und wie bringe ich das Gerät nun dazu, dass es als virt. COM-Port ein> harmloses Zeichen an den PC (Terminal) schickt?
Das tut es schon. Du stellst die Falsche Frage. Du solltest fragen: Wie
bringe ich mein Windows dazu, dieses Gerät zu akzeptieren.
Versuche es mal mit Linux, könnte aufschlussreich sein. Vor allem die
Ausgabe des "dmesg" Befehls.
Also Voraussetzung für mein Vorhaben ist explizit Windows (XP-10).
Wenn es -egal ob es nun am OS des PCs oder am Digispark liegt- nicht
funktioniert, muss ich wohl oder übel auf eine andere wenn auch
überdimensionierte Plattform mit hardware-USB-Converter (Arduino Nano)
zurückgreifen..
Schade..
Jk schrieb:> muss ich wohl oder übel
Oder auf CDC verzichten. Wenn Du einfach nur ein paar Zeichen ausgeben
willst, kann sich Dein Digispark auch als USB-Tastaur verkaufen. Das ist
HID, und das ist spezifikationskonform mit Low-Speed-USB umsetzbar.
Ja, das mit dem HID hatte ich vor.
Leider habe ich nichts brauchbares gefunden, wie der Controller Daten
empfängt. Nur, wie er Daten rausschickt (wenn der Digispark z.B eine
Nur unter alten Windows-Versionen.
Sonst nicht, weil das Ding nur Low-Speed-USB unterstützt, und das für
serielle Schnittstellen nötige CDC-Protokoll nicht spezifikationskonform
mit Low-Speed-USB realisierbar ist.
Daß das überhaupt irgendwo funktioniert, liegt an einer sehr laxen
Auslegung der USB-Spezifikation durch alte Betriebssystemversionen.
Du musst also entweder ein USB-Protokoll verwenden, das mit
Low-Speed-USB auskommt (was die serielle Schnittstelle ausschließt) oder
einen anderen Controller mit USB-Hardware (wie den Atmega32U4)
verwenden.
Noch eine Frage zu dem HID:
Da das HID ja bei mir vom example-Sketch funktionierte und der Digispark
auch eine Tastatur emulierte (habe ich im Editorfenster gesehen), ist es
auch möglich, dass der Digispark über den HID-Mode Daten empfangen kann?
Schließlich wäre das ja genau jenes, was ich bräuchte?!
Gruß
joh schrieb:> ist es auch möglich, dass der Digispark über den HID-Mode Daten> empfangen kann?
Ja, HID-Geräte können auch Daten empfangen. Die LEDs von Tastaturen
beispielsweise werden auf diese Art angesteuert, oder "force
feedback"-Joysticks.
Nur funktioniert das über komplett andere Systemfunktionen als die
Ansteuerung einer (virtualisierten) seriellen Schnittstelle.
Naja, das müsste ich dann entsprechend für die Windows-Applikation
programmieren, dass ein "Zeichen über HID" gesendet werden soll und eben
nicht über den virt. COM-Port. Das ist dann der nächste Step..
Ich würde das Ganze für den PC in VB.net (Visual Studio) programmieren
wollen.
Die App soll einfach nur zwei Buttons beinhalten, woraufhin die Pins des
Digisparks nach Anklicken auf HIGH oder LOW gehen.
Gruß
Nochmals final den Frust ablassen:
- Nach mehrstündigen Versuchen scheint es weder über DigiUSB/CDC oder
anderweitig (trotz Einarbeitung in dürftige "Tutorials" im Internet)
nicht zu klappen. Es ist auch nicht ein einziges Beispiel im Netz zu
finden, wo von oben bis unten beschrieben ist, wie man selbst die
mitgelieferten Beispiel-Sketches zum Laufen bringt.
Doch scheint mein Vorhaben so einfach zu sein: Ein Zeichen via USB an
den Digispark zu senden, woraufhin er die onboard-LED ein/ausschalten
soll.
Naja, dann wars das mit Digispark erstmal. Somit ist das Ding (für mich
und mein ach so ominöses Projekt) unbrauchbar.
Die Hypes im Netz über so ein Ding verstehe ich dann trotzdem nicht.
Welche Hypes?
Das Teil hat nicht einmal eine richtige USB Schnittstelle!
Wer vom Fach ist, weiß dass man davon ungefähr so viel halten kann, wie
von Lautsprecherboxen aus Plastik oder Goldfisch-Gläser ohne
Filteranlage oder Haarschneider am Staubsauger-Rohr oder Edel-Fleece
Pullover mit Cashmeregriff von QVC.
Stefan U. schrieb:> Das Teil hat nicht einmal eine richtige USB Schnittstelle!
Das ist natürlich wahr.
Allerdings schafft es die Arduino IDE auf dem Weg da Software drauf zu
spielen. Auch unter Win 10.
Das ist der Beweis für: Unmöglich ist es nicht.
Ist vielleicht nicht jedermanns Sache selber einen Treiber für Win 10 zu
schreiben. (Meine jedenfalls nicht)
Und sowieso reichen meine USB Kenntnisse dafür nicht aus.
Joh schrieb:> - Nach mehrstündigen Versuchen scheint es weder über DigiUSB/CDC oder> anderweitig (trotz Einarbeitung in dürftige "Tutorials" im Internet)> nicht zu klappen.
Habe das mal (wieder) kurz getestet.
Wenn ich einen solchen präparierten Digispark(Klon) in mein Win10 stecke
gibts einen blauen Bildschirm. Natürlich mit dem zwangsläufig folgenden
Win Neustart.
Wie gesagt, bei mir sind für solche Zwecke "Beetle 32U4" im Einsatz.
Die haben solche Probleme nicht. Und sind nur unwesentlich größer.
> Ist vielleicht nicht jedermanns Sache selber einen Treiber für> Win 10 zu schreiben
Das ist der Knackpunkt. Wenn du doch in diese Richtung weiter forschen
möchtest, könnte der generische libusb Treiber hilfreich sein, den
letztendlich auch Arduino (wegen avrdude) verwendet. Ich würde dann mal
dessen Dokumentation lesen.
Allerdings fürchte ich, dass man dazu erstmal lernen muss, wie USB
überhaupt funktioniert und die Fachbegriffe dazu.
Für meinen Hausgebrauch bevorzuge ich µC Platine mit USB-UART. Mit dem
STM32F103 komme ich klar, denn dazu liefert der Hersteller eine USB-UART
(CDC) Library.
Stefan U. schrieb:> könnte der generische libusb Treiber hilfreich sein, den> letztendlich auch Arduino (wegen avrdude) verwendet.
verwendet wird nicht avrdude, sondern micronucleus.exe.
Aber ansonsten hast du natürlich recht.