|
ATTINY24A и TIMER1 в режиме INPUT CAPTURE |
|
|
|
Jul 6 2012, 08:45
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

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

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

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

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(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.
|
|
|
|
|
Jul 6 2012, 10:36
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Ситуация моя такая: есть две частоты - 115 кГц и 133 кГц. Мне надо их "распознать". На каждый "распознанный" импульс надо выдать на другую ногу "0" или "1". Декодер такой извратный. Частота высокая, стало быть, достаточно использовать младший байт регистра захвата (импульсов даже меньше сотни будет, полагаю). При возникновении захвата планирую обнулять счётный регистр таймера, чтобы ничего не пришлось вычитать etc - времени в основной программе на это нет, да и "Вася у папы не силён в математике". Если захвата нет, но есть переполнение - значит, импульсов на входе нет, и надо выставить "1" принудительно. Вот как-то так я это вижу. С отладкой совсем кисло - свободными можно признать лишь часть ног (конкретно, две), занятых программатором. Остальное занято. Отладчика нету =(
Сообщение отредактировал IgorKossak - Jul 6 2012, 13:53
Причина редактирования: бездумное цитирование
|
|
|
|
|
Jul 6 2012, 11:37
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
Цитата(GDI @ Jul 6 2012, 14:28)  На время отладки режима захвата таймера остальные ноги можно и не использовать по прямому назначению. На остальных ногах висят: полевики в full bridge (4 ноги), датчики (которые не отключить, 3 ноги), программатор. Если я буду беспорядочно щёлкать полевиками, то есть шанс устроить "сквозняк" и запалить схему. Устраивать соревнование "чей источник тока сильнее" между ногами контроллера и выходными буферами датчиков тоже малоперспективно. Жаль, что в этом дохлячке нет USART - хоть какой-то шанс был бы... а так, похоже, придётся методом тыка-с.
Сообщение отредактировал Slonofil - Jul 6 2012, 11:38
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|