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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 02.03.2020, 13:04   #1
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Внешняя АЦП с параллельным интерфейсом

Приветствую колееги!
Делаю сейчас проект на PIC32MZ2048EFH, для которого понадобилась внешняя АЦП (точнее - две). План у меня был такой: использовать внешнюю 12-ти битную дуальную АЦП с параллельным интерфейсом, подключить их к двум разным портам, клочить АЦП выведенным наружу поделенным системным клоком. И читать порты через ДМА в режиме нонстопа.

План сработал на 100%: при системном клоке 200МГц удалось поднять часоту оцифровки в 50 МС/с !

Но все работает идеально только на частоте клока в 50 МГц (т.е. четверть от системного клока - это часота работы ДМА). При снижении чатсоты начинают появляться дубли в оцифрованных значениях. Естественно, при частоте 25 МГц все значения дублируются (т.е. ДМА успевает прочитать порт два раза, пока сменится значение АЦП).

Собственно вопрос: можно ли как-то притормозить ДМА без снижения чатоты системного клока? Мне бы в идеале иметь частоту оцифровки 25МС/с без необходимости стирать дубли, тратя драгоценные циклы.

Заранее благодарен за все идеи!
DimaK вне форума   Ответить с цитированием
Старый 02.03.2020, 13:12   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,359
Вес репутации: 4510/98
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: Внешняя АЦП с параллельным интерфейсом

DimaK
без необходимости стирать дубли, тратя драгоценные циклы. - осуществлять транзакции по таймеру.
besogon на форуме   Ответить с цитированием
Старый 02.03.2020, 16:58   #3
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

О! А это идея!
DimaK вне форума   Ответить с цитированием
Старый 02.03.2020, 17:16   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,359
Вес репутации: 4510/98
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: Внешняя АЦП с параллельным интерфейсом

DimaK
если таймер жаль, то можно вывести на ножку частоту соединить с внешним прерыванием - осуществлять транзакции по фронту прерывания.
это все тоже настраивается.

есть еще вариант использовать clc как D-триггер и соорудить делитель частоты, если у Вас используется генератор.
besogon на форуме   Ответить с цитированием
Старый 02.03.2020, 18:43   #5
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Получается, передача из порта в память занимает 4 такта SYSCLK?
anatoly22 вне форума   Ответить с цитированием
Старый 02.03.2020, 19:20   #6
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,359
Вес репутации: 4510/98
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: Внешняя АЦП с параллельным интерфейсом

anatoly22
Получается, передача из порта в память занимает 4 такта SYSCLK? - по схеме для того, чтобы dma добралось до pbus4, к которой подключены порты ей надо пройти через системную шину - нет прямого подключения.

Вот и получается - 2 такта системной шины и 1 такт периферийной шины.
besogon на форуме   Ответить с цитированием
Старый 02.03.2020, 21:28   #7
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от besogon Посмотреть сообщение
anatoly22
Получается, передача из порта в память занимает 4 такта SYSCLK? - по схеме для того, чтобы dma добралось до pbus4, к которой подключены порты ей надо пройти через системную шину - нет прямого подключения.

Вот и получается - 2 такта системной шины и 1 такт периферийной шины.
И узнать об этом можно только эмпирически? нигде о времянках дма не написано, или я плохо искал...
anatoly22 вне форума   Ответить с цитированием
Старый 02.03.2020, 21:58   #8
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Да, узнать можно только имперически, к сожалению. По крайней мере я такой информации нигде не нашел. У серии МХ 8 циклов занимает ДМА-транзакция.
DimaK вне форума   Ответить с цитированием
Старый 02.03.2020, 21:59   #9
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от besogon Посмотреть сообщение
DimaK
если таймер жаль, то можно вывести на ножку частоту соединить с внешним прерыванием - осуществлять транзакции по фронту прерывания.
это все тоже настраивается.

есть еще вариант использовать clc как D-триггер и соорудить делитель частоты, если у Вас используется генератор.
Да нет, таймера не жаль. Я именно так и думал - по фронту прерываний. Но плату пришлось бы переделывать, а не хотелось бы... Вариант с таймером, наверное, идеальный для меня.
DimaK вне форума   Ответить с цитированием
Старый 02.03.2020, 22:11   #10
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от DimaK Посмотреть сообщение
Приветствую колееги!
Делаю сейчас проект на PIC32MZ2048EFH, для которого понадобилась внешняя АЦП (точнее - две). План у меня был такой: использовать внешнюю 12-ти битную дуальную АЦП с параллельным интерфейсом, подключить их к двум разным портам, клочить АЦП выведенным наружу поделенным системным клоком. И читать порты через ДМА в режиме нонстопа.
!
Не может ли возникнуть такая ситуация, когда дма читает порт и ацп выводит новые данные? неопределенное состояние порта в момент чтения.
anatoly22 вне форума   Ответить с цитированием
Старый 02.03.2020, 23:02   #11
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Вот я боялся этого, но такого на деле не происходит. Скорее всего, непосредственное чтение порта происходит не сразу. Т.е. по приходу фронта АЦП выставляет значение на выходах, а ДМА проводит сначала какие-то служебные дела (типа проверки шины) и лишь на 2-й или 3-й тик считывает порты. Образуется такая естественная задержка в 10-15 нс.
DimaK вне форума   Ответить с цитированием
Старый 02.03.2020, 23:12   #12
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Как вы проверяете валидность данных, может где-то теряются биты? Это все очень неопределенно и может зависеть от разных факторов. А какое ацп у вас?
anatoly22 вне форума   Ответить с цитированием
Старый 03.03.2020, 09:05   #13
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

