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?
Bist Du Dir sicher, daß der Fehler (schon mal ein Oszi angeschlossen) in der Initialisierung liegt?
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
ja die richtung stelle ich um, benutze den SN75176 Treiber und habe DE und RE auf low, dann müsste er zeichen empfangen
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
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. Hä > 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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.