Обсуждаем контроллеры компании Atmel.
Ответить

ADC / DAC & AVR

Сб фев 16, 2019 18:57:45

Добрый день!
Возникла необходимость оцифровки и простенькой обработки звука на контроллере (несложный гитарный "процессор").
Хочется не так уж и много - возможность оцифровывать и отдавать на выход что то порядка 48k SPS с достаточной разрядностью.
В AVR, даташиты на которые я видел, есть встроенный ADC, 12-битный. В некоторых есть PWM, 8битный.

Но вот беда - достаточно медленные у них ацп. 15k - это максимум что я нашел.
Я думаю поставить внешние ADC / DAC, скажем, 16-битные и обсчитывать контроллером. Или же, использовать внешний ADC и R-2R в качестве DAC.

Обработка внутри контроллера вряд-ли будет очень сложная. Я даже думаю, что обойдусь табличным пересчетом.

Посему, портянка вопросов:
1. Может кто подсказать конкретные микросхемы \ семейства микросхем DAC\ADC для решения подобной задачи?
2. Может, есть какие то готовые схемотехнические решения?
3. Может, посмотреть в сторону других контроллеров (выбор пал на AVR только потому что у меня есть ISP программатор, а покупать PICKit или что то еще ради разового "паяния" - душит жаба). Но вдруг есть какое то идеальное решение, в общем накидайте мыслей, а я подумаю как реализовать.

На работе работаем с высокими материями - FPGA (Arria, Cyclone, Stratix, Kintex, Virtex Ultrascale, SoC'и) и DSP (TI67x, TI64x ..). А это - как простенький свой проект, но в силу ограниченности ресурсов контроллера и неимения большого опыта работы с ними, решил спросить у вас :)

Re: ADC / DAC & AVR

Вс фев 17, 2019 10:03:28

посмотрите на stm32.
у него есть и ацп и цап на кристалле.

Re: ADC / DAC & AVR

Вс фев 17, 2019 10:25:10

Вот кстати да. Если без отладчика, то СТМка программируется вообще по ЮАРТу. От ЮСБ через любой копеечный преобразователь в ТТЛ-уровни.
Минус СТМок для домашнего применения - шаг выводов 0.5 мм (вывод 0.25, зазор 0.25) - паять без маски надо аккуратно и не всякий ЛУТ красиво делает дороги 0,25.
Ну и 3.3 вольта питалово.
А остальное - сплошные плюсы по сравнению с народными атмегами

Re: ADC / DAC & AVR

Вс фев 17, 2019 17:56:50

Ну уж и не со всеми атмегаподобными...
MD-328D.pdf
(599.83 KiB) Скачиваний: 279

8)

Re: ADC / DAC & AVR

Пн фев 18, 2019 09:01:14

Может, посмотреть в сторону других контроллеров

пример на STM32F303:
https://www.instructables.com/id/Nucleo ... cts-Pedal/
автор использовал готовую плату Nucleo F303RE, код правда "made without any programming skills needed" тут:
https://github.com/Guitarman9119/Nucleo ... ects_Pedal

Re: ADC / DAC & AVR

Пн фев 18, 2019 10:36:47

Минус СТМок для домашнего применения - шаг выводов 0.5 мм (вывод 0.25, зазор 0.25) - паять без маски надо аккуратно и не всякий ЛУТ красиво делает дороги 0,25.

Я вот думаю - а как еще китайцы с Али не додумались продавать платки с распаянными СТМ и выведенными на края нормальными контактами, как в почивших в бозе микромодулях. https://serkov.su/blog/?p=622 Этакие недо-АрДуня.
Может, им подсказать? Исчезнет причина, сдерживающая применение СТМ у любителей и на мелких производящих фирмах.

Re: ADC / DAC & AVR

Пн фев 18, 2019 19:46:27

Jack_A писал(а):как еще китайцы с Али не додумались продавать платки с распаянными СТМ

Вагон переходников с TQFP-32-48-64-100 с различным шагом, в т.ч. и 0.5 мм под СТМ.
Изображение

Re: ADC / DAC & AVR

Пн фев 18, 2019 22:56:43

