Страница 1 из 72
Таймеры/счётчики в AVR
Добавлено: Пт авг 30, 2013 19:55:55
Dr. Alex
Объясните мне, никак не могу взять в толк, TCCR1A и TCCR1B в чём прикол?
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 20:14:29
blackx
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 20:19:09
Dr. Alex
А в двух словах не можете объяснить? Что-то не вкуриваю......

Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:02:21
blackx
Два слова: не могу.
Читайте, разбирайтесь и задавайте конкретные вопросы.
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:20:30
COKPOWEHEU
два слова: настройки таймера
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:24:02
Dr. Alex
Я просто не могу понять разницы между TCCR1A и TCCR1B..... Просто во многих примерах TCCR1A=0х00; НО, в некоторых какому-то числу.....
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:32:14
blackx

это просто два разных регистра. Ну не влезли в один - взяли и второй инженегры Атмела запилили
Ну так вот, есть два регистра, в каждом по восемь битов. У каждого бита может быть своя задача, некоторые могут быть объединены.
Открываем датащит, смотрим регистр TCCR1A:
COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10
1) COM1A1 COM1A0 COM1B1 COM1B0: для выводов OC1A and OC1B выбран Normal port operation, OC1A/OC1B disconnected.
2) FOC1A FOC1B: просто выключены, можно не заморачиваться пытаясь понять что такое Force Output Compare (я и сам не знаю

)
3) WGM11 WGM10 - тут уже половина битов в другом регистре определена (который B). Смотрим таблицу 39 меги8 - там каждый режим описан.
Точно так же с TCCR1B.
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:34:21
Dr. Alex
Теперь стало яснее, но, получается они под одним таймером?
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:34:59
blackx
Ага, это все к таймеру 1 относится, который 16-битный
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:41:12
COKPOWEHEU
TCCR1A, TCCR1B. Думаете что значит цифра?
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:44:34
Dr. Alex
Re: Таймеры в AVR
Добавлено: Пт авг 30, 2013 21:47:32
blackx
Так спросили.
Старайтесь задавать вопросы более ясно

Re: Таймеры в AVR
Добавлено: Пн сен 02, 2013 13:26:11
Gudd-Head
На самом деле, тема с таймерами и ШИМ не такая уж простая, без поллитра не разберёшся. Тему прилепил.
Re: Таймеры в AVR
Добавлено: Пн сен 02, 2013 21:08:43
COKPOWEHEU
Да? В даташите же все расписано. Или может это я не выглядывал в какие-то особые дебри?
Хотя
в чем-то вы правы.
Re: Таймеры в AVR
Добавлено: Пн сен 02, 2013 21:22:54
blackx
Да, действительно, по таймерам в АВР больше всего новых тем. Это, пожалуй, самое нужное устройство МК и самое сложное в освоении.
Re: Таймеры в AVR
Добавлено: Вт сен 03, 2013 19:22:18
Eugene.Negrobov
Вот как не ругайте, а вот именно с таймерами разобраться, имея в руках генератор кода- проще простого.
Re: Таймеры в AVR
Добавлено: Вт сен 03, 2013 19:42:32
blackx
Eugene.Negrobov, нечего тут приучать людей "писать" код с помощью мышки

Re: Таймеры в AVR
Добавлено: Вт сен 03, 2013 23:11:17
COKPOWEHEU
Самое нужное может быть, самое сложное - едва ли. ИМХО с интерфейсами гораздо больше возни, особенно если все делать как положено а не как всегда. То есть проверять ошибки приема-передачи, например
Re: Таймеры в AVR
Добавлено: Ср сен 04, 2013 11:15:59
Gudd-Head
Ну что ж... Может, получится сделать что-то вроде
FAQ по таймерам/счётчикам AVR в режиме диалога, поправьте меня если я где не прав.
Для начала возьмём простой как резистор 8-битный таймер/счётчик0 8-й Меги:

Считает только вперёд, флаг и прерывание выставляется когда переваливается через 255 ($FF) на 0 ($00). Соответственно, в режиме таймера чтобы отмерить определённый временной интервал Т, надо заслать соответсвующее число в TCNT0, заранее вычислив его по формуле
TCNT0 = (256 - T/clk
Т0), где clk
Т0 — частота тактирования таймера/счётчика0.
Источник тактовых импульсов может быть как внешним (через пин Т0), так и внутренним — тот что тактирует МК clk
I/O, с предделителем или без:

Предделитель (прескалер) считает постоянно, поэтому используя в качестве тактов СК/8, СК/64, СК/256 или СК/1024 перед запуском таймера хорошо бы его сбрасывать (ресетить) для получения точных временных интервалов. Однако, таймер/счётчик0 и таймер/счётчик1 используют один и тот же предделитель, так что сбрасывать надо осторожно чтобы не сбить работу другого таймера.
Таким образом, лучше использовать максимально возможную частоту счёта clk
Т0. Например, отсчитать 256 мкс при тактовой clk
I/O = 1 МГц (встроенный RC-генератор, заводские фьюзы для 8-й Меги). Возможные комбинации (без сброса предделителя):
1. clk
Т0 = clk
I/O, TCNT0 = 0. Итог: 256 мкс;
2. clk
Т0 = СК/8, TCNT0 = 224. Итог: 248...256 мкс;
3. clk
Т0 = СК/64, TCNT0 = 252. Итог: 192...256 мкс;
4. clk
Т0 = СК/256, TCNT0 = 255. Итог: 1...256 мкс.
Управляется сие чудо, по сути, всего тремя значащими (младшими) битами регистра TCCR0, которые указывают источник тактового сигнала. Его отсутствие (комбинация "000") стопорит таймер/счётчик. Ну, плюс ещё по биту флаг, маска прерывания и сброс прескалера.
Re: Таймеры/счётчики в AVR
Добавлено: Ср сен 04, 2013 12:20:27
Dr. Alex
Хм... Теперь стало более-менее яснее... Спасибо, но есть ещё некоторые ньюансы, спрошу попозже.