Timing and oscilator in Another arduino sensor network system


I've been around this forum many times using other people advice and not giving much.

I thought it'd be nice to share my experience, the issues and solutions I found.

I am working on yet another arduino sensor network with Xbee radios.

The sensors nodes are battery powered, wake up every 15 minutes, send measure receive acknowledgement and sync info from coordinator and then go back to sleep again. I had 2 issues and found the 2 following solutions.
I post this to share my experience and if you have suggestions I'd be happy to hear about them.

1 : accurate timing of the sleeping sensors.

I first used Watch Dog Timer to sleep and wake the sensors. The issue I found here was that the sleep times were not accurate and very dependant on temperature. I tried to use correction factors and ther software based solutions be I had always +-10 seconds of tolerance over a few days of activity depending on external temperature.
I then found this blog with lead me to the solution of using and external RTC chip with a dedicated crystal:

I had a slightly different approach as I didn't use the square signal but the alarms that can be used on the DS1337 chip to wake my arduino from sleep.

the sleep times accuracy is now 0.1 seconds which allows me to sync the sensors every 6 hours only.

The power consumption which was around 10µA is now down bellow 5µA which is not necessary but still good to have.

2. External or internal Ocillator.

I designed the system on breadboard and tested it at room temperature.
Once I was happy with the performance I desgined and ordered the PCB's.

To keep my board layout simple and reduce the number of components I relied on the internal oscillator to clock the 328p and set the serial communications speed with the Xbee to 9600.

During the tests I found that 1 of the 3 boards would not behave properly when temperature got down to 0°C and that all them failed at -20°C
It took me some time to figure out the cause as I first blamed my soldering skills but it quikly became obvious that the problem came from the internal oscillator temperature sensitivity.
I tried to take the serial speed down to 2400 without success.
I then added an external crystal with caps to the 328p and all problems were gone, it allowed me to take the serial speed all the way up to 115200 which allowed me to reduce the sending time from 300ms to 120ms (again not necessary as battery consumption was low enough but still good to take)

I hope this can help someone, and again I welcome any suggestions.

Have a good day,