No Such Blog or Diary
libusb-win32 を使ってみる
USBデバイスのハード部分が出来上がったので次はソフト部分.どうやら libusb-win32 というフリーのライブラリがあるようなので利用してみる.とりあえず inf ファイル作っとかないとデバイスが使えないので libusb-win32-device-bin-0.1.10.1.tar.gz とかの中にある inf-wizard.exe で生成.プログラム自体は AVR USB のサンプルコードを参考に作成.無事エコーテスト成功.あとはしつこくポーリングするか受信待ちが出来るなら待ちをしてやればおわる.
libusb を使ったプログラムの流れ(簡易版)は以下のとおり.何より先に usb_init(); して libusb を初期化.んで,usb_find_busses(); usb_find_devices(); でデバイスを探して,
for(bus=usb_get_busses(); bus; bus=bus->next){ for(dev=bus->devices; dev; dev=dev->next){
のネストループで全デバイスを走査する.走査時に,dev->descriptor.idVendor, dev->descriptor.idProduct をチェックして,ベンダIDとプロダクトIDがマッチしたら handle = usb_open(dev); で開けてみて,
usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + dev->descriptor.iVendor, 0x0409, buffer, sizeof(buffer), 1000); usb_control_msg(handle, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + dev->descriptor.iProduct, 0x0409, buffer, sizeof(buffer), 1000);
でベンダやプロダクト名を確認する(同一IDに複数のデバイスがあってプロダクト名で識別しないとならないので面倒.usb_get_string でいい気もする).
外れたら usb_close(dev); しとく.
デバイスが見つかったら usb_control_msg でデータのやり取りを.
他の endpoint 開いたほうがいいけど… そんな余裕は無い.
- Comments: 0
- TrackBack (Close): -
Tiny2313一匹目死亡?
反応が無い,屍のようだ.ISPでほとんど0しか反応が返ってこない.何が原因だったのか特定できてないのが少々不安だけれどもとりあえずまた殺してもいいように秋葉で二つほど購入してきた.プログラムメモリが足りないような気がするので無駄な出費となるかも知れないが…
- Comments: 0
- TrackBack (Close): -
AVRライタ
いろいろなサイトを覗いてとりあえず USBasp というライタを作ってみた.ただ,USBasp の構成部品にプログラムを焼いた AVR (ATmega8) が必要ということでライタを作るためにより簡単なライタを作らねばならんという面白い状況だったり.ここらは AVR-Wiki を見ると RS-232C に RC 回路をつけただけのライタで解決を図るそうで.実際やってみたらうまくいった.めでたしめでたし.
参考:
- Comments: 0
- TrackBack (Close): -
とりあえずテープリーダβ版完成
USBまわりがまだ不安定だけどパンチテープのリーダが出来上がった.テープ送りは手動だけど… PWM使ってスピード調整したとしても怖いので自動送りはどうしましょ.PIC18F4550とかいう大げさなものを使ってるからLCDを付けてても I/O が 6pin あまってるのでどうにでも出来そうだが.何はともあれ回路設計やらPICライタの作成やらから初めて一週間で出来たので上出来でしょう.次はAVRで小型化してみようか?
ついでなので費用を適当にカウントしてみるとテープリーダは5000円くらいで出来ると.ライタは2000円くらいで値段の多くをZIPソケットが喰うというつまらない状況…
その他の計算はかなりいい加減 PICライタ: ZIPソケット(40pin) 1200 ユニバーサル基盤 小 60 Pch FET 90 Dsub 9pinメス 60 その他 400 1N4148, 2SC1815 ツェナー(5.1V, 6.2V) 抵抗, コンデンサ スライドスイッチ ---------------------------------- 計 1810 円 テープリーダ: ユニバーサル基盤 小x2 120 中 140 PIC18F4550 1400 ICソケット(40pin) 200 USB Bコネクタメス 50 オペアンプ (LM358x10) 200 可変抵抗1(100k x10) 500 ICソケット(8pin x10) 100 可変抵抗2(100k x10) 100 クリスタル(24M) 50 フォトトランジスタ(x10) 500 ゴム板 150 アルミ板 170 その他 1000 圧着コネクタ各種 ピンヘッダ フラットケーブル 抵抗各種 コンデンサ各種 発光LED各種 ---------------------------------- 計 4580 円 デバッグ用基盤: ユニバーサル基盤 小x2 120 74HC05 x2 60 タクトスイッチ x10 300 可変抵抗(100k x10) 100 その他 400 フラットケーブル 圧着コネクタ各種 ピンヘッダ 抵抗各種 ---------------------------------- 計 980 円
- Comments: 0
- TrackBack (Close): -
ここまでの失敗
C言語を使ったときにコンフィグレジスタの内容を指定してない.電源ラインが細すぎて不安定.ついでにコンデンサも付けてない.ポートのピン配列が上下逆さま.
あほな間違いばっか.半田付けが面倒なのが悪い.ユニバーサル基盤なんか使わずにエッチングとかすればもっと楽なのだが… 手元に道具が無いのでやりようが無い.
- Comments: 0
- TrackBack (Close): -
Configuration Register の設定
MPLAB-C18 Compiler を使ってプログラム作ってたら Configuration Register の値が設定できておらずうまく動かなかった.どうやらアセンブラレベルで設定しておくかなんかしないとダメらしいとのことで,ONFIG を連発しただけのアセンブリソースを作って追加してみた.とりあえずコンフィグの問題はどうにかなったが動作が不安定すぎて… LEDを点滅させるのもうまくいっていない.コンデンサを追加して電源を安定化するべきだろうか?
- Comments: 0
- TrackBack (Close): -