|
ТАЙМЕР1, Дайте пример с инициализацией ТАЙМЕРА1. |
|
|
|
Apr 21 2008, 00:19
|

Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170

|
Здравствуйте! Я только недавно начал осваивать МК ATMEL. Не мог бы кто нибудь дать пример программмы по инициализации таймера1 для подсчета временных интервалов и вывода этого подсчитаного времени на ЖКИ? Уже неделю бьюсь с ним и ничего не получается. Пишу на СИ. Компилятор AVR Studio 4. Контроллер Мега1 . Зараннее благодарю..
|
|
|
|
|
Apr 21 2008, 01:31
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(dvs85 @ Apr 21 2008, 05:07)  То есть получается приходит сигнал на вход захвата, срабатывает прерывание, таймер начинает тикать и натиканое значение скидывает в регистры ICR1H и ICR1L? А когда происходит переполнение таймера, то что происходит? То есть можно сделать счетчик прерываний этих переполнений и значение этого счетчика и будет значение в секундах? Я все правильно понял?
И еще вопросик - для чего служит бит WGM1 регистра TCCR1B? Все совсем не так. Писать в регистры ICR1x имеет смысл только при работе таймера в режиме PWM, когда этими регистрами определяется максимальное значение - т.е. частота PWM. В других режимах в эти регистры копируется содержимое счетчика, во время возникновения события захвата. Т.е. регистры 'TCNT1H->ICR1H TCNTL->ICR1L копируются аппаратно. Сам по себе захват никаким образом не управляет таймером. При переполнении таймера содержимое регистров TCNT1H:TCNT1L становится равным 0 и устанавливается флаг OVF1. Если разрешены прерывания по переполнению, то также вызывается соответствующее прерывание.
|
|
|
|
|
Apr 21 2008, 01:49
|

Профессионал
    
Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486

|
Цитата(dvs85 @ Apr 21 2008, 07:57)  ICR1H=0x7A; ICR1L=0x12; Зачем же туда что-то записывать, в ICR1 должен записаться ваш код интервала по внешнему сигналу ICP. Читайте Евстифеева, там все прописано http://lord-n.narod.ru/walla.html(или даташит). Можно и так: ваш интервал подавать на INTn и програмно включать/выключать Т1.
--------------------
И на камнях растут деревья!
|
|
|
|
|
Apr 21 2008, 02:10
|

Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170

|
Цитата Читайте Евстифеева, там все прописано Спасибо, почитаю.. Цитата в ICR1 должен записаться ваш код интервала по внешнему сигналу ICP. Кстати что это означает?
Сообщение отредактировал dvs85 - Apr 21 2008, 02:38
|
|
|
|
|
Apr 21 2008, 22:06
|

Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170

|
Цитата После обсуждения в соседней конференции (http://electronix.ru/forum/lofiversion/index.php/t46414.html) у Вас остались вопросы? Хотелось бы уточнить задачу, а то, может быть, весь этот огород с захватом счетчика и не нужен вовсе. Какие интервалы времени Вы планируете замерять? С какой точностью? Вопросы остались. Программа не работает.. Я наверно тупой просто Задача такая: устройство включается и через некоторое время выключается. Необходимо замерить это время между включением и выключением. Время порядка милисекунд, до секунд. Точность до микросекунд.
|
|
|
|
|
Apr 22 2008, 05:50
|

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

|
Цитата(dvs85 @ Apr 22 2008, 01:06)  Необходимо замерить это время между включением и выключением. Время порядка милисекунд, до секунд. Точность до микросекунд. C такой точностью без захвата счетчика таймера не обойтись... Программа должна содержать следующие части: 1. Инициализация таймера 2. Обработчик Timer1 Capture 3. Обработчик Timer1 Overflow 4. Расчет интервала времени Какая часть вызывает затруднение? Что не работает?
|
|
|
|
|
Apr 22 2008, 09:02
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(dvs85 @ Apr 22 2008, 02:06)  Вопросы остались. Программа не работает.. Я наверно тупой просто Задача такая: устройство включается и через некоторое время выключается. Необходимо замерить это время между включением и выключением. Время порядка милисекунд, до секунд. Точность до микросекунд. Я бы повесил этот сигнал на внешнее прерывание по обоим фронтам. Его обработчик пусть быстренько переписывает в регистр значение таймера, потом определяет задний или передний фронт. Если задний, то вычисляет длительность. Таймер бы я взял самый приоритетный, разрядность бы расширил софтом: в прерывании таймера по переполнению пусть наращивается регистр или хоть два, получится 24-разрядный таймер, 2 секунды на 16 мегагерцах.
|
|
|
|
|
Apr 23 2008, 22:49
|

Частый гость
 
Группа: Участник
Сообщений: 86
Регистрация: 24-03-08
Из: Владивосток
Пользователь №: 36 170

|
Цитата C такой точностью без захвата счетчика таймера не обойтись... Программа должна содержать следующие части:
1. Инициализация таймера 2. Обработчик Timer1 Capture 3. Обработчик Timer1 Overflow 4. Расчет интервала времени Какая часть вызывает затруднение? Что не работает? Затруднение вызывает расчет интервала времени. То есть я понял, как расчитывается время переполнения. Но там получаются неокругленные числа времени переполнения. Например при коэф. деления 16 и частоте 4 МГц получается 0,226сек. А как сделать, чтобы он считал допустим каждые 0,2 секунды? Насколько я понял, надо в TCNT1 поместить значение 63035? Цитата Я бы повесил этот сигнал на внешнее прерывание по обоим фронтам. Его обработчик пусть быстренько переписывает в регистр значение таймера, потом определяет задний или передний фронт. Если задний, то вычисляет длительность. Таймер бы я взял самый приоритетный, разрядность бы расширил софтом: в прерывании таймера по переполнению пусть наращивается регистр или хоть два, получится 24-разрядный таймер, 2 секунды на 16 мегагерцах. Спасибо. Но мне бы для начала разобраться с работой самого таймера.. Потом буду пробовать Ваше предложение
Сообщение отредактировал dvs85 - Apr 23 2008, 23:27
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|