ラベル I2S の投稿を表示しています。 すべての投稿を表示
ラベル I2S の投稿を表示しています。 すべての投稿を表示

2023年4月11日火曜日

Raspberry Pi Pico/Pico WからI2SでPCM5102ボードにオーディオ出力(USB-DAC)

この記事では,Raspberry Pi Picoをpico audioボードに接続して,ここにあるプログラムをRaspberry Pi Picoに書き込んで,USB-DACとして使いました.

ここでは,ここで購入できる一般のPCM5102 I2Sボードを使ってUSB-DACを作成します.

プログラムの書き込みはここと一緒です.配付されたプログラムから何も書き換えていません.

ハードウェアの結線は以下のとおりです.このDACボードは5V電源なので,以下のように接続します.


USB-DACボードの左から順に書いています.

  • GND→接続なし
  • MCLK→接続なし
  • BICK→PICO 31pin
  • DATA→PICO 34pin
  • LRCK→PICO 32pin
  • GND→PICO 38pin
  • MUTE→結線なし
  • VCC→PICO 40pin

Raspberry Pi Pico/Pico Wのピン配置はこのようになっています.

これでパソコンからUSB-DACとして認識して音が出ました.


2021年5月17日月曜日

Raspberry Pi PicoでUSB-DAC(I2Sボードをつけて音出し)

前の投稿でRaspberry Pi PicoをUSB-DACにするソースコードをコンパイルし,ボードに書き込んで,パソコンでUSB-DACとして認識させるところまでできたので,今回は最終的に音出しまでします.

まず,I2S-DACボードはこれを使いました.Raspberry Pi Picoに足の配置が合わせてあり,そのまま挿すことができます.ボードの裏には,Raspberry Pi Picoの絵が描いてあり,挿す向きもわかります.Raspberry Pi Picoに足をはんだ付けしますが,足が曲がって付かないように,Raspberry Pi PicoとI2S DACボードの両方にピンを挿した状態ではんだ付けします.

実際に動かすには,ソースコードの書き換えが必要でした.この製品のページ

You can use Pico Audio Pack with the I2S audio examples provided by Raspberry Pi in their experimental examples (usb_sound_card and sine_wave_i2s). You'll need to #define PICO_AUDIO_I2S_DATA_PIN and PICO_AUDIO_I2S_CLOCK_PIN_BASE to 9 and 10 respectively to tell the examples which pins are being used for the audio data.

とあります.具体的にこれらの値が定義されているファイルは

pico-extras/src/rp2_common/pico_audio_i2s/include/pico/audio_i2s.h 

です.このファイルを以下のように書き換えます.


#ifndef PICO_AUDIO_I2S_DATA_PIN
//#warning PICO_AUDIO_I2S_DATA_PIN should be defined when using AUDIO_I2S
// https://shop.pimoroni.com/products/pico-audio-pack
#define PICO_AUDIO_I2S_DATA_PIN 9 // 28
#endif

#ifndef PICO_AUDIO_I2S_CLOCK_PIN_BASE
//#warning PICO_AUDIO_I2S_CLOCK_PIN_BASE should be defined when using AUDIO_I2S
// https://shop.pimoroni.com/products/pico-audio-pack
#define PICO_AUDIO_I2S_CLOCK_PIN_BASE 10 // 26
#endif


実際に使っているピン番号は12, 14, 15なので,なぜこの番号なのかは謎です.この後,pico-extrasをbuildしなおします.その上で,pico-playgroundをbuildしなおします.

pico-playground/build/usb_sound_card/usb_sound_card.uf2をRaspberry Pi Picoに書き込むと,ボードが再起動して,音がこのボード経由で出せるようになります.

I2Sボードの方はPCM5100Aで32bit, 384kHzまで出力できるのに,Raspberry Pi PicoがXMOSと違いソフトウェアで処理を実行しているので,16bit, 44.1kHz/48kHzしか出力できないのは残念です.

ただ,ソフトウェアでUSBから入力した信号をI2Sに出力しているので,ここで信号処理が色々できると面白いと思います.ソースコードの公開されているUSB-DACって,物がないので,自分でいじるには貴重はハードウェアではないでしょうか.