rs232 einzelne pins ansteuern?
-
Okay ich habe statt UINT32 den unsigned long genommen.
Jetzt möchte ich mal testen ob irgendein pin eine logische "1" hat.
Wie kann ich denn die Eins anlegen?
-
Sorry für "uint32", ich arbeite immer mit definierten Bitbreiten, da ein gewöhnlicher int auf verschiedenen Prozessoren (ich meine hauptsächlich in der embedded Welt) unterschiedlich groß ist!
"unsigned long" ist in Deinem Fall okay.Normalerweise werden die Spannungen für RS232-Signale durch einen Schnittstellenbaustein (eigentlich ein Pegelumsetzer) bereitgestellt, wie z.B. MAX232. Die erzeugen z.B. aus einer simplen +5V die beiden erforderlichen Spannungen +10V und -10V. (RS232 verlangt an den Eingängen typisch +12V, erlaubt ist der Bereich +3V bis +15V, für negative Spannung dto.)
Du kannst aber auch z.B. von einem RS232-Ausgangspin die Spannung durch eine Brücke auf den Eingang legen. Aber denk daran: Die Spannung der Ausgänge führen keine fixe Dauerspannung, sondern kann durch Software wechseln. Zu Testzwecken reicht es vermutlich allemal.
Nutzt Du auch die Foren-Suche?
z.B. http://www.c-plusplus.net/forum/viewtopic-var-t-is-200380-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-max232.htmlMartin
-
Hi,
kann mir jmd sagen, was ich falsch mach?!
Dies ist mein code.
Ich lege eine RS232-taugliche Spannung an (+3V...+15V).
Nun will ich abfragen ob der RI high oder low ist.
Allerdings wird das Programm immer vorher beendet [if (hCom == INVALID_HANDLE_VALUE) {return 1;}]
Woran liegt das?!?
Bin am verzweifeln!!!HANDLE WINAPI hCom; CString gszport; hCom = CreateFile(gszport, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if (hCom == INVALID_HANDLE_VALUE) { return 1; } // error opening port; abort CString LOW, HIGH, PORT, KEIN; LOW = _T("LOW"); HIGH = _T("HIGH"); PORT = _T("PORT"); KEIN = _T("Kein Signal"); unsigned long ui32_modemstatus; if ( GetCommModemStatus( hCom, &ui32_modemstatus ) != 0 ) { if ( ( ui32_modemstatus & MS_RING_ON ) == 0 ) { //Signal RI hat -12V bzw. "OFF" MessageBox(NULL, LOW, PORT, 0); } else { //Signal RI hat +12V bzw. "ON" MessageBox(NULL, HIGH, PORT, 0); } }
-
Hallo,
Woran liegt das?!?
Naja, gszport hat keinen Wert, ist ziemlich leer, um es genauer zu sagen

MfG,
Probe-Nutzer
-
Ja ok, aber was muss da für ein Wert hinein.
Kannst du mir ein Beispiel machen?!
-
"COM1" oder "COM2" z.B.
Du kannst auch die Suchfunktion (mit RS232 oder "serielle Schnittstelle" als Suchbegriff) des Forums nutzen, da gibt es schon einige Beiträge zu diesem Thema.
MfG,
Probe-Nutzer
-
Mmacher schrieb:
//Signal CTS hat -12V bzw. "OFF"
//Signal CTS hat +12V bzw. "ON"wenn mich nicht alles täuscht, wars bei RS232 genau umgekehrt, also negatives potential ist ON.

-
ach deswegen ist mein motheboard abgebrannt
-
neoexpert schrieb:
ach deswegen ist mein motheboard abgebrannt
man sollte ja auch nicht 2 ausgänge zusammenschalten.

-
fricky schrieb:
Mmacher schrieb:
//Signal CTS hat -12V bzw. "OFF"
//Signal CTS hat +12V bzw. "ON"wenn mich nicht alles täuscht, wars bei RS232 genau umgekehrt, also negatives potential ist ON.

Ich glaube, Du verwechselst "OFF" mit "0" bzw. "ON" mit "1".
Ok, ok, das hätte ich genauer dazuschreiben sollen.Definitionen nach RS232 (bzw TIA/EIA232):
+12V (+3V...+15V) = logisch "0" = "ON"
-12V (-3V...-15V) = logisch "1" = "OFF"Hoffe, damit ins rechte Licht gerückt zu haben

Martin
-
neoexpert schrieb:
ach deswegen ist mein motheboard abgebrannt
Die serielle Schnittstelle sollte eigentlich kurzschlusssicher sein.-Das Motherboard wird wohl nicht so recht gebrannt haben wollen...:)
-
war auch nur ein scherz

-
Hallo zusammen,
ich habe nochmal ne Frage zu diesem Thema.
Wenn ich die if-Anweisung folgendermaßen schreibe:if (( ui32_modemstatus & MS_RING_ON ) == 1)Und dann an den RI 5 Volt anlege, springt er mir immer in die else-Anweisung, also "0" (LOW)...
Allerdings müsste er doch direkt nach if(){... weiter dem Programmcode folgen.Kann mir jmd. helfen?!
-
was passiert denn wenn du den RI nicht an 5 Volt anlegst ?
-
Geht er auch auf LOW !
Habe es jetzt aber denke ich geschafft.
Habe auf 0 abgefragt und nicht auf 1. Dann hat's funktioniert, hoffe das war kein Zufall.
Probiers ein paar mal aus, danke erstmal...
-
cool
hörmal wo hast du die 5 volt her?
muss man eine extra spannungsversorgung anschliessen?
-
neoexpert schrieb:
hörmal wo hast du die 5 volt her?
Nimm einfach die Leitung vom PC-Netzteil z.B. für die Festplatte. Dort gibts sowohl +5V und +12V!
Martin
P.S.: Ich gehe davon aus, daß Du zumindestens mit dem Multimeter die Spannungen überprüfst bevor durch irgendeine Fehl-Annahme irgendwas zu Schaden geht, ist klar?

-
Ich habe die 5 Volt von 'nem Bewegungssensor.
Wenn dieser eine Bewegung erkennt(Detection), dann gibt er 5 Volt auf seinen Ausgang. Diesen Ausgang kontaktiere ich mit dem Ring Indicator und frage diesen ab, ob er High oder Low ist.
Da mein SBC keine GPIOs besitzt, an die ich den Bewegungssensor hängen kann, musste ich es so realisieren.
-
aso okay danke
aber die masse muss doch auch dran ne? an welchen pin denn?
-
neoexpert schrieb:
aso okay danke
aber die masse muss doch auch dran ne? an welchen pin denn?Ist das eine ernstgemeinte Frage?
Ich meine, wenn man mit der seriellen Schnittstelle an den Kontakten experimentiert, sollte man schon einige elementare Grundlagen der Schaltungstechnik kennen...Die Masse (also GND) muß an Pin 5 angeschlossen werden (bei Belegung Sub-D 9polig)
RI ist an Pin 9 zu finden.Achtung: Die Belegung bei Sub-D 25polig ist natürlich anders.
Martin