PIC32MZ2048EFM064-I/PT (HARMONY)


PIC32MZ2048EFM064-I/PTを用いたテスト回路

  回路図は以下の通りです。

なお、IC2とR2とC8とで構成されているリセット回路ですが、立ち上がり時間が短い3.3V電源の場合は必要ありません。今回は、電源としてACアダプターを使用していて、その立ち上がり時間が長いようでPOR(パワー・オン・リセット)が掛ってくれません。そこで、マイクロチップ社のリセットIC(MCP121T-270E/LB(2.63V))を用いたリセット回路を付加しています。また、JP2はUART通信用ですから必要が無ければ取り除けます。

以下の写真は、実際の回路です。


MHC環境

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

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

3.config311EFM.zipを解凍すると、config311EFMフォルダーの中に、bspフォルダーとusbフォルダーが出てきますので、これら2つのフォルダーをHarmony3フォルダーの中に上書きします。これで、PIC32MZ2048EFM064-I/PTを用いたテスト回路用のMHC環境が整います。

なお、MHC環境の詳細については、PIC32MX270F256B-50I/SPの章のbspファイル項目を参照ください。

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



回路動作確認

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

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

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

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

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

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

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


HIDマウス

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

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

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

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


HIDキーボード

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

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

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

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

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

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


一般的HID

  一般的(Generic)HIDでPICとパーソナル・コンピュータの間でデータを交換します。PICに書き込むファームウェアはEFM_hid_basic.zipです。EFM_hid_basic.zipを解凍して出てくるEFM_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. パーソナル・コンピュータ用のアプリケーション・ソフトウェアは、EFM_hid_basic\utilitiesフォルダーの中に入っています。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。それぞれのフォルダーの中にある実行ファイル(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に書き込むファームウェアはEFM_cdc_com.zipです。EFM_cdc_com.zipを解凍して出てくるEFM_cdc_comフォルダーを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(27番ピン)を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に書き込むファームウェアはEFM_hid_hid.zipです。EFM_hid_hid.zipを解凍して出てくるEFM_hid_hidフォルダーをHarmonyProjectsフォルダーの中に入れます。

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

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

5.パーソナル・コンピュータ用のアプリケーション・ソフトウェアはEFM_hid_hid\utilitiesフォルダーの中にあります。VCフォルダーは[Visual C++用]で、CLRフォルダーは[Visual C++/CLI用]で、CSフォルダーは[C#用]です。EFM_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に書き込むファームウェアはEFM_hid_mouse.zipです。EFM_hid_mouse.zipを解凍して出てくるEFM_hid_mouseフォルダーをHarmonyProjectsフォルダーの中に入れます。

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

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

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



VBUSについて

  MHC環境を整えれば、VBUSが3.3Vでも問題なくUSBデバイスができるようになります(ファイルHarmony3\usb\driver\usbhs\src\drv_usbhs.cに修正を加えています)。


bspファイルについて

  PIC32MZ2048EFM064-I/PTを用いる設定で、新しいプロジェクトを作ります(作り方は省略します)。作り終えたら、MCC(Harmony)を立ち上げます。MCCプラグイン・メインウィンドウが表示されたら、そのDevice Resourcesエリアにて、Libraries項目を下図のように展開すると、PIC32MX270 YTS BSPPIC32MX270 YTS BSP USBと書かれた項目が現れます。前者は、テスト回路に合わせた「基本設定」のためのもので、後者は、その「基本設定」と「マイクロチップ社が配布しているUSB関連のサンプル・ファームウェアを使うための設定」を統合した設定のためのものです。

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

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

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

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

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


戻る