Простой USB-аудио ЦАП (опытный образец)

Список разделов РАДИОТЕХНИЧЕСКИЙ ФОРУМ Цифро-Аналоговые Преобразователи (ЦАП/DAC)

Описание: Все о цифро-аналоговых преобразователях любых типов
Модератор: Алаев Ян

#1 Алаев Ян » 1 января 2015, 17:51

USB-audio DAC PCM2705 Burr-Brown (16-Bit Delta-Sigma@48 kHz)

Изображение

Захотелось немного отвлечься от привычных ламповых работ и в преддверии Нового года сделать что-нибудь нестандартное и, желательно, полезное.
Выбор пал на ЦАП на базе микросхемы PCM2705 производства фирмы Burr-Brown.

Содержание:
Спойлер
1. Принципиальная схема /viewtopic.php?f=60&t=153&p=2673#p2673
2. Доработка SPDIF и гальваническая развязка /viewtopic.php?f=60&t=153&p=3450#p3450
3. Докстанция /viewtopic.php?f=60&t=153&p=3452#p3461
4. Первые измерения на осциллографе /viewtopic.php?f=60&t=153&p=3468#p3468
5. Тест меандром /viewtopic.php?f=60&t=153&p=3470#p3470
6. Анализатор спектра на базе осциллографа /viewtopic.php?f=60&t=153&p=3481#p3481
7. Внешнее питание для ЦАП /viewtopic.php?f=60&t=153&p=3570#p3570
8. Версия ЦАП с внешним питанием /viewtopic.php?f=60&t=153&start=40#p3592
9. Линейный выход для ЦАП /viewtopic.php?f=60&t=153&p=6665#p6665
10. Управление ЦАП от микроконтроллера /viewtopic.php?f=60&t=153&p=7604#p7604
11. Китайский ЦАП /viewtopic.php?f=60&t=153&p=15811#p15811
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца


#81 Skismy » 8 января 2018, 22:59

Алаев Ян писал(а):я бы посоветовал убедиться в том, что задействованные выводы их имеют. Иначе кнопки работать не будут.
Только выводы кнопок или все задействованные выводы мк? Подтягивать к земле?

Алаев Ян писал(а):В Вашем случае используются выводы МК, которые можно использовать только программным путем. Сразу возникает вопрос - зачем так?, если можно сделать удобнее.
Только из соображений наличия готовой прошивки. С программированием мк не дружу и сейчас недостаточно мотивации до этого дойти.
Получается, код пишется только для записи данных в определенную часть мк при аппаратном программировании?

Алаев Ян писал(а):киньте ссылку, где это представлено в datasheet? У Вас резистор R1 конфликтует с R9.
Разобрался. Да, действительно косяк. Схему прикрепил к письму. Спасибо.

Алаев Ян писал(а):Я только дал бы совет - отмакетируйте схему, не спешите разводить плату, чтобы не получить неработающее устройство.
Эх, SMD компоненты заменить нечем на макетке.)
PCM%2BКонтроллер.jpg
Skismy
Наблюдатель
Наблюдатель
Аватара
Репутация: 0 (+0/−0)
Лояльность: 0 (+0/−0)
Сообщения: 6
С нами: 1 год 4 месяца

#82 Алаев Ян » 9 января 2018, 7:37

Skismy писал(а):Только выводы кнопок или все задействованные выводы мк? Подтягивать к земле?
только выводы кнопок. Подтягивать к питанию, к земле Вы посадите вывод, когда нажмете на кнопку. Вы же сами писали об этом
Skismy писал(а):Алаев Ян писал(а):
1. Куда подключены вторые выводы кнопок???
К полигону земли.

Skismy писал(а):Получается, код пишется только для записи данных в определенную часть мк при аппаратном программировании?
Речь идет о аппаратном SPI. Когда Вы используете аппаратный модуль, то его достаточно только настроить и записывать данные в нужный регистр. Далее все будет сделано автоматически. Если делать программный SPI, то формировать клоки, отправлять данные Вы должны самостоятельно. Об этом нужно позаботиться при написании кода в общем цикле выполнения программы. Аппаратный модуль работает без задействования ресурсов цикла программного кода.

Skismy писал(а):Эх, SMD компоненты заменить нечем на макетке.)
да ладно Вам... все это есть в продаже и стоит недорого.
Вот Вам целая книга со всеми стандартными номиналами, если поискать без твердой обложки, то выйдет еще дешевле.
https://ru.aliexpress.com/item/Free-shipping-0805 ... 418627169eee&priceBeautifyAB=0

