I have a battery powered board with an ATMega328P and some other peripherals such as SD card, RTC, sensors, etc. The design of the board is to be as low power as possible, whilst keeping with the ATMega328P as an MCU. The board uses the Arduino boot loader etc.
I added a FT232RL USB to UART chip to the design, to give better serial comms than having to have an external serial converter. The FT232RL has a 5V input from the USB with a 3.3V generator on board which I connected to the 3.3VIO supply it needs. So the FT232RL is powered from the USB when connected. The battery power circuit is separate. TX and RX are connected to the ATmega328P RX and TX.
The problem is that when the power to the FT232RL is disconnected, the chip is still drawing some parasitic power through the ATmega328P RX and TX lines. Another ATmega328P pin is used to detect TX from the chip, so the ATmega328P can turn off the serial whenever. Even with the serial turned off and TX set to 0V, and RX to input, the FT232RL still draws some power from RX, more so if pull-ups are enabled. This increases the power consumption.
My solution is (when no serial activity detected)
- Disable serial port
- Set TX to 0V
- Set RX to input and add external pull-down resistor.
However this seems a bit inelegant. Is there a hardware solution that would work? Any other suggestions?