Сложить 3 одинаковых щита друг на друга и синхронизировать их.

Контекст: У меня есть звуковая дорожка, разделенная на отдельные каналы, сгруппированные по частоте и расположению динамиков. Мне нужно воспроизводить все три канала одновременно и выполнять такие инструкции, как воспроизведение, остановка, повтор, пропуск по всем каналам, чтобы обеспечить их синхронизацию.

Это часть наружной установки, поэтому решение должно быть модульным и надежным.

Если возможно, самое элегантное решение, которое я мог бы придумать, — это использовать Arduino Leonardo и сложите 3 Adafruit Music Maker Shield друг на друга.

Причины, по которым я считаю, что это технически осуществимо:

1. Каждый щит может обмениваться данными через I2C

  1. Глядя на техническое описание VS1053b (ИС, используемая в шилде), чип при максимальной нагрузке потребляет Максимум 60 мА, обычно 37 мА. Arduino может выдавать максимум 500 мА, поэтому эти три экрана должны потреблять небольшую часть этого тока. Arduino также будет питаться от источника питания 12 В.

Подробности, которые мне не совсем ясны:

  1. Как я буду различать каждый щит при отправке инструкций или мне нужно это учитывать, если я хочу, чтобы они функционировали как один?

, 👍3

Обсуждение

щит в ссылке использует SPI, @Juraj

Использование 12 В в качестве источника питания не очень хорошо. Регулятор напряжения должен сжечь 7В, чтобы снизиться до 5В. С этими тремя щитами и самим Leonardo вы получаете около 1 Вт мощности, которую регулятор напряжения преобразует в тепло. Это сделает его довольно теплым., @Gerben

Лично я бы полностью отказался от Arduino и использовал что-то более мощное. Что-то с интерфейсом I2S и подключите кодек с достаточным количеством каналов в соответствии с вашими потребностями. Затем вы воспроизводите один файл, в котором есть все каналы. Знаете, как и объемный звук., @Majenko

@Gerben Итак, вы рекомендуете использовать источник питания 5 В, 500 мА?, @Edward

@Majko Из-за технических ограничений мы не можем экспортировать трек только в стерео. Я не специалист по аудио, я технический специалист, поэтому мне приходится работать с тем, что мне дают., @Edward

Питание 5 В было бы идеально. Подключите его к USB, а не к разъему для ствола., @Gerben


2 ответа


Лучший ответ:

1

Щиты используют SPI. На шилде имеется больше контактов выбора подчиненного устройства для различных устройств шилда. Первый шилд может использовать контакты по умолчанию, но на следующих шилдах вы должны согнуть стандартные контакты шилда в сторону и соединить их с помощью соединительного кабеля с другим набором контактов Arduino.

Затем в скетче вам необходимо определить контакты выбора в конструкторе для каждого экземпляра объекта обработки Adafruit_VS1053.

Adafruit_VS1053_FilePlayer musicPlayer = 
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS, SHIELD_DCS, DREQ, CARDCS);
Adafruit_VS1053_FilePlayer musicPlayer2 = 
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS_2, SHIELD_DCS_2, DREQ_2, CARDCS);
Adafruit_VS1053_FilePlayer musicPlayer3 = 
  Adafruit_VS1053_FilePlayer(SHIELD_RESET, SHIELD_CS_3, SHIELD_DCS_3, DREQ_3, CARDCS);

Они не будут синхронизированы по микросекундам, поскольку вы должны инструктировать их индивидуально.

Используйте только одну SD-карту, поскольку библиотека SD не поддерживает больше карт. Плюсы одной SD карты - всего один пин cs и меньше активных устройств по SPI. Прямого чтения плеером с SD-карты на том же шилде нет.

Примечание. Устройством SPI является SD-карта, а не адаптер. Пустой адаптер ничего не значит на шине, поэтому вы можете вставить карту, например, в экран сверху, и вам не придется сгибать контакты SD-карты cs на других экранах.

,

Звук представляет собой звуковые ландшафты, поэтому нет вокала или битов, которые нужно выравнивать, поэтому рассинхронизация на микросекунды будет в порядке. Зачем использовать только одну SD-карту? Каждый канал будет экспортирован в отдельную дорожку, и каждая дорожка будет на отдельной SD-карте, которая, следовательно, будет иметь собственный экран, чтобы их можно было воспроизводить все вместе., @Edward

добавил в ответ, @Juraj

Мне пришлось использовать три отдельные SD-карты, поскольку каждый канал экспортируется как отдельная дорожка. Поэтому все три трека должны воспроизводиться одновременно. Я до сих пор не совсем понимаю, почему вы предлагаете в данном случае использовать одну SD-карту., @Edward

ваши треки — это файлы. 3 файла на одной SD-карте. плеер открывает файл с SD карты читает следующий буфер и закрывает файл. когда буфер почти пуст, плеер открывает файл, читает следующую часть и закрывает файл. 3 игрока могут читать файлы с одной SD-карты. Библиотека SD не может работать с несколькими SD-картами., @Juraj

Теперь я понимаю. Спасибо за помощь @Juraj, @Edward

и еще одно примечание: устройством SPI является SD-карта, а не адаптер. пустой адаптер ничего не значит на шине, поэтому вы можете вставить карту, например, в экран сверху, и вам не нужно сгибать контакты SD-карты cs на .shields., @Juraj

Мои компоненты пришли, и сегодня я начал работу над проектом. Я переподключил контакты и смог взаимодействовать с несколькими экранами и воспроизводить файлы по отдельности, но пока не одновременно. У меня есть подозрение, что на щите не хватает скорости передачи данных, необходимой для воспроизведения нескольких треков (я использую SD класса 10), но, возможно, я тороплюсь, поскольку получаю ошибку «состояние выхода 1», когда я вызовите метод «.useInterrupt(VS1053_FILEPLAYER_PIN_INT)». Я сделаю новый пост по этой ошибке., @Edward

возможно, вам придется изменить библиотеку mp3. увеличьте размер буфера и внесите изменения, чтобы не все игроки одновременно воспроизводили буфер до конца, @Juraj


1

Шилд действительно использует SPI.

Поэтому вам нужно будет проследить выбор микросхемы и убедиться, что каждый шилд использует отдельный вывод Arduino.

,

Означает ли это перенаправление MCS, DCS и CCS для всех шилдов? https://learn.adafruit.com/adafruit-music-maker-shield-vs1053-mp3-wav-wave-ogg-vorbis-player/pinouts#main-control-breakouts-2-3, @Edward