реклама на сайте
подробности

 
 
> input capture mega8
ReM37
сообщение Nov 28 2006, 23:35
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 3-11-06
Пользователь №: 21 954



Нужно измерить длительность импульса. Но никак не понимаю как это сделать. Datasheet читал. Но все равно непонятно. sad.gif То есть понятно, что для этого надо использовать Timer1, но как настроить так, чтобы счет начался по нарастающему фронту, а заканчивался ро спадающему? Очень нужен пример на C...

Сообщение отредактировал ReM37 - Nov 28 2006, 23:37
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
bezobraznic
сообщение Nov 29 2006, 01:06
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 26-05-05
Пользователь №: 5 441



Цитата(ReM37 @ Nov 29 2006, 00:35) *
Нужно измерить длительность импульса. Но никак не понимаю как это сделать. Datasheet читал. Но все равно непонятно. sad.gif То есть понятно, что для этого надо использовать Timer1, но как настроить так, чтобы счет начался по нарастающему фронту, а заканчивался ро спадающему? Очень нужен пример на C...


Вот держи!!! Длительность=Tf-Tr; Рабочий пример!!

interrupt [TIM1_CAPT] void tim1_capt_isr(){
static register unsigned int temp;

temp = ICR1L; //Read low byte first (important)
temp |= (unsigned int)ICR1H << 8; //Read high byte and shift into top byte

if (CAPTURE_FRONT_F){ //обработка переднего фронта импульса тока
TCCR1B = 0b10000001; //switch to falling edge
CAPTURE_FRONT_F = 0;
Tr=temp+4; //компенсация
} //if
else { //обработка заднего фронта импульса тока
TCCR1B = 0b11000001; //switch to rising edge
CAPTURE_FRONT_F = 1;
Tf=temp-4; //компенсация
} //else
}//tim1_capt_isr()
Go to the top of the page
 
+Quote Post
ReM37
сообщение Nov 29 2006, 12:14
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 19
Регистрация: 3-11-06
Пользователь №: 21 954



Цитата(bezobraznic @ Nov 29 2006, 00:06) *
Вот держи!!! Длительность=Tf-Tr; Рабочий пример!!


Про такой вариант я думал. Но как с переполнением ICR1?
Пример:
Tf=30000
Tr=50000
Tf-Tr=20000 OK.

А если:
Tf=60000
Tr=60000+20000=???
Tf-Tr=???

По моему неправильно. Или я не понял?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016