2009年09月03日

RFADテクノロジーのケース

千石でケースを物色していたら、ガラス窓付きプラケースというのに目が止まった。

これは RFADテクノロジーというところが出しているケースだった。



中(MK8260)と小(MK6040)があり、RFADテクノロジー で買えば 小 180 円、中 260 円とリーズナブルな価格。千石で買うと若干高くなって 小 221円、中 326 円。

  • 中(MK8260)のサイズは、外寸:82×60×20 内寸:76×54×12(ガラス付蓋部分を除く実測値)。
    適合基板は、サンハヤト ICB-86 (47 x 72 mm)

  • 小(MK6040)のサイズは、外寸:60×41×20 内寸:55×36×12(ガラス付蓋部分を除く実測値)
    適合基板は、タカチ電機工業 TNF34-49 (34 x 49 mm - SW-55 用)

サイズをみてピン!ときた。このケースは、秋月 C 基板がちょうど入る!


いままで、いろいろ探したが、C 基板がちょうど入るケースはなかった。それが、ガラス窓 で 側面の加工が簡単なケースが安価に手に入る! ( ちなみに、ガラスが気に入らなければ、アクリル板とかを嵌め込めば良いはず )

C 基板 愛好家としては、とても嬉しい。

その上 ... 小さい方も SW-55 用基板が適合 -- ということは、1/2 C 基板 (縦 47〜48mm 横 35mm)も 適合するということだ。



このケース、これから愛用していきたい。

追記:楽天ショップがあるのを見落としていた。なにやら 結構種類があるみたい。



これがフタをあけたときの写真(中:MK8060)。

追記:

フタの部分は、ガラスをはめた後、おさえの枠を瞬間接着材で付けたような感じ。彫刻刀の平刀でこじったら(そこだけ)分離できたので、多分分解できる。

    瞬間接着剤のはがし液(アセトン)は使えない。ケースが ABS 樹脂なのでケースも溶かしてしまう。

裏には、TOKYO SCIENCE CO.LTD. のマークと 6 PS のリサイクルマーク。

