PIC32MX270F256B-50I/SP (HARMONY)

  PIC32MX270F256B-50I/SPでは、最大システムクロックが50MHzです。なお、PICにファームウェアを書き込んでいる間、UART出力から、おかしなシグナルが出てきます。いまのところPIC自身の問題で、12、14、18番ピンが異常と考えています。PICにファームウェアを書き込んでいる間、12番ピンは約1V、14番ピンは約3V、18番ピンは0-3Vのパルス列が出ています。ピンをアナログ、デジタルIN、デジタルOUTに変えても異常状態は同じです。Silicon Revision A2でも修正されていません。これらのピンの使用は慎重に。PICにファームウェアを書き込んでしまった後は、正常に稼働します。


PIC32MX270F256B-50I/SPを用いたテスト回路

  回路図と実際の回路を以下に示します。回路は、ユニバーサル基板(Takasu IC-701-72)上で組んでいます。コンデンサーは、すべてチップ型のもので、基板裏面に半田づけしています。また,水晶発振子(Xtal)には20MHzのものを用いています。PIC内部では50MHzがシステムクロックとなるよう設定しています。

裏面拡大図(コンデンサー配置) <=ここをクリック


MHC環境

1.MPLAB Code Configurator(Harmony)の導入の節に従ってtestなるプロジェクトを作成します。ただし、以前にtestプロジェクトを作成したことがあるならば、再度作成する必要はありません。作成し終わったらプロジェクト削除してもかまいません。というのは、当面必要となるHarmony Frameworkパッケージがダウンロードできたからです。

2.MHC環境を整えます。Harmony Frameworkのパッケージを保存しておくためのフォルダーの場所を確認しておきます。私の場合はC:\Users\yts\Harmony3です。このフォルダーHarmony3の中にあるファイルHarmony3\bsp\boards\module.xml のバックアップを取っておきます。

3.config311.zipを解凍すると、config311フォルダーの中に、bspフォルダーが出てきますので、このbspフォルダーをHarmony3フォルダーの中に上書きします。これで、PIC32MX270F256B-50I/SPを用いたテスト回路用のMHC環境が整います。なお、MHC環境の詳細については、以下のbspファイル節を見てください。

 注意:以下のファームウェアを使用する前に、必ずMHC環境を(1度だけ)整える必要があります。


回路動作確認

 作成した回路がきちんと働いているかどうかを確かめます。ファームウェアMX270_wait.zipをPICに書き込み、実行します。

1.ピンヘッダJP1にはファームウェア書き込み器(たとえばICD3)を接続します。また、3.3Vの電源も接続します。

2.MX270_wait.zipを解凍して出てくるMX270_waitフォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。

3.MPLAB X を立ち上げ、MX270_waitフォルダーの中にあるプロジェクトを読み込みます(MPLAB XのメニューからFile->Open Project...を選択)。

4.Projectsウィンドウにおいて、MX270_waitと書かれた箇所をマウスで右クリックして、サブメニューを出します。そのサブメニューのSet as Main Projectという項目がありますので、それを選択します。MX270_waitが太文字になったことを確認します。

5.ファームウェアを走らせるために、MPLAB X のツールバーからRun Main Projectアイコン()をマウスでクリックします。すると、次のように、書き込み器(プログラマー)として何を使うかを尋ねられますので、IDC3などを選択します。OKボタンを押すと、ビルド(コンパイルとリンク)を行ったのち、ファームウェアをPICに書き込み、実行するまで自動で行ってくれます。

6.ファームウェアを走らせると、約1秒周期のパルス( 3.3V, 0V, 3.3V, ...) がPICの2番ピン(RA0ピン)から出力されますので、テスターで、このピンの電圧を測定してください。もし、パルスが出ていなければ回路に問題がありますので、回路を再チェックしてください。 app.cのAPP_Tasks(void)関数の中身をみれば、何をしているのかが簡単に分かると思います。


HIDマウス

  マウスを模倣(emulation)します。具体的にはマウスカーソルがディスプレイ上で円を描きます。 PICに書き込むファームウェアはMX270_mouse.zipです。MX270_mouse.zipを解凍して出てくるMX270_mouseフォルダーをHarmonyProjectsフォルダーの中に入れます。このファームウェアは、Harmony3\usb_apps_device\apps\hid_mouseを参考にして、MCC (Harmony) で最初から作成したものです。

