Posts Tagged ‘HID’

Frisk mega88 five

Tuesday, July 14th, 2009

久しぶりに電子工作三昧な日を過ごすことができ、一気にFrisk ATmega88モジュールを仕上げた。

まずは、FRISKのケースに合わせてユニバーサルボードをカットする。
board
Friskのケースにユニバーサルボードを合わせると10×25のサイズになり、秋月のボードからは3枚取れるらしい。
カットは、切り口とサイズが奇麗なピラニア ノコできっていたんだけど、かったるくなったので鉄パイプを切るノコギリに換えた。
こちらの方が、ノコギリの歯の幅と穴のサイズが同じ位で意外と調子が良かった。

穴の位置で切ると少し大きめなので、後はひたすら紙ヤスリで削る!
sanding

というわけで、サイズを合ったら部品を載せて、これもひたすらハンダ付け。
atmega88_fives
で、前に一つ作っていたので、合計5個のFrisk mega88モジュールができた。

上手い具合に秋月のWebに載っているシングルピンソケットが高さも丁度良くはまりプログラミング用のコネクタも付けることが出来た。

最終的な実体配線図チックな回路はこうなった。青の破線は、部品面でジャンパーしている。
基板の外側を回っているのは、ワイヤーでジャンパーのイメージ。
動いているので大丈夫だと思うけど、参考にするならYour Own Riskでよろしく。
frisk_rev22

課題としては、
ADCのノイズ対策をしていないこと。
ADCのリファレンス電源。
USB供給の電源のノイズ具合はどうなんだろう?
というところかなぁ。

これで、実機に組み込んでというところで大問題が!
温度を測ろうと思っていたのは、ATOM兄弟。OSはFreeBSD7.2がのっているのだが、FreeBSDでは、libusbがちょっと違うらしくデバイスは認識されるんだけど、コマンドに応答してくれない。:-(

う〜ん、困ったなぁ。
まっハードは出来たってことで良しとするか。
まだまだ道のりは遠いですな。

Mega88をFRISKケースに入れてみた -VUSB Exampleの実行

Thursday, June 25th, 2009

mega88-frisk

ライターをFRISKケースにまんまと仕込み、勢いでブレッドボードでテストしていた温度測定用のATmega88もFRISKケースに無事に納めることができた。
#ケースの真ん中に穴があいているのは
#やっぱり心配だったのでICソケットを使った。
#しかし部品少ないな。

その後、しばらくAVRに触れることが出来なかったんだけど、少し時間を作って触ってみた。

VUSB -A.K.A avr-usb – のexampleであるcustom-classは、今までMac OSXで作業していたんだけど、何となくWindows XPに接続してみたところ、コード10のエラーが出て、USB HID(ヒューマン インタフェース デバイス)として認識してくれない問題が出た。試しにLinuxに接続してみたけど、やっぱり認識してくれない。
なぜかMac OSXだけ認識する状態。

回路を色々みてまわったところ、異なる箇所は、

  • USBのD-, D+の抵抗値が68Ω。今回は、75Ωを使った。
  • ツェナーダイオードに3.6V。今回は、3.3Vを使った。
  • 発振子は12MHz。今回は、16MHz。

抵抗と発振子をそれぞれ68Ωと12MHzにしてWindows XPに接続したけど、ダメ。

タイミング良く3.3V出力の3端子レギュレータが手に入ったので、ツェナーダイオードを外して、全体を3.3V で駆動するようにしたけどやっぱりダメ。

千秋さんのところでHIDaspxがmega88で動作させるプロジェクトがあるのを思い出して、除いてみた所、irukaさんのところで、mega88を使ったHIDmonとHIDaspxを公開されていた。
早速ダウンロードし、自作ライターで件のmega88にfirmwareを書き込んで、Windows XPに接続すると、ちゃんとUSB HIDで認識するじゃあーりまんせんか!

ためしにハードの構成を、ダメだとおもっていた構成に、つまり抵抗75Ω、発振子16MHz、ツェナーダイード3.3VにしてもちゃんとWindows XPはHIDとして認識する。
なーんと、firmwareの問題だった。というか、またまた先人に助けられたわけだけど、ハードとソフトの切り分けが出来たのは本当にありがたいです。

さて、firmがどこが違うかは、首から下の作業。(当然違う箇所があるのだけど、ある程度目星を付けて見て行った)

■ usbconfig.h

  • USB_CFG_DEVICE_CLASS 0xff -> 0 にする。
  • USB_CFG_INTERFACE_CLASS  0 -> 3 にする。

Windows XPに繋いでみるとHIDデバイスと自動で認識する。おぉぉぉ〜〜〜〜

でも、まだだめ。コード10のエラーが出て、デバイスマネージャで認識されてない。

■ usbconfig.h

  • USB_CFG_HID_REPORT_DESCRIPTOR_LENGTHのコメントを外す

■ main.c

  • PROGMEM char usbHidReportDescriptorを設定する。

これは、内容を今ひとつ解読していないので、HIDmon-mega88のmain.cからコピーした。

なんとなく、いけそ〜な、気がする〜!
繋いでみた。おっ、おっ、HIDとして認識してくれた。
commandlineからアクセスしてみると…ちゃんと温度情報を応答した。

というわけで、VUSBのExampleはデフォルトでは何らかのドライバが必要なのかな?
HIDとして認識させるには、usbconfig.hのHIDに関連する項目の設定とusbHidReportDescriptorが必要ということですな。

よし!材料は揃ったぞ。