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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> АЦП в xmegaA
_Артём_
сообщение Jan 31 2012, 23:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Задача такая нужно оцифровывать все каналы АЦП А и B поочереди, например сначала каналы 0-3, затем 4-7 и так по циклу. Очевидный вариант: по прерыванию АПЦ считывать значения, устанавливать новые значения MUX и запуск след. преобразования.
Какие есть способы сделать оцифровку, минимально используя процессор? Можно как-то задействовать ДМА или систему событий и разгрузить ЦПУ? Или такой возможности нет.
Спасибо.
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 2 2012, 11:18
Сообщение #2


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

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Через прерывания нерационально!!! ДЛя одного канала АЦП делал так. Все работает в режиме IDle.
1. Счетчик через систему событий запускает Каналы 0-3 Ацп.
2. DMA настраиваем на передачу по 8 бит в ОЗУ(RAM) по команде от 3 или 2 канала АЦП.
По аналогии можно думаю сделать и для двух АЦП.
Успехов!!


Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 2 2012, 13:00
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Feb 2 2012, 13:18) *
Через прерывания нерационально!!!

Конечно нерационально, потому и спрашиваю.

Цитата(bob1 @ Feb 2 2012, 13:18) *
1. Счетчик через систему событий запускает Каналы 0-3 Ацп.
2. DMA настраиваем на передачу по 8 бит в ОЗУ(RAM) по команде от 3 или 2 канала АЦП.
По аналогии можно думаю сделать и для двух АЦП.


Проблема в том как загрузить в MUX другое значение. И возможно ли это.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Feb 2 2012, 17:12
Сообщение #4


Мастер-фломастер
****

Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700



Может поможет...
недавно у себя делал так...
дма работает на буфер передача 128+ N преобразований
по прерыванию с дма обрабатываю массив полученных данных
переключаю мукс на другой канал...
Феничка в том , что не заморачиваюсь с косячными преобразованиями при переключениями мультиплексора АЦП - просто пропускаю эти N преобразований в начале буфера и работаю только с актуальными данными.. (обычно N при F=32 мгц и Fadc = F/64 это 4- подбиралось опытным путем)


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 2 2012, 17:47
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Kovrov @ Feb 2 2012, 19:12) *
дма работает на буфер передача 128+ N преобразований
по прерыванию с дма обрабатываю массив полученных данных
переключаю мукс на другой канал...

массив 128*sizeof(unsigned short)? Много занимает, однако.

Цитата(Kovrov @ Feb 2 2012, 19:12) *
переключаю мукс на другой канал...

То есть переключать можно только вручную (периферия не может переключить)?
Это и плохо...

Цитата(Kovrov @ Feb 2 2012, 19:12) *
Феничка в том , что не заморачиваюсь с косячными преобразованиями при переключениями мультиплексора АЦП - просто пропускаю эти N преобразований

А они косячные? Незаметил.
Что у вас в качестве опоры? И какой разброс в результатах преобразования.
Сколько виртуальных каналов используете?

Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 3 2012, 02:52
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Читайте мануал.
В версии мануала от 12/09 на с 299 (п.25.9.6) - пример работы 4 каналов в free running mode без всяких прерываний, просто достаете измеренные значения из памяти нужных каналов
Другой вариант - п. 25.16.4 - настройка регистра EVCTRL на Sweep Channels - изучите и этот вариант ( не пробовал, но вроде должно отвечать вашим потребностям)

Сообщение отредактировал V_G - Feb 3 2012, 02:53
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 3 2012, 14:38
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(V_G @ Feb 3 2012, 04:52) *
Читайте мануал.
В версии мануала от 12/09 на с 299 (п.25.9.6) - пример работы 4 каналов в free running mode без всяких прерываний, просто достаете измеренные значения из памяти нужных каналов
Другой вариант - п. 25.16.4 - настройка регистра EVCTRL на Sweep Channels - изучите и этот вариант ( не пробовал, но вроде должно отвечать вашим потребностям)

free running mode недостаточно - нужно ещё MUX перегружать, и тут я не виду средств как это может быть сделано.

Цитата(V_G @ Feb 3 2012, 04:52) *
Другой вариант - п. 25.16.4 - настройка регистра EVCTRL на Sweep Channels - изучите и этот вариант ( не пробовал, но вроде должно отвечать вашим потребностям)


Посмотрю. Спасибо, вдруг - оно.
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 3 2012, 15:32
Сообщение #8


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

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



В MUX можете также грузить посредством DMA из оперативки. Кто мешает?!!??!!
Прога критична по времени?? Может можно обойтись 1 каналом!!

Сообщение отредактировал bob1 - Feb 3 2012, 15:33
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 3 2012, 15:53
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Feb 3 2012, 17:32) *
В MUX можете также грузить посредством DMA из оперативки.

Как?
Буду искать...

Цитата(bob1 @ Feb 3 2012, 17:32) *
Кто мешает?!!??!!

Нужно грузить не просто MUX, а четыре MUX.

Цитата(bob1 @ Feb 3 2012, 17:32) *
Прога критична по времени??

Критична - много команд получается.

Цитата(bob1 @ Feb 3 2012, 17:32) *
Может можно обойтись 1 каналом!!

Тогда уже некритична, но результат медленный (не удовлетворяет TЗ)

Цитата(bob1 @ Feb 3 2012, 17:32) *
Может можно обойтись 1 каналом!!

Давайте может тогда на бейсике писать будем, получим 1 8-битный отсчёт в секунду и хватит?
Зачем тогда 12-бит АЦП с четерьмя параллельными каналами?
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 3 2012, 18:01
Сообщение #10


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

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Было проще общаться было бы тех задание или хотя бы скорость опроса !!???
Насчет MUx погорячился!! Адреса регистров 4 MUX идут не один за другим и продеться использовать 4 канала DMA.
Если использовать 1 канал АЦП, то MUX этого канала можно изменить.( совпадение (переполнение) в счетчике через канал событий инициирует передачу через DMA из ячеек RAM в 1 регистр MUX).


