roboforum.ru

Технический форум по робототехнике.

Циклический таймер с большими длительностями на AVR

Циклический таймер с большими длительностями на AVR

Vovan » 12 мар 2013, 01:28

Вот что-то не нашел нигде принцип построения программы для больших промежутков времени (от 24ч. и до и т.д. например на неделю). Объясните, желательно "на пальцах" (словами). Видел на сях - ничего не понял. Примеров на асм не нашёл ваще... Мне б чисто принцип, или ссыль (или книгу) в которой сие рассказывается. (МК любой, AVR).

Re: Циклический таймер с большими длительностями на AVR

Michael_K » 12 мар 2013, 01:59

Ну, Вовааан! Вложенными циклами - очевидно же.

Повторить сто раз задержку на одну секунду - это сто секунд.
Повторить сто раз задержку на сто секунд - это десять тысяч секунд.

Или вы чего-то не договариваете? :)

Re: Циклический таймер с большими длительностями на AVR

AndreiSk » 12 мар 2013, 02:04

Вы чего.. какие циклы???
Делаешь прерывание по таймеру, внутри счетчик.
Все равно есть main цикл для разноообразных задач,
там этот счетчик (который инкрементруется в прерывании) и проверяешь.
Остается настроить параметры прерывания.
Для пика это было бы примерно так:

#int_TIMER1 // Timer interrupt
void TIMER1_isr(void) {
// Счетчик тут
}

void main() {
// Переполнение будет v- 2/4/8
// FORMAT(1 / (48000000 / 4) * 4 * 65536, "0.0000")
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
enable_interrupts(INT_TIMER1);
}

Ну на авр наверное тоже самое есть :)
Таймер зависит от частоты кварца и делителей (по сути это хардверные циклы).
По сути это не точный таймер, было бы неплохо синхронизировать с внешней RTC...
типа такой https://www.sparkfun.com/products/99
Последний раз редактировалось AndreiSk 12 мар 2013, 02:09, всего редактировалось 1 раз.

Re: Циклический таймер с большими длительностями на AVR

Michael_K » 12 мар 2013, 02:07

AndreiSk писал(а):Все равно есть main цикл для разноообразных задач

Ну, это какие-то домыслы, инсинуации и интриги... :)

Я не говорил, что задержки обязательно нужно делать только в мэйне.

Re: Циклический таймер с большими длительностями на AVR

Duhas » 12 мар 2013, 08:22

если с хмега готов справиться, то там RTC с With a resolution of 1s, the
maximum timeout period is more than 18 hours (65536 seconds). ну а там уже посчитать пару раз такой период )

да и потребляет этот таймер ни о чем в ней.

Re: Циклический таймер с большими длительностями на AVR

Vovan » 12 мар 2013, 12:21

Думаю задержки любого вида приведут к накоплению погрешности (Michael_K).
RTC - походу выход (Duhas, AndreiSk).
А может всё же таймер, асинхронный режим с часовым кварцем попробовать?
Тут ведь вот какое дело: создать таймер любого вида для меня не проблема, проблема в наладке - мождь он за сутки и не далеко уйдёт (буду наблюдать целые сутки и не замечу). А потом начнет накапливать погрешность и врать и снова трать на него гору времени. Для эксперимента я построил на тиньке суточный цикл. Всё намано вроде, а сегодня (на 3-тьи сутки) заметил около 1 мин отставание (кварц 4мГц)... В гневе растоптал ногами! Спецом гонял его от нового и надежного аккумулятора (не от БП). Вот поэтому и возник вопрос: можно ли на АВР построить взрослый таймер?

Re: Циклический таймер с большими длительностями на AVR

Myp » 12 мар 2013, 14:19

даже используя RTC внешние надо помучатся с калибровкой чтоб за неделю не убегало/отставало.
а уж на обычном кварце нереально. есть конечно в интернете трюки про супердлинные таймеры но это именно трюки.

Re: Циклический таймер с большими длительностями на AVR

SkyStorm » 12 мар 2013, 14:26

У меня часы на RTC за год ушли вперед на 6 минут.
Все это время они лежали на полке выключенные.

Re: Циклический таймер с большими длительностями на AVR

Michael_K » 12 мар 2013, 16:05

Vovan писал(а):Думаю задержки любого вида приведут к накоплению погрешности (Michael_K)

Я не понимаю этой фразы.
С фига ли? Не хочешь накапливать погрешность - не делай так, чтобы она накапливалась.
Запусти таймер пусть отсчитывает свои тактики. А ты их считай.

В цикле, счетчиком, в мэйне, в прерывании - это все равно.
Таймер только не останавливай - погрешность и не будет накапливаться.

Добавлено спустя 16 минут 52 секунды:
Грубо говоря, ставишь кварц на 8 Мгц, предделитель 1024, делаешь таймер с переполнением например на 31250.
Получаешь встающий флажок раз в четыре секунды. Аппаратно.
Хочешь прерывание вешай, хочешь в цикле жди, пока он встанет - главное не пропускай.
Это ведь не очень сложно - не пропускать события, происходящие раз в 4 секунды?
Не обязательно реагировать немедленно, ну проверил - отпработал, сбросил - главное в 4 секунды уложиться.
По-моему не такая уж сложная задача... Или как?
Можно и прерывание повесить - без проблем же.
Последний раз редактировалось Michael_K 12 мар 2013, 16:11, всего редактировалось 1 раз.

Re: Циклический таймер с большими длительностями на AVR

Myp » 12 мар 2013, 16:11

а кварц на самом деле на сколько? на 8000000.00 или примерно 8 ?:)

Re: Циклический таймер с большими длительностями на AVR

Vovan » 12 мар 2013, 16:13

Michael_K спасибо! Пока ничего не могу ответить. Понятно всё. Надо пробовать.

Re: Циклический таймер с большими длительностями на AVR

Michael_K » 12 мар 2013, 16:17

Это совсем другой вопрос. Вован говорил "задержки любого вида приведут к накоплению погрешности"
Если все упирается в стабильность кварца, то есть генераторы очень стабильные, например DS32KHZ. Единицы ppm - точно не помню
Да и нормальный кварц гейеровский включить честно с рекомендованными емкостями - он в свои даташитовские 20ppm будет укладываться.

Добавлено спустя 1 минуту 43 секунды:
http://www.maximintegrated.com/datashee ... vp/id/2940

Re: Циклический таймер с большими длительностями на AVR

Vovan » 12 мар 2013, 16:18

Я кстати и начал было тут про кварц домыслы разводить, но стёр. Ну вот наверное и причина: у меня в хозяйстве тока такие - 4мГц, 8мГц, 12мГц, 16мГц... Их и ставлю :oops:

Re: Циклический таймер с большими длительностями на AVR

dccharacter » 12 мар 2013, 18:04

купи RTC со встроенным кварцем и температурной компенсацией. Конфетка!

Re: Циклический таймер с большими длительностями на AVR

Angel71 » 12 мар 2013, 18:10

бонусом ещё и с календариком не придётся возиться.


cron
Rambler\'s Top100 Mail.ru counter