PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Разработка устройств (http://pccar.ru/forumdisplay.php?f=18)
-   -   USB I2S input (http://pccar.ru/showthread.php?t=19340)

zyxel812 05.07.2013 01:00

USB I2S input
 
Вложений: 1
И так, очередная разработка, с которой мне пришлось изрядно повозиться.
Устройство для подключения к компьютеру аудиоисточников с цифровым I2S выходом.
Стандарт I2S предназначен в первую очередь для передачи цифровых аудио данных между микросхемами в пределах одного устройства. Данный стандарт часто используется в различных микросхемах ЦАП и АЦП, предназначенных именно для работы со звуком.
Думаю, что на данном форуме это мало кому нужно. Однако, именно подготовка к постройке pccar сподвигла меня его разработать, так как мне будет необходим ввод звука в компьютер с цифрового радио минуя всевозможные аналоговые тракты. Поэтому, пусть будет она тут, может кому и пригодится.

Подробней о i2s читайте в Википедии, представлю тут только диаграмму, чтоб понимать с чем работаем:
http://we.easyelectronics.ru/uploads.../19/b0139f.gif
Задача №1: дешифровать сигнал в микроконтроллере. С помощью микроконтроллера avr из серии Xmega, мне удалось это сделать без помощи дополнительных микросхем (не считая одной ячейки стандартной логики "И"), используя два интерфейса SPI, которые в обилии наличиствуют в указанном микроконтроллере. Однако, есть еще задача №2, решить которую на xmega пока не удалось, об этом позже. В итоге, был выбран микроконтроллер из серии mega (не путать с xmega), а именно ATmega32u4. Только вот с i2s потоком он в одиночку не справился, поэтому ему на помощь пришла микросхема EPM3032A -это микросхема программируемой логики стоимостью 100руб, одна из самых маленьких в своем роде. Ее задача превратить последовательные данные шины i2s в параллельные и сообщить микроконтроллеру о получении первых 16 бит в каждом канале. Микросхема запрограммирована на выдачу данных по 8 бит, один из входов переключает между старшими и младшими восемью битами. Так сложно (имею ввиду переключение) сделано намеренно, чтобы микроконтроллер прерывался на прием данных только один раз за сэмпл каждого канала. Прошивку для данной микросхемы делал не я, а один мой хороший товарищ, поэтому подробней как в ней что рассказать не могу.

Схема получилась такой:
https://lh3.googleusercontent.com/-Z...6-no/shema.png
На схеме два варианта: А и Б.
В варианте А, напряжение питания микроконтроллера 3.3в. При таком напряжении по даташиту контроллер может стабильно работать только на 8МГц. Этого ему еле еле хватает, чтобы принять и передать аудиопоток частотой дискретизации 32кГц.
В варианте Б, напряжение питания микроконтроллера примерно 4.6в. Напряжение намеренно занижено диодом, чтобы микроконтроллер мог стабильно принимать 3.3-вольтовые сигналы с EPM3032. Сама же EPM3032 толерантна к 5-ти вольтовым входным сигналам. При таком напряжении контроллер может работать на частоте 16МГц, этого должно хватить для обработки аудиопотока с частотой дискретизации вплоть до 48кГц. Однако, на максимальной частоте я не проверял, у меня не нашлось такого источника.

Задача №2: Передать полученные данные в компьютер. Для этого используется библиотека LUFA. За основу взят AudioInput пример из состава библиотеки. Используется Audio Class Device 1.0, т.е. микроконтроллер прикидывается usb звуковой картой. Точнее звуковой картой с одним цифровым входом. Дело в том, что данная библиотека пока что не в полной мере поддерживает относительно новые микроконтроллеры серии xmega, на них мне не хватило пропускной способности передать в компьютер два канала одновременно из-за того, что в библиотеке пока не реализован функционал двойного буфера (так называемый pin-pong режим). Поэтому использую обычную mega с дополнительной микросхемой.

Печатная плата может выглядеть так:
https://lh6.googleusercontent.com/-p...w456-h209-p-no
https://lh3.googleusercontent.com/p_...w450-h209-p-no

В Винде, начиная с ХРюши, драйвера не требуются. После подключения, устройство будет видно так:
https://lh6.googleusercontent.com/-L...no/screen1.png

Итого, на данный момент характеристики следующие:
Частота дискретизации входного сигнала: 32кГц точно, в варианте Б в теории до 48кГц.
Разрешение входного сигнала: до 16 бит (на вход подавать можно и больше, лишние просто игнорируются)

Устройство автоматически не определяет частоту входного сигнала, поэтому в винде в свойствах устройства на вкладке "дополнительно" нужно указать частоту, соответствующую входной.

Вот записи, сделанные с помощью данного устройства: Запись1, Запись2, Запись3.
В качестве аудиоисточника используется цифровой выход вот этого радиомодуля.

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

mitsubi 05.07.2013 01:59

весьма интересно, а по части нехватки ресурсов меги не хотите посмотреть в сторону, например, STM32?

Gorynch 05.07.2013 09:50

Очень плезно и познавтельно

Будет ли работать под MacOsX или линукс?
Есть 2 цифровых микрофона от ноутбуков, хотелось бы пркрутить к компам, а они не под виндами

Если будет работать под unix системой - как минимум повторю

zyxel812 05.07.2013 10:50

Цитата:

Сообщение от mitsubi (Сообщение 263232)
весьма интересно, а по части нехватки ресурсов меги не хотите посмотреть в сторону, например, STM32?

Тут все дело в наличии библиотеки для работы с USB и примеров реализации различных классов под конкретную серию устрйств. Так получилось, что именно для avr нашлась такая библиотека, в которой для реализации задумки пришлось приложить минимум усилий. Вот, в xmega ресурсов хватает, однако победить ее родную usb библиотеку пока не удалось, но это вопрос времени. В итоге, хочу отказаться от плис.

Цитата:

Сообщение от Gorynch (Сообщение 263245)
Очень плезно и познавтельно

Будет ли работать под MacOsX или линукс?
Есть 2 цифровых микрофона от ноутбуков, хотелось бы пркрутить к компам, а они не под виндами

Если будет работать под unix системой - как минимум повторю

Работать должно. Используется стандартный usb класс, что даже винда без драйверов подхватывает, linux должен тем более. Про Мак не могу ни чего сказать, могу предположить, что тоже должно работать. Сейчас в компьютерных магазинах можно найти маленькие usb звуковые карты за 300 ~ 500 рублей с двумя разъемами, один под наушники, другой под микрофон. Так вот, в их описании сказано, что они работают в Linux и Mac OS 10 и выше, а они тоже используют Audio Class 1.0, как и моя разработка.

awtoap 05.07.2013 13:09

Я вот непойму накуя было изобретать сие, когда навалом микрух готовых?...пример сходу CM108AH (ввод/вывод по I2S плюс встроенный ЦАП и АЦП). TAS1020B пишем софт и получаем 24/96. Тоже самое TUSB3200AC аж 6 штук I2S. Единственное синхра идет от этих микр, а не от АЦП/ЦАП как любят аудифилы. А те параметры что достигли в изделии ну просто унылы.

zyxel812 05.07.2013 14:58

Разрабатывалось под конкретное устройство с конкретными параметрами, а именно 32кГц с синхрой от внешнего устройства. А так же для того, чтобы сделать управление радиомодулем и передачу с него звука на одной легко достоваемой микросхеме. Сейчас их конечно две, но это как промежуточное работоспособное решение, выложенное здесь с целью найти ещё интузиастов, кому это нужно. Глядишь, кто чем поможет или хотя бы что-то подскажет. Вот уже кое что поймал на удочку, теперь знаю про существование ещё и микросхемы TUSB3200AC, взял на заметку.
Указанные вами чипы ещё достать надо, CM108 до сих пор из Китая жду, минимальная партия 5 шт, ждать около 2-ух месяцев, заказал ради экспериментов. Нет уверенности, что с ее помощью 32кГц ввести можно (во всех описаниях только 44,1 и 48) и сменить тип устройства с микрофона на что-то ещё.
И, самое главное, спортивный интерес и учебные цели. Здесь вроде не собираются те, ищет готовых решений.

awtoap 05.07.2013 18:07

Я так понял хочешь смастерить цифровое радио с DAB. Тогда осваивай TAS1020B. Они хоть и сняты с производства (как TUSB3200) но еще продаются. Апликухи как и софт для разработки поищи ТУТ. Хотя лучше возьми за основу приемник от Silabs(все исходники доступны), правда выход с тюнера по аналогу, а звук в комп по цифре(эмулируется звуковая через УСБ).

JIekceu 05.07.2013 18:43

давно хотел такой девайс для подключения хорошего АЦП, то что стоит на звуковухах и то как оно подключено мягко говоря не радует..

Apostol 01.08.2013 08:09

Цитата:

Сообщение от awtoap (Сообщение 263264)
Я вот непойму накуя было изобретать сие, когда навалом микрух готовых?...пример сходу CM108AH (ввод/вывод по I2S плюс встроенный ЦАП и АЦП). TAS1020B пишем софт и получаем 24/96. Тоже самое TUSB3200AC аж 6 штук I2S. Единственное синхра идет от этих микр, а не от АЦП/ЦАП как любят аудифилы. А те параметры что достигли в изделии ну просто унылы.

А есть готовые киты? У меня вот такой девайс:
DAC
Есть интерес подключить его по i2s к ПК, а выход с дака по оптике на проц.

awtoap 01.08.2013 12:00

Не путай назначение железки...у ТС по I2S принимает, а по USB отдает в комп...у тебя делает противоположное. Короче по USB в комп, а оптику в проц...I2S у тебя для внешней микры DAC.


Часовой пояс GMT +4, время: 17:50.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot