Forum: Mikrocontroller und Digitale Elektronik STM32 -> LTC2870 -> DA-70157


von Michael B. (michael_b93)


Angehängte Dateien:

Lesenswert?

Hallo. Ich habe Probleme mit RS485 und meinem STM32F103RC.

Am STM hängt ein LTC2870 (siehe Anhang) den ich über die Usart3 und die 
nötigen Pins beschalte.

Rs232 Betrieb und Rs422 Betrieb (manchmal auch als Rs485-Full-Duplex 
bezeichnet) habe ich getestet (Rs232 direkt an PC, Rs422 an 
Usb-Konverter) und diese funktionieren auch super. Zu guter Letzt möchte 
ich nun auch den Rs485-Modus in betrieb nehmen.

Am Computer hängt ein DA-70157 Usb-Rs485 Konverter von Digitus.

Was ist nun genau mein Problem:
Ich kann Daten vom STM über den LTC und den DA an den Computer senden, 
bekomme allerdings keine Reaktion (Interrupt) auf Nachrichten vom 
Computer über den DA an den LTC an dem STM.

Beschaltung der Pins am LTC im Rs485 betrieb:
FEN->GND, 485/n232->High, nRXEN->GND, DXEN->High, TE485->High, 
H/nF->High, LB->GND.

Im Vergleich die Schaltung im funktionierenden Rs422 Betrieb:
FEN->GND, 485/n232->High, nRXEN->GND, DXEN->High, TE485->High, 
H/nF->Low, LB->GND - also genauso bis auf H/nF->Low.

Meine Fragen:
- Kann mir jemand sagen ob die Beschaltung des LTC2870 für den Rs485 
Betrieb korrekt ist (Laut Datenblatt alles wie bei Rs422 bis auf H/nF, 
so verstehe ich es zumindest)?
- Hat jemand die Funktionalität des DA-70157 testen können und kann mir 
versichern, dass es nicht am Konverter liegt? Oder verlangt der DA-70157 
beim Senden das setzen von DTR oder RTS Signalen?

Ich hoffe ihr könnt mir weiterhelfen. Ich möchte noch einmal betonen, 
dass das senden+empfangen über den LTC2870 im Rs422 und Rs232 korrekt 
funktionieren, also stellt sich für mich die Frage ob er am Board 
korrekt angeschlossen nicht.

von Michael B. (michael_b93)


Lesenswert?

Ich darf an dieser Stelle für die Hilfe danken und entwarnen: alles 
funktioniert, man muss nur darauf achten: im CR1 des Usart nur beim 
Senden das TX-Mode-EN bit gesetzt zu haben, sonst immer deaktiviert und 
umgekehrt für das RX-Mode-EN bit.

Einziges Problem was ich jetzt noch habe, is das im Empfangsterminal 
(PC-Seite) jede Übertragung vom STM mit einem <0>=0x0 Terminiert, weil 
der Sendemodus deaktiviert wird. Falls ich dafür noch eine Lösung finden 
sollte poste ich die hier auch noch, falls jemand von euch dafür eine 
Idee hat, würde ich mich freuen.

Dazu kurz Erklärung:
Vor beginn des Sendens des ersten Bytes deaktiviere ich Rx-Mode-Bit 
(USART1->CR1 -= 0x04 und aktiviere das Tx-Mode-Bit (USART1->CR1 += 
0x08), außerdem setze ich nRXEN->High.
Nach dem Senden des letzten Bytes eines Strings aktiviere ich 
Rx-Mode-Bit und deaktiviere ich Tx-Mode-Bit und setze nRXEN->Low.

von Michael B. (michael_b93)


Lesenswert?

Habe bisher keine Lösung für das Phantom-Byte: 0x0 gefunden.

Sicher gestellt ist, dass nRXEN->Low erst im Transmission Complete 
Interrupt gesetzt wird, damit halte ich mich meiner Meinung nach an die 
Anforderungen von Rs485. Aktivierte Terminierung im LTC2870 (TE-Pin 
High/Low) spielt keine Rolle, die 0x0 taucht immer beim setzten von 
nRXEN auf Low auf.

Ich nehme das an dieser Stelle einfach so hin. Falls jemand noch eine 
Idee hat, was ich probieren kann, wäre ich sehr dankbar. Es gibt hier im 
Forum ja schon einige die eine Rs485-Kommunikation realisiert haben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.