1.ファームウェアをPICに書き込み、実行します。

2.PIC基板とPCをUSBケーブルで接続すると、パーソナル・コンピュータのディスプレイ上で、マウスカーソルが円を描きます。

3.SWITCH1(26番ピン)をGNDに落とすたびに、マウスが動いたり、止まったりします。


HIDキーボード

  キーボードを模倣(emulation)します。PICに書き込むファームウェアはMX270_keyboard.zipです。MX270_keyboard.zipを解凍して出てくるMX270_keyboardフォルダーをHarmonyProjectsフォルダー中に入れます。このファームウェアは、Harmony3\usb_apps_device\apps\hid_keyboardを参考にして、MCC (Harmony) で最初から作成したものです。

1.ファームウェアをPICに書き込みます。

2.適当なエディッターソフトウェア(秀丸、ノートブック、ワードなど)を起動させます。

3.PIC基板とPCをUSBケーブルで接続します。

4.SWITCH1(26番ピン)をGNDに落とすたびに、b、c・・・・・とタイプされて行きます。

5.このファームウェアでは、キーボードについている3つのLED(Num Lock、Caps Lock、Scroll Lock)のうち、前者2つに対応しています。パーソナル・コンピュータに接続されているキーボードで、Caps Lockの設定・解除で、PIC基板のLED1ピン(2番ピン)がHになったり、Lになったりします。また、Num Lockの設定・解除で、PIC基板のLED2ピン(3番ピン)がHになったり、Lになったりします。


一般的HID

  一般的(Generic)HIDでPICとパーソナル・コンピュータの間でデータを交換します。PICに書き込むファームウェアはMX270_hid_basic.zipです。MX270_hid_basic.zipを解凍して出てくるMX270_hid_basicフォルダーをHarmonyProjectsフォルダーの中に入れます。このファームウェアは、Harmony3\usb_apps_device\apps\hid_basicを参考にして、MCC (Harmony) で最初から作成したものです。特に、app.cの中のAPP_Tasks(void)関数の中のcase APP_STATE_MAIN_TASK:文の中身を変えています。

1.ファームウェアをPICに書き込みます。

2.PIC基板とPCをUSBケーブルで接続します。

3.パーソナル・コンピュータ用のアプリケーション・ソフトウェア(Visual Studio 2017)は、MX270_hid_basic\utilitiesフォルダーの中に入っています。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。MX270_hid_basic\utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、下のボックスに現れるはずです。

付録. Android携帯用(ヴァージョン10と13)のアプリケーション・ソフトウェア(Android Studio)が、MX270_hid_basic\utilitiesフォルダーの中のhid_host_androidフォルダーに入っています。hid_host_androidフォルダーの中のreadme.txtにも書いてありますが、このソフトウェアは「AndroidからUSB HIDでマイコンを制御してみる」(hiranoさん)で紹介されているものに、ほんの僅かに手を加えたものです。PIC基板とAndroid携帯をUSBホスト(OTG)ケーブルで接続して、アプリケーション・ソフトウェアをAndroid携帯用上で実行します。以下の図は実行例です。


USB(ベンダークラス)

  一般的(Generic)HIDでPICとパーソナル・コンピュータの間でデータを交換します。PICに書き込むファームウェアはMX270_vender.zipです。MX270_vender.zipを解凍して出てくるMX270_venderフォルダーをHarmonyProjectsフォルダーの中に入れます。このファームウェアは、Harmony3\usb_apps_device\apps\vendorを参考にして、MCC (Harmony) で最初から作成したものです。特に、app.cの中のAPP_Tasks(void)関数の中のcase APP_STATE_MAIN_TASK:文の中身を変えています。

1.ファームウェアをPICに書き込みます。

2.PIC基板とPCをUSBケーブルで接続します。

3.デバイストライバーを組み込みます。具体的には、MX270_vender.zipを解凍して出てくるMX270_vender\utilities\winusb_installerフォルダーの中にあるUSBDriverInstaller.exeを実行します。Instrall Driversボタンを押すとデバイスドライバーがインストールされます。なお、すでにインストールされたデバイスドライバーを削除するときはRemove Driversボタンを押します。

4. パーソナル・コンピュータ用のアプリケーション・ソフトウェア(Visual Studio 2017)は、MX270_vender\utilitiesフォルダーの中に入っています。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。MX270_vender\utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに223と現れれば、正常に動作しています。送信された文字列のうち、第1番目の文字だけが変わったもの(アスキーコードで1足されたもの)が、下のボックスに現れるはずです。


