Forum: Mikrocontroller und Digitale Elektronik Problem mit MAX481 Transmitter


von Joachim B. (jojo84)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

ich wollt mich mal erkundigen, ob jemand schon Erfahrungen mit dem 
Pegelwandlerbaustein MAX481 o.ä. hat.
Ich versuche schon seit Tagen einen RS485-Bus mit dem Ding ans Laufen zu 
bringen, aber der MAX will nicht ganz so, wie ich mir das dachte.

Das ist ein half-duplex-Baustein, man muß also zwischen "senden" und 
"empfangen" umschalten. Die Umschaltzeiteh nahb ich mit max. 2 µs dem 
Datenblatt entnommen.
Jetzt ist nur leider die Sache, daß da an den Ausgängen des MAX immer 
erst nach eine viel zu langen Verzögerung die entsprechenden Pegel 
anliegen.
In den Anhang hab ich mal das Datenblatt und einen Screenshot vom Scope 
gepackt.
Kanal 1 ist das Signal an TX vom UART, Kanal 2 ist das "normale Signal 
des MAX481, Kanal 3 das invertierte Signal. Es ist zu sehen, daß die 
korrekten Pegel erst nach ca. 64 µs an den Pins anliegen, obwohl der 
Transmitter bei Cursor 1 aktiviert wird. Das find ich sehr seltsam. Mein 
Code dazu sieht recht einfach aus:
1
#define RXTX_EN      PD2
2
#define RS485_TX    (PORTD |= (1<<RXTX_EN) )
3
#define RS485_RX    (PORTD &= ~(1<<RXTX_EN) )
4
5
void uart_send_c(unsigned char x)
6
{
7
  RS485_TX;
8
  _delay_us(2);
9
10
  UDR = x;
11
12
  while(!(UCSRA & (1 << UDRE)))
13
  {
14
    asm("nop");  // wait for UART to finish sending
15
  }
16
17
  RS485_RX;
18
}

An der delay-Zeit hab ich auch schon ganz viel rumgestellt. Aber selbst 
bei einer Verzögerung von 1 Sekunde kommen diese mysteriösen 64 µs 
Verzug bei den Pegeln... wo  ist der Haken?!?!

Wäre echt toll, wenn sich jemand, der eine Lösung für das Problem haben 
könnte, sich melden würde.

Danke!

VG,
Joachim

von spess53 (Gast)


Lesenswert?

Hi

> while(!(UCSRA & (1 << UDRE)))

Nach dem Senden solltest du auf TXC und nicht auf UDRE warten.

MfG Spess

von Benjamin U. (utzus)


Lesenswert?

Dann mach doch noch mal bitte einen Test mit dem Oszi, wann denn der Pin 
PD2 auch wirklich seinen status ändert! Hast du da eine kondensator dran 
hängen, der vielleicht Spannung puffert oder ähnliches??
Poste mal nen Schaltplan und nimm in das Bild vom Oszi als vierten Kanal 
noch den Senden/Lesen Pin vom MAX481 dazu.

Schöne Grüße

von Michael P. (praderbz)


Lesenswert?

Was spricht dagegen, #RXEN ständig auf L zu lassen? Vielleicht 
entschärft sich das Problem dann.

von Joachim B. (jojo84)


Lesenswert?

Hallo und Danke für die Antworten!

@Spess:
macht Sinn, kann ich natürlich auch. Das war aber erstmal der 
Beispiel-Code, den ich dem Datenblatt entnommen habe. Damit lief es 
bisher auch immer. Aber danke!

@Benjamin
an soetwas wie mit nem Kondensator hab ich auch schon gedacht. Das ist 
aber nicht so. Im Schaltplan ist keiner drin, und die Leitungen sind 
auch nicht so lang, daß da so viel Kapazität sein könnte (knapp zwei 
Zentimeter...).
Scope-Bild mit Signal von PD2 folgt in Kürze...
Ich glaube auch nicht, daß der PD2 verzögert schaltet, weil die Ausgänge 
des MAX ja an der Stelle, wo umgeschaltet wird, ensprechend "zucken" 
(Cursor 1). Seltsam...

@Michael
eine ähnliche Vermutung hatte ich auch schon. Laut Datenblatt ist eine 
"1" am #RXEN des MAX481 ja nur nötig, wenn man in den Sleep-Mode will. 
Ich habe TXEN und #RXEN erst hart miteinander verdrahtet gehabt, was ja 
laut Datenblatt auch OK sein sollte, wenn man den Sleep-Mode nicht 
nutzen will.
Aber um dem Problem auf den Grund zu gehen hab ich dann mal #RXEN hart 
mit GND verbunden und PD2 (s.o.) gibt sein Signal nurnoch auf TXEN.
Aber das hat nichts geändert.

Freu mich über noch mehr Ratschläge!

MfG,
Joachim

von Falk B. (falk)


Lesenswert?

@  Joachim A. (jojo84)


>ich wollt mich mal erkundigen, ob jemand schon Erfahrungen mit dem
>Pegelwandlerbaustein MAX481 o.ä. hat.

Das haben viele Leute.

>Das ist ein half-duplex-Baustein, man muß also zwischen "senden" und
>"empfangen" umschalten. Die Umschaltzeiteh nahb ich mit max. 2 µs dem
>Datenblatt entnommen.

Wo? Ich lese da max. 70ns, t_ZH, Seite 3

>Kanal 1 ist das Signal an TX vom UART, Kanal 2 ist das "normale Signal
>des MAX481, Kanal 3 das invertierte Signal. Es ist zu sehen, daß die
>korrekten Pegel erst nach ca. 64 µs an den Pins anliegen,

Miss doch einfach man dein TXEN Pin. Ich wette, der schleicht auf HIGH. 
Und warum? Weil dein IO-Pin nicht als Ausgang definiert ist. Damit 
schaltet nur der schwache Pull-Up auf High, das dauert.

MfG
Falk

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.