Forum: Mikrocontroller und Digitale Elektronik µC R232 Win2000 -> RTS/CTS Ansteuerung


von Juergen (Gast)


Lesenswert?

Hi,

seit einigen Tage verzweifel ich an folgendem Problem:

Eine µC-Steuerung zur Datenerfassung ist über eine serielle
Schnittstelle an einen PC angeschlossen. Die µC-Schaltung wird über
die PC-Signalleitungen CTS und RTS mit Spannung versorgt.
Die erfassten Daten werden von der µC-Steuerung aufbereitet und
kontinuierlich über die serielle Schnittstelle an den angeschlossenen
PC gesendet. Auf dem PC laeufen abwechselnd 2 Applikation, welche mit
dem CBuilder entwickelt wurden.

Jetzt zu meinem Problem: Die µC-Steuerung soll auch weiter Daten
erfassen, wenn die eine Applikation beendet und die andere gestartet
wird.

Hier ist es jetzt aber so, das beim Schliessen des einen Programmes
auch die serielle Schnittstelle per Software geschlossen werden muss.
Dieses aber veranlasst die Steuerleitungen RTS/CTS einen negativen
Pegel einzunehmen. In diesem Zustand ist die µC-Schaltung spannungslos
und laeuft halt nicht mehr.

Ich suche verzweifelt nach einer Softwareloesung für Windows 2000/XP um
die Steuerleitungen der Seriellenschnittstelle einzelnt anzusteuern.
Eine direkte Hardwareprogrammierung, wie INB und OUTB unter Win9x,
funktioniert leider ab WIN2000 nicht mehr.

Low Level, WinAPI, VCL, ActivX, ich bin für alles zu haben.


Gruss und danke fuer Eure Aufmerksamkeit

Juergen


P.S. Bin ich hier richtig, oder waere "Codesammelung" besser gewesen?

von Juergen (Gast)


Lesenswert?

Hi nochmal,

da ich nicht mit Adminrechten am PC arbeite, sollte das Ganze wenn
moeglich ohne externe Portzugriffs-Treiber funktionieren.

Juergen

von mthomas (Gast)


Lesenswert?

Wie waere es mit einem eigenen Prozess (Programm) fuer die Ansteuerung
der seriellen Schnittstelle. Eine Zwischenbene, die nach aussen ueber
COM-Automation (keine Ahnung wie die Technik inzwischen heisst, wird
alle Nase lang umbenannt) die Funktionen Init/Send/Receive/Close.
exportiert und nach "innen" die seriellen Schnittstelle ueber
WIN32-API ansteuert. Dieser "Ser-Port-Server" muesste immer als
Prozess aktiv bleiben um das Problem mit der Spannungsversorgung ueber
die Handshake-Leitungen zu loesen. WIN32-CloseHandle der Schnittstelle
wird dann nur beim Beenden des Port-Servers gerufen.
Sicher einfacher ist wohl eine extra Stromversorgung (billige
"Hackerloesung": 7805 und MAX232 als Ladepumpe fuer die V24 Pegel),
die man einfach mit einem Kabel oder einer Patch-Box in die serielle
Verbindungsleitung einschleifen kann und damit dann auch an der
Hardware nichts aendern muss (Handshake-Leitungen zu PC-Seite dann
naetuerlich nicht verbinden).
HTH,
Martin

von Juergen (Gast)


Lesenswert?

Hallo Martin,

das sind natuerlich zwei moegliche Loesungsmoeglichkeiten. Ich wollte
jedoch nicht so tief ins System eingreifen und einen eigenen virtuellen
Schnittstellentreiber schreiben oder einen Eingriff in die PC Hardware
vornehemen. Der µC soll auch an mobielen Systemen laufen, z.B. Laptop.

Ich denke es muss doch eine Moeglichkeit geben, dem Windows
Geraetetreiber der seriellen Schnittstelle per IOCTL_XXX (oder
aehnliches) zu motivieren, die Steuerleitungen nach meinen Wuenschen
umzupegeln. Immerhin werden diese Leitungen ja vom Geraetetreiber
angesteuert.

Juergen

P.S. oben muss CTS natuerlich DTR heissen :-)

von Johannes Raschke (Gast)


Lesenswert?

Negativer Pegel? Wenn die DTR - Leitung auch mit +-12V arbeitet, dürfte
ein Gleichrichter ausreichen...

von Ingo Henze (Gast)


Lesenswert?

>> Der µC soll auch an mobielen Systemen laufen, z.B. Laptop.

Das kann möglicherweise schief gehen, da manche Laptops (z.B. mein
Samsung) an den so "mißbrauchten" Steuerleitungen nicht genügend
Power liefern. Mein Handykabel mag deswegen am Notbook nicht laufen, da
hier auch die RS232-Selbstversorgung verwendet wird.

Gruß
Ingo

von mthomas (Gast)


Lesenswert?