ひょっとして、TOKYO SCIENCE CO.LTD. って ここ ( http://www.tokyo-science.co.jp ) ? え? 化石?鉱物?

あ、本来 標本ケースなのか。

追記(2011/1/11): 東京サイエンスで扱っている標本ケースは、中薄ケ−ス( 82× 60×h20mm) 250円 小薄ケ−ス( 60× 41×h20mm)170円 以外に 大厚ケ−ス(118× 82×h40mm)500円、中厚ケ−ス( 82× 60×h40mm) 290円 丸型プラケース(52φmm×h22mm 上面ガラス)なんてのがある。

もし、千石や RFADテクノロジーの直販で買えなくなっても、ここがある。

丸型プラケースも興味深い -- 基板を作ってみようかという気になる。中厚ケ−スは、MK8260 の 2 倍厚。これも興味がある。
posted by すz at 12:24| Comment(0) | TrackBack(0) | 日記

2009年07月23日

業務連絡

私の不注意で レンタルサーバーの契約が切れてしまい、サーバ移行することになりました。

バックアップも適当にしかとってなかったので、5/15 以降の記事・コメントも消えてしまいました。コメントを頂いた方には申し訳なく思います。

移行にあたって、

  • もの置き場のサイトが nmj.sakura.ne.jp → nmj.sumomo.ne.jp になります。
  • 復活した記事の URL が変わっているかも知れません。(よくわかりません)


リンクしていただいている方には申し訳ありませんが、リンクの変更をお願いします。
posted by すz at 19:12| Comment(0) | TrackBack(0) | 日記

2009年05月12日

DSLite 用のタッチパネル

電子工作ネタとして面白そうなものを見つけたので紹介。

ゲーム系のショップで、DSとかの保守部品を取り扱っているところがいくつかある。たとえば、ゲームツールというショップでは、


なんてものを売っている。

これを使ってなにか面白いものを作れるのではないだろうか?

たとえばトレース用の 小型タブレット? とか 底に印刷したシートを敷いて キーボードもどき とか。あと、純粋に 自作機器用の入力装置として使えるかもしれない。

仕様はわからないが、写真を見ると 4pin 。おなじゲームツールで売っている eeePC 用 (というより汎用) タッチパネルも 4pin だし似たようなものに違いない。

ちなみに、eeePC 用(というより汎用) は、X 方向 と Y方向の それぞれ 2pin 間の抵抗値 (数百Ω)を測定するようになっている。

なお、eeePC 用(というより汎用) タッチパネルのほうで なにか作るのは、あまりお勧めしない。薄いガラス製で 割れやすい。

追記: 09/11/26

スイッチサイエンスで、Nintendo DSのタッチスクリーン用ピッチ変換基板が売っている 420 円。コネクタ単体だと 100 円。タッチスクリーンも売っていて、1100 円。

posted by すz at 06:26| Comment(0) | TrackBack(0) | 日記

2009年01月17日

お気に入りのカードリーダー

いままで、お気に入りのカードリーダは、このタイプだった。安いし、信頼性もある。microSD耐久テストでは、4連USBハブにこれを装着して使ってきた。

しかし、気に入らない点もある。コネクタの部分がやわく、抜き差しを繰り返すと壊れてくるのだ。また小さすぎるのも良し悪し。もうすこし大きい方が無くさなくて良いかも知れない。

そういうわけで機会があると、良さそうな安カードリーダがないか探してきたのだが、ついに気にいったものを見つけた。

ものは、GENO で 399円の[RCR-SDHC/MS]

写真をみると、USB はまともなAタイプコネクタ。カード側も金属性のまともそうなスロットを使用している。そして緑色の基板が見えている。

ここで期待したのは、改造の可能性。中身を取り出して 4連ハブに仕込めないか?ということ。

ただ、そうするためには、カードのホットプラグに対応している必要がある。金属の部分に切りかきみたいなのが見えるので、いけるんではないかと思い、5つばかり買ってみた。

入手してみると、期待どおりホットプラグ対応だった。ただ Push-Push タイプでなかったのは残念。ケースは接着されていなくて、工具なしに割れ、そのままでも4連ハブに装着できた。しばらく使ってみて 問題なさそうなら ハブに仕込んでやろうと思っている。

電子工作ネタ:

ヒロセ・マイクロSDカードコネクタ(140円) と交換できると Push-Push になるような ...

Power/アクセス ランプが赤色でかつ明るく、なかなか目立つ。たとえば、秋月のチップLED -- 1608 サイズの オレンジとか黄色とかと交換してみるのはどうだろう。




追記1 Linux (puppy 4.1.1-JP) で確認:

確認してみたら、同じメーカのチップを使用していた。MA8123 と呼ぶことにする。
あと、残念なことに linux ではカードのホットプラグができなかった。なんとかしないと、HUB に組み込めない。
これ見るとパッチは存在するみたい。
→ puppy だと、ドライブマウンタを使うか /sbin/probedisk2 の実行で 手動で(再)認識した。M121 も OK。


いままでのお気に入り M121

Vendor=14cd ProdID=6700 Rev= 2.01
Manufacturer=SDMMC M121
Product=USB 2.0 SD/MMC READER

新たなお気に入り MA8123

Vendor=14cd ProdID=8123 Rev= 2.01
Manufacturer=SDMMC MA8123
Product=USB 2.0 SD MMC READER

追記2: eeePC 701SD-X で性能比較

手持ちの microSD で比較的速い SanDisk 8GB (old?) を使って性能を比較してみた。

SR SW 4KRR 4KRW
17.072 9.815 3.229 0.038 M121
17.720 10.186 3.355 0.037 MA8123

16.740 12.687 2.900 0.038 eeePC 701-X スロット
23.772 14.134 5.971 0.038 Aspire One スロット

( CrystalDiskMark 2.2 で測定 ,単位は MB/sec)

旧型 M121 と比べると若干だが性能up。ただし、SDカードの性能をフルには生かせないレベル。

あと、チップメーカが分かった。MOAI (奇岩) http://www.moai.com.tw




追記:

買った 5 つをチェックしてみたのだが ... なんと そのうちの 2つは、M121 だった。

Windows では、カードを入れないで挿すと、リムーバブルディスクと出て、後でカードを入れると 両方とも 設定したボリューム名に変わる。カードを抜くと リムーバブルディスクに戻る。

どちらも、ちゃんとホットプラグに対応しているようだ。 で、MA8123 が当たりかというと、どうも微妙。

耐久テストを(実は)始めているのだが、どうも MA8123 で I/O エラーが起きて止まってしまう。そしてプログラムが止まってもアクセスランプが点滅しているという現象が起きている。HUB の問題かドライバの問題のような気もするので、関係ない可能性はあるのだが、ちょっとやばいかも。

追記:4連 HUB に、4 つカードリーダをつけて全部に負荷をかけると、特定のスロットに挿した カードリーダにエラーが起きるかんじ。特に このカードリーダで起きやすいのかも?

追記2: どうも、2 つの MA8123 を挿すとおかしくなるようだ。1つだけ挿して問題が起きたことはない。
同じ HUB に挿す場合最初は認識するが、しばらく使っていると I/O エラーになる。これは Windows でも再現した。そして、もっとひどい事に ... 別の HUB に挿すとブルースクリーンになった。
シリアルナンバーが同一(812822222789)なのが原因なのか?

実は、M121 の中にも 812822222789 があった。... と思ったら、カードが入っているとき カードのシリアルナンバー(らしきもの)が見えるようだ ... 予想外。

で、M121 は 2 枚挿しても全然問題ない。要するに 何枚も同時に使いたい目的では MA8123 はハズレ。1 つだけ使うなら問題ない。

ちなみに、Windows での見分け方。プロパティのハードウェアの一覧で、SD/MMC READER と / が入っているのが M121 。SD MMC READER になっているのが MA8123 。

ついでなので ...
このタイプのカードリーダも M121 であることが多いようだ。手持ちのものは、カードのホットプラグは全然だめ。後からカードを入れても認識せず ”ディスクを挿入してください”というメッセージが出る。

M121 以外に "Mass Storage Device" と出るタイプのものがある。(Vend:Prod 058f:6335) 。これはちゃんとカードのホットプラグに対応しているのだが ... とにかく遅い。Read で 4MB/sec 弱しか出ない。




お気に入りの HUB --

別にお気に入りではないのだが、持っているのが、たまたま 同じ LSI だったのでメモ ...

一つは、グリーンハウスの GH-UHK204SS。グッドメディアで入手 850 円。

電源が弱い 玄箱/HG で使うので、AC アダプタ付きで安いのを探したらこれになった。

Linux で見ると、ベンダー Genesys (0x05e3) 製品 GL850A(0x0606 ? 0x0608 ?) 。データシートも手に入る。

もうひとつは、ESHUB4S 399 円。

ググると、分解写真が 見つかった。

そのまま使っても良いけど、AC アダプターをつなげられるようにしてみたり、バラして RCR-SDHC/MS(MA8123) と一緒にケースに組んだり、改造のベースにと考え中。

メモ:

グリーンハウスのGH-UHK204SSは、電圧区分1(内芯0.7φ、外径2.35φ)のようだ。( 電圧は 5V )。

ESHUB4Sに、DCジャックの基板パターンがあるが、サイズからみて、これも電圧区分1じゃないかと思う。基板には、2mm ピッチの3 つの穴が直列にあいている。この穴から ケースの外側までの長さは 11〜12 mm ぐらい。

秋月に、1.3mmDCジャック(基板取り付けタイプ)というのがある。写真で見る限り配列が似ている。サイズが分からないし極性も分からないが、適合するかも。
posted by すz at 00:37| Comment(4) | TrackBack(0) | 日記

2008年08月29日

Aspire One 買いました

Acer Aspire One を買いました。

これから AVR の開発は、Aspire One の Vine Linux 4.2 と Windows XP でやろうと思っています。

Aspire One の話題は、別ブログ すzのAspireOne研究で書いていこうと思いますので、よろしくお願いします。
posted by すz at 16:54| Comment(0) | TrackBack(0) | 日記

2008年05月12日

不正アクセスって?

ずいぶん前になるが、不正アクセスをしたとして、office氏が有罪になった事件があった。office氏がした行為がなぜ不正アクセスに該当するのか? 正直いってかなりの違和感を感じた。

なにがおかしいと思えたのか、不正アクセス禁止法の条文をひもといて説明してみようと思う。

第三条には、何人も、不正アクセス行為をしてはならない。 と書いてある。なぜなのかは、第一条に書いてあり、不正アクセス行為の定義は、第二条と第三条でなされている。

大幅に要約すれば、不正アクセス行為とは、

(不正な方法で)アクセス制御機能により制限されている特定利用をし得る状態にさせる行為

で、アクセス制御機能とは

(あるしくみで)特定利用の制限の全部又は一部を解除するものをいう。

ということで、第三条の一、二、三で、不正な方法とは何という定義づけがされている。

さて、個人情報を読むという特定利用がアクセス制御機能により制限されているのであれば、office氏の行為はアクセス制御機能になんらかの働きかけをしたはずである。そうでなければ特定利用は制限されていないということになる。

第三条の二に、制限を免れることができる情報(識別符号であるものを除く。)又は指令を入力するという働きかけは不正であると書いてあってそれに該当したことになったらしいのだが、そうであるとすると、CGI のパラメータをいじる以外の行為をしていないわけだから、CGI のパラメータ自体でアクセス制御がなされていることになる。

それは変じゃないか?と条文をざっと見ただけで思ったのだ。

当時の議論では、こういう主張はなかった。裁判での議論も微妙に違う。

なぜに?と思ったのだが、どうも

アクセス制御機能になんらかの働きかけをしなければ特定利用の制限の全部又は一部を解除できるはずはない

という考えが普通の人には自然ではないらしい。

上のようなことはどこにも書いていないではないかと思う人がいるかも知れない。しかし...である。それを認めないとどこかに矛盾が生じて、相当におかしい結論でも出せてしまうのだ。




別の理解のしかたも紹介しておこうと思う。

何人も、不正アクセス行為をしてはならない... その行為は悪である。

法律で行為そのものを禁止するのだから、誰にでもすみやかに理解できる概念があるはずである。

さて、実社会でアクセスを制限する機能をもったものはなにか?

それは鍵である。鍵にたとえるとすみやかに理解できるはず。

第三条の一は合鍵を作って勝手に鍵を開けてならないということで、第三条の二はピッキングあるいは鍵を壊してはならないということだ。

ひょっとしたら裁判官の目には、office 氏の行為がピッキングに写ったのかも知れない。しかし...である。いったいどういう鍵をピッキングしたのか? 鍵とまでいえるものがあったのか?そうでなければ、ピッキングのような行為でもピッキングではない。それを明らかにする必要があったと思う。




おわりに

また、電子工作とは関係ないことを書いてしまった。が、このような考え方があるということを紹介したかった。

こういう主張を見たことはないので、かなりユニークなものだと思う。ひょっとしたら、こういう考え方は、プログラミングを読むあるいはデバックする手法を応用した結果なのかも知れない。

できれば、主張の是非だけではなく、発想について深く考えてみてほしい。
posted by すz at 04:47| Comment(0) | TrackBack(0) | 日記

2008年04月11日

XMEGAの日本語データシート

XMEGAの日本語データシートが、3/31 に出ていたことをいまさらながら知った。

Atmel の XMEGAのページからたどれるオリジナルの ATxmega A Manual Preliminary の忠実な翻訳なわけだが、正直日本語版でないと読む気がしない。

英語じゃなく日本語というのも大きな理由だが、理由はそれだけではない。表や図がカラーになっていたり、見やすいよう枠を入れたり、配置を変えたりしてあって読みやすいのだ。

ちなみに、WinAVR での対応は次のバージョンだそうだ。でも、チップがいついくらで入手できるかは不明。

先に発表された AVR32 の ワンチップ AT32UC3Bシリーズはデジキーに登録された。128KB の AT32UC3B1128が 1069円で、リードタイムが7/13。ATxmega128A4が、これより早く入手できることはないだろうし、これより高いこともないだろう。
posted by すz at 02:45| Comment(0) | TrackBack(0) | 日記

2008年02月27日

電子工作と FLASHメモリ

電子工作で大容量のデータを扱いたい場合のひとつの選択枝は、SD/MMC カードを使うことだ。

  • MMCの使い方のページがいちばん判りやすくかつ詳しいと思う。この中の端子処理と活線挿抜も要チェック。

  • SD/MMC カードの接続例(OLIMIX SAM7-P256の回路図より)

    - この回路でも、VCC に LC フィルタを入れて対策している。このとおりの回路にする必要はないが、対策はした方が良さそうだ。


いまは、ビット単価がすさまじく下がっているので、実際に使うのは microSD が良いと思う。microSD のほうが一般に消費電力が少ないらしい。実際に調べたわけではないが、突入電流も少ないのではないだろうか。

SD のスロットでよいなら、秋月でも取り扱っている。-- (150円の安い方は)あまりよい品ではないらしい。220 円の ヒロセ製の方が安心。

microSD 専用にしたいなら、コネクタもデジキーで入手できる。DM3AT-SF-PEJとかDM3B-DSF-PEJとか。microSD は、1.1mm ピッチだから手半田でもなんとかなるかも知れない。

西川部品でも DM3A-SF-PEJを扱っている(315円)。-- ゆきの研究室つれづれ日記より

秋月でも DM3AT-SF-PEJを扱いだした。200円。
ちなみに MINI-SD 用スロット(DM2A-SFW-PEJ-S)も。200円。


さて、そんなに大容量である必要がなく、PCからの読み書きも必要ない場合はどうだろう。

残念ながら、あまり選択枝はない。特に ADC からキャプチャーするなど、高速かつ定期的にデータを書き込みたい場合は、ダブルバッファが必要でさらに選択枝が少なくなる。

以前さがして、そういう目的に合いそうなデバイスを1つ見つけたので紹介しようと思う。

それは、AT45DB081D -- デジキーで 213円

インターフェイスは SPI で 8-soic パッケージがあるので、秋月の変換基板で DIP としても使える。

1MB だから GBクラス の microSD の 1/1000 以下だが、目的によっては大きすぎる場合もあるはず。書き換えも 10万回できる。

書き込みに向いていると思ったのは、256B の ページWrite が比較的早い(2ms Typ/4ms Max) だけでなく、バッファを 2組持っているためだ。

バッファを 2 つ持っていると、ページWrite している間も書き込みができるので、AVR 側にバッファを持たずにすむし書き込み時間も隠蔽されてしまう。ページWriteの時間だけが、書き込み性能を規定する。

4ms あたり 256B 書けることが保証されているのであれば、8bit ならば、64k sps でデータを書き込みしてもデータ落ちがないということである。AVR のADC の 上限 77 k sps にかなり近い。10 bit だと、15 k sps でしか取れないから、2バイトづつ書いても十分間に合う。

ちなみに、AT45DB081B というデバイスもあるが、ページWriteが遅い。AT45DB041D は容量だけ違うので良いのだが、すぐ買えないかも知れない。AT45DB021D は、バッファを 1つしかもっておらずキャプチャーに向いていない。
AT45DB161D も 276 円と安く良い。ページサイズが 512B で ページWrite時間が 3ms Typ/6ms Max なので、若干帯域が高い。

上記は、Write だけをする場合。Erase には時間がかかるのであらかじめ Erase しておくのを前提にしている。Erase and Programming だと、Typ 14ms/Max 35ms になる。この場合の上限は、7.3KB/sec ほど。

Write と違って Read は制限がほとんどない。バッファに読み出す時間は 0.2 ms でしかも 2つあるから無視できそうだ。SPI クロックの上限は 66Mhz で 純粋に AVR 側の SPI 性能で決まる。たとえば ATmega88 とか AT90USB162 とかは、SPI を持っていて、さらに USART も SPI として使える。上限は 1/2 CPU CLOCK なので、CPU CLOCK が16MHz だとすれば、8MHz 。連続で読み出す場合 1MB/sec 弱で読み込めるはずだ。

まぁ、書き込みが高速といってもこの程度だし入手性も問題がある。1MB ほどしか必要なくても、いっそのこと microSD にしてしまうのも良いのではないかと思う。

SD/MMC カードを使う場合、FAT をサポートするのが望ましい。1MB しか必要ないのに 1GB 全体を占有するのは気がひける。
でも AVR などコード領域が少なく FAT をサポートしきれない場合はどうしたらよいのだろう。

案1)あらかじめ用意した固定名のファイルの中だけを使う。

