Home > Archives > 2006年07月

2006年07月

AVR版USBテープリーダ完成?

データの読み込みまで出来るハード&ソフトが完成.バスパワーでもセルフパワーでも動く.整流用でないショットキーバリアダイオードを電源の逆流防止に入れてて挙動がおかしかったりもしたが,整流用のにしたらちゃんと動くようになった.やはり電流量に応じた物を使わないといけません.あとは,機器の方から能動的にデータを送れるようになると良いのだが… PCからポーリングしまくるとその処理のせいでマイコンの動作が重くなるのでよろしくないので.でもどうやればいいかまだ良くわからない.ついでに,PWMでモータをコントロールする部分もつけたので後はテープ送りの工作をすれば完璧.さすがにバスパワーだとやばいかもしれないけど…

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

えー

とりあえず聞かれたので思い出してみた.■アニメの射手座の日の脚本家が、雪山を書くと の元ネタは「悩んでられない八方塞がり?」のpp.147--148 であると.どの話だったかを思い出すのに10分以上はかかったと思われる.あほだ…

あれ…

起きてみたら午後だった.とりあえずレポート書いて投げてみる.変換コードのサイズによる実行時間の変化も調べたいけどコードサイズをうまく変えるの難しいんだよね… どうしようかなやむところ.

ついでに佐川のメール便はもっと速くなれと.

ふつうにおそいらしい

1MB刻みでサイズを変えてみたら線形に時間を食っている.どうやら本質的に遅いらしい.もう少しデータを取ってレポートは明日書こう.ところで世間で使われるXMLのサイズってどのくらいの大きさなのだろう?

XMLでかすぎなのか?

逆向きの変換に3分かかるって… 変更があったかどうかの判定に文字列比較を使っていたら死ねるような気もするが,なにがこんなに遅いのやらよくわからない.とりあえずXMLがでかすぎて極端に遅くなってるのか小さなものでも遅いのか調べる必要がありそうだ.

Axis2 がこけてた部分を直す

