www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit MAX481 Transmitter


Autor: Joachim B. (jojo84)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
#define RXTX_EN      PD2
#define RS485_TX    (PORTD |= (1<<RXTX_EN) )
#define RS485_RX    (PORTD &= ~(1<<RXTX_EN) )

void uart_send_c(unsigned char x)
{
  RS485_TX;
  _delay_us(2);

  UDR = x;

  while(!(UCSRA & (1 << UDRE)))
  {
    asm("nop");  // wait for UART to finish sending
  }

  RS485_RX;
}

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

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

MfG Spess

Autor: Benjamin Utz (utzus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Prader (praderbz)
Datum:

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

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.