投稿

Arduinoでステレオ電子ボリューム(FM62429)

イメージ
はじめに 電子ボリューム(デジタルポテンショメータ)を使ってみたくて、どんなのがあるのかなーと調べてみました!

Aliで手に入れやすい電子ボリューム 型番 構造 チャンネル プロトコル 分解能 パッケージ お値段 X9C102/103/503/104 (1k,10k,50k,100k) 抵抗アレイ モノラル 独自(Up/Down) 100TAP dip8, sop8 10個で350円 (X9C104)[dip] MCP41010/050/100

ESP32: Visual Studio CodeでESP-IDFを使う(Linux編)

イメージ
Windows編に引き続き、Linux編ですっ( `・ω・´) ほとんど手順は同じなので、ざっくり行きます!
元記事:https://github.com/espressif/esp-idf/issues/303
1. ESP-IDFのインストール公式セットアップガイドを参考にインストールします。インストールしたら、.zshrcとか.cshrcとか.profileに、環境変数 IDF_PATH の設定を追加しておきます。
2. Visual Studio Codeのインストールhttps://code.visualstudio.com/からインストールします!
3. C/C++ extensionのインストールWindows編と同じです!(←それでいいのかー!
4. プロジェクトの設定[ファイル]メニューの[フォルダーを開く]から、既存のESP-IDFのプロジェクトを開きます。開いたらCtrl+Shift+Pを押し、「edit」と入力すると出てくる「C/Cpp: Edit Configurations」を選択します。すると、「c_cpp_properties.json」が開かれるので、以下の内容に上書きします。[ユーザー名]のところだけ、適宜書き換えて下さい。

{ "configurations": [ { "name": "Linux", "includePath": [ "${workspaceRoot}", "/home/[ユーザー名]/esp/esp-idf/components" ], "defines": [], "intelliSenseMode": "clang-x64", "browse": { "path": [ "${workspaceR…

ESP32: Visual Studio CodeでESP-IDFを使う(Windows編)

イメージ
ESP-IDFはコマンドラインでmakeするので、今までなんとなくLinux+emacsで使ってました。でも、#defineされてる定数の定義を探すときとか、zshなら「grep キーワード **/*」で再帰検索できるとはいえ、やっぱりちょっとめんどくさいですよねー(´・ω・`)

それで、EclipseやNetBeans等のIDEを使っている方がいるようだったので、もしかして!と思って検索したら、MicrosoftのVisual Studio Code(VSCode)を使う方法が載っていたので、試してみました!インテリセンスとか使えるみたいです(≧∇≦)b

ちなみに、元記事ではLinuxで使っているようですが、コマンドラインを使わないならWindowsでもいいんじゃない?と思い、Windowsにインストールしてみました(*ノノ)
元記事:https://github.com/espressif/esp-idf/issues/303
1. ESP32のツールチェーンを解凍する公式セットアップガイドからWindows用のToolchainとMSYS2が入ったオールインワンのzipをダウンロードして、C:ドライブ直下、もしくは好きなフォルダに解凍します。この記事では「C:\msys32」にあると想定して説明します! 2. ESP-IDFをcloneする「C:\msys32\mingw32.exe」を実行して、以下のコマンドを実行します。
mkdir ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
echo export IDF_PATH=\"${HOME}/esp/esp-idf\" >/etc/profile.d/export_idf_path.sh「exit」してmingw32.exeを終了します。 3. Visual Studio Code(VSCode)をインストールするhttps://code.visualstudio.com/からVisual Studio Codeをダウンロードして、インストールします。オプション等は、全部デフォルトにしました(●´ω`●)4. VSCodeにC/C++ extensionをインストールするV…

PSoC5LP Prototyping Kitで作るUSBオーディオI/F(I2S出力対応) その2

