mikrocontroller.net

Forum: PC-Programmierung Schieberegister mit .Net 2.0


Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abends, Chris!

Guck' mal hier:
http://www.csharpfriends.com/Forums/ShowPost.aspx?...

MfG
Claes in Lund, Schweden
claes(dot)lindblad(at)gmail(dot)com

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Claes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bartli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

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

Autor: Slowflyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
if (this.serialPort1.IsOpen)
{
if (this.serialPort1.BreakState == true)
this.serialPort1.BreakState = false;
else
this.serialPort1.BreakState = true;
}

Gruß, Slowflyer

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow, man lernt nie aus :-) Danke Slowflyer

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: H.H. (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.