Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 14.08.2018, 17:24   #1
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Input Capture - dsPIC33FJ128GP204

Здравствуйте. Проблема классическая, но нестандартная. Возникла необходимость измерения скважности входного сигнала с такими параметрами: длительность импульса 400 нс, период 1 мс. Вроде все понятно: быстрый МК с PLL, который умеет обнаруживать все фронты модулем Input Capture, три точки в IC1BUF, затем математические операции... если бы не одно НО, с которым я столкнулся уже после того, как купил контроллеры dsPIC33FJ128GP204. В даташите есть сноска, где сказано, что в режиме захвата каждого фронта (нарастающего и спадающего) биты выбора количества прерываний (по первому событию захвата, по второму, шестнадцатому e.t.c.) не работают! То есть прерывание ВСЕГДА генерируется по ЛЮБОМУ событию захвата. Алгоритм проблемы такой: обнаруживается фронт, генерируется прерывание с всегда одним и тем же кодом. В прерывании считывается IC1BUF, который после одного считывания всегда будет пустой. То есть я не могу за одно прерывание считать одновременно три точки, так как для этого нужно было бы, чтобы одно прерывание генерировалось после трех событий захвата, когда в IC1BUF уже накопилось три занятых уровня. Пробовал делать костыль в виде индикаторной переменной, которая показывала, сколько прерываний случилось, но на обработку этого костыля тратилось слишком много времени, и МК не успевал выйти из прерывания до возникновения следующего события захвата. Прошу помощи, уже бошка не варит. Если необходим листинг, предоставлю, но, думаю, проблема понятна. Заранее спасибо всем за ответы.
Lum1noFor вне форума   Ответить с цитированием
Старый 14.08.2018, 18:13   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,099
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Lum1noFor
существует DMA.
можно использовать два IC, на которые завести один сигнал.
один будет на один фронт - второй на второй.
besogon вне форума   Ответить с цитированием
Старый 14.08.2018, 18:17   #3
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от besogon Посмотреть сообщение
Lum1noFor
существует DMA.
можно использовать два IC, на которые завести один сигнал.
один будет на один фронт - второй на второй.

А ведь может получиться, спасибо! Попробую! Если есть еще варианты, с удовольствием выслушаю!
Lum1noFor вне форума   Ответить с цитированием
Старый 14.08.2018, 19:31   #4
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

А если использовать Gated Timer? Какая минимальная длительность интервала, который я могу померить с помощью него (я попробовал, но меньше 800 нс у меня померить не получилось - может, я где ошибся)?
Lum1noFor вне форума   Ответить с цитированием
Старый 15.08.2018, 10:07   #5
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,099
Вес репутации: 3977/85
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Lum1noFor
по моему опыту с помощью input capture проще всего мерить.
код прямее получается.
besogon вне форума   Ответить с цитированием
Старый 15.08.2018, 10:54   #6
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от besogon Посмотреть сообщение
Lum1noFor
по моему опыту с помощью input capture проще всего мерить.
код прямее получается.

Спасибо Вам за Ваши советы! Но если использовать только Input Capture, то вылезает следующая проблема: у меня период сигнала более чем в 1000 раз превышает длительность импульса. То есть если я включу предделитель таймера, привязанного к IC1, чтобы измерить период большой длительности, тогда я сильно потеряю в измерении точности длительности самого импульса. А если не включу - тогда при измерении периода таймер успеет дойти до PR2 больше одного раза, и на выходе будет белиберда (то есть период будет равен (PR2-t1)+PR2*n+t2, где n - неизвестно; вроде так, если не ошибся).



Я хотел попробовать такой метод, хотелось бы знать Ваше мнение:
Я настраиваю IC1 для захвата только нарастающего фронта, с предделителем для измерения большого периода сигнала, и настраиваю Gate Timer. Параллелю входы захвата и таймера. При появлении первого нарастающего фронта одновременно срабатывает первое событие захвата и запускается счет таймера. Когда появляется спадающий фронт импульса, таймер перестает считать и записывает свое значение в переменную. При этом вход захвата дожидается второго события захвата, то есть начало следующего периода (нарастающий фронт следующего импульса). Тогда я смогу нормально содрать две точки из IC1BUF и найти период. А потом я делю то, что получилось в таймере на разницу точек из IC1BUF и нахожу мою искомую скважность. Что думаете о таком варианте?

Последний раз редактировалось Lum1noFor; 15.08.2018 в 11:10.
Lum1noFor вне форума   Ответить с цитированием
Старый 15.08.2018, 13:16   #7
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 61
Вес репутации: 130/25
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от Lum1noFor Посмотреть сообщение
А если использовать Gated Timer? Какая минимальная длительность интервала, который я могу померить с помощью него (я попробовал, но меньше 800 нс у меня померить не получилось - может, я где ошибся)?

Также, чтобы не вводить людей в заблуждение, извиняюсь за это сообщение. Оказывается, я неправильно посчитал FOSC/2 - забыл, что я использовал PLL. Таймер работает правильно, это была моя ошибка.
Lum1noFor вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC24 Input Capture - модуль захвата в 32-х битном режиме SerjT Продукция MICROCHIP 0 21.08.2015 10:46
dapic33EP Input Capture jammer Вопросы начинающих 0 01.05.2014 18:41
Input Capture with Dedicated Timer SergeyKN Продукция MICROCHIP 5 19.10.2011 13:11
MPLAB не находит c018i.o qwerty1 Продукция MICROCHIP 45 22.04.2011 12:14
32-битный Input Capture LeoN Продукция MICROCHIP 5 25.12.2007 12:36


Часовой пояс GMT +3, время: 19:18.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot