About this site
このサイトは、航空・宇宙コンピュータ電子工作といった時代の最先端のことから、登山といった文明生活から遥かにかけ離れたことまで、思うがままに書いてあります。写真も大好きです。
興味がある方にしかおもしろくないと思いますが、どうぞ楽しんでいってください。あと、MovableTypeのカスタマイズ情報を提供しています。

If you are interested in "Super Sylphide", an autopilot system for small UAVs, please visit this page.

Super Sylphide猫カメラGPSロガーXBee電力計


最後に、はてなアンテナやRSSリーダーで読む場合はこちらからどうぞ。
Entries @ recently

March 21, 2010

Ruby open-zip.rb

テキスト処理などにとっても便利に使っているRubyですが、Rubyにはopen-uri.rbというライブラリがあります。使い方はrequire 'open-uri'をしておくと、ファイルを開くopenという関数が拡張されて、ローカルにあるファイルと同様にネット上のリソース、例えば open('http://example.com/index.html').read なんてことができます。とっても便利です。

それに倣ってzipファイルの中にあるファイルをopenで取り出せるopen-zip.rbなんていうものをこさえてみました。open('test.zip/hogedir/hoge.txt').read なんてことができます。外部ライブラリとしてZip/Rubyに依存している関係で先にそのインストールが必要ですが、これでzipファイルをいちいち展開せずとも中のファイルにアクセスできるのはとても魅力的だと思います。あとちょっと込み入った使い方として、open('root.zip/sub.zip/hoge.txt').read なんていう多段なzip内zipファイルについても内部的に再帰呼び出しをすることでそのまま扱うことができます。

最後にですが、現時点では書き込み機能は実装されていません。必要が生じたらやってみようとも考えています。

13:34 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント(2) | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/744

March 19, 2010

FTCJTAGのバグ取り

『Amontec JTAGkey-Tiny (FT2232) を Xilinx iMPACTから使う』という過去記事があります。これはUSBシリアルコンバータの半導体で有名なFTDIのチップFT2232を使って、FPGAやPROMなどのデバイスをJTAGでコンフィギュレーションしようというものなのですが、巷のツールと大きく異なりFPGAベンタのXilinxの純正書き込みツールであるiMPACTから扱えるため、意外と高評いただいています。それに関するお話です。

このツールですが、FTDIが提供しているJTAG制御ライブラリのFTCJTAGというものに依存しています。ところがこのFTCJTAG(現時点での最新バージョン2.0を元に話をします)には結果的にバグがありまして、PROMのコンフィギュレーションはうまくいくが、FPGAはうまくいかないことがある、という事態を引き起こしていました。ツールをより使いやすくするためにも、FTCJTAGのバグフィクスをしました。

問題はJTAGのTAPステートマシンに関するもので、例えばバッファを越えるような非常に長いビットを読み書きしたいがために、shift DR/IRの状態を維持したまま読み書き関数(JTAG_Write() / JTAG_Read() / JTAG_WriteRead())を抜けたいというところで発生します。通常の使い方は読み書きを抜ける際はさらに状態遷移を引き起こしてrun test idleまで遷移をするのが一般的でこの場合問題はあきないのですが、FPGAへビットストリームをダウンロードする際はビットストリームが長大であること、そしてその間どうやらshift DR状態を維持しなければならないこと(spartan3がそうでした)、というところで問題に気がつきました。そしてこの問題の症状は、関数呼び出し毎におけるデータストリームの最後1bitが、デバイスに送信されなくなります。

FTCJTAG_mod.png
青色が改修部分。

そこで上図のように、改修を加えました。読み書き関数が依存している大元の関数を修正してあります。FTDIで公開されているソース改修を加えたソース、および差分パッチ(FTCJTAG_src_20.patch)を公開します。

※iMPACTから使うツールについても、この修正版FTCJTAGを同梱したものに更新しました。ついでに高速版のFT2232H/4232Hにも対応しています。

18:28 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/743

March 16, 2010

CygwinのRubyからMatlabを扱う

とあるデータファイルがMatlabのフォーマット(*.mat)だったのですが、それをRubyから読み込めたらいいなぁ、という事態に遭遇しました。王道としてはMatlabを起動してデータファイルを読み込み、それをCSVフォーマットで吐き出させてRuby側で取り込めばいいと思います。しかし、それでは一次ファイルができてしまいクールではないので、Rubyから直接Matlabのファイルを扱えるようにしてみました。

といってもRubyにはMatlabを内部的に呼び出しデータ変換などを可能にしてくれるmatlab-rubyという便利なライブラリがあります。これを使えば解決、と思ったのは束の間、残念ながら僕が所有している環境ではうまくいきませんでした。僕の環境はWindowsのMatlab R2006b(ちょっと古いですね)とcygwinのRubyです。

ということで問題点を調べてmatlab-rubyにあてるパッチを作ってみました。matlab-ruby-2.0.3_cygwin.patch です。問題点としては、必要なヘッダのサーチパスが正しく設定されていなかったこと、Windows版Matlabには(そのままでは)cygwinのgccからリンクできるライブラリが添付されていないこと、この2つです。これらの問題がパッチをあてることで解消され、あとは通常のインストール方法に従うだけでインストールが完了します。
また、もしMatlabを標準("C:\Program Files\MATLAB")と違うディレクトリにインストールしているようでしたら、パッチ中のMATLAB_DIRを修正してください。

