この記事は、MCCの mTouch module を使い、Curiosityボード上の mTouchボタンをどのような手順で有効にするのか示します。

 

1 MPLAB X プロジェクトの作成

この例では、[New Project...] から、" Curiosity_mTouch " という名称のプロジェクトを作成します。プロジェクトを作成するだけで、main.c ファイルは作成しないでください。main.c ファイルは後ほどMCCが自動作成します。

新規プロジェクトの作成方法は「CuriosityのMPLABプロジェクトを作成する」に詳しい手順説明があります。

  • Device: PIC16F1619
  • MPLAB X; v5.40
  • MPLAB XC8; v2.2o
  • MCC; v3.95.0

 

 

2 MPLAB X IDE で MCC を起動

もし、下図のような MCC アイコンが表示されていない場合には、MCC プラグインがインストールされていいるか確認してください。MCC のインストールは、「MPLAB Code Configurator インストール」 に説明があります。

 

 

3 システムクロックの設定

8MHz_HF Internal Clock を選択し、PLL を有効にします。この結果 32MHz system clock になります。、Low-Programming Enable がチェックされていることも確認してください。



mTouch の動作を確実に行うには、8 MHz system clock が必要です。8MHz より遅いシステムクロックを選ぶと notification window に警告が表示されます。

4 mTouch Module のロード

Device Resources ウインド内の Libraries list にある mTouch icon をダブルクリックします。



モジュールがロードされると mTouch icon が、Project Resources に現れます。

 

5 mTouch sensor の指定

mTouch module がロードされると、Pin Manager に、利用できる mTouch sensor pin が表示されます。
pin RC1 を mTouch sensor に指定します。このピンは Curiosity ボードの mTouch Button に接続されています。

 

6 mTouch button の追加

Buttons タブを選び、Create New Button をクリックします。

 



[Add] ボタンが現れるのでクリックします。



[Button0 : Sencor_AN5] が Button タブの下に現れます。念のため [Button0 : Sencor_AN5]をクリックして Sensor欄に、[ Sensor_AN5 : RC1 / AN5 ] が選ばれているのを確認します。

 

7 Timer Interrupt の有効化

PIC16F1619 の mTouch では、software CVD を使用するため、Automatic Frequency Adaptation (AFA) を起動し CVD 定期スキャンを有効にするため、Timer からの割り込み処理が必要です。mTouch library v2.00 以降は、AFA を有効にすると自動で割り込みも有効に設定されるため、このステップは行う必要はありません。
これより古い version では、Interrupt Module を開き、関連タイマーの割り込みを手動で有効にします。この例では TMR2 が AFA タイマーに設定されています。

 

 

もし、関連タイマーの割り込みが有効にされていない場合には、Notification ウインドーに警告が表示されます。この記事は、mTouch library v2.70 で作成したので自動で割り込みが設定され、警告もありません。

 

8 LED接続する I/O pin の設定

LED D7 を mTouch ボタンの表示に指定します。
Pin Manager で、LED D7 が接続されている RC5 pin を出力にします。

 


Pin Module でピンの名称を LED_D7 に書き換えます。

 

9 Code 生成

Generate button をクリックします。

 

10 mTouch 処理ルーチンを main.c から呼ぶ

自動生成された main.c ファイルを開き、global および peripheral 割り込みを有効にするために2つのマクロのコメントを外します。
INTERRUPT_GlobalInterruptEnable()
INTERRUPT_PeripheralInterruptEnable()
さらに
MTOUCH_Service_Mainloop()
を while ループ内に配置します。下記リストでは赤でハイライトされています。

 

void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
        MTOUCH_Service_Mainloop();
    }
}

11 mTouch ボタンで LED D7 を制御

API では:
bool MTOUCH_Button_isPressed(enum mtouch_button_names button)
が、ボタンのON/OFFを示します。
この例では、ボタンが一つしかないので "Button0" を引数に使用します。ボタンを押した時に LED D7 (active high) を点灯し、ボタンから指が離れた時に LED を消灯します。必要なアプリコードを描きリストに示します。追記・変更する命令は赤でハイライトされた行です。

 

void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
        if(MTOUCH_Service_Mainloop())
        {
            if(MTOUCH_Button_isPressed(Button0))
                LED_D7_SetHigh();
            else
                LED_D7_SetLow();
         }
    }
}

 

12 プログラムの書き込みと実行

Program アイコンをクリックし、PICにプログラムを書き込みます。

 

 

書き込み終了後に、mTouch ボタンに触ると LED D7 が点灯します。