PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232: Baudrate ändern ohne dass RTS getoggelt wird



-schumi-
05.01.11, 20:14
Hallo ersmal :-)

(Ich bin noch ganz neu hier, wurde von einer Zeitschrift auf diese Forum verwiesen)

Ich habe folgendes Problem:
Ich muss bei einem geöffneten Port eines USB-RS232 Wandlers die Baudrate von 38400 Baud auf 500KBaud erhöhen.

Dabei darf RTS seinen Zustand allerdings _nicht_ verändern!
(Bzw. soll High bleiben)

Wenn ich in meinem Programm (geschrieben mit FreeBASIC, http://www.freebasic-portal.de/) den Port schließe und erneut öffen wir RTS getoggelt -> Mikrocontroller der dran hängt wird resettet

Des weiteren hab ich versucht über die Kommandozeile mithilfe von
"stty -F /pfad/zum/port 500000"
die Baudrate zu ändern währen der Port im Programm noch geöffnet ist
-> RTS wird wieder getoggelt

Könnte mir vielleicht jemand von euch verraten wie man entweder
1. Die Baudrate ändert ohne den Port zu schließen und RTS toggelt
oder
2. Die RS232 dazu zwingt den RTS-Pin auf High zu halten, auch wenn der Port geschlossen und wieder geöffnet wird

Schon mal dickes Danke im Voraus :)
-schumi-

PS: Da es sich bei dem Mikrocontroller um den AVR des RP6 (http://arexx.com/rp6/html/de/index.htm) handelt kann ich den Reset nicht auf einen anderen Pin legen

delix
06.01.11, 19:52
direkt weiterhelfen kann ich dir da nicht, aber falls sich hier niemand mehr meldet, solltest du es nochmals hier (http://www.mikrocontroller.net/) versuchen.

-schumi-
06.01.11, 23:14
Danke für deine Antwort delix!

>>solltest du es nochmals hier versuchen.
Ja, da bin ich auch dabei :-D

In der Zeitschrift stand:
>>Auch Rubriken wie Selbstgebaute Elektronik und Router und Netzaufbau deuten darauf hin, dass sich diese Seite eher an fortgeschrittene Anwender wendet.<<
(Aus EasyLinux 04/2010)

Daher ging ich davon aus dass ich hier bessere Chancen habe als auf µC.net
Aber anscheinend scheint dieser Teil des Forums ja eher vor sich hin zu oxidieren.....

Inzwischen hat mir Google endlich die Lösung offenbart, und sie ist tatsächlich auf µC.net zu finden, genau genommen da: http://www.mikrocontroller.net/topic/166175

Ich darf DS66 zittieren:

>> Der "Fehler" liegt im Treiber und zwar hier
pl2303.c:

622 if ((cflag & CBAUD) == B0)
623 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS);
624 else
625 priv->line_control |= (CONTROL_DTR | CONTROL_RTS);
626 if (control != priv->line_control) {
627 control = priv->line_control;
628 spin_unlock_irqrestore(&priv->lock, flags);
629 set_control_lines(serial->dev, control);
630 } else {
631 spin_unlock_irqrestore(&priv->lock, flags);
632 }

Beim wechsel der Baudrate ungleich "B0" wird DTR und RTS immer auf HIGH
gesetzt, egal, ob vorher nicht gesetzt oder gesetzt.
Du müsstest dir den Treiber ohne diese Zeilen übersetzen, dann sollte es
funktionieren.
(hab gerade dasselbe Problem)<<

Der Thread ist zwar schon exakt 8 Monate alt, das Problem scheint aber immer noch zu existieren.

Mal sehen inwiefern ich den Treiber verändern und selbst compilieren kann...

Grüße
Schumi