投稿

PSoC5LP KitProgのUARTブリッジで921,600baud接続

イメージ
PSoC Advent Calender 2017 の21日目の記事です。 1. PSoC 5LP Prototyping KitのUARTブリッジ機能 PSoC 5LP Prototyping Kit(CY8CKIT-059)に付いているKitProgには、プログラムを書き込む機能以外に、PCとPSoC間をUARTとI2Cで接続してくれるブリッジ機能が内蔵されています。これは、デバッグやPCとのデータ転送にとても便利です。 KitProgのUARTブリッジ機能(USB-UART)からは、予めPSoC(ターゲット)にTX/RXが配線されているので、PSoC側にUARTコンポーネントを追加して、PSoC Creator上で下記のようにピンを接続するだけでOKです。 UARTコンポーネントのTX:P12_7ピン UARTコンポーネントのRX:P12_6ピン あとは、UARTコンポーネントに設定したボーレートとPC側のターミナルソフトのボーレートを合わせればよいのです・・・ がっ! やってみると分かるのですが、115,200より高いボーレートだと文字化けしてしまい、あまり高速に接続できないのです(´;ω;`)ウッ… でも、できればもっと高速に接続したいですよねー。 2. KitProgのUSB-UARTの実際のボーレート 何故文字化けしてしまうのかというと、PC側のターミナルソフトのボーレートが115,200より高いとき、KitProgとPSoC間のボーレートが一般的なシリアル通信の速度と若干異なる速度になるからだそうです。 KitProgとPSoC間の 実際のボーレート PC側のターミナルソフトの 設定ボーレート 2000000 2000000 1000000 1000000 1000000 921600 500000 460800 250000 230400 115200 115200 57600 57600 38400 38400 19200 19200 9600 9600 4800 4800 2400 2400 1200 1200 参考(Cypressのコミュニティ): https://community.cypress.com/thread/14568

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

イメージ
はじめに 電子ボリューム(デジタルポテンショメータ)を使ってみたくて、どんなのがあるのかなーと調べてみました! Aliで手に入れやすい電子ボリューム 型番 構造 チャンネル プロトコル 分解能 パッケージ お値段 X9C102/103/503/104 (1k,10k,50k,100k) 抵抗アレイ モノラル 独自(Up/Down) 100TAP dip8, sop8 10個で350円 (X9C104)[dip] MCP41010/050/100 (10k,50k,100k) 抵抗アレイ モノラル SPI 256TAP ほぼsop8, 僅かにdip8 5個で360円 (MCP41100)[sop] MCP42010/050/100 (10k,50k,100k) 抵抗アレイ ステレオ SPI 256TAP ほぼsop14, 僅かにdip14 5個で830円 (MCP42100)[sop] FM62429 (0~-83dB,-∞) 減衰器 (アッテネータ) ステレオ 独自 (2-Wire,絶対値) 84+1TAP dip8,sop8 5個で100円 [dip] PT2257 (0~-79dB) 減衰器 (アッテネータ) ステレオ I2C 80TAP dip8,sop8 10個で450円 [dip] 抵抗アレイ型は、既存の3本足のポテンショメータをそのまま置き換えられるタイプで、減衰器型のものは、入力電圧が減衰されて出力されるタイプのようでした。今回は、 1個当たり20円 と飛びぬけてお安いFM62429を使ってみました(*´▽`*) 配線  オリジナルの三菱M62429のデータシートを見て、アプリケーション例のとおりに接続しました。DATAとCLOCKは、Arduino(pro micro)の8番ピンと14番ピンにそれぞれ繋ぎましたが、スケッチのピン番号は変更できるので、どこに繋いでもよいと思います。  なお、忘れずに VINに2.2μF を挟みましょう!最初これを入れてなくて、音ががびがびになってしま

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": [

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をダウンロードして、インストールします。オプション等は、全部デフォルトにしまし

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のビットクロックはだいたい3

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 Pi 16x2 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級