PIC32MX270F256B-50I/SP (HARMONY サンプル)

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

  PIC32MX270F256B-50I/SP (HARMONY)の章に書かれてあるMHC環境を整えていない場合は整えます。


タイマー1割り込み

  PIC32MX270F256B-50I/SPは16ビット・タイマーを5つ持っています。それぞれのタイマーを個別に16ビットタイマーとして使用できます。ここでは タイマー1割り込みを使い、周期約0.8秒のパルスを作ります。2番ピン(RA0)が3,3Vになったり0Vになったりを、0.336秒ごとに、交互に繰り返します。「PIC回路」に書き込むファームウェアはMX270_timer1.zipです。MX270_timer1.zipを解凍して出てくるMX270_timer1フォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。

以下の図はProject Graph画面です。

ここで、PIC32MX270F256B-50I/SPでBSPを使用する場合の注意点に書いてあるように、必ずClock Configulationをクリックします。

以下の図はCore設定の様子(Core componentのConfiguration Options)を表しています。app.cとapp.hを作成するのに必要な設定です。

以下の図はTimer1設定の様子(Timer1 componentのConfiguration Options)を表しています。

また、以下の2つの図はPin Settingsです(Project GraphのPluginsコンボボックスなどからPin Configurationを選択し、現れるPin Settingsタブをクリックする)。 まず、2番ピン(RA0)のFunctionをLED_AHと設定します。

Name(名前)欄のLED_AH_RA0の所をマウスでダブルクリックすると、以下の図のようになり、名前を付け替えることができるようになります。今回はLEDと名付けています。

MCCでコードを生成した後、app.cにあるAPP_Initialize(void)関数の中にタイマーを開始するため、TMR1_Start()関数を入れておきます。また、interrupts.cの中にある __ISR(_TIMER_1_VECTOR, ipl1SOFT) TIMER_1_Handler (void) 関数の中に、ポート出力をトグルするのためのLED_Toggle()関数を追加しています。


INT0割り込み

  INT0外部割り込みを試します。INT0用のピンは16番ピンに固定されています。後述の様に16番ピンはファームウェアで弱くプルアップしています。このピンをGNDに落とすたびに、2番ピン(RA0)が3,3Vになったり0Vになったりを交互に繰り返します。ただし、チャタリング対策をしていませんので、交互に繰り返さないこともありあます。「PIC回路」に書き込むファームウェアはMX270_int0.zipですMX270_int0.zipを解凍して出てくるMX270_int0フォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。

以下の図はProject Graph画面です。

ここで、PIC32MX270F256B-50I/SPでBSPを使用する場合の注意点に書いてあるように、必ずClock Configulationをクリックします。

以下の図はCore設定の様子(Core componentのConfiguration Options)を表しています。app.cとapp.hを作成するのに必要な設定です。

以下の図はINT0割り込み設定の様子(System componentのConfiguration Options)を表しています。

以下の図はPin Settingsで(Project GraphのPluginsコンボボックスなどからPin Configurationを選択し、現れるPin Settingsタブをクリック)、2番ピン(RA0)のFunctionをLED_AH、名前をLED、そして16番ピン(RB7)のFunctionをINT0、Pull Upを弱プルアップに設定しています。

MCCでコードを生成した後、app.cにあるAPP_Initialize(void)関数の中に割り込みを可能とするため、 EVIC_SourceEnable(INT_SOURCE_EXTERNAL_0);関数を入れておきます。また、interrupts.cの中にある __ISR(_EXTERNAL_0_VECTOR, ipl1SOFT) EXTERNAL_0_Handler (void) 関数の中に、ポート出力をトグルするのためのLED_Toggle()関数を追加しています。


CN割り込み

  CN割り込みを試します。CNとはchange noticeの略で、CNピンの電圧が、3.3Vから0Vに、あるいはその逆に変わった(change)時に、これを知らせる(notice)という意味です。したがって、CN割り込みとは、CNピンの電圧が変わった時の割り込みということになります。後述の様にCNピンは16番ピン(RB7)に割り当てました。また、16番ピンは弱プルアップしています。このピンをGNDに落としたり、離したりするたびに、2番ピン(RA0)が3,3Vになったり0Vになったりを交互に繰り返します。ただし、チャタリング対策をしていませんので、交互に繰り返さないこともあります。「PIC回路」に書き込むファームウェアはMX270_cn1.zipです。MX270_cn1.zipを解凍して出てくるMX270_cn1フォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。

