« 2013年5月 | トップページ | 2013年8月 »

2013年6月の2件の記事

2013.06.23

Android で USB-IO-Mini が動いた

USB-IO-Mini (勝手にこう呼んでるだけw)を Android に繋いで、ディジタル入力(4bit)or ディジタル出力(4bit) or アナログ入力(3pin)ができた!
いや、もう1年以上前にはできてたのだけど、動確できたら気が抜けてほったらかしにしてた^^;; ソースコードの日付から 2012/5/28 には動作確認が取れてたことがわかる。ずっと忙しかったからなぁ。。

ソースは、こちら。 動確用だし適当かも^^;;

H/W 的には基板を作ってみたものの中身はPCで制御してた頃から全く変えてない。
北京で買った USB Host 用のケーブルを付けて、Android 端末(Xperia Z)に付けただけ。Galaxy Nexus でも特に問題なく動いている。深センで買った ATTiny85 も1年ぶりぐらいに偽物じゃないことを確認できた。(同じ日に買った 32GB USB メモリが 8GB だったのはいい思い出w)

アナログ入力(3pinまで)もできてるけど、H/W 作るのが面倒で動画には入れれなかった。

まぁ、これができたところで、特に使い道が思い浮かばないのだけどね^^;;
とりあえず、4bit 出力があれば、12V の電源を用意することで AVR の fuse のリセットはできるので、結構有用かも?
あとは、使わなくなった端末に繋げて Wi-Fi 経由でコントロールとかかな?

| | コメント (0) | トラックバック (0)

2013.06.19

V-USB を AtmelStudio 6 でビルドする

V-USB を使った project を AtmelStudio 6 でビルドしようとしたが、、、うまくいかず。。
結局、V-USB 付属の Makefile を使ってしかビルドできなかったが、一応メモ。

以下、付属のサンプルの hid-data をまるごと持ってきて ATTiny45 で Internal RC Oscillator を使って動作するようにビルドする方法のメモ。

■V-USB を落とす
http://www.obdev.at/products/vusb/download.html
ここから、vusb-20121206.zip を落とす。

■Project の作成
AtmelStudio → File → New → Project...
→ C/C++ の一番上の GCC C Executable Project
→ Name, Location, Solution name を適当に入れる
(以下、Name を foo としたことにする)
→ OK → ATTiny45 → OK
[CTRL]+[SHIFT]+[b] でビルドできることを確認(Build: 1 succeded...が出ればOK)

■V-USB のコピー
vusb-20121206.zip の usbdrv ディレクトリと libs-device ディレクトリを
foo/foo/ の中にコピーする
foo/foo/usbdrv と foo/foo/libs-device となる

examples/hid-data/firmware/Makefile
examples/hid-data/firmware/usbconfig.h
も foo/foo/ の中にコピーする。

■Makefile の修正
foo/foo/Makefile の main. を foo. に全置き換えする(コメント内も含めて26箇所)
foo/foo/Makefile の先頭に
SHELL=C:/Windows/System32/cmd.exe
を追加。
一番下に、
all: foo.hex
を追加。

(make のバグが残っているらしく SHELL を指定しないと make clean の時にエラーが出るのでその対策と、make all の条件が書かれてなくて build できないのでその対策)

■Makefile を使って build するように変更
Project の Property で、
(Solution Explorer の foo ディレクトリで右クリックして properties を選択)
Build→Use External Makefile にチェックして、↑でコピーした Makefile を指定

image

image

■foo.c を修正
foo.c の中身を全部消して(or コメントアウト)して、
examples/hid-data/firmware/main.c の中身をコピペする。
[CTRL]+[SHIFT]+[b] でビルドすると const にしろと怒られるので、
usbHidReportDescriptor のところの先頭に const を付ける
const PROGMEM char usbHidReportDescriptor[22] = {    /* USB report descriptor */
これで、[CTRL]+[SHIFT]+[b] でビルドできればOK

■ATTiny45 用に修正
foo/foo/Makefile の3行を以下のように修正

# Salt changed from DEVICE  = atmega168
DEVICE  = attiny45


# Salt changed from F_CPU   = 16000000    # in Hz
F_CPU   = 16500000    # in Hz


# Salt changed from OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o foo.o
OBJECTS = usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o libs-device/osccal.o foo.o

foo/foo/usbconfig.h の4ヶ所を以下のように修正

// Salt changed from #define USB_CFG_IOPORTNAME      D
#define USB_CFG_IOPORTNAME      B

// Salt changed from #define USB_CFG_DMINUS_BIT      4
#define USB_CFG_DMINUS_BIT      1

// Salt changed from #define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   0
#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH   1

/* #define USB_RESET_HOOK(resetStarts)     if(!resetStarts){hadUsbReset();} */
/* This macro is a hook if you need to know when an USB RESET occurs. It has
* one parameter which distinguishes between the start of RESET state and its
* end.
*/
/* #define USB_SET_ADDRESS_HOOK()              hadAddressAssigned(); */
// Salt added {
#ifndef __ASSEMBLER__
#include <avr/interrupt.h>  // for sei()
extern void calibrateOscillator(void);
#endif
#define USB_RESET_HOOK(resetStarts)  if(!resetStarts){cli(); calibrateOscillator(); sei();}
// } Salt added

これで、[CTRL]+[SHIFT]+[b] でビルドできればOK
不可解なエラーが出る時は、*.o を全部消してみる。
GUI からは Makefile の clean をうまく呼び出せないみたいなので、手動で。

(ATTiny45 には PortB しかないので B に、
USB_CFG_DMINUS_BIT は、付属の回路図に合わせて 1 に、
USB_RESET_HOOK は libs-device/osccal.h の説明通りにコピペ
キャリブレーションを有効にするために USB_CFG_HAVE_MEASURE_FRAME_LENGTH を 1 にする)

■焼く
Memories はそのまま焼く。
Fuse は、HIGH=0xDD, LOW=0xE1 にして焼く。
internal rc oscillator を使うけど、INTRCOSC_xxx を使うとダメで、PLLCLK_1KCK_14CK_64MS にすることが重要。(ちょっと悩んだ^^;;)

image

■回路を作る
vusb-20121206/circuits/tiny45-rc.png の通りに作ればOK

tiny45-rc

これで、HID device として認識されるはず。

う~ん、、コードが見辛いなぁ。。このブログはコード貼り付けるのがムズイ。。

| | コメント (2) | トラックバック (0)

« 2013年5月 | トップページ | 2013年8月 »