やまちゃんのオーディオブログ

真空管アンプ、最近は資金調達のためのFX,MetaTrader4ネタもやっています。

ラズベリーパイB

ラズベリーパイBのi2s外部クロックでサンプリング周波数に応じたgpio出力

投稿日:2017年7月29日 更新日:

ラズベリーパイB(モデル1)です。すいません。
もはや中国のalliexpressなどでしか入手できないかもしれません。

<追記:ラズベリーパイ0へ応用できるかもしれません。>

以前の記事の通り、ラズベリーパイBでi2s信号を取り出すことをやっている。
外部のクロックから入力するので、外部クロックの周波数、オシレータを変更しなければならない。
サンプリング周波数ごとのgpio出力を試みた。
「三日坊主な私がいつまでブログやれるか...( ̄~ ̄;) 」さんの「Raspberry pi I2S PCM1716でハイレゾ再生」を参考にします。64倍FS固定なので、
44.1kなら、22.5792M/(44.1k*64)が分周比となり、74VHC161などの分周されたQ出力を選択するようにします。
192kなら、24.576M/(192k×64)が分周比となる。
88.2k、176.4kがあるので、2×4入力切替の74VHC153などで信号を切り替えます。その際、3種類の信号を切り替えるので、2ビットを要します。

以下の17、14,15はGPIO番号で、空いているGPIOの番号を指すものとします。
おそらくこのようにすれば動くのではないかと。
ここの17はオン・オフでオシレーターを切り替える。オンの時、一方はコンプリメタリーMOSFETをつないでNOTの論理回路にし、オフにする。オフの時、他方のコンプリメタリーMOSFETの出力はONになる。
14,15は、分周比選択のための信号切り替えのための2ビット出力で、74VHC153などの2ビット入力に入力する。ピン番号としてはこのとおり3つ使用するが、番号を互いに交換してももちろん構わない。

int myerr = gpio_request_one(17, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 48000 || sampling_rate == 96000 ||sampling_rate == 192000 ) {
gpio_set_value(17, 0);
} else {
gpio_set_value(17, 1);
}
gpio_free(17);
}
int myerr = gpio_request_one(14, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 44100 || sampling_rate == 48000) {
gpio_set_value(14, 0);
if (sampling_rate == 88200 || sampling_rate == 96000) {
gpio_set_value(14, 1);
}
if (sampling_rate == 176400 || sampling_rate == 192000) {
gpio_set_value(14, 0);
}
gpio_free(14);
}
int myerr = gpio_request_one(15, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 44100 || sampling_rate == 48000) {
gpio_set_value(15, 0);
if (sampling_rate == 88200 || sampling_rate == 96000) {
gpio_set_value(15, 0);
}
if (sampling_rate == 176400 || sampling_rate == 192000) {
gpio_set_value(15, 1);
}
gpio_free(15);
}
おそらく以上の通りして動作を確認したという記憶があるが、ピン番号はあいまいで忘れました。また、このままコピっても、全角文字コードのエラーが出るかもしれない。
動作確認は、aplay(2017年のトラ技の連載「高品位Linuxサウンド・アプリケーション・プログラミング超入門」参照、フォーマット変換が必要) or aplayex(当サイトの過去記事参考)で、44.1k、96k音源を切り替える。グラウンドと、LED+100オーム?の抵抗を接続し、その点灯で確認できる。74vhc163の先は、192系列、44.1k系列の出力があり、2つを切り替える必要があるが、おそらく?ダイオードの逆止弁で代用できないかと考えている。
このピン番号をファイルの情報を読み取り適宜変更しようと考えたが、カーネルでファイルを読み込むのは相当難しく手に負えないので諦めた。

この論理回路を構成するには、fpgaで構成できないか考えている。de1-socの場合、元から、DACが接続されており音声出力ジャックがあるので、簡単に構成できるのではないかと。

-ラズベリーパイB

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

ラズベリーパイのi2s外部クロック、その後1(2018年度版)

ラズベリーパイの24ピンの初代Bは、市場からほとんど消えている状況なので、今までの記事は独りよがりになっている可能性が高く、そこで、入手性の高いラズベリーパイ2を購入し、誰でも、外部クロックを追試でき …

no image

ラズベリーパイのi2s外部クロック、その後3-1(2018年度版)

前回の続きです。過去の記事にも同じようなことを書いているので、そちらも参照願います。 今回は、カーネルをいじることについて触れます。 <2018.4.30 修正:ファイルが大きくなりすぎたので、3つに …

no image

ラズベリーパイ カーネル3 I2Sドライバのコンパイルをあきらめず続ける

以前の記事に引き続き、I2Sドライバのコンパイルをあきらめず続ける。 「三日坊主な私がいつまでブログやれるか...( ̄~ ̄;) 」のラズベリーパイの記事を参考にさせていただいています。 volumio …

no image

ラズベリーパイモデルBの入手と設定1

ラズベリーパイモデルB(ラズパイ1)をアリエクスプレスから入手しました。 ラズベリーパイは、最近はやりのリナックスが動くマイコンチップで、リナックスマシンとして動作します。 私は、トランジスタ技術20 …

no image

ラズベリーパイのi2s外部クロック、その後6(2018年度版)

やっと動きました!!音が鳴りました!! まずは、カーネルを改造せず、ラズベリーパイから提供されるBCLK、LRCK、DATAに加え、de0-socのpllで作成したマスタークロックのxckで音を鳴らし …

[最近の記事]
2017年7月
 1
2345678
9101112131415
16171819202122
23242526272829
3031