Вы говорили, что у Вас есть исходный код прошивки под эту схему. Скиньте посмотреть, любопытно.
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#83 Skismy » 9 января 2018, 17:38

Алаев Ян писал(а):Подтягивать к питанию
Я на всякий случай прикрепляю кусок схемы, чтобы удостовериться, что правильно вас понимаю. Что насчет выбора номиналов резисторов?

poty писал(а):как и ранее - не совсем понятно, что будет являться приёмником команд смены композиций и старт-стопа.
Алаев Ян писал(а):Речь идет о аппаратном SPI
Вот как это выглядит по задумке автора прошивки: МК принимает команду (с кнопок или пульта - неважно) отдаёт по SPI её PCM2705, а та уже, как являясь для компьютера HID-устройством, по USB шлёт соответствующую команду, как обычная клавиатура.

Судя по всему, автор действительно использует SPI для передачи данных на PCM2705, т.е. аппаратные пины. Архив с прошивкой отсылаю. в файле pins.h определены все пины.
Хотя я пока не понимаю, как тут реализуется это управление.

Снимок.jpg
Вложения
03.zip
Размер: 6.72 КБ
Скачиваний: 17
Skismy
Наблюдатель
Наблюдатель
Аватара
Репутация: 0 (+0/−0)
Лояльность: 0 (+0/−0)
Сообщения: 6
С нами: 1 год 4 месяца

#84 poty » 9 января 2018, 17:48

Судя по тексту, SPI эмулируется программно. Надо посмотреть протокол обмена SPI для 2705, может там какое нестандартное слово используется.
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

#85 Алаев Ян » 9 января 2018, 18:17

Skismy писал(а):Что насчет выбора номиналов резисторов?
Вы осознаете, что будет в тот момент, когда кнопка будет нажата в Вашей схеме?

Код: Выделить всё
#ifndef PCM2705_H
#define PCM2705_H

#include <inttypes.h>

/* Hid commands definitions */
#define PCM2705_HID_NO_CMD         0x00
#define PCM2705_HID_MUTE         0x01
#define PCM2705_HID_VOL_UP         0x02
#define PCM2705_HID_VOL_DOWN      0x04
#define PCM2705_HID_NEXT_TRACK      0x08
#define PCM2705_HID_PREV_TRACK      0x10
#define PCM2705_HID_STOP         0x20
#define PCM2705_HID_PLAY_PAUSE      0x40
#define PCM2705_HID_EXTENDED      0x80

void pcm2705Init(void);
void pcm2705HidCmd(uint8_t cmd);

#endif /* PCM2705_H */
вот тут написаны все команды, которые отправляются в микросхему ЦАП
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#86 Skismy » 9 января 2018, 18:41

Алаев Ян писал(а):когда кнопка будет нажата в Вашей схеме?
По цепи, очевидно, пойдет ток. :D Таким образом задействуем пин мк. В данном случае PC5.

Алаев Ян писал(а):вот тут написаны все команды, которые отправляются в микросхему ЦАП
Понял. Прошивка эта для авторской схемы.
Вопрос у меня в следующем: прошивка будет так же работать, если заменить пины, к которым будут подключены кнопки в соответствии с моей принципиальной схемой?
Skismy
Наблюдатель
Наблюдатель
Аватара
Репутация: 0 (+0/−0)
Лояльность: 0 (+0/−0)
Сообщения: 6
С нами: 1 год 4 месяца

#87 Алаев Ян » 9 января 2018, 18:55

Skismy писал(а):По цепи, очевидно, пойдет ток
а величину тока Вы можете оценить?

Skismy писал(а):Вопрос у меня в следующем: прошивка будет так же работать, если заменить пины, к которым будут подключены кнопки в соответствии с моей принципиальной схемой?
если речь идет только о кнопках, то вероятнее всего да.
Но кто Вам мешает сделать так же, как и на авторской схеме, чтобы голову не ломать? Зачем усложняете себе жизнь, если не имеете соответствующего опыта, чтобы в этом разобраться самостоятельно? Ведь проще повторить схему автора, не так ли?
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#88 poty » 9 января 2018, 19:03

Что-то я потерял нить разговора...
По поводу резисторов: какой смысл считать токи, если резисторы лишь "подтягивают" потенциал входа к шине питания или земле? Тут нужно ориентироваться на токи утечки, но, как мне кажется, этого делать не стоит, достаточно просто взять стандартное значение из даташита (или включить соответствующие опции в загрузчике и вообще ничего не делать снаружи).
По поводу кода. Судя по тому, что я могу прочитать по коду, функциональность SPI не используется? Производится простая побитовая передача 16 битового слова. Если так, то это должно работать на любых входах/выходах (с заменой дефиниций, конечно). Но я могу ошибаться.
И я бы всё же поправил код на аппаратный SPI.
Последний раз редактировалось poty 9 января 2018, 19:19, всего редактировалось 1 раз.
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

