From e41e659e66d141a202c78824dc55a0477ebe3f9f Mon Sep 17 00:00:00 2001 From: Markus Amsler Date: Mon, 14 Feb 2011 11:30:05 +1100 Subject: [PATCH] intercom: Disable rx while doing tx. Avoids local RS485 half-duplex echo. Signed-off-by: Michael Moon --- extruder/extruder.c | 1 + extruder/intercom.h | 10 ++++++++-- intercom.h | 10 ++++++++-- mendel.c | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/extruder/extruder.c b/extruder/extruder.c index e67c539..be1c11a 100644 --- a/extruder/extruder.c +++ b/extruder/extruder.c @@ -28,6 +28,7 @@ void io_init(void) { //Enable the RS485 transceiver SET_OUTPUT(RX_ENABLE_PIN); SET_OUTPUT(TX_ENABLE_PIN); + WRITE(RX_ENABLE_PIN,0); disable_transmit(); #ifdef HEATER_PIN diff --git a/extruder/intercom.h b/extruder/intercom.h index f8bc666..1120a05 100644 --- a/extruder/intercom.h +++ b/extruder/intercom.h @@ -2,9 +2,15 @@ #define _INTERCOM_H #include +#include "config.h" -#define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); WRITE(RX_ENABLE_PIN,0); } while(0) -#define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); WRITE(RX_ENABLE_PIN,0); } while(0) +#ifdef HOST + #define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); UCSR1B &= ~MASK(RXEN1); } while(0) + #define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); UCSR1B |= MASK(RXEN1); } while(0) +#else + #define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); UCSR0B &= ~MASK(RXEN0); } while(0) + #define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); UCSR0B |= MASK(RXEN0); } while(0) +#endif // initialise serial subsystem void intercom_init(void); diff --git a/intercom.h b/intercom.h index f8bc666..1120a05 100644 --- a/intercom.h +++ b/intercom.h @@ -2,9 +2,15 @@ #define _INTERCOM_H #include +#include "config.h" -#define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); WRITE(RX_ENABLE_PIN,0); } while(0) -#define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); WRITE(RX_ENABLE_PIN,0); } while(0) +#ifdef HOST + #define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); UCSR1B &= ~MASK(RXEN1); } while(0) + #define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); UCSR1B |= MASK(RXEN1); } while(0) +#else + #define enable_transmit() do { WRITE(TX_ENABLE_PIN,1); UCSR0B &= ~MASK(RXEN0); } while(0) + #define disable_transmit() do { WRITE(TX_ENABLE_PIN,0); UCSR0B |= MASK(RXEN0); } while(0) +#endif // initialise serial subsystem void intercom_init(void); diff --git a/mendel.c b/mendel.c index 2068273..c708481 100644 --- a/mendel.c +++ b/mendel.c @@ -126,6 +126,7 @@ void io_init(void) { // Enable the RS485 transceiver SET_OUTPUT(RX_ENABLE_PIN); SET_OUTPUT(TX_ENABLE_PIN); + WRITE(RX_ENABLE_PIN,0); disable_transmit(); #endif }