|
|
  |
Tiny2313 нужна 1 сек. на таймер 0, "Уходит" время :( |
|
|
|
Jul 8 2007, 19:46
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Доброго времени суток. Контроллер - Tiny2313 Частота - 8МГц Компилятор - CVAVR 1.25.2b1 Одна из функций устройства - подсчет текущего времени. Используется таймер 0 (второй уже недоступен). Прерывание по совпадению и автоматическая очистка счетчика при условии сравнения. С предделителем 256 получаю частоту прерыания ровно 125Гц (64000 тактов) И в прерывании делитель ставлю на 125. Вроде всё верно, но за 8,5 часов часики удрали на 4 секунды  Устройство активно работает с внутренней EEPROM. Вот тут и начинаются вопросы ... - если прерывание таймера возникает при их глобальном запрещении, или выполнении "длинных" команд, то прерывание вызовется с задержкой ... сбивается ли при этом счетчик циклов в таймере? - кто что может посоветовать? _____ P.S. Запскал HEX в Студии ... ставлю точку останова на вектор прерывания ... прерывание вызывается каждые 64000 такта ... почти всегда, иногда выскакивает 64001 или 64002 - видать из-за длительных команд ... но потом всё выравнимается. Правда симуляцию я запускал максимум на секунду - на моем компе на это около 30 минут :-) А может это такая точность кварца? Слабо верится. Да! фузы верно настроены - проверял уже.
|
|
|
|
|
Jul 8 2007, 20:09
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(AndryG @ Jul 9 2007, 01:46)  Режим работы таймера "Сброс по совпадению" использует значение, которое записано в регистре захвата или в регистре сравнения. Уточните значение этого регистра. Далее, непонятно значение фразы "...делитель ставлю на 125". Делителя на 125 вообще нет. Есть на 8, 32, 64, .. и т.д. Отвечу на вопрос о сбивании таймера - если таймер не останавливать, то значение счета в нем не сбивается. Запрет/разрешение прерываний здесь не влияет. Кварц какой используете - внутренний или внешний?
|
|
|
|
|
Jul 8 2007, 21:18
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(AndreyKeil @ Jul 8 2007, 23:09)  Кварц какой используете - внутренний или внешний? Кварц разве внутренний бывает? Цитата(AndryG @ Jul 8 2007, 22:46)  Контроллер - Tiny2313 Частота - 8МГц Одна из функций устройства - подсчет текущего времени. Вроде всё верно, но за 8,5 часов часики удрали на 4 секунды  А может это такая точность кварца? Слабо верится. Да! фузы верно настроены - проверял уже. Это такая точность кварца. Часовые кварцы иногда уходят также, а то и больше, а у вас обычный... 8.5 часов = 3600s * 8.5 = 30600 sec погрешность счета 4/30600 = 0.00013 если кварц у вас маркирован как 8.000Mhz - то погрешность в пределах нормы. Цитата - кто что может посоветовать? На мой взгляд проще всего сделать программную коррекцию часов. Тобиш, если 4 секунды теряется за ~8 часов, вы можете каждые два часа подводить часы на 1 секунду в сторону противоположную уходу времени. Цитата Устройство активно работает с внутренней EEPROM. Вот тут и начинаются вопросы ... - если прерывание таймера возникает при их глобальном запрещении, или выполнении "длинных" команд, то прерывание вызовется с задержкой ... сбивается ли при этом счетчик циклов в таймере? задержка обработки прерывания не важна, важно - не пропустить прерывание. Если у вас в системе прерывания запрещаются на время большее чем интервал между прерываниями от T0 (1/125 sec) - то тогда счетчик циклов будет сбиваться (опаздывать), т.к. некоторые прерывания будут пропущены. Если у вас прерывания запрещаются ненадолго (много меньше чем 1/125 сек), то тогда можете быть спокойны - программных сбоев быть не должно.
|
|
|
|
|
Jul 8 2007, 22:12
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(defunct @ Jul 9 2007, 01:18)  Это такая точность кварца. Часовые кварцы иногда уходят также, а то и больше, а у вас обычный... Часовой это который 32768 ? А откуда такая информация что у них точность выраженная в ppm лучше чем у обычных ? Цитата 8.5 часов = 3600s * 8.5 = 30600 sec погрешность счета 4/30600 = 0.00013 130ppm многовато для обычного "кварца", должно быть не больше 30ppm. Может быть конденсаторы на землю неправильные ? Или кварц не расчитан например на 3V а только на 5. Ну или у Вас там не кварц вобще... (иногда в малогабаритных девайсах используют другие материалы с худшей точностью)
|
|
|
|
|
Jul 8 2007, 22:18
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Тоже думаю, что виновата не программа, а точность кварца. Я бы попробовал исправить положение конденсаторами на кварце. Увеличить или уменьшить, один или оба. Была у меня ситуация, тока с часовым кварцем. Убегал на несколько секунд в день. Около него стояли кондёры где-то на 12 или 15 пф. После перепайки обоих на 22 пф разбег уменьшился раз в десять. Цитата(singlskv) А откуда такая информация что у них точность выраженная в ppm лучше чем у обычных ? Причём тут ppm? Речь о начальной точности кварца.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 8 2007, 22:27
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(GetSmart @ Jul 9 2007, 02:18)  Причём тут ppm? Речь о начальной точности кварца. Начальная тоже в ppm указывается (допустимый разброс). И насколько я ничего не знаю, у часовых кварцев при прочих равных этот параметр хуже чем у "обычных"...
|
|
|
|
|
Jul 9 2007, 00:39
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(prottoss @ Jul 9 2007, 04:09)  Мдя... И никто не сказал, что уход то из-за того, что делитель надо ставить не на 125, а на 124 - нулевой импульс тоже надо учитывать, так счетчик досчитывает до 125, включая 125-ый такт, в итоге - 126 реально посчитанных тактов и уход частоты  Ну кода то мы не видели, но ИМХО дело не в 124-125, иначе после такого изменения ошибка будет ~1/125=0,008 - а это ну очень много...
|
|
|
|
|
Jul 9 2007, 00:47
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(prottoss @ Jul 9 2007, 09:09)  Мдя... И никто не сказал, что уход то из-за того, что делитель надо ставить не на 125, а на 124 - нулевой импульс тоже надо учитывать, так счетчик досчитывает до 125, включая 125-ый такт, в итоге - 126 реально посчитанных тактов и уход частоты  Начал отвечать про 124-125, но singlskv опередил Да и автор вопроса сообщил, что прогонял на симуляторе - всё нормально, 64000 тактов.
|
|
|
|
|
Jul 10 2007, 05:28
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Спасибо всем за ответы. Вчера весь день был на объекте - не смог поучаствовать ... "Делитель на 125" ... это я про такой код: Код interrupt [TIM0_OVF] void timer0_ovf_isr(void){ //вызывается 125 Гц if (times < 125) goto tim0_ovf_ret; times = 0x00; realtime.s++; ... Вот сам теперь сижу и думаю, а правильно ли тут 125 стоит ... хотя тоже считал .. ошибка должна быть больше тогда... (хотя может наложилось это и кварц) И по Студии я не проверял работу делителя - точку останова ставил на прерывание, а не на строку после "делителя на 125" - у меня комп секунду эту гонять сутки будет. Кварц маркирован .... 8 000 кГц -- сам не помню откуда он. На счет конденсаторов идею подали -- поколупаю .. вот только бы знать в какую сторону ... может ссылка у кого есть? И опять я уезжаю на весь день -- завтра обязательно подключусь.
|
|
|
|
|
Jul 10 2007, 09:59
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(AndryG @ Jul 10 2007, 08:28)  Вот сам теперь сижу и думаю, а правильно ли тут 125 стоит ... хотя тоже считал .. ошибка должна быть больше тогда... Посмотрите в даташите как работает CTC. В некоторых процах (например AT90S2313) таймер при достижении установленного числа сбрасывает и предделитель (т.о. 1 такт выпадет). Хотя маловероятно, в t2313 это должно было быть пофикшено, да и ошибка была бы меньше - 3*10(-5). Цитата Кварц маркирован .... 8 000 кГц с такой маркировкой частота стабилизации кварца может быть в пределах от 8, 000.000 Mhz до 8, 000.999 Mhz Стабильность частоты как отмечали выше - 30 ppm
|
|
|
|
|
Jul 10 2007, 10:27
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(AndryG @ Jul 10 2007, 13:28)  Спасибо всем за ответы. Вчера весь день был на объекте - не смог поучаствовать ... "Делитель на 125" ... это я про такой код: Код interrupt [TIM0_OVF] void timer0_ovf_isr(void){ //вызывается 125 Гц if (times < 125) goto tim0_ovf_ret; times = 0x00; realtime.s++; ... Че то я совсем запутался  Как из 8.000.000 Гц получить 125 Гц штатным прескалером счетчика ТС0 ??? Если учесть, что в первом посте чел поставил прескалер на 256, то имеем частоту входных импульсов ТС0 - 31.250 Гц. Далее, раз выбрано прерывание по переполнению и Output Compare Unit c OCR0A не задействован, следовательно прерывание вызывается с частотой 31250/256 = 122,0307 Гц  (Здесь бы я поставил смайлик с пистолетом у виска)
--------------------
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|