2009/03/22

ATmega88pでavr-usbのhid-dataサンプルを動かしてみる

秋月からATtiny2313, ATmega88p、ITプラザからATmega168などを購入して遊んでいたのですが、USB経由で接続してみようとしてみました。
結論からいうとATMega88pについては、AVR StudioでDeviceタイプを”ATmega88” (Pなし)に設定した上でコンパイル、Hexファイル書き込みをして動かしています。

今回使用した機器はこんな感じです。

  • 開発機: Windows Vista (Inspiron 640m)
    • 開発環境:AVR Studio 4.16
    • コンパイラ:WinAVR 20090313
    • AVRライター:AVRISP mkII
    • avrusbライブラリ:avrusb-20081126
  • HIDホスト: Ubuntu 8.04 x86_64版

作成した基板はAVR-USBに付属するイメージ(circuits/with-zener.png)の通りで、AVRISP mkIIに接続するために6ピン端子を付け、ATmega88p用にAVccの接続を加えて、クロックは16MHzの水晶発振子を使っています。(後で20MHzに変更し無事に動きました)

AVR Studio側では適当なプロジェクトを作成して、ダウンロードしたavrusb-20081126の中にあるusbdrvフォルダの中からドキュメントを除いたファイルとexamples/hid-data/firmware/usbconfig.hをコピーしています。
examples/hid-data/firmware/main.cは作成したプロジェクトの.cファイルに内容をそっくりコピーしてコンパイルしました。

AVR Studio側での変更はusbconfig.hの中で、D-,D+にするポートの指定部分だけです。

#define USB_CFG_IOPORTNAME      D
#define USB_CFG_DMINUS_BIT      3
#define USB_CFG_DPLUS_BIT       2

ほぼ同じコードで、ATmega168もATtiny2313も動いたのですが、ATmega88pはATmega168と差し替えてもなぜか動かず、試行錯誤していました。
ふと試したATmega88のDeviceタイプでコンパイル、書き込みをしたところホストのUbuntu側で認識されてhidtoolでの読み書きも成功しています。でもこれでいいのかなぁ…。

$ dmesg | tail -3
[325427.701138] usb 3-2.2: new low speed USB device using ehci_hcd and address 111
[325427.800787] usb 3-2.2: configuration #1 chosen from 1 choice
[325427.809613] hiddev96hidraw3: USB HID v1.01 Device [obdev.at DataStore] on usb-0000:00:02.2-2.2

$ sudo ./hidtool read | head -2
0x03 0x33 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
$ sudo ./hidtool write 0xa4 0x20
$ sudo ./hidtool read | head -2
0xa4 0x20 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

hidtoolはlibusbを導入したUbuntu側ではmakeしただけで導入できました。
さてこれから解析していかないと。
ATmega88のデバイスタイプにしている事で消費電力に変化があるかわからないけれど、他に何か不具合は起こらないのかな…。

0 件のコメント: