Таймеры/счётчики в AVR
-
Против часовой
- Открыл глаза
- Сообщения: 72
- Зарегистрирован: Вт апр 01, 2014 16:33:06
- Откуда: Москва
Re: Таймеры/счётчики в AVR
Ни в коем разе. Естифеева читал, и поскольку не отложилось, что там про это было, решил поспрашать другие источники.
- Реклама
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
как же бесит этот Евстееф до дыр зачитал, ни....на не пойму эти таймеры счетчики как их настраивать
я думаю там для специалистов в этой области написано, а не для чайников вроде меня, неужели
нельзя объяснить это для этого, это для таго и примеры, а там тонна сухарей с одного на другое
я бы не сказал, что я тормоз, но 3 дня синею за матчастью
я думаю там для специалистов в этой области написано, а не для чайников вроде меня, неужели
нельзя объяснить это для этого, это для таго и примеры, а там тонна сухарей с одного на другое
я бы не сказал, что я тормоз, но 3 дня синею за матчастью
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Мы тут все синяки!но 3 дня синею за матчастью
А что не понятного? )) Есть один-три регистра управления (Их несколько потому что все настройки в один не поместились. но пугаться не стоит - большинство настроек однотипные), регистры сравнения и счетный регистр. )) Таймер может управлять парой выходов (3-мя в некоторых моделях). и может тактироваться либо от частоты проца, либо извне, с сигнала приходящего на ножку. + пара регистров для настройки и регистрации прерываний. +несколько регистров не нужных Вам на данном этапе обучения.
В счетном регистре насчитываются такты. При совпадении с числом одного из регистров совпадения (зависит от режима) или по достижению конца генерируется прерывание. А вот режимы и остальные настройки выставляются как раз в управляющих регистрах.
Я помнится тоже не с первого раза это усвоил. Поэтому предлагаю читать не все подряд. а выборочно, частями. Прочитали, например про режим сброс по переполнению. остановились. подумали. попробовали (обязательно). остальные режимы либо на следующий день, либо отложите до лучших времен, пока не понадобятся. Т.е. читайте только то, что Вам нужно сейчас. Поверьте, здесь нет ни одного человека, который знает AVR на все 100 %. Потому что даже если Вы все прочтете - Вы все это не запомните. Всегда нужно попробовать, а еще лучше помучиться с этим, а это время. А еще по первости помогает выписать регистры на бумажку и карандашиком проставить биты, какие необходимо в какие значения установить, чтобы активировать нужный режим. На второй раз уже легче читаться будет. Еще читайте пока только про 8-битные таймеры. 16-тибитные оставьте на потом.
Удачи!
P.S. Статейку что ли по таймерам написать... Чтобы легче усваивалось...
А вот, кстати, кто-то уже написал. ))
http://radiokot.ru/start/mcu_fpga/avr/11/
Последний раз редактировалось ИС-пытатель Ср апр 30, 2014 08:54:24, всего редактировалось 2 раза.
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
ИС-пытатель спасибо , что откликнулись) а то матерюсь сижу) в том то и дело) что у Евстеева написано все в кучу и о всех таймерах сразу и о всех МК и 16 и 8 битные в кучу, прочитаю каша в голове))
вот кто нибудь написал бы для котят мол атмега8)) таймер Т0, 8 битные, и все о нем рассказал показал))
тогда б и усвоилось все улыбаясь)) просто понимаю , что не сложно, но написано ну не дать не взять
на немецкой энигме)))))
вот кто нибудь написал бы для котят мол атмега8)) таймер Т0, 8 битные, и все о нем рассказал показал))
тогда б и усвоилось все улыбаясь)) просто понимаю , что не сложно, но написано ну не дать не взять
на немецкой энигме)))))
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Вот, специально для Вас написал! Мож, админы опубликуют - будет еще кому полезна.
Добавил в конце примеры с настройкой прерываний.
Добавил в конце примеры с настройкой прерываний.
- Вложения
-
- Таймер АВР.rar
- (211.07 КБ) 317 скачиваний
Последний раз редактировалось ИС-пытатель Ср апр 30, 2014 10:31:04, всего редактировалось 2 раза.
- Реклама
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
ИС-пытатель респект и уважуха))) спасибо большое, совсем другое дело))
единственное пример бы в конце статьи) что бы котята наглядно видели как выглядит настройка)
и тогда все горемыки на статью кинутся как на спасительный плот)
единственное пример бы в конце статьи) что бы котята наглядно видели как выглядит настройка)
и тогда все горемыки на статью кинутся как на спасительный плот)
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Так там есть пример небольшой. ) Правда на Си. На ассемблере все тоже самое, только загрузка в регистр идет через промежуточный основной (r16, например).
сброс флагов прерываний TIFR = 0xFF; (Закидываем все единицы, чтобы сбросить все флаги)
запись TIFR = TIFR; также сбросит установленные флаги
или TIFR = (1<<TOV0); сбрасываем только флаг TOV0
разрешить прерывание TIMSK |= (1<<TOV0);
запретить прерывание TIMSK &= ~(1<<TOV0);
сброс флагов прерываний TIFR = 0xFF; (Закидываем все единицы, чтобы сбросить все флаги)
запись TIFR = TIFR; также сбросит установленные флаги
или TIFR = (1<<TOV0); сбрасываем только флаг TOV0
разрешить прерывание TIMSK |= (1<<TOV0);
запретить прерывание TIMSK &= ~(1<<TOV0);
Последний раз редактировалось ИС-пытатель Ср апр 30, 2014 10:24:17, всего редактировалось 2 раза.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Таймеры/счётчики в AVR
А чё сразу админы? Сам накропай, будем новичков носом тыкатьИС-пытатель писал(а):Мож, админы опубликуют
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Да там, в принципе, упрощенный и пережеванный Евстифеев.
Gudd-Head, почему я не могу изменить рейтинг чужих сообщений или карму пользователей? У меня запускается какой-то скрипт и виснет... когда отменяю - все остается на прежнем месте. Пользуюсь Гугл-хромом.
Кстати, как статью добавить на сайт?
Gudd-Head, почему я не могу изменить рейтинг чужих сообщений или карму пользователей? У меня запускается какой-то скрипт и виснет... когда отменяю - все остается на прежнем месте. Пользуюсь Гугл-хромом.
Кстати, как статью добавить на сайт?
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
ИС-пытатель если бы я еще и Си знал, думаю нубских вопросов было бы меньше)))
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Все элементарно, Ватсон!
Там где просто TCCR0 = xxxx;
заменяете на
ldi r16, xxxx
ount TCCR0, r16
там где TCCR0 |= xxxx; // означает прочитать регистр, и провести операцию побитного ИЛИ с числом xxxx
заменяете на
in r16, TCCR0
ori r16, xxxx
out TCCR0, r16
там где TCCR0 &= xxxx; // означает прочитать регистр, и провести операцию побитного И с числом xxxx
заменяете на
in r16, TCCR0
andi r16, xxxx
out TCCR0, r16
там где TCCR0 = TCCR0
пишете
in r16, TCCR0
out TCCR0, r16.
Естественно, если у Вас периферийный регистр в вашем контроллере находится вне диапазона адреса 0x3F, то вместо операций in-out необходимо использовать операции
sts-lds и им подобные.
Все вычисления вида ~((1<<XYZ) | (0<<ZYX)) выполняются самим компилятором и так же работают на асме. Изменять не требуется.
Там где просто TCCR0 = xxxx;
заменяете на
ldi r16, xxxx
ount TCCR0, r16
там где TCCR0 |= xxxx; // означает прочитать регистр, и провести операцию побитного ИЛИ с числом xxxx
заменяете на
in r16, TCCR0
ori r16, xxxx
out TCCR0, r16
там где TCCR0 &= xxxx; // означает прочитать регистр, и провести операцию побитного И с числом xxxx
заменяете на
in r16, TCCR0
andi r16, xxxx
out TCCR0, r16
там где TCCR0 = TCCR0
пишете
in r16, TCCR0
out TCCR0, r16.
Естественно, если у Вас периферийный регистр в вашем контроллере находится вне диапазона адреса 0x3F, то вместо операций in-out необходимо использовать операции
sts-lds и им подобные.
Все вычисления вида ~((1<<XYZ) | (0<<ZYX)) выполняются самим компилятором и так же работают на асме. Изменять не требуется.
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
испытатель спасибо)
только вот строки)
Все вычисления вида ~((1<<XYZ) | (0<<ZYX)) так же работают и на асме. Изменять не требуется.
меня немного смущают
инверсия битов?
только вот строки)
Все вычисления вида ~((1<<XYZ) | (0<<ZYX)) так же работают и на асме. Изменять не требуется.
меня немного смущают
инверсия битов?
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
~ побитная инверсия числа
a << b сдвиг числа a влево b раз
a >> b аналогично вправо
| побитное ИЛИ
& побитное И
это сделано для читабельности, переносимости и исключения ошибок, чтобы не писать побитно в виде 0b00100101, хотя если Вам на данном этапе удобней побитно - пишите как умеете. Потом освоите и остальное.
P.S при сооружений конструкций с << ~ | & активней пользуйтесь скобками - будет меньше ошибок.
a << b сдвиг числа a влево b раз
a >> b аналогично вправо
| побитное ИЛИ
& побитное И
это сделано для читабельности, переносимости и исключения ошибок, чтобы не писать побитно в виде 0b00100101, хотя если Вам на данном этапе удобней побитно - пишите как умеете. Потом освоите и остальное.
P.S при сооружений конструкций с << ~ | & активней пользуйтесь скобками - будет меньше ошибок.
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
испытатель а обязательно так писать с или инверсией и т д?
по простому никак? типа
ldi r16, 0b00000011
out TIFR, r16
так хоть наглядно видно где какой бит стоит
по простому никак? типа
ldi r16, 0b00000011
out TIFR, r16
так хоть наглядно видно где какой бит стоит
глаза боятся, а руки что то не делают))
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: Таймеры/счётчики в AVR
Так я ж говорю, пишите, как умеете! ))
не принципиально.
Только у Вас сброс битов будет таким
andi r16, 0b11111011 ; сбросить 2-й бит, остальные - без изменений. Это заместо инверсии ~0b00000100
не принципиально.
Только у Вас сброс битов будет таким
andi r16, 0b11111011 ; сбросить 2-й бит, остальные - без изменений. Это заместо инверсии ~0b00000100
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Таймеры/счётчики в AVR
Возможно, из-за плохой кармы.ИС-пытатель писал(а):Gudd-Head, почему я не могу изменить рейтинг чужих сообщений или карму пользователей?
Ссылка на главной: http://radiokot.ru/upload/?new=1ИС-пытатель писал(а):Кстати, как статью добавить на сайт?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- sergo80zxc
- Встал на лапы
- Сообщения: 113
- Зарегистрирован: Пт апр 04, 2014 09:34:08
- Откуда: Санкт-Петербург
Re: Таймеры/счётчики в AVR
ИС-пытатель и пример, пример не забудте по простому который в статью