FAT16のみを使用して、アロケーションサイズも 32KB 固定にすることを前提にしてみる。

- こういうことは、Linux では簡単にできる。mkfs.msdos のパラメータを設定するだけだ。

- Windows XP だと 2GB(弱)なら FAT を選択するだけで自動的に 32KB になる→ 参考 : FAT および NTFS のデフォルトのクダスタサイズ
- 1GB だと 16KB になるだけで、残念ながら普通の方法では無理。
面倒だが、コントロールパネル→ コンピュータの管理→DISKの管理→領域選択→プロパティで FAT とアロケーションユニットサイズ を選択することで FAT16で32KB に設定可能。
- 4GB の microSD は存在しない。microSDHC になる。


こういうことを前提にできるなら、1MB でも 32個 64B の変換マップを作れば良いので なんとかなるのではないだろうか?

ちなみに、microSD の 1GB と 2GB のみを対象とした理由

- メモリカードの販売価格の推移を見ていると 1000円を大幅に切るまで安くなったものは、やがて市場から消えていく運命にある。
- 1GB の価格はすでに 600円台。たぶんやがて消える。
- 2GB は SD 規格の最大容量だから、結構しぶとく残るのではないか? (ただし、どこまでも安くなるとは思えない。500円〜1000円のどこかで安定するような気がする。) 
- そうだとして microSD は miniSD/SD に変換できるから、2G 以下の miniSD/SDもやがて消えていくのではないか? 
- そういうわけで、今からものを作るのであれば、2GB のみを対象にすれば良さそう。(1GB はおまけ)



案2) パーティションの隙間を使う。

案1を実装するだけのコード領域がないから FAT を無視して連続した領域を使いたいという場合でも 先頭から使うのだけはやめたほうが良い。

先頭の 512B さえあければパーティションをずらして作ることで、他の領域を他の目的に使えるからだ。

- これも Linux なら実に簡単だ、fdisk するときにパーティションの先頭をデフォルトから変更するだけ。
- Windows ではどうしたらよいのだろう? 商用ソフトなら、いくつか存在するのだろう。しかし、これだけのために商用ソフトを進めるわけにはいかない。
- FIPS かつては定番ツールだったらしい。今使えるのかどうか不明。
→ (MD5) 0e69615d799a6dc7309cbc07a4539426 fips20.zip
ソース付きなので、いろいろできるかも。


さて、どれだけずらせばよいのだろう? 一応 16セクタ(先頭から 16x 512B) ずらすことをお勧めする。

なぜか? たいした理由ではないのだが、あるシステムと同じだから。-- あるシステムって何? 誰でも知っているものだけど秘密です。


追記:09/10/02

SD/MMC カードの接続なのだが、ELM: 8ピンICで作る SDオーディオ・プレーヤ回路図を見ると .. プルアップが全部省略されている。DAT1/DAT2/CD が無接続。プルアップ必須だとばかり思っていたので、少々驚いた。

それはともかく、最近の microSD は 2GB/4GB でも MLC 化しているようだ。そうなると 内部の消去ブロックのサイズが 大きくなる。これが実に 2MB ぐらいありそうだ。

microSDの耐久テストをしていて思ったのだが、このサイズ 2MB 内なら 一気に書けるようだ。

キャプチャーするには最適かも知れない。

ちなみに、お勧めは SanDisk 。ウェアレベリングが効くので あまり寿命を心配する必要もない。
posted by すz at 21:28| Comment(0) | TrackBack(0) | 日記

2008年02月26日

秋月取り扱いパーツだけを使って作る何か

秋月で ATmega164p, ATmega644p, ATmega88 が低価格で購入できるようになった記念にこれらのどれかと、秋月で入手できるパーツを使ったなにかを作ってみたい。(いまのところあくまで願望)

で、考えていたのだが、SD カードを USB Floppy にするアダプタなんてのはどうだろう。USB の UFI という仕様を満足すれば良いはず。

動機その1

実は数週間前 、Windows XP マシンがおかしくなってクリアインストールする羽目に陥った。インストールした後、必要なアプリケーションをインストールしたりさらにアップデートしたりする必要があったのだが、非常に苦痛だった。もうクリアインストールだけは絶対したくない。...というわけで、はじめて Windows XP 付属のもバックアップを使ってみたのだが、なんとフロッピーが必要だった。PC 自体も古いのでドライブは付いているのだが、メディアがない。私はフロッピー自体あまり信用していないので、たとえメディアがあったとしてもあまりうれしくない。メディア全体をファイルにして、バックアップすることになる。

そういうことが簡単にできる装置がほしいと思った。

動機その2

これも Windows マシンがおかしくなったことが発端なのだが...
VMware Player に目をつけた。仮想マシンならバックアップは非常に楽だ。ホスト OS には、あまりアプリケーションを入れずにすむし、セカンド Linux マシンにもなる。qemu を使って disk image を作ることで、VMware Player に OS をインストールできることもググってわかった。

VMware Player で扱えるストレージは、 disk image 以外は、DISK 以外の実際の装置のみ、具体的には、CD と USB ストレージ。Vine-4.2 をインストールしてみたのだが、実際の CD を用意する必要があった。

仮想マシンのインストールをするのに、実際の CD を用意するのは、なんだか馬鹿馬鹿しい。といって AVR とかで 仮想CD を作るのは性能的に無理がある -- AT90USB162 を使ったとしても、 1倍速CD ぐらいが限界のように思える。でも、network インストールできる OS なら、仮想 Floppy でも十分だ。やったことがないのでわからないが、ひょっとしたら、Windows の バックアップを仮想マシンにリストアできるかも知れない。


どんなものにしようか

とりあえず動機付けはできた。あれば便利に違いない。

さて、どんなものにしよう。まず、SD カードについて考えてみる。今はビット単価が落ちすぎて、1000円以下で買える最大の容量が 1GB になってしまった。不要になった SD でも 128MB になった。(64MB はテストで壊してしまったし)。できれば SD に書き込んだ FD イメージを 1 枚の FD として扱えて、メディア切り替えができるものが、望ましい。

ファイル名は固定にして、空のFD を定義する場合も FD のサイズのファイルを用意することにする。こうすることで、ファイル生成の機能が必要なくなる。ルートディレクトリエントリから、shortname でファイルを検索し、ファイルサイズを取得して、メディアのサイズとする。そして、FAT を手繰って 1FD分のマップを作る。あとはマップにしたがって I/O コマンドを実行する。...こんな処理で良いはずだ。

マップを作ると簡単に書いてしまったが、ATmega88 では無理かも知れない。どうせフロッピーだし、無理なら、いちいちFATを手繰っても良いかも知れない。


問題はサポートできる FDの数。1枚ではチョットもったいない。複数ならオペレーションのためのインジケータとボタンが必要だ。数枚なら、LED で 2進数表示というのもアリだが... ピンがずいぶん余るはずなので、2桁の 7セグと、セレクト用の UP/DOWN ボタンを付けるということでどうだろう。...ということは サポートできるFD数は、最大 99。実際にこんなに使うとは思えないのだが、Windows 95 の時代は、本当に数十枚のFloppy を使っていたし、オーバスペックとまでは言えないかも知れない。

あとは、メディア切り替えを OS に知らせるためのオペレーションが必要。専用のボタンにするか、あるいは UP/DOWN ボタンを操作し終わった 5秒後とかでも良いかも知れない。どちらにするかは、ピンの数と、操作性と、レイアウトデザインで決めることにする。

さて、(メモリと余力があれば)もうひとつ付けたい機能がある。それは、FDD の シーク音。ここまでやれば、この装置が実際に役に立つのかどうかなどどうでも良くなるに違いない。

主要部品

シーク音機能がなければ、たぶん ATmega88 で実装できるはず。