АЦП я взял серии LTC2291. Валидировал данные я чисто практически - запускал на вход от генератора синусоиду 1МГц, модулированную всякими причудливыми сигналами, снимал в дебагере массив и строил картинку в эксэле Умнее ничего придумать не смог. На сколько удалось установить - данные не теряются, ни единого промаха не было, сигнал восстанавливался один-в-один. Если только совсем уж младшие разряды трепыхались....
DimaK вне форума   Ответить с цитированием
Старый 03.03.2020, 22:31   #14
anatoly22
Junior Member
 
Регистрация: 23.11.2015
Возраст: 51
Сообщений: 14
Вес репутации: 145/18
anatoly22 will become famous soon enoughanatoly22 will become famous soon enough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Круто. Я давно хотел так сделать, но что то меня терзали смутные сомнения. Вот вы их и развеяли...
anatoly22 вне форума   Ответить с цитированием
Старый 03.03.2020, 23:00   #15
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Рад помочь!
DimaK вне форума   Ответить с цитированием
Старый 17.03.2020, 19:07   #16
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Вообщем попробовал я оба способа активации транзакции ДМА - и по таймеру и по внешнему прерыванию (тупо завел клок АЦП на вход прерывания). Оно работает, конечно, но хоть убейся не могу получить исконные 25 МГц (коими тактирую АЦП) - получается вдвое меньше! Не могу понять почему, скорее всего флаг прерывания криво сбрасывается или тупо по прерываниям ДМА срабатывает медленнее...
DimaK вне форума   Ответить с цитированием
Старый 18.03.2020, 06:02   #17
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,548
Вес репутации: 790/51
SergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to behold
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

вопрос... если считываем одно значение за одно измерение, то зачем вообще DMA нужен?
а ежели в прерывании inadc сделать?
или там процу некогда курить?
по сути- надо прочитать и куда то записать слово, а не массив... если вставку на ASM сделать, то ИМХО- быстрее будет, чем с помощью дма по одному слову пересылать.
SergP01 вне форума   Ответить с цитированием
Старый 18.03.2020, 06:29   #18
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,548
Вес репутации: 790/51
SergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to behold
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от DimaK Посмотреть сообщение
Вообщем попробовал я оба способа активации транзакции ДМА - и по таймеру и по внешнему прерыванию (тупо завел клок АЦП на вход прерывания). Оно работает, конечно, но хоть убейся не могу получить исконные 25 МГц (коими тактирую АЦП) - получается вдвое меньше! Не могу понять почему, скорее всего флаг прерывания криво сбрасывается или тупо по прерываниям ДМА срабатывает медленнее...
тут может быть ещё и приоритеты системной шины.
ИМХО, дма не может отодвинуть проц в сторонку
SergP01 вне форума   Ответить с цитированием
Старый 21.03.2020, 21:34   #19
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от SergP01 Посмотреть сообщение
вопрос... если считываем одно значение за одно измерение, то зачем вообще DMA нужен?
а ежели в прерывании inadc сделать?
или там процу некогда курить?
по сути- надо прочитать и куда то записать слово, а не массив... если вставку на ASM сделать, то ИМХО- быстрее будет, чем с помощью дма по одному слову пересылать.
Тут речь идет о внешней АЦП, а не внутренней. ДМА нужен, т.к. частота оцифровки - 25 МС/с, т.е. каждую микросекунду надо сохранять 25 12-ти битных значения. Да и процу во время дискретизации есть чем занятся...
DimaK вне форума   Ответить с цитированием
Старый 21.03.2020, 22:13   #20
SergP01
Senior Member
 
Аватар для SergP01
 
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 1,548
Вес репутации: 790/51
SergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to beholdSergP01 is a splendid one to behold
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Цитата:
Сообщение от DimaK Посмотреть сообщение
Тут речь идет о внешней АЦП, а не внутренней. ДМА нужен, т.к. частота оцифровки - 25 МС/с, т.е. каждую микросекунду надо сохранять 25 12-ти битных значения. Да и процу во время дискретизации есть чем занятся...
дык, разницы никакой.... ДМА- шина камня нужна... а камень её будет периодически отодвигать.
а вот отдельный камень только для АЦП...
SergP01 вне форума   Ответить с цитированием
Старый 25.03.2020, 17:26   #21
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,359
Вес репутации: 4510/98
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: Внешняя АЦП с параллельным интерфейсом

DimaK
пробовали частоту периферийной шины повышать?
besogon на форуме   Ответить с цитированием
Старый 26.06.2020, 12:53   #22
DimaK
Member
 