глаза боятся, а руки что то не делают))
Re: Таймеры/счётчики в AVR
Доброго времени суток, товарищи.
С микроконтроллерами дел ранее не имел, но жизнь заставляет... А самому разобраться мозгов не хватает...
Собственно, с геркона поступает сигнал, время паузы которого меняется от t1=68 мс до t2=385 мс. Есть микроконтроллер attiny2313.
Нужна функция, которая будет возвращать значение этого времени паузы.
Частота такирования 8 МГц. Какой делитель на таймере использовать? Что писать в теле программы, чтобы таймер включить? К какой ножке подключаться?
И ещё вопрос. Предположим, импульсы с геркона перестали поступать. Счетчик когда-нибудь переполнится, так? Можно ли по переполнению запустить какую-то функцию?
С микроконтроллерами дел ранее не имел, но жизнь заставляет... А самому разобраться мозгов не хватает...
Собственно, с геркона поступает сигнал, время паузы которого меняется от t1=68 мс до t2=385 мс. Есть микроконтроллер attiny2313.
Нужна функция, которая будет возвращать значение этого времени паузы.
Частота такирования 8 МГц. Какой делитель на таймере использовать? Что писать в теле программы, чтобы таймер включить? К какой ножке подключаться?
И ещё вопрос. Предположим, импульсы с геркона перестали поступать. Счетчик когда-нибудь переполнится, так? Можно ли по переполнению запустить какую-то функцию?
Re: Таймеры/счётчики в AVR
Все так просто, Владимир Ильич ? Научите побыстрее меня программировать в течение ближайшего получаса. Вряд ли... Думаю, вопрос надо сформулировать так: напишите мне этот кусок проги. Куда возвращать значение - в программу, которая уже есть, т.е. вопрос только в измерении интервала ? В этой проге уже задействованы какие-нить прерывания ? Или передавать во внешний мир - по интерфейсу или на ЖКИ ? В каких единицах ? Как часто надо снимать инфу ?
Для начала надо самому себе сформулировать задачу на алгоритмичемсом уровне, если есть навык, то и схему алгоритма нарисовать. Если - то, а если так - то вот этак. И привести кусок проги, куда ее надо встроить.
Правильно поставленный вопрос уже содержит половину ответа. Ну а если темнить, скрывая конкретную задачу - вряд ли помогут. Похоже, что-то вроде тахометра или стабилизатора скорости.
Кстати, это на рассыпухе, без МК, решается на раз. Как-то так.
Функцию запустить можно.
Для начала надо самому себе сформулировать задачу на алгоритмичемсом уровне, если есть навык, то и схему алгоритма нарисовать. Если - то, а если так - то вот этак. И привести кусок проги, куда ее надо встроить.
Правильно поставленный вопрос уже содержит половину ответа. Ну а если темнить, скрывая конкретную задачу - вряд ли помогут. Похоже, что-то вроде тахометра или стабилизатора скорости.
Кстати, это на рассыпухе, без МК, решается на раз. Как-то так.
Функцию запустить можно.
- Вложения
-
- Strob.JPG
- (7.48 КБ) 650 скачиваний
Re: Таймеры/счётчики в AVR
Хорошо. Рассказываю всё по порядку. В обычной жизни я вожусь по большей части с мопедами, а не с электроникой. Язык С немного знаю, пару программ для компьютера писал.Jack_A писал(а):Ну а если темнить, скрывая конкретную задачу - вряд ли помогут
Конкретная задача: есть старый мопед без спидометра. родной механический установить нельзя, ибо в новых колёсах нет места для крепления червяка. Цифровой спидометр с 7-и сегментным индикатором будет портить раритетный внешний вид. Суть - сделать стрелочный спидометр с электронным управлением. Пусть, он будет работать в диапазоне 5-65 км/ч.
Индикаторы:
1. стрелочный. управляется меандром частотой 0-200 Гц.
2. маленький 5-и цифровой семисигментник (в качестве одометра)
Ввод данных - с геркона, которым управляет магнит на колесе.
1. Программа должна измерить время одного периода вращения колеса. С этим у меня возникают трудности...Jack_A писал(а):Для начала надо самому себе сформулировать задачу на алгоритмичемсом уровне
2. Преобразовать эту информацию в скорость и пробег. Это математика, тут я справлюсь
3. Вывод информации на индикаторы. Тут я тоже представляю принцип работы. Как понимаю, меандр генерировать с помощью одного таймера. 7-и сегментном управлять с помощью delay. Тогда второй таймер остается на измерение времени на входе.
4. Пробег надо бы сохранять в энергонезависимую память, дабы он не сбрасывался всякий раз, как отключается питание. Поскольку память не вечная, есть идея записывать информацию всякий раз, как мопед останавливается, т.е. скорость равна 0, импульсы с геркона не поступают. Представлений о работе с памятью тоже не имею...
как-то так...
Собственно, да. Вопрос у меня именно в измерении интервала.Jack_A писал(а):Думаю, вопрос надо сформулировать так: напишите мне этот кусок проги. Куда возвращать значение - в программу, которая уже есть, т.е. вопрос только в измерении интервала ?


