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 |