Hallo zusammen
Leider habe ich von Elektronik keine grosse Ahnung und hoffe, Ihr könnt
mir bei meinem Problem weiterhelfen.
Ich möchte anhand der seriellen Schnittstelle (RS232) einen
Ein-/Aus-Schalter erstellen und den Status des Eingangssignals mittels
einem C-Programm abfragen. Ich habe mir dabei gedacht, dass ich den
Ausgang von Pin 4 als Spannung für den Eingang auf Pin 1 missbrauche und
dazwischen einfach einen Schalter klemme (siehe Anhang). Eine LED soll
anzeigen, wenn der Taster gedrückt wird.
Im Netz konnte ich bis jetzt nichts Vernünftiges finden - ist denn die
Sache so trivial, dass nirgends wo ein Artikel über so was steht???
Die Schaltung habe ich aufgebaut, das C-Programm ist auch bereits
geschrieben - die LED leuchtet auch auf wenn das Programm ausgeführt und
der Schalter gedrückt wird - nur ich kann die Spannung auf dem Eingang
nicht ablesen.
Geht das überhaupt, oder muss ich ein A/D-Wandler oder Max232 oder so
etwas dafür anschaffen. Es sollte doch nur ein Schalter werden :-(
Bitttttteeee um Hilfe....
Dankeschöönnn...
P.S. Das C-Programm läuft unter RedHat Linux.
es ist schon trivial, allerdings sind doch ein paar Kleinigkeiten zu
beachten.
Frei verwendbar sind 2 Ausgänge (RTS und DTR) sowie 4 Eingänge
(CTS,DSR,DCD und RI). Diese Bits sind über die Statusregister der UART
erreichbar, wie die unter Linux angesprochen werden - keine Ahnung.
Und dann gibts da noch die physikalischen Schnittstellenparameter, ein
1-Pegel ist mit -3..15V, ein 0-Pegel mit+3..15V definiert. Wie sich ein
offener Eingang oder ein mit Masse verbundener hält, kann bei jedem PC
anders sein, kommt auf die verbauten Treiberchips an.
Und um die Sache nun auf den Punkt zu bringen: die Leitung TxD führt,
wenn keine Daten gesendet werden, 1-Pegel. Diesen Ausgang über einen
Widerstand 10k mit z.B. CTS verbinden, per Software den Ausgang RTS auf
+ setzen und den Schalter dann zwischen RTS und CTS verschalten.
Ich bin mir nicht ganz sicher, ob ich die Schaltung nun richtig
zusammengesetzt habe, denn sie funktioniert immer nocht nicht... was
aber auch heissen kann, dass ich mit der software probleme habe (oder
mit meinem uralten 133er compi).
also, nur zum Sichergehen:
|-----------|
TXD o----------| 10 kOhm |------------|
|-----------| |
|
CTS o-----------------------------------o
|
/ |
RTS o----------/ --------------------|
Ich erhalte von RTS überhaupt kein Signal (+/-). auch wenn
ich RTS auf + setze ist keine Spannung am Ausgang. Deshalb
habe ich den Ausgang von DTR anstatt von RTS genommen...
Am DTR ist eine Spannung vorhanden.
ja, sieht richtig aus.
An TxD und CTS solltest du ca. -10V messen, an RTS +10V. Und wenn der
Schalter geschlossen wird, sollten an CTS min. +5V liegen. Wenn das so
funktioniert, ist der Rest SOftwaresache.
Hey "Crazy Horse", DU bist der Beste!
Die Schaltung funktioniert wirklich... ich habe mein Kabel ausgetauscht
- so wie's aussieht war da der Wurm drin...
Vielen Dank, ich war nämlich schon bald am verzweifeln...
...für diejenigen, die auch unter Linux einen Schalter über die serielle
Schnittstelle auslesen möchten, ist in der Anlage mein Source-Code, den
ich für die obige Schaltung erstellt habe.
Nach dem Kompilieren mit "gcc -o switch switch.c" kann das Programm mit
"switch /dev/ttyS* (zb. ttyS0 für COM1)" ausgeführt werden. Evtl. ist
die Ausführung als Daemon noch sinnvoll.
Nochmals Vielen Dank.
Hallo Crazy Horse,
habe gerade deinen Beitrag gelesen. Habe eine ähnliche Schaltung
aufgebaut.
Warum verbindest du über eine Widerstand TxD mit CTS? Ich hab nicht.
jawi schrieb:> Hallo Crazy Horse,>> habe gerade deinen Beitrag gelesen. Habe eine ähnliche Schaltung> aufgebaut.> Warum verbindest du über eine Widerstand TxD mit CTS? Ich hab nicht.
Weil es keine so gute Idee ist, mit dem Schalter den TxD Pin mit RTS
kurzzuschliessen, wenn beide unterschiedliches Potential haben.
An Txd hat man -10V, an RTS ca. +10V. Schliesst man den Schalter,
arbeiten 2 Ausgänge gegeneinander und das ist meistens keine so gute
Idee. Hat man den Widerstand, dann kann an ihm die Differenz abfallen.
CTS ist der Eingang, an dem detektiert wird, welche Spannung an dem
einen Ende des Widerstands anliegt. Ist der Schalter offen, so sind das
-10V. Ist der Schalter geschlossen so sind das theoretisch +10V, die
Spannung wird aber wohl ein wenig einbrechen.
Tim E. schrieb:> Wie wäre es mit einer Optisch getrennten Verbindung ? So entgeht man> wenigstens der Gefahr den COM - Port zu TÖTEN !
Dann kannst du dir den ganzen 'Aufwand' auch gleich sparen und was
'richtiges' extern machen. Denn die Frage ist bei derartigen Basteleien
immer: Wo nimmst du die Versorgungsspannung her?