4621879 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

おびやまロボット研究所 ~マイコン電子工作と自作ドローン~

V-USBでHIDデバイス

V-USBを使ってAVRでHIDマウスにしてAndroidに接続してみました.
詳細は以下の通り.

-----------------------------

Androidタブレットとマイコンを接続使用と思ってもUSB-シリアルはドライバが
簡単に見つからず,標準で入ってるHIDを使って接続する手段を調べていたら,
前にArduinoに使ったV-USBはHIDにも使えるのが分かったので早速実験.

以下のURLから vusb-20100715.zip というファイルを持ってきた.

http://www.obdev.at/products/vusb/download.html

examples 内に hid-data (Datastore) と hid-mouse (マウス) などがある.
これらのフォルダ内のfirmware 内のファイルをusudrvフォルダ内のファイルを
使ってビルドしないといけない.
makefileがあるが,それを使わずAVRStudioで以下の手順でビルドした.

1)usbdrv内のファイルを全部選び,ビルドしたいexamplesのどれかの
  firmwareのフォルダ内にコピー
2)プロジェクトウィザードで新規プロジェクト作成.
3) AVR GCCで を選び,examplesのどれかのフォルダを選び,
  create inital file のチェックを外して,適当にプロジェクト名をつけ,
  次へ.シミュレータとAVRの種類(168P)を選んでフィニッシュ.
4)source files 上で右クリック,add existing source files で firmware 内の
  ソースファイルを全部追加.
5)header files も同様に全部追加.
6)project -> option でatmega168P を選択,クロックは16000000Hzとしてビルド.
7)default フォルダ内のhexファイルをAtmega168Pに書き込み.
8)ヒューズビットの設定は,makefileに書いてある.
  high: DE, low: DF (Ext: FB)

次にatmega168Pをブレッドボードに挿して,電源,GND,抵抗,白LED,
16M Hzクロック,USBケーブルで回路を作成.
PCに接続するとHIDとして認識される.

CIMG1930.JPG

Androidタブレットに挿し,terminal emulatorでdmesgにより
HIDとして認識されていることを確認.

CIMG1933.JPG

hid-dataはdatastoreデバイスとして認識,
hid-mouse はマウスとして認識される.マウスの場合は
画面上の外周をカーソルがくるくる回るプログラムが入っている.

でも,マウスというからには自在に動かせないと・・・
サンプルを書き換えて,自在に(といってもゆっくりですが)動くようにしました.
あと,左クリックも.

CIMG1948.JPG

上下左右に動いてダブルクリックでテキストが開くV-USB HIDマウスの動画

書き換えたのは,以下を追加.

void initIO(void){
DDRB &=0xc0; // PB0-3を入力に設定
PORTB |=0x3f; // PB0-3をプルアップ
}

void Mytest(void){
if ((PINB & 0x04)==0) reportBuffer.dx=1; // PB2 カーソル右へ
if ((PINB & 0x08)==0) reportBuffer.dx=-1; // PB3 カーソル左へ
if ((PINB & 0x0c)==0x0c) reportBuffer.dx=0; //
if ((PINB & 0x10)==0) reportBuffer.dy=1; // PB4 カーソル下へ
if ((PINB & 0x20)==0) reportBuffer.dy=-1; // PB5 カーソル上へ
if ((PINB & 0x30)==0x30) reportBuffer.dy=0; //

// PB2を0にしたときクリック
// buttonMask= 右クリック:1,左クリック:2
if ((PINB & 0x02)==0) reportBuffer.buttonMask=1; else reportBuffer.buttonMask=0;

}

main の中に,
initIO();
を追加.
main の中の次の関数をコメント-> //advanceCircleByFixedAngle();
main の中に, Mytest();
を追加してビルド,AVR荷書き込み.

----追記-----------
キーボードを作ってみました.

HIDKeys - An Example USB HID のサイトからサンプルをダウンロード
http://www.obdev.at/products/vusb/hidkeys.html
HIDKeys.2007-03-29.zip 

サンプルは,ATmega8用だったので,atmega168P用に修正
ビルドして16MHzのクロックで動作させると,
なにもしない状態で:Q
PB0をLにして:A
PB1をLにして:B
PB2をLにして:C
PB3をLにして:D
になりました.ケーブルを外すとシフトキーが押されたままの状態になっていたので,
キーボードからシフトを1回押すと元に復帰.

CIMG1956.JPG

AVRによるV-USBを使ったHIDキーボードの動画

----追記-----------

V-USBのexamleの中にcustom-classというのがあったので,やってみました.
LEDをピカピカするだけのようですが,プログラムを読んでもいまひとつ分かりません.
取りあえず,
firmwareの中のmainをusbdrvフォルダの中のファイル一式を使ってビルド.
LEDの設定は0番から1番へ書き換え.atmega168Pに書込み.
前にインストールしたcygwinにUSB関連のツールをusbで検索,追加インストール.commandlineの中Makefileを読むと,Windowsの場合は3行コメントを付け替えて修正が
必要だったので修正してmakeしてset-led.exeを作成.

写真のようにブレッドボードにAVRを載せて,LEDを挿し,PCのコマンドラインまたはCygwinから
set-led on でLED点灯
set-led off でLED消灯
set-led status で点灯状態を確認
できました.

CIMG1950.JPG



広告↓


TVで話題の iPed!? 超激安Androidタブレット「EKEN M001」


© Rakuten Group, Inc.