Author Topic: Why is my blinky not stable?  (Read 10991 times)

0 Members and 1 Guest are viewing this topic.

Offline miguelvp

  • Super Contributor
  • ***
  • Posts: 5550
  • Country: us
Re: Why is my blinky not stable?
« Reply #25 on: March 30, 2014, 09:02:26 am »
So changing to trust the RTC, here is the output, but I still have to determine how off the RTC is

2nd number is the average drift kept by the QPC, the first one is still the deviation per second of the RTC and is still horrible.

So after computing the real frequency of the CPU I can have a clock with no drift by using the QPC.
But I will have to investigate where the frequency of the CPU really is at between 2,400,050,000 Hz and 2,399,917,997 Hz.

Code: [Select]
Frequency MHz = 2399.917997
second drift = -0.000001, average drift/s = -0.000001
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000001
second drift = -0.000000, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000002, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000002, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000002, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000002, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000007, average drift/s = -0.000001
second drift = 0.000006, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = 0.000040, average drift/s =  0.000000
second drift = -0.000042, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000001, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000000, average drift/s = -0.000000
second drift = -0.000002, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = 0.000000, average drift/s = -0.000000
second drift = -0.000001, average drift/s = -0.000000
 

Offline miguelvp

  • Super Contributor
  • ***
  • Posts: 5550
  • Country: us
Re: Why is my blinky not stable?
« Reply #26 on: March 30, 2014, 07:00:29 pm »
So I ran a program overnight to compute my true CPU frequency based on the RTC clock.
I used the brute force approach, because I didn't want to deal with signal processing of both clocks so I averaged 8 hours worth of it.
Otherwise I will have to sample the RTC with respect the QPC and viceversa and with some math get the number, but it was late so brute force it is.

So the speed of the CPU's performance counter according to the RTC is 2399913708.04589784 Hz.
Note the decimal part is because we are dealing with two signals of different periods, so that is the frequency taking away the time discreet offset of the RTC.

Having that calibration data I can preload the average of 8 hours worth of data and run my program.

With that frequency value I have a 1ns precise clock (based on the average second of the RTC over 8 hours)