SDカードスロットも水晶も 2桁 7seg も全部秋月で購入可能なはず。
ちなみに水晶は、最新版の usbdev を使えば 12MHz/16MHz のどちらも OK。

基板は C 基板。うまくレイアウトすれば 1枚に入るかも知れない。

おわりに

まぁ、いまのところ妄想です。シーク音機能はどう作るか想像できていないけど、メインの機能は、まじめに mass-storage を調べれば作れそうなレベルだと思います。

追記:設計メモ

ほんとうに作る気になったら、カテゴリを作ってあらためて書くつもりだが、まだ作る気が起きていない。とりあえず設計メモとして追記していこうと思う。

付けるパーツと pinの数の確認

もう ATmega88-20PU(250円) で作ろうと思っている。これで作れなければ、作らない。

さて、ATmega88 で作った場合、どういうパーツを選択するか。使用する pin の数にも気を付けなければならないので、pin数を確認しながら決めていく。

ATmega88 は、28 pin そのうち ~RESET , VCC, AVCC, AREF, GND x2 の 6 pin は(普通)信号線には使えない。だから pin の数は 22 からスタートということになる。

SDカードスロット(150円/220円) まぁこれは必須だ。

OLIMIX SAM7-P256の回路図

を参考にすると、信号線は、4 pin 必要ということになる。SCK/MISO/MOSI/~SS の 4 pin を割り当てて、ISP にも使う。-- まあこれは常識的な割り当てだろう。残り 18 。

USB 用ピンの割りあて INT0/PD2 とそのとなり INT1/PD3 -- これも必須だ。水晶も必要だから 4 pin 。残り 14。

水晶は、表面実装タイプ クリスタル 16MHz (5個入り 200円)にしようと思う。12 MHz でないのは、usbdev が他の周波数に対応した記念に使ってみようと思ったから。12MHz でも OK なようにはしておく。ちなみに、表面実装タイプだが、いっても PIN を引き起こせば 普通に使える。台座が付いている分だけ手配線するのは楽。

USB は、3.3V で動かす。レギュレータは、TA48M033F( 3.3V 500mA,コンデンサ付き 100円) 。SD カードは多少消費電流が多いそうなので、コネクタにには、電流が取れる USB B コネクタ(50円)を選択する。ひょっとしたら、A タイプ(50円)を使って 延長ケーブルを使うほうが使いやすいかも知れない。

表示装置は、手配線が楽な、3桁 7seg (200円)を選択することにする。ドットを使わないことにして、3 + 7 = 10 pin を使う。残り 4 。

表示は、1 つ1つ点灯するようにする。VF 1.7V として 最大 20mA とすると 80Ω。電流制限抵抗は、コモン側を使い 75 Ω x 3 ということにしよう。

残りは 4 しかない。まずはボタン。とりあえず 2 個で信号線も 2 本とする。もし 3 個にするとしても 2 本でなんとかすることにする。ちなみに通販だと、タクトスイッチ 100個セット 700円しか選択枝がない。一応通販でも売っているし、店頭なら1個単位で買えるから、”秋月取り扱いパーツだけ”というのを外していないとしよう。

残り 2 。これは機能拡張用(一応サウンド用のつもり)。何を残すべきかが難しい。シリアル RX/TX を残すこともできるし、2 つの PWM を残すこともできる。あるいは、ADC+I2C(TWI) を残すこともできる。-- もう少し設計が進むまで保留ということで。

ちなみに、LED をダイナミック点灯させると、電源にかなりのノイズが載る。ADC を使うのも PWM を使うのも精度を出すのは、結構厳しいと思う。

その他のパーツについて

基板は、両面ガラス・ユニバーサル基板 72x47mm(1枚 100円・10枚 900円) を選択する予定。SD カードスロットを上面に付けたいというだけの理由。

あとは、ケースそれに、配線材とコンデンサ・抵抗・インダクタ、それに ICソケット・ピンヘッダ。基本的にこういうものまではケアしないが...どうしよう。

できるだけ秋月取り扱いパーツを紹介するが、無理な面もある。

まずケース。
ケースに入れられるように作る場合は テイシン電機 TB-55Bから検討する。ひょっとしたら基板を削ってもパーツの配置の問題で入らないかも知れないし決定ではない。これに入らないなら、すなおにレイアウトするつもり。一応スペーサを勧めておこう。

コンデンサ・抵抗は秋月のものだけで良いのだが、SD用 インダクタは無理かも。一応 マイクロインダクタ 47uH を付けてみて、動けば OK ということにしよう。

他の目的に使う

仮想FD として使えることを第一に考えるけれども、他の目的に使えても良いかも知れない。SD カードも付くし ブートローダも使ってみたいし。-- ただ、プログラム本体も 6KB 以内という条件になってしまう。無理なら諦めるつもりだが、少しばかり検討だけはしておこう。

まずは Writer 機能ということになりそう。拡張用信号線は 2 つしかない。... のだが ボタンをさわらないことにすれば 4 本。SD カード用の信号線を使うことは考えたくないので、この 4 本を使えるように少し考えておこう。

それ以外? 7 seg 3桁ながら表示装置とボタンが付いていて USB も付いていれば意外にも有用なものが作れるかも。3桁ロックつきUSBメモリとか? PCの画面ロックとか? 秒表示 ラーメンタイマとか?。まぁ本体で作れるものは、拡張用信号線は関係ない。

2 本しかないが、ADC が使えるのはメリットかも知れない。

7seg をやめて液晶ディスプレーにする

うーん。入れ替えて使える機能を考え出すとこういうことをしたくなる。あくまでおまけと考えたほうが良さそうだ。まぁ、基板を起こすぐらい気合が入ったなら、7seg と 超小型LCDキャラクタディスプレイモジュールのどちらを使うか選べるようにしても良いかも知れない。
posted by すz at 19:40| Comment(0) | TrackBack(0) | 日記

私がAVRを選んだ理由

いますぐPICをやめてAVRに移行すべき10の理由に触発された。このブログを作った理由にも関係するので、私がAVRを選んだ理由を書いてみようと思う。


  • gcc が使える
    2KB のプログラムメモリと 128B のRAM のチップで、C でプログラミングが出来るのはいったいどういうことなのか? どの程度のことまで出来るのだろう? という興味を持ったのが、AVRを使ってみようと思った最大の理由。
  • ELM - Atmel AVRについてを知ったこと
    このページで、日本語ドキュメントがあり、ライタも簡単に作れることを知った。このページがなければ、単に興味を持っただけで終わったかも知れない。
  • 秋月で ATtiny26L が入手可能になったこと
    秋月で早くから AT90S8535 や AT90S8515 などを扱っていたのは知っていたのだが、そのころは興味を持てなかった。
    ELM を知り、ATtiny26L が買えることを知って初めてプログラミングをすることにしたことを覚えている。


私がAVRを選んだ理由は、こういったことだが、考えてみれば既に過去の話で今も選び続けている理由ではない。

今AVRを選び続けている理由というのも書いてみよう。


  • gcc と avr-libc が使え、 日本語ドキュメントがある
    たとえ 2KB でも gcc で思うようにプログラミングできることを知ってしまった以上、もう gcc のないチップを選択する気はまったくおきない。avr-libc も気にいっている。データシートを見ればプログラミングできるし、ソースコードを見てどういう処理をしているのか調べることもできる。
  • アーキテクチャが洗練されている
    AVRはまともな RISC だ。mips に通じるところもあり、今まで経験してきたプログラミング流儀を生かせたりして非常に気に入っている。また、パイプライン処理をしていて 1clock あたり 1命令を実行できるほど高速であるのに、あるコードが何 clock で実行されるのか容易に計算できるところも気に入っている。
  • レベルの高いアプリケーションが公開されている
    CPUでの USB 処理や バーチャルアナログシンセなどが公開されていることは、プログラミングにチャレンジしようという気を起こさせる。
  • ADC や PWM などのデバイスの使い勝手が良い
    使い勝手が良いと言い切ってしまうのは少々抵抗があるが、ワンチップマイコンである以上デバイスがどこまで使えるかがすべてである。たとえアーキテクチャが洗練されていて gcc が使えても デバイス周りがダメダメなら使えない。そういう意味で必要な水準は超えているといえる。


さて、今AVRを選んでいるわけだが、ブログのタイトルから判るように AVR only である。なぜ他のチップを(少なくとも当面は)選ばないのか? その理由も書いておこう。


  • AVR で十分である
    AVR でかなりのことはできる。AVR で出来るのに他のチップを選ぶ理由はない。PIC24F は RAM が 8KB もあったりデバイスが充実していたりして、AVR で出来ないことが出来そうで、かなり魅力的なのだが、gcc やライブラリの条件をクリアしていないので選択する気がおきない。PIC24F を選ぶぐらいなら ARM や AVR32 など 32bit に移行してしまうと思う。
  • AVRで出来ないようなものは面倒である
    AVRで出来ないことをするということは、回路の規模が大きくなったり、プログラムの規模が大きくなるということでもある。なにか作ってみたいという気持ちはあるのだが、そういうものを作るには、(私にとっては)面倒を乗り越えるだけの動機が必要でそれはまだ見つけられていなかったりする。


追記

ゆきの研究室 - つれづれ日記で知ったのだが、もうひとつ AVR しか選ばない理由が増えた。

それは、XMEGA シリーズが発表されたこと。

3.6V までしか動作しなくなったけれども、32MHz まで高クロック化され、ADC が 12bit (2Msps) まで高機能化された。さらに 12 bit DAC (1Msps)まで付き、DMA までできるようになった。AES/DES エンジンというのも嬉しい場合があるかも知れない。

