Visual Studio 13 und RS232

#7843498
Lesenswert?

Jürgen H. schrieb:

Weiß jemand, wie man die Signalpegel an der RS232 im Visual Studio 13 setzen und auslesen kann?

Geht gar nicht.

Man kann höchstens in einer der vielen von Micosoft Studio unterstützen Programmiersprachen ein Programm schreiben, welches über die RS232 kommuniziert. Aber auch damit kann man die Signalpegel an der Schnittstelle nicht setzen und auslesen.

Oliver

OP #7843504
Lesenswert?

Wieso denn nicht Oliver??

Private Sub CheckBox3_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox3.CheckedChanged If CheckBox3.Checked = True Then SerialPort1.DtrEnable = True Else SerialPort1.DtrEnable = False End If End Sub

Das habe ich gefunden. Aber noch nicht RxT, TxT oder CTR. HTerm macht das!

Ich möchte mir z.B. ein Schieberegister an der RS232 bauen.

#7843512
Lesenswert?

Jürgen H. schrieb:

im Visual Studio 13 setzen

Das ist eine IDE. Deinem Beispielcode nach meinst Du wohl, wie Du das mit .NET-Zeug erledigen kannst.

Jürgen H. schrieb:

Das habe ich gefunden. Aber noch nicht RxT, TxT oder CTR.

TXD und RXD kannst Du nur für UART-Kommunikation nutzen. Was die Handshake-Leitungen angeht:

https://learn.microsoft.com/en-us/dotnet/api/system.io.ports.serialport?view=net-9.0-pp

Jürgen H. schrieb:

HTerm macht das!

Es zeigt an, wenn Daten gesendet oder empfangen werden, das ist keine Echtzeit-Darstellung der Datenleitungen.

#7843537
Lesenswert?

Jürgen H. schrieb:

War im falschen Forum

Du wolltest eigentlich in einem Forum posten, wo man dank Glaskugel Deine unvollständige Frage entziffern kann?

Jürgen H. schrieb:

Mit dem kann man die Leitungen setzen!

Aber ganz sicher nicht "RxT, TxT oder CTR".

Für TXD kann man unter Windows tricksen (Break hat keinen Timeout), wie es dieser Code tut, aber ob das mit allen USB-RS232-Adaptern funktioniert, sei dahingestellt.

OP #7843554
Lesenswert?

Hmmmmmmmm, was war so unverständlich an meiner Anfrage?

Und Du irrst! Mit dem Programm kann Mann die Pegel auf TXD, RTS und DTR setzen und rücksetzen. CTR gibt es gar nicht! Probiere es doch aus bevor Du es mit Glaskugeln versuchst. Vielleicht sollte Deine mal zur Reparatur.

#7843561
Lesenswert?

Jürgen H. schrieb:

Hmmmmmmmm, was war so unverständlich an meiner Anfrage?

Dass Visual Studio 13 keine Programmiersprache, sondern eine IDE für diverse Programmiersprachen ist.

Man brauchte also eine Glaskugel, um zu erfahren, ob Du aus der IDE oder aus eigenem Code etwas schalten willst, und falls letzteres, in welcher Sprache das passieren soll.

Jürgen H. schrieb:

Und Du irrst! Mit dem Programm kann Mann die Pegel auf TXD, RTS und DTR setzen und rücksetzen.

Ich irre überhaupt nicht. Du hast bloss nicht begriffen, was ich geschrieben habe: Dass es mit den Handshakeleitungen regulär geht (siehe mein Link weiter oben) und mit TXD nur mit Trickserei, die a) so nur unter Windows funktioniert, b) evtl. nicht mit allen USB-RS232-Adaptern funktioniert und c) von Deinem ach so tollen Tool genutzt wird.

Jürgen H. schrieb:

CTR gibt es gar nicht!

Tja, "RxT, TxT oder CTR" war ein Zitat von Dir, und alle drei gibt es nicht. Beginnende Demenz?

Gast #7843606
Lesenswert?