何が悪いのか分からんが Mac のサーバ(Darwin + JDK1.4.2_09 + Tamcat5.5) で Axis2 の REST アクセスがこけていたのを Axis2 の一部に修正を加えてどうにかなおした.修正したのは modules/core/src/org/apache/axis2/description/AxisMessage.java で,109 行目あたりに xmlSchemaElement.getQName()!=null && を追加した.

  if (xmlSchemaElement.getQName()!=null && xmlSchemaElement.getQName().equals(getElementQName())) {

なぜか知らんが xmlSchemaElement.getQName() が null になることがあって NullPointerException で落ちたのがこれまでの状況.null チェック入れたらうまく動くようになった.たぶん,余計な空白とか改行とかをパースした時にテキストエレメントが余計に挿入されるとかが原因でしょう.

ちなみに,JDK1.5 でコンパイルしてたらライブラリのバージョンがおかしいといわれてこけたので,etc/project.properties に下記2行を追加して 1.4 コンパチのバイナリをはくように maven に指定した.

maven.compile.target=1.4
maven.compile.source=1.4

んで,途中で maven-itest-plugin がないといわれてこけるので

maven plugin:download -DgroupId=maven -DartifactId=maven-itest-plugin -Dversion=1.0 -Dmaven.repo.remote=http://people.apache.org/repository 

をやって個別にダウンロードして,さらに ~/.maven/repository/maven/plugins/maven-itest-plugin-1.0.jar を ~/.maven/repository/maven-itest-plugin/plugins/maven-itest-plugin-1.0.jar にコピーしてやる.

オマケに stax-utils-20060501.jar もミスるので http://ws.zones.apache.org/~dims/maven/stax-utils/jars/stax-utils-20060501.jar から ~/.maven/repository/stax-utils/jars/stax-utils-20060501.jar にダウンロード.

さらにオマケに bcprov-jdk13-132.jar もミスるので http://ws.zones.apache.org/~dims/maven/bouncycastle/jars/bcprov-jdk13-132.jar から ~/.maven/repository/bouncycastle/jars/bcprov-jdk13-132.jar にダウンロード.

最後に opensaml-1.0.1.jar もミスるので http://ws.zones.apache.org/~dims/maven/opensaml/jars/opensaml-1.0.1.jar から ~/.maven/repository/opensaml/jars/opensaml-1.0.1.jar にダウンロードする.

結局のところ http://ws.zones.apache.org/~dims/maven/ から全部落とせばいいのかも…

佐川メール遅い

21日に発送してなぜ今日届かん? Amazon で代引きでなくて量が少ないときにペリカン便を指定するにはどうしたらよいのだろう?

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

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

Mavenの使い方が…

よく分からない.Axis2 のコンパイルで maven-itest-plugin がダウンロードできないとか言ってこけるのだが対処の仕方が分からない.やはりちゃんと覚えなければならないようだ.

Axis2 のソースを眺める

サービスがサーバ上で NullPointerException を吐いて止まってしまうためその原因を突き止めようと Axis2 のソースに手を出す始末.log4j でデバッグ情報を吐き出したほうが建設的なのだろうかと思わなくは無いのだが… REST関係のドキュメントが見つからないのがそもそもの原因だ.どこかに無いだろうか?

Configuration Register の設定

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

AVR

A Firmware-Only USB Driver for Atmel AVR Microcontrollers を使えば USB が使えるとのことで試してみたい気がする.ATTiny2313 あたりを使えば I/O も足りるので良いかもしれない.PWMもあるし安いし.とりあえず次に秋葉に行ったら買ってきてみよう.プログラマの材料と共に.

続・続・回路組み立て中

というより工作中心.ゴム板に穴を開けてみたり,アルミ板をひん曲げて穴を開けてみたり.0.5mm厚程度のアルミ板ならカッターと根性で十分加工可能であることが分かった.んで,これらとセンサ類を組み合わせてテープを見た目上はちゃんと読めることが確認できた.ただし,同期信号が入った瞬間に他の信号が確定しているかどうかがちょっと微妙なので,ここら辺はインターフェースを確定してから調整しないとならないかも知れない.

続・回路組み立て中

組み立て済み: オペアンプ達(Vフォロア,シュミットトリガ付比較器), フォトトランジスタ達 + LED達(センサ部), プッシュスイッチ達 + LED達(デバッグ用), PICライタ(名前が面白いのでPICライタ5号機V2改を参考に)

あとは,テープの穴にうまくセンサが合うようにガイド部分を作って,センサを調整して,USB とのインターフェースを組んでやれば終わる.インターフェースは PIC で同期穴の信号に合わせてセンサからデータ読んで,センサアレイが偶数ビットをずらしてるのでそれを補正して… センサの調整が一番面倒そうだ.

回路組み立て中

久々の半田付けは非常に出来が悪く美しくない.火傷もするし.ついでに回路のチェックも思ったより時間がかかる.まあ,デジタルテスタを使ってるからかも知れないが…

秋葉で散財

久々に秋月,千石,メロンブックスで買い物をした.締めて15k円也.ITプラザで PIC を買ったら最近は AVR がはやりで PIC は売れてないとのこと.どこら辺がどう使いやすいのかわからんので手を出してないが今度調べてみようかなぁ.とりあえずの情報としては USB のコントローラチップを使わずに自力で 1.5Mbps の USB 通信が出来てるらしいのだが… USBN9604なんか500円で売ってるからそれ使ったほうが full speed も出来るし良いのではないかと思わなくも無い.なんにせよ,プログラム書くのが面倒なので PIC18F2550 あたりの USB を使える PIC に逃げる.

citeseer のデータベースXML

全部で 2GB 弱あるのが 30MB 程度に区切られているのだが,その区切られた一つを読み込もうとしたら PC の反応が無くなった.そもそも firefox なぞで読んだのが悪かったのかもしれないけど… んで,アトリビュートの値をダブルクオーテーションで囲まねばならんのに,その値の中にダブルクオーテーションをエスケープなしで書いてあったりして文句言われるし.今回のタスクは少々手ごわそうだ.

IJPPのrevision

今日に入ってやっとこ返答内容を英語で書いた.もう少し早めに書きましょうとここに書いておいてみる.次回があったらもう少し余裕を持ってやろうかと思う,今は.

発表

とりあえず普通に今期の割り当て終了.それはともかく予想通り今週も輪講の準備を発表者などが行う状態は維持された.来週は輪講係が準備するべしとのお達しが出たので来週こそは輪講係が準備するのだろう.

明日の準備

なんだかんだで結構時間とられたなぁ.もう少し要領よく出来ると良いのだが… スライド1ページ3分で作るくらいのぺーすがほしい

Office が調子悪い

名前を付けて保存としてファイルダイアログを開くとフォルダを一つ開けるたびに1分以上の無言時間が訪れる.何が悪いのやら皆目見当もつかないのだが,保存しようとするタイミングで起きるから非常にストレスがたまる.2007のベータにでも移行しろということか?

とりあえず

直す直す直す.寝る寝る寝る.

非常に頭痛が

痛い.言葉の使い方を間違うほど… ねる.

JavaSrciptでHTTPリクエストを飛ばすには?

どうしたらよいのだろう? ページ切り替えたくないので document の href は変えられない.同一サーバ上に無いリソースにアクセスしたいので Ajax のようなことは出来ない.ダミーの img 要素に対して src を書き換えれば問題ないのだがスマートじゃない.さてどうしたもんか.

C# でグローバルにフック

通常のキーボードやマウスのフックは DLL にエクスポートしたフックプロシージャを使うのだが,C# (.NET) だとこれがうまく出来ないので通常はグローバルフックが出来ないらしい.しかしながら,Low Level Input であればフックがグローバルになるらしく,これを使えば C# でもグローバルフックが出来るとのこと.実際に Web で見つけたソースを元に SetWindowsHookEx に MH_MOUSE_LL を指定してフックしたらうまくいった.ついでにキーボードも問題なく成功.

あとは Low Level Input のレベルでドラッグ中のオブジェクトを取得できるといろいろありがたい.最悪のばあいマウス座標直下にごく小さなウィンドウを作ってドロップのためのイベントを SetInput で投げてしまえば出来るのだが… ドロップ時に何かエフェクトを表示する振りすれば使えそうな手ではある.

準備が出来とらんと輪講が時間通りに始められん

誰が準備の責任を負うべきなのやら.遅れるのはまずいからと誰かが準備してしまうのだが自覚があれば何か一言あった上で次の週から責任持って準備すると思うのだけど… まあ,自分に責任があると気づいていないのだろう.注意されても直せないものは直らないのだけどどうにかすべきか?

午前の講義を寝過ごす

起きたら10時過ぎてた.秋葉行くの面倒.お休み決定.まあいいか.二度寝したらそこは夜だった.明日の準備でもしよう.話題は並列計算機のアーキテクチャで.とはいえ本は研究室なので明日の朝一で読み直そう.

Hierarchically Tiled Arrays

Hierarchically の部分が実装上のどこに効いてくるのか,どう実装しているのかが例からでは読み取れない… 例では一階層だけで話が済んでしまっているのだが,再帰的(階層的)に分割してキャッシュ効率を上げるなどの話を例に入れてくれてもいいような.うーむ,結局HTAにして簡単にプログラムが書けると言っているのは,エッジの転送などがインデックス指定でエッジの代入を書いとくだけで勝手に通信してくれるという点と転置が楽に出来る点でしか言えてないような… HPF との差とかが良くわからない.アルゴリズムの導出とかはどうなるか書いてないし.まあ,シーケンシャルなやつを書いて,ちょっと手を入れれば並列化できる様な問題は簡単に並列化できるので良いと思うのだが.あと,NAS のカーネルを記述できている点が強みなのかなぁ.うちも試してみよう.

java で -jar と -classpath

java -classpath "hoge.jar" -jar huga.jar

とかやったら hoge.jar がクラスパスに入ってくれなくて暫くわけがわからなかった.調べたところによると -jar を指定すると -classpath などが無効化されるらしい.ということで,外部の jar をクラスパスに入れるには META-INF/MANIFEST.MF で

Class-path: hoge1.jar hoge2.jar

とか書いておくことになるらしい.これらのパスはこのマニフェストが入っているアーカイブからの相対パスになるとのこと.とりあえずパスのセパレータとして何が使えるのかわからんのだが空白で動いてたのでよしとしよう.

Home > Archives > 2006年07月

Search
Feeds

Page Top