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