Forum: Mikrocontroller und Digitale Elektronik Empfangsfehler beim RS485


von Harries (Gast)


Lesenswert?

Folgende Schaltung:

Usart0 -> Max487 RS485 Tranciever

Usart1 -> RS232 von Maxim

Controller ein Atmega664P


Das Programm sendet ab und zu Telegramme über den RS485. Außerdem wird 
bei einem RX Interrupt das Empfangene Zeichen sofort auf RS232 übergeben 
und gesendet.


Jetzt habe ich das Problem dass beim Umschalten des Max487 in 
Senderichtung, mein µC sofort ein 0x00 Empfängt und das Control Register 
die Framing Error Flag gesetzt hat.


Der 485 Bus ist mit einer Bias Terminierung nach Lehrbuch ausgestattet, 
Pegel sind im Ruhezustand gezogen. Habe Spaßeshalber versucht, die Bias 
Terminierung umzudrehen, dann klappt gar nix mehr.


Hat jemand ne Idee woher das kommen mag? Bin mit meinem Latein am Ende.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Steuerst Du /RE und DE getrennt voneinander an?

von Harries (Gast)


Lesenswert?

Nein, die Pins sind gebrückt..


Hm.

von Harries (Gast)


Lesenswert?

Gefunden ...


Kein Kontakt vom VCC zum RX Pin Pullup.


Wie dämlich von mir.. ;)

von Gerhard O. (gerhard_)


Lesenswert?

Ist es möglich dass Dein Programm mit dem Abschalten des Treibers (DE) 
nicht lange genug wartet bis das UART mit dem Senden der Daten fertig 
ist?

Versuchsweise könnte man das "UDRE" bit des "UCSRnA"  testen um die "DE" 
Leitung erst dann wieder auf Null zu stellen wenn das "USART Data 
Register Empty Bit" wieder gesetzt wurde.

Versuch mal mit dem OSZI die TX-DATEN Leitung und die DE Leitung zu 
beobachten um zu sehen ob DE erst nach Vollendung der Sendung wieder 
gesetzt wird. Siehe unten:

RS485: EEEEEEEEEESSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSEEEEEEEEEEEEEEE
                 ________________________________
DE(RE-)_________/  _________________________     \_______________
TXD --------------(_________________________)--------------------

UDRE Bit: 111111111000000000000000000000000000111111111111111111111
                                              ^
                                              erst hier auf RX

von Gerhard O. (gerhard_)


Lesenswert?

Harries schrieb:
> Gefunden ...
>
>
> Kein Kontakt vom VCC zum RX Pin Pullup.
>
>
> Wie dämlich von mir.. ;)

Das ist mir auch schon passiert.

von Spess53 (Gast)


Lesenswert?

Hi

>Versuchsweise könnte man das "UDRE" bit des "UCSRnA"  testen um die "DE"
>Leitung erst dann wieder auf Null zu stellen wenn das "USART Data
>Register Empty Bit" wieder gesetzt wurde.

UDRE ist wegen dem TX-Puffer ungeeignet. Zum Umschalten muss auf TXC 
getestet werden.

MfG Spess

von Gerhard O. (gerhard_)


Lesenswert?

Spess53 schrieb:
> Hi
>
>>Versuchsweise könnte man das "UDRE" bit des "UCSRnA"  testen um die "DE"
>>Leitung erst dann wieder auf Null zu stellen wenn das "USART Data
>>Register Empty Bit" wieder gesetzt wurde.
>
> UDRE ist wegen dem TX-Puffer ungeeignet. Zum Umschalten muss auf TXC
> getestet werden.
>
> MfG Spess

Danke für den Hinweis. Steht ja hier auch:

The Transmit Complete (TXCn) Flag bit is set one when the entire frame 
in the Transmit Shift
Register has been shifted out and there are no new data currently 
present in the transmit buffer.
The TXCn Flag bit is automatically cleared when a transmit complete 
interrupt is executed, or it
can be cleared by writing a one to its bit location. The TXCn Flag is 
useful in half-duplex communication
interfaces (like the RS-485 standard), where a transmitting application 
must enter
receive mode and free the communication bus immediately after completing 
the transmission.

von Purzel H. (hacky)


Lesenswert?

Der TXC kommt wenn das Register rausgeschoben ist. Das Stopbit ist dann 
aber noch nicht gesendet...

von Spess53 (Gast)


Lesenswert?

Hi

>Der TXC kommt wenn das Register rausgeschoben ist. Das Stopbit ist dann
>aber noch nicht gesendet...

>The Transmit Complete (TXCn) Flag bit is set one when the entire frame
>in the Transmit Shift Register has been shifted out

Und was verstehst du unter 'entire frame'?

MfG Spess

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.