オーディオクラフト工房(245)

更新日:2018年12月12日


オーディオ用周波数特性測定器のPCインターフェースを新作
以前に製作したオーディオ用周波数特性測定器のPCインターフェースを新作します。別にそのままでも何の問題も無いのですが、USB付きPICの勉強ということでトライしてみました。わりと簡単に出来ましたのでここに公開いたします。
(以前に製作したオーディオ用周波数特性測定器)
この詳しい製作については次のページを参照下さい。
オーディオ用周波数特性測定器を作ろう
この測定器はPCで周波数特性を表示するために次のような構成になっています。
(周波数測定測定の構成)
上図構成の「インターフェイス」部分を今回新作します。それをUSB付きPICで製作します。
(PIC18F14K50のマイコンボード)
秋月さんで購入したUSB対応超小型マイコンボードです。PIC18F14K50搭載です。
(マイコンボードの裏面)
ボード裏面には水晶振動子も搭載されていますので、このボードだけでUSB接続機器を作ることが可能です。でもUSBのソフトはとても難しいので、マイクロチップのサイトから雛形をダウンロードしてそれを使用するのがベストです。まずはマイクロチップのサイトからツールをダウンロードロードしましょう。
(ツールの選択)
上図のように「Design」のところから「Microchip Libraries for Applications」をクリックします。これは2018年12月の時点のレイアウトなので時期によっては画面デザインが異なる可能性があります。
(ツールのダウンロード)
「Microchip Libraries for Applications」v2017-03-06バージョンをダウンロードします。
(ダウンロードファイル)
上図のexeファイルがダウンロードされますので、ダブルクリックして実行します。ツールのインストールが始まります。
(セットアップ時のコンポーネントの選択)
今回の製作はUSB機器ですので、コンポーネント選択ではUSBのみとします。インストールが完了するとCドライブに「microchip」のフォルダが生成されてそこにツールが全て展開されます。このフォルダはマスターとしておいておくことにします。まずそのフォルダごと別のフォルダにコピーします。そして自分の好きなフォルダ名に変更しておくことをお勧めします。私は「microchip_pic1」という名前にしました。
(今回の製作に必要なフォルダ)
このままでも良いですが、今回の製作には全く必要の無いものも含まれています。フォルダ内を軽くするためにも不要なものは削除しておきましょう。上図を参考にして下さい。心配な方はそのままでも全く問題はありません。今回はUSBのPICをCOMポートに接続したように使うので「cdc_basic」というのを選びます。
(今回選択するプロジェクト)
今回使用するPICと同じ品番が記載されたプロジェクトがあるのでそれをオープンします。どのプロジェクトを開けばよいのか見えにくいと思いますが、上図はクリックすると目で判別出来る大きさになりますのでそこで見て下さい。プロジェクトフォルダ名は
「low_pin_count_usb_development_kit_pic18f14k50.x」になります。
(今回製作する機器の回路図)
PIC18F14K50ボードの周辺に今回の製作に必要な周辺部品を付けます。今回使用しない部分もありますが、オーディオ用周波数特性測定器のインターフェースを新作するということで製作します。回路図の橙色から左側は信号アイソレータの部分ですので、インターフェース部分には含まれません。
(PICのポート割付)
RAxxポートはボード内部で関連付けられているため、こちら側からは設定しないことにします。未使用ポートは出力にしておきます。
(インターフェースボードとした回路基板)
黄色いボタンがありますが、これはテスト用です。本当にUSB機器としてうまく動いているのかを確認するために付けてあります。さて本格的なソフト製作に先立ってテストをしておきましょう。まずソースファイルのフォルダの「buttons.c」というファイルを開きます。
(ソースファイルフォルダのbuttons.c)
上の写真の黄色いボタンの割付を行います。上図のようにRA.3をコメントにしてRC.1をS1_PORTに設定します。次にRBxxポート、RCxxポート他の設定を行います。
(ソースファイルフォルダのsysytem.c)
上図のようにLED_EnableとBUTTON_Enableをコメントにして初期設定の部分を追加します。ここまでの状態で一度ビルドしてPICに書き込みます。事前にライターの設定が自分のシステムに合うようにしておいて下さい。
(黄色いボタンを押した時)
正しくビルドして書き込めたらPICをUSB接続します。初めての時はデバドラのインストールに少し時間が掛かります。正しく認識されるとCOMポートが増えているはずです。私の場合はCOM4となりました。Tera Termなどのターミナルソフトを起動してCOMポートを設定した後、黄色いボタンを押してみて下さい。上図のように表示されれば基本部分はうまく動作しています。
(PC側のAを押した時)
雛形のソフトはPC側のキーボードを押せばその次のアスキーコードを返するようになっています。連続して押すと上図のようになります。
ここから今回のオーディオ用周波数特性測定器のインターフェースに合ったソフトを作り込みます。それほど難しくしくはないですが、雛形に入れ込む形になるので、ちょっとだけ苦労します。
(測定器から送り込まれるデータフォーマット)
測定器からは上図のデータがクロックに同期して送り込まれます。このビット列を変換するのがインターフェースの主な仕事になります。
(変換してPCに送り込むデータ)
周波数のデータとその時の測定レベルをASCIIコード列に変換してPC側送り込みます。自分で作りこむソフトは個別説明するよりはソースを見て頂くほうが良いので下記からダウンロードして下さい。USB機器としてのソースファイルは結構な分量ですが、今回のインターフェースとして動かすために書き換えるソフトは4つのみです。
「main.c」、「system.c」、「app_device_cdc_basic.c」、「system.h」です。それらをまとめて圧縮しました。それぞれのファイルと置き換えて下さい。
書き換えるソフトはここからダウンロードして下さい。
置き換えた後、ビルドしてPICに書き込んで下さい。ひとまず完成です。全ての機器を接続してTera Termで確認してみましょう。
(インターフェースを置き換えて全てを接続)
(周波数と測定データが送り込まれるのを確認)
大完成と思ったのはここまで。実際にTera Termで正しいことを確認出来たのに、前回PC用にVBで作ったアプリを動かすとうまく動いてくれない。VBがエラーを出してストップします。これは何が原因だ?とあれこれ考えました。幸いにもTera Termにはデバッグモードが存在します。この機能を使ってインターフェースからどんなデータが出ているか確認しました。(この辺りの詳細はネットでググッて下さい)
ちょっとした驚きでした。USBから出力されるデータの末尾に必ず[00h]が付加されるということです。
(実際に出力されるデータ)
この[00h]がVBのソフトに悪さをしていました。VBソフトを一部書き換えることを決心して、USB-PICのボードをケースに収めることにしました。
(小型化を強調するために小さいケースに入れました)
(USB接続側です)
セラコンがはみ出たのでケースに穴を開けました。
(信号アイソレータ接続側です)
(大きさの比較です)
かなりの小型化になったと思います。まずは最初のUSB接続機器としてソフトの勉強になったのかなと思います。
ここからがまた大変でした。VBのソフトの修正です。データ末尾に付加される[00h]の削除です。その次に苦労したのがチャートコントロールです。意味不明のエラーが出るのでそれを修正するのに四苦八苦でした。でもなんとか完成しました。VBもソースをおいておきますので、皆さんで確認下さい。私自身としてもチャートコントロールを全て把握出来ていないので、変な操作をすると時々エラーで止まってしまいます。またグラフのDATAを変える場合は一旦全ての周波数の測定が終わった後に変えてください。先ほど変な操作と書いた部分は、表示しているグラフがひとつしか無い場合にそのグラフを消す操作をした場合に起こります。この辺りをご理解頂いた上で御使用下さい。
VBのソースはここからダウンロードして下さい。
(スルー時の周波数特性の表示)
以前の記事にも書きましたが全ての信号レベルで1MHzまでフラットにはなりません。それでも100kHzまではフラットなのでオーディオ用としてはそこそこでは思います。
(ほぼフラットの信号レベル)
今回の機器での信号レベル表示の場合、信号出力が-10dB時にスルー時の周波数特性が1MHzまでほぼフラットになります。
なんとか無事完成です。USB接続機器がここまで簡単に出来るとは驚きです。これからもいろいろ作っていきたいと思います。その場合マイコンがPICであるとは限りません。もっと他のマイコンでもトライしたいと思っています。まだまだオーディオクラフト工房は続きます。

オーディオクラフト工房へ戻る