On-line: гостей 0. Всего: 0 [подробнее..]
1
Правила: заголовок темы должен кратко и понятно отражать ее суть, нельзя писать латиницей или заглавными буквами. Сообщение, ник, аватар не должны выделяться своими размерами или стилем написания от остальных, быть читабельными, написаны литературно и достаточно грамотно.

Если Вас интересуют
-темы точного времени применительно к микроконтроллерам
-возможность быстро собрать качественные часы
-понимание алгоритмов внутренней синхронизации устройств на МК
Здесь Вы найдёте полезную информацию и возможность обменяться опытом



АвторСообщение
администратор


Сообщение: 26
Зарегистрирован: 29.06.07
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.07 08:09. Заголовок: Цифровая коррекция секундного интервала




Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


администратор


Сообщение: 27
Зарегистрирован: 29.06.07
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.07 08:11. Заголовок: Re:


Один из основных моментов, который влияет на точность хода следующий:

При использовании недорогого кварцевого резонатора производитель гарантирует его работу на заданной частоте в пределах небольших отклонений. Например кварц на 4 МГц на самом деле генерирует частоту 4000150 Гц. В PIC контроллере длительность одного такта(время выполнения одной команды) - это 1/4 частоты резонатора. То есть за секунду контроллер отсчитает 4000150/4 = 1000037,5 тактов. Допустим, что алгоритм программы отсчитывает миллион тактов, то есть расчитан на то, что частота генерации резонатора точно соответствует паспортной.
В результате получается, что секнда, получаемая при отсчёте миллиона тактов короче на 37,5 микросекунд.
Итог - часы собраны программа написана, а идут неточно.
Насколько они спешат в рассматриваемом примере?

- За одну минуту 60*37,5 = 2250 микросекунд
- За один час 3600*37,5 = 0,135 секунды
- За одни сутки 24*0,135 = 3,24 секунды
- За неделю 7*3,24 = 22,68 секунды
- За месяц 30*3,24 = 97,2 секунды, или 1 минута и 37,2 секунды
- За год 365*3,24 = 1182,6 секунды, или 19 минут и 42,6 секунды

То есть за год эти часы "уходят" на 20 минут. Для некоторых практических задач(особенно при отсчёте коротких временных интервалов) достаточно и такой точности. Но таких применений явно меньше, чем тех, где нужна лучшая точность...

Спасибо: 0 
ПрофильЦитата Ответить
администратор


Сообщение: 28
Зарегистрирован: 29.06.07
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.07 08:12. Заголовок: Re:


... В программе для timer_a ( таймер для аквариума ) применён алгоритм, котроый отсчитывает за одну секунду 1'001'032 - kor(значение корректирующей константы по умолчанию = 1032).
http://www.radiokot.ru/circuit/digital/home/11/source.rar - исходник с этим алгоритмом

За одну секунду программа уходит в прерывание 256 раз. Каждое прерывание в таймер TMR1 загружается константа, значение которой 0F0C6 hex , что вызывает переполнение таймера через 1/256 секунды
(3900 тактов) . Механизм коррекции срабатывает каждое 0-е прерывание, увеличивая константу, загружаемую в таймер на величину kor(1032). Таким образом интервал одного прерывания из 256-ти короче остальных на величину корректирующего значения.
Вопрос решён самым простым путём, но как со временем выяснилось, такое решение не лишено недостатков. Индикатор единиц минут в результате работы корректирующего алгоритма подмигивает с частотой 1 Гц, так как длительность включения каждого разряда индикатора привязана к длительности прерывания...

Спасибо: 0 
ПрофильЦитата Ответить
администратор


Сообщение: 29
Зарегистрирован: 29.06.07
Репутация: 0
ссылка на сообщение  Отправлено: 23.08.07 08:13. Заголовок: Re:


...
Ещё один существенный момент:
- это задержка начала счёта после включения или загрузки таймера

Эта задержка описана в даташите на PIC16F628 для таймера TMR0, (но оказалось присутствует так-же в TMR1) и составляет по описанию в документации 2 машинных цикла.
В процессе отладки timer_a в MP_LAB это не отслеживается, и основное секундное тактирование показало ровно миллион тактов.
При запуске готовой конструкции часы показали отставание на 318 микросекунд в секунду, что гораздо больше допустимых отклонений. Решился этот вопрос подстройкой корректирующей константы до значения 1350 микросекунд в секунду. То есть константа увеличена на (1350-1032) 318 микросекунд в секунду. Большую часть этой коррекции составила задержка начала счёта таймера TMR1.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет