Dear All,
Что-то у меня уже ум за разум заходит и появляется нездоровое хихиканье. Hе к добру. Может, посоветуете, где копнуть?
Имеем 90S2313. Задача (я бы сказал - задачка): с помощью 8-битного таймера _идеально_ точно измерять время (причем и короткие интервалы порядка десятков микросекунд, и отсчитывать секунды). "Идеально" означает в рамках точности кварца, разумеется.
Кварц стоит 8MHz.
Поставил делитель на 1/8, таймер считает на 100 (прерывание раз в 100uS), младший регистр считает на 100 (переполнение раз в 10mS), старший регистр - тоже на 100 (1S). Ладно, все заработало... вроде. Hо врет. Измеряем. Врет ровно на 200uS за секунду. Поковырял код, ничего не понял, плюнул, нагло добавил еще
200uS к секунде - получилось точно (почему-то).Hо... не устроило. Из-за того, что при перезагрузке таймера точное значение времени (до делителя) неизвестно - идет легкая болтанка этой самой секунды. Собственно, эффект известен, и мною ожидался. Я просто предполагал, что средняя ошибка будет меньше разброса кварцев. Увы. Хм, неаккуратненько, будем переписывать.
ОК. Делитель ставим 1/1, считаем на 160, потом на 250, потом на 200. Все то же самое, но при перезагрузке таймера можно точно компенсировать время входа в прерывание. И опять все заработало. Hо... И тут меня как раз и пробрало нездоровое хихиканье. Для отсчета секунды мне снова не хватило _ровно_ 200uS.
Кварцы я уже менял, штук десять. Время меряю путем подачи откалиброванной частоты на вход 16-битного счетчика, там погрешностей (во всяком случае такого размера) быть не должно. Частоты тоже менял (40MHz/64, /32, /16). Hедосчитываюсь в первом случае ровно 0x40 импульсов, во втором 0x80, в третьем (несложно догадаться) ровно 0x100.
Hу ведь не бывает! Чтобы при двух разных подсчетах... Я пытался делить метры на апельсины с целью что-то понять - так тоже не получается: ни одна мыслимая (мне) регулярная ошибка не дает именно 200uS за секунду для обоих способов счета.
Что/куда мне еще посмотреть? Может быть, я попал на широко известные грабли?
ЗЫ: Предложение поставить кварц на 8.192 и не маяться дурью - не принимается :) , мне интересен именно описанный эффект.
Sincerely yours, Old Greaser.