Forum: Mikrocontroller und Digitale Elektronik USART Tastendruck senden


von Dominik S. (thecoon)


Lesenswert?

Hallo!

Ich besitze ein mysmartcontrol MK2 mit einem Atmega8 und einem CP2102 
USB-Controller. 
(http://shop.myavr.de/Systemboards%20und%20Programmer/mySmartControl%20MK2%208K.htm?sp=article.sp.php&artID=200069)

Ich würde gerne via USART (double speed) einen Tastendruck an Windows 
senden. Allerdings soll erkannt werden, welcher Button gedrückt wurde. 
Das sollte ja ohne Probleme mittels Kombinationen der Bits 
funktionieren. Jedoch sollen die Tasten vom Windows HID USB-Treiber 
erkannt und interpretiert werden.

Ein anderer mC ist leider keine Option, zumal es mit diesem auf jeden 
Fall funktioniert.

Ich würde mich sehr über Tipps freuen.

Grüße
Coon

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> Jedoch sollen die Tasten vom Windows HID USB-Treiber erkannt und
> interpretiert werden.

Keine Chance, der HID-Treiber bekommt die vom CP2102 übertragenen Daten 
nicht zu gesicht. Das ist eine USB-UART-Bridge mit proprietärem 
Protokoll, kein HID.

Um eine Tastatur über eine serielle Schnittstelle anzuschließen, hilft 
vielleicht das hier:

https://www.232key.com/

von Jim M. (turboj)


Lesenswert?

Dominik S. schrieb:
> Jedoch sollen die Tasten vom Windows HID USB-Treiber
> erkannt und interpretiert werden.
>
> Ein anderer mC ist leider keine Option, zumal es mit diesem auf jeden
> Fall funktioniert.

Du braucht aber zwingend andere Hardware, denn die USB2UART Chips kann 
man nicht auf USB Tastatur umprogrammieren.


Eine Idee wäre das Schlachten einer billigen USB Tastatur, bei der man 
die entsprechende Taste(n) z.B. mit einem Optokoppler überbrückt.

von Dominik S. (thecoon)


Lesenswert?

Vielen Dank für die Antworten!

ich möchte keine ASCII-Zeichen übertragen und somit eine Tastatur bauen, 
sondern das Gerät soll als Controller bei "Geräte und Drucker" erkannt 
und genutzt werden. Ich weiß, dass ein ehemaliger Klassenkamerad das mit 
genau diesem mC hin bekommen hat. Ich habe nur leider keinen Kontakt 
mehr zu ihm.

Über weitere Ideen würde ich mich freuen.

LG
Coon

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> sondern das Gerät soll als Controller bei "Geräte und Drucker" erkannt
> und genutzt werden.

Und dann soll es Tastendrücke senden?

> Ich weiß, dass ein ehemaliger Klassenkamerad das mit genau diesem mC hin
> bekommen hat.

Wenn er V-USB verwendet, könnte das sein. Sonst aber trügt Dich Deine 
Erinnerung.

von Dominik S. (thecoon)


Lesenswert?

Rufus Τ. F. schrieb:
> Und dann soll es Tastendrücke senden?

Genau! Es soll wie ein USB-Controller für ein paar Euronen 
funktionieren.

Auch kann ich mich gut erinnern, dass mein Klassenkamerad das ganze in 
Bascom realisiert hat.

Geht das in Verbindung mit V-USB?

So wie ich das verstanden habe, ist V-USB ein Software-USB-Interface für 
serielle Verbindungen. So etwas bräuchte ich doch nur, wenn mein mC kein 
USB-Interface hätte, oder?

Ich habe diesen mC bisher nur mit Bascom programmiert und in meiner Uni 
lerne ich C leider nur mit einem simulierten mC (heißt wohl simuC und 
wir haben ein Bandlaufmodell und ein User-Interface. Wir Studenten sind 
uns nicht einig, ob der Prof das selbst geschrieben hat. lol) 
Dementsprechend bin ich, was mController angeht, in C ein kompletter 
Neuling.

LG
coon

von Timmo H. (masterfx)


Lesenswert?

Dominik S. schrieb:
> Jedoch sollen die Tasten vom Windows HID USB-Treiber erkannt und
> interpretiert werden.
Digispark ist dein Freund. Ist ein attiny85 drauf und ein Beispiel um 
eine Tastatur via V-USB zu emulieren ist auch schon in arduino 
verfügbar.
Ich benutze das Ding um Via NFC (Mifare Dongle) mein Windows zu sperren 
bzw. zu entsperren - via Tastendrücke die das Passwort eingeben.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> Genau! Es soll wie ein USB-Controller für ein paar Euronen
> funktionieren.

Und was bitte soll ein "USB-Controller für ein paar Euronen" sein? 
Kannst Du das präzisieren?

> So wie ich das verstanden habe, ist V-USB ein Software-USB-Interface für
> serielle Verbindungen.

Nein, mit seriellen Verbindungen hat das nichts zu tun. V-USB ist eine 
Software-Emulation von Low-Speed-USB (1.5 MBit/sec), womit 
beispielsweise HID-Geräte (Eingabegeräte wie Mäuse, Tastaturen, 
Graphiktabletts etc.) arbeiten. Zwar kann man auch eine serielle 
Schnittstelle (CDC) damit nachbilden, das aber ist nicht 
spezifikationskonform und daher problematisch, nicht jedes 
Betriebssystem akzeptiert so etwas.

> So etwas bräuchte ich doch nur, wenn mein mC kein
> USB-Interface hätte, oder?

Richtig. Und Dein Atmega8 hat kein USB-Interface.

So etwas ähnliches wie V-USB hat anscheinend jemand auch für Bascom 
gebastelt:

http://www.elektronik-labor.de/AVR/USBbascom.html

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Dominik S. schrieb:
> Genau! Es soll wie ein USB-Controller für ein paar Euronen
> funktionieren.

Guck dir mal den Arduino Pro Micro an. Der kann das für ein paar 
Euronen, genau genommen für 4,23 €. Und mit der Arduino IDE werden 
Beispiele für die Verwendung als Tastaturemulator installiert, die man 
für seinen Verwendungszweck nur leicht abpassen musst.
https://www.ebay.de/itm/400988209614

von Dominik S. (thecoon)


Lesenswert?

Rufus Τ. F. schrieb:
> Und was bitte soll ein "USB-Controller für ein paar Euronen" sein?
> Kannst Du das präzisieren?

Zum Beispiel sowas: 
https://www.amazon.de/Exlene®-Nintendo-Controller-Gamepad-Joystick/dp/B06Y2D9QF9/ref=mp_s_a_1_2?__mk_de_DE=ÅMÅZÕÑ&qid=1530955883&sr=8-2-spons&pi=AC_SX236_SY340_FMwebp_QL65&keywords=controller+usb&psc=1

Rufus Τ. F. schrieb:
> Und Dein Atmega8 hat kein USB-Interface.

Ich dachte der CP2102 fungiert als solches?

Edit: kann ich besagte Taster-Signale wirklich nicht via TxD an den PC 
senden?

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

Dominik S. schrieb:
> Edit: kann ich besagte Taster-Signale wirklich nicht via TxD an den PC
> senden?

Du bringst da vielleicht was durcheinander. Du kannst seriell an den PC 
senden, wenn der einen seriellen Port hat, dazu gibt es heute 
USB-Seriell-Adapter für wenige Euro (am PC!). Dann hast du auf deiner 
Controller-Seite mit USB garnichts zu tun (brauchst aber ein UART, aber 
das hat ja so gut wie jeder Controller). Das ist sehr einfach.

Du kannst das genauso machen, aber den USB-Seriell-Adapter mit in dein 
Gehäuse einbauen, dann sieht man von aussen nur den USB-Anschluss. Ist 
genauso einfach.

Du kannst einen Controller mit USB nehmen, da brauchst du normalerweise 
die USB-Hardware und einen passenden USB-Stack, aber dann braucht man 
kein TxD-Signal. Man muss den Controller selbst als USB-Device 
programmieren, ein TxD gibt es dann nur virtuell oder garnicht, je 
nachdem als was das USB-Interface sich ausgibt, das muss ja nicht RS232C 
sein, es kann auch Keyboard oder HID spielen. Das ist schon einiger 
Entwicklungsaufwand, und du hast die Frage nach Vendor-ID usw. am Hals.

Und wenn du garnichts anderes zu tun hast, kannst du schliesslich auch 
einen USB-Controller nehmen, eine eigene Klasse definieren und deinen 
ganz eigenen Treiber für Windows schreiben.

Ohne Anspruch auf Vollständigkeit.

Georg

von georg (Gast)


Lesenswert?

Dominik S. schrieb:
> Edit: kann ich besagte Taster-Signale wirklich nicht via TxD an den PC
> senden?

Was ich noch vergessen habe: wenn der Controller nicht von vornherein 
als Keyboard fungiert, hast du auf PC-Seite noch die Aufgabe, das 
Zeichen in dei Key-Verarbeitung einzuschleussen. Kommt es seriell rein, 
kannst du es in eigener Software mit dem COMPort-API auswerten.

Georg

von Wolfgang (Gast)


Lesenswert?

Dominik S. schrieb:
> Ich dachte der CP2102 fungiert als solches?

Der sorgt zusammen mit dem Windows-Treiber auf dem PC dafür, dass du 
dort einen COM-Port siehst, aber kein HID (USB-Tastatur)

von John (Gast)


Lesenswert?

Dominik S. schrieb:
> Edit: kann ich besagte Taster-Signale wirklich nicht via TxD an den PC
> senden?

Du kannst alles was du möchtest per TxD an deinen PC senden. Auch 
Taster-Signale.
Und wenn diese "Taster-Signale" als HID erkannt werden sollen, dann 
brauchst du auf deinem Windows-PC eine Software die das entsprechend 
umsetzt (siehe Link von Rufus weiter oben).

Vielleicht kommen wir weiter, wenn du diese ominösen Taster-Signale 
etwas näher beschreibst. Eine Texteingabe soll es anscheinend nicht 
werden:

Dominik S. schrieb:
> ich möchte keine ASCII-Zeichen übertragen und somit eine Tastatur bauen,
> sondern das Gerät soll als Controller bei "Geräte und Drucker" erkannt
> und genutzt werden

Also: welche Funktion sollen die Taster haben und was soll Windows damit 
machen

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> Zum Beispiel sowas:

Aha. Das ist ein Gamepad. USB-Geräteklasse HID.

> Ich dachte der CP2102 fungiert als solches?

Das ist eine USB-UART, die kann kein HID.

Damit Du ohne zusätzliche Software auf dem PC Dein Gamepad nachbauen 
kannst, musst Du auf jeden Fall ein HID nachbilden.

Dafür hast Du drei Möglichkeiten:

-- verwende einen µC mit integiertem USB-Device-Controller, wie z.B. 
einen Atmega32u4 und einen dafür passenden Software-Stack wie z.B. LUFA.

-- verwende einen externen USB-Device-Controller, den Du an Deinen µC 
anschließt. Aktuelle Beispiele dafür gibt es praktisch nicht mehr, 
entsprechende Bausteine sind schon lange abgekündigt (USBN9604, 
PIDUSBH12 etc.)

-- verwende eine softwareseitige Nachbildung eines 
USB-Device-Controllers, wie V-USB, was für HID ausreicht

von Dominik S. (thecoon)


Lesenswert?

Ok vielen Dank!

Um noch mal auf das USB-Interface anzusprechen: ich habe gerade nochmals 
auf der myAVR website nachgeschlagen 
(http://shop.myavr.de/Systemboards%20und%20Programmer/mySmartControl%20MK2%208K.htm?sp=article.sp.php&artID=200069) 
und dort steht unter "Ausstattung" "standardisiertes USB-Interface"... 
damit kann ich wirklich nichts anfangen?

Ich weiß, dass das gerade ziemlich beratungsresistent rüber kommt, aber 
ich habe momentan leider nicht die Mittel mir andere Hardware zu kaufen.

Also bitte nicht falsch verstehen, ich bin sehr dankbar für die Tipps 
und werde sie, wenn es wirklicht nicht anders geht, auch beherzigen. 
Jedoch möchte ich im Moment dennoch versuchen mit dem was ich habe so 
weit wie möglich zu kommen.
Wie es in der Programmierung nunmal so ist: viele Wege führen nach Rom.

edit: Hier ein Auszug aus der Beschreibung des Herstellers:

- anschlussfertiges USB-Modul, das sofort mit dem PC kommunizieren kann
- stellt einen virtuellen COM-Port als Gerät im PC/Notebook zur 
Verfügung

Viele Grüße
coon

: Bearbeitet durch User
von Frank L. (hermastersvoice)


Lesenswert?

lies und verstehe was dir bisher geantwortet wurde. Deine Fragen wurden 
längst beantwortet

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> damit kann ich wirklich nichts anfangen?

Nein, mit einer USB-UART-Bridge kannst Du kein HID-Gerät nachbilden. 
Keine Chance, auch wenn Du Dich auf den Kopf stellst.

Aber --und das schreibe ich Dir jetzt zum letzten Mal-- Dein Problem 
kann mit etwas Software auch mit Deinem µC gelöst werden, sogar mit 
Bascom.

Links dafür habe ich bereits gepostet, das wiederhole ich jetzt nicht.

von Wolfgang (Gast)


Lesenswert?

Dominik S. schrieb:
> ... und dort steht unter "Ausstattung" "standardisiertes USB-Interface"...
> damit kann ich wirklich nichts anfangen?

Du könntest die Zeile davor auch lesen.

Dort steht: "Industriestandard-Controller (CP2102) USB 2.0 zu seriell 
Konverter von SiLabs"

Und was liegt dann näher, als einen Blick in das Datenblatt des CP2102 
zu werfen.
https://www.silabs.com/documents/public/data-sheets/cp2102n-datasheet.pdf

von Wolfgang (Gast)


Lesenswert?

Dominik S. schrieb:
> Ich weiß, dass das gerade ziemlich beratungsresistent rüber kommt, ...

Ja

> ... aber ich habe momentan leider nicht die Mittel mir andere
> Hardware zu kaufen.

Dann kannst du vielleicht mal auf ein Mittagessen in der Kantine oder 
sonstwas verzichten.
Auf dem Arduino Pro Micro Board sitzt ein ATmega32U4, der deine 
Anforderungen ohne irgendwelche große Programmiererei erfüllen würde.

Wolfgang schrieb:
> Guck dir mal ...

von grundschüler (Gast)


Lesenswert?

Du kannst über den uc-usart beliebige Befehle seriell an den PC senden. 
Das Problem ist die auswertung der seriellen Befehle mit einem 
pc-programm. mit vb.net geht das relativ einfach. Ich habe mit vb.net 
einen pc-windows-media-server programmiert, der über eine uc-Tastatur 
gesteuert wird.

von STK500-Besitzer (Gast)


Lesenswert?

oder man nimmt sowas:
https://www.arduino.cc/en/Main/Arduino_BoardLeonardo
Das ist sogar für Anfänger geeignet / gedacht.
Dazu gibt es dann auch gleich nocht einen Haufen Beispiele.

von Einer K. (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> oder man nimmt sowas:
Viele UNOs und Megas haben als USB-Serial Wandler einen ATMega16U2 oder 
ATMega8U2 on Board.
Diese kann man auch für HID Zwecke umdressieren

von STK500-Besitzer (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> STK500-Besitzer schrieb:
>> oder man nimmt sowas:
> Viele UNOs und Megas haben als USB-Serial Wandler einen ATMega16U2 oder
> ATMega8U2 on Board.
> Diese kann man auch für HID Zwecke umdressieren

Der Leonardo hat gar keinen USB-Seriell-Wandler (mehr) drauf, sondern 
verwendet gleich den ATmega32u4 als "Hauptprozessor".

Das Leonardo-Board wurde aber wohl durch den Micro abgelöst.

von Einer K. (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Der Leonardo hat gar keinen USB-Seriell-Wandler (mehr) drauf, sondern
> verwendet gleich den ATmega32u4 als "Hauptprozessor".
Das ist mir sehr wohl bekannt.

>>> oder man nimmt sowas:
Vielleicht, hätte ich das Zitat durch das Wort "Alternativ:" ersetzen 
sollen, damit klarer wird, was ich meine.

UNOs sind verbreiteter, es besteht also die Chance dass so einer schon 
(ungenutzt) in der Ecke liegt.
Boards mit 32U2 sind eher etwas teurer.

von STK500-Besitzer (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> UNOs sind verbreiteter, es besteht also die Chance dass so einer schon
> (ungenutzt) in der Ecke liegt.
> Boards mit 32U2 sind eher etwas teurer.

Nichts für ungut, aber:
Du erwartest von jemandem, der noch keine Ahnung hat, wie USB 
funktioniert, dass er einen Controller "zweckenentfremded"?
Um den 16U2 eines UNO programmieren zu können, braucht man einen 
ISP-Programmer, der auch Geld kostet...

Dann doch lieber etwas mehr Geld in die Hand nehmen und was 
funktionierendes kaufen.
Ich gehe davon aus, dass es beim TO noch gar nichts zu dem Thema gibt.

von STK500-Besitzer (Gast)


Lesenswert?

STK500-Besitzer schrieb:
> Ich gehe davon aus, dass es beim TO noch gar nichts zu dem Thema gibt.
Die Aussage revediere ich gleich mal wieder...
Dann könnte auch der ISP-Programmer vorhanden sein.

Einfacher in Betrieb zu nehmen wäre aber das Arduino Micro ($19.80 im 
offiziellen Shop).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.