Forum: PC-Programmierung Schieberegister mit .Net 2.0


von Chris (Gast)


Lesenswert?

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

von Claes (Gast)


Lesenswert?

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

von Chris (Gast)


Lesenswert?

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

von Claes (Gast)


Lesenswert?


von Johnny (Gast)


Lesenswert?

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

von Johnny (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von Bartli (Gast)


Lesenswert?

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

von Slowflyer (Gast)


Lesenswert?

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

von Tobi H. (tobi-) Benutzerseite


Lesenswert?

Mit SetBreak und ClearBreak sollte man den TxD Pin eigentlich direkt
ansprechen können. Müsst man mal versuchen

von Slowflyer (Gast)


Lesenswert?

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

von Johnny (Gast)


Lesenswert?

Wow, man lernt nie aus :-) Danke Slowflyer

von Chris (Gast)


Lesenswert?

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

von H.H. (Gast)


Lesenswert?

Genau, damit geht es, direkte Adresse und Pin ansprechen.
http://www.ees-hartz.de/
http://www.ees-hartz.de/P64_HLP/page15.html

von Chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.