Jürgen H. schrieb:

Ich möchte mir z.B. ein Schieberegister an der RS232 bauen.

Das wird extrem langsam laufen, vor allem wenn noch USB dazwischen ist. Unter DOS bis Windows Me ging das mit direkten Hardwarezugriffen noch einigermaßen gut. Inzwischen aber nicht mehr.

(Firma: 1984now) #7843611
Lesenswert?

Hmmm schrieb:

TXD und RXD kannst Du nur für UART-Kommunikation nutzen. Was die

Ähem, nein. Man kann die auch also einfachen Ausgang (TXD) oder einfachen Eingang (RXD) verwenden. Wenn auch nicht ganz so schnell, wie das mit den üblichen "Klingelpins" geht.

Man verwendet dazu einfach den BRK-Mechanismus. Der .net-Serialport unterstützt das über das Property BreakState und über das Event PinChanged.

Insgesamt hat man also am Serialport drei Ausgänge und fünf Eingänge zur Verfügung, mit denen man in GPIO-Manier rumfummeln kann. Das genügt z.B., um 15 Tasten als Matrix abzufragen.

#7843614
Lesenswert?

Ob S. schrieb:

Ähem, nein. Man kann die auch also einfachen Ausgang (TXD)

Habe ich schon weiter oben geschrieben.

Zum einen ist das OS-abhängig. Unter Windows kannst Du den Break-Zustand beliebig ein- und ausschalten. POSIX-Systeme tun das, wofür es eigentlich gedacht ist, und schicken für einen gewissen Zeitraum ein Break, siehe tcsendbreak().

Zum anderen geht das je nach USB-UART-IC sogar komplett schief. Ich glaube, CP2102 und PL2303 sind (ggf. je nach Version) solche Kandidaten.

Ob S. schrieb:

einfachen Eingang (RXD)

Wie soll das gehen? Du bekommst zwar mit Verzögerung ein empfangenes Break signalisiert (je nach Treiber wohl einfach aus einem Framing Error generiert), aber der Rückweg zur Ruhelage scheint nicht signalisiert zu werden.

(Firma: 1984now) #7843618
Lesenswert?

Hmmm schrieb:

Ich irre überhaupt nicht. Du hast bloss nicht begriffen, was ich geschrieben habe: Dass es mit den Handshakeleitungen regulär geht (siehe mein Link weiter oben) und mit TXD nur mit Trickserei

Das ist keine Trickserei, sonder ein Mechanismus, den es gibt, so lange es RS232 gibt.

, die a) so nur

unter Windows funktioniert

Das ist nun wirklich Unsinn. Linux wäre nicht Linux, wenn es etwas nicht unterstützen würde, was fest zum abzubildenden Standard gehört.

Bezüglich des .net-Serialport kann man sich mit Mono sogar völlig problemlos davon überzeugen, dass das natürlich auch unter Linux funktioniert. Ohne jede Änderung im Code!

Wenn man's allerdings von Hand machen muss, ist es unter Linux doch eine ziemliche Quälerei. Dagegen ist das Win32-API wirklich pures Gold. Zumindest in diesem Punkt. Gehen tut es aber natürlich auch unter Linux.

, b) evtl. nicht mit allen USB-RS232-Adaptern

funktioniert

Dann sind es keine RS232-Adapter. BRK gehört ganz unbezweifelbar zum RS232-Standard. Tat das von Anbeginn an.

Mir ist auch noch keiner untergekommen, der das nicht korrekt abgebildet hätte. Andererseits würde es mich allerdings auch nicht allzu sehr wundern, wenn es so etwas tatsächlich geben sollte. Es gibt so viel Müll auf dem Markt der USB-Devices, warum nicht auch sowas.

#7843625
Lesenswert?

Ob S. schrieb:

, die a) so nur unter Windows funktioniert

Das ist nun wirklich Unsinn.

Meine Güte, "c-hater", lies es halt nach:

https://pubs.opengroup.org/onlinepubs/009696699/functions/tcsendbreak.html