たぶん実際に使うデバイスは、ATxmega16/32/64/128A4 シリーズ。TQFP44 なら、アイテムラボの変換基板も使えるし、0.8mm ピッチで半田付けも楽。

gcc,binutils,avr-libc,avrdue の対応。そして実際に入手可能になるのを待たなければ使えないが、相当に魅力的だ。DMA も持っているから、へたな 32 bit より早いかも知れない。RAM が 最大 8KB しかないことだけが不満か。
posted by すz at 02:44| Comment(2) | TrackBack(0) | 日記

2008年01月10日

『もう俺は限界かもしれない』を読んで

遅らばせながら、『ブラック会社に勤めてるんだが、もう俺は限界かもしれない』を知り読んだ。

深く感情移入できたし、いろいろ考えさせる内容であったので紹介しておく。ググれば数多くログが見つかるだろうからリンクはしない。

実話認定

2ch に投稿されたものだが、実話をベースにしていることを私は信じる。創作かも知れないと疑わずにすなおに読んでほしい。

藤田さんの言動を通じて浮かび上がるキャラを書き手本人が理解していない。そのことが読み取れるし、実際本人が雑談スレでそう書いている。これが、決定的な理由。

感想

この話あまりにリアルだ。書き手本人が意識しないことまでにじみ出てきている。だからこそ、読み手ひとりひとりが、さまざまな感想を持つことだろう。

このブログの真のテーマと関係しそうな感想までありそうに思えるので、いくつか自分の思いを書いてみようと思う。

プログラミングについて

デスマや人間関係について凄惨な現状が描かれているが、プログラミング自体については、まったくネガティブな表現が見当たらない。

そもそもの動機が、タイトルから想像できるように現状から逃げ出したいという思いを吐き出したいというものだろう。それでも(はじめのやりとりから推察して)違う職業につきたいとは考えていないように見える。

この話を読んで PG あるいは SE を目指すのはやめようと思う人がいるかも知れない。でも次のことも考えて欲しい。

プログラミングという行為は楽しいのだ。そして、この話で出てくるプログラミングがすべてではない。

AVR に限った話題しか扱わないつもりでこのブログを始めても、MinGW/MSYS や gcc の改造、さらには Linux のドライバの改造まで出てきてしまう。そして、プログラミングの世界はまだまだ広い。

プログラミングあるいはデバッグするという行為は、効率よく論理的思考を身に付ける手段でもある。論理的思考といってもレベルがある。説明できないが、自分があるレベルについて理解できても、それが頂点ではない。それ以上のレベルがあり得るのだといういうことを、考えて欲しい。

すこし解説しようと思う。でもこれが、分からないからといってこれ以上説明を求めないで欲しい。

まず、プログラムというのは、だれでも理解できる非常に簡単な論理の組み合わせである。だれでも理解可能であるはずなのに、理解しがたいのは複雑だからだ。

プログラムを理解するというのは、あちこち省略された論理を読み解くのに似ている。省略された論理というのはサブルーチンのことだ。

あちこち省略された論理など論理ではない。理解できるわけがないと思う人もいるだろう。

でも、そういうことを当たり前のように出来る人もいるわけだ。論理的思考が出来ると思っている人でもこれが出来ないならば、レベルの差がある。

生活の場で感情論としか思えないものに、正論をぶつけて紛糾する...そういう場面はありがちだ。正論をぶつける側は、相手が論理思考ができないと思うかも知れない。でも、感情論側にも省略された論理があるかも知れない。レベルが違う人は当たり前のようにそれを見つけることができる(かも知れない)。


藤田さんについて

多くの人が、藤田さんがリーダにならない。そして、恋人がいた会社に行ってしまう理由が分からないと書いている。

こう考えたらどうだろう。

藤田さんは、挫折から立ち直り切っていない。新たな人生の目標を見つけ出せていないのである。上原さんや雇ってくれた社長を見捨てることはできないから職場に縛られていたが、問題がクリアになれば新たな人生の目標を模索したいのだ。そのために恋人がいた会社に行くというのは、自然な発想のように思える。

そして、人生の目標を喪失したままの人物は理想の人物ではない。藤田さんを理想の人物として描きたいなら、新たな人生の目標を模索に出ることは必然といえよう。

...ということを書いた本人が意識していないようなのだ。これ(意識していないように見せること)が表現の一手段というのはありうべかざることだ。実話であって理解せず観察だけによってこういうことを読者に伝えたとしても、驚くべきセンスである。

日本人は弱いのか?

藤田さんであれマ男であれ、脱却したとはいえ NEET 時代があったのだから、よく言えば繊細な、悪く言えば弱い人物として描かれている。木村くんが自分の意見を押し通すことに驚く場面さえある。それゆえにリアルティを感じるし、NEET であるような人の共感もえられるのかも知れない。

正直もっと強くなって欲しい。たとえば司馬遼太郎が描く戦国時代や幕末の日本人は信じがたいほどアクティブだ。繊細なだけが日本人の特質ではない。

おわりに

ついに感想文まで書いてしまった。これや前の記事は、例外である。この手のものは、もう書かないつもり。
posted by すz at 21:50| Comment(0) | TrackBack(0) | 日記

2008年01月08日

このブログの著作権について

著作権について少し考えることがあったので記しておこうと思う。

このブログの著作権は、すzが持っている。しかし、私がたとえば事故で急に死んでしまったら、どうなってしまうのだろう?

おそらく、比較的すみやかに このブログは自動的に閉鎖される。そして私が誰かなのかを、さらには私の遺族が誰なのかをつきとめてかつ、許諾を得ないと二度とこのブログは見ることができなくなる。死後 70年(でたらめだ)無名・変名なので、公表後 50年もの権利があるから、ログを取っていた人がいたとしても不特定多数の人に見せることはできないだろう。

別に死ななくても、このブログが閉鎖されてしまう理由はいくつもありそうだ。

ほとんどの人にとってつまらない内容かも知れないが、せっかく書いたものなので、有用だと思う人が一人でもいる限り公開できたらと思う。

というわけで、宣言だけはしておく。

もし、このブログの内容がインターネットのどこにも見られない状態になったら、誰でも良いから、私に代わってこのブログの内容を公開してかまわない。公開を妨げる権利は放棄する。ただし、このブログの内容(文章)に限る。

文章以外に、プログラムもあるが、それは GPL として扱って欲しい。


公開してくれる人がいるかどうか分からないが、宣言しておかないと消えてしまうのは確実なので記した。

こういうことを考えた理由も書いておこうと思う。

こんなもの(このブログ)でも著作物であり、著作権というありがたい権利が与えられる。しかし、他の財物とは違って、著作権は、文化の発展を目的としている。

誰一人として欲しないなら別だが、自分の都合だけで消滅させて良いのか?それは、著作権の目的にそぐわないだろう。権利だけもらって義務を果たさないように思えてきたのだ。

デジタルデータは、コピーするのは簡単にできる。しかし、メディア(ここの URL自体もメディアかも知れない)に縛られてしまうといとも簡単に消滅する。(少なくとも今の技術レベルでは)コピーされ続けることによってのみ残りうる。そういう性質がある。(と私は思う)

そういうことを考え出すと、これを書かずにはいられなくなってしまった ... というのが本意なわけだ。

おわりに

このブログはあくまでも、趣味の電子工作のブログです。この記事については、必要性があったから書いたまでで、著作権について議論することは本意ではありません。

申し訳ありませんが、この記事についての議論はここではご遠慮ください。
posted by すz at 00:11| Comment(2) | TrackBack(0) | 日記

2007年12月20日

libusb と HID

Windows 流にいえば COM ポート (Linux なら tty )で通信できる CDC は便利ではある。でも、AVRの コードが大きくなったり、約束ごとを決めないと、その装置がどんな装置か判別できないというデメリットもある。また、汎用インターフェイスなので遅い .. かも知れない。

USB ライターでいうと、AVR-DoperUSBasp あと USBtinyはみな libusb や (HID インターフェイス)でアクセスするので、デバイスの種類は指定しても、(COMポートの番号など)デバイスそのものを指定しなくとも使える。

こういう ことができるのが、USBのメリットだが、CDC を使いつつ、どんな装置か判別することはできないだろうか?

というわけで、まずは、AVR-Doper や USBtiny そして USBasp がどんな風に使うのか調べてみた。これらは avrdude でサポートされている。avrdude のコードを見ればだいたいのことは分かる。

libusb の open/close

接続されているすべてのデバイスをスキャンして、VENDOR_ID と PRODUCT_ID が一致するものを選ぶのが普通のやり方らしい。
CLASS とかで判断する方法もあるらしいが、汎用デバイスを作るわけではないので、知る必要もないだろう。


usb_init();
usb_find_busses();
usb_find_devices();
for(bus=usb_get_busses(); bus; bus=bus->next){
for(dev=bus->devices; dev; dev=dev->next){
if(dev->descriptor.idVendor == VENDOR_ID
&& dev->descriptor.idProduct == PRODUCT_ID){
handle = usb_open(dev);
       break;
}
}
}


open したあとさらにオマジナイが結構必要。列挙すると、

usb_set_configration(handle,...);
usb_claim_interface(handle,...);
-- 失敗したとき usb_detach_kernel_driver_np() などで
    ドライバを解放する。


close もそう単純ではない。

usb_release_interface(handle,...);
usb_reaet(usb_handle);
usb_close(usb_handle);