イメージ
前回、I2S用のビットクロックを作ろうとして、コンデンサと抵抗を外付けしてVCO(Voltage Controlled Oscillator)を作りましたが、今回はそれを分数分周器に置き換えました。そのため、アンプやI2S DAC以外の外付け部品は要らなくなりました(*´▽`*)
ソースはこちら https://github.com/MinatsuT/USB_Audio_PSoC5LP_I2S

ちょっと温度が変化したり指で触ったりするだけで周波数が変わっちゃう”なんちゃってVCO”と違い、安定した入力クロックを好きに分周できるので、 最初に、入力クロックがきっちり正しいと仮定して分周比を計算その分周比でUSBホストからのSoF(Start of Frame)の到着間隔(1ms)を基準に、実際に出力されたパルスをカウントカウント結果を基に誤差を修正。出力周波数は分周比に完全に比例するので、修正値の計算も簡単! ということで、PC側で再生デバイスのサンプリングレートを変更しても、即座に追従できるようになりました・・・おぉぅ・・・(゜ロ゜) 
(PCでサンプリングレートを変更したときのファンファーレがうるさくてすみません。。。)
生成しているビットクロックの周波数変動も殆ど無く、今まで上下にゆらゆら揺れていた再生バッファの溜まり具体もほぼ横一直線ヽ(´▽`)ノワーイ 分数分周器(Fractional Divider)  分周器と言えば入力されたクロックの整数分の1の周波数を作るものが一般的ですが、例えば入力クロックの3/5とか5/11に分周できれば、非整数倍の周波数を作れます。しかも、分母に与える数を大きくするだけで、簡単に精度が上がります。分母を32bitにすれば43億分の1ですよ奥様!ただし、例えば分周比3/5なら「入力クロックのパルスを5回に3回だけ通過させ、残りの2回は遮断する」という動作になるため、クロックが歯抜けになりジッタが増えます。なので、オーディオ用のクロックとしてはよろしくないんじゃないかと思って避けてたのですが・・・試してみたところ、私の耳ではジッタが生じてるのかどうか全然分かりませんでした(゜◇゜) まぁよく考えてみれば、I2Sのビットクロックはだいたい3MHz(44.1kHz時)~6MHz(96.0kHz時)なので、それがたかだか1クロック分前後し…

PSoC5LP Prototyping Kitで作るUSBオーディオI/F(I2S出力対応)

イメージ
PSoC5にはCE95390 - USB Audio with PSoC 3/5LPというUSBオーディオの公式サンプルがありますが、32kHz 8ビット モノラルなんですよねー。ということで、これを96kHz 16ビット ステレオに拡張しつつ、内蔵の8bit DACだけでなく外部DACも利用できるように、I2S出力にも対応してます(*´▽`*)

 前置きはいいからとりあえず鳴らしてみたい!という方は、下記のダウンロード先に最小限の説明があるので、それを見て試してみてね(●´ω`●)

PSoC Creator用プロジェクトのダウンロードCY8CKIT-059(PSoC5LP) USB Audio with Internal DAC and I2S Dual Out
必要な部品 必須パーツPSoC5LP Prototyping Kit(CY8CKIT-059)コンデンサ:C1(100pF), C2(1uF)抵抗:R1(100kΩ) オプションパーツ(無くてもOKです)I2S DACボード
マスタークロックを自己生成できるのものが使えます。信号電圧が3.3Vならそのまま使えますが、5V駆動の場合はTopDesign.cysch内のI2Sコンポーネントの出力先を変更して、3.3V生成部分を使わずピン直接出力すればOKです。私は、PCM5102A搭載のちっこいボードを買いました(送料込み512円)。
Interface I2S PCM5102 DAC Decoder GY-PCM5102 I2S Player Module For Raspberry Pi16x2 LCD(LCD1602)
I2C接続で信号電圧が5Vのもの。よくあるArduino用のが使えます。繋いでおくと、Audio出力のON/OFF状態と現在の再生周波数が表示されます。アンプボード
アンプ内蔵スピーカーで鳴らす場合は不要ですが、私は持っていなかったので、お安いD級アンプボードを買いました(送料込み71円)。
new 1pcs PAM8403 mini 5V digital amplifier board with switch potentiometer can be USB poweredスピーカー
D級アンプって、ヘッドフォン端子のように左右のマイナス端子を共通にできないんですね(゜ロ゜)ということ…