Регистрация: 11.04.2016
Адрес: Пфорцхайм, Германия
Возраст: 35
Сообщений: 78
Вес репутации: 323/19
DimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the roughDimaK is a jewel in the rough
По умолчанию Re: Внешняя АЦП с параллельным интерфейсом

Так, уважаемые, я продвинулся в данном вопросе далеко вперед. Думаю - кому-то будет интересно. Итак, сначала о возможностях:
1. PIC32MZ с частотой системного клока 200МГц может работать с внешней АЦП (параллельный интерфейс) со скоростью 50 МС/сек
2. Разрядность в моем случае - 12 бит, возможно и больше - ограничено кол-вом свободных ног.
3. Так же возможна работа ПАРАЛЛЕЛЬНО двух каналов АЦП с частотой 25 МС/сек, правда с некоторыми хитростями.

Теперь о том, как я этого добился.
ДМА было сконфигурировано на чтение из порта, размер транзакции 2 байта (т.е. ширина порта), размер блока был равен кол-ву точек, которые нужно было дискретизировать. В моем случае это было параметром, который вычислялся исходя из интервала оцифровки. Например, если нужно оцифровать 150 мкс, то при 50 МС/сек получаем размер блока в 7500 транзакций (каждая по 2 байта).
ДМА стартовал вручную, при этом включался выход внешнего клока, которым и тактировалось АЦП (1/4 от системного). Фокус в том, что этот самый клок синхронен с системным и на каждую транзакцию ДМА (а в такой конфигурации это 1/4 от системного клока) мы имеем на выходе АЦП новое значение. Когда блок передан срабатывает интеррапт и по нему отключается выход клока, вырубается АЦП. Данные лежат в массиве.

Примечание: т.к. у меня используется также и Ethernet, часть пинов порта оказалась недоступной. Т.е. мне не удалось соединить некоторые пины шины напрямую с битами порта. Поэтому в массиве данных пришлось поменять местами некоторые биты....

Проблема такого способа в том, что клок АЦП должен быть ровно 1/4 от системного, иначе ДМА и АЦП будут работать не синхронно. Правда, можно работать на кратной частоте - к примеру, на 25 МГц системного клока, хотя в этом случае все значения будут продублированы (ДМА успеет дважды считать выход АЦП, прежде чем он изменит значение). Дубли можно, конечно, проигнорировать, но тогда нужно изначально выделять вдвое больше памяти.
Еще одна проблема: шина данных контроллера окупирована ДМА на все время приема и по сути, занять чем-то полезным ядро не получится. К тому же, если захочется подключить второй канал АЦП таким же образом, то параллельно они работать не смогут.
Попытки стартовать транзакцию 2 байт ДМА по событию (я пробывал и прерывания по таймеру и по приходу тактового импульса) привели к резкому падению частоты оцифровки - при таком раскладе она составляет максимум 1/8 клока. Т.е. 12.5 МС/сек, что было не приемлимо мало для меня. Правда, такая частота была достигнута при параллельной работе двух каналов АЦП.

Но мне удалось-таки добиться параллельной работы двух каналов АЦП на чатоте 25 МС/сек! Хитрость в том, что микросхема АЦП, которую я использовал (LTC2291), имеет пин мультиплексирования шин данных, т.е. если его соединить с клоком, то по фронту клока будет на выходе выставлятся первый канал, а по спаду - второй. В этом случае при клоке АЦП 25 МГц, ДМА считывает данные с частотой 50 МГц, нужно только как-то разделить каналы в массиве - они, естественно, через один, но в случайном порядке. Т.е. одну реализацию - все четные элементы массива - это канал 1, а нечетные - 2, а в следующей реализации - все наоборот. Для этого я применил такой трюк: в порт МК, на котором висела шина данных, вывел также клок АЦП. Тогда распознавание сводилось к анализу бита 14 (в моем случае) в ОДНОМ элементе массива (например, в нулевом) - если там ноль - то канал 2 во всех четных элементах, если "1" - то там канал 1 во всех четных элементах. Т.е. оценивается состояние клока в момент считывания данных. Дополнительный плюс такого метода - это уменьшение кол-ва потребных пинов МК (12, а не 24) и как следствие - более простая разводка.

Может быть я все сделал не так или изобрел велосипед - тем более будет интересно почитать ваши комменты.
DimaK вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Измерение АЦП PIC24 по каналам RA1,RA2,RA3? Anton_1000 Продукция MICROCHIP 15 08.07.2013 19:30
помогите новичку разобраться с АЦП reg33 Вопросы начинающих 43 10.04.2013 22:05
Помогите запустить АЦП PIC18f26k22 retro55 Продукция MICROCHIP 35 13.02.2013 09:46
АЦП в PIC24H, какое-то смещение уровня, помогите! Максим2008 Продукция MICROCHIP 2 04.06.2010 09:39
АЦП в pic12F675, АЦП начинает работать с 1.8 вольта trubka_u Продукция MICROCHIP 21 02.01.2009 04:23


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


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