Спасибо за ответы!
Я еще в процессе выбора ...

Мм.. мне кажется, что связка ATMega128 + DAC \ ADC через i2c/spi должно взлететь.
Посему немного другой вопрос. Внешние микросхемы надо тактировать чем-то. И тут два варианта - сделать генератор частоты, от которого запитать мегу и цап \ ацп, или каким то образом снять системную частоту с ноги авр-ки или сгенерировать.

Может кто подсказать как лучше сделать? Может, есть схемы генераторов тактовой? Мне гдето встречалост. что можно фьюз-битом заставить контроллер выводить тактовую на ногу, но как я понял это только в случае с RC-генератором (я правда не очень вчитывался)...
Это больше вопрос общего плана - как тактировать несколько микросхем в случае с контроллерами.

Re: ADC / DAC & AVR

Пн фев 18, 2019 23:37:02

1. Как тактировать внешние МС - читайте в даташитах на них.
Тактовую на отдельный бит в 128 меге вывести фузами вроде бы нельзя (я в дш глянул сильно по диагонали).
Но никто не мешает на 8битном таймере в режиме СТС сваять "генератор". Тактировать мегу от кварца 16 МГц, а таймер пусть переключает свой выход при каждом совпадении значения счетчика с регистром сравнения.
При тактировании счетчика без делителя можно получить 4 мгц тактовую.
Если нужен ДШ на 128 мегу - англицкий и переведенный на русский - вот тут еще дня 4 будет доступен архив

Re: ADC / DAC & AVR

Вт фев 19, 2019 00:29:17

Спасибо за ответы!
Мм.. мне кажется, что связка ATMega128 + DAC \ ADC через i2c/spi должно взлететь.


Вы не с той стороны подходите к решению задачи.
I) Сначала определите, что такое "простенькая обработка звука на контроллере (несложный гитарный "процессор")."
Прямо возмите и напишите эти алгоритмы. Когда это сделаете, легко посчитаете, сколько операций (сложений/вычитаний/...) на каждый отсчет Вам необходимо.

II) Вы хотите 48K SPS и 16 бит. Зная "потребности" алгоритмов, сможете прикинуть, какая вичислительная мощность должна быть у Вашего микроконтроллера.

Из общих соображений ATMega128 i2c/spi + 16 бит @ 48KSPS - "не взлетит".
48K @ 16бит = 96Kbytes/sec поток (причем "голый", без накладных расходов)
16000000(число тактов в секунду у ATMega128)/96000=167тактов микроконтроллера на каждый байт потока. Для начала напишите обработчики прерываний SPI для приема/передачи данных без какой-либо обработки и прикиньте сколько тактов у Вас останется для "несложного гитарного "процессора"

Ну и SPI ADC/DAC 48K " 16 бит "в студию".

ЗЫ. 48K @ 16 bits - это вполне себе качественный звук, "железо" вполне стандартное:
Звуковой кодек (Audio CODEC) по I2S/PCM интерфейсу подключается к микроконтроллеру, управление кодеком (запись/чнение его регистров) как правило, по SPI/I2C.
Микроконтроллер с I2S/PCM интерфейсом с достаточной для алгоритмов обработки вычислительной мощностью.

Re: ADC / DAC & AVR

Вт фев 19, 2019 07:40:08

Сначала определите, что такое "простенькая обработка звука на контроллере (несложный гитарный "процессор")."
Прямо возмите и напишите эти алгоритмы. Когда это сделаете, легко посчитаете, сколько операций (сложений/вычитаний/...) на каждый отсчет Вам необходимо.


Я пока подбираю и присматриваюсь к деталям, запросы есть большие и маленькие )) Понятное дело, не Фурье считать. Под простенькой обработкой, как я писал выше, я понимаю табличный пересчет значений. Может, простая интерполяция линией. Если конкретнее - есть у меня диапазон входных напряжений, 16бит. Каждому соответствует такое же 16-битное число на выход. Для хранения этого массива нужно (2^16 * 2) байт, или 128 кбайт. Хоть я и выбрал мегу128 в первом приближении, ежу понятно, что слишком много памяти. Прорядим и интерполируем - 64кбайт, и операция ((arr[i] +arr[i-1]) >> 2). Я не думаю что ни это уйдет куча тактов (хотя я, само собой не считал еще).

