RS232 und RTS-Signal

  • Hallo alle miteinander!

    Ich möchte gerne die RTS-Leitung der RS232 Schnittstelle von Hand steuern. Bis lang habe ich die RS232 wie folgt konfiguriert:

    Code
    hRS232& = OpenCom(Port$,1024,1024)   	' RS232 öffnen
    SetComExt(hRS232&,-1,-1,-1,$4000,-1,-1)  ' Beendet Read/Write bei Fehler
    ComError(hRS232&)                    	' auftretende RS232 Fehler reseten

    Das funktioniert auch problemlos (es wird ein FT232R Chip der Firma FTDI verwendet). Nun möchte ich die RTS-Leitung mit einschalten (damit wird ein RS485-Chip in sende/empfangs- Richtung versetzt). Dafür
    verwende ich nun die Konfiguration:

    Code
    SetComExt(hRS232&,-1,-1,-1,$5000,-1,-1)  ' Beendet Read/Write bei Fehler & RTS=ON

    Die LED am FR232R-Chip zeigt mir nun auch an das Daten empfangen werden, nur leider kommen bei...

    Code
    Tmp$ = ReadCom$(hRS232&,10)  ' 10 Bytes aus RS232 Puffer einlesen
    ComError(hRS232&)           	' auftretende RS232 Fehler reseten

    ...keinerlei Daten an. Der Empfangspuffer bleibt leer. Ich habe es auch schon mit den Einstellungen „$1000“ und „$2000“ (laut XProfan Hilfe) versucht, auch hier kommen keinerlei Daten an. Was mache ich hier falsch, bzw. wie muss ich die RS232 konfigurieren um die RTS-Leitung von Hand steuern zu können?

    LG Jens

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress, WoltLab & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

    Wenn du Fragen hast, kannst du dich gerne jederzeit an @Maximilian Rupp wenden

    Hinweis:

  • Belege mal N5 mit ($3000: RTS Signal Toggle)

    Vielleicht muß man auch N6 + N7, also die Buffer belegen.

    Die CTS und RTS Leitungen müssen dann gekreuzt werden.

    Siehe : http://www.mikrocontroller.net/articles/RS-232

    Du hast also dann 4 Leitungen :

    RxD/TxD und RTS/CTS

    Achja, wenn man etwas googelt, findet man auch leicht

    das hier : http://msdn.microsoft.com/en-us/library/…8(v=vs.85).aspx

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    2 Mal editiert, zuletzt von H.Brill (29. März 2014 um 18:55)

  • Hallo H.Brill!

    Die RTS-Leitung toggeln ist nicht möglich, da hier RTS High = senden und RTS Low = empfangen ist. Hab es aber trotzdem getestet, ohne Erfolg. Auch das setzen von N6 und N7 bringt kein Erfolg, der Empfangspuffer bleibt weiterhin leer...

    LG Jens

  • Vielleicht stimmt sonst was nicht.

    Hast du es auch mal mit der API probiert ?

    WaitCommEvent gehört auch dazu.

    Das ganze ist außerdem auch sehr zeit-kritisch.

    Du mußt bedenken, daß das Schreiben eines Bytes

    noch keine Millisekunde braucht. Sowas ist interessant,

    wenn man einen Mikrcontroller (AVR o.ä.) dranhängen

    hat. Der kann dann mit seinen Interrupt-Eingängen die

    High und Low - Flanken erkennen und darauf reagieren.

    Ob XProfan da schnell genug ist ?

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Mit der API kann ich leider nichts anfangen, da fehlt mir das Verständnis dazu.
    Aber vielleicht erst einmal von vorne. Ich verwende diese RS485 Schnittstelle:
    http://www.pcfilter.de/AVR-Ecke/Page21.html
    Am anderen Ende hängt ein ATmega88A dran (mit MAX485) und da macht mir der Bootloader grade Probleme. Durch das umschalten von senden/empfangen im RS485 Bus kommt mir das Timing im Bootloader durcheinander. Das Problem besteht darin, dass ich 2ms nach dem umschalten von senden/empfangen warten muss bevor ich Daten über den RS485 Bus senden kann. Der FT232R Chip hat einen Automatik-Pin dafür (der mit dem MAX485 verbunden ist), damit funktioniert es hier aber leider nicht (mit einem ATmega32 hat das schon mal problemlos funktioniert). Nun wollte ich die automatische Umschaltung abschalten und auf die RTS-Leitung wechseln, damit ich so ein „Sleep 2“ einfügen kann, bevor ich die Daten sende. Allerdings bin ich dabei auch beim aufgeben, mit dem Problem prügele ich mich Heute schon den ganzen Tag herum. Alternative dazu könnte ich auch noch im Bootloader zusätzliche Wartezeiten einrichten, dass wollte ich aber wenn möglich umgehen...

  • Es kommt hier nicht auf die Gesamtzeit an, sondern zum punkgenauen Zeitpunkt die Daten zu senden/empfangen, wenn der Pegel lo oder hi ist. Das ist der Knackpunkt. Ich programmiere damit mein AVR32 Board von Conrad und dafür nehme ich dann das alte GFA32 das schafft es.

    Gruss

  • Zitat

    Profan selber ist nicht schnell genug um die Leitungen von zu Fuß anzusteuern.

    Das ist auch nicht das Problem. Ich muss legendlich zwischen RTS umschalten und dem Daten versenden eine kleine Pause einfügen, was mir nicht gelingt. Wie gesagt, das umschalten von RTS funktioniert ja problemlos, nur werden mit dieser Konfiguration dann keine Daten mehr empfangen...

    Zitat

    Ich vermute das Problem eher hier: UnterschiedeRS485 zu RS232

    Das Problem liegt auch nicht bei den unterschiedlichen Pegeln, der FT232R Chip gibt alles per TTL aus und auch der MAX485 arbeitet mit TTL Pegel. Es liegt wirklich nur am umschalten von senden/empfangen. Entferne ich den MAX485 und verbinde PC und ATmega88A direkt, dann funktioniert die Übertragung auch reibungslos. Was ich hier aber auch nicht verstehe ist das dass automatische umschalten (vom FT232R Chip) hier nicht richtig funktioniert. Das gleiche Konstrukt mit einem ATmega32 funktioniert reibungslos, beim ATmega88A nicht. Ich habe den Bootloader auch schon zwei mal umgestellt (um Übersetzungefehler aus zu schließen), immer mit dem gleichen Ergebnis...

  • Hab mir grade mal das Terminalprogramm „hTerm“ runter
    geladen und damit die Hardware überprüft (mit hTerm kann ich die RTS Leitung
    per Hand schalten). Die Hardware funktioniert wie erwartet, mit zu- und ab-
    schalten der RTS Leitung ändert sich auch die sendde/empfangs- Richtung. Der
    Fehler liegt demnach irgendwo bei der Konfiguration in XProfan. Da ich jetzt
    schon alle erdenklichen Kombinationen durch habe schmeiße ich erst einmal das
    Handtuch...

  • Kannst du nicht ibis zur Klärung auf Softwarehandshake umstellen? Dann sollten Masseverbindung + 1 (Oneway) bzw. 2 Datenleitungen (für Half Duplex) eigentlich reichen?

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • Zitat

    Kannst du nicht ibis zur Klärung auf Softwarehandshake
    umstellen?

    Das kann ich aus zwei Gründen nicht. Zum einen ist der sende/empfangs- Pin vom RS485 Chip mit der TRS-Leitung verbunden, eine Steuerung per Softwarehandshake schaltet hier also auch den Pin nicht um (und damit werden auch keine Daten gesendet). Und zum zweiten muss ich ein komplettes Byte (Zahlen von 0 bis 255) übertragen können, da die Firmware für den Mµ auch Zahlen von 0 bis 255 beinhalten kann. Im späteren Betrieb kann ich dann auch wieder problemlos auf die Konfiguration „SetComExt(hRS232&,-1,-1,-1,$0801,-1,-1)“ umschwenken, da dann auch nur ASCII gesendet/empfangen wird. Beim Bootloader funktioniert das aber leider nicht...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!