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

既存のブログをこちらへ順次移動します。

ラズベリーパイ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が接続されており音声出力ジャックがあるので、簡単に構成できるのではないかと。

Follow me!

-ラズベリーパイB

執筆者:


comment

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

CAPTCHA


関連記事

no image

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

やっと、外部クロックで、ラズパイを動かすことができました!!! ラズパイからは、GPIOでサンプリング周波数を指示し、これに基づいて、外部ボードであるde0-socが周波数を切り替え、マスタークロック …

no image

ラズベリーパイ、volumioカーネル環境をmakeなしクロスコンパイルなしで2時間で立ち上げる。クロスLAN接続

私は、ラズベリーパイをリニア電源(スイッチング電源でなくノイズが少ない)で動作するノーマルBモデル、rev2(過去記事「ラズベリーパイモデルBの入手と設定1」)をaliexpressで入手し、あえてこ …

no image

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

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

no image

ラズベリーパイ LANクロスケーブル接続を外部ネットへ ネットワークブリッジ 接続トラブル

ラズベリーパイとPCとを直接つないで、かつ、ラズベリーパイを外部ネットワークにつなぐ方法 トラブル対策 ラズベリーパイには、私はvolumioを入れたが、基本はリナックスなので、リナックスベースのプロ …

no image

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

過去記事では、ラズパイ2のi2s方式での音楽再生について、ラズパイ側がクロックスレーブとなる形式(ラズパイの外部からクロックを供給する形式)で再生するためのi2sのドライバーの改造方法、FPGAを用い …

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

3PR エリア3 タイトル

PAGE TOP