Has any-one been successful waking up a sleeping 328P via a NRF24L01 PRX IRQ interrupt?? My scenario is as below.
Establishing a two way communication between two arduino boards. One is a central-panel and the other is a node with a sensor (runs on battery). The requirement is to put the node to sleep and wake up based on an interrupt (INT0 or PCINTx) read the data, send the data to central panel. The central-panel sends a message to the node and the NRF24L01 IRQ pin generates a signal. The node 328P wakes up and sends back the sensor output to the central panel and goes to sleep.
The arduino boards are linked using NRF24L01 boards.
IRQ pin of the NRF24L01 are connected to PD2 (INT0) - and the IRQ pin of the NRF24L01 goes LO every time the NRF24l01 receives message from the central panel.
Communication between the boards work - however when I introduce the sleep logic - the node receives the first message, sends the sensor reading and then goes to sleep - never to wakeup again.
The sleep mode is set to POWER_DOWN mode and is supposed to wakeup with Level interrupt.
When I connect a button to INT0 pin and press the button to generate the interrupt, it works without any problem (the Node wakes up) on every button press.
The issue is the same with PCINT as well - push button interrupt works whereas NRF24L01 IRQ does not work.
I have checked that the IRQ pin of NRF24L01 does go low when there is a receive on the board.
The Logic analyzer traces are attached.
First trace : The IRQ asserted by NRF24L01 upon receipt of a 30 byte payload
Second Trace : The INT0 level interrupt generated - the Interrupt service routine
Third trace : The Processor waking up and sending a 30 byte payload
Note: When INT0 is asserted using a Push button, instead of the NRF24L01's IRQ, the 328P wakes up each time the button is pressed.
Thanks for your observations and help in advance.
Have you asked this in the AVR forums as well?
It seems more related to the Atmel device than the nRF24L01p.