Hi, ich möchte gerne ein Schieberegister mit der SerialPort Klasse des .Net Frameworks ansteuern. Als Schaltung verwende ich diese: http://www.skilltronics.de/versuch/elektronik_pc/4094.html . Die Schaltung funktioniert mit dem Testprogramm schon ohne Probleme, aber leider nicht mit meiner eigenen Software. Mein Code sieht so aus: Com.Open(); Com.Write("1"); Com.Close(); Das ganze ist in C# geschrieben. Leider weiß ich nicht, wie ich den SerialPort Konfigurieren muss sprich Baudrate etc. Ich würde mich sehr freuen, wenn da jemand ein paar Tipps für mich hätte, wie ich das ganze zum Laufen kriege. Danke und Gruß Chris
Abends, Chris! Guck' mal hier: http://www.csharpfriends.com/Forums/ShowPost.aspx?PostID=44099 MfG Claes in Lund, Schweden claes(dot)lindblad(at)gmail(dot)com
Hi Claes, ich habe mich da leider etwas missverständlich ausgedrückt, wie ich die Einstellungen generell vornehme weiß ich, sprich Baudrate etc. einstellen. Aber leider weiß ich nicht, was genau ich für diese Schaltung einstellen muss, also mit welcher Baudrate die Schaltung läuft, wieviele Stopbits nötig sind und sowas. Gruß Chris
Hallo Hab mir die Schaltung angesehen. Die Baudrate spielt keine Rolle (nimm z.B. 9600). Sonst würde ich einstellen: 8 Datenbits, keine Parität und 1 Stoppbit. Das würde ich so nicht machen: Com.Write("1"); Mach lieber ein byte array und verschicke dann dieses. Der Grund ist, dass standartmässig ein Character eines Strings ein 16-Bit Wert darstellt (UTF-8). Also irgendwie so ähnlich: byte[] data = new byte[1]; // Datenarray mit Lämge 1 data[0] = 1; // Wert zuweisen Com.Write(data, 0, data.length); // Daten verschicken
Hab noch gesehen, dass Du die Datenleitung auf 1 oder 0 setzen musst. Ich weiss nicht ob das direkt aus .NET geht. Mit Com.Write wird ja einfach ein oder mehrere Bytes verschickt und nach dem Stoppbit hast Du immer denselben Pegel, egal was verschickt wurde.
Der springende Punkt in dieser Schaltung ist, dass sie zwar am seriellen Port angeschlossen wird aber nicht wie ein serieller Port betrieben wird. Im Grunde hat der Ersteller den seriellen Port einfach nur zweckentfremdet um ein paar externe Leitungen zu haben, die er per Programm ein und aussschalten kann. -> vergiss alles was du über die Serielle weist, das bringt dich alles nicht weiter. Wonach du suchen musst, sind Möglichkeiten, direkt die Leitungen des seriellen Port- Bausteins anzusprechen. Ich nehme für sowas immer die parallele Schnittstelle. Mit den entsprechenden Bibliotheken ist der ziemlich einfach anzusprechen und man hat auch mehr Leitungen. Allerdings habe ich das bisher nur direkt von C oder C++ aus gemacht und nicht über C# und .Net
Naja, für den Parallelport nimmst du ja typischerweise irgendne Library wie Inpout (http://logix4u.net), damit das Zeugs auch auf NT basierten Windows Systemen läuft. Ist jetzt auch nicht so ein Problem, so ne DLL mit Hilfe vom PInvoke Mechanismus in einer .NET Applikation zu benutzen. Wird zum Bleistift hier beschrieben: http://www.codeproject.com/csharp/csppleds.asp
Hi, also was die DTR und RTS Leitungen angeht, so kann man die in .NET 2.0 direkt ansprechen. Die serialport-Klasse beinhaltet dafür zwei bool Variablen DtrEnable und RtsEnable. Ich habe mir mal den Beispielquellcode (Basic) angesehen. Was mir auffällt ist, dass scheinbar der TXD-Pin direkt angesprochen (gesetzt/gelöscht) werden kann. Soviel ich weiss, gibt .NET 2.0 diese Möglichkeit nicht her. Deshalb würde ich auf die Tipps von Karl Heinz Buchegger und Bartli hören. Gruß, Slowflyer
Mit SetBreak und ClearBreak sollte man den TxD Pin eigentlich direkt ansprechen können. Müsst man mal versuchen
Hi, Tobi H. hat recht. die serialport-Klasse hat eine bool-Variable BreakState. Diese hat die Properties get und set. D.h. mit BreakState = true; und BreakState = false; erreicht man genau das, was Tobi beschreibt. Bsp. Toggeln der TXD-Leitung
1 | if (this.serialPort1.IsOpen) |
2 | { |
3 | if (this.serialPort1.BreakState == true) |
4 | this.serialPort1.BreakState = false; |
5 | else |
6 | this.serialPort1.BreakState = true; |
7 | } |
Gruß, Slowflyer
Hi, ich wollte das ganze mal mit Delphi und einer Port.dll probieren, habe dazu im Internet folgende Seite gefunden http://people.freenet.de/ccs-mod/tut-platine.htm .Nutzen tue ich diese Port.dll http://www.b-kainka.de/referenz.txt . Leider klappt das ganze irgendwie nicht so, wie ich das will mein Programm sieht so aus: OpenCom('COM2:9600,N,8,1'); begin //1 TXD(StrToInt('1')); RTS(1); RTS(0); end; //1 DTR(1); DTR(0); ClOSECOM; Ich würde mich freuen, wenn jemand einen Tipp hätte! Gruß Chris
Genau, damit geht es, direkte Adresse und Pin ansprechen. http://www.ees-hartz.de/ http://www.ees-hartz.de/P64_HLP/page15.html
Hi, ich kann probieren was ich will, ich kriege das Schieberegister einfach nicht dazu, das es meine Led leuchten lässt, leider weiß ich mittlerweile auch nicht mehr weiter, hat evtl. noch jemand einen Tipp für mich? Code: OpenCom('COM2:9600,N,8,1'); begin //1 TXD(StrToInt('0')); RTS(1); RTS(0); end; //1 DTR(1); DTR(0); ClOSECOM; Danke und Gruß Chris
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.