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

Все о цифро-аналоговых преобразователях любых типов

Модератор: Алаев Ян

Аватара пользователя
Skismy
Наблюдатель
Наблюдатель
Сообщения: 6
Зарегистрирован: 23 фев 2017, 17:15

#81

Сообщение Skismy » 08 янв 2018, 22:59

Алаев Ян писал(а):я бы посоветовал убедиться в том, что задействованные выводы их имеют. Иначе кнопки работать не будут.
Только выводы кнопок или все задействованные выводы мк? Подтягивать к земле?
Алаев Ян писал(а):В Вашем случае используются выводы МК, которые можно использовать только программным путем. Сразу возникает вопрос - зачем так?, если можно сделать удобнее.
Только из соображений наличия готовой прошивки. С программированием мк не дружу и сейчас недостаточно мотивации до этого дойти.
Получается, код пишется только для записи данных в определенную часть мк при аппаратном программировании?
Алаев Ян писал(а):киньте ссылку, где это представлено в datasheet? У Вас резистор R1 конфликтует с R9.
Разобрался. Да, действительно косяк. Схему прикрепил к письму. Спасибо.
Алаев Ян писал(а):Я только дал бы совет - отмакетируйте схему, не спешите разводить плату, чтобы не получить неработающее устройство.
Эх, SMD компоненты заменить нечем на макетке.)
PCM%2BКонтроллер.jpg

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#82

Сообщение Алаев Ян » 09 янв 2018, 07:37

Skismy писал(а):Только выводы кнопок или все задействованные выводы мк? Подтягивать к земле?
только выводы кнопок. Подтягивать к питанию, к земле Вы посадите вывод, когда нажмете на кнопку. Вы же сами писали об этом
Skismy писал(а):Алаев Ян писал(а):
1. Куда подключены вторые выводы кнопок???
К полигону земли.
Skismy писал(а):Получается, код пишется только для записи данных в определенную часть мк при аппаратном программировании?
Речь идет о аппаратном SPI. Когда Вы используете аппаратный модуль, то его достаточно только настроить и записывать данные в нужный регистр. Далее все будет сделано автоматически. Если делать программный SPI, то формировать клоки, отправлять данные Вы должны самостоятельно. Об этом нужно позаботиться при написании кода в общем цикле выполнения программы. Аппаратный модуль работает без задействования ресурсов цикла программного кода.
Skismy писал(а):Эх, SMD компоненты заменить нечем на макетке.)
да ладно Вам... все это есть в продаже и стоит недорого.
Вот Вам целая книга со всеми стандартными номиналами, если поискать без твердой обложки, то выйдет еще дешевле.
https://ru.aliexpress.com/item/Free-shipping-0805 ... 418627169eee&priceBeautifyAB=0

Вы говорили, что у Вас есть исходный код прошивки под эту схему. Скиньте посмотреть, любопытно.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Skismy
Наблюдатель
Наблюдатель
Сообщения: 6
Зарегистрирован: 23 фев 2017, 17:15

#83

Сообщение Skismy » 09 янв 2018, 17:38

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

Судя по всему, автор действительно использует SPI для передачи данных на PCM2705, т.е. аппаратные пины. Архив с прошивкой отсылаю. в файле pins.h определены все пины.
Хотя я пока не понимаю, как тут реализуется это управление.
Снимок.jpg
Вложения
03.zip
(6.72 КБ) 20 скачиваний

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#84

Сообщение poty » 09 янв 2018, 17:48

Судя по тексту, SPI эмулируется программно. Надо посмотреть протокол обмена SPI для 2705, может там какое нестандартное слово используется.
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#85

Сообщение Алаев Ян » 09 янв 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 */
вот тут написаны все команды, которые отправляются в микросхему ЦАП
Стремление к совершенству рождает шедевры!

Аватара пользователя
Skismy
Наблюдатель
Наблюдатель
Сообщения: 6
Зарегистрирован: 23 фев 2017, 17:15

#86

Сообщение Skismy » 09 янв 2018, 18:41

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

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#87