以下の図はProject Graph画面です。

ここで、PIC32MX270F256B-50I/SPでBSPを使用する場合の注意点に書いてあるように、必ずClock Configulationをクリックします。

以下の図はCore設定の様子(Core componentのConfiguration Options)を表しています。app.cとapp.hを作成するのに必要な設定です。

以下の図はCN割り込み設定の様子(System componentのConfiguration Options)を表しています。

以下の図はPin Settingsで(Project GraphのPluginsコンボボックスなどからPin Configurationを選択し、現れるPin Settingsタブをクリック)、2番ピン(RA0)のFunctionをLED_AH、名前をLED、そして16番ピン(RB7)のFunctionをSWITCH_AH、名前をSWITCH、CNENをエナーブルに、Pull Upを弱プルアップに設定しています。

MCCでコードを生成した後、app.cにあるAPP_Initialize(void)関数の中に割り込みを可能とするため、 GPIO_PortInterruptEnable(GPIO_PORT_B, 0x80);関数を入れておきます。また、system_interrupt.cの中にある__ISR(_CHANGE_NOTICE_VECTOR, ipl1SOFT) CHANGE_NOTICE_Handler (void)関数の中に、ポート出力をトグルするのためのLED_Toggle()関数を追加しています。


UART通信

  UART2で入出力を行います。「PIC回路」に書き込むファームウェアはMX270_uart2S.zipです。MX270_uart2S.zipを解凍して出てくるMX270_uart2SフォルダーをHarmonyProjectsフォルダー(私の場合はC:\Users\yts\HarmonyProjects)の中に入れます。

以下の図はProject Graph画面です。

ここで、PIC32MX270F256B-50I/SPでBSPを使用する場合の注意点に書いてあるように、必ずClock Configulationをクリックします。

以下の図はCore設定の様子(Core componentのConfiguration Options)を表しています。app.cとapp.hを作成するのに必要な設定です。

下図はUART2設定の様子(UART2 componentのConfiguration Options)を表しています。 ボーレートが115200 bps、データ長8ビット、パリティなし、ストップビット1ビットと設定しています。

Pin Diagram(Project GraphのPluginsコンボボックスなどからPin Configurationを選択し、現れるPin Diagramタブをクリック)は下図のようになっています。

ここで、18番ピンが青色になっていますので、これをクリックして、以下の図のようにU2TXピンに設定します。

同様に17番ピンをU2RXピンに設定します。

以下の図はPin Settingsで(Project GraphのPluginsコンボボックスなどからPin Configurationを選択し、現れるPin Settingsタブをクリック)、2番ピン(RA0)のFunctionをLED_AH、名前をLEDに設定しています。

結局、ピン設定は次のような図のようになります。

1.UART2でシリアル入出力がきちんとできていることを調べるために「USB シリアル変換器」を使いました。

この「USB シリアル変換器」の左側に、4ピンのピンヘッドがありますが、上から1,2,3,4番ピンと呼ぶことにします。「PIC回路」の右下にも4ピンのピンヘッドがあります(PIC32MX270F256B-50I/SP (HARMONY)の章に書かれてある回路図ではJP2です)。これも、上から1,2,3,4番ピンと呼ぶことにします。両ピンヘッドの1,2,4番ピンどうしを、それぞれ接続します。3番ピンはどこにも配線されていませんので接続する必要はありません。

2.「USB シリアル変換器」とPCをUSBケーブルで接続します。

3.「PIC回路」にファームウェアMX270_uart2S.zipを書き込み、実行します。

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

5.PCのキーボードから適当なキーを押下すると、押したキーに対する文字が、Tera Termの画面に現れるはずです。以下の図は、ytsと、キー入力した場合です。また、キー入力を一回行うごとに2番ピン(RA0)が3,3Vになったり0Vになったりするはずです。

  なお、core_apps_pic32mxパッケージをMCC Content Manager WizardのOptional Contentからダウンロードしました。そして、core_apps_pic32mx\apps\driver\usart\async\usart_echoからapp.cとapp.hをプロジェクトに上書きコピーした後、app.cとapp.hに少し手を加えました。


戻る