Как стать автором
Обновить

Комментарии 35

НЛО прилетело и опубликовало эту надпись здесь
И все же интереснее было бы задействовать все ресурсы XMega.
Можно было запустить встроенный в контроллер ЦАП, и сравнить его с самодельным.
В ATXMEGA128A3U есть USB, так что можно было взять пример Audio Out Device из LUFA, и сделать простую USB аудиокарту.
Встроенный ЦАП я запускал, разница на слух практически отсутствует. Контроллер сам по себе генерирует много шума, от которого я никак не избавлялся, из-за этого качество страдает.
Вот так выглядит пила с R-2R ЦАП
Картинка


С USB опыта работы у меня не было, но попробовать определенно стоит.
«точность потеряется с пятого разряда поскольку (1/2^5)<0.05», imho, вы тут заблуждаетесь.
Если упростить, то точность всей схемы ЦАП тоже будет примерно 5%. Я основываюсь на "Законе больших чисел".
Все верно, 5 разряд изменяет напряжение на 1/32 от максимального напряжения (логической единицы), это меньше 5%, значит его использование бессмысленно.
Резисторы между собой неравнозначны, плохой резистор в старшем разряде сделает бессмысленным использование младших, тогда как резистор с большим отклонением в младшем разряде при идеальных остальных практически не повлияет на конечную точность.
Это только при условии, что будут воспроизводиться громкие звуки.
Вряд ли вы найдете трек, где сигнал меньше 50% максимальной амплитуды. Как ЦАПом этой штукой уже не попользуешься, хотя играть звук будет не то чтобы ужасно.
А если понадобится цифровая регулировка громкости?
Приведет к потере разрядности, лучше регулировать аналогово (не обязательно потенциометром, есть специальные микросхемы, управляемый цифрой).
Специальная микросхема — это ещё одна микросхема.
Можно спорить до бесконечности, все зависит от постановки задачи и того, что нужно получить в результате. Как вариант сделать ЦАП большей разрядности на двух портах, но это еще резисторы. А вообще такие задачи правильно решать специальными микросхемами, в видео видно на заднем плане плату, там ЦАП на PCM2704 и усилитель, делал себе для замены никуда не годной звуковой карты в компьютере. Статью к сожалению уже не написать, потому что есть публикация на другом ресурсе.
Тоже считаю, что это из разряда «из пушки по воробьям». XMEGA довольно продвинутые, могут ARM составлять конкуренцию. А обращаются с ней как с тупой Attiny, которая ничего не умеет, обвешивая UART конвертерами и R-2R матрицей.
Для воспроизведения коротких отрезков пойдёт, а как насчёт длинных отрезков, когда скорость поступления и скорость вывода отсчётов будет немного но отличаться? А это будет в любом случае. Нужен механизм тонкой подстройки скорости вывода так чтобы не допускать опустошения и переполнения буфера.
При разнице скорости в 20PPM например, и частоте вывода 44кГц утечка будет составлять примерно 1 отсчет в секунду. Через 1000 секунд разница между поступающим потоком и выводимым будет составлять уже порядка 1Кб…
Как таковая скорость поступления отсчетов нигде не указана, контроллер запрашивает у ПК очередной пакет данных когда в его буфере появляется место, поэтому рассинхронизация невозможна. Я столкнулся с другой, чуть более интересной проблемой, компьютер это не тупая железяка, на нем работает ОС разделяющая процессорное время между процессами. После запроса данных контроллером они начинают высылаться не сразу, из-за этого требуется довольно большой буфер на МК.
Это недостаток такого способа воспроизведения. Но такое используют очень редко, поскольку кроме всего прочего запаздывание от входа до выхода в таких схемах определяется величиной промежуточного буфера, и чем он больше тем хуже характеристика такой схемы. Для воспроизведения одиночных сигналов это не играет особой роли, но в других случаях это довольно критично.
Поэтому, используют асинхронный вывод — сколько данных подали на вход столько и воспроизвели подстраивая скорость вывода под среднюю скорость ввода. Вот решение этой проблемы на МК и является самой интересной частью задачи, я вобщем-то ожидал именно этого.
А какого порядка у вас задержки? Конечно Windows не RTOS, но всё таки это не настолько критично для такой не особо затратной задачи. В шарпе ещё есть сборщик мусора, который программу стопорит на время, но это опять же порядка 10 мс(за это время накопится около 400 байт). У вас я вижу буфер в МК 12кб? Не может винда на 200 мс программу фризить.

