Estoy investigando la precisión de un cristal montado en una MCU. La API proporcionada por el fabricante de MCU tiene una función TimeGet48
que devuelve un número de 48 bits que indica los microsegundos transcurridos.
Lo que hice fue configurar la MCU para que emita su reloj interno cada 10 segundos a través de UART.
'19:15:18.830 Time: 0000, 947edfeb',
'19:15:28.829 Time: 0000, 95177715',
'19:15:38.829 Time: 0000, 95b00e3f',
'19:15:48.828 Time: 0000, 9648a569',
Arriba hay una parte del registro. Cada línea de registro consta de la hora del reloj de la PC, 16 bits altos del temporizador de 48 bits y luego 32 bits bajos del temporizador de 48 bits. Trazé t_crystal - t_pc
contra t_pc
a continuación:
Estegráficomuestraladesviacióndetiempoduranteunperíododeaproximadamente14horas.Esperabaunaumentoodisminuciónmonótono,peroestacifrarealmentemehacepreguntarmecómoesposible.
Estoypensandoenlossiguientesfactores:
- ElrelojdelaPC(yousoWindows7)puedenoserpreciso.ProbablementelaPCsesincronizaráconunservidordetiempoglobalunavezcadapocashoras.Sinembargo,cuandoinvestigoestoenelProgramadordetareas.Misincronizacióndetiemposeestablecióen1AMcadadomingodecadasemana.Esteregistrosecapturóelmartes,porloquelahoradelaPCnocambiaríadebidoalasincronización.
- ElrelojdePCyeltiempodecristalestabanambossujetosatruncamientooredondeo,obviamente.
- Cambiosdetemperaturadebidoalaireacondicionado.Registréestosdatosdurantelanoche(de6a8delamañanadeldíasiguiente).Elaireacondicionadoenmioficinaseapagadespuésdelas6pmyseenciendealas8am.
Estosfactoresdefinitivamenteimpactaríanlasdesviacionesdelcristal.Sinembargo,ningunodeestoshacequelafluctuaciónenformadezigzagseasensible.
[Actualización]
IntentélasugerenciadeBrianDrummondyladejécorrerpor4horasydehechofuncionó.Aquíhayunanuevafigura.