Other Parts Discussed in Thread: MSP430FR5994,
I am developing a data logger that is designed to take a measurements from two different sensors (A and B) and store them. Sensor "A" records at 1 Hz and sensor "B" at 64Hz. The values are not tagged, they are simply stored as it is collected in a repeating pattern"ABBB...ABBB... etc.), so in order to decode the data the pattern must repeat without fail. The code uses the RT1PSIFG to generate the 64Hz interrupts for the data collection and storage. The timing for the 64Hz sensor is tight, but it works most of the time (see below).
The logger is designed to run for months at a time and the accuracy of the clock is a concern. So the 32768 Hz watch crystal is calibrated against a reference. The crystals generally run about 32 ppm slowly, so to compensate RTCALS is set to 0 and RTCCAL is set to 4 (+32 ppm of adjustment per the erratasheet). The accuracy is about right. No issue there.
The problem is that every 64 minutes, without fail, there is a glitch in the data where the 64Hz data is bad and it looks like one or more of the 64Hz measurements from sensor B is missing. The RTC Calibration is the #1 suspect because it is the only event that occurs on a 64 minute interval. I have read and re-read the user guide to understand the issue and try to find a solution but I don't quite understand and I need some help. The relevant section of the user guide reads:
Calibration is accomplished by periodically adjusting the RT1PS counter based on the RTCCALS and
RTCCALx settings. In calendar mode, the RT0PS divides the nominial 37268-Hz low-frequency (LF)
crystal clock input by 256. A 64-minute period has 32768 cycles/sec × 60 sec/min × 64 min = 125829120
cycles. Therefore a –2-ppm reduction in frequency (down calibration) approximately equates to adding an
additional 256 cycles every 125829120 cycles (256/125829120 = 2.035 ppm). This is accomplished by
holding the RT1PS counter for one additional clock of the RT0PS output within a 64-minute period.
Similary, a +4-ppm increase in frequency (up calibration) approximately equates to removing 512 cycles
every 125829120 cycle (512/125829120 = 4.069 ppm). This is accomplished by incrementing the RT1PS
counter for two additional clocks of the RT0PS output within a 64-minute period. Each RTCCALx
calibration bit causes either 256 LF crystal clock cycles to be added every 64 minutes or 512 LF crystal
clock cycles to be subtracted every 64 minutes, giving a frequency adjustment of approximately –2 ppm or
+4 ppm, respectively.
If I understand this correctly, RT0PS is feeding the RT1PS at 128Hz, so the 64Hz interrupt is triggering for every 2 counts out of RT0PS. To adjust the clock, every 64 minutes, the RT1PS is either held for a number of RT0PS counts (creating a long "1/64th" of a second or it is pre-loaded with a value greater than 0 to speed up the clock (creating a short "1/64th" or a second). In my case, with a nominal crystal of that is 32 ppm slow, the RT1PS would be need to be preloaded with a value of 4 (or is it 8?) and that would then result in 2 missed interrupts. Or to put it another way, the "64Hz RT1PS interrupt" would only trigger 62 times during the "calibration second"? Is this interpretation correct? If not, what am I missing?
The minimum adjustment is -4/+8 ppm. So even if the 32768 crystal was exactly on target, there would still be a timing glitch every 64 minutes. Right? Is there any work around to assure that there are 64 interrupts in each and every second?
Thank you for the assistance.