Возможно у вас проблема с настройкой COM порта и в нём задан какой-то буфер, который шлёт данные не сразу.
Задержку не измерял, а сейчас уже нет такой возможности. Пока подбирал размер буфера и пакета создалось впечатление что задержка составляет примерно 50 мс.
На 100-150 мс легко может фризить, при нагрузке. Это при использовании Direct Sound.
Именно поэтому музыканты используют другой протокол — ASIO. Там всё в пределах 5-10 мс.
ЦАП. Из горсти резисторов…

https://ru.wikipedia.org/wiki/Covox

Не путать, Covox это ЦАП подключаемый к параллельному порту компьютера, а здесь используется последовательный интерфейс, коих найти сейчас гораздо проще чем плату с LPT-портом под нужную встраиваемую систему. Из общего, там и правда горстка резисторов, но дальше — всё разное и даже не совместимое.
Почти то же самое. Простейший ковокс — это есть 8 сигнальных цифровых линий, мы ими дрыгаем. На выходе подключаем R-2R матрицу, которая и преобразует это в аналог. Тут же мы дрыгаем ногами МК, только уже через UART конвертер.
Так можно любую схему с резисторным ЦАП назвать ковоксом. Нет уж, ковокс — это ЦАП именно на параллельном порту компьютера, его реализация может несколько отличаться либо это R-2R либо весовые резисторы но характерно для ковокса — именно подключение к LPT-порту компьютера или его эмулятору, который имеет программный интерфейс LPT-порта.
Ведь собственно сама идея ЦАП-а на резисторах не так уж уникальна чтобы любую схему в составе которой есть ЦАП на резисторах называть ковоксом.
С такой точки зрения — да. Я думаю, что igorkozinov просто приметил, что оригинальный Covox (если смотреть патент) — это так же голая R-2R матрица :). А его суть — это как из говна и палок сделать простенький вывод звука на IBM PC 80х годов (да и не только на них, все же техника тогда была дорогой).
Есть такая звуковая карта!

А еще можно читать wav с SD карты, компьютер тогда не нужен, получается портативный wav player.
В сети гуляет проект с SD и ЦАП на основе ШИМа, можно затолкать все это в маленький контроллер attiny.
Да, лучше ШИМ, всего 1 пин занимает. Делал себе дверной звонок на SD карте с ШИМом, с частотой дискретизацией до 48кГц на меге 8. В планах на 16-битное переделать.
Я как-то делал дочке игрушку — читаем с SD карты wav файл и с помощью ШИМ генерил сигнал и дальше на усилитель. Получилось довольно не плохо (правда я STM использовал)
Да их множество, это как помигать светодиодиком. А гуляет проект японца Elm Chan. По факту небольшая либа для работы с FAT и немного кода для софтовой реализации SPI (для работы с SD/MMC), работа таймера, обслуживающего ШИМ. Сам на межке8 делал такой проект, правда без использования FS.

Есть более интересные реализации — например, взять какую-нить Attiny13. Но там или без FS, или с простейшей: памяти маловато у этого МК. Ну еще можно найти дешевый чип памяти, хотя невостребованная SD карта небольшого по меркам телефона (до 2 гб) размера будет дешевле…
Подключал TDA2822M по мостовой схеме — постоянно прут наводки, какое-то непонятное самовозбуждение, сигнала вообще не слышно. Так и не смог настроить. Собрал по стерео варианту — заработало сразу же. Мистика?
Разводка фиговая…
Если вообще не слышно сигнала — скорее всего где-то ошибка, у меня чуть-чуть пробивается 50 герц, но тут и длинный проводник, и экранирования нет Если рукой потрогать сигнальную линию, тогда 50 Гц отлично слышно.
Долго думал, что мне напоминает схема структуры устройства в начале статьи.

Вспомнил: http://s6.hostingkartinok.com/uploads/images/2013/10/50b61037edc95b2a1160e19d44b0f609.jpg

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории