Disable 8U2 Pull-up on Pin 0

I have a device that outputs four channels of 9-bit data. I'm feeding these four channels into the four serial inputs of a Mega2560. The problem is the output impedance of the device's serial channels is fairly high. This means that because the 8U2 idles at 5V on Pin 0 (RX), the low voltage level is approximately 3V; thus Pin 0 never sees the low parts of the serial data. Because the data is 9-bit I can't use the SoftwareSerial library to use a different pin without major changes to the library.

The obvious solutions to the problem are:

  • Cut the trace between the 8U2 and Pin 0.
  • Remove the isolation resistor network (RN4), making the 8U2 useless.
  • Move the 8U2 Vcc from the 5V bus to the USB 5V line.
  • Keep the 8U2 in reset with a jumper.

I'd prefer not to make any major changes to the board and I'd like to keep the ability to program the board using USB. So it looks like my two choices are moving the 8U2 power source or keeping the 8U2 in reset with a jumper on its ICSP header.

Finally, I get to my questions:

  • Is there a solution I've missed?
  • Are there any issues with moving the power source?
  • Are there any issues with keeping the 8U2 in reset?

I think keeping the 8U2 in reset is the simplest option, and there shouldn't be any issues involved.

You could also update the 8U2's firmware to automatically "get off" the serial lines when the bootloading process is complete. That takes a bit of coding but is a nicer long-term solution as it requires no manual intervention.

The Ruggeduino: compatible with Arduino UNO, 24V operation, all I/O's fused and protected


Use an external buffer - possibly even something as simple as an emitter follower

Try using a pull-down resistor to counteract the pull-up. This might not work if the impedance is very high.

Holding the 8U2 in reset solved the problem.

I had tried the pull-down but the source impedance was too high.

I did not think of using an emitter-follower. It would have worked but the reset was less work.