Forum: Mikrocontroller und Digitale Elektronik RS485 Empfang fehlerhaft


von bastler (Gast)


Lesenswert?

Hallo,

ich habe einen PIC18f, an den habe ich einen RS232 und einen RS485 
Treiber an den beiden UARTs angeschlossen. RS232 funktioniert auch. Bei 
der RS485 kann ich Zeichen senden, aber es kann nix empfangen werden.

die initialisierung sieht wie folgt aus für den UART2 mit RS485

void UART2_init(word wBaudrate, byte bLaenge)
{
  BAUDCON2bits.ABDEN = 0;  // Auto baud detect disable
  BAUDCON2bits.WUE = 0;  // Wake-up disable
  BAUDCON2bits.BRG16 = 0;  // 8 bit baud rate generator
  BAUDCON2bits.TXCKP = 0;  // Idle state for transmit Tx is high
  BAUDCON2bits.RXDTP = 0;

  SPBRG2 = 17;
  TXSTA2bits.BRGH = 0;  // Low speed baud rate select bit (Fosc/64)
  TXSTA2bits.SENDB = 0;  // Sync break transmission completed
  TXSTA2bits.SYNC = 0;    // Asynchronous mode
  TXSTA2bits.TXEN = 1;    // Transmit Enabled
  if(bLaenge == 9)
  {
    TXSTA2bits.TX9 = 1;  // Selects 9 bit transmission
    RCSTA2bits.RX9 = 1;  // reception
  }
  else
  {
    TXSTA2bits.TX9 = 0;  // Selects 8 bit transmission
    RCSTA2bits.RX9 = 0;  // reception
  }
  RCSTA2bits.ADDEN = 0;    // disables addresss detection
  RCSTA2bits.CREN = 1;    // enables receiver
  RCSTA2bits.SPEN = 1;    // Serial port enabled
  IPR3bits.RC2IP = 0;  // Receive high priority interrupt
  PIE3bits.RC2IE = 1;    // Interrupt enable
  TRISGbits.TRISG1 = 0;    // TX Port as output
  TRISGbits.TRISG2 = 1;    // RX as input
  bReadPtr2 = 0;
  bWritePtr2 = 0;
}


Kann mir jemand helfen?

von Blueberry (Gast)


Lesenswert?

Schaltplan?
Liegt es evtl. an der Richtungsumschaltung?

von Spontan (Gast)


Lesenswert?

Bist Du Dir sicher, daß der Fehler (schon mal ein Oszi angeschlossen) in 
der Initialisierung liegt?

von Stefan W. (dl6dx)


Lesenswert?

RS-485 arbeitet im Halbduplex-Betrieb. Du musst den Treiber-IC vor dem 
ersten gesendeten Zeichen auf "Senden" setzen und dies, nach dem das 
letzte Zeichen auf der Leitung ist, wieder zurücknehmen. Das wird 
üblicherweise über einen separaten Eingang am Treiber-IC gemacht, den du 
über einen Portpin ansteuern musst.

Grüße

Stefan

von bastler (Gast)


Lesenswert?

ja die richtung stelle ich um, benutze den SN75176 Treiber und habe DE 
und RE auf low, dann müsste er zeichen empfangen

von Blueberry (Gast)


Lesenswert?

Immernoch SCHALTPLAN!

von Stefan W. (dl6dx)


Lesenswert?

bastler schrieb:
> ja die richtung stelle ich um, benutze den SN75176 Treiber und habe DE
> und RE auf low, dann müsste er zeichen empfangen

Hast du mal die Ruhepegel (alle Sender hochohmig) auf den beiden 
Leitungsadern gemessen?

Und folgt der Empfängerausgang überhaupt Pegelwechseln auf dem Bus? 
Übrigens: Hast du daran gedacht, dass der Empfängerausgang bei /RE auf 
High tristate ist? RxD benötigt daher einen Pullup.

Daher: Bitte Schaltplan zeigen!

Grüße

Stefan

von bastler (Gast)


Lesenswert?

Schaltplan

von (prx) A. K. (prx)


Lesenswert?

Wer oder was hängt denn am anderen Ende vom RS485?

von Der Rächer der Transistormorde (Gast)


Lesenswert?

bastler schrieb:
> ich habe einen PIC18f,

welchen?

> an den habe ich einen RS232


welchen Uart

> und einen RS485

welchen Uart

> Treiber an den beiden UARTs angeschlossen.> RS232 funktioniert auch.

bei einem oder beiden?

> Bei
> der RS485 kann ich Zeichen senden,

wohin?

> aber es kann nix empfangen werden.


Wie auch?

>
> die initialisierung

welcher Compiler?

> sieht wie folgt  aus für den UART2 mit RS485

Wozu das?

RS485 ist RS232 (kommt nur ne Richtungsumschaltung hinzu). Die bildet 
der PIC (wenn man denn wüsste welcher) aber vermutlich nicht ab.

Empfehlung: RS485 steht bei wikipedia lesen und verstehen. Wenns nicht 
klappt mit Schaltplan, Pic Typ und

von uuuu (Gast)


Lesenswert?

Wo steht "TRISGbits.TRISG0 = 0;" ?

von Stefan W. (dl6dx)


Lesenswert?

bastler schrieb:
> Schaltplan

Der interessante Teil ist nicht gezeichnet. Wie ist der RS-485-Bus 
beschaltet? Sind A und B über Pullup und Pulldown auf definierte 
Ruhepegel gebracht worden?

Sonst floatet der Bus und wird erst mit dem Einschalten eines Senders 
auf Ruhepegel gebracht. Falls ein Empfänger dabei fälschlich "ein 
Startbit sieht", liest er erst einmal ein Zeichen ein, ist also über 9 
Bittakte (bei 8 Bit/Zeichen) belegt. Startet der Sender in dem Zeitraum, 
wird sein Startbit fehlinterpretiert.

Hast du da mal gemessen, ob auf RxD Glitches auftauchen?

Grüße

Stefan

von peter m. (bastler788)


Lesenswert?

er hat busabschlusswiderstände  nach dem Treiber

von Matthias B. (matthias882)


Lesenswert?

Stefan Wagner schrieb:
> Und folgt der Empfängerausgang überhaupt Pegelwechseln auf dem Bus?
> Übrigens: Hast du daran gedacht, dass der Empfängerausgang bei /RE auf
> High tristate ist? RxD benötigt daher einen Pullup.

Stefan ich danke dir wie verrückt für den Tip mit dem Pullup für den 
RX-Eingang. Ich habe gerade fast einen Tag mit Fehlersuche verbracht wo 
denn dieses Startbit bitte herkommt... Ich kanns nur immer wieder 
sagen... DANKE DANKE DANKE!  :-D

LG Matze

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.