Сообщение отредактировал bob1 - Feb 3 2012, 18:01
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 3 2012, 18:39
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Feb 3 2012, 20:01) *
Было проще общаться было бы тех задание или хотя бы скорость опроса !!???

Вродь в первом посте ТЗ.
Скорость оцифровки 16-20 кГц.
Ещё можно тут посмотреть (тема по сути таже): АЦП?С++


Цитата(bob1 @ Feb 3 2012, 20:01) *
Насчет MUx погорячился!!

Похоже на то.

Цитата(bob1 @ Feb 3 2012, 20:01) *
Адреса регистров 4 MUX идут не один за другим и продеться использовать 4 канала DMA.

Так ДМА не напасёшься (хотя и не исплользую из, но жалко отдавать сразу все).

Цитата(bob1 @ Feb 3 2012, 20:01) *
Если использовать 1 канал АЦП, то MUX этого канала можно изменить.( совпадение (переполнение) в счетчике через канал событий инициирует передачу через DMA из ячеек RAM в 1 регистр MUX).

Интересно.
А запуск следущего кто сделает и результат считает?

Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 3 2012, 19:30
Сообщение #12


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

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Скорость небольшая!!
1 канал DMa настраиваем на запуск скажем от переполнения счетчика. Он будет передавать по 2 байта из RAM сначала в регистр MUX и потом регистр CTRL и тем самым запустит начало преобразования. В RAM лежат 16 байт. Это 8 значений для MUX и 8 значений для регистра CTRL. Их положить через один. По передачи 16 байт сделать , чтобы адрес принял начальное значение. Счетчик каждый раз переполняясь запустит DMA, а тот по очереди АЦП для 8 разных выводов.
2 канал DMA настраиваем на запуск от АЦП канал СH0. Канал DMA будет передавать значения АЦП( по 2байта) в RAM.

Сообщение отредактировал bob1 - Feb 3 2012, 19:48
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Feb 3 2012, 20:37
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(bob1 @ Feb 3 2012, 21:30) *
Скорость небольшая!!


Ничего себе небольшая: если программно делать, то загрузка меги 20-30 % на 29,5 МГц.


Цитата(bob1 @ Feb 3 2012, 21:30) *
1 канал DMa настраиваем на запуск скажем от переполнения счетчика. Он будет передавать по 2 байта из RAM сначала в регистр MUX и потом регистр CTRL и тем самым запустит начало преобразования. В RAM лежат 16 байт. Это 8 значений для MUX и 8 значений для регистра CTRL. Их положить через один. По передачи 16 байт сделать , чтобы адрес принял начальное значение. Счетчик каждый раз переполняясь запустит DMA, а тот по очереди АЦП для 8 разных выводов.
2 канал DMA настраиваем на запуск от АЦП канал СH0. Канал DMA будет передавать значения АЦП( по 2байта) в RAM.

Но используется 1 виртуальный канал? 8 отсчётов за раз не получим?
Только если все ДМА на это дело израсходовать.
И то не уверен что получится...сложно как то...
Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 4 2012, 02:29
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(_Артём_ @ Feb 4 2012, 00:38) *
free running mode недостаточно - нужно ещё MUX перегружать, и тут я не виду средств как это может быть сделано.

Еще раз настаиваю на вдумчивом чтении мануала, в частности, п. 25.4 ADC Сhannels. Каждый канал - это сочетание состояния MUX и ячеек результата. Таким образом, переключение каналов - это и переключение MUX. А если вы все 4 канала запускаете во free running mode, они постоянно обновляют свои ячейки результата, переключая за вас MUX. Отказываться от free running mode имеет смысл только в том случае, если вы хотите четкую временную привязку результатов измерений (например, для оцифровки и последующей цифровой фильтрации)
Go to the top of the page
 
+Quote Post
bob1
сообщение Feb 4 2012, 07:27
Сообщение #15


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

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(_Артём_ @ Feb 4 2012, 01:37) *
Ничего себе небольшая: если программно делать, то загрузка меги 20-30 % на 29,5 МГц.
Но используется 1 виртуальный канал? 8 отсчётов за раз не получим?
Только если все ДМА на это дело израсходовать.
И то не уверен что получится...сложно как то...

8 отчетов за раз не получим. Опрос 8 выводов по кругу.
С 4 каналами можно получить скорость оцифровки 500кГц. У Вас на порядок меньше!!!
По поводу DMA --второй канал ( результат перекидывающий в RAM)можете не использовать. Программно считывать значения и обрабатывать их.
Итого получаем затраты 2 канала DMA на каждый АЦП (А и В) , 1 счетчик.
Что за виртуальный канал??


Цитата(V_G @ Feb 4 2012, 07:29) *
Еще раз настаиваю на вдумчивом чтении мануала, в частности, п. 25.4 ADC Сhannels. Каждый канал - это сочетание состояния MUX и ячеек результата. Таким образом, переключение каналов - это и переключение MUX. А если вы все 4 канала запускаете во free running mode, они постоянно обновляют свои ячейки результата, переключая за вас MUX. Отказываться от free running mode имеет смысл только в том случае, если вы хотите четкую временную привязку результатов измерений (например, для оцифровки и последующей цифровой фильтрации)

Так канала 4 и 4 MUX , а снимать результат нужно с 8 выводов. Переключать 1 раз MUX для каждого канала все равно надо.!!!
Go to the top of the page
 
+Quote Post

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

 


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


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