|
АЦП в xmegaA |
|
|
|
Feb 2 2012, 13:00
|
Гуру
     
Группа: Свой
Сообщений: 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 другое значение. И возможно ли это.
|
|
|
|
|
Feb 2 2012, 17:47
|
Гуру
     
Группа: Свой
Сообщений: 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 преобразований А они косячные? Незаметил. Что у вас в качестве опоры? И какой разброс в результатах преобразования. Сколько виртуальных каналов используете?
|
|
|
|
|
Feb 3 2012, 14:38
|
Гуру
     
Группа: Свой
Сообщений: 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 - изучите и этот вариант ( не пробовал, но вроде должно отвечать вашим потребностям) Посмотрю. Спасибо, вдруг - оно.
|
|
|
|
|
Feb 3 2012, 15:53
|
Гуру
     
Группа: Свой
Сообщений: 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-бит АЦП с четерьмя параллельными каналами?
|
|
|
|
|
Feb 3 2012, 18:39
|
Гуру
     
Группа: Свой
Сообщений: 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). Интересно. А запуск следущего кто сделает и результат считает?
|
|
|
|
|
Feb 3 2012, 20:37
|
Гуру
     
Группа: Свой
Сообщений: 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 отсчётов за раз не получим? Только если все ДМА на это дело израсходовать. И то не уверен что получится...сложно как то...
|
|
|
|
|
Feb 4 2012, 02:29
|

Профессионал
    
Группа: Свой
Сообщений: 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 имеет смысл только в том случае, если вы хотите четкую временную привязку результатов измерений (например, для оцифровки и последующей цифровой фильтрации)
|
|
|
|
|
Feb 4 2012, 07:27
|
Частый гость
 
Группа: Свой
Сообщений: 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 для каждого канала все равно надо.!!!
|
|
|
|
|
Feb 4 2012, 16:54
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471

|
Цитата(V_G @ Feb 4 2012, 14:07)  Это уже следующий уровень после того, как врубишься в работу pipeline ADC. MUX вручную (или через DMA, можно еще поковыряться в мануале) при этом требуется менять в 4 раза реже, причем на каждый канал нужно иметь только 2 настройки MUX. Запустил сразу 4 канала на единичное преобразование, после получения результата поменял настройки всех каналов, и следующие 4 входа снова обрабатываешь параллельно. Не пробовали подключить 4 канала к одному выводу ???!! Результат получается разный. Разница в 3-4 единички последнего разряда.!!!! Если конечно потом охота калибровать каждый канал.......
|
|
|
|
|
Feb 4 2012, 18:51
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(bob1 @ Feb 4 2012, 18:54)  Не пробовали подключить 4 канала к одному выводу ???!! Результат получается разный. Разница в 3-4 единички последнего разряда.!!!! Если конечно потом охота калибровать каждый канал....... А что это может дать? Цитата(bob1 @ Feb 4 2012, 18:54)  Разница в 3-4 единички последнего разряда.!!!! У меня разброс результата гораздо больше. Какие у вас настройки предделителя и опоры? Цитата(V_G @ Feb 4 2012, 04:29)  Еще раз настаиваю на вдумчивом чтении мануала, в частности, п. 25.4 ADC Сhannels. С этим согласен... Цитата(V_G @ Feb 4 2012, 04:29)  Каждый канал - это сочетание состояния MUX и ячеек результата. Таким образом, переключение каналов - это и переключение MUX. Не понял...поясните Цитата(V_G @ Feb 4 2012, 04:29)  А если вы все 4 канала запускаете во free running mode, они постоянно обновляют свои ячейки результата, переключая за вас MUX. Обновляют результат - согласен. Переключают MUX - каким образом? Цитата(V_G @ Feb 4 2012, 04:29)  Отказываться от free running mode имеет смысл только в том случае, если вы хотите четкую временную привязку результатов измерений (например, для оцифровки и последующей цифровой фильтрации) Абсолютная точность (до такта) не нужна, допустимо +-5 мкс.
|
|
|
|
|
Feb 4 2012, 20:51
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471

