RS232 - normale USART umgehen

OP #940009
Lesenswert?

Hallo

Ich möchte mich mit einem PC in den DMX512-bus hängen(mit Levelkonverter 
- RS-485 ...)

Mein Problem ist, dass ich nicht weiß wie ich den Bus 160µs lange auf 0 
ziehen kann(da ich nicht eifnach 0x00 ausgeben kann)
Eine möglichkeit wäre, dass man die Baudrate von 250kBit/s herunterdreht 
und dann 0x00 ausgibt und sofort die Baudrate wieder auf die 250kBit/s!
dies hört sich aber sehr unsicher an ...

I habe mir gedacht ob man nicht vielleicht die PC-Schnittstelle 
"austricksen" könne??
zB.: mit einer der speziellen Signalleitungen wie RTS, CTS, DSR, 
DCD(CD), DTR oder RI(wahrscheinlich eher weniger) ??????

Kann mir irgendwer weiterhelfen?
(Zugriff auf die Schnittstelle mit C#)

Gibt es eine möglichkeit?
Beim µC ist es leichter, da werden die bestimmten Pins nicht als normale 
PortPins deklariert und wenn der RESET (1) fertig ist werden die PINS 
als USART Modul deklariert!

Würde mir sehr weiterhelfen wenn jemand eine Idee hätte

lg manuel
Angehängte Dateien:
Persönliche Seite #940033
Lesenswert?

Du könntest tatsächlich mit einer Handshakeleitung (DTR oder RTS, alle 
anderen sind Eingänge) eine zusätzliche Hardware ansteuern, die Dein 
gewünschtes Verhalten erzeugt. Dazu würde ein einfaches AND-Gatter 
genügen, an das die Handshakeleitung und TxD von der UART angeschlossen 
werden (natürlich erst nach 'nem geeigneten V24-zu-TTL-Pegelkonverter).

Allerdings wirst Du mit 'nem PC, sofern Du nicht ein hartes RTOS 
verwendest, keine Chance haben, definierte 160 µs lang irgend etwas zu 
tun. Mit Windows hast Du da ganz schlechte Karten, das könntest Du nur 
auf Devicetreiberebene hinbekommen, aber absolut überhaupt gar nicht mit 
'ne in C# geschriebenen Usermode-Applikation.

Das weitere Problem ist, daß die serielle Schnittstelle des PCs gar 
keine Datenrate von 250 kBit/sec erzeugen kann, schneller als 115200 
wird die nicht. Das können nur USB-Seriell-Adapter oder spezielle 
PCI-Steckkarten.

(Ja, es gibt Methoden, die Super-I/O-Chips, in denen die normalen 
PC-UARTs auf heutigen Mainboards drinstecken, quasi zu "übertakten", das 
aber ist nichtportierbares Gefrickel, von dem ich die Finger lassen 
würde)
Gast #940171
Lesenswert?

"Eine möglichkeit wäre, dass man die Baudrate von 250kBit/s 
herunterdreht
und dann 0x00 ausgibt und sofort die Baudrate wieder auf die 250kBit/s!
dies hört sich aber sehr unsicher an ..."

Das wird bei Digitemp für die 1-wire Ansteuerung auch so gemacht.

Warum soll das nicht gehen ?

Gruss
Axel
OP #940180
Lesenswert?

@Axel

Nein ich denke es wird schon gehen, aber ich bin mir nicht sicher ob 
dies auch sicher ist, wenn ich dass so mache ...
Versuchen werde ich es auf jedem Fall, aber ich dachte es gibt eine 
schönere Lösung...

Wenn dann muss ich sowiso mit einem USB-RS232 Konverter arbeiten!

lg manuel
Persönliche Seite #940184
Lesenswert?

> Wenn dann muss ich sowiso mit einem USB-RS232 Konverter arbeiten!

Und in diesem Falle bekommst Du das Timing nicht ansatzweise hin. Nicht 
nur, daß das von Dir verwendete OS mit einer Schedulergranularität von 
10 -bestenfalls 1- msec arbeitet, sondern hinzu kommt noch, daß USB auch 
nur im 1kHz-Takt gepollt wird.

Mit einem USB-Seriell-Adapter wirst Du keine 160 µS-Pulse erzeugen 
können.

Mach Dir das Leben einfacher: Nimm einen µC mit zwei seriellen 
Schnittstellen, die eine verwendest Du für das DMX-Protokoll, die andere 
hängst Du mit ausreichend hoher Baudrate an einen FT232R.

Alle timingkritischen Dinge solltest Du auf dem µC durchführen, der PC 
bekommt das einfach nicht hin, auch wenn er mit zig GHz getaktet sein 
sollte.
Gast #940244
Lesenswert?

@ Manuel -- (ploana)
leider und ungern muß ich
 Rufus t. Firefly (rufus) (Moderator)
recht geben .
z.Z. ist dies die einfachste und billigste Lösung.

ich suche selbst ,aus Interesse ,einen deines Vorschlags ähnliche 
Lösung,
leider vergeblich.

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