usb_release_interface() はともかく、usb_reset() までしなければならないのか? なぜそうするかよく分からない。

libusb での制御方法

コントロールエンドポイント に対して、ベンダー依存のリクエストを usb_control_msg() で送って制御する方法がある。これは、USBtiny や USBasp のやりかた。ファームウェアが簡単なのがメリット。

そして、コントロールエンドポイント に対してusb_control_msg() を使って制御するのは同じだが、HID クラスを定義し、HID の GET_REPORT / SET_REPORT で制御する方法がある。これは、AVR-Doper が使っているやりかた。この範囲で使うならば、WIN32API を使っても制御できるのがメリットだが、HID の定義が面倒そう。

さらに、usb_bulk_read()/usb_bulk_write() を使って バルクエンドポイントに対して送受信することで制御する方法もある。avrdude の jtagmkII(含 AVRDRAGON) や stk500v2 の制御をみると .. COM ポート以外に、libusb を使って制御する方法を提供している。

ちなみに、usb_control_msg() は、ほとんど SETUP パケットを自分で組み立てるイメージ。GET_DESCRIPTOR とかを直接 CALL したりできるかわりに、SETUP の通信について知識が必要。

WIN32API での制御方法

AVR-Doper での open の方法は次のようになっている。


HidD_GetHidGuid();
SetupDiGetClassDevs();
for(i=0;; i++) {
SetupDiEnumDeviceInterfaces();
SetupDiGetDeviceInterfaceDetail();
CreateFile();
HidD_GetAttributes();
if (deviceAttributes.VenderID == VENDOR_ID
&& deviceAttributes.ProductID == PRODUCT_ID) {
break;
}
}


関数の機能も名前も違うが、libusb の open の仕方と良く似ている。

デバイスとの送受信は、HidD_SetFeature()/HidD_GetFeature() を使用する。libusb 版では、usb_control_msg()をつかって同じ機能を実現している。

さらに説明しておくと、AVR-Doper は HidD_SetFeature()/HidD_GetFeature() を 使って COM ポートのような ストリーム(というか擬似シリアルデバイス?)を実装している。その上で 上位の STK500V2 プロトコルが流れるようだ。

そういう処理をするのも面倒そうだが、HID でベンダー依存の情報を流すためには、デスクリプタの定義が必要でそれも面倒そうだ。AVR-Doper では、定義が 60バイトぐらいある。

CDC を使いつつ、どんな装置か判別できるか?

すくなくとも、Linux ではできないようだ。/dev/ttyACMXX というデバイスと libusb で得られる情報のマッピングができない。

WIN32API だと、API は知らないが、分かるような気がする。
しかし、libusb とは関係ない API だと思う。

Linux で出来ない以上 WIN32API で出来てもあまり嬉しくはない。今度は逆を考えてみる。


libusb を使って、CDC のように使えるか?

まず、AVRCDC や USB162 のドライバのデスクリプタだけを ベンダークラスに 変更したファームウェアを作って、普通に使えるか確認してみた。多少怪しいところがあるが、usb_bulk_read()/usb_bulk_write() でちゃんと送受信できた。

usb_detach_kernel_driver_np() を使ってドライバを解放すると、
(変更しない)AVRCDC や USB162 そのものでも送受信できる。

しかし... usb_bulk_read()/usb_bulk_write()を使った制御は、遅かった。カーネルドライバだと、複数の要求を submit して非同期に処理することができたが、libusb だと同期型になるので遅い。
性能は、2.4 オリジナル CDC ドライバ並かそれ以下 ... 処理の内容を考えてみれば当然かも知れない。

CDC のようには使えるが、非同期での処理が出来ない。スレッドを使えば read と write を非同期でできるのかも知れないのだが、複数の read , 複数の write 要求を同時に出すことは難しいのではないかと思える。

結論

性能を求めるなら、専用のドライバを用意するのが一番だろう。普通そこまでやれないので、チューニングした CDC ドライバを使うのが次善だと思う。USB ならではの便利な機能はあきらめるしかない。

しかし、性能が必要なければ、CDC ベースのファームウェアのデスクリプタだけ変えて、ベンダークラスにすることで、装置の判別や その他付加機能を簡単に付けることができる。

USBasp 流に、バルクエンドポイントをなくしてしまって、usb_control_msg()だけで制御するのも簡単で良いかも知れない。


ただ、HID を汎用に使うのは、すごく面倒。本来の目的どおりボタンを作ったり、キーボード・マウスを作るのでなければ、無理して HID を使う必要はないと思う。


(補足)この記事の最初の版は、自分でも何が書いてあるかわからないぐらいひどかったので、書き直しました。
posted by すz at 21:25| Comment(3) | TrackBack(0) | 日記

AVR Studio4 SP2 と新デバイス

ATtiny43Uが気になって.. 調べてたら AVR Studio4 SP2 が 12月に出ているのを知ったので早速インストールしてみた。

で、Program Files/Atmel/AVR Tools/Partdescriptionfiles を見てみたら ... ATtiny43U.xml とか ATtiny48.xml があった。よくよく見ると avr-libc-1.4.7の include/avr にもかなりの数の新デバイスが定義されている。

ATtiny43U:

xml の PINアサインを見てみると ATtiny43U は ATtiny461 とほぼ同じ。

avr-libc のヘッダの _vect を比べてみると、番号がずれていて数が減っている。INT1 も削られているし、PCINT も 2個→ 1個になっている。TIMER0_CAPT もないし、TIMER1_COMPD もない。それ以外には、 ADC の定義が減っている。

ATtiny461 の機能を削減した廉価版らしい。

ATtiny48:

ATtiny28 の機能拡張版というより、ATmega48 の機能縮小版のような感じ。

SPI,TWI,ADC はあるのだが、USART がない。TIMER2 がない。あと PCINT3 もなくなっている。

Tinyシリーズだから当然 乗算命令もないはずだ。


微妙に機能削減したチップが出るのは、オリジナルの ATtiny26系 、ATmega8系 の2つの系統に人気があるということだろう。

ただ、電子工作でそういうチップを使いたいとは思わない。
...というわけでこれらのチップへの興味はなくなってしまった。

ついでなので書いておくと、ATmega48/88/168 シリーズに加えて ATmega48P/88P/168P/328P シリーズというのが出ている。avr-libc のヘッダを比較したら BODS/BODSE というのがMCUCR に追加されているだけのようだ。機能が増えたというより、328P があるというのがメリットか。
posted by すz at 19:30| Comment(0) | TrackBack(0) | 日記

2007年12月18日

gcc-3.4.6 にデバイスを追加するには

AT90USB162 を使うために gcc-4.2 にあげてみたのだが、どうもおかしい。さらに ATtiny861とか USB910 も動かなくなってしまった。

しょうがないので、gcc-3.4.6 にデバイスを追加することにした。

準備)

前提として、binutils-2.18 を使うことにするので先にインストールしておく必要がある。

また、avr-libc-1.4.7 を使う。avr-libc でサポートされていないデバイスまで gcc に組み込むと 面倒なので、サポートされていることを確認しておく。

gcc へのデバイス追加)

gcc にデバイスを追加するには、gcc/config/avr の avr.c , avr.h t-avr の3つのファイルを編集する。基本的には他のデバイスのマネをすればよい。

avr.c :

○ avr_mcu_types にデバイスを追加する。デバイス名とデバイスの define は、avr-libc と一致させる必要がある。

ATtiny は、ARCHタイプ 2 にする。ATmega は普通 4 or 5 。8KB を超えるものは、5 を使う。

ちなみに、gcc-4.X では ARCHタイプ 25 が追加されている。このARCHタイプ は、新しいATtinyシリーズのように movw があるものに使用する。

ARCHタイプ3は、乗算命令がないが、8KBを超えるものに使用する。AT90USB162 はこれに該当。


8KB を超えると RCALL/RJMP命令が届かない場合が出てくる。同一ファイルにない関数呼び出しは、CALL命令を使用しなけばならないので、ARCH2 と ARCH3 , ARCH4 と ARCH5 の違いが必要。

AT90USB162 用に本当は、ARCH35が欲しいところだが、ないものは仕方がないので、ARCH3 にするわけだ。

avr.h :

○ LINK_SPEC にデバイスを追加する。-m avr1 〜 -m avr5 のどれかに追加し、さらに ATmega や AT90USB , AT90PWM などは、-Tdata =0x800100 のところにも追加する必要がある。

○ CRT_BINUTILS_SPECS に crtXXX.o の名前を追加する。適当に付けてはいけない。必ず avr-libc と同じ名前を付けること。

t-avr :

○ MULTILIB_MATCHES にデバイス名を追加する。


avr-libc-1.4.7の変更)

実は、at90usb162 , at90usb82 の定義が間違っている。乗算命令を持っていないので、avr5 ではなく avr3にしなくてはならない。

(当然だが)まず、avr5 → avr3 に変更した gcc をインストールしてから、次の変更をした avr-libc をビルドしなければならない。

○ at90usb162 と at90usb82 を avr/lib/avr5 から avr/lib/avr3 に移動した上で、avr/lib/avr5 , avr/lib/avr3 の Makefile.* および at90usb162 と at90usb82 の Makefile.* を書き換える必要がある。

○ さらに、configure.ac , configure も avr5 → avr3 の変更が必要。


この問題は、WinAVR-20070525 でも存在する。at90usb162 で期待どおりに動かない場合、乗算命令を使っている可能性がある。
生成した xxx.elf ファイルに対して、avr-objdump -d でアセンブルリストを作成し、mul を grep することでチェックすべし。