The first value is the second variaton of the RTC with respect of the performance counter per second.
The second value is the average mean time according to the performance counter. (pretty much absorbing the waveform from the RTC being sampled at random discreet points.

Code: [Select]
Frequency MHz = 2399.913708
second drift = -0.000006850, average drift/s = -0.000000000
second drift = 0.000006455, average drift/s = -0.000000000
second drift = -0.000000276, average drift/s = -0.000000000
second drift = 0.000000286, average drift/s = -0.000000000
second drift = 0.000000043, average drift/s = -0.000000000
second drift = 0.000000991, average drift/s =  0.000000000
second drift = -0.000000261, average drift/s =  0.000000000
second drift = -0.000006809, average drift/s = -0.000000000
second drift = 0.000006549, average drift/s =  0.000000000
second drift = 0.000000834, average drift/s =  0.000000000
second drift = -0.000001701, average drift/s = -0.000000000
second drift = -0.000000164, average drift/s = -0.000000000
second drift = 0.000001659, average drift/s =  0.000000000
second drift = 0.000000200, average drift/s =  0.000000000
second drift = -0.000000385, average drift/s =  0.000000000
second drift = -0.000000490, average drift/s =  0.000000000
second drift = -0.000000299, average drift/s = -0.000000000
second drift = 0.000000568, average drift/s =  0.000000000
second drift = 0.000000264, average drift/s =  0.000000000
second drift = -0.000000239, average drift/s =  0.000000000
second drift = 0.000001205, average drift/s =  0.000000000
second drift = -0.000000359, average drift/s =  0.000000000
second drift = -0.000000048, average drift/s =  0.000000000
second drift = -0.000000963, average drift/s =  0.000000000
second drift = 0.000002439, average drift/s =  0.000000000
second drift = -0.000000310, average drift/s =  0.000000000
second drift = -0.000000569, average drift/s =  0.000000000
second drift = -0.000000340, average drift/s =  0.000000000
second drift = -0.000006100, average drift/s = -0.000000000
second drift = 0.000006703, average drift/s =  0.000000000
second drift = 0.000000200, average drift/s =  0.000000000
second drift = 0.000000946, average drift/s =  0.000000000
second drift = -0.000001308, average drift/s =  0.000000000
second drift = 0.000000774, average drift/s =  0.000000000
second drift = -0.000000839, average drift/s =  0.000000000
second drift = 0.000000358, average drift/s =  0.000000000
second drift = -0.000005879, average drift/s = -0.000000000
second drift = 0.000006286, average drift/s =  0.000000000
second drift = 0.000002079, average drift/s =  0.000000000
second drift = -0.000000846, average drift/s =  0.000000000
second drift = -0.000000895, average drift/s =  0.000000000
second drift = 0.000023038, average drift/s =  0.000000000
second drift = -0.000022031, average drift/s =  0.000000000
second drift = -0.000000205, average drift/s =  0.000000000
second drift = -0.000000003, average drift/s =  0.000000000
second drift = 0.000000440, average drift/s =  0.000000000
second drift = -0.000001143, average drift/s =  0.000000000
second drift = 0.000001111, average drift/s =  0.000000000
second drift = 0.000000564, average drift/s =  0.000000000
second drift = -0.000001690, average drift/s =  0.000000000
second drift = 0.000000616, average drift/s =  0.000000000
second drift = 0.000000440, average drift/s =  0.000000000
second drift = -0.000000145, average drift/s =  0.000000000
second drift = 0.000000530, average drift/s =  0.000000000
second drift = -0.000000636, average drift/s =  0.000000000
second drift = 0.000001153, average drift/s =  0.000000000
second drift = -0.000001064, average drift/s =  0.000000000
second drift = 0.000000575, average drift/s =  0.000000000
second drift = 0.000000628, average drift/s =  0.000000000
second drift = -0.000000483, average drift/s =  0.000000000
second drift = 0.000000268, average drift/s =  0.000000000
second drift = -0.000000115, average drift/s =  0.000000000
second drift = -0.000000370, average drift/s =  0.000000000
second drift = 0.000000440, average drift/s =  0.000000000
second drift = 0.000024925, average drift/s =  0.000000000
second drift = -0.000024716, average drift/s =  0.000000000
second drift = -0.000000269, average drift/s =  0.000000000
second drift = 0.000001423, average drift/s =  0.000000000
second drift = -0.000000318, average drift/s =  0.000000000
second drift = 0.000002330, average drift/s =  0.000000000
second drift = -0.000002838, average drift/s =  0.000000000
second drift = 0.000001966, average drift/s =  0.000000000
second drift = -0.000001476, average drift/s =  0.000000000
second drift = 0.000000020, average drift/s =  0.000000000
second drift = 0.000000598, average drift/s =  0.000000000
second drift = 0.000000155, average drift/s =  0.000000000
second drift = 0.000000219, average drift/s =  0.000000000
second drift = -0.000001004, average drift/s =  0.000000000
second drift = 0.000000425, average drift/s =  0.000000000
second drift = 0.000000249, average drift/s =  0.000000000
second drift = 0.000000024, average drift/s =  0.000000000
second drift = -0.000000025, average drift/s =  0.000000000
second drift = -0.000000625, average drift/s =  0.000000000
second drift = -0.000000104, average drift/s =  0.000000000
second drift = 0.000002435, average drift/s =  0.000000000
second drift = -0.000001634, average drift/s =  0.000000000
second drift = -0.000001053, average drift/s =  0.000000000
second drift = 0.000000635, average drift/s =  0.000000000
second drift = 0.000000159, average drift/s =  0.000000000
second drift = -0.000000063, average drift/s =  0.000000000
second drift = 0.000000380, average drift/s =  0.000000000
second drift = -0.000000179, average drift/s =  0.000000000
second drift = 0.000000538, average drift/s =  0.000000000
second drift = 0.000000129, average drift/s =  0.000000000
second drift = -0.000000693, average drift/s =  0.000000000
second drift = 0.000000264, average drift/s =  0.000000000
second drift = -0.000000914, average drift/s =  0.000000000
second drift = 0.000001531, average drift/s =  0.000000000
second drift = -0.000001079, average drift/s =  0.000000000
second drift = 0.000000174, average drift/s =  0.000000000
second drift = 0.000000609, average drift/s =  0.000000000
second drift = 0.000000980, average drift/s =  0.000000000
second drift = -0.000000078, average drift/s =  0.000000000
second drift = -0.000000884, average drift/s =  0.000000000
second drift = 0.000000489, average drift/s =  0.000000000
second drift = -0.000000745, average drift/s =  0.000000000

I'm going to start it again and let it run for a long time.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf