Forum: PC-Programmierung digitaler Eingang am PC


von Alex (Gast)


Lesenswert?

Hallo zusammen,
ich möchte an einem PC ein Tastersignal auswerten. Wenn also der externe 
Taster gedrückt wird, möchte ich am PC ein Programm starten lassen.

soweit ich weiß müsste das ganze einfach über den RS232 Port 
funktionieren, oder?

Ich brauche nur etwas Hilfe die ganze google Sucherei einzugrenzen.

ich könnte doch über RS232 TX durchgängig ein high Signal senden und 
wenn der Taster die Leitung zum RX schließt erkennen das am RX nun ein 
High Signal anliegt und das darüber weiter verwenden, oder?

Auf dem PC Soll später Linux laufen, wenn das ganze aber im Windows 
einfacher ist kann ich auch damit starten.

Gibt es dafür einfache fertige Software, oder kann man etwas 
beispielsweise in c++ schreiben?

Bin dankbar für jeden Ansatz.

Also zusammengefasst: Ich muss einen Taster irgendwie mit dem PC 
verbinden um das Programm zu starten wenn der Taster gedrückt wird. Das 
ganze sollte möglichst günstig Funktionieren. Bin für alles offen :)

: Verschoben durch User
von Klaus R. (klara)


Lesenswert?

Hallo,
Google "unter linux rs232 mit c++ ansprechen".
Da kommt jede Menge, das dürfte Dir genügen.

Die RS232 kommt aus der Mode. USB wäre da besser. FTDI ist einer der 
namhaften USB-Baustein-Hersteller.
mfg klaus

: Bearbeitet durch User
von MagIO (Gast)


Lesenswert?

Ne Maus? Die hat Tasten = Taster.

Gibt doch Programme mit denen man die Funktion der Maustasten ändern 
kann. Habe auch Hinweise gefunden, dass man 2 unabhängige Mäuse 
anschließen kann, falls eine Maus noch für den Mauszeiger benötigt wird. 
Wenn sich nichts fertiges findet und du eh programmieren willst, dann 
halt nen Maustreiber selber schreiben.

von Chrys (Gast)


Lesenswert?

Klaus R. schrieb:
> FTDI ist einer der
> namhaften USB-Baustein-Hersteller.

Oder microchips mcp2200... Geht aber auch klassisch mit max232 und 
serial2USB Wandler

Alex schrieb:
> Gibt es dafür einfache fertige Software, oder kann man etwas
> beispielsweise in c++ schreiben?

Python ist schon ziemlich fertig, so kannst du mehr als nur ein high 
oder low übertragen :)
1
ports = list(serial.tools.list_ports.comports())
2
for p in ports:
3
    print p #listet dir die gefundenen devices auf...
4
5
#CONFIGURE SERIAL COMMUNICATION
6
ser = serial.Serial()
7
ser.port = "/dev/ttyUSB0" #
8
ser.baudrate = 38400
9
ser.bytesize = serial.EIGHTBITS #number of bits per bytes
10
ser.parity = serial.PARITY_NONE #set parity check: no parity
11
ser.stopbits = serial.STOPBITS_ONE #number of stop bits
12
ser.timeout = 1            #non-block read
13
ser.xonxoff = False     #disable software flow control
14
ser.rtscts = False     #disable hardware (RTS/CTS) flow control
15
ser.dsrdtr = False       #disable hardware (DSR/DTR) flow control
16
ser.writeTimeout = 2     #timeout for write
17
18
try: 
19
    ser.open()
20
except Exception, e:
21
    print "error open serial port: " + str(e)
22
while True:
23
    if ser.in_waiting:
24
        UARTrec = ser.readline() 
25
        time.sleep(0.5) #0.5 sec pause

Gruss Chrys

von Stefan F. (Gast)


Lesenswert?

Ganz so einfach ist es mit dem Taster nicht, denn der serielle Port 
empfängt nur Daten, wenn er ein Startbut erkennt.

Am RS232 Port (der mit den +/-12V Pegeln) heisst das. Der RxD Eingang 
des PC muss von -12V nach +12V wechseln.

12V bekommst du am einfachsten von einer Steuerleitung, dann musst du 
nicht ständig irgendwas senden.

von Felix Adam (Gast)


Angehängte Dateien:

Lesenswert?

Das Auswerten der Pins DTR, DCD, RI, RTS, CTS (je nachdem welcher da ein 
Eingang ist) reicht aus und ist unter Linux denkbar einfach.

Beispiele findet man da zuhauf. Eines im Anhang.

Ich weiß leider nicht mehr, woher ich das Beispiel habe. Es stammt aber 
aus dem Internet. Vermerke zum Autor/zur Quelle wurden NICHT entfernt! 
Es gab keine im Sourcecode.

Wäre aber dankbar für eine Quellenangabe, falls die einer noch hat.

von Dirk B. (dirkb2)


Lesenswert?

Die Statusleitungen von der RS232 sind besser geeignet.
Z.B. Ring Indikator

Es gibt aber auch USB-ICs dafür z.B von http://www.codemercs.com/de/

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Alex schrieb:
> ich möchte an einem PC ein Tastersignal auswerten. Wenn also der externe
> Taster gedrückt wird, möchte ich am PC ein Programm starten lassen.

Warum emulierst Du nicht einfach eine Tastertur?

Als USB HID wäre das vielleicht die eleganteste Lösung.

Billiger als eine alte Tastatur, oder eine neue von Ebay, 
auszuschlachten, wirst Du keine Tasterhardware bekommen.

von c-hater (Gast)


Lesenswert?

Felix Adam schrieb:

> Das Auswerten der Pins DTR, DCD, RI, RTS, CTS (je nachdem welcher da ein
> Eingang ist) reicht aus

Es gibt fünf Eingänge: RxD, CTS, DSR, RI und DCD. Alle fünf lassen sich 
problemlos als Tastereingänge (RxD allerdings zwingend mit "negativer 
Logik", sprich Pullup und Taster nach GND) benutzen. Nimmt man die drei 
verfügbaren Ausgänge TxD, RTS und DTR hinzu, kann man sogar bis zu 15 
Tasten in einer Matrix abfragen.

> und ist unter Linux denkbar einfach.

Unter Windows ist es genauso einfach, wenn nicht sogar noch einfacher. 
Hängt von der verwendeten Sprache ab. In C ist der Aufwand etwa genauso 
groß wie bei Linux. In einer echten Hochsprache wie etwa C# schrumpft 
die Implementierung für die gezeigte Funktionalität ca. auf zehn Zeilen 
Code...

von Felix Adam (Gast)


Lesenswert?

Da ich Windows aufgrund persönlicher Neigung immer öfters links liegen 
lasse, habe ich zur Einfachheit des Programmierens unter diesem OS nix 
geschrieben.

Ist auch nur nebensächhlich, da der Fragestelle Linux in erster Linie 
erwähnt hat.

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.