View previous topic :: View next topic |
Author |
Message |
gce
Joined: 23 Oct 2023 Posts: 3
|
RS485 and flushing RX_Buffer |
Posted: Mon Oct 23, 2023 6:32 am |
|
|
hi
i've run into a problem i'm hopeing someone out there can help me with, typically i use RS422 for everthing, which works great with built in #users232 rx and tx buffers, however on a current solution i am having to use rs485, which would have been fine if we had built the hardware with a linedriver we could disable the RX on!, however we didn't! so everything that sends gets echo'ed back on the RX line, so question is there an easy way to either disable the RXbuffer during writes, purge the RX buffer?, or even suggest a bit of code that would do all the above relaibly? as can't find an obvious command (outside have a loop that reads the buffer and dumps it) and a search of the forum has proved a bit fruitless
any help would be greatly appreciated
cheers graham |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9243 Location: Greensville,Ontario
|
|
Posted: Mon Oct 23, 2023 6:44 am |
|
|
Which RS-485 interface device do you use as I'm pretty sure when you tie rcv enable to tx enable on a MAX485,it'll block the 'loopback' data.
The enable pins are next to each other,so solder blob can join them......
this from fuzzy memory of the dinosaur...dang what happenned to 'fuzz logic'? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19540
|
|
Posted: Mon Oct 23, 2023 7:06 am |
|
|
As Jay says changing the hardware so the RX is disabled when your transmit
would be the standard and nicest way to go.
Unfortunately the standard PIC UART does not have a RXEN bit. You only
have the UART enable, and a separate TXEN. So you can turn off the
transmit separately, but not the receive.
Fist choice would be to not use the supplied RX buffering. Instead use the
ex_sisr.c buffering. You can then simply add a flag to this called something
like 'rx_enable', and when this is set to false, just have the ISR read the
character and throw it away.
The second way is just to use the supplied buffering and read the characters
to empty the buffer. The obvious way.
There is possibly a third 'sneaky' way of doing this, depending on what
chip you are using?.
If you are using a chip with PPS to map the signal to the UART, then
provided the fuse is set to allow repeated remapping, you can simply
set the UART RX signal to 'NONE' at the moment you enable the transmit
and then back to the required pin when you turn this off. Result the
input is ignored. |
|
|
gce
Joined: 23 Oct 2023 Posts: 3
|
|
Posted: Mon Oct 23, 2023 7:20 am |
|
|
hi temtronic
sorry meant to put that in the mail it's a MAX33072EASA+ (seemed a good choice in the rush as built in as invertable pins, esd etc... should have read the data sheet more closely!) i thought the same, it would disable the recieve when writing but sadly not in this case... on the next spin i'll change the chips out probably to MAX3440E which properly enables and disables the drivers (like i'd expected) was just looking for a solution in software to test out the prototypes so i didn't have to practic my wirewrapping skills on SMT, but might have to just get the chips swapped out instead if theres not an easy method
cheers
graham |
|
|
gce
Joined: 23 Oct 2023 Posts: 3
|
|
Posted: Mon Oct 23, 2023 7:24 am |
|
|
thanks for the reply Ttelmah, sadly it's a 18f26k22 so no option 3, but will take a look at the sisr buffering method
cheers
graham |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19540
|
|
Posted: Mon Oct 23, 2023 11:15 am |
|
|
One critical thing. If you switch to a driver with the receive disable,
remember you need a pull-up resistor on the receive line between
the driver and the PIC, to ensure it floats high.... |
|
|
|