Ну, или же например, delay / reverb. Но для него нужна оперативка побольше, возможно внешняя (я видел , что есть контроллеры с External memory Interface).

II) Вы хотите 48K SPS и 16 бит. Зная "потребности" алгоритмов, сможете прикинуть, какая вичислительная мощность должна быть у Вашего микроконтроллера.

По большому счету, можно немного урезать запросы, это я замахнулся "чтоб по максимуму". Если задумываться, верхняя нота на гитаре, ми третьей октавы - 1318,5Гц. Учитывая что нужно не только ее, а хотя бы на пару гармоник выше, пусть будет максимальная частота аналогового сигнала, которую нужно оцифровать, пусть будет 7кГц. по найквисту надо минимум в два раза выше дискретищацию, то есть 14кГц. Чтобы было совсем хорошо - 24/36/48. В принципе, 24kSPS должно хватить.


16000000(число тактов в секунду у ATMega128)

Хм. Наверное стоит взглянуть на камни в 20мГц, 328 ?

Ну и SPI ADC/DAC 48K " 16 бит "в студию".

"На глазок" пусть будут MAX195 / MAX 542. Но их не очень удобно будет паять, да и купить как я понимаю не так просто. Поэтому, возможно, я посмотрю в сторону 14-битных, или даже 12 битных, встроенный цап на контроллере точно не даст 24кSPS а это, как я думаю, важнее битности.


ЗЫ. 48K @ 16 bits - это вполне себе качественный звук, "железо" вполне стандартное:
Звуковой кодек (Audio CODEC) по I2S/PCM интерфейсу подключается к микроконтроллеру, управление кодеком (запись/чнение его регистров) как правило, по SPI/I2C.
Микроконтроллер с I2S/PCM интерфейсом с достаточной для алгоритмов обработки вычислительной мощностью.

А вы не могли бы в конкретную схему тыкнуть, или в даташиты? я посмотрю :)

Как я уже писал, я еще на уровне подбора элементов. И цель - чтобы была "некоторая свобода действий" в плане ограничений железа, но при этом обойтись максимально бюджетным вариантом (есть мысли сделать обработку на нескольких контроллерах, и это, по большому счету, тестовая плата)

Re: ADC / DAC & AVR

Вт фев 19, 2019 08:47:06

Ну, или же например, delay / reverb. Но для него нужна оперативка побольше, возможно внешняя (я видел , что есть контроллеры с External memory Interface)

Чен DRAM к тини26 прицепил, ногодрыг - есть delay, echo
http://elm-chan.org/works/vp/report.html

Re: ADC / DAC & AVR

Вт фев 19, 2019 08:54:22

Понятное дело, не Фурье считать. ... Ну, или же например, delay / reverb.

У Вас компьютер со звуковой картой есть? Он "умеет" 48KSPS @ 16 бит. Просто напишите свою "простенькую обработку" для компьютера (хоть в realtime, хоть для offline преобразования wav файла). Вам все равно это придется делать.
Или Вы хотите нарисовать схему, изготовить платы .... и убедиться, что это не будет работать?

"На глазок" пусть будут MAX195 / MAX 542. Но их не очень удобно будет паять, да и купить как я понимаю не так просто.


Еще ценник на них посмотрите.
И это вместо кодека за 2-3$.

,А вы не могли бы в конкретную схему тыкнуть, или в даташиты? я посмотрю :)

заходите на сайт любого производителя в раздел Audio Codecs и выбираете. Можно пойти и через удобный Вам магазин, там в раздел Audio Codecs. Я от Texas Instruments использовал.

PS.
24kSPS должно хватить.

А чего гадать? Запись гитары есть? Перекодируйте каким-нибудь звуковым редактором в 24KSPS и планируемой битностью и послушайте. Если Вас устроит - то вперед: Cо скоростью сэмлирования и битностью определились.

Хм. Наверное стоит взглянуть на камни в 20мГц, 328 ?