|
Цитата(_Артём_ @ Feb 5 2012, 00:51)  А что это может дать? У меня разброс результата гораздо больше. Какие у вас настройки предделителя и опоры? Это я к тому, что 4 разных канала одного АЦП оцифровывают одно и тоже напряжение по разному!!!! Это дополнительная погрешность! На мой взгляд целесообразнее в вашем случае использовать 1 канал!! Разброс 3-4 ед. получен в режиме Idle . Внутр.опора 1В. Частота тактирования Ацп 500кГц. Поэтому и предложил накопить результат в RAM (контроллер при ацп будет в режиме idle) , а потом обработать его. Цитата(_Артём_ @ Feb 5 2012, 00:51)  Обновляют результат - согласен. Переключают MUX - каким образом? Программно. Измерили 4 вывода. Поменяли разряды MUX. Потом опять измерили. В этом варианте при измерениях контроллер тоже можно загнать в режим IDLE.
|
|
|
|
|
Feb 4 2012, 21:15
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(bob1 @ Feb 4 2012, 22:51)  Это я к тому, что 4 разных канала одного АЦП оцифровывают одно и тоже напряжение по разному!!!! Это дополнительная погрешность! Ну АЦП меги шумит, что делать. 3-4 единицы - это ерунда (у меня был разброс 50 (непомню от какой опоры), и ~30 от опоры на внешнем порту). Видимо очень ранняя ревизия кристала. Idle как-то не хочется, так как задача далеко не единственная. Цитата(bob1 @ Feb 4 2012, 22:51)  Измерили 4 вывода. Поменяли разряды MUX. Меняете с частотой 500кГц/4? Цитата(bob1 @ Feb 4 2012, 22:51)  В этом варианте при измерениях контроллер тоже можно загнать в режим IDLE. Idle сильно точность повышает?
|
|
|
|
|
Feb 4 2012, 22:34
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471

|
Цитата(_Артём_ @ Feb 5 2012, 03:15)  Меняете с частотой 500кГц/4? Idle сильно точность повышает? Делим на 8. Через 8 тактов в АЦП результат получается. Менять раньше MUX наверно тоже можно. Напряжение должно захлопнуться на внутреннем конденсаторе. Тут надо в железе попробовать.... Точность в разных режимах не проверял. Нужно было оцифровать 1 сигнал. Меня не устроил результат полученный внутренним АЦП. Поставил внешнее!!! Цитата(V_G @ Feb 5 2012, 04:15)  Тут много доп. вводных, в частности, скорость изменения входного сигнала, оцифровка-то ведь все равно последовательная! Плюс выбор тактовой АЦП. Плюс особые требования к разводке платы для 12-разрядного АЦП. Ну а уж потом - глюки АЦП. Кстати, 3-4 единички в 12-разрядном АЦП - это стояние колом на стандартном 10-разрядном! Тактовая 500кГц. Пробовал еще уменьшать. Лучше не стало. Напряжение постоянное пробовал. RC цепочка почти на выводах АЦП.
Сообщение отредактировал bob1 - Feb 4 2012, 22:40
|
|
|
|
|
Feb 4 2012, 23:02
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(bob1 @ Feb 5 2012, 00:34)  Менять раньше MUX наверно тоже можно. Менять до завершения преобразования? Цитата(bob1 @ Feb 5 2012, 00:34)  Точность в разных режимах не проверял. Нужно было оцифровать 1 сигнал. Меня не устроил результат полученный внутренним АЦП. Поставил внешнее!!! У меня получалось что нормальные результаты получались при делителе начиная от 32-64, до этого чёрти что. Цитата(bob1 @ Feb 5 2012, 00:34)  Тактовая 500кГц. 500кГц - тактирование ядра?
|
|
|
|
|
Feb 4 2012, 23:31
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471

|
Цитата(_Артём_ @ Feb 5 2012, 05:02)  Менять до завершения преобразования? 500кГц - тактирование ядра? Да. 500кГц тактирование АЦП.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|