zyxel812
05.07.2013, 01:00
И так, очередная разработка, с которой мне пришлось изрядно повозиться.
Устройство для подключения к компьютеру аудиоисточников с цифровым I2S выходом.
Стандарт I2S предназначен в первую очередь для передачи цифровых аудио данных между микросхемами в пределах одного устройства. Данный стандарт часто используется в различных микросхемах ЦАП и АЦП, предназначенных именно для работы со звуком.
Думаю, что на данном форуме это мало кому нужно. Однако, именно подготовка к постройке pccar сподвигла меня его разработать, так как мне будет необходим ввод звука в компьютер с цифрового радио минуя всевозможные аналоговые тракты. Поэтому, пусть будет она тут, может кому и пригодится.
Подробней о i2s читайте в Википедии, представлю тут только диаграмму, чтоб понимать с чем работаем:
http://we.easyelectronics.ru/uploads/images/00/40/91/2013/01/19/b0139f.gif
Задача №1: дешифровать сигнал в микроконтроллере. С помощью микроконтроллера avr из серии Xmega, мне удалось это сделать без помощи дополнительных микросхем (не считая одной ячейки стандартной логики "И"), используя два интерфейса SPI, которые в обилии наличиствуют в указанном микроконтроллере. Однако, есть еще задача №2, решить которую на xmega пока не удалось, об этом позже. В итоге, был выбран микроконтроллер из серии mega (не путать с xmega), а именно ATmega32u4. Только вот с i2s потоком он в одиночку не справился, поэтому ему на помощь пришла микросхема EPM3032A -это микросхема программируемой логики стоимостью 100руб, одна из самых маленьких в своем роде. Ее задача превратить последовательные данные шины i2s в параллельные и сообщить микроконтроллеру о получении первых 16 бит в каждом канале. Микросхема запрограммирована на выдачу данных по 8 бит, один из входов переключает между старшими и младшими восемью битами. Так сложно (имею ввиду переключение) сделано намеренно, чтобы микроконтроллер прерывался на прием данных только один раз за сэмпл каждого канала. Прошивку для данной микросхемы делал не я, а один мой хороший товарищ, поэтому подробней как в ней что рассказать не могу.
Схема получилась такой:
https://lh3.googleusercontent.com/-ZftLrZ9zAOY/UdXBWX3pEDI/AAAAAAAAAFE/yWb4wKy7qSs/w902-h856-no/shema.png
На схеме два варианта: А и Б.
В варианте А, напряжение питания микроконтроллера 3.3в. При таком напряжении по даташиту контроллер может стабильно работать только на 8МГц. Этого ему еле еле хватает, чтобы принять и передать аудиопоток частотой дискретизации 32кГц.
В варианте Б, напряжение питания микроконтроллера примерно 4.6в. Напряжение намеренно занижено диодом, чтобы микроконтроллер мог стабильно принимать 3.3-вольтовые сигналы с EPM3032. Сама же EPM3032 толерантна к 5-ти вольтовым входным сигналам. При таком напряжении контроллер может работать на частоте 16МГц, этого должно хватить для обработки аудиопотока с частотой дискретизации вплоть до 48кГц. Однако, на максимальной частоте я не проверял, у меня не нашлось такого источника.
Задача №2: Передать полученные данные в компьютер. Для этого используется библиотека LUFA (http://www.fourwalledcubicle.com/LUFA.php). За основу взят AudioInput пример из состава библиотеки. Используется Audio Class Device 1.0, т.е. микроконтроллер прикидывается usb звуковой картой. Точнее звуковой картой с одним цифровым входом. Дело в том, что данная библиотека пока что не в полной мере поддерживает относительно новые микроконтроллеры серии xmega, на них мне не хватило пропускной способности передать в компьютер два канала одновременно из-за того, что в библиотеке пока не реализован функционал двойного буфера (так называемый pin-pong режим). Поэтому использую обычную mega с дополнительной микросхемой.
Печатная плата может выглядеть так:
https://lh6.googleusercontent.com/-p73c3XyuXUGdYUI0woyHZlOlFsNYdk6dtuylRL7yw=w456-h209-p-no (https://lh6.googleusercontent.com/-kn5EY4uj1NI/UdXBTdZ6xaI/AAAAAAAAAEw/szTLERMkTQE/w1598-h733-no/IMG_8665.JPG)
https://lh3.googleusercontent.com/p_NFpsOW6a7zwUsHAqc689OhhdvgOdUYenLIX_BdyQ=w450-h209-p-no (https://lh5.googleusercontent.com/-t3bHXDNg6b0/UdXBTY7TJQI/AAAAAAAAAE0/ypsaWrOAcbA/w1598-h742-no/IMG_8666.JPG)
В Винде, начиная с ХРюши, драйвера не требуются. После подключения, устройство будет видно так:
https://lh6.googleusercontent.com/-LXv4gcq7Lzs/UdXBWexECcI/AAAAAAAAAFA/RCL7JCEcAAk/w414-h461-no/screen1.png
Итого, на данный момент характеристики следующие:
Частота дискретизации входного сигнала: 32кГц точно, в варианте Б в теории до 48кГц.
Разрешение входного сигнала: до 16 бит (на вход подавать можно и больше, лишние просто игнорируются)
Устройство автоматически не определяет частоту входного сигнала, поэтому в винде в свойствах устройства на вкладке "дополнительно" нужно указать частоту, соответствующую входной.
Вот записи, сделанные с помощью данного устройства: Запись1 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test1.wav), Запись2 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test2.wav), Запись3 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test3.wav).
В качестве аудиоисточника используется цифровой выход вот этого радиомодуля (http://www.pccar.ru/showthread.php?t=18997).
Архив с прошивкой и исходниками прилагаю. Условие использования - рассказать здесь о всех модификациях, если таковые будут, а так же ссылка на данную тему в описании вашего проекта.
Устройство для подключения к компьютеру аудиоисточников с цифровым I2S выходом.
Стандарт I2S предназначен в первую очередь для передачи цифровых аудио данных между микросхемами в пределах одного устройства. Данный стандарт часто используется в различных микросхемах ЦАП и АЦП, предназначенных именно для работы со звуком.
Думаю, что на данном форуме это мало кому нужно. Однако, именно подготовка к постройке pccar сподвигла меня его разработать, так как мне будет необходим ввод звука в компьютер с цифрового радио минуя всевозможные аналоговые тракты. Поэтому, пусть будет она тут, может кому и пригодится.
Подробней о i2s читайте в Википедии, представлю тут только диаграмму, чтоб понимать с чем работаем:
http://we.easyelectronics.ru/uploads/images/00/40/91/2013/01/19/b0139f.gif
Задача №1: дешифровать сигнал в микроконтроллере. С помощью микроконтроллера avr из серии Xmega, мне удалось это сделать без помощи дополнительных микросхем (не считая одной ячейки стандартной логики "И"), используя два интерфейса SPI, которые в обилии наличиствуют в указанном микроконтроллере. Однако, есть еще задача №2, решить которую на xmega пока не удалось, об этом позже. В итоге, был выбран микроконтроллер из серии mega (не путать с xmega), а именно ATmega32u4. Только вот с i2s потоком он в одиночку не справился, поэтому ему на помощь пришла микросхема EPM3032A -это микросхема программируемой логики стоимостью 100руб, одна из самых маленьких в своем роде. Ее задача превратить последовательные данные шины i2s в параллельные и сообщить микроконтроллеру о получении первых 16 бит в каждом канале. Микросхема запрограммирована на выдачу данных по 8 бит, один из входов переключает между старшими и младшими восемью битами. Так сложно (имею ввиду переключение) сделано намеренно, чтобы микроконтроллер прерывался на прием данных только один раз за сэмпл каждого канала. Прошивку для данной микросхемы делал не я, а один мой хороший товарищ, поэтому подробней как в ней что рассказать не могу.
Схема получилась такой:
https://lh3.googleusercontent.com/-ZftLrZ9zAOY/UdXBWX3pEDI/AAAAAAAAAFE/yWb4wKy7qSs/w902-h856-no/shema.png
На схеме два варианта: А и Б.
В варианте А, напряжение питания микроконтроллера 3.3в. При таком напряжении по даташиту контроллер может стабильно работать только на 8МГц. Этого ему еле еле хватает, чтобы принять и передать аудиопоток частотой дискретизации 32кГц.
В варианте Б, напряжение питания микроконтроллера примерно 4.6в. Напряжение намеренно занижено диодом, чтобы микроконтроллер мог стабильно принимать 3.3-вольтовые сигналы с EPM3032. Сама же EPM3032 толерантна к 5-ти вольтовым входным сигналам. При таком напряжении контроллер может работать на частоте 16МГц, этого должно хватить для обработки аудиопотока с частотой дискретизации вплоть до 48кГц. Однако, на максимальной частоте я не проверял, у меня не нашлось такого источника.
Задача №2: Передать полученные данные в компьютер. Для этого используется библиотека LUFA (http://www.fourwalledcubicle.com/LUFA.php). За основу взят AudioInput пример из состава библиотеки. Используется Audio Class Device 1.0, т.е. микроконтроллер прикидывается usb звуковой картой. Точнее звуковой картой с одним цифровым входом. Дело в том, что данная библиотека пока что не в полной мере поддерживает относительно новые микроконтроллеры серии xmega, на них мне не хватило пропускной способности передать в компьютер два канала одновременно из-за того, что в библиотеке пока не реализован функционал двойного буфера (так называемый pin-pong режим). Поэтому использую обычную mega с дополнительной микросхемой.
Печатная плата может выглядеть так:
https://lh6.googleusercontent.com/-p73c3XyuXUGdYUI0woyHZlOlFsNYdk6dtuylRL7yw=w456-h209-p-no (https://lh6.googleusercontent.com/-kn5EY4uj1NI/UdXBTdZ6xaI/AAAAAAAAAEw/szTLERMkTQE/w1598-h733-no/IMG_8665.JPG)
https://lh3.googleusercontent.com/p_NFpsOW6a7zwUsHAqc689OhhdvgOdUYenLIX_BdyQ=w450-h209-p-no (https://lh5.googleusercontent.com/-t3bHXDNg6b0/UdXBTY7TJQI/AAAAAAAAAE0/ypsaWrOAcbA/w1598-h742-no/IMG_8666.JPG)
В Винде, начиная с ХРюши, драйвера не требуются. После подключения, устройство будет видно так:
https://lh6.googleusercontent.com/-LXv4gcq7Lzs/UdXBWexECcI/AAAAAAAAAFA/RCL7JCEcAAk/w414-h461-no/screen1.png
Итого, на данный момент характеристики следующие:
Частота дискретизации входного сигнала: 32кГц точно, в варианте Б в теории до 48кГц.
Разрешение входного сигнала: до 16 бит (на вход подавать можно и больше, лишние просто игнорируются)
Устройство автоматически не определяет частоту входного сигнала, поэтому в винде в свойствах устройства на вкладке "дополнительно" нужно указать частоту, соответствующую входной.
Вот записи, сделанные с помощью данного устройства: Запись1 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test1.wav), Запись2 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test2.wav), Запись3 (https://dl.dropboxusercontent.com/u/15123409/forum/i2s_test3.wav).
В качестве аудиоисточника используется цифровой выход вот этого радиомодуля (http://www.pccar.ru/showthread.php?t=18997).
Архив с прошивкой и исходниками прилагаю. Условие использования - рассказать здесь о всех модификациях, если таковые будут, а так же ссылка на данную тему в описании вашего проекта.