Это троллинг такой? 328-я всего на 25% быстрее, SRAM-а меньше, возможности подключить внешнюю память нету.

Я только примерно представляю, например, что такое ревебрация. Т.е. грубо: необходимо сложить текущий сигнал с несколькими задержанными, умноженными на коэффициенты затухания.

Вопросы: 1) Какую предисторию надо хранить? Из телефонии, грубо, если эхо менее 20мsec, то человеческое ухо практически не замечаете его. Следовательно, я предполагаю, что надо хранить гораздо большую предисторию (порядка секунды). Для определенности, будем считать, что предисторя: 500ms (хотя, мне кажется, этого мало). При 24KSPS это (0.5 сек) потребует 24 килобайта памяти. У 328ой меги всего 2K, т.е. грубо на 40 мсек. без учета переменных, стека... Какая ревебрация? Или пямять внешнюю ставить и дрыгать ногами? Тогда посчитайте, сколько тактов нужно, чтобы ногодрыгом считать/записать из внешней памяти.
2) Сколько точек предистории, участвует в формирование выходного сигнала?

Вот, например, один из алгоритмов (я его не советую, просто пример, чтобы можно было предметно говорить, а не абстрактно "несложный алгоритм"):
Изображение

На каждый отсчет требуется 30 умножений и 28 сложений. Для AVR известно длительность в тактах для всех комманд, вот и посчитайте.
Последний раз редактировалось viiv Вт фев 19, 2019 15:13:48, всего редактировалось 1 раз.

Re: ADC / DAC & AVR

Вт фев 19, 2019 12:58:53

Ну, или же например, delay / reverb. Но для него нужна оперативка побольше, возможно внешняя (я видел , что есть контроллеры с External memory Interface)

Чен DRAM к тини26 прицепил, ногодрыг - есть delay, еchо
http://elm-chan.org/works/vp/report.html


Благодарю, будет полезно

viiv писал(а):заходите на сайт любого производителя в раздел Audio Codecs и выбираете. Можно пойти и через удобный Вам магазин, там в раздел Audio Codecs. Я от Texas Instruments использовал.

А можно взглянуть на микросхему, которую вы использовали?

------

Я или где то ошибаюсь в рассчетах, поправьте меня, если я не прав.
Возьмем мегу на 16 МГц и возьмем spi 16 bit dac / adc.

Всего за секунду выходит 16,000,000 тактов. Возьмем самый худший случай - 48кSPS.
Получается, временной слот между запусками преобразования - 16,000,000 / 48,000 =~ 330 тактов.
Учитывая, что частота SPI в контроллере самая быстрая fosc / 2, то на запрос данных с АЦП уйдет 16*2 = 32 такта, плюс накладные расходы (ногодрыг CS, еще какое то управление и так далее), пусть будет 50 тактов. Аналогично - запись в DAC. Выходит на передачу данных ушло всего 100 тактов. осталось еще 230 на обработку.
Я думаю, что несколько операций обращения к памяти, сложения, сдвига, и так далее не займут все оставшееся время целиком.

Если взять 20 МГц и 24кSPS у меня получается свободных 650-700 тактов процессора.

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

Я правда не имею опыта оценки производительности, но у меня пока что сходится ... Помогите посчитать, хотя бы такты на передачу данных, если я ошибаюсь.

Re: ADC / DAC & AVR

Вт фев 19, 2019 15:13:59

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

При условии, что будете писать на асме и контролировать все чтение/запись по СПИ.
Следует еще учесть, что СПИ 8битный и для отправки слова нужно мониторить флаг завершения цикла обмена по СПИ.
Если для АЦП не нужна запись в АЦП, а только чтение, а в ЦАП нужна только запись - циклы чтения из АЦП и записи в ЦАП можете совместить.