Tja, offensichtlich habe ich meine Vorschlaege nicht richtig
rueberbringen koennen.

Es war nicht gemeint einen Systemtreiber zu schreiben, sondern eine
Applikation im "User-Space" die das Interface zwischen
Anwendungsprogramm und serieller Schnittstelle herstellt.
Man kann beim Einstellen der Schnittstellenoptionen schon die
Control-Leitungen setzen (auch permanent an oder aus), aber beim
Schliessen des Handles (Beenden einer Anwendung) wird dies wieder auf
"Ausgangszustand" gesetzt. Die Pins waren ja nie fuer solche
Anwendungen gedacht. Der "Server" (ein Programm. keine DLL, kein VXD
einfach eine EXE die ein paar Funktionen ueber COM exportiert) kann
ueber COM-Automation ein aehnliche Schnittstelle bieten wie das
W32-API. Ich sehe keinen "tiefen" "Eingriff" hier. Und der
Programmieraufwand fuer den Server haelt sich in Grenzen da z.B. VC6
dies alles "gut vorkaut". CBuilder bietet sicher auch Funktionen zum
Zugriff auf COM-Automation-Server.
1 - Ser-Server starten, dieser oeffnet und initalisiert ueber die
W32-API die serielle Schnittstelle, setzt die RTS/DTR und bietet
Zugriff fuer die Anwendungsprogramme ueber COM
2 - Anwendung starten, COM Schnittstelle zum Server wir angebunden
3 - Anwendung -> COM -> Server -> Win32-API -> serielle Schnittstelle
> "Low Level, WinAPI, VCL, ActivX, ich bin für alles zu haben."
Wohl eher fuer sehr viel weniger...

Es wird wohl das Einfachste sein, ein Kabel zum Einschleifen der
Stromversorgung zum externen Gerät zu bauen. Ist sicher weniger
Zeitaufwand und eine bessere Loesung als dieser "Missbrauch" der
Schnittstelle zur Stromversorgung. Das hat nichts mit "Eingriff in die
PC Hardware" zu tun, einfach nur ein Kabel mit Stromversorgung.

PC/serielle )(-----RX/TX-------- uC RX/TX
                            |--- uC RTS/DTR
ext.        )(-----RTS/DTC--O
Stromversorgung

Zur externe Versorgung kann man die USB-Schnittstelle oder
PS/2-Anschluesse anzapfen und dann mittels MAX232 auf V24-Pegel
"hochpumpen". Alternativ ein kleines Netzteil mit 15V Ausgang.

von Juergen (Gast)


Lesenswert?

Hi Martin,

>>Tja, offensichtlich habe ich meine Vorschlaege nicht richtig
>>rueberbringen koennen.
Doch, hast Du.

Es fehlen da halt noch einige weitere Informationen meinerseits:

1) Bei den Applikationen wird mit Zeitstempeln gearbeitet. Um hierfuer
eine minimale Latenzzeit zu gewehrleisten, ist ansatzweise eine gewisse
(ich sach es nur ungerne bei Windows) Echtzeitfaehigkeit gefordert. Ein
SER-Server hierfuer im User-Space aufzusetzen, halte ich fuer meinen
Fall fuer zu aufwendig. Deshalb meine Anmerkungen in Richtung
virtueller Treiber.

2) Einfach gesagt, das µC-System soll nur an den PC angeschlossen werde
und fertig. Da es nur die Groesse einer Streichholzschachtel hat,
war/ist BISHER :-) kein groesser Verkabelungsaufwand geplant gewesen.

>>Low Level, WinAPI, VCL, ActivX, ich bin für alles zu haben.
Naja, die Loesung soll halt mit dem geringsten Aufwand umzusetzen sein,
wie auch immer...

Als Aufwandswiderstand sehe ich halt die Installation eines
Treibers mit direktem I/O Portzugriff unter NT/W2K. Da koennte ich dann
den UART direkt programmieren. Das will ich aber nicht. Ich glaube noch
an das Gute von B.Gates und hoffe, dass dieses irgendwie vom
Betriebsystem bzw. standard Geraetetreiber bereitgestellt wird.
Zumal wuerden dann die Applikationen auch unter Win9x, Longhorn oder
weiss der Geier laufen.

Juergen.

von Hagen (Gast)


Lesenswert?

Es gibt viele COM Hardware die sich ihre Versorgungspannung aus dem PS2
Slot der Tatstatur oder Maus ziehen.
1.) liefern diese PS2 Anschlüsse per Standard mehr Strom
2.) gibt es dafür fertige Zwischenstecker

Solche Stecker bestehen also aus einem Stecker und einer Buchse und
schleifen alle Pins durch. Zusätzlich habe sie ein zweiadriges Kabel
das die Stromversorgung abzapft. In deinem Falle also nur so ein PS2
Stecker nötig und das Umrüsten der Spanungsversorgung deines Boards.

Gruß Hagen

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.