Posts Tagged ‘VUSB’

Frisk Mega88 on FreeBSD7.2 with libusb

Thursday, July 16th, 2009

FreeBSDのlibusbがちょっと違うらしいと思っていたんだけど、そうでも無いらしい。

FreeBSDでは、USBデバイスの認識をumassやukbdやulptとして認識する。
vusbを使ったFrisk Mega88(名前決めてないや)はHIDとして認識するようにしているので、WindowsやMacでは、ドライバ不要で使えたりする。FreeBSDでもhidでバイスは、uhidとして認識されるわけだが、どうやらFreeBSDのlibusbはuhidで認識されたデバイスにアクセスできないらしい。

FreeBSDのlibusbは汎用のUSBデバイスであるugenとして認識できたデバイスだと上手く操作出来るらしい。

ということをGoogle様で探してLipwoodさんのところで見つけた。
LipwoodさんはUSB-IOというデバイスをFreeBSD上でlibusbを使って動作させたということなので、早速実験してみた。

まず、Frisk Mega88をそのままFreeBSDマシンのUSBに接続する。
uhid0: on uhub1
やはりuhidで認識されている。

ここで、コマンドを叩いてみる。
# ./getemp
Could not find USB device “GETTEMPDev”
となり温度情報を取得することが出来ない。

というわけで、uhidをカーネルコンフィグからコメントアウトしてカーネルの再構築を実行。
待つことしばし。

reboot後、Frisk Mega88をFreeBSDマシンに接続。こんどは、
ugen0: on uhub1
という訳で、ugenデバイスとして認識している。

んじゃってことで、コマンドを叩いてみる。
% ./getemp
Could not find USB device “GETTEMPDev”
ダメじゃん!何かが違うんだろうなorz…

しばらくして、ふとrootでコマンドを叩いてみたら
# ./getemp
28.6
#
いぇい!まんまと温度を取得することが出来た。

そうか管理者権限が無いと出来ないらしい。
試しにPWM(一応組み込んではある。ドライブは出来ないだろうけど)の設定をしてみるとLEDの明るさを換えることができる。
# ./getemp 1
#
ついでにステータスも取得してみる。
# ./getemp status
Duty is 1
#

んじゃ、シェルスクリプトで温度取得をぶん回してみる。
# sh gett.sh
26.7
26.8
:
#
100回でも500回でも大丈夫らしい。

次は実験機に組み込んでみようと思う。

# そういえば、AVRライターであるHIDspxをFreeBSDで使ってみよ。
# 認識はするけど、使えないって
# 何処かに書いてあったような無かったような。
# もしかしら今の状態だと使えるかもしれないし。

VUSB a.k.a. AVR-USB

Wednesday, June 3rd, 2009

VUSB-LED

USBで温度計測をするための実験を続けているんだけど、温度が測れたので次は、USBで制御できるか実験してみた。

ドライバ不要でAVRにプログラムを書き込めるHIDaspxでも使っているV-USBのサンプルを動作させてみた。

サンプルは、V-USBをダウンロードし展開するとexampleディレクトリにあるcustom-classをコンパイルしたコマンドラインのプログラムとAVRに書き込むfiremware。ターゲットとするAVRはATMega168を使ったMetaboardである。今回AVRはATMega88を使用しているので、温度測定してLEDを点灯させた回路が殆ど使えた。LEDを取り外し、USBの回路とPB0にLEDを取り付けた。

custom-classはコマンドラインからLEDのON/OFFを制御する。それとLEDのStatusを調べる。というものである。

$ ./set-led on ....... LEDを点灯する。
$ ./set-led off ...... LEDを消灯する。
$ ./set-led status ... LEDの状態を確認する。

てなわけで、コマンドラインとファームウェアをコンパイルしたら、あっさり動作してしまった。プログラムはサンプルから特に変更していない。MakefileでATMega168だったのをATMega88に変更したくらい。外部クロックを使うので、Fuseの設定を行ったけど、Makefileに書いてあった値をHIDspxで書いた。

ちなみに最初、外部クロック源にセラロックを使ってみたけどUSBで認識してくれなかった。ということで水晶発信子にしたら問題なく認識された。

先達の歩んだ道をトレースしまくりなわけだけど、素材がそろったのでそろそろ本題のUSBで温度計測だな。
一番の悩みはパッケージングだなー。パッケージングでは、QRPな自作の日記さんのFRISKのケースに入れたいなーなんて目論んでいたりして。