V-USBのテストした
eBayで注文してた12MHzのクリスタル届いたんで、V-USBのテストした。
V-USBの配布ファイル内にいくつかサンプルがあるが、
examples/custom-class
がlibusbを使ったドライバレスでLEDをON/OFFできるサンプルなんで、これを使った。
examples/custom-classを適当な場所にコピーして、
その下にusbdrvディレクトリを examples/custom-class/firmwareにコピー。
examples/custom-class/firmwareがAVRマイコンに書き込むプログラムで、Makefileの内容にしたがってmakeできる。
元の配布ファイルのディレクトリ構造に従ってusbdrvをコピーするようになっているが、手動でコピーしたので、
Makefile内の
usbdrvがV-USBの本体で、 usbconfig.hで設定して、main.cでAPIの様な感じで使える。
usbconfig.hではD+とD-にしようするピンを指定できるが、今回は変更の必要が無さそうだったのでそのまま。
初期状態でD-がPB4,D+がPB2になっている。
D+はINT0のピン限定なのでマイコンに合わせて固定となる。
Makefileで、使用するデバイス、周波数、ヒューズを設定するようになっている。
AVRDUDEは、書き込みに使用する中華プログラマが速度低下させないとエラーになるんで-Bオプションを追加した。
制御するLEDのピンはmain.cで指定できるようになっているが、そのままにした。
初期状態でPB0となっていて、向きは出力になっている。
V-USBの配布ファイル内には、
ダイオード2本で電圧を下げるタイプ、
3端子レギュレータで電圧を下げるタイプ、
信号部のみツェナーダイオードで電圧を下げるタイプ、
の3つの回路図が入っているが、
今回は↑のダイオードで下げる回路を利用した。
V-USBサイト上に記載の回路図から使用マイコンがATtiny2313からATmega8に変更されており、
1MΩの抵抗、アナログ用?の電源とGNDが追加されてる。
まず、回路がダイオード2本で3.6V付近の電圧になるので、回路を繋いだ状態で書き込んで良いのか怪しいので、回路を作る前にファームウェアの書き込みを行った。
make hex で書き込むための.hexファイルが作成され、
make programでflashとfuseが書き込まれる。udevをいじっていなければ要root。
実際に回路を作成したが、
ダイオードは1N4007を使用した。降下電圧は回路図記載の1N4148とほぼ同じと思う。
クリスタルは12MHzでコンデンサは22pfにした。
68Ωの抵抗はないので47Ωにした。
1.5kΩの抵抗はないので、1kと470を直列にした。
4.7ufのコンデンサはないので、この前回収した2.2ufの電解コンデンサを使った。
セラミックコンデンサを使うものと思ってたが、回路図に極性があるようだから電解コンデンサなのかな?
100nfのコンデンサはつけなかった。
PB0に300Ωの抵抗とLEDを繋いだ。
大きいブレッドボードを使うほどではないと思ったが、
ミニ・ブレッドボード1個で、ごちゃごちゃして厳しかったんでミニ・ブレッドボードを2個使った。
で、PCにつないだら、
commandlineディレクトリのほうがLED制御用の母艦側コマンドで、
PCからコマンドでLEDの制御ができた。
クリスタルが4番ピンと5番ピンで、D+は6番ピンで固定なので、
小さいブレッドボードだとこの辺りがごちゃごちゃしちゃって難しかった。
libusbを使って何か制御する感じなら、main.cを変更するだけでいろいろできそう。
キーボードとかマウスみたいなPC用の一般的なデバイスも作ってみたいと思ってるので、次はキーボードかマウスの試作をしてみたい。
V-USBの配布ファイル内にいくつかサンプルがあるが、
examples/custom-class
がlibusbを使ったドライバレスでLEDをON/OFFできるサンプルなんで、これを使った。
examples/custom-classを適当な場所にコピーして、
その下にusbdrvディレクトリを examples/custom-class/firmwareにコピー。
examples/custom-class/firmwareがAVRマイコンに書き込むプログラムで、Makefileの内容にしたがってmakeできる。
元の配布ファイルのディレクトリ構造に従ってusbdrvをコピーするようになっているが、手動でコピーしたので、
Makefile内の
usbdrv:
cp -r ../../../usbdrv .
をcp -r ../../../usbdrv .
usbdrv:
# cp -r ../../../usbdrv .
とコメントアウト。# cp -r ../../../usbdrv .
usbdrvがV-USBの本体で、 usbconfig.hで設定して、main.cでAPIの様な感じで使える。
usbconfig.hではD+とD-にしようするピンを指定できるが、今回は変更の必要が無さそうだったのでそのまま。
初期状態でD-がPB4,D+がPB2になっている。
D+はINT0のピン限定なのでマイコンに合わせて固定となる。
Makefileで、使用するデバイス、周波数、ヒューズを設定するようになっている。
DEVICE = atmega168
F_CPU = 16000000 # in Hz
FUSE_L = # see below for fuse values for particular devices
FUSE_H =
AVRDUDE = avrdude -c usbasp -p $(DEVICE) # edit this line for your programmer
となっているが、今回はATtiny2313で12MHzなので、F_CPU = 16000000 # in Hz
FUSE_L = # see below for fuse values for particular devices
FUSE_H =
AVRDUDE = avrdude -c usbasp -p $(DEVICE) # edit this line for your programmer
DEVICE = attiny2313
F_CPU = 12000000 # in Hz
FUSE_L = 0xef# see below for fuse values for particular devices
FUSE_H = 0xdb
AVRDUDE = avrdude -c usbasp -p $(DEVICE) -B 10 # edit this line for your programmer
に変更した。F_CPU = 12000000 # in Hz
FUSE_L = 0xef# see below for fuse values for particular devices
FUSE_H = 0xdb
AVRDUDE = avrdude -c usbasp -p $(DEVICE) -B 10 # edit this line for your programmer
AVRDUDEは、書き込みに使用する中華プログラマが速度低下させないとエラーになるんで-Bオプションを追加した。
制御するLEDのピンはmain.cで指定できるようになっているが、そのままにした。
初期状態でPB0となっていて、向きは出力になっている。
V-USBの配布ファイル内には、
ダイオード2本で電圧を下げるタイプ、
3端子レギュレータで電圧を下げるタイプ、
信号部のみツェナーダイオードで電圧を下げるタイプ、
の3つの回路図が入っているが、
今回は↑のダイオードで下げる回路を利用した。
V-USBサイト上に記載の回路図から使用マイコンがATtiny2313からATmega8に変更されており、
1MΩの抵抗、アナログ用?の電源とGNDが追加されてる。
まず、回路がダイオード2本で3.6V付近の電圧になるので、回路を繋いだ状態で書き込んで良いのか怪しいので、回路を作る前にファームウェアの書き込みを行った。
$ cd custom-class/firmware
$ make hex
$ sudo make program
make help でヘルプが見れるようだが、そもそもMakefile内を確認している。$ make hex
$ sudo make program
make hex で書き込むための.hexファイルが作成され、
make programでflashとfuseが書き込まれる。udevをいじっていなければ要root。
実際に回路を作成したが、
ダイオードは1N4007を使用した。降下電圧は回路図記載の1N4148とほぼ同じと思う。
クリスタルは12MHzでコンデンサは22pfにした。
68Ωの抵抗はないので47Ωにした。
1.5kΩの抵抗はないので、1kと470を直列にした。
4.7ufのコンデンサはないので、この前回収した2.2ufの電解コンデンサを使った。
セラミックコンデンサを使うものと思ってたが、回路図に極性があるようだから電解コンデンサなのかな?
100nfのコンデンサはつけなかった。
PB0に300Ωの抵抗とLEDを繋いだ。
大きいブレッドボードを使うほどではないと思ったが、
ミニ・ブレッドボード1個で、ごちゃごちゃして厳しかったんでミニ・ブレッドボードを2個使った。
で、PCにつないだら、
$ lsusb
Bus 003 Device 018: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
↑目的のものと思われるものが表示された。Bus 003 Device 018: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
commandlineディレクトリのほうがLED制御用の母艦側コマンドで、
$ make all
でコンパイルできる。$ set-led on
$ set-led off
でPB0につないだLEDが点いたり消えたりする。$ set-led off
PCからコマンドでLEDの制御ができた。
クリスタルが4番ピンと5番ピンで、D+は6番ピンで固定なので、
小さいブレッドボードだとこの辺りがごちゃごちゃしちゃって難しかった。
libusbを使って何か制御する感じなら、main.cを変更するだけでいろいろできそう。
キーボードとかマウスみたいなPC用の一般的なデバイスも作ってみたいと思ってるので、次はキーボードかマウスの試作をしてみたい。