Сообщение Алаев Ян » 09 янв 2018, 18:55

Skismy писал(а):По цепи, очевидно, пойдет ток
а величину тока Вы можете оценить?
Skismy писал(а):Вопрос у меня в следующем: прошивка будет так же работать, если заменить пины, к которым будут подключены кнопки в соответствии с моей принципиальной схемой?
если речь идет только о кнопках, то вероятнее всего да.
Но кто Вам мешает сделать так же, как и на авторской схеме, чтобы голову не ломать? Зачем усложняете себе жизнь, если не имеете соответствующего опыта, чтобы в этом разобраться самостоятельно? Ведь проще повторить схему автора, не так ли?
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#88

Сообщение poty » 09 янв 2018, 19:03

Что-то я потерял нить разговора...
По поводу резисторов: какой смысл считать токи, если резисторы лишь "подтягивают" потенциал входа к шине питания или земле? Тут нужно ориентироваться на токи утечки, но, как мне кажется, этого делать не стоит, достаточно просто взять стандартное значение из даташита (или включить соответствующие опции в загрузчике и вообще ничего не делать снаружи).
По поводу кода. Судя по тому, что я могу прочитать по коду, функциональность SPI не используется? Производится простая побитовая передача 16 битового слова. Если так, то это должно работать на любых входах/выходах (с заменой дефиниций, конечно). Но я могу ошибаться.
И я бы всё же поправил код на аппаратный SPI.
Последний раз редактировалось poty 09 янв 2018, 19:19, всего редактировалось 1 раз.
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#89

Сообщение Алаев Ян » 09 янв 2018, 19:08

poty писал(а):По поводу резисторов: какой смысл считать токи, если резисторы лишь "подтягивают" потенциал входа к шине питания или земле? Тут нужно ориентироваться на токи утечки, но, как мне кажется, этого делать не стоит, достаточно просто взять стандартное значение из даташита (или включить соответствующие опции в загрузчике и вообще ничего не делать снаружи).
Skismy указал номинал подтягивающего резистора 22 Ома. Вот мне и интересно, он осознает что будет, когда будет нажата кнопка или нет. Токи можно не считать, итак видно, что величина подтягивающего резистора на 3 порядка меньше необходимой. Я не пытаюсь умничать, просто хочу, чтобы Skismy сам увидел и понял свою ошибку.
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#90

Сообщение poty » 09 янв 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 09 янв 2018, 19:33, всего редактировалось 1 раз.
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#91

Сообщение Алаев Ян » 09 янв 2018, 19:33

Я это ранее говорил, но рекомендовал проверить в datasheet.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Skismy
Наблюдатель
Наблюдатель
Сообщения: 6
Зарегистрирован: 23 фев 2017, 17:15

#92

Сообщение Skismy » 09 янв 2018, 20:23

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

Сейчас ещё пытаюсь разобраться, как скомпилировать hex файл из имеющихся исходников.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#93

Сообщение Алаев Ян » 09 янв 2018, 20:31

Skismy писал(а):Ток должен быть порядка 5-10мА?
много.... 10 кОм поставьте туда
Стремление к совершенству рождает шедевры!

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#94

Сообщение Алаев Ян » 10 янв 2018, 07:33

Skismy, хочу спросить - а зачем Вам вообще сдались эти кнопки?
Почему Вы думаете, что на ЦАП их нажимать удобнее, чем на источнике сигнала? Судя по всему, подключено это будет к ПК.
Так в чем проблема подойти к ПК и переключить трек или сделать потише?
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#95

Сообщение poty » 10 янв 2018, 11:59