USB(CDC)

  PIC基板をCDC(Communication Device Class)機器として、パーソナル・コンピュータと接続し、PIC基板とPCの間でデータのやり取りを行います。PCからCDC機器としたPIC基板を見ると、PCはPIC基板をまるでRS232C機器であると認識します。したがって、PC上でRS232C機器と通信を行うための”Tera Term”なるアプリケーション・ソフトウェア(ウェブで検索ください。フリーソフトです。)を利用するだけで、PCからPIC基板を制御できるようになります。このファームウェアは、Harmony3\usb_apps_device\apps\cdc_com_port_singleを参考にして、MCC (Harmony) で最初から作成したものです。

1.PICに書き込むファームウェアはMX270_cdc.zipです。MX270_cdc.zipを解凍して出てくるMX270_cdcフォルダーをHarmonyProjectsフォルダーの中に入れます。

2.ファームウェアをPICに書き込み、実行します(PIC基板がCDC機器になります)。

3.PIC基板とPCをUSBケーブルで接続します。

4.Windows10(21H2)では、CDC用標準デバイスドライバ(Usbser.sys)を使用するようです。つまり、PIC基板とPCをUSBケーブルで接続すると自動的にこのドライバーが組み込まれまれるようです(別途ドライバーを組み込む必要がない)。ポート番号を調べるために、ComNumber.zipを解凍して出て来るフォルダーのなかのComNumber.exeをPC上で実行します。実行ダイアログ画面からポート番号はCOM3ということが分かります。

5.PC上でTera Termを起動して、メニューから”設定->シリアルポート”を選択すると、シリアルポート設定画面が以下の様に現れるので、ボーレートを57600 bps、データビットを8ビット、 パリティはなし, ストップビットを1、フロー・コントロールはなし、と設定してください。 設定が終わったら、シリアルポート設定画面を閉じ、メニューから”設定->設定の保存”を選択して、シリアルポート設定内容をファイルに保存しておくと、次回の接続時には、自動的に保存した設定内容が反映されます。

6.キーボードから適当なキーを押下すると、押したキーに対するアスキーコードに1を足したものが、Tera Termの画面に現れるはずです。たとえば、”a”なるキーを押下すると、”b”がTera Termの画面に現れるはずです。

7.また、SWITCH1(26番ピン)をGNDに落とすたびに、「PUSH BUTTON PRESSED」とタイプされます。