Du kannst natürlich versuchen, vor Ablauf des Timeouts das Break "aufzufrischen", aber spätestens dann wird es endgültig ein ekliger Hack.

Ob S. schrieb:

Mir ist auch noch keiner untergekommen, der das nicht korrekt abgebildet hätte.

CP2102N vor Rev. A02 (2019):

https://www.silabs.com/documents/public/pcns/190315471-CP2102N-Product-Revision-with-Datasheet-and-Errata-Update.pdf

(Firma: 1984now) #7843637
Lesenswert?

Hmmm schrieb:

https://pubs.opengroup.org/onlinepubs/009696699/functions/tcsendbreak.html

Wen interessiert, was die schreiben?

Fakt ist: es geht. Beweis aus der Praxis: Mono tut es. Und jeder kann selber nachlesen, wie es das tut. Mono ist schliesslich OS.

CP2102N vor Rev. A02 (2019):

Gut zu wissen. Aber wie ich schon schrieb: Es würde mich bei dem allgemein oft miserablen Niveau von USB-Devices überhaupt nicht überraschen, wenn es sowas gäbe.

Aber: Allein die Tatsache, dass das ein Erratum ist, zeigt jedem logisch denkenden Menschen, dass wohl das Gegenteil (also funktionierendes BRK) wohl eher doch der Normalfall sein muss. Meinst du nicht auch?

#7843644
Lesenswert?

Ob S. schrieb:

Fakt ist: es geht. Beweis aus der Praxis: Mono tut es.

Was genau tut es? Break nach Lust und Laune ein- und ausschalten, oder wird aus dem Einschalten einfach ein handelsübliches Break mit 250-500ms?

Ob S. schrieb:

Allein die Tatsache, dass das ein Erratum ist

Richtig lesen, das gehört nicht zu den Errata, sondern ist ein neues Feature:

CP2102N revision A02 includes the following new features:

  • Send break and stop break command signalling

Und deshalb wird diese Funktionalität auch erst im neuen Datenblatt überhaupt beschrieben:

Version 1.3 of the CP2102N datasheet includes the following changes:

  • Added section describing A02 functionality for sending break signaling
#7843654
Lesenswert?

Ob S. schrieb:

Fakt ist: es geht. Beweis aus der Praxis: Mono tut es. Und jeder kann selber nachlesen, wie es das tut. Mono ist schliesslich OS.

Fakt ist: Es geht nicht. Gerade im Mono-Source nachgelesen.

1
    public void SetBreakState (bool value)
2
    {
3
      if (value)
4
        if (breakprop (fd) == -1)
5
          ThrowIOException ();
6
    }

Und breakprop() sieht dann so aus:

1
int
2
breakprop (int fd)
3
{
4
  return tcsendbreak (fd, 0);
5
}

D.h. wenn Du unter Mono Break einschaltest, wird ein Standard-Break (250-500ms) gesendet, und das Abschalten hat überhaupt keinen Effekt.

Also keine Nutzung als beliebig ein- und ausschaltbarer Output, und Bit Banging macht damit sehr wenig Spass.

#7843660
Lesenswert?

tcsendbreak() transmits a continuous stream of zero-valued bits for a specific duration, if the terminal is using asynchronous serial data transmission. If duration is zero, it transmits zero-valued bits for at least 0.25 seconds, and not more that 0.5 seconds. If duration is not zero, it sends zero-valued bits for some implementation-defined length of time.

--

Unabhängig davon kommt einem noch die Idee, einen verrosteten Konservendosendeckel zu benutzen, um sich zu verstümmeln. Vielleicht als so eine Art Piercing? Wenn man den so halb unter die Haut schiebt, dann gibt das nach einiger Zeit sicherlich interessante Effekte.

OP #7844296
Lesenswert?

Guten Morgen Obelix,

vor ca. 30 Jahren hatte ich für meine Kinder eine Baumscheibe mit einem Kreis (dort fährt eine kleine Z-Lok mit zwei Wagen), einem Andreaskreuz und 4 Häusern gebaut. Jetzt sind die Enkel da!