Я не стал так напирать, как Ян в вопросе управления. :-) Всё же это - больше вкусовщина, а, возможно, некий опыт... Я так и не понял, как HID-устройство распознаётся плейерами - ведь у них, у каждого, своё управление. Предполагаю, что есть некий стандарт, который есть в большинстве плейеров. Но сказать хотел о другом.
Считаю, нужно подумать о функциональном назначении устройства. Если это - встраиваемое устройство, то вопрос управления ЦАП-ом в принципе не стоит - поток будет управляться с помощью внешних существующих элементов управления. Если это - самостоятельное устройство, то, следуя современным тенденциям, стоит подумать об управляемости и информативности того, что Вы делаете. Я говорю о возможности дистанционного управления и возможности адекватной индикации происходящих процессов. И то, и другое стоит предусмотреть на плате. Даже если Вы никогда не напишите код для этого, функциональность платы не будет ограничена для других последователей, да и Вы можете в конце-концов дойти до нужной кондиции. Дистанционное управление легко решается с помощью простейшей цепи управления ИК-фотодиодом и наличия разъёмчика, к которому он подключается. Индикатор может реально строиться на SPI-интерфейсе (для чего нужно вывести три линии на внешний разъём). Для реализации управления потребуется только подключить к первому разъёму ИК-приёмник и написать код. Для реализации отображения - использовать любую плату индикации с SPI-интерфейсом (по-моему, Ян такую делал в одной из веток) и написать код. Тогда это будет не повторялка, а собственный продукт.
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

PCM2705 SPI Arduino library

#96

Сообщение Алаев Ян » 10 янв 2018, 13:27

Стремление к совершенству рождает шедевры!

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

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

#97

Сообщение Алаев Ян » 11 янв 2018, 08:56

Не претендую на истину, но считаю, что кнопки лучше подключать приблизительно так:
Скриншот 2018-01-11 09.41.57.png
Skismy, Вы спрашивали по поводу топологии платы, подробно не смотрел, но бросилось в глаза это:
Вот так кварц не ставят.
Плохо.png
Плохо-2.png
У Вас там 12 МГц и нет необходимости удлинять эти цепи. Кварц должен стоят максимально близко к выводам микросхемы, в упор, резистор, шунтирующий кварц, нужно напаять на его выводы или максимально близко к нему, можно, наверное, его вообще не ставить, будет и без него работать, но раз в datasheet стоит - предусмотрите под него место. Конденсаторы от кварца - от каждого вывода и сразу на полигон земли. Не нужно там делать никаких петель.
Лучше.png
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#98

Сообщение poty » 11 янв 2018, 11:03

Мне как-то неловко вновь напоминать, что есть референсный дизайн, в котором есть даже готовые файлы для производства. Референсный дизайн предусматривает также управление через SPI (на внешней плате). Просто "слизать" этот дизайн противоречит каким-то принципам? Я с ним не в полной мере согласен, но он-то точно работать будет!
Фото.png
Вид со стороны деталей
Фото-2.png
Вид с обратной стороны
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2285
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов
Благодарил (а): 1 раз

#99

Сообщение Алаев Ян » 11 янв 2018, 11:22

Я считаю, что это устройство не относится к категории "критичных к топологии печатной платы". Я склонен думать, что если аккуратно спаять согласно принципиальной схемы - работать будет при любом раскладе. Я собрал этот ЦАП на макетке с соблюдением общепринятых и общеизвестных правил монтажа. Все работает без проблем.
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3275
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва
Поблагодарили: 1 раз

#100

Сообщение poty » 11 янв 2018, 11:56

Трудно сказать. Ведь даже формально цифровая и аналоговая земли не разделены. С "аналоговой" стороны делать полигонную заливку, с моей точки зрения, неправильно. Аналоговые линии проходят параллельно цифровым. Есть вопросы и по разводке цифровых линий. Как правило, они должны разводиться парами, располагающимися как можно ближе друг к другу и иметь одинаковую длину. Иначе, на таких высоких частотах будет размываться фронт и появится значительный джиттер, а это - прямой путь к ухудшению параметров из-за ошибок и так нестабильного клока. Понятно, что выбранный чип не является чем-то заоблачным по качеству, но и ухудшать его до уровня "работает и ладно" я бы не стал - тогда проще купить готовое решение, что демонстрировал нам чуть выше Роман. И деньги экономятся, и время.
Владислав

Ответить