Еще нужно будет продумать, как заставить ваш цикл обмена срабатывать четко с нужной периодичностью.
Кстати, 48 кгц у вас не получится при кварце в 16 МГц. Ибо квант времени 62.5 нс. Получится 48048.048(048) Гц или 47904.1916 Гц...
Как вариант , можно настроить таймер на отсчет 333 значений, в цикле мониторить появление флага переполнения таймера, сбрасывать этот флаг, проводить цикл обмена, далее ждать очередного переполнения таймера.
При написании на асме ожидание можно уложить в цикл из двух команд, это 2 такта МК. Т.е. еще и джиттер будет до 62,5*2=125нс..

И при этом это будет примочка для одного табличного преобразования. А если накручивать цифровую обработку сигналов - то в идеале нужно уложиться в ваши 230 тактов. Плюс в цикле, прозрачно для обработки сигналов - она же у вас реалтайм - нужно будет мониторить и обрабатывать управлятельные кнопки, если таковые будут....

Смотрите все же либо в сторону отдельных DSP, коими ваша мега будет только управлять, либо в сторону СТМок. Старшие уже с каким то аппаратным DSP идут.... Плюс там АЦП более быстрый и двухканальный, и ЦАП есть....

Re: ADC / DAC & AVR

Вт фев 19, 2019 15:55:17

А можно взглянуть на микросхему, которую вы использовали?


У меня был TLV320AIC3106, но это не важно :-) Этих кодеков "легион" - выбирайте под свои хотелки.
Как пример, берите проект и улучшайте под свои хотелки. Для примера: это не то, что Вы хотите?

Всего за секунду выходит 16,000,000 тактов. Возьмем самый худший случай - 48кSPS.
Получается, временной слот между запусками преобразования - 16,000,000 / 48,000 =~ 330 тактов.


Но Вы пишите, что 8-ми бит на семпл Вам мало, а AVR не умеет за одну команду считывать двухбайтовое слово.

Учитывая, что частота SPI в контроллере самая быстрая fosc / 2, то на запрос данных с АЦП уйдет 16*2 = 32 такта, плюс накладные расходы (ногодрыг CS, еще какое то управление и так далее), пусть будет 50 тактов. Аналогично - запись в DAC. Выходит на передачу данных ушло всего 100 тактов. осталось еще 230 на обработку.


Чего предполагать? Напишите для avr простую программку, которая тупо задерживает сигнал на пару миллисекунд: считываем данные из АЦП, кладет в буффер, в ЦАП запысывет из буфера с некоторой задержкой (для определенности 2 мсек). Вот тогда и посчитаем такты.

Re: ADC / DAC & AVR

Вт фев 19, 2019 21:22:49

берите STM32F103, платка на али стоит меньше чем нано плюс поддерживается ардуино, мощности несравнено больше плюс 32bit... далее стандартные аудио кодеки как вам советует viiv, найдите в меру старенькую аудио плату и выдерните оттуда... или купите ибо стоят недорого...

Re: ADC / DAC & AVR

Ср фев 20, 2019 11:06:59

LGT8F88 ардуина с DAC

http://arduino.ru/forum/apparatnye-vopr ... -lgt8f328p

http://www.cnx-software.ru/2018/04/06/% ... %BD%D0%B0/

Re: ADC / DAC & AVR

Ср фев 20, 2019 20:15:41

Прикинул на компе алгоритм, обработал как хотел (48 kSPS @ 16bit), отсимулировал в протеусе.
Кому интересно - табличный пересчет, два КИХ-фильтра 16-го порядка, и у меня еще ~ 50 тактов свободных (симуляция с учетом передачи SPI 16-битных слов)
В итоге, влез в 128-ю мегу.

Всем спасибо за советы, получилось!
Буду паять )

Re: ADC / DAC & AVR

Ср фев 20, 2019 23:48:34

обработал как хотел (48 kSPS @ 16bit), отсимулировал в протеусе.
Кому интересно - табличный пересчет, два КИХ-фильтра 16-го порядка, и у меня еще ~ 50 тактов свободных (симуляция с учетом передачи SPI 16-битных слов)
В итоге, влез в 128-ю мегу.

Вы круты! Выложили бы. Atmel на 48 kSPS смог только один КИХ фильтр: и то на 10-ти битных данных и 8-го порядка. У Вас два фильтра и 16-ый порядок и бит 16.

Думаю, многим будет интересно.
Ответить