Das Projekt wurde damals mittels RS232 (2 Leitungen) über einen Klinkenstecker verbunden. Programmiert über Turbo Pascal und einem PC mit Dos 6.22!

Jetzt werden wahrscheinlich gleich wieder einige Leute Einspruch erheben, dass man dafür 3 Leitungen + Masse braucht. Nö! Heute würde ich dafür auf der anderen Seite einen AVR bemühen.

#7844338
Lesenswert?

Jürgen H. schrieb:

Jetzt werden wahrscheinlich gleich wieder einige Leute Einspruch erheben, dass man dafür 3 Leitungen + Masse braucht. Nö!

Kommt drauf an, was man machen will. Deine Beschreibung ist mehr als dürftig, nämlich komplett nichtssagend. Auch das, was Du damals mit Turbopascal und Deinem Klinkenstecker "gezaubert" hast, ist zu vage beschrieben, als daß man das beurteilen könnte.

Jürgen H. schrieb:

Heute würde ich dafür auf der anderen Seite einen AVR bemühen.

Und was soll dann der Mist mit dem "Bit-banging"?

OP #7844347
Lesenswert?

Was damals "gezaubert" wurde ist ja hier nicht das Thema. Und nichtssagend würde ich auch nicht behaupten. Wenn Du nicht nur lesen, dumme Kommentare abgeben und mal nachdenken würdest wäre es hilfreicher. Andere können das. Weist Du überhaupt was ein Schieberegister ist?

OP #7844906
Lesenswert?

Ja, ist schon seltsam hier!

Da stellt Mann eine Frage und keiner (außer vielleicht Ob S) bietet eine Lösung an. Sogar als sich Oliver S geirrt hat bekommt er dafür positiven Zuspruch. Es liegt wahrscheinlich daran, dass man ohne positive Wertungen keine negativen vergeben kann. Dann habe ich in einem anderen Forum fast die Lösung dafür gefunden aber ..... Wahrscheinlich können hier einige mit ihrem Halbwissen damit nicht umgehen.

Aber Cyb-Dings setzt dem Ganzen die Krone auf! Jetzt hab ich Kopfaua!

Schaut mal im Tread "Temperatursensor gesucht" nach.

H. H. schrieb

Cybarschloch einfach nicht beachten.

Erwin R. schrieb

Cybarschloch einfach nicht beachten.

Bester Kommentar ever 👍

Da kann ich mich anschließen und sind mir die vielen positiven Bewertungen verständlich!!

Wo bleibt die Ignorierfunktion?? (Idee von H.H.) Seht euch doch mal den Umgang miteinander in anderen Foren an!

#7845341
Lesenswert?

Jürgen H. schrieb:

Wie willst du denn dann die Leitungen RTS/CTS als Handshake mit einbeziehen

Das hat mit Bit-Banging nichts zu tun. Nur fossile Uarts aus der vorderen Altsteinzeit, also so etwas wie 8250 oder 16450, das Zeug, das vor 30 Jahren in PCs verbaut wurde, hat keine Hardwareunterstützung für Handshake, da muss man das per Software erledigen. Das machte man damals in einer entsprechenen ISR (oder das ganze wurde sehr, sehr behäbig).

Heutige UARTs, gerade die in Form von USB-Seriell-Bridges üblichen, können sich aber selbst um Hardwarehandshake kümmern, und die Devicetreiber, die mit ihnen kommunizieren, können das auch entsprechend konfigurieren.

#7851470
Lesenswert?

Rbx schrieb:

Zuerst brauchst du einen Treiber für RS232 und das passende Windows. In der FH in Hamburg gibt es auch Hardwareprogrammierungen, da könnte man auch mal nachfragen, ob die was passendes haben.

Natürlich und dann noch eine Audienz beim Papst.

ODER man die vorhandene SerialPort Klasse und hat bereits alles was man braucht. Ach ne, Skill braucht man auch noch. Stimmt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren