RS485 UART MOXA

OP #4204699
Lesenswert?
• ▲
▼
Hallo zusammen,
ich bin bei einem Problem beim rs485 Interface.
Ich benutzte ein Xplaind Board von ATmel und einen Moxa1250i für seriell 
zu USB. Ausserdem habe ich eine Console (über den Atmel EDBG).
Das Empfangen der RS485 Schnittstelle und Ausgabe an der Konsole 
funktioniert ohne Probleme. Will ich allerdings an RS485 senden, kommt 
nie etwas an. Leider steht wenig im Datenblatt...

void init_rs485(void)
{
  PMC->PMC_PCER0 = 1 << RS485_PORT_ID;
  RS485_PORT->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX| UART_CR_RXDIS | 
UART_CR_TXDIS;
  uint32_t clock_div = (MAINCK/RS485_BAUDRATE)/16;
  RS485_PORT->UART_BRGR = clock_div;
  RS485_PORT->UART_MR = 0;
  RS485_PORT->UART_MR |= UART_MR_PAR_NO;
  RS485_PORT->UART_MR |= UART_MR_CHMODE_NORMAL;
  RS485_PORT->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS;
  /* Enable receiver and transmitter */
  RS485_PORT->UART_CR = UART_CR_RXEN | UART_CR_TXEN;
}

void init_pdc_rs485(void)
{
  RS485_PDC->PERIPH_RPR = &uart_receive_buffer1;
  RS485_PDC->PERIPH_RCR =  RS485_BUFFERSIZE;
  RS485_PDC->PERIPH_TPR = &uart_receive_buffer1;
  RS485_PDC->PERIPH_TCR = RS485_BUFFERSIZE;
  RS485_PDC->PERIPH_PTCR = (PERIPH_PTCR_RXTEN | PERIPH_PTCR_TXTEN);
  RS485_PORT->UART_IER = UART_IER_RXRDY;
  NVIC_EnableIRQ(UART0_IRQn);
}

void UART0_Handler(void)
{
  ioport_toggle_pin_level(LED);
  if ((RS485_PORT->UART_SR & UART_SR_RXBUFF) == UART_SR_RXBUFF)
  {
    RS485_PDC->PERIPH_RPR = &uart_receive_buffer1;
    RS485_PDC->PERIPH_RCR = RS485_BUFFERSIZE;
    RS485_PDC->PERIPH_TPR = &uart_receive_buffer1;
    RS485_PDC->PERIPH_TCR = RS485_BUFFERSIZE;
    PDC_UART1->PERIPH_TPR = &uart_receive_buffer1;
    PDC_UART1->PERIPH_TCR = RS485_BUFFERSIZE;
  }
}

Vielen Dank im Voraus. UART1 ist die Konsole
Gast #4205627
Lesenswert?
• ▲
▼
Vielleicht vergessen, den RS-485-Treiber einzuschalten? RS-485 ist 
halbduplex; da muß man sich überlegen (und der Hardware bescheidsagen), 
wann man senden und wann empfangen will; beides gleichzeitig geht nicht.

Wenn das Board von Atmel schon einen RS-485-Treiberchip drauf hat, wird 
der UART im Prozessor das wohl automatisch können und sie werden den 
richtigen Pin angeschlossen haben. Einfach mal in der Doku zum mode 
register des UART nachsehen, ob es da RS-485-Unterstützung gibt und wie 
man die einschaltet.

Sonst: nachsehen, welcher GPIO-Pin mit Transmit-Enable am Treiber 
verbunden ist, und den "von Hand" richtig ansteuern. Vor Beginn des 
Startbits Treiber einschalten und nach Ende des letzten Stopbits 
(hoffentlich gibt es einen transmit-complete-Interrupt) wieder aus.
OP #4205711
Lesenswert?
• ▲
▼
Danke erstmal für die Antwort.
Es gibt einen RE ( Receiver Enable) Pin auf dem MCU. Der geht (ist 
invertiert) beim Senden auf high.
Ich habe die Signale getestet. Es kommt auch aus dem MCU das richtige 
raus, aber der Moxa scheint das falsch zu  verarbeiten.
Hat irgendwer Erfahrungen mit dem Moxa Uport 1250i?
Besten Dank.

Antwort schreiben

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.

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.