No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 8 | 9 | 10 | 11 | 12 | 13 || Next»

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 開いたほうがいいけど… そんな余裕は無い.

Tiny2313一匹目死亡?

反応が無い,屍のようだ.ISPでほとんど0しか反応が返ってこない.何が原因だったのか特定できてないのが少々不安だけれどもとりあえずまた殺してもいいように秋葉で二つほど購入してきた.プログラムメモリが足りないような気がするので無駄な出費となるかも知れないが…

AVRライタ

いろいろなサイトを覗いてとりあえず USBasp というライタを作ってみた.ただ,USBasp の構成部品にプログラムを焼いた AVR (ATmega8) が必要ということでライタを作るためにより簡単なライタを作らねばならんという面白い状況だったり.ここらは AVR-Wiki を見ると RS-232C に RC 回路をつけただけのライタで解決を図るそうで.実際やってみたらうまくいった.めでたしめでたし.

参考:

AVR-Wiki

http://homepage2.nifty.com/denshiken/AVW009.html

http://www.geocities.jp/kuman2600/usbwriter.html

とりあえずテープリーダβ版完成

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 円

ここまでの失敗

C言語を使ったときにコンフィグレジスタの内容を指定してない.電源ラインが細すぎて不安定.ついでにコンデンサも付けてない.ポートのピン配列が上下逆さま.

あほな間違いばっか.半田付けが面倒なのが悪い.ユニバーサル基盤なんか使わずにエッチングとかすればもっと楽なのだが… 手元に道具が無いのでやりようが無い.

Configuration Register の設定

MPLAB-C18 Compiler を使ってプログラム作ってたら Configuration Register の値が設定できておらずうまく動かなかった.どうやらアセンブラレベルで設定しておくかなんかしないとダメらしいとのことで,ONFIG を連発しただけのアセンブリソースを作って追加してみた.とりあえずコンフィグの問題はどうにかなったが動作が不安定すぎて… LEDを点滅させるのもうまくいっていない.コンデンサを追加して電源を安定化するべきだろうか?

«Prev || 1 | 2 | 3 |...| 8 | 9 | 10 | 11 | 12 | 13 || Next»
Search
Feeds

Page Top