Deep sleep ,listen to UART,no extra hardware

I have investigated the sleeps options of the ATmega328 , and read a few articles about it , and i would like to understand if there are more options .

So i would like to get as low current as possible, so that anything less that 100uA would be good- as long as i can listen to uart and interrupts for waking up .

I am using a costum pcb (not the UNO) , with ATmega328p .

setting the chip to deep sleep :

     set_sleep_mode (SLEEP_MODE_PWR_DOWN);  
     sleep_cpu ();

would not wake it up with serial communication ,according to this :

you will need to put it in IDLE mode , to listen to serial , but this would consume a few mA -bad .

I have found this link where you can connect in hardware the serial to the interrput- which is dangerous so you can loose data, and moreover , i need these 2 interrupts pins .

I also read this article of Gammon, where you can disable some things , so you can get IDLE sleep with much lower power- but he didnt mention the serial in there :


So , bottom line, is there any option out there, to get less than 0.25mA at least , and also listen to serial port, without any hardware manipulation ? for example waking up with long serial data input ?

thanks a lot .

According to the PRUSART0 bit is for the serial port. But I assume that the serial port is no longer working with that power bit.

The received data to both RX and an interrupt pin would be my first choice. When the serial hardware was turned off, and an interrupt wakes the ATmega328P, then the first byte(s) will be missed. If you can make a workaround, this will be the best option in my opinion.

In all other situations, the serial hardware has to be active. That consumes power.

What kind of baudrate is being received ? What kind of serial data are you receiving ? Is it possible to add an extra wire to wakeup the ATmega328P ? Is it possible to transmit a few wakeup bytes ?

you will need to put it in IDLE mode , to listen to serial , but this would consume a few mA -bad .

Use Pin Change Interrupt on the RX pin.