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

 
 
> Простенькая программка измерения длительности импульса.
Зверюга
сообщение Aug 30 2008, 07:37
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Здравствуйте. Подкиньте пожалуйста примерчик на CodeVision для непрерывного измерения длительности импульса контроллером AVR.

Я так прикидываю, что нужно запускать по прерыванию с пина таймер, по следующему прерыванию останавливать, читать сколько натикало, сбрасывать и вновь запускать. Дискретность - максимально возможная для таймера в atmega32.

В интернете видел только готовые очень мудрые проекты, выдрать из которых суть сложновато, да и то для IAR и WinAVR.


Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Зверюга
сообщение Aug 31 2008, 13:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 413
Регистрация: 15-12-06
Пользователь №: 23 563



Боюсь Ваш метод мне не подойдет.
Объясню:
время необходимо измерять довольно точно. Ввиду этого я буду использовать 16-ти битный таймер, источником для счета выберу System clock. Таким образом получу переполнение таймера за 4095,9375 мкс. А если длительность импульса будет больше указанной величины?

Я планирую сделать так:
По переполнению таймера генерировать прерывание, в обработчике которого некая величина cycles будет инкрементироваться.
А контроллировать измеряемый импульс я буду внешним прерыванием. По спаду имульса на входе INT0 будет генерироваться прерывание, в обработчике которого будет производиться операция (cycles*65535+состояние счетчика на данны момент) / 16 - получаем длительность импульса в микросекундах при частоте кварца 16 МГц. После чего счетчик сбрасывается, переменная cycles обнуляется.

Уточню - мне нужно не время импульса, а время от фронта до следущего фронта. То есть период. Кроме того, использоваться бедт не только INT0, но и INT1, INT2, импульсы на которые будут приходить поочередно, а обработчк будет один и тот же.

Если предложенный мной алгоритм с использованием не только счетчика но и внешнего прерывания слишком сложен и объясняется незнанием мной всех возможностей счетчика, укажите мне на это.


В таймерах/счетчиках я полный ноль, заглянул в руководство - там 50 страниц с дикими 5-6-ти буквенными похожими друг на друга труднозапоминаемыми аббревиатурами. Господа, я знаю, что разбираться с этим буду недели две, а что конечный результат инициализации строк таймера займет 5-6 строк.

Будьте добры, помогите с примером кода, а я изменяя его и экспериментирую, как-нибудь дальше разберусь.

Вот мой код:

Код
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
   lcd_setxy(2,15);
  lcd_str_fl("timer is overflow",f8x14,green);//ñòðîêà èç flash  

           cycle++;
}


void main(void)
{
TCCR1A=0x00;
TCCR1B=0x01;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
........
.........

for (;;)
{
  lcd_setxy(32,50);
  lcd_str_ram(cycle, f8x8,textcolor);//ñòðîêà èç ram
}

}



Если таймер хотя бы один раз переполнится, на экран должна вылезти надпись "timer is oferflow". А если он переполняется неоднократно, то постоянно будет обновляться значение переменной cycle.

На экране же "0". Таймер не запущен? Генерировал код при помощи CodeVision Wizard.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Зверюга   Простенькая программка измерения длительности импульса.   Aug 30 2008, 07:37
- - rv3dll(lex)   Цитата(Зверюга @ Aug 30 2008, 11:37) Здра...   Aug 30 2008, 08:00
|- - sKWO   Цитата(rv3dll(lex) @ Aug 30 2008, 11...   Aug 30 2008, 08:30
- - Зверюга   бр.... оговорился... мне период и нужен. Не значю ...   Aug 30 2008, 12:00
|- - sKWO   запускайте таймер который имеет режим захвата во ф...   Aug 30 2008, 14:14
- - Зверюга   Господа, слишком непонятно и поверхностно... Ни ст...   Aug 30 2008, 15:29
|- - sKWO   Цитата(Зверюга @ Aug 30 2008, 18:29) Я во...   Aug 30 2008, 19:53
|- - sKWO   Вы глобально не разрешили прерывания. инициализаци...   Aug 31 2008, 13:57
- - Зверюга   ЦитатаЖКИ графический, успеет? четыре милисекунды ...   Aug 31 2008, 14:13
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 17:13) Проч...   Aug 31 2008, 14:31
- - Зверюга   Спасибо конечно, но вот разрешение прерываний не д...   Aug 31 2008, 14:53
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 17:53) ЭТО ...   Aug 31 2008, 15:18
- - Зверюга   ЦитатаКак у Вас организован внешний сброс? Чё к р...   Aug 31 2008, 15:20
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 18:20) К ре...   Aug 31 2008, 15:33
- - Зверюга   Подпаял резистор, конденсатор ненашел. Все равно р...   Aug 31 2008, 17:46
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 20:46) Полу...   Aug 31 2008, 18:53
- - Зверюга   Вы по-моему опережаете события... Я не решил пробл...   Aug 31 2008, 19:06
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 22:06) Я вс...   Aug 31 2008, 19:23
- - Зверюга   ТАК, ПОХОЖЕ ГЛЮК ВСЕ ТАКИ СВЯЗАН С БИБЛИОТЕКОЙ ЖКИ...   Aug 31 2008, 19:39
|- - rezident   Цитата(Зверюга @ Sep 1 2008, 01:39) Госпо...   Aug 31 2008, 21:16
|- - sKWO   Цитата(Зверюга @ Aug 31 2008, 22:39) Code...   Sep 1 2008, 17:23
- - Зверюга   Вы не правы. Это наименее вероятная причина. Функц...   Sep 1 2008, 03:17
- - Cyber_RAT   замените для чистоты эксперимента функцию на асме ...   Sep 2 2008, 04:40
- - Зверюга   Цитатазамените для чистоты эксперимента функцию на...   Sep 2 2008, 05:20


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

 


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


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