#89 Алаев Ян » 9 января 2018, 19:08

poty писал(а):По поводу резисторов: какой смысл считать токи, если резисторы лишь "подтягивают" потенциал входа к шине питания или земле? Тут нужно ориентироваться на токи утечки, но, как мне кажется, этого делать не стоит, достаточно просто взять стандартное значение из даташита (или включить соответствующие опции в загрузчике и вообще ничего не делать снаружи).
Skismy указал номинал подтягивающего резистора 22 Ома. Вот мне и интересно, он осознает что будет, когда будет нажата кнопка или нет. Токи можно не считать, итак видно, что величина подтягивающего резистора на 3 порядка меньше необходимой. Я не пытаюсь умничать, просто хочу, чтобы Skismy сам увидел и понял свою ошибку.
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#90 poty » 9 января 2018, 19:31

Я бы включил внутренний pull-up. Он поддерживается на всех портах. Для этого нужно сбросить the Pull-up Disable – PUD бит в регистре SFIOR и
If PORTxn is written logic one when the pin is configured as an input pin, the pull-up resistor is
activated. To switch the pull-up resistor off, PORTxn has to be written logic zero or the pin has to
be configured as an output pin. The port pins are tri-stated when a reset condition becomes
active, even if no clocks are running.
Вольный перевод:
Если в PORTxn записать логическую единицу в тот момент, когда соответствующий пин (вывод) сконфигурирован как вход, автоматически будет подключен внутренний резистор Pull-Up. Для отключения Pull-Up резистора, запишите в PORTxn логический ноль или переведите соответствующий пин (вывод) в режим выхода. Пины портов всегда находятся в трёхуровневом режиме во время reset, даже если никакой таймер (clock) не работает.

Код: Выделить всё
/* Define pull-ups and set outputs high */
/* Define directions for port pins */
PORTB = (1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0);
DDRB = (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
/* Insert nop for synchronization*/
_NOP();
Последний раз редактировалось poty 9 января 2018, 19:33, всего редактировалось 1 раз.
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

#91 Алаев Ян » 9 января 2018, 19:33

Я это ранее говорил, но рекомендовал проверить в datasheet.
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#92 Skismy » 9 января 2018, 20:23

Алаев Ян писал(а):Skismy указал номинал подтягивающего резистора 22 Ома.
Я в схеме просто воткнул туда резистор без замены номинала. Первым попавшимся был R5, поэтому номинал 22 Ом. :)
Ток должен быть порядка 5-10мА?

poty писал(а):Я бы включил внутренний pull-up
Автор устройства, судя по всему, так и сделал, поэтому резисторы и отсутствуют у него в схеме.

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

Алаев Ян писал(а):Но кто Вам мешает сделать так же, как и на авторской схеме, чтобы голову не ломать?
Да, я согласен. Но у автора есть определенные функции, которые мне не нужны, плюс я меняю-то по сути подключение кнопок, не более.

Сейчас ещё пытаюсь разобраться, как скомпилировать hex файл из имеющихся исходников.
Skismy
Наблюдатель
Наблюдатель
Аватара
Репутация: 0 (+0/−0)
Лояльность: 0 (+0/−0)
Сообщения: 6
С нами: 1 год 4 месяца

#93 Алаев Ян » 9 января 2018, 20:31

Skismy писал(а):Ток должен быть порядка 5-10мА?
много.... 10 кОм поставьте туда
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#94 Алаев Ян » 10 января 2018, 7:33

Skismy, хочу спросить - а зачем Вам вообще сдались эти кнопки?
Почему Вы думаете, что на ЦАП их нажимать удобнее, чем на источнике сигнала? Судя по всему, подключено это будет к ПК.
Так в чем проблема подойти к ПК и переключить трек или сделать потише?
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#95 poty » 10 января 2018, 11:59

