C# UART DTR-Pin

Gast #2676586
Lesenswert?

Hallo!

Ich arbeite mit dem Mikrocontroller Mini2440 mit WinCE.
Ich programmiere normale Apps für diesen Mikrocontroller mit Visual 
Studio 2008.

Die RS232 Schnittstelle funktioniert super, jedoch nur mit RS232 zu 
RS232. Ich benötige aber RS232 zu RS485. Ich habe bereits einen 
Konverter. Jedoch arbeitet dieser Konverter nur wenn er auch ein Signal 
bekommt, ob der Mikrocontroller jetzt sendet oder empfangen will. 
(DTR-Pin)

Ich habe leider keine Ahnung wie ich dieses Pin in C# enablen kann.
Die mitgelieferte Doku von diesem Mikrocontroller ist leider auf 
chinesisch. Ich habe mir zwar schon englische Versionen runtergeladen, 
aber leider nichts für meine Anforderungen gefunden.


Also falls mir irgendwer helfen könnte wäre ich sehr dankbar ;)

Ich will einfach nur wissen, wie man die zusätzlichen Pins der UART in 
C# enablen kann.. (DTR-Pin hauptsächlich)


Danke schon einmal im vorhinein ;)



Mfg. Osti
Persönliche Seite #2676632
Lesenswert?

Die API der seriellen Schnittstelle wird ja vom Betriebssystem zur 
Verfügung gestellt, und das ist Windows CE. Das ist verhältnismäßig 
brauchbar dokumentiert, die hier zu verwendende Funktion heißt 
EscapeCommFunction 
http://msdn.microsoft.com/en-us/library/ms885213.aspx.

Damit kannst Du den Pegel von DTR verändern.

Du hast Dir damit aber ein Problem eingehandelt -- nämlich Dein Programm 
muss vor jedem gesendeten Telegramm die DTR-Leitung in den richtigen 
Zustand versetzen und sie danach wieder zurücksetzen. Da aber die 
Hardware der seriellen Schnittstelle i.d.R. über einen Sendepuffer 
verfügt, wirst Du Schwierigkeiten haben, den korrekten Zeitpunkt zu 
bestimmen, denn unmittelbar nach dem Übertragen der zu sendenden Daten 
an das Betriebssystem wäre das viel zu früh.

Also wirst Du Dir einen Timer aufziehen müssen, der Deinem Programm nach 
soundsovielen Bytezeiten (halt so lang, wie Dein Telegramm ist) Bescheid 
stößt, daß die Handshakeleitung deaktiviert werden kann.

Beliebig viel Zeit hast Du dafür nicht, weil die angesprochene 
Gegenstelle ja irgendwann mit dem Antworten anfängt, was aber nur 
empfangen werden kann, wenn DTR deaktiviert ist.

Das wird bereits bei so niedrigen Baudraten wie 9600 kritisch, oder aber 
Du musst auf beiden Seiten der Kommunikation mit großzügig 
dimensionierten Totzeiten arbeiten.


Wesentlich günstiger ist hier die Verwendung einer UART-Hardware, die 
diese Sender/Empfänger-Umschaltung in Hardware unterstützt, wie es z.B. 
die beliebten USB-Seriell-Bridges von FTDI tun.
Gast #2677544
Lesenswert?

Ich werde es nun anders versuchen..

Ich arbeite nicht mehr mit dem normalen COM-Port, sondern gehe über die 
USB-Schnittstelle mit einem USB zu RS485 converter direkt weg..

Das heißt, dass ich nun ein virtuelles COM-Port habe, jedoch weiß ich 
nicht wie ich dieses herausfinde, bzw. im Programm einstelle, dass er 
über diese virtuelle Schnittstelle alles sendet..

Hättest du vielleicht eine Idee? ;)

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