Taster an COM Schnittstelle anschließen

E

Egge

Jungspund
Hallo zusammen,

ich würde gerne eine kleine Box mit zwei Tastern an den seriellen Port meines Linuxservers anstecken.
Über jeweils einen Taster soll ein SNMP Befehl ausgelöst werden (WLAN an / WLAN aus).

1) Gibt es solche "Tasterboxen" bzw. Bausätze?
2) kann man diese Tasten per shell scripts auswerten oder muß man das mit einer "richtigen" Programmiersprache lösen.

Vielleicht kann man mich jemand mit Links etc. versorgen, da ich nicht wirklich weiß, nach was ich genau suchen muß.

Danke und Gruß
Egge
 
Hallo zusammen,

ich würde gerne eine kleine Box mit zwei Tastern an den seriellen Port meines Linuxservers anstecken.
Über jeweils einen Taster soll ein SNMP Befehl ausgelöst werden (WLAN an / WLAN aus).

1) Gibt es solche "Tasterboxen" bzw. Bausätze?
2) kann man diese Tasten per shell scripts auswerten oder muß man das mit einer "richtigen" Programmiersprache lösen.

Vielleicht kann man mich jemand mit Links etc. versorgen, da ich nicht wirklich weiß, nach was ich genau suchen muß.

Danke und Gruß
Egge

Bei der seriellen Schnittstelle gibt es das Problem, das es jeweils nur einen Pin zum empfangen und zum Senden gibt. Außerdem werden die Datenbits kodiert. Man kann den DCD oder Ring usw. für den 2. Taster benutzen. Die Programmierung wird dann aber schwieriger, da man dann imho nicht einfach den Linux-COM-Treiber nehmen kann. Da musst du wohl oder übel deinen eigenen schreiben.
http://de.wikipedia.org/wiki/EIA-232
http://lowlevel.brainsware.org/wiki/index.php/Serielle_Schnittstelle

Einfacher wäre das eventuell mit der parallelen Schnittstelle. Dort gibt es mehrere Datenpins. Diese sind leider oft nur einseitig. Also müsstest du nachschauen ob deine Hardware bidirektionale Verbindungen unterstützt. Wenn nicht, kann man noch die Kontrollregister als Inputs nehmen. Das wurde sogar oft benutzt und eventuell gibt es dafür Treiber. Ansonsten selber schreiben :/

BTW: Ja es gibt solche "Tasterboxen". Man kennt sie unter dem Namen Tastatur ;) Das wäre wahrscheinlich auch die einfachste Möglichkeit.
 
Hmm, auf einen Taster könnte ich zur Not verzichten.
Leider muß ich die serielle Schnittstelle verwenden, da ich keine parallele Schnittstelle mehr habe.
USB wäre noch eine Möglichkeit, aber dürfte sich ja zur COM Schnittstelle nicht wirklich unterscheiden.

Aber eine Tastatur hat doch zuviele Tasten ;)
 
Was sagst du zu einer kleinen Schaltung mit einem Microcontroller, der die serielle Schnittstelle als das benutzt wozu sie auch gedacht ist, nämlich als Kommunikationsschnittstelle.

Für so eine Schaltung genügt im Prinzip ein kleiner Controller, der allerdings eine UART-Schnittstelle haben muss (z.B. Attiny2313). Außerdem brauchst du noch einen MAX232 für die Anbindung an die serielle Schnittstelle und eine handvoll Widerstände und Kondensatoren für die externe Beschaltung.

Du musst dich zwar etwas mit Microcontrollerprogrammierung beschäftigen, aber gerade Atmel bietet sehr viele Beispielprogramme für deren Controller.

Die gesamte Schaltung sollte eigentlich nicht mehr wie 10Euro kosten. Ein weiterer Vorteil besteht darin, dass du das ganze theoretisch mit einem Shellscript abfragen kannst, da du lediglich die Gerätedatei der seriellen Schnittstelle auslesen musst.

Es gibt allerdings auch einen Haken an der Sache: Du brauchst für den Controller einen Programmer, was doch etwas teurer werden kann. Vielleicht hast du aber auch die Möglichkeit dir einen auszuleihen.

Gute Anlaufstellen für diese Lösung:

http://www.mikrocontroller.net/
http://www.atmel.com/
 
Moin,
sieh mal auf http://www.lirc.org/ nach, da gibt es Schaltungen, Programme, Links etc. zu Infrarotschnittstellen (seriell, parallel, usb ....). Damit bist du dann auch nicht auf 2 Taster beschränkt.
Tschööö,
yai
 
Hallo,

ich habe auch das Problem, möchte nur einen Taster an eine COM-Schnittstelle anschliessen um diesen Schaltzustand im Shellscript zu verwenden. Habe dazu noch eine Idee und möchte somit diesen Thread nocheinmal zum Leben erwecken : )

