Как выводить аудиосигналы через GPIO?

12

Есть ли способ вывести аудиосигналы через GPIO и есть ли какой-либо недостаток в этом способе?

Тревор
источник
1
Один очень интересный способ вывода любого аудиосигнала через любой вывод цифрового ввода-вывода с использованием минимального аппаратного обеспечения заключается в следующем: romanblack.com/BTc_alg.htm
slebetman

Ответы:

9

Каналы аудиоразъема (левый и правый) обеспечиваются управляемым ШИМ GPIO (канал 0 - GPIO 12 или 18, а канал 1 - GPIO 13 или 19).

Так что, если вы подключите соответствующие схемы к этим GPIO, вы получите аудио.

См. Периферийные устройства ARM BCM2835 для получения подробной информации о периферийных устройствах GPIO и PWM.


ИЗМЕНЕНО ДЛЯ ДОБАВЛЕНИЯ

Некоторый фон

На последних Pis вывод аудиовыходов обеспечивается каналами 0 и 1 ШИМ. Канал 0 ШИМ подается на GPIO40, который подключен к (стерео) правому каналу, а канал 1 ШИМ подается на GPIO45, который подключен к (стерео) левый канал.

Эти каналы ШИМ могут быть дополнительно поданы в доступный для пользователя GPIO.

Канал ШИМ 0 может быть направлен на GPIO12 и GPIO18.

Канал 1 ШИМ может быть направлен на GPIO13 и GPIO19.

Вы маршрутизируете ШИМ в GPIO, устанавливая определенный режим GPIO следующим образом:

  • GPIO12 - установить режим ALT0
  • GPIO13 - установить режим ALT0
  • GPIO18 - установить режим ALT5
  • GPIO19 - установить режим ALT5

Смотрите страницу 102 спецификации Broadcom выше.

Существуют различные способы настройки режима GPIO.

Мои свинки утилита использует M команду.

Например, pigs m 18 5 переведет GPIO18 в режим ALT5.

Джоан
источник
Нужно ли использовать оба канала? и почему есть или там, скажем, я использую Pi 3 и каково количество GPIO, которые имеют аппаратный ШИМ? В соответствии с этим , есть только один вывод с ШИМ, это вывод 12 (GPIO18).
Тревор
@IlDivinCodino Вы можете использовать один или два канала. Стерео требует два, моно один. В моем ответе упоминается используемый GPIO, или означает, что вы можете использовать любой GPIO (или оба, если можете найти причину для этого).
Джоан
Собственная библиотека @ joan (IIRC) pigpio позволяет ШИМ через произвольные контакты - интересно, сколько аудио каналов вы могли бы получить таким образом.
Крис Х
1
@ChrisH Pigpio DMA Timed PWM ограничен тем, что может быть сгенерировано только фиксированное количество частот с ограниченным числом шагов между выключением и полным включением. Это хорошо для многих приложений, но, вероятно, не для аудио (я не знаю, как PWM используется для генерации аудио, так что это предположение с моей стороны).
Джоан
2
@ joan, это дискретные частоты, которые были бы большей проблемой (рабочий цикл 50:50, вероятно, лучше всего подходит для максимальной громкости). Так что было бы хорошо для будильника, но не для общего воспроизведения. У меня может быть шанс поиграть с ним на выходных.
Крис Х
2

Точно так же, как и в ответе Джоан, аналоговый аудиовыход «Пи» как раз и есть. У Adafruit есть статья, подробно описывающая эту схему для использования с Pi Zero (которая поставляется без него), см. Здесь .

Ганима
источник
у вас должно быть описание для статьи, просто поставить ссылку не очень хороший способ ответить в stackexchange. Когда-нибудь ссылка может умереть.
Тревор
2
1) это не просто размещение ссылки, это предоставление контекста (хотя и немного, как я признаю), 2) гниение ссылки, скорее всего, не проблема, поскольку это внутренняя ссылка в raspberrypi.SE, а не внешняя ссылка (таким образом, я бы утверждаю, что это будет так же настойчиво, как и ваш вопрос). Идея состояла в том, чтобы не повторять информацию, представленную там, и не закрывать оба вопроса как обманчивые друг для друга (потому что это не так, imho).
Ганима