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
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
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
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
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