歩き遍路 平成19年春(J1) 記録の準備

PIC18F4550でカーソルが回転する
        HIDプログラムを動作


  Microchip社のPIC18F4550とPICDEM. FS USB DEMONSTRATION BOARD USER’S GUIDEに有るカーソルが回転するHID プログラムを確認しました。
USBの動作を確認するには、内容が判る物が必要です。PIC18FXxxとそのフレームワークは内容が公開されているので動作確認用に適していると思い動作させることにしました。

 ここでは、PIC18F4550とカーソルが回転するHID プログラムを確認します。
 以下を整理した物をここに置きます。

●ハードウエア

 ハードウエアは、写真の様に汎用基板で手配線です。動作確認は単純な物の方が分かりやすいので最小必要品だけにしました。


























































●プログラム

プログラムは、PICDEM. FS USB DEMONSTRATION BOARD USER’S GUIDEをインストールすると _MCHPFSUSB_v12\MCHPFSUSB\fw\Hid\Mouse に有るカーソルが回転するHID プログラムをC18(期間限定版)でコンパイルしました。
 
 そのままコンパイルしたら動くだろうと簡単に考えていたのですが、難儀しました。単純な思いこみで時間が掛かりました。それをクリアしたら変更無しで問題なく動きました。

 単純な思いこみは、「バスパワーセンスの処理」をしてなかったのです。リセットしてプログラムを開始すると、1秒程度で停止しました。停止する時間はバラツキが有ります。かなり悩んだのですが、usbcfg.hの次の様にコメントアウトで解決しました。

 //#define USE_SELF_POWER_SENSE_IO //See MCHPFSUSB Firmware User's Guide
//#define USE_USB_BUS_SENSE_IO // for more details about these features.

 プログラムを動作させてカーソルが回転するのを確認しました。又、USBスコープでパソコンとのやり取りを調べて、プログラム内容やUSB規格と見比べました。詳細な見比べは今後の課題とします。



●カーソルが回転する仕組みをUSBスコープで調査

 PIC18F4550 DEMO HID プログラムのカーソルが回転する仕組みをUSBスコープで調べた内容です。そして、デバイスクラスが判るSOF = 520の詳細とReport Descriptor (Mouse)を、矢印で示します。
又、 Report Descriptor (Mouse)で定義されたデータフォーマットを下に示します。

 PIC18F4550 DEMO HID プログラムは、リセットして、プログラム開始からUSBスコープで調べています。データ長を調べるGET_DESCRIPTORから始まり、SET_ADDRESSで固有アドレスの設定とエニュメレーションが続きます。ここでは、カーソルが回転する仕組みを調べるのでエニュメレーションの中から、SOF = 520とSOF = 54Cに注目します。SOF = 520とSOF = 54Cの詳細は矢印で示します。

 SOF = 520でデバイスクラスをHID,サブクラスをMouse、転送タイプ、転送方向等を定義しています。
 SOF = 54Cで下のデータフォーマットをDevice Class Definitionで定義しているのですが、このUSBスコープでは見えないので「Device Class Definition for Human Interface Devices (HID)」を参考にしました。PIC18F4550 DEMO HID プログラムの「usbdsc.c」に同じ内容が定義されています。

 SOF = 568を見ると、3バイト単位のデータ転送です。データの内容はマウス移動量です。
 USBスコープのデータを省略していますが、データは、「00 FC FC」→「00 FC 00」→「00 FC 04」→「00 00 04」→ 「00 04 04」→ 「00 04 00」→ 「00 04 FC」→ 「00 00 FC」→ 「00 FC FC」→ を繰り返しています。変化点のSOFは78h毎です。「FC」は、ー4です。
  データ転送は、PIC18F4550 DEMO HID プログラムの「user_mouse.c」のEmulate_Mouse(void)にそのような内容がプログラムされています。






















































































SOF = 520の詳細              
  




  データフォーマット
  Byte   Bits    Description
  0     0      Button 1
       1      Button 2
       2      Button 3
       4 to 7    Device-specific
  1     0 to 7    X displacement
  2     0 to 7    Y displacement
  3 to n   0 to 7    Device specific(optional)













SOF = 54Cの詳細         
Report Descriptor (Mouse)
Item                            Value (Hex)
Usage Page (Generic Desktop),                   05 01
Usage (Mouse),                           09 02
 Collection (Application),                    A1 01
  Usage (Pointer),                        09 01
  Collection (Physical),                     A1 00
   Usage Page (Buttons),                    05 09
   Usage Minimum (01),                     19 01
   Usage Maximun (03),                     29 03
   Logical Minimum (0),                     15 00
   Logical Maximum (1),                     25 01
   Report Count (3),                      95 03
   Report Size (1),                       75 01
   Input (Data, Variable, Absolute), ;3 button bits       81 02
   Report Count (1),                      95 01
   Report Size (5),                       75 05
   Input (Constant), ; 5 bit padding              81 01
   Usage Page (Generic Desktop),                05 01
   Usage (X),                          09 30
   Usage (Y),                          09 31
    Logical Minimum (-127),                   15 81
   Logical Maximum (127),                    25 7F
   Report Size (8),                       75 08
   Report Count (2),                      95 02
   Input (Data, Variable, Relative), ;2 position bytes (X & Y) 81 06
 End Collection,                         C0
End Collection                           C0



ホームへ戻る