Brian Drummond의 제안보다 더 잘 할 수 있습니다. 오실레이터가 시스템에서 가장 큰 오류의 원인이라는 것은 사실 일 수 있지만, 쉽게 할 수 없을 때 추가적인 시스템 오류를 추가 할 이유는 없습니다.
타이머 간격을 33668 틱으로 설정하고, 카운터를 0에서 시작하고, 타이머가 중단 될 때마다 카운터를 6754 씩 늘리십시오.
증분 후 카운터가> = 8105 인 경우 8105를 빼고 다음 초의 타이머 간격을 33669 틱으로 설정합니다.
그렇지 않으면 카운터를 그대로두고 다음 초 동안 타이머 간격을 33668로 설정하십시오.
이것은 당신에게 (완벽한 32.768kHz 크리스탈 가정)의 평균 간격을 줄 것입니다
(33668 + 6754 / 8105) / 32768 ~= 1.0274912510006
1.0274963378906 초 (약 백만 분의 1 오류) 대신 초 (1.0274912510에 비해 1 조분의 1 미만의 오류). 즉, 시계의 장기 정확도는 오실레이터의 정확도에 크게 좌우됩니다. 수학으로 인한 오류는 연간 1 틱 미만의 오류를 유발합니다. 1 초의 길이는 최대 25ppm의 상대 오류를 갖지만 더 길고 평균 간격이 길어지면 오류가 사라집니다.
이것은 타임 키핑에 적용된 Bresenham의 알고리즘 이며, 분수 6754/8105는 다음과 같이 발견되었습니다.
32768 * 1.027491251 = 33668.833312768
33668.833312768의 정확한 연속 비율은 [33668; 1, 4, 1, 1349, 1, 7].
마지막 항을 떨어 뜨리면 근사치 인 33668 + 6754/8105가 나오고 16 비트에 깔끔하게 맞는 모든 부분이 있습니다.