8.参考までに、パーソナル・コンピュータ用のアプリケーション・ソフトウェアをMX270_cdc\utilitiesフォルダーに入れておきました。フォルダーの中にあるCDCapprication_VCフォルダーは[Visual C++用]で、CDCappricationフォルダーは[C#用]です。フォルダーの中の実行ファイル(CDCapprication_VC.exeかCDCapprication.exe)を実行すると、2つのエディットボックスと送信ボタンを持つダイアログ(対話)・ウィンドウが現れます。 例えば上のボックスに123と入れて、送信ボタンをクリックすると、下のボックスに234と現れれば、正常に動作しています。送信された文字列のそれぞれの文字にアスキーコードで1足されたものが、下のボックスに現れます。なお、 ソースコードのコンパイルにはVisual Studio Community 2017を使用しました。

なお、PIC基板をPCの別のUSBコネクタに接続するとCOM番号が変わってしまいます。これを避けるためには、PICのファームウェアの中でシリアル番号をつける必要があります。シリアル番号の付け方は、CDC_serialnumber.txtを参照してください。

ところで、PICのファームウェアで、受信したデータのバイト数は、app.cファイルの中のAPP_USBDeviceCDCEventHandler関数の中のケース文case USB_DEVICE_CDC_EVENT_READ_COMPLETE:の中にあるeventDataRead->lengthが所有しています。


HID+HID(2インターフェース複合HIDデバイス)

1.PICに書き込むファームウェアはMX270_hid_hid.zipです。MX270_hid_hid.zipを解凍して出てくるMX270_hid_hidフォルダーをHarmonyProjectsフォルダーの中に入れます。

2.ファームウェアをPICに書き込みます。

4.PIC基板とPCをUSBケーブルで接続します。

5.パーソナル・コンピュータ用のアプリケーション・ソフトウェアはMX270_hid_hid\utilitiesフォルダーの中にあります。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。MX270_hid_hid\utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディット・ボックスと2つのボタンを持ったダイアログ・ウィンドウが現れます。上のエディット・ボックスに適当な文字列を入れて、ボタンのどちらかを押すと、下のエディット・ボックスに文字列が現れます。入力した文字列の最初の文字だけが変化します。たとえば、上のエディット・ボックスに“123” と入れて、"INT1"ボタンを押すと、下のエディット・ボックスに“223”が現れます。入力した文字列の最初の文字にアスキーコードで1を足したものが、‘2’ = ‘1’ +1となって、下のエディット・ボックスに現れる文字列の最初の文字となります。文字列の他の部分はそのままPICを経由してPCへと返ってきます。もし、"INT2"ボタンを押すと、下のエディット・ボックスに“323”が現れます。入力した文字列の最初の文字にアスキーコードで2を足したものが、‘3’ = ‘1’ +2となって、下のエディット・ボックスに現れる文字列の最初の文字となります。


HID+マウス(2インターフェース複合HIDデバイス)

  1つのPICの中に、互いに独立なHID1つとHIDマウス1つを実現し、パーソナル・コンピュータとの間でデータを交換します。

1.PICに書き込むファームウェアはMX270_hid_mouse.zipです。MX270_hid_mouse.zipを解凍して出てくるMX270_hid_mouseフォルダーをHarmonyProjectsフォルダーの中に入れます。

2.ファームウェアをPICに書き込みます。

4.PIC基板とPCをUSBケーブルで接続します。

5.パーソナル・コンピュータ用のアプリケーション・ソフトウェアはMX270_hid_mouse\utilitiesフォルダーの中にあります。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。MX270_hid_mouse\utilitiesフォルダーの中にある実行ファイル(VC.exeかCLR.exeかCS.exe)を実行すると、2つのエディット・ボックスと2つのボタンを持ったダイアログ・ウィンドウが現れます。上のエディット・ボックスに“123” と入れて、"INT1"ボタンを押すと(INT2ボタンは意味がありません)、下のエディット・ボックスに“223”が現れます。入力した文字列の最初の文字にアスキーコードで1を足したものが、‘2’ = ‘1’ +1となって、下のエディット・ボックスに現れる文字列の最初の文字となります。 また、上のエディット・ボックスに'y'から始まる文字列を入れ、"INT1"ボタンを押すとマウスカーソルが右に50だけ移動します。


USBオーディオスピーカー

  Harmony 3 Configuratorには、「Harmony3\audio\apps\usb_speaker」というUSBオーディオスピーカーを模擬するサンプル・ファームウェアがあります(audioパッケージをインストるす必要あり)。ただ、このファームウェアは、USBケーブルを通して送られてくるパルス符号変調(PCM:Pluse Code Modulation)信号をDAC(デジタルアナログコンバーター)を通してアナログ音信号に変換して出力しています。

  ここでは、USBオーディオスピーカーをもっと手軽に試すために、PCM信号をパルス幅変調(PWM:pulse width modulation)して、これをローパスフィルターを通してアナログ音信号に変換して出力しました。DACは不要になります。ファームウェアはaudio_speakerMX32.zipです。

回路

  パルス幅変調(PWM:pulse width modulation)された音楽信号はPICの6番ピン(右信号)と11番ピン(左信号)から出力されるので、復調のため、これらのピンにローパスフィルターを下図のように接続します。カットオフ周波数は約1600Hzとなります。ローパスフィルターのコンデンサーの両端から音楽信号をとりだし、ヘッドホーン(アンプが必要になるかも知れません)やスピーカー付きのアンプに接続します。常識でしょうが、コンデンサーのアース端はヘッドホーンのアースに接続することに気をつけてください。

使用方法

1.audio_speakerMX32.zipを解凍して出てくるaudio_speakerMX32フォルダーをHarmonyProjectsフォルダーの中にいれます。

2.XC32でコンパイルして、PICにファームウェアを書き込みます。

3.PIC回路をパーソナル・コンピューターとUSBケーブルで接続します。

4.パーソナル・コンピューター上で、たとえばWindows Media Playerで音楽を再生すれば、ヘッドホーンやアンプのスピーカーから音楽が流れます。高音はひずみますが、USBオーディオスピーカーが模擬できているということを確かめるには十分です。


bspファイル

〇 基本的な動作設定

  MCC(MPLAB Code Configurator)を使って、テスト回路に合わせてPIC32MX270F256B-50I/SPの動作設定(例えば20MHzの発振器を使うことにするなどの設定:Configuration)を行います。しかし、設定項目が多いので、それらをファームウェアを作るたびに1つづつ設定して行くのは大変です。

 そこで、①必要な設定項目を記述したbsp(board support packages)ファイルを作成しておいて、➁それをMHCに登録して置きます(個人的には、これら①と➁の作業を上記の様に「MHC環境を整える」と言っています)。整えたMHC環境を使用する場合には、登録したbpsファイルをMFCから呼び出すだけです。これだけで動作設定が完了します。

 ①について:MHC環境を整えると、Harmony3\bsp\boardsの中にpic32mx270f256bフォルダーとpic32mx270f256b_usbフォルダーが2つが追加されます。前者には、テスト回路に合わせた「基本設定」のためのbspファイル(bsp.py)が入っています。また、後者には、その「基本設定」と「マイクロチップ社が配布しているUSB関連のサンプル・ファームウェアを使うための設定」を統合した設定のためのbspファイル(bsp.py)が入っています。ファイルをテキスト・エディッタで開くと、どの様な設定をしているか見当が付くと思います。

 ➁について:bspファイルをMFCに登録するためのファイルがHarmony3\bsp\boards\module.xmlです。このファイルをテキスト・エディッタで開くと下図のようになります。矢印の行で、MHCにbspファイルを登録しています。

  MCCからbspファイルを呼び出す方法を説明します。PIC32MX270F256Bを用いる設定で、新しいプロジェクトを作ります。MCCプラグイン・メインウィンドウが表示されたら、そのDevice Resourcesエリアにて、Libraries項目を下図のように展開すると、PIC32MX270 YTS BSPPIC32MX270 YTS BSP USBと書かれた項目が現れます。先に記述した2つのbspファイルに対応しています。

 これら2項目の1つをダブルクリックします。すると、同名のバーナーが、Project Graphウィンドウの中に表示されます。これで、組み込んだbpsファイルが呼び出され動作設定が完了します。

 後は、必要とあれば追加設定を行った後、下図にて矢印で示したGenerateボタンを押してコードを生成するだけです。


〇 bspファイルによる設定結果

 PIC32MX270 YTS BSPを選択した場合、どのような設定がなされたのかを見ておきます。まず、「クロック設定」です。PluginsコンボボックスからClock Configurationを選択します。

すると、下図のように、クロック設定画面が現れます。

ところで、PIC32MX270 YTS BSPやPIC32MX270 YTS BSP USBを選択した場合、必ずClock Configulationをクリックします。詳しくはPIC32MX270F256B-50I/SPでBSPを使用する場合の注意点を参照ください。

また、「ピン設定など」を見るためには、PluginsコンボボックスからPin Configurationを選択します。

すると、Pin Diagram、Pin table、Pin Settingsタブの3つのタブが現れるので、それらをクリックします。

下図のように、設定されたピン画面、ピンテーブル、ピン設定画面が現れます。


〇 USB設定

  Device Resourcesエリアにて、PIC32MX270 YTS BSP USBを選択すると、PIC32MX270 YTS BSPを選択した場合になされる「基本設定」に加えて、「マイクロチップ社が配布しているUSB関連のサンプル・ファームウェアを使うための設定」が行われます。後者の設定では、3つの発光ダイオード用のピン(LED1、LED2、LED3)と3個のスイッチ用のピン(SWITCH1、SWITCH2、SWITCH3)を下図のように割り当てています。

また、下図のように3つのスイッチ用のピンは、いずれも弱くプルアップするように設定しています。

  なお、PICの26番ピン(SWITCH1)とGNDの間にタクトスイッチを設けると、サンプル・ファームウェアの動作の確認が容易になります。また、USBの動作の様子を視覚的に確認したければ、PICの2、3、12ピン(LED1、LED2、LED3)にそれぞれ電流制限抵抗(220Ω)を介して赤色、黄色、緑色のLEDのアノード側を接続します。各LEDピンのカソード側はGNDに落とします。リセット状態ではLED1とLED2が、コンフィギャード状態ではLED3が、サスペンディッド状態ではLED2とLED3がHになります。ただし、HIDキーボードのコンフィギャード状態の場合、Caps Lock設定時にはLED1が、またNum Lock設定時にはLED2がHになります。


戻る