Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATTINY24A и TIMER1 в режиме INPUT CAPTURE
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Slonofil
Товарищи из опытных, хочется уточнить у Вас некоторые детали работы Timer1 в режиме Input Capture от входа ICP.

Из документации не сумел уяснить следующие моменты:
1. При настройке таймера 1 нужно ли проводить инициализацию TCNT1 некоторым (нулевым) значением? Или для этой задачи это не принципиально?
2. Когда происходит захват, и TCNT1 загружается в ICR1, что дальше происходит со значением TCNT1? Оно обнуляется? Или счёт продолжается от захваченного значения до переполнения? И как тогда высчитывать время между событиями?
3. Поскольку стоит задача померять период импульсов и само их наличие (если импульсов нет, то на входе может быть либо постоянный 0, либо постоянная 1), то актуально ли использование простого переполнения от Timer1 для фиксации момента пропадания ипульсов (если было переполнение - значит, захвата за время счёта не произошло). Для этого ведь необходимо, чтобы после захвата происходил сброс рабочего регистра таймера (см. п. 2)...
4. Необходимо ли настраивать программно пин ICP на вход или это сделает механика таймера-счётчика? Слышал, что в атмеловских творениях такая функция имеется.

Спасибо!
Палыч
1. Можно, но не обязательно, поскольку Вам нужна разность между двумя моментами, то не имеет значения откуда идет счет. Однако, в некоторых случаях заносить ноль - удобно: когда оба фиксируемых события происходят на интервале счета таймера до переполнения.
2. После захвата счетный регистр продолжает считать в соответствии с режимом работы счетчика. При вычислении интервала времени между двумя событиями (периода) необходимо учитывать переполнения (вести подсчет их количества).
4. По сбросу этот вывод МК настроет на ввод.
Slonofil
Спасибо!

Значит, если мне надо считать короткие импульсы (до 150 кГц), то учитывать переполнения не нужно, удобнее считать от нуля (в момент захвата обнулять счётный регистр). Должно вполне хватить младшего байта ICR1L, старший достаточно будет проверять на 0.

Хотел бы спросить у Вас как новичёк у опытного: подскажите, есть ли возможность добыть как-то данные регистров из ATTINY24A при помощи AVRISP II? До этого работал с PIC12/18/32 и ICD2/ICD3, про их работу в режиме отладчика знаю, а вот про ATTINY не знаю, где поглядеть. Отладкой в среде пользовался, но она не поможет мне при захвате.
Палыч
Цитата(Slonofil @ Jul 6 2012, 13:21) *
Значит, если мне надо считать короткие импульсы (до 150 кГц), то учитывать переполнения не нужно, удобнее считать от нуля (в момент захвата обнулять счётный регистр). Должно вполне хватить младшего байта ICR1L, старший достаточно будет проверять на 0.

Э-э-э... Что-то мы друг друга не понимаем...
Обнуляем счетчик. Фиксируем первое значение (показание счетчика в момент первого импульса), затем то же для начала второго импульса. Из показаний счетчика при втором импульсе вычитаем первое показание и разность умножаем на период следования счетных импульсов. Это - если переполнение таймера происходит за период заведомо бОльший, чем два измеряемых периода. Важно забрать захваченное значение до прихода следующего импулься: при частоте 150кГц у Вас на это будет всего-то сотня тактов... Кроме, того: прикиньте какая точность измерения получится, а какая Вам нужна? Если частота измеряемых импульсов мало меняется за некоторый период, то можно поставить внешний предделитель и считать время прихода 4, 8, 16.... импульсов для повышения точности. При измерении такого длительного интервала, вероятно, таймер станет переполняться. В этом случае прийдется считать/учитывать и переполнения таймера...

Цитата(Slonofil @ Jul 6 2012, 13:21) *
Хотел бы спросить у Вас как новичёк у опытного: подскажите, есть ли возможность добыть как-то данные регистров из ATTINY24A при помощи AVRISP II? До этого работал с PIC12/18/32 и ICD2/ICD3, про их работу в режиме отладчика знаю, а вот про ATTINY не знаю, где поглядеть. Отладкой в среде пользовался, но она не поможет мне при захвате.

AVRISP - это программатор. Посмотреть регистры при работе МК с помощью него не удастся. Можно выводить некоторую информацию для отладки на светодиоды, подключенные к портам (в tiny их не богато), или выводить по последовательному интерфейсу на терминал, или использовать AVR JTAGICE mkII.
Slonofil
Ситуация моя такая: есть две частоты - 115 кГц и 133 кГц. Мне надо их "распознать". На каждый "распознанный" импульс надо выдать на другую ногу "0" или "1". Декодер такой извратный. Частота высокая, стало быть, достаточно использовать младший байт регистра захвата (импульсов даже меньше сотни будет, полагаю). При возникновении захвата планирую обнулять счётный регистр таймера, чтобы ничего не пришлось вычитать etc - времени в основной программе на это нет, да и "Вася у папы не силён в математике". Если захвата нет, но есть переполнение - значит, импульсов на входе нет, и надо выставить "1" принудительно. Вот как-то так я это вижу.

С отладкой совсем кисло - свободными можно признать лишь часть ног (конкретно, две), занятых программатором. Остальное занято. Отладчика нету =(
GDI
На время отладки режима захвата таймера остальные ноги можно и не использовать по прямому назначению.
Slonofil
Цитата(GDI @ Jul 6 2012, 14:28) *
На время отладки режима захвата таймера остальные ноги можно и не использовать по прямому назначению.

На остальных ногах висят: полевики в full bridge (4 ноги), датчики (которые не отключить, 3 ноги), программатор. Если я буду беспорядочно щёлкать полевиками, то есть шанс устроить "сквозняк" и запалить схему. Устраивать соревнование "чей источник тока сильнее" между ногами контроллера и выходными буферами датчиков тоже малоперспективно. Жаль, что в этом дохлячке нет USART - хоть какой-то шанс был бы... а так, похоже, придётся методом тыка-с.
GDI
А вариант порезать дорожки/поднять ноги полевикам/отключить питание полевиков Вы не рассматриваете? Или просто взять отдельный Тини и на макетку припаять, да что на макетку, его можно прямо на разъем припаять который потом в программатор воткнуть.
Slonofil
Цитата(GDI @ Jul 6 2012, 15:05) *
А вариант порезать дорожки/поднять ноги полевикам/отключить питание полевиков Вы не рассматриваете? Или просто взять отдельный Тини и на макетку припаять, да что на макетку, его можно прямо на разъем припаять который потом в программатор воткнуть.

Это, конечно, выход - надо попробовать на отдельной плате помыкаться.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.