おまけ)

参考までにパッチを提示しておく。このパッチはあくまで参考。動作確認もできていないし、デバイスも適当に選択している。

gcc-3_4_6-avr-new-devs2.patch
avr-libc-1.4.7-usb162.patch
注)ディレクトリを移動したので patch のサイズが大きくなっている。パッチを当てた上で avr5 のもとの Makefile.* と比較すると変更点が分かる。


おまけ2)

WinAVR-20070525 で at90usb162 を正しく コンパイルするには、コンパイルのオプションを次のように変更する。ただし、リンクは、-mmcu=at90usb162 のまま変更しない。


-mmcu=at90usb162

-mmcu=avr3 -D__AVR_AT90USB162__


乗算命令を使用しているライブラリを使わないことが前提なので注意。

なお、WinAVR プロジェクトには、このバグについて だいぶ前に報告されている。次のリリースでは修正されると思う。


追記:WinAVR と同じ gcc を作るには

WinAVR は、ソースを管理しているのではなく、パッチを管理している。CVS から取らなくても ブラウズしてちまちま取ってくれば OK 。ちなみに、00/10/11 は WinAVR 固有なので、Linux では必要ない。


おまけ: WinAVR (gcc-4.1.2) の at90usb82/162 を avr4/avr5 → avr3 に変更するパッチ。
99-gcc-4.1.2-usb162.patch


おわりに

これで、WinAVR ベースの gcc-4.1.2 と 独自拡張の gcc-3.4.6 で USB910 TypeA (attiny861) , at90usb162 が動くようになった。

3.4.6 のほうを avr-gcc にしてメインに使うつもりだが、4.1.2 も avr-gcc4 で使えるようにしている。avr-libc-1.4.7/binutils-2.18 は共通でよいようだ。

普通は、4.1.2 の方がコードが小さくなるし、特に ATtiny で MOVW 命令を使ってくれるので高速なはずだ。でも、コードによってサイズが大きくなる場合がある。USB910 TypeB (ATtiny44) は、4.1.2 ではサイズがオーバしてビルドできない。というわけで両方のバージョンを使える環境が欲しかったのだ。

ちなみに、CVS から取ってきた WinAVR ベースの 4.2.2 はまだダメ。新しいチップに対応する必要があるなら、4.2.2へのパッチと上記を参考にして 4.1.2 に追加していくほうが良いと思う。


パッチを見ていると、ATtiny43U とか 知らないチップ名がいくつか見える。ひょっとしたら、新しい WinAVR が出る前に使いたくなるかも...
posted by すz at 00:22| Comment(0) | TrackBack(0) | 日記

2007年12月03日

USB ミニBコネクタ

ちょっと思い立って、FT232RL のボードを作ってみた。

写真:


アイテムラボの変換基板を使い、FT232RL と 10uF のコンデンサ 2 個、それに USBミニBコネクタを載せて、それだけで使えるようにしてみた。

苦労したのは、ミニBコネクタ周り



0.65 mm ピッチで、自分の技量ではケーブルをハンダ付けできそうにない。しょうがないので、1,3,5 pin を立てて みたら、うまくハンダ付けできた。

ピンの接続は

1 VBUS
2 D-
3 D+
4 NC
5 GND


浮かした 1,3,5 pin は外れても 直せるが、2 pin は難しいのでしっかり付ける必要がある。ちなみに、下に見えている黄色いのは、絶縁に使ったポリミドテーブ。熱を加えないので耐熱である必要はないのだが、持っているので使ってみた。
ちなみに、ポリミドテープは、 例えば 電子電気店で入手可能。
(本題とは関係ないが 電子電気店は意外にも、電子部品セットが充実している。抵抗セット、セラミックコンデンサセットあたりはお勧め。)

使ったミニBコネクタは、モレックス製だが、秋月で ヒロセ電気製が 3 個 200円で 入手可能


後記

一応作ってみたが、FT232RL を使う場合は、秋月のFT232RL USBシリアル変換モジュール 950円の方が良いかも知れない。
posted by すz at 19:29| Comment(0) | TrackBack(0) | 日記

2007年11月20日

オーディオ帯域オシロ(その3)

安価なヘッドセット用のUSBオーディオアダプタは、CM109とかを使っていてマイク入力しかなく、2ch 同時に取り込むことはできないようだ。

やはり、PCM2904/6 で自作というのが良いようだ。...といっても直流付近は扱えない。

いっそのこと、AT91SAM7S に 好きな ADC つなげて 2ch 同時に取り込みとかできないかググッたところ、ARM MP3/AAC Player - www.mikrocontroller.netなんてページを見つけた。

これは、MP3プレイヤーだが、AUDIO DAC として、TLV320AIC23Bを使っている。デジキーでも扱っていて、745円と安価なようだ。

データシートを見てみると、24bit 96kHz ステレオ DAC 以外に、24 bit 96kHz ステレオ ADC も持っている。デジタルのHPFは入っていないように思える。ひょっとしてどこかに書いてあるのかも知れないし、常識化していて書くまでもないことになっているのかも知れないとも思うが、直流が扱えると嬉しい。
後記:
ADC high-pass fileter に関する(親切な)説明はないが、Digital Audio Path Control レジスタの ADCHP で disable にできるようだ。

AT91SAM7SやAT32UC3B(AT91SAM7S の AVR32版(概要、日本語pdf))と組み合わせて MP3Player とか 高機能なUSBオーディオアダプタ=オーディオ帯域オシロを作るのも面白いかも知れない。

といっても、このクラスはお手軽にというわけにはいかないし、このブログでは扱わないのだ。でも、せっかく調べたので、報告ということで。

(後記)
TLV320AIC23Bは、HPF を Off にでき、普通のADC のように使えるかもしれないということで、がぜん気に入ってしまった。
0.65 mm ピッチの 28-TSSOPなので、安価な変換基板で DIPにもでき扱い易いし、安価。

さて、普通は、32bit のプロセッサで扱うものだと思うが、フル機能でなくても良いから AVR でお手軽に扱えないだろうか。

コントロールは、Port ベースの I2C (or SPI)で扱えるので問題ない。
TLV320AIC23Bは、master/slave 両方できる。ADC の場合は、同期が一度とれてしまえば、バイト単位で受信するだけでよい SPI スレーブを使うのが良いかもしれない。(CPUCLOCK > BCLK x 4 に注意)

SPI を持っているATmega88 系+FT245RLでなんとかなるかも知れない。

(後記2)

TLV320AIC23Bは、4種類のフォーマットを扱える。I2S もあるが、DSP モードというのがある。そして、DSP モードは、SPI そのものに思える。SPIスレーブで ADC データを受信するのは楽そうなのだが、DAC は無理。SPI マスターの方で実装すれば、DAC も扱えそう。

FT245RL で使うことを想定すると、ATtiny2313 では pin 数が足りないので、ATmega88 を使うことにする。クロックは一応 12MHz 水晶として検討してみる。

TLV320AIC23Bは、外部クロックも受け付けるので、ATmega88 の CLKOUT を 使う。同じクロックソースにすれば、タイミングを完全に合わせられる。TLV320IAIC23B は、クロック 12MHz or 24MHz のとき、USB モードというのを使用する。タイミングは、48ksps = 250clock , 44.1ksps = 272 clock。

SPI は CPUCLOCK/4 の 3MHz にすると、48ksps = 62.5 clock 。16bit x 2 でも 24bit x 2 でも 間に合う計算になる。AVR の処理も 24 clock で 1 バイトの処理をすればよいので、間に合うと思う。間に合わなければ 24MHz にすれば大丈夫だし、間に合えば 24MHz で 96ksps も OKということになる。

以上は、AVR 側の話。FT245RL がデータを切らさずに送受信できるかどうかというのは別になる。96ksps で 24bitx2 だと、ADC だけでも 567kbyte/sec 出せないといけない。仮想COMポートは無理だと思う。48ksps で 16bit x 2 なら 192 kbyte/sec で仮想COMポートでもいけるのではないかと思う。

(後記3)

基準電圧は、AVDD で決まる。AVDD/2 が仮想グラウンドになるし、3.3V のとき 入出力ともフルスイングで 1.0Vrms = 2.828 Vp-p だそうだ。
LINEIN は、内部に 32段階のプログラマブルゲインアンプがあり、+12.0db 〜 -34.5 db まで -1.5db 刻み。(デフォルトは 0db)

ブロック図をみるかぎり、AVDDは、基準電圧を決めているだけのように見える。2.7V〜3.6V ということになっているが、TL431を使った2.5Vでも良いのではないだろうか? キャリブレーションにも使えるし。ちなみに、どうせならTL431の高精度版? LT1009CLPとか使ったらどうだろう。
電源をどうするのが良いかついては、やはりよくわからない。Ultra Low-Noise とうたっている 2.85V レギュレータ SI91841DT-285でアナログ系全部供給した方が良いかも知れないし、すなおに 3.3V レギュレータ MCP1700-3302Eとかで全電源供給して、AVDD だけ LC フィルタ入れるだけでも良いのかも知れない。

(後記4)
ひょっとしたら、FT232RL + ATtiny2313でも扱えるかも知れない。pin の数は足りると思し、処理自体は単純だから 2K に入るかも知れない。USIで取り込みUSARTに直接書き込む処理を割り込み禁止で回せば、48ksps 16bit x 2 なら間に合うかも知れない。間に合わなければ 32ksps とかサンプリングレートを落とせばよいだろう。

