Обсуждаем контроллеры компании Atmel.
Ответить

Таймеры/счётчики в AVR

Пт авг 30, 2013 19:55:55

Объясните мне, никак не могу взять в толк, TCCR1A и TCCR1B в чём прикол?

Re: Таймеры в AVR

Пт авг 30, 2013 20:14:29

Все приколы расписаны со стр. 96
http://www.atmel.com/images/atmel-2486- ... asheet.pdf

еще приколы
тут http://easyelectronics.ru/avr-uchebnyj- ... jmery.html
и
тут http://easyelectronics.ru/avr-uchebnyj- ... -shim.html

Re: Таймеры в AVR

Пт авг 30, 2013 20:19:09

А в двух словах не можете объяснить? Что-то не вкуриваю...... :)

Re: Таймеры в AVR

Пт авг 30, 2013 21:02:21

Два слова: не могу.

Читайте, разбирайтесь и задавайте конкретные вопросы.

Re: Таймеры в AVR

Пт авг 30, 2013 21:20:30

два слова: настройки таймера

Re: Таймеры в AVR

Пт авг 30, 2013 21:24:02

Я просто не могу понять разницы между TCCR1A и TCCR1B..... Просто во многих примерах TCCR1A=0х00; НО, в некоторых какому-то числу.....

Re: Таймеры в AVR

Пт авг 30, 2013 21:32:14

:facepalm: это просто два разных регистра. Ну не влезли в один - взяли и второй инженегры Атмела запилили

Ну так вот, есть два регистра, в каждом по восемь битов. У каждого бита может быть своя задача, некоторые могут быть объединены.

Открываем датащит, смотрим регистр 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.
Последний раз редактировалось blackx Пт авг 30, 2013 21:34:41, всего редактировалось 1 раз.

Re: Таймеры в AVR

Пт авг 30, 2013 21:34:21

Теперь стало яснее, но, получается они под одним таймером?

Re: Таймеры в AVR

Пт авг 30, 2013 21:34:59

Ага, это все к таймеру 1 относится, который 16-битный

Re: Таймеры в AVR

Пт авг 30, 2013 21:41:12

TCCR1A, TCCR1B. Думаете что значит цифра?

Re: Таймеры в AVR

Пт авг 30, 2013 21:44:34

Да я догадывался, но решил спросить у старших братьев.... А меня сразу в штыки :cry: :cry: :cry:

Re: Таймеры в AVR

Пт авг 30, 2013 21:47:32

Так спросили.

Старайтесь задавать вопросы более ясно :beer:

Re: Таймеры в AVR

Пн сен 02, 2013 13:26:11

На самом деле, тема с таймерами и ШИМ не такая уж простая, без поллитра не разберёшся. Тему прилепил.

Re: Таймеры в AVR

Пн сен 02, 2013 21:08:43

Да? В даташите же все расписано. Или может это я не выглядывал в какие-то особые дебри?
Хотя в чем-то вы правы.

Re: Таймеры в AVR

Пн сен 02, 2013 21:22:54

Да, действительно, по таймерам в АВР больше всего новых тем. Это, пожалуй, самое нужное устройство МК и самое сложное в освоении.

Re: Таймеры в AVR

Вт сен 03, 2013 19:22:18

Вот как не ругайте, а вот именно с таймерами разобраться, имея в руках генератор кода- проще простого.

Re: Таймеры в AVR

Вт сен 03, 2013 19:42:32

Eugene.Negrobov, нечего тут приучать людей "писать" код с помощью мышки :)))

Re: Таймеры в AVR

Вт сен 03, 2013 23:11:17

Самое нужное может быть, самое сложное - едва ли. ИМХО с интерфейсами гораздо больше возни, особенно если все делать как положено а не как всегда. То есть проверять ошибки приема-передачи, например

Re: Таймеры в AVR

Ср сен 04, 2013 11:15:59

Ну что ж... Может, получится сделать что-то вроде FAQ по таймерам/счётчикам AVR в режиме диалога, поправьте меня если я где не прав.
Для начала возьмём простой как резистор 8-битный таймер/счётчик0 8-й Меги:
Изображение
Считает только вперёд, флаг и прерывание выставляется когда переваливается через 255 ($FF) на 0 ($00). Соответственно, в режиме таймера чтобы отмерить определённый временной интервал Т, надо заслать соответсвующее число в TCNT0, заранее вычислив его по формуле
TCNT0 = (256 - T/clkТ0), где clkТ0 — частота тактирования таймера/счётчика0.
Источник тактовых импульсов может быть как внешним (через пин Т0), так и внутренним — тот что тактирует МК clkI/O, с предделителем или без:
Изображение
Предделитель (прескалер) считает постоянно, поэтому используя в качестве тактов СК/8, СК/64, СК/256 или СК/1024 перед запуском таймера хорошо бы его сбрасывать (ресетить) для получения точных временных интервалов. Однако, таймер/счётчик0 и таймер/счётчик1 используют один и тот же предделитель, так что сбрасывать надо осторожно чтобы не сбить работу другого таймера.
Таким образом, лучше использовать максимально возможную частоту счёта clkТ0. Например, отсчитать 256 мкс при тактовой clkI/O = 1 МГц (встроенный RC-генератор, заводские фьюзы для 8-й Меги). Возможные комбинации (без сброса предделителя):
1. clkТ0 = clkI/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

Хм... Теперь стало более-менее яснее... Спасибо, но есть ещё некоторые ньюансы, спрошу попозже.
Ответить