www.mikrocontroller.net

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


Autor: Martin Cabalzar (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Cabalzar (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Cabalzar (Gast)
Datum:
Angehängte Dateien:

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

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin Cabalzar (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gerade gefunden, soll es sowas werden:
http://www.linux-magazin.de/Artikel/ausgabe/2000/0...

Autor: jawi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Patrick E. (f4550tim)
Datum:

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

LG

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.