PIC18でデジタイザ

デジタイザ機能実装

基本的には下のマウスデバイスと同様にプロジェクトを作る

MLAからコピーするファイルが

app_device_hid_digitizer_single.c

app_device_hid_digitizer_single.h

に変わるだけ

但しその他ソースも

v2017_03_06\apps\usb\device\hid_digitizer_multi_touch

からコピーすること(hid_mouseではなく)

ホストにタッチ座標を送る処理は

Emulate_Digitizer()を流用する

hid_report_inのどの要素番号に何を入れるかは

usb_descriptors.c

のhid_rpt01で記述されている

内容の詳細は

http://wiki.onakasuita.org/pukiwiki/?%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%BF

等を参照

hid_report_inに入れるX,Y座標は0~32767になるのでタッチ座標を画面解像度とこの範囲との間でmapする必要がある

232Cデバッグログ主出力をすると遅くなるので原則禁止

とりあえずマウスデバイス + 232Cデバッグコンソール を実装

PIC18F14K50使用USB対応超小型マイコンボード( K-05499 )を使用

Microchip Libraries for Applications(MLA)をダウンロードしておく

  1. MPLABXでプロジェクトを新規作成
    1. File→New Project
    2. Microchip EmbeddedのStandalone Projectを選択し、Next
    3. FamilyをAdvanced 8-bit MCUs (PIC18)にし、DeviceをPIC 18F14K50に設定し、Next
    4. NoneのままNext
    5. PICkit3を選択しNext
    6. XC8を選択してからNext
    7. 任意のプロジェクト名と任意のプロジェクト保存先を入力し、ついでにEncodingはUTF-8にして、Next
    8. プロジェクトの作成が完了する
  2. プロジェクトの設定を変更
    1. プロジェクトを右クリックし、プロジェクトの properties を開く
    2. PICKit3をクリック
    3. 画面上の「Option categories:Memories to Program」をクリックし、「Power」に変更
    4. 「Power target circuit from PICKit3」のチェックボックスをオンにし、OKをクリック
    5. 「Voltage Level」は3.0~5.0の間であればOK
    6. XC8 global optionsのXC8 compilerを開き、Include directoriesの「…」をクリック
    7. 「Enter or ‘Browse’ string here」と書かれたところをダブルクリックし、「.」と入力しEnterこれをしないと後でMLAからコピーしたソースの中で#include <….h>が認識されない
    8. OKをクリックし、設定を閉じる
  3. MCCを起動し基本設定を行う
    1. PeripheralsからEUSART1[~PIC 18 MCUs ~]を追加
    2. EUSART1のSetup
      1. Baud Rate : 115200(任意)
      2. Enable ESUART Interruptsにチェック
      3. 各Buffer Sizeを32に設定(任意)
    3. Interrupt ModuleのSetup
      1. EUSART1のTXIのチェックは外す(送信割込みを使わない場合)
    4. Pin ManagerでRXI/TXIをそれぞれPB5/PB7に固定する
    5. System ModuleのSetupここはMLAのサンプルのCONFIGに極力合わせる

結局MLAのサンプルのCONFIGを使うので意味はないが、自動生成されるUARTのbaudrate設定(SPBRGの値)はそのまま使うので

  1. Osillator Select = HS oscillator
  2. System Clock Select = FOSC(default)
  3. External Clock = 12MHz(K-05499の回路図参照)
  4. PLL Enabledにチェック
  5. Clock Divider = No CPU System Clock divide
  6. Low-voltage Programming Enableのチェックは外す

確認として生成されたCONFIGの

    FOSC = HS

    PLLEN  = ON

が確認できればOKなはず

  1. デバッグコンソール機能の実装
    1. eusart1.cにISXの標準uartドライバを記述
    2. R232.c, extern.h, rs232c.h, version.hを(必要に応じて)追加
    3. main.cへの必要なコードを追加は後述するMLAのコードのコピー後に行う(MCCが生成するmain.cは使わない)
  2. MLAのコードのコピーサンプルプロジェクト low_pin_count_usb_development_kit_pic18f14k50.x で使用している全ファイルを探してコピーする

必要ファイルを知るために事前に上記プロジェクトを開いて実行しておくと場所がわかる

  1. app_device_mouse.c
  2. app_led_usb_status.c
  3. buttons.c
  4. leds.c
  5. main.c
  6. system.c
  7. usb_descriptors.c
  8. usb_device.c
  9. usb_device_hid.c
  10. usb_events.c
  11. app_device_mouse.h
  12. app_led_usb_status.h
  13. buttons.h
  14. fixed_address_memory.h
  15. io_mapping.h
  16. leds.h
  17. system.h
  18. usb.h
  19. usb_ch9.h
  20. usb_common.h
  21. usb_config.h
  22. usb_device.h
  23. usb_device_hid.h
  24. usb_device_local.h
  25. usb_hal.h
  26. usb_hal_pic18.h

コピー後、プロジェクトのHeader Files / Source Files にそれぞれ追加しておく

  1. main.cに232C デバッグコンソールの機能を追加
    1. 初期化部に割込み有効設定を追加    // Enable the Global Interrupts

    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts

    //INTERRUPT_GlobalInterruptDisable();

    // Enable the Peripheral Interrupts

    INTERRUPT_PeripheralInterruptEnable();

    // Disable the Peripheral Interrupts

    //INTERRUPT_PeripheralInterruptDisable();

  1. ループ文にSerial機能追加        /**************/

        /*   Serial   */

        /**************/

        if ( SCIF_GetRcvSize() ) {

        if ( R232_GetAnalysData() )

          R232_CommandMain();

        }

  1. MLAのサンプルとMCCの生成コードで競合する内容の修正作業
    1. SYSTEM_Initialize()MCC側から

    INTERRUPT_Initialize();

    PIN_MANAGER_Initialize();

    OSCILLATOR_Initialize();

    EUSART1_Initialize();

をMLA側にコピー

MCC側は関数ごとコメントアウト

  1. interrupt処理MCC側から

    // interrupt handler

    if(INTCONbits.PEIE == 1)

    {

        if(PIE1bits.RC1IE == 1 && PIR1bits.RC1IF == 1)

        {

            EUSART1_RxDefaultInterruptHandler();

        }

        else

        {

            //Unhandled Interrupt

        }

    }      

    else

    {

        //Unhandled Interrupt

    }

をMLA側にコピー

MCC側は関数ごとコメントアウト

  1. main.cに以下のinclude追加#include “mcc_generated_files/mcc.h”

#include “extern.h”

  1. system.hに以下のinclude追加#include “mcc_generated_files\\pin_manager.h”

#include “mcc_generated_files\\interrupt_manager.h”

#include “mcc_generated_files\\mcc.h”

  1. device_config.cの全configをコメントアウト(MLA側のものを使うため)
  2. これでコンパイルが通ればカーソルがぐるぐる動きながらデバッグコンソールも動く細かいところでまだエラーが出るかもしれないので内容を確認しながら修正する

ボタンが実装されていないのでピンを手で触るとカーソルが動いたり止まったりする

うっとおしければボタンで動作をトグル処理を止める


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です