RS485 - kein Empfang

OP #2851057
Hallo,

ich habe einen PIC18F mit einer RS232 die funktioniert und an den UART 2 
einen RS485 Treiber, dieser kann Daten senden. Wenn er aber auf 
empfangen geht, kann ich an dem RX eingang des PICs Daten mit dem Oszi 
messen, aber in dem RCREG2 steht immer 0x00.

Woran kann das liegen?

Danke
Gast
Empfang deaktiviert? PICs kenne ich nicht, aber 8051er und ich meine 
auch die UARTs der Cortex-Controller haben jeweils ein Flag, mit dem der 
Empfang freigeschaltet wird.
Poste halt mal deinen Code...

Ralf
OP
also das ist mal die Initialisierung

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;// Receive data is not inverted

  SPBRG2 = 17; //Test
  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
  Nop();
  IPR3bits.RC2IP = 0;  // Receive high priority interrupt
  PIE3bits.RC2IE = 1;  // Interrupt enable
  PIR3bits.RC2IF = 1;
  TRISGbits.TRISG1 = 0;  // TX Port as output
  TRISGbits.TRISG2 = 1;// RX as input
  LATGbits.LATG0 = 0;

  bReadPtr2 = 0;
  bWritePtr2 = 0;
Gast
Irgendwo muss auch noch die Richtung des Treibers umgeschaltet werden. 
Und ein paar interrupt handler sollten auch noch irgendwo sein.
Wann wird die Richtung umgeschalten ?
Gast
Und welcher PIC soll das jetzt sein? Poste halt mal das Datenblatt bzw. 
besser einen Link zum DB. Es ist wichtig alle hilfreichen/relevanten 
Infos zur Verfügung zu stellen... sonst macht das Helfen nicht so viel 
Spaß :)

Ralf
Gast
2 möglichkeiten fallen mir ein.

1. Pin RG2 ist mit AN18 geteilt.  Ist der pin auf Digital geschaltet 
(analog 18 disabled)? Sonst wird immer 0 gelesen.  Steht im DB.

2. du hast die RX2 Interrupt auf Enable gesetzt und dann das Flag 
gesetzt. Nicht gut, jetzt springt er sofort in die ISR, wenn der nicht 
vorhanden ist, dann kann alles mögliche passieren.

HTH
PICfan

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.