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として認識される.

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

hid-dataはdatastoreデバイスとして認識, hid-mouse はマウスとして認識される.マウスの場合は 画面上の外周をカーソルがくるくる回るプログラムが入っている.
でも,マウスというからには自在に動かせないと・・・
サンプルを書き換えて自在に(といってもゆっくりですが)動くようにしました. あと,左クリックも.

上下左右に動いてダブルクリックでテキストが開く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回押すと元に復帰.

AVRによるV-USBを使ったHIDキーボードの動画
custom-class
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 で点灯状態を確認 できました.

広告↓

TVで話題の iPed!? 超激安Androidタブレット「EKEN M001」
![]() ESP32 Wifi Bluetooth開発ボード |
![]() Arduino Nano Every |
![]() Raspberry Pi pico |
![]() FPGA XILINX Artix-7 |