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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 14.08.2018, 17:24   #1
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 55
Вес репутации: 130/23
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
Сообщений: 1,938
Вес репутации: 3528/78
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
Сообщений: 55
Вес репутации: 130/23
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
Сообщений: 55
Вес репутации: 130/23
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
Сообщений: 1,938
Вес репутации: 3528/78
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
Сообщений: 55
Вес репутации: 130/23
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, 11:18   #7
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,938
Вес репутации: 3528/78
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
дойти до PR2 больше одного раза - и каждый раз по по переполнению pr2 Вы сможете спокойно инкрементировать переменную.
будет число периодов и показание IC.
besogon вне форума   Ответить с цитированием
Старый 15.08.2018, 11:27   #8
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 55
Вес репутации: 130/23
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от besogon Посмотреть сообщение
Lum1noFor
дойти до PR2 больше одного раза - и каждый раз по по переполнению pr2 Вы сможете спокойно инкрементировать переменную.
будет число периодов и показание IC.

О, и правда! Что-то я совсем туплю. А что скажете насчет моего способа?
Lum1noFor вне форума   Ответить с цитированием
Старый 15.08.2018, 12:01   #9
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,938
Вес репутации: 3528/78
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
А что скажете насчет моего способа? - навскидку сложный. не то что бы совсем уж, но мои скрюченные мозги предполагают, что там где-то засела сиделка.

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

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

как правило в каждом проекте есть крепкий баг, который там сидит до самого конца.





Насчет "сиделки" - это само собой . А насчет сложности - я, например, никогда не работал с DMA. Полез смотреть после Вашего совета - там черт ногу сломит. Пинг-понги какие-то... Изучать это, безусловно, надо, но сейчас я к этому морально не готов . Вот и горожу костыли из того, что хоть немного знаю.
Lum1noFor вне форума   Ответить с цитированием
Старый 15.08.2018, 12:28   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,375
Вес репутации: 3125/96
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от Lum1noFor Посмотреть сообщение
никогда не работал с DMA....там черт ногу сломит.
Вопрос в том, с каким разрешением нужно измерять скважность?
При длительности импульса в 400 нс и тактовой частоте МК 40 МГц (25 нс - системный тик), получается всего 400/25=16. То есть номинальное значение скважности - всего ЧЕТЫРЕ РАЗРЯДА.
Это я к тому, что увеличить разрешение можно будет только усреднением. Насчитать, например, 256 импульсов и получить еще 8 разрядов к разрешению. Итого уже 12. Хотя все зависит от скорости с которой нужно измерять.
Это я к тому, что усреднение требует накопления массива, а это удобно делать в ДМА.
Пинг-понг, к слову, Вам не нужен.
Марк вне форума   Ответить с цитированием
Старый 15.08.2018, 12:54   #12
Lum1noFor
Member
 
Регистрация: 25.12.2012
Сообщений: 55
Вес репутации: 130/23
Lum1noFor will become famous soon enoughLum1noFor will become famous soon enough
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от Марк Посмотреть сообщение
Вопрос в том, с каким разрешением нужно измерять скважность?
При длительности импульса в 400 нс и тактовой частоте МК 40 МГц (25 нс - системный тик), получается всего 400/25=16. То есть номинальное значение скважности - всего ЧЕТЫРЕ РАЗРЯДА.

Спасибо за ответ! Точности в 25 наносекунд мне хватает, больше смысла нет. Основная задача такова, чтобы не пропускать импульсы, скважность которых меньше 1000. То есть контроллер здесь выступает в роли "фильтра", который пропускает через себя импульсы с определенной скважностью (само собой с некоторым смещением фазы выходного сигнала, ибо на обработку уйдет какое-то время).



Один мой знакомый посоветовал такой способ: измерить только длительность импульса, записать ее в переменную, умножить на 1000. Затем тупо записать получившееся число в период таймера. Все! Проблема решена!


Кстати, по поводу DMA: может, кто знает какую литературу на русском языке по этой теме? На английском читать могу, но довольно посредственно.

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

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

Также, чтобы не вводить людей в заблуждение, извиняюсь за это сообщение. Оказывается, я неправильно посчитал FOSC/2 - забыл, что я использовал PLL. Таймер работает правильно, это была моя ошибка.
Lum1noFor вне форума   Ответить с цитированием
Старый 15.08.2018, 16:41   #14
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,375
Вес репутации: 3125/96
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Input Capture - dsPIC33FJ128GP204

Цитата:
Сообщение от Lum1noFor Посмотреть сообщение
по поводу DMA
По поводу ДМА вообще на русском полно информации.
Дело в том, что в конкретной платформе МК есть конкретная реализация ДМА, то есть нужен референсный мануал (раздел ДМА) на этот контроллер, а не вообще что нибудь на русском.
Да и там все достаточно просто.
Источник (приемник) данных в ОЗУ (адрес начала массива).
Источник (приемник) данных в периферии (адрес регистра периферии)
Источник реквестов (код устройства откуда ДМА получает событие по которому происходят отдельные транзакции)
Количество транзакций за сессию (счетчик ДМА)
Ну и регистр настроек ДМА со всякими мелочами типа режима циклический-одноразовый, конфигурации буферов (пинг-понг), стартовый бит и т.п.

Последний раз редактировалось Марк; 15.08.2018 в 16:47.
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 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, время: 23:39.


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