最後にcygwinのgccで読めるライブラリを作るにあたっては、『VC++用のDLLをCygwinで使う』がとても参考になりました。ありがとうございます。

※似たような内容で『Matlab mexでCygwin gccやg77を使う(gnumex)』という記事もあります。

※※ 2007aでも試してみました。そのままだと一部問題が発生しますので、パッチを当てた後にext/matlab_api/matlab_api_wrap.cを削除してからruby setup.rb configをしてください。そうすると当該ファイルの最新版が自動生成されてうまくいきます。

22:22 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/742

March 14, 2010

アレの小型化の実装

『アレの小型化』という記事を書きましたが、その実装が完了しました。振動モータなどを含め動作確認もできたので、近日中にアレを"ソレ"に内蔵させようと考えているのですが、ソレにUSB用の穴をあけるべきかどうしようか悩んでいます。ソレに加工を加えるのを物凄く嫌がる方が、世の中にはかなり多くいらっしゃるそうです。

ということで実装の写真です。

p0ken_top.jpg
p0ken_bottom.jpg
表と裏。

振動モータとコイルがびろんとでている形状です。お次はバッテリー。

p0ken_battery.jpg
外付けLiPo。

バッテリーは70mAhのLiPoを使いました。入手先はラジコン屋さんのHobbyKingです。またソレが発火しても困るので、保護回路(過電流、過充電や過放電などから保護)をebayで落札して外付けで付けてあります。落札したのはPCB(Protection Circuit Board) for 3.7V Li-ion Lipo Battery (3.5A limit)

とりあえず近日中に動作の様子を映像化したいです。

23:00 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/741

March 03, 2010

ビット逆転をC++テンプレートで

ちょっとビットの逆転をする必要があったので、コードを書いてみました。ビットの逆転とは、例えば入力が0b10010101なら、出力を0b10101001とすることです。せっかくなのでC++でテンプレートで実装してみました。

参考にしたのは虎の巻『ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか』です。痒いところに手が届くアルゴズムが色々とあり、とても助けられています。このお題以外にも最近では、整数演算のみでルートをとる方法を調べました。

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

追加情報として、この実装は可変長ビット列 long_bits.h に盛り込んであります。また今回のお題に関連して、『ビット列の性質を求める』という記事も以前に書いていました。興味があれば是非見てみてください。

23:47 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/740

February 24, 2010

アレの小型化

以前、実体配線図を紹介したアレですが、その後自分が欲しかった機能を組み込んだ基板を設計してみました。もちろん小型化してあります。

p0ken_brd.png
大きさ約20x20 mm

追加された仕様は、振動モータのドライバ回路を1ch組み込んだこと、LiPoの充電回路(bq24022)を組み込んだこと、USBとの接続を直挿しからminiBコネクタに変更したこと、これら3点です。もう少し回路をチェックした後、pcbcartに投げてみようと思います。

※その後、実装完了しました。

08:35 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント ←ここから投稿できます!! | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/739

February 12, 2010

ローカルに流れるTCPパケットを見る

ちょっとした事情がありまして、以前記事を書いた『Amontec JTAGkey-Tiny (FT2232) を Xilinx iMPACTから使う』のメンテナンスをしています。これはXIlinxの純正書き込みツールでFT2232を使ったFPGAやPROMへの書き込みを可能にしようというツールなのですが、メンテナンスを行うにあたって表題のローカルを流れるTCPパケットを直接調べたいという要望が発生しました。

持ち出したるはTCPのパケットを監視するフリーウェアNirSoftのSmartSniffなのですが、これが困ったことにNICを通ったパケットしか拾ってくれないようでした。このフリーウェアはパケットをキャプチャしてくれるという単機能なので、非常に使い勝手が良く愛用しているので、できれば今回の目的にも使いたいところです。

ということで方法を考えてみました。方法は2つ考えたのですが、結局のところ他のマシンを経由してNICを強制的に通すというアイデアに変わりはありません。1つはsshでどこか手元にあるサーバに接続する際、ポートフォワーディングを行うという方法(ssh hoge@server -L some_port:local_ip:local_target_port)。もう一つはどこか別のコンピュータでstoneを使ってポートフォワーディングを行う方法(stone local_ip:local_target_port some_port)。どちらともうまくいきました。

どなたか1台のPCで済む良い方法をご存じないでしょうか。仮想PCとか使えばうまくいきそうな気もしていますが、ちょっと面倒くさいです。

23:05 fenrir が投稿 : 固定リンク | このエントリーを含むはてなブックマーク | この記事をLivedoorでクリップ! | この記事をdelicious.comでブックマーク | この記事をドリコムRSSにクリップ | コメント(2) | トラックバック (0)
このエントリーのトラックバックURL: http://fenrir.naruoka.org/mt/mt-tb.cgi/738