Das liegt möglicherweise ganz einfach daran, dass du den internen Takt benutzt, der ist meistens ziemlich ungenau! Wenn du statt dessen einen Quarz nimmst, wird das Ergebnis genauer!
Alternativ kannst du natürlich den Fehler software-technisch kalibrieren...