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?
Hi nochmal, da ich nicht mit Adminrechten am PC arbeite, sollte das Ganze wenn moeglich ohne externe Portzugriffs-Treiber funktionieren. Juergen
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
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 :-)
Negativer Pegel? Wenn die DTR - Leitung auch mit +-12V arbeitet, dürfte ein Gleichrichter ausreichen...
>> 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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.