Hi Jeremy,
Thanks for looking into this. I tried running the code sample you provided on my board, and got output consistent with my first attempts:
iDivider = 0, clk = 48.0 MHz
Sample value = 0xc00229a0 (Data sample 666 = 29.36)
Sample value = 0xc00229c0 (Data sample 668 = 28.68)
Sample value = 0xc00229a0 (Data sample 666 = 29.36)
Sample value = 0xc00229c0 (Data sample 668 = 28.68)
Sample value = 0xc00229c0 (Data sample 668 = 28.68)
Sample value = 0xc00229d0 (Data sample 669 = 28.34)
Sample value = 0xc00229b0 (Data sample 667 = 29.02)
Sample value = 0xc00229c0 (Data sample 668 = 28.68)
Sample value = 0xc00229c0 (Data sample 668 = 28.68)
iDivider = 1, clk = 24.0 MHz
Sample value = 0xc0022830 (Data sample 643 = 37.22)
Sample value = 0xc00227a0 (Data sample 634 = 40.29)
Sample value = 0xc0022780 (Data sample 632 = 40.97)
Sample value = 0xc00227a0 (Data sample 634 = 40.29)
Sample value = 0xc00227a0 (Data sample 634 = 40.29)
Sample value = 0xc00227b0 (Data sample 635 = 39.95)
Sample value = 0xc00227a0 (Data sample 634 = 40.29)
Sample value = 0xc00227b0 (Data sample 635 = 39.95)
Sample value = 0xc0022790 (Data sample 633 = 40.63)
iDivider = 2, clk = 16.0 MHz
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc0022840 (Data sample 644 = 36.88)
Sample value = 0xc0022830 (Data sample 643 = 37.22)
Sample value = 0xc0022840 (Data sample 644 = 36.88)
Sample value = 0xc0022840 (Data sample 644 = 36.88)
Sample value = 0xc0022840 (Data sample 644 = 36.88)
Sample value = 0xc0022850 (Data sample 645 = 36.53)
Sample value = 0xc0022840 (Data sample 644 = 36.88)
Sample value = 0xc0022850 (Data sample 645 = 36.53)
iDivider = 3, clk = 12.0 MHz
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228a0 (Data sample 650 = 34.83)
Sample value = 0xc00228b0 (Data sample 651 = 34.49)
Sample value = 0xc0022890 (Data sample 649 = 35.17)
Sample value = 0xc00228b0 (Data sample 651 = 34.49)
Sample value = 0xc00228a0 (Data sample 650 = 34.83)
Sample value = 0xc00228a0 (Data sample 650 = 34.83)
Sample value = 0xc00228a0 (Data sample 650 = 34.83)
Sample value = 0xc0022890 (Data sample 649 = 35.17)
iDivider = 4, clk = 9.6 MHz
Sample value = 0xc00228a0 (Data sample 650 = 34.83)
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228c0 (Data sample 652 = 34.14)
Sample value = 0xc00228c0 (Data sample 652 = 34.14)
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228b0 (Data sample 651 = 34.49)
Sample value = 0xc00228c0 (Data sample 652 = 34.14)
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
iDivider = 5, clk = 8.0 MHz
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228d0 (Data sample 653 = 33.80)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
Sample value = 0xc00228e0 (Data sample 654 = 33.46)
So where you got a variation of (40.3 - 33.5) = 6.8 degrees when switching from 48 to 24 MHz (which may or may not be within spec?), I'm getting closer to (40.3 - 29.0) = 11.3 degrees on my sample, which is definitely out of spec.
I've tried on 5 samples - here is a summary (48, 24, 16, 12, 9.6, and 8 MHz):
Sample 1: 28.68, 40.63, 36.53, 35.17, 33.80, 33.46 -> Maximium deviation = 40.63 - 28.68 = 11.95
Sample 2: 34.49, 40.29, 37.56, 36.19, 36.53, 35.85 -> Maximium deviation = 40.29 - 34.49 = 5.80
Sample 3: 34.49, 39.61, 36.88, 35.85, 35.51, 35.17 -> Maximium deviation = 39.61 - 34.49 = 5.12
Sample 4: 35.85, 45.75, 42.00, 39.95, 39.27, 39.27 -> Maximium deviation = 45.75 - 35.85 = 9.9
Sample 5: 32.78, 40.63, 36.53, 34.49, 34.49, 35.17 -> Maximium deviation = 40.63 - 32.78 = 7.85
I guess it's possible that the first sample was damaged in some way...
I still don't expect to see this level of variation between sampling rates. The accuracy spec of +- 5 degrees has to function across process variations, so it seems strange for there to be variations up to the very limits of the spec when you change sampling rate. It doesn't leave any margin for process variation.
For instance, with sample 4, the only way it can stay within spec is if the actual temperature was 40.85 degrees, allowing one reading to give 40.85 - 5, and the other to give 40.85 + 5. I can't measure the actual die temperature for comparison, but 40 degrees (15 above ambient) seems suspiciously high.
At any rate, we have decided to calibrate our devices at production, and use a low sampling rate, as these seem to be the most consistent. If you've nothing further to add, I'm happy to leave the investigation at that.
Thanks,
James