Zufällig weiss ich, dass wenn man PIN 3+4? (rx/tx) brückt.. (also Taster geschlossen ist zum Beispiel), dass man im Terminalprogramm ein echo bekommt.
Das heisst, ich sende an eine COM mit der Tastatur die Buchstaben "adsf" und es erscheint auf dem Terminalprogramm die Zeichenfolge "adsf". Im ungebrückten Zustand ist es nicht der Fall, weil eben nichts auf RX empfangen wird und TX sozusagen ins Leere läuft.

Scripttechnisch müsste man also eine beliebige Information an die COM-Schnittstelle senden (0,5sek Schleife) und selbige nach der selben Ausgabe überwachen.

Funktion: Wenn Ausgabe an COM1=adsf, dann... Also eine normale IF-Anweisung. Ich vermute das müsste funktionieren.

Nur wie sendet man per Shell eine Info an COM1 oder fragt diese ab? Oder ja eher, gleichzeitig senden und empfangen? Naja das gleichzeitige sollte nicht das Problem sein.

Ich hoffe dieser Thread wird jetzt dank diesem Hinweis so bis zur Lösung vervollständigt, dass wirklich nur noch Stecker, Kabel, ein Taster und ein paar Befehlszeilen erforderlich sind.

Gruß und vielen Dank im Vorraus
 
Wenn nur eine Taste benötigt wird, dann würde ich USB verwenden.

1 x USB-Kabel
1 x alten USB-Stick oder irgend ein anderes USB-Gerät

- Im USB-Kabel den grünen Draht druchschneiden, danach an dieser Stelle einen Taster einbauen. http://www.hardware-bastelkiste.de/usb.html
- lsusb in einer Bashschleife einbinden, (oder mit SNMP abfragen)
- Alles verbinden.
Fertig.
 
Auch wenns funktioniert: Das ist so ziemlich die dreckigste Lösung, die ich mir vorstellen kann. Und so würde ich es definitiv nicht machen.. Das mit dem Brücken übrigens klingt ebenfalls ziemlich abentuerlich. Klar, funktioniert, aber trotzdem.. Die Lösung von andy81 ist nicht sehr kompliziert, technisch einwandfrei und ausserdem noch ganz interessant, um dabei etwas zu lernen..
.
.
.
EDIT (autom. Beitragszusammenführung) :
.
Hier steht eigentlich alles drin was man braucht, man sollte wohl bis zu 4 der Pins eines RS232 auslesen können, die normalerweise anderen Zwecken dienen:
http://www.mikrocontroller.net/articles/Ports_benutzen_(GCC)#Die_Pins_DCD.2CDSR.2CCTS.2CRI_lesen

EDIT: Und falls man es braucht kann man auch noch ein paar Pins als Ausgang nutzen.
 
Zuletzt bearbeitet:
Auch wenns funktioniert: Das ist so ziemlich die dreckigste Lösung, die ich mir vorstellen kann.

Was ist an meiner Lösung, wenn nur EIN Taster benötigt wird dreckig ?
Von Realtime war bisher nicht die Rede.
Ich hätte es ja noch verstanden, wenn Du Sinngemäß gesagt hättest: "...man sollte noch ein 10nF-Kondensator parallel zum Taster verwenden um ...".
Was ist der physikalische Unterschied zwischen einen Taster und dem Ein- bzw. Ausstecken eines USB-Sticks?

Wenn eines Tages mehr als ein Taster benötigt wird, kommt er um ein MC nicht herum.

Dreckig ist, wenn die große die Schulden machen und die kleinen dafür zahlen müssen, oder sehe ich das falsch?
 
flugopa: Lass es bleiben. Ich hab schon den anderen Thread gesehen den du total vom Thema abgebracht hast und ihn nicht kommentiert, obwohl ich denke, dass man sowas nicht unkommentiert stehen lassen kann. Wenn du dich unbedingt unterhalten willst, dann nicht in einem Thread der damit nichts zu tun hat.

Dreckig bezieht sich darauf, dass man hier um einfach nur einen Schaltzustand eines Tasters festzustellen die komplette USB-HDD Logik des Kernels plus diverse Userspaceprozesse anspricht. Eine saubere Lösung ist das einfach nicht. Ausserdem fehleranfällig. Dann dauert es teilweise bis zur vollständigen Erkennung des Sticks einige Zeit. Der einzige Vorteil der Lösung ist, dass sie funktionieren würde. Aber es gibt wesentlich elegantere Lösungswege. Die Pins des seriellen Ports dazu zu verwenden ist deutlich einfacher und weniger fehleranfällig.

Auch die Aussage, für mehr als einen Taster braucht man unbedingt einen µC ist wieder Quark. An der parallelen Schnittstelle kann man deutlich mehr als einen Taster auslösen. Auch die Standard RS-232 (EIA-232) Schnittstelle hat deutlich mehr als einen IO-Pin.

Bitte bleibe bei Antworten nur auf dem Thema des Threads. Alles andere gehört nicht hierher!
 

Ähnliche Themen

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Zurück
Oben