Я не стал так напирать, как Ян в вопросе управления. :-) Всё же это - больше вкусовщина, а, возможно, некий опыт... Я так и не понял, как HID-устройство распознаётся плейерами - ведь у них, у каждого, своё управление. Предполагаю, что есть некий стандарт, который есть в большинстве плейеров. Но сказать хотел о другом.
Считаю, нужно подумать о функциональном назначении устройства. Если это - встраиваемое устройство, то вопрос управления ЦАП-ом в принципе не стоит - поток будет управляться с помощью внешних существующих элементов управления. Если это - самостоятельное устройство, то, следуя современным тенденциям, стоит подумать об управляемости и информативности того, что Вы делаете. Я говорю о возможности дистанционного управления и возможности адекватной индикации происходящих процессов. И то, и другое стоит предусмотреть на плате. Даже если Вы никогда не напишите код для этого, функциональность платы не будет ограничена для других последователей, да и Вы можете в конце-концов дойти до нужной кондиции. Дистанционное управление легко решается с помощью простейшей цепи управления ИК-фотодиодом и наличия разъёмчика, к которому он подключается. Индикатор может реально строиться на SPI-интерфейсе (для чего нужно вывести три линии на внешний разъём). Для реализации управления потребуется только подключить к первому разъёму ИК-приёмник и написать код. Для реализации отображения - использовать любую плату индикации с SPI-интерфейсом (по-моему, Ян такую делал в одной из веток) и написать код. Тогда это будет не повторялка, а собственный продукт.
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

PCM2705 SPI Arduino library

#96 Алаев Ян » 10 января 2018, 13:27

Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

К вопросу подключения кнопок

#97 Алаев Ян » 11 января 2018, 8:56

Не претендую на истину, но считаю, что кнопки лучше подключать приблизительно так:

Скриншот 2018-01-11 09.41.57.png


Skismy, Вы спрашивали по поводу топологии платы, подробно не смотрел, но бросилось в глаза это:
Вот так кварц не ставят.
Плохо.png
Плохо-2.png

У Вас там 12 МГц и нет необходимости удлинять эти цепи. Кварц должен стоят максимально близко к выводам микросхемы, в упор, резистор, шунтирующий кварц, нужно напаять на его выводы или максимально близко к нему, можно, наверное, его вообще не ставить, будет и без него работать, но раз в datasheet стоит - предусмотрите под него место. Конденсаторы от кварца - от каждого вывода и сразу на полигон земли. Не нужно там делать никаких петель.

Лучше.png
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#98 poty » 11 января 2018, 11:03

Мне как-то неловко вновь напоминать, что есть референсный дизайн, в котором есть даже готовые файлы для производства. Референсный дизайн предусматривает также управление через SPI (на внешней плате). Просто "слизать" этот дизайн противоречит каким-то принципам? Я с ним не в полной мере согласен, но он-то точно работать будет!
Фото.png
Вид со стороны деталей
Фото-2.png
Вид с обратной стороны
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

#99 Алаев Ян » 11 января 2018, 11:22

Я считаю, что это устройство не относится к категории "критичных к топологии печатной платы". Я склонен думать, что если аккуратно спаять согласно принципиальной схемы - работать будет при любом раскладе. Я собрал этот ЦАП на макетке с соблюдением общепринятых и общеизвестных правил монтажа. Все работает без проблем.
Стремление к совершенству рождает шедевры! http://www.alaev.org
Алаев Ян
Автор темы, Основатель Форума
Аватара
Возраст: 34
Откуда: Саратов
Репутация: 62 (+62/−0)
Лояльность: 175 (+176/−1)
Сообщения: 2220
Темы: 1
С нами: 4 года 4 месяца

#100 poty » 11 января 2018, 11:56

Трудно сказать. Ведь даже формально цифровая и аналоговая земли не разделены. С "аналоговой" стороны делать полигонную заливку, с моей точки зрения, неправильно. Аналоговые линии проходят параллельно цифровым. Есть вопросы и по разводке цифровых линий. Как правило, они должны разводиться парами, располагающимися как можно ближе друг к другу и иметь одинаковую длину. Иначе, на таких высоких частотах будет размываться фронт и появится значительный джиттер, а это - прямой путь к ухудшению параметров из-за ошибок и так нестабильного клока. Понятно, что выбранный чип не является чем-то заоблачным по качеству, но и ухудшать его до уровня "работает и ладно" я бы не стал - тогда проще купить готовое решение, что демонстрировал нам чуть выше Роман. И деньги экономятся, и время.
Владислав
poty
Профи
Профи
Аватара
Возраст: 52
Откуда: Россия, Москва
Репутация: 76 (+76/−0)
Лояльность: 42 (+43/−1)
Сообщения: 3102
Темы: 1
С нами: 4 года 3 месяца

Пред.След.

Вернуться в Цифро-Аналоговые Преобразователи (ЦАП/DAC)



Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость

cron