Steuern der RS232 Pins mit C
-
Hallo Leute,
weiß nicht ob das hier hin passt, da ich mich gerade erst in eurem Forum angemeldet habe.
Also:
Ich möchte gerne ein Programm in C schreiben (nicht C++ oder C#) mit welchem ich einzelne Pins der RS232 Schnittstelle meines Computers (Betriebssystem Windows 7)ein bz. ausschalten kann. Das Programm soll später einmal eine Nebelmaschine ein und ausschalten können, das soll hier aber erst nicht weiter von belang sein.
Mir geht es einfach nur darum ein ganz simples Programm in C zu schreiben, mit welchem ich die Pins steuern kann, alles weitere kann ich mir dann erarbeiten. Hättet ihr da vielleicht nen kleinen Programmausschnitt zur Verfügung?
-
-
Danke für die Antwort. Das ist eine echt gute Seite, wo ja auch eine Menege steht. Irgentwie steig ich da aber noch nicht so ganz durch. Ich habe schon fortgeschrittene Erfahrung in C, allerdings steig ich da so nicht ganz durch. Könnte mir nicht jemand vielleicht nen Programmausschnitt hier rein stellen wo z.B. gefragt wird ob DTR senden soll und durch Eingabe einer 1 wird DTR gesetzt. Ich denke wenn ich soetwas einmal sehe, ohne den ganzen Rest mit senden von Datenpaketen und soetwas drum herum steige ich da vielleicht etwas besser durch.
-
Mister232 schrieb:
Ich möchte gerne ein Programm in C schreiben (nicht C++ oder C#) mit welchem ich einzelne Pins der RS232 Schnittstelle meines Computers (Betriebssystem Windows 7)ein bz. ausschalten kann. Das Programm soll später einmal eine Nebelmaschine ein und ausschalten können, das soll hier aber erst nicht weiter von belang sein.
Das geht mit der WinAPI so nicht -> dafür muss man direkt auf die IO Ports zugreifen können: http://www.logix4u.net/
-
@IOports: Kennst du mein Lieblingszitat vom Nuhr?
@Mister232: Ich hab' jetzt leider weder Laune noch Zeit etwas vorzukauen aber noch einen Link, der für Deine Anwendung evtl. relevanter ist: Comm-Port und Windows
-
Swordfish schrieb:
@IOports: Kennst du mein Lieblingszitat vom Nuhr?
ich kann leider nicht deine Gedanken lesen - dafür kann ich aber voraussagen, das man mit der von dir verlinkten API nicht das machen kann, was der OP machen möchte.
-
Okay, danke für die vielen Links. Der Link von IOports beschäftigt sich allerdings mit parallelen Schnittstellen, ich möchte aber die serielle Schnittstelle RS232 benutzen. Habe übrigends ein 64Bit System.
Wahrscheinlich muss ich dann wohl doch auf eine Relaiskarte zurückgreifen, dachte nur, dass es vielleicht auch einfach selbst zu programmieren ist. Vielleicht steig ich auch einfach nicht durch die von euch gesendeten Links durch.
-
Ich sag dir mal wie ich das mache mit der Kommunikation mit der Außenwelt. Ich hab mir einfach einen Arduino Uno ( http://arduino.cc/en/Main/ArduinoBoardUno ) gekauft. Der hat eine USB schnittstelle mit der du jederzeit mit dem PC kommunizieren kannst, und zwar kannst du da richtig informationen als string senden nicht einfach nur einen pin ein oder ausschalten. Er kann auch berechnungen lokal durchführen was für größeres ziemlich praktisch ist. Beispielsweise kannst du einfach noch nen knopf oder sonst irgentwas für deine Nebelmaschine anbringen. Zum Beispiel könntest du die Nebeldichte messen und dir auf deinem PC anzeigen lassen. Zusätzlich hast du genügend ports, die du durch shift register eigentlich beliebig erweitern kannst falls sie dir nicht reichen sollten.
So ein Teil kostet in diversen online shops 20€ und kann alles was du brauchst und noch viel mehr. Macht spaß damit rumzuspielen und du kannst so ziemlich alles automatisieren bzw. vom PC aus steuerbar machen. Der serielle Port ist für serielle Datenübertragung ausgelegt, einen Pin an oder aus zu schalten geht da doch eher zu paralleler Datenübertragung.
Ich würde wenn ich du wär so en Teil kaufen.
gruß
-
Ich habe hier das MExS@Home-Board der FH-Hannover mit nem 8051-Prozessor liegen. Das könnte ich natürlich auch dafür verwenden, aber ich wollte halt gerne selber etwas einfach basteln. Aber wie gesagt, wahrscheinlich scheitert es an meinen Programmierkenntnissen. Java würde ich übrigends auch noch beherrschen, falls das einfacher ist.
-
Mister232 schrieb:
Ich habe hier das MExS@Home-Board der FH-Hannover mit nem 8051-Prozessor liegen. Das könnte ich natürlich auch dafür verwenden, aber ich wollte halt gerne selber etwas einfach basteln. Aber wie gesagt, wahrscheinlich scheitert es an meinen Programmierkenntnissen. Java würde ich übrigends auch noch beherrschen, falls das einfacher ist.
Kannst du doch. Den PC teil schreibst in C und den Teil auf dem arduino kannst auch in C schreiben.
Das wirst du sogar alles selber machen müssen das gibts nich fertig, nur die hardware.
-
Hätte jetzt mal eine andere Frage, ich habe mich dazu umentschieden nun doch den Parallelport zu nutzen und zwar mit Visual Basic. Da braucht man aber eine Datei Namens inout32.dll, damit wie oben bereits jemand erwähnte Windows auf die Ausgänge zugreifen kann. Nun brauche ich diese Datei aber für 64Bit, kann mir da jemand einen Link geben?
-
Aber Hallo Ihr Schreiber,
natürlich geht das ganz einfach mit der Win32 API
Die Funktion heißt EscapeCommFunction() http://msdn.microsoft.com/en-us/library/windows/desktop/aa363254(v=vs.85).aspxSiehe auch meine Posts in diesem Forum, z.B.:
"mit C port ansteuern" http://www.c-plusplus.net/forum/241523"Seriellen Port testen" http://www.c-plusplus.net/forum/186403
"com-port: permanente spannung auf TxD-pin?" http://www.c-plusplus.net/forum/204145
HTH,
Martin
-
Cool danke, ich wollte wie gesagt shon aufgeben, nun habe ich wieder Hoffnung. Was muss ich den am Anfang des Programmes alles importieren, um den COM benutzen zu können? Bis jetzt hatte ich da immer nur <stdio.h> stehen
-
IOports schrieb:
Swordfish schrieb:
@IOports: Kennst du mein Lieblingszitat vom Nuhr?
ich kann leider nicht deine Gedanken lesen [...]
Ok, dann verrat ich's Dir: "Wenn man keine Ahnung hat: Einfach mal Fresse halten"
IOports schrieb:
[...] dafür kann ich aber voraussagen, das man mit der von dir verlinkten API nicht das machen kann, was der OP machen möchte.
Siehe Zitat oben.
Mister232 schrieb:
Was muss ich den am Anfang des Programmes alles importieren [...]
windows.h
/kernel32.lib
-
Okay danke. Ich setz mich heute Abend mal ran
-
Habe jetzt mal ein wenig ausprobiert und mich durch die Posts von Mmacher gearbeitet. Hätte dann nochmal eine Frage, wie öffnet und initialsiert man den den COM-Port?
Habe bis jetzt folgenden Quellcode:
#iclude <stdio.h> #include <windows.h> int main(void){ handle_comport = CreateFile(?); SetCommState(?); EscapeCommFunction(handle_comport, SETRTS); fflush(stdin); getchar(); return 0; }
Soryy wenn ich nerve, würde das aber einfach gerne verstehen
-
Das steht in meinem ersten Link zum Thema ...
-
Jetzt funktioniert es. Ich danke allen die mir geholfen haben.
Gruß
Mister232
-
IOports schrieb:
[...] dafür kann ich aber voraussagen, das man mit der von dir [Anm.: Swordfish] verlinkten API nicht das machen kann, was der OP machen möchte.
Mister232 schrieb:
[...]
Swordfish schrieb:
Das steht in meinem ersten Link zum Thema ...
Mister232 schrieb:
Jetzt funktioniert es. [...]
q.e.d.