roboforum.ru

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


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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение Vovan » 12 мар 2013, 01:28

Вот что-то не нашел нигде принцип построения программы для больших промежутков времени (от 24ч. и до и т.д. например на неделю). Объясните, желательно "на пальцах" (словами). Видел на сях - ничего не понял. Примеров на асм не нашёл ваще... Мне б чисто принцип, или ссыль (или книгу) в которой сие рассказывается. (МК любой, AVR).
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

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

Сообщение Michael_K » 12 мар 2013, 01:59

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

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

Или вы чего-то не договариваете? :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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 раз.
Аватара пользователя
AndreiSk
 
Сообщения: 2639
Зарегистрирован: 23 апр 2009, 17:03
Откуда: Москва, Самара
прог. языки: C#

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

Сообщение Michael_K » 12 мар 2013, 02:07

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

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

Я не говорил, что задержки обязательно нужно делать только в мэйне.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Duhas » 12 мар 2013, 08:22

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

да и потребляет этот таймер ни о чем в ней.
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение Vovan » 12 мар 2013, 12:21

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

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

Сообщение Myp » 12 мар 2013, 14:19

даже используя RTC внешние надо помучатся с калибровкой чтоб за неделю не убегало/отставало.
а уж на обычном кварце нереально. есть конечно в интернете трюки про супердлинные таймеры но это именно трюки.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение SkyStorm » 12 мар 2013, 14:26

У меня часы на RTC за год ушли вперед на 6 минут.
Все это время они лежали на полке выключенные.
Никто кроме нас!!!
4Robots.ru - Все для роботов!
Аватара пользователя
SkyStorm
 
Сообщения: 2687
Зарегистрирован: 05 фев 2008, 15:33
Откуда: St. Petersburg - Moscow
Skype: SkyStorm77
ФИО: Костюк Константин Вячеславович

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 раз.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Myp » 12 мар 2013, 16:11

а кварц на самом деле на сколько? на 8000000.00 или примерно 8 ?:)
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение Vovan » 12 мар 2013, 16:13

Michael_K спасибо! Пока ничего не могу ответить. Понятно всё. Надо пробовать.
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

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

Сообщение Michael_K » 12 мар 2013, 16:17

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

Добавлено спустя 1 минуту 43 секунды:
http://www.maximintegrated.com/datashee ... vp/id/2940
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

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

Сообщение Vovan » 12 мар 2013, 16:18

Я кстати и начал было тут про кварц домыслы разводить, но стёр. Ну вот наверное и причина: у меня в хозяйстве тока такие - 4мГц, 8мГц, 12мГц, 16мГц... Их и ставлю :oops:
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

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

Сообщение dccharacter » 12 мар 2013, 18:04

купи RTC со встроенным кварцем и температурной компенсацией. Конфетка!
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

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

Сообщение Angel71 » 12 мар 2013, 18:10

бонусом ещё и с календариком не придётся возиться.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

cron