FT232RL は、3Mbps に設定するが、その速度でコマンド処理はできないので、コマンドは、2バイトまでにしてハンドシェークする。このあたりは、AVR910とかと同じ考えで良さそう。送信は、3Mbps でほとんど連続して送ることになるはず。FT232RL 側でそれができないと難しいかも知れない。

(後記5)
できたら、AT90USB162 を使ったものを作りたいと思っているのだが、その前に ...FT245RL + ATmega48 で実験してみたいと思っている。SPI マスターにする場合、SPI より USART で代替したほうが性能が出せるのではないかという気がしている。それを実験してみたい。うまくいくなら、SERJTAG も作り直したい。
posted by すz at 19:29| Comment(4) | TrackBack(0) | 日記

2007年11月12日

オーディオ帯域オシロ(その2)

とりあえず、近所のPCパーツ屋を扱っている店で エレコムの USB-SAV51 を買ってみた。(それしかなかったので) 。買って気が付いたのだが、マイク入力しかないから ADC は 1ch のみ。

Windows XP では何の問題もなく使えそうだ。Linux は微妙。2.4.31 では、Mixer が使えないっぽいし、前に使ったプログラムで出力してみると 1ch でしか 出力できない。(ioctl がエラーになる。)。入力はプログラムも持っていないので、これから。

さて、どんな回路でどんなICなのか調査。

VID/PID 0x0d8c/0x000c -- C-Media CM109 だった。データシート(pdf)

マイク入力周りはこんな回路。



1.0uF を介して、マイク入力端子に直接接続されている。内部で +20db(10倍) のアンプを通りさらに +22.5〜0db(16ステップ)のPGAを通って 16bit ADC(44kHz/44.1kHz サンプリング)に接続される。
VREF は、2.25V となっている。VREF が ADCの基準電圧そのものかどうか分からないが、そうだとすれば、入力範囲は最大で 0.225V P-P 最小なら 16.8 mV P-P ということになる。

出力の方は、220uF のコンデンサを通して、ヘッドホーン出力に接続されていた。外付けアンプ用に VREF をボルテージフォワードした出力 LOBS もある。これを 仮想グラウンドにしてアンプを接続すればよいらしい。

入力特性もデータシートにある。マイク入力用にチューニングされているのかフラットではない。微妙に右肩上がり。HPF が入っているらしく、200 Hz 以下になると だんだん落ちて 25Hz あたりで -3db になる。

とりあえず波形がどんな形なのか見るだけなら、これでも十分かも知れない。

ところで、データシートを見ていたら、CM109は結構いろいろな機能を持っていることに気が付いた。ひとつは、I2C スレーブ機能。I2C マスター機能があるコントローラと、CM109 (+USBホスト)間で通信できる。あと 5x4 のキーバッド。興味を引いたが単品では入手できそうにないし、0.5mm ピッチなので、ピンを引き出すのも面倒 -- とりあえず使ってみるのはあきらめる。ただプロトコルの参考にはなるかも知れない。
posted by すz at 16:30| Comment(0) | TrackBack(0) | 日記

2007年11月09日

PCM2906 オーディオ帯域オシロ

電波時計や各種センサなどアナログ系の電子工作をしていると、波形を見たくなる。AVR は 8 bit なら 80kHz でサンプリングできて波形入力は精度が低いものの一応できるのだが、それを外部に出力するとなるとメモリが少なかったりして面倒なことになる。そのうえソフトも自分で作らないといけないという問題がある。

PCのオーディオ入力を使うと、ハンディ・オシロスコープをはじめとするソフトが使え、高精度でしかも 2ch 同時サンプリングができる。
安くなった ヘッドセット用のUSBオーディオデバイス( HAMU02とか)を使ってマイク入力の部分を改造して、測定用に使えるものにできるかも知れない。

ただどんなチップを使いどんな回路になっているか分からないので、いっそのこと 1000円前後で手にはいる USB オーディオチップを使って自作を考えてみようと思う。

PCM2906/PCM2904 は、デジキーで入手可能。 S/PDIF は使わないので、PCM2904 でも OK。0.65 mm ピッチだが、変換基板がアイテムラボ秋月で入手できるから、手配線でもなんとかなりそうだ。

データシートを見てみると、基準電圧そのものはないようだ。その代わり、内部で使用している仮想グラウンドが出力されていて(VCOM)、ADC/DAC の電源を分離できるようになっている(VCCCI: 3.3V?レギュレータ出力なので、それ以上の電圧を入力する)。

入力範囲は、1/2 VCCCI(= VCOM) を中心にして、± 0.3 x VCCCI 。VCCCI = 3.6V とすれば、± 1.08V 。反転増幅器を使い、たとえばゲインを 1/5 にすれば VCOM を中心に ± 5.4V が入力できるから、-3.6V〜7.2Vが入力範囲。 そのときの分解能は、0.165 mV これがこのまま精度というわけではないが、ゲイン切り替えを付けなくても十分だと思う。また、交流結合のコンデンサは外して、直流結合にする。
ちなみに、反転増幅器が1つのみだと、反転された値が PC への入力になる。その上 VCOM 分 オフセットされているので注意。
後記:IC内部にHPFが内蔵されていて、直流成分はカットされるとのこと。交流結合のコンデンサは外す意味はない。入力オペアンプの入力にも交流結合のコンデンサを入れて単に 10.8V P-P としたほうが良いかもしれない。

ぐぐって参考になりそうな自作例も発見できた。→ PCM2906, USBオーディオ(2) LPFの効果

この回路から、まず DAC 部分は全部外してしまう。

LPF が必要になった理由はアナログ電源のような気がする。データシートのサンプル回路では、VCOM に 10uF を入れることになっているが、なにも入っていない。VCCCI の方も 10uF と書いてあるが、1uF になっている。

VCCCI に入るアナログ電源部分は、PQ20RX11を使ったらどうか。低ドロップ型なので、3.8V まで上げても問題ないし、電流を流せる。温度特性は、25℃→75℃で 基準電圧が -5mV ぐらい下がる(-1.3%)。あと USB 側にある LCフィルタを VCCCI 側に移動したら良いのではないか。


回路図案(一部)


ここまで考察してきて、 HAMU02とかの回路がどうなっているか気になってきた。PCM2904そのものを使っていたとしてもおかしくない。違うチップだとしても DAC 側にオペアンプが入っていれば、VCOM 相当はあるはず。だとすれば、入力側に反転増幅器を入れるのも難しくないように思う。
posted by すz at 18:49| Comment(2) | TrackBack(0) | 日記

2007年11月05日

電波時計

いまのところアイディアのみ。

PSoCをつかったワンチップ電波時計の製作なんてものがある。なるほど PSoC を使えば ほとんど外付け回路なしで作れるのかも知れない。

では、AVR で、できるだけ外付け回路なしで済ませるには、どうしたらよいのだろうと考えてみた。

PC用では、Soft66 なる ソフトラジオがある。CQ出版の付録にも付いたので知っている人もいるだろう。それをまねすることを考える。



アナログスイッチで アンテナ出力を 39 kHz の周波数で、IN/VGND , VGND/IN になるよう切り替える。2つの出力を 差動入力 ADC で受けると... IN / -IN が入力になる。この入力は 40kHz (+ 38kHz)を 1kHz に周波数変換したものになっている。差動入力なので、ATtiny861 なら ゲインも一応 4 段階に切り替えられる。

5 kHz ぐらいで データを取り込んでデジタル処理してやれば、電波時計の 1/0 の信号ぐらいはなんとかなるに違いない。
ちなみに、オペアンプを2個追加して、ATmega88を使うという手もある。1 個は 差動増幅器。もう一個は ゲイン切り替えつき増幅に使う。ゲインの切り替えはあまった 4066 で 4段階が可能。
例:

追記:
この差動増幅器は万能ではない。他の回路で使う場合は、電子回路の豆知識がわかりやすいので参照のこと。

Soft66 では、RFアンプがなく、アンテナ入力を直接アナログスイッチに入力している。高周波の増幅をしないで、オペアンプだけで済ますというのが Soft66 のキモのひとつではあるが、はたしてこれで大丈夫なのか?という不安がある。ただ、アンプを付ければ済む話なので、ダメと分かってから考えればよいだろう。

アナログスイッチの ON抵抗は、ものによって違うが 200〜300 Ωほどである。これが 初段のアンプの入力についていると思えばよい。
増幅率は、5.1K/(200〜300) なので、17〜25倍程度。この程度で十分なのか?という疑問もある。PC の 16bit とか 24bit の ADC ならば、ダイナミックレンジが広いので問題ないのかも知れない。ATtiny861 だと x8,x20,x32 の増幅が内部でできるのでたぶん大丈夫だとは思うが、5.1kHz を 10kΩとかにした方がよいかもしれない。これだと cut-off 周波数も 1kHz になる。

あと、これがうまくいくようであれば、AM ラジオにも応用可能だと思う。PWM で 1MHz 前後の周波数は精度は悪いが発振できる。そして、どれぐらいずれているか分かっているので、デジタル処理の方で補正できる。ただ、40kHz に変換するとしても、それを AVR でデジタル処理をするのは相当に厳しそう。

後記:

こういう電子工作をしていると、オシロスコープで波形を見たくなる。PC の オーディオ入力を利用したものはないかと思い、ぐぐってみたらHandyOscillo というのがあることがわかった。... →PCM2906 オーディオ帯域オシロに移動
posted by すz at 23:40| Comment(0) | TrackBack(0) | 日記