Forum: Mikrocontroller und Digitale Elektronik Ein/Aus-Schalter über Serielle Schnittstelle


von Martin Cabalzar (Gast)


Angehängte Dateien:

Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?

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.

von Martin Cabalzar (Gast)


Lesenswert?

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.

von Martin Cabalzar (Gast)


Angehängte Dateien:

Lesenswert?

uups, meine Schaltung sieht ganz anders als geplant aus... in der anlage 
befindet sich ein printscreen, wie's richtig aussehen soll...

von crazy horse (Gast)


Lesenswert?

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.

von Martin Cabalzar (Gast)


Angehängte Dateien:

Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?


von jawi (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Patrick E. (f4550tim)


Lesenswert?

Wie wäre es mit einer Optisch getrennten Verbindung ? So entgeht man 
wenigstens der Gefahr den COM - Port zu TÖTEN !

LG

von Karl H. (kbuchegg)


Lesenswert?

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?

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.