2009年12月19日

USB電池BOX EP-024CHA

100均で USB コネクタの電池BOX (単三 x2)があるのを知り、入手しようと思っている。型番は EP-024CHA 。JR7CWK'sぶろぐ で詳しく紹介されている。販売店はシルクだそうだが、通販で扱っている店もあるようだ。

使用 IC は、BL8530 。aitendo で 3.0V タイプを扱っている。HT77xxA と同じようなもの。ピン互換性はあるが、周波数が違うため、最適なインダクタも違う。

自己消費が少ない(負荷なしで 12 uA)ので電源スイッチなしでも問題なさそうだし、完全に空になるまで動作する(起動電圧は、0.8-0.9 V)から 一次電池で使うのに向いている。

    LX の電流制限が 0.7A なので、肝心の 携帯充電に向いているかどうかは分からない。500mA 流すのは無理だと思う。自作機器のバッテリーとかにするのなら良さそう。

ただ 二次電池を使うのはどうだろう。HT77xxA も同じだが、過放電が怖い。なにか対策は出来ないのだろうか?

リセットICを使う方法(まとめ)


必要なもの
1) 1.8V以下 で 出力を H にする (Active-High) 低消費電流(数 uA以下)の リセットIC

2) 低電圧で動作する Pch MOSFET


リセットIC の出力を MOSFET の GATE に接続する。MOSFET が ON のときは、数十 mΩ の抵抗が 入っているのと等価。OFF になった場合 HI-Z 。低消費電流のリセットIC を選べば この状態での電池の減りは気にしなくて良くなる。(自己放電の方が多そう)

(充電とかで) 高い電圧を 入力すると FET 内のダイオードを通して電流が流れる。(ある程度充電されて) 電池の電圧が 1.8+α になると ON になる。

リセットICは入手が難しい。1個単位で買えるものは限られる。特に Active-High のものは 品種が少ないので、さらに入手が難しい。
Active-Low なら GND 側に Nch MOSFET を付けることになる。

必要なもの2
1) 1.8V以下 で 出力を L にする (Active-Low) 低消費電流(数 uA以下)の リセットIC

2) 低電圧で動作する Nch MOSFET




ちなみに、リポ電池も、 2.85 - 3.0V のリセットIC を使えば同じように過放電保護が出来そう。

ちなみに、TrustFire Protected 10440の場合、こんな保護機能が入っている。

    - With integrated PCB Protection
    - Over current protection current: 4A
    - Over current protection voltage: 0.2V
    - Over charging protection voltage: 4.25V +/- 25mV
    - Over discharging protection voltage: 2.5V +/- 50mV

過放電保護以外に過充電保護と過電流保護があるようだ。過電流を流すと危険なので、保護することは重要かも知れない。MOSFET の性能で電流を流せないだけという気もちょっとする。

意外だったのは、過放電保護が 2.5V なこと -- 2.85V を死守しないといけないかと思っていた。なら、リポ電池で、2.7V のNCP300HSN27Tも使えそう。

AVRを使う方法



リセットICは入手が難しいし 電圧毎に用意しないといけない。ADC 付きの AVRで、低消費電流になるように使えば、良いのでは?

とは思う。... だが、AVR の内蔵基準電圧は、精度が悪い ± 10% ぐらい。

外付けの基準電圧を付けるにしても結構高い。しかも 最低電圧も結構あり 1.8V で動くようなものは 入手できない。たとえば MAX6001の最低電圧は、2.5V 。

レギュレータを探してみると ... XC6221の 1.5V のものが安くて良さそう。消費電流も 25uA と割と少ない。SHUTDOWN も出来るから、さらに減らすこともできる。

ちなみに、2.3V 以上で良いなら MCP1700が良さそう。安いし 精度も高く、さらに 消費電流が 1.6 uA 。

結局のところ、基準電圧も入手が難しいので リセットIC で 過放電保護回路を作って完結させてしまうのが良さそう。

充電機能も付けるには



MyCharger Stick のような製品がある。こういった機能を付けるにはどうしたら良いのだろう。

ここでは、2 cell NiMH だけを考えることにする。

最も簡単そうなのは、電流制限付きの 2.8V 定電圧回路。MC34063A とかで 作れることは作れる。

  • ピン 6-7 間 の抵抗値で ピーク電流を 制限する。ピーク電流 /2 が 最大出力電流。300 mV だから、0.33 Ωで 1A 。ただし精度はあまり高くない。± 20% ぐらい?
  • ピン 5 が FB (1.25V) 精度は ± 2% (25℃)
  • インダクタのインダクタンスは、電流が大きいほど、入力電圧と出力電圧の差が小さいほど、小さな値にできる。

  • セリアで売っている 片山利器製USBポート付シガーソケット専用DC充電器 をバラして インダタクタと一緒に流用するのもアリかも知れない。

    まず、電流検出抵抗(R1)が、0.15Ω なので、0.3 Ωに変更。これで Ipk が 1.0A (最大出力 500mA) に制限できる。インダクタは 変更する必要はないが、計算してみると 5V 入力の場合 22 uH まで小さくできる。... というか小さくしないと (制限値まで)電流を流せないかも。

    出力電圧の調整は難しい。精度のよいテスターで 小負荷で 2.8V になるように 調整しないといけないのはもちろんだが、温度が変化しても 2.8V を超えないようにしないといけない。

    AVR とかで制御する場合は、FB を H レベルにすることで 出力を止める。定電流駆動だけ使えば良いから 2.8V きっかりにこだわらなくても良さそう。


2.8V が上限になるようにちゃんと調整さえできれば、過充電の心配はしなくて良さそう。ただし、電池が変になっていないという前提があるし、充電完了が分からないという問題もある。

AVR を使って PWM で 充電回路を作る方法もあるが、管理だけするのも アリだと思う。充電回路などは危険なので 確実に作れないとマズい。

AVR での処理は、

  • 充電時間の上限の管理。
  • (できたら)電池の温度の管理。
  • 定期的に充電を止めて、電圧の測定。
    正確に電圧を測定して、ある電圧になったら完了とかで良いのではないかと思う。もっとちゃんと作るには、たとえば MCP73831/2 のデータシート (pdf/日本語)のアルゴリズムを参考にしたら良いと思う。
    この場合は 基準電圧として TL431 などを使っても 問題ないと思う。


ところで、AVR を使うなら やはり AVR で充電したいような気もする。どうするのが良いのか考えておこう。

まず、定電流の充電。

Pch MOSFET 22uH
5V 1.8V 〜 2.8V
Vin --------+- S D --+---- L ----+--- Vout
R1 G | |
PWM ----R2 -+-----+ D↑ C
| |
--+-- --+---
Vf = 0.4V


とりあえずこんな回路を考える。インダクタは 22uH を使うことを前提にしてしまう。
電圧の範囲も 入力 5V 、出力 1.8V 〜 2.8V を前提にしてしまう。
この条件で L に流す最大電流を 1A にするには、どうするのか?

MC34064A のデータシートを見ていると


    Ton : Toff = Vout + Vf : Vin - Vsat - Vout

という関係になるらしい。
Vsat = 0 としてあてはめると

    Ton : Toff = 1.8 + 0.4 : 5.0 - 1.8 = 2.2 : 3.2
    = 2.8 + 0.4 : 5.0 - 2.8 = 3.2 : 2.2

あと、

    Ton(max) = L x Ipk / (Vin - Vsat - Vout)

という関係もある。L = 22uH , Ipk = 1A とすると、

Ton(max) = 22 / 3.2 (uS) = 6.9 (uS) (Vout = 1.8V)
(Ton + Toff) = 16.9 (us) (59.3 kHz)
Ton(max) = 22 / 2.2 (uS) = 10 (uS) (Vout = 2.8V)
(Ton + Toff) = 16.9 (us) (59.3 kHz)

たとえば、8MHz で動かしていれば 1周期 135 クロック。Vout によって L 時間 55 〜 80 クロックで変化させる。
    注意)これはあくまで目安。実際のL が 22 uH より小さい場合 1A より電流が流れてしまうかも知れない。誤差を考慮しないといけない。

こんな感じの処理で良いが、時々充電を止めて 電圧をちゃんと測定する前提なら、もっと 単純化しても良さそう。

ところで、充電回路 だが、電源につながっていない場合、Pch MOSFET のボディダイオードを通して バッテリーから電流が流れ込む。逆流防止用のダイオードが別に必要。


ちょっと検討してみたのだが、逆流防止用のダイオードを入れるのなら、最初からトランジスタにした方が良いような気がしてきた。
あと、3.3V レギュレータの S-812C33AY-B-G を 基準電圧に使うのが安くて良いかも。

    2SA1160 は、TO-92形の背が高いタイプ。耐圧は10V しかないが パルスで -4A 流せる。hFE も大きめ。似たタイプだと TO-92 の 2SA1300 がある。マルツで扱っている。ちなみにコンプリは、2SC2500(2SA1160),2SC3279(2SA1300)

    この回路の通りだと、電源につながっていないときに、バッテリー から ADC3 を通じて AVRに電流が流れ込む、ちょっとまずい。ADC3 と BAT(+) の間に 100K Ωを入れるのが良さそう。


(以下 発散しすぎなメモ)


前にも書いたのだが、Pch MOS FET を使って スイッチを作り、1.8V 以上でないと On にしないという保護回路を付ける。自作するなら、ADC 付きの マイクロコントローラがあれば簡単。電池の電圧を (1秒に1回とか)ときどき測定して 1.8V 以下になったら FET を OFF にする。待機しているときは、電力を消費しないように工夫する。
    補足:
    ディスクリート で組むのは難しい。原理は簡単でも、低消費電力の基準電圧とか入手性が悪い。ときどきしか 基準電圧を ON にしないようにして、平均の消費電力を減らしたほうが自作には向いているのだ。

この程度の処理なら、Tiny13(A) で十分。秋月で120円だし入手性も問題ない。

ただ、低電圧で駆動できる Pch MOS FET の入手が難しい。秋月なら IRLML6402がなんとか使えるかも知れない。ただし、09/12/19 現在は在庫切れ。デジキーならPMV65XPとかが買えるが...

具体的に検討してみよう。まず、コントローラを Tiny13A と決める。AVR の VCC は電池に直結。Pch FET は、470k Ωで プルアップして AVR の PORT につなぐ。

    PORT を 出力にして L にすると、電源 ON 。このとき 2.4V なら プルアップだけで 5uA 消費する。BL8530 が 12 uA だから馬鹿にできない。... もう少し大きな値にした方が良いかも。

さて、あとは 電池電圧を測定する回路。1.1V 基準電圧使うとして、VCC を 100K , 33K ぐらいで 分圧して ADC に入力することにする。... 抵抗値はあまり大きくできない。これでも大きすぎかも知れないぐらい。常時接続はできないので VCC ではなく、PORT に接続することにする。PORT を H にしたときだけ 測定可能ということになる。

この基本回路で 3 pin 使った。あと 2 pin 使える。

付けるなら、スイッチ + LED 。

    __
    VCC --- R --- LED -+-o o--- GND
    |
    PORT

こうかな。SW 押しても LED が点灯しなければ 本当に電池がない。SW の 長押しで 電源 On/Off 。SW 付けない場合もあるし、初期状態は On 。

On にした後、数秒は LED を付ける。あと Off にしたら やはり数秒点滅。

あと 1pin あるが、CE 付きの昇圧 IC 用に On にしたら H にするようにしたら良いと思う。CE = L にしても 昇圧を止めて 電池電圧 - αの出力にするだけだが、Pch MOS FET の代替としての意味は多少あるだろう。

    HT77XX や BL8530 でも 5pin タイプのものがあり、それには CE が付いている。BL8530 では、0.9V 以上にならないと On にしないようだ。HT77XX では 2V と書いてある。... がこんなところで基準電圧を使うわけでなさそうだから鵜呑みには出来ない。

    aitendo で 扱っている PT1301 はピン配置も周波数も全然違うのだが、LX に 最大 1.5A も流す。これで USB電池 BOX を作れば、5V 500mA (以上の)の出力にできるかも。こいつにも CE は付いている。ただ、負荷なしの消費電流は若干多く 56 uA (+ FB 用分圧抵抗分)


回路はこんなもの。あとはプログラム。いかに電力を削減できるかやってみるのは面白そう。

ちなみに、BOD は使わない方が良い。使うと 内部基準電源が使われて消費電流が 20uA 弱増える。WDT(+ 4uA) のがマシ。AVR 全体として平均 10uA なら上出来で、50uA ぐらいを取り敢えずは目指せば良いと思う。

さらに書いておくと、電池BOXの EP-024CHA は、 USB 側に抵抗が入っている。USBの Battery Charging v1.1 規格に沿って いるのだと思う。(pdfのzip) 。ちゃんと理解できていないが、結果として 100 uA ほどの消費電流になっているらしい。対応機器を充電するのでなければ、取ってしまった方が待機時の電流消費が減って嬉しいかも。

EP-024CHA の改造ネタはこんなところ。いずれ挑戦したい。

追記:

いろいろ書いたのだが、デジキーで NCP303LSN16T1というのを見つけた。

NCP303 は、いわゆるリセットIC で消費電流が 0.4 uA と非常に小さい。ある電圧以下になると、オープンドレイン出力を On にする。だが、逆の論理の出力も持っていて、ある電圧以下になると、H を出力できる。この型番は、1.6v 以下を検出するものだが、1.8V の NCP303LSN18T1などもある。LSN の部分が HSN になると 論理が逆になる。NCP300-302 もあってなかなかヤヤコシイ。

それはともかく、これに Pch MOS FET を直結するだけで バッテリーの 過放電保護ができそう。PMV65XPと合わせて買うと良いかも。

まぁ、AVR で組めば応用ができるので、意味がなくなったとまでは思わない。... だがしかし。

追記: 同期型 昇圧 IC を探してみた。

NCP303 を買うとしたら、ついでに 同期型 昇圧 IC というのも買えば、外付けの Pch MOS FET なしでも off に出来て嬉しいのではないか? ..と思って探してみたら、SC120SKTRT というのが見つかった。一個 68円と安い上に、外付けのショットキーバリアダイオードも不要。3.3V 固定のモードと 1.8V 〜 5.0V 可変のモードを持っていて応用範囲も広い。

最大入力電流は、1.2A だそうだ。インダクタは、4.7hH 。2.4V → 5V 昇圧で 200mA まで 効率 80% 。300mA ぐらいが限界のような感じ。

    なんか勘違いしていたかも。同期型でも off のとき 電池の電圧分は出力に流れるはず。

さらにさらに、これに合うインダクタを探してみたら... 太陽誘電の CB2518T4R7MRとか、CB2518T4R7M とかが見つかった。10個で 170円! ... デジキーってインダクタは高いものばかりだと思っていた。CB2518T4R7MR は、4.7 uH 1.2A 、Rなしは、1.1A 。

CB2518T で検索すると いろいろ出てくる。あと安そうなのは、CBC3225T の 10個 305円 とか NRG4026TNR4018T の 10個 430 円とか。

ここから、ちょっと脱線して、デジキーついでメモ

CB2518T220K は、22uH , max 580mA 。aitendo で扱っている XZ5121は、LX が 300mA のようなので、十分使えそう。デジキーで買える同じピン割り当ての AP5724(78円) は、750 mA 。...なのだが推奨インダクタに、22uH , 510mA のものがあるので 使えるはず。BL8530 も 最大 700mA で、インダクタンスが 10uH 〜 100uH (標準 27uH)と なっているので大丈夫そう。

    XZ521, AP5724, BL8530 , PT1301 は LX の電流を検出して制御している。だから最大絶対定格は関係なく制限値が重要。インダクタに流れる電流はノコギリ状なので、平均値は制限値 より小さい。インダクタの最大絶対定格より、制限値が 1-2 割大きくても問題ないらしい。

HT77xxA は周波数が低いから 22uH では小さすぎる。... ただし使えないとまでは行かないようだ。CB2518T470K だと 47uH, 420 mA で、ちょっと不安。NRG4026T470M の 47uH, 650mA ぐらいが良さそう。

    HT77xx は、LX の電流制限をしていないように見える。HT77xxA では、その機能が入り周波数が、115kHz → 200kHz になった。ただ、電流の制限値が書かれていない。

まとめると

    4.7uH 10uH 22uH 47uH
    CB2518T 1.1A 0.82A 0.51A 0.42A
    CB2518T(R) 1.2A x x x
    NRG4026T 1.6A 1.3A 0.9A 0.65A

    SC120(1.2MHz,1.2A)
    PT1301E(500kHz,1.5A)
    XZ5121(1MHz, 0.3A)
    AP5724(1.2MHz, 0.75A)
    BL8530(350kHz, 0.7A)
    HT77xxA(200kHz, ?)
    HT77xx(115kHz,-)

    注) XZ5121,AP5724 が高い周波数にもかかわらず、高インダクタンスなのは、高電圧向け(LED 6直列)のため。電圧を低くして電流を流す場合は 10uH, 4.7uH とかにすべきだと思う。
    ...たぶん。

こんな感じか。

色々調べてみて、SC120が気に入った。安いし、ダイオードもいらない。過放電保護を入れる場合でも Pch MOSFET がいらない。 電圧は可変にできるが 3.3V で良いなら分圧抵抗もいらない。同期式で効率も良いし。マッチするインダクタも安そうだし。

ちょっと SC120 をどう使うか検討してみよう。

1)LED ライトとか昇圧付き電池BOXの過放電保護

2セルの NiMH 前提として、1.8v 以下になったら自動的に OFF

NCP300LSN18T1/NCP302LSN18T1 の Reset Output を EN に接続。

    他の CE 付きの昇圧 IC の場合も同じ。Pch MOS FET をつなぐなら、HSN にする。

    リチウムイオン用に Pch MOS FET をつなぐ ならNCP300HSN30T1 ?

    NCP301/NCP303は、オープンドレインなので、Reset Output をプルアップする。(抵抗値は、1MΩ とか)


2)AVR の電源として使う


    __
    BAT+ ---------o o----+--- C ---GND
    |
    +--- R -- GND
    |
    PORT(ADC) --+-- EN
    R 1M
    C 1u

こうかな?

ボタンを押すと 電源が入る。1 秒以内に勝手に Off になるので
起動したら とりあえず PORT を pull-up 。

電源を切る場合は、HI-Z にすればしばらくして off になる。

ボタンのセンスは ADC 。通常は ほぼ VCC レベルだが、ボタンを押せば BAT+ まで落ちる。

過放電保護をしたければ、AVR で処理を入れれば良い。


    他の CE 付きの昇圧 IC の場合は、電源側に Pch MOSFET を入れて...

    __
    GND ---------o o----+--- C ---BAT +
    |
    +--- R -- BAT +
    |
    PORT ----+-- GATE

    PORT --------- EN(CE)
    R 1M
    C 1u

    こうかな? ... ちょっと適当。電源 On はできるけど、センスはできない。昇圧 On はPORT でするか、常に On。


さらに ...バッテリーの過放電保護ができる 昇圧 IC を探してみた。

見つけたのは、NCP1421。1 個 198 円もするのだが、バッテリーの電圧が ある電圧以下だと OFF にできる機能付き。これはちゃんと OUT を切り離す。あと1.2V ±1.5% 電圧リファレンス出力もある。
nch は、1.5A 制限で 1.2 MHz 。ただ 0.65mm ピッチ 8pin で気軽に使えないかも。


    ちなみに電圧リファレンスも探してみたが、MAX6006(A/B) (1.25V), とか TLV431(A/B) (1.24V) があるものの 100円とか それ程安くない。消費電流も 55uA とか常に On するにはちょっと多い。
    レギュレータの方が安いぐらい。1.2V なら MCP1700T-1202E とか NCP585HSN12T1G とか。

    そういえば、SOT-23-5 タイプのレギュレータで BYPASS 端子があるものがある。調べてみると、内部リファレンス電圧がそのまま出力されている。電圧は定義されていないが、実測して使えば使えそうな気がする。秋月だと、SI91841DT-285 2.85V ±1.5% 5個 100円。あと、TAR5SB33 3.3V ±3% 10個 280円とか TAR5SB50 5.0V ±3% 10個 300円 とかは NOISE と書いてあるけど 同じみたい。

    デジキーで探すと、TC1015-3.3V 3.3V 100mA ±0.5% 10 個 360円 とかもある。(他に TC1014,TC1185 も)。ただし、こっちは 470PF 標準で、上のチップの 1/20 の容量しか付けないので、リファレンス電圧の出力電流も一桁低そう。AVR の AREF に付けても大丈夫なのか不明。

    規格外の使い方なので、危険ではある。特に VCC として利用した上で BYPASS を AVR の AREF に接続する場合、設定を間違えるとレギュレータがスルーになって回路全体がダメージを受けるかも知れない。注意が必要。
posted by すz at 14:30| Comment(3) | TrackBack(0) | 日記

2009年11月18日

AVRに関する雑記

いまは、作った基板で遊ぶのに忙しく、当面他のものには手を出さないつもりなのだが、ちょっとメモ。

P板.com関係



P板.com ではアナウンスしていないのだが、アマゾンで、【P板.com】オーダーメイドプリント基板(120.0 × 120.0 mm寸法)ワークサイズパッケージ!という製品がある。

ゆきさんのつれづれ日記を通してで知ったわけだが、基板を作ったときのアンケートで、”通常価格では無理。キャンペーンに期待している。”みたいなことを書いたら、教えてくれたので、秘密にしている .. というほどではないみたい。

いまの基板はバグがあるので、一通り使ったら、ちゃんとしたのに作り直したい。面付けは ルータなら 3面までだが、Vカットなら 5 本なので、1/2 C 基板に統一すれば 面数は稼げるような気がする。

そのときは是非これで作りたい。

XMEGA



一年以上前に XMEGA はそろそろかなんて記事を書いたのだが、全然買えなかった。

最近気が付いたのだが、ぼちぼち A3/A4 が買えるようになってきた。メモを ↑の記事に追記していこうと思う。

作った基板が片付いたら次は XMEGA で なにか作りたい。

0.5 mm ピッチしかも 100 pin の A1 は私には無理。0.8mm ピッチの A3 か A4を使うつもり。

HERO'S Download にある、AVRxmega.ZIPとかもぼちぼち見ているのだが、zip に含まれる AVR1003.pdf を見ると、クロック周りは(も)格段に進化しているようだ。

内部 RC 発振器には、2MHz と 32MHz があるが、PLL で 1-31 倍にできるらしい。そして 内部 RC 発振器 に自動校正機能(DFLL) があって、32.768 KHz の RTC 用 CLOCK に同期することが出来るらしい。

32MHz までが仕様だが 50MHz まで動いたという情報もあるし、結構楽しめそう。

AT90USB162



dfu-programmer (0.5.2) をビルドしたは良いものの、ブートローダを 消去してしまったりするのが怖くて 使えてなかった。

どうも プログラムで、シグネチャーとかヒューズとかが読めるらしいので、まずは確認。


    uint8_t read_fuse(uint16_t addr) {
    SPMCSR |= (1<<SPMEN) | (1<<BLBSET);
    return __LPM(addr);
    }

    uint8_t read_signature(uint16_t addr) {
    SPMCSR |= (1<<SPMEN) | (1<<SIGRD);
    return __LPM(addr);
    }

    :
    :

    usbcdc_put_pstr(PSTR("signature:"));
    usbcdc_put_hex(read_signature(0));
    usbcdc_putc(' ');
    usbcdc_put_hex(read_signature(2));
    usbcdc_putc(' ');
    usbcdc_put_hex(read_signature(4));
    usbcdc_putc(' ');
    usbcdc_put_hex(read_signature(1)); // CALIB
    usbcdc_put_pstr(PSTR("\r\n"));

    usbcdc_put_pstr(PSTR("fuses:"));
    usbcdc_put_hex(read_fuse(1)); // Lock bit
    usbcdc_putc(' ');
    usbcdc_put_hex(read_fuse(0)); // FUSE Lower
    usbcdc_putc(' ');
    usbcdc_put_hex(read_fuse(3)); // FUSE upper
    usbcdc_putc(' ');
    usbcdc_put_hex(read_fuse(2)); // FUSE ext
    usbcdc_put_pstr(PSTR("\r\n"));


こんなコードでちゃんと読めた。データシート通りだった。

それはともかく、このページを見て

    # dfu-programmer at90usb162 erase
    # dfu-programmer at90usb162 flash test5.hex


とすることで問題なく書けた。

シリアルフラッシュ



A25L080の使い方の記事で書いたが、ミニフォトフレームからの取り外し品の A25L080 と AT26DF081A しか考えてなかったが、M25P80 とかも 同じコマンド体系だった。

ただし、4KB 消去 (0x20) コマンド と シグネチャーを読み出す RDID (0x9f) コマンドがない。

4KB 単位の消去をしても FAT ではうまく使えないみたいだし、64KB 単位の消去に変更することにして、RDID で 判らなかったら RES コマンドを使うようにすれば、まぁサポートできそう。

posted by すz at 20:55| Comment(0) | TrackBack(0) | 日記

2009年10月06日

NEWランチャーライト



普段行かない 100円ショップに立ち寄ってみたら、NEWランチャーライト という 3灯 LED ライトに目が留まった。

アルミ削り出しの ケースで 底はネジ込み式で ゴムの電源ボタンが付いている。電池は 単四 x 3。

とても 100円のものとは思えないので、買ってみた。

後でググると 旧製品の LAUNCHER LIGHT が有名で、その 改良版らしい。気の迷いさんところで両方の紹介があった。

パッケージには、40時間なんて書いてあるが、平均 100mA 流すとしたら 10時間も持たないはず。40時間後なら相当暗くなるのではないかと思える。

さて電子工作ネタとしては、これを素材にどんな工作ができるだろう?

1)秋月の OSPW5111A-Z3などで明るくする。

まぁ、無難そうな改造。

    あまり詳しくないのだが、日亜の NSPW500DS(pdf) とか NSPW500GS-K1(pdf) とか が良さそう。

    あと、pdf を見ていると、並列で使う場合でも 個別に電流制限抵抗を入れたほうが良いらしい。それだけ Vf がばらつくということ。といっても抵抗値が大きい場合で、ギリギリの場合はどうしたってばらつく。

      10 個とか買って Vf で選別とかした方が良いかも。

      定電流回路は、2SC1815 2個と 10K の抵抗。あと、33 Ω (+ 5V 電源) で 作れる。

      で、LED の両端の電圧を測って 電圧の近いグループを選ぶ。



2)秋月の OSPW5161Pで明るくする。

この LED は、OSPW5111A-Z3 などとはちょっと違う。まず、広角60°。あと 定格 100mA と 電流が流せる。Vf も 3.6V と高め。足の形状も放熱のためかちょっと違う。単純には置き換えられないものの、抵抗を低い値のものにして ( or 場合によっては外して直結 ) 、NiMH 専用にするとかすると面白いかも。

注意点としては、放熱には気をつけなければならない。劣化が早くなる。足が太くなっているのはカソードなので、すずめっき線でぐるぐる巻いてケースに接触させるとか?

Vf はばらつきがあるらしい。抵抗値は、個別に調整しないといけない。

3)昇圧 DC-DC コンバータを付けて、電池 2 個(または 1 個)で、一定の明るさになるようにする。

電池を直接つなげると、電池の消耗にしたがって 暗くなる。それはそれで電池の交換の時期が分かって良いのだが、やはり電池を最後まで使えるようにしたい。

一番良いのは、高めの電圧で 直列にし定電流駆動。だが、そうなると回路は 電池カートリッジ側に仕込むのではなく、LED 側に付けるなどしないといけない。

やはり、HT7737 などで 定電圧駆動して、抵抗で調節が簡単で良さそう。

    ちょっと OSPW5161P 1 灯 + HT7733 で試してみた。(コイルは 350mA 47uH)。出力と LED を直結。3.3V だと、かなり明るく光った。次に 出力と HT7733 の VCC の間に ダイオードを入れて電圧を 3.7V ぐらいに上げてみたところ、さらに明るく。OSPW5161P の足はしばらくすると 結構熱くなってくる。最後に HT7733 の VCC を外してみた ... これでも うっすらと点灯。...

    1灯なら HT7733 + (350mA のコイル) でも余裕。3灯はさすがに無理そう。2並列、3並列にするしかないか。

    OSPW5111A-Z3 は今手元にないが、ATmega328P とともに購入中。こちらは たぶん 3 灯いける。電圧は 3.3V か むしろ落とす。
 
4)昇圧 DC-DC コンバータを付け、さらに Tiny13 などで PWM 駆動。

2本駆動にすると、単四のスペースが空く。10mmφ x 5cm 弱 ぐらいで結構ある。秋月の 16ホールユニバーサル基板なら 4連 が入る。ただし高さが厳しい。IC ソケットは無理そう。(基板を使わないならなんとかなる)

ちょっと実装を工夫すれば、この程度あれば楽勝なはず。うまくすればタクトスイッチ 1 個ぐらいならなんとかなるかも。

あるいは、充電回路を仕込むとか。

ライトとして使うのなら、この程度しか思いつかない。

それ以外だと、防水加工してみるとか。部品を取り出して ケースを本当にケースとして使うとか.. 。

    18 mmφ x 5cm の過放電保護回路つき 18500 リチウムイオン電池 を入れるという改造?があるらしい。若干細いので、100均で買えるアルミヘアカーラー (20mmφ) をスリーブとして使うと良いらしい。

    なるほど、過放電保護回路つき というのは、ライトに最適なのか。HT7733 だと ほぼ 残 0 になるまで光ってしまうから 一次電池専用。 過放電保護回路を自分で組むのは難しそうだから、二次電池用なら、ATtiny13 あたりで PWM かなあ。

    ググってみたら、気の迷いさんとこのページが見つかった。ただ、常時 ON で低電圧のとき出力だけ On/Offという回路にしないといけないので、出力 ON/OFF にかからず、自己消費が 数 uA とかにするのには使えなさそう。


追記:OSPW5111A-Z3 の Vf を測定してみた。



定電流回路を組み、10 個の Vf を測定した。電流は、18.7 mA 。
一旦測定して、並べ替えたのを再度測定しているので、絶対値はともかく相対的にはかなり信用できそう。


    2.990
    3.000

    3.024
    3.028
    3.056

    3.060
    3.075
    3.075

    3.135
    3.200


最大と最小では、0.2V も違った。これで並列にしたら明るさが違うのが分かってしまう。

上下の 2 つづつを除いて 6 個で 2組にしようと思う。

さて、HT7733A を使って、2 cell を昇圧するつもりなのだが、データシートを見ると、±2.5% の精度。電圧にして ±0.08V 。

あと、もとから付いている 抵抗は、6.8 Ω。20mA x3 での電圧降下は、0.4V 。これは使えない。

ところで、スイッチは、LED の ON/OFF だけ。HT7733Aは、常に ONになってしまう。HT7733A自体の消費電流は、5uA なので、まぁ問題なさそう。

製作:

まず、LED が付いている基板を取り出さなければならない。これは内側から押し出す。手でやってもうまく行かなかったので、割り箸を当てて金槌でトントンやったら上手くできた。

次に選択した LED を取り付け。カソード側を切り取らないで、外側に曲げて、すずめっき線でぐるぐるやってみた。結局抵抗を外して直結したので、少しでも放熱するのが目的。ケースに接触するように作れれば良かったのだが、そこまではしっかり作れなかった。

さて、HT7733A 。これは、P板.com に発注していた基板が届いたのでそれを使うことに。

適当に作ったやつなので、実装のじゃまになるようなところに VIA があったりして、ちょっと困ったりしたが 回路は、OK。


    基板はこんな感じ。つかった部品は、HT7733A 表面実装タイプ@共立(10個 504円)。VLF4012AT-470MR30 (20個 200円@秋月)、ショットキーバリアダイオード HN2S01FU (10個 100円@秋月)、コンデンサ 入力出力とも 積セラ 10uF 6.3V(20個 100円@秋月)。

    VLF4012ATは、半田付けする場所がよくわからなくてコツがいるみたい。HN2S01FU は、マークが見えない。しょうがないので、片側だけ付けた状態でテスターで確認。コンデンサ 入力出力とも 10uFなのは、負荷変動がないので容量は小さくとも良いと勝手に判断。



    これは、組み立て後。VLF4012AT は、マークが 45 °になるようにすれば良いみたいだ。

ちゃんと昇圧できてLED が付くことを確認して、組み込み。

30 分ほど連続点灯させてみた。ケースはこころもちあったかい程度。中を空けて LED まわりを触ってみたが問題ない。だがしかし、インダクタが触れないぐらい熱くなっていた。350mA 47uH では無理がありそう。

とりあえず、様子を見ることにした。



OSPW5161P 編



調子にのって、OSPW5161Pでも作ることにした。まずは、Vf の調査。18.7 mA だから 定格 100mA 時はずっと高い。目的がグループ分けなのでこれでいいのだ。


    3.099
    3.124

    3.135
    3.163
    3.166

    3.179
    3.179
    3.185

    3.244
    3.259


やはり、やたら低いのとやたら高いのがある。同じように選択。

このLEDは、カソード側の足が太くなっているので、そのままでは基板に刺さらない。1.5mm のドリルで穴を広げた。そうするとランドが当然のようになくなってしまう。

すずめっき線で、ぐるぐる巻いて、ベタになっているところのレジストを剥離・半田付けし、すずめっき線をまず固定。次にカソード側の足をすずめっき線に半田付け。剥離には、ダイソーで見つけた半丸刀という彫刻刀を使ってみた。安全に作業できそうで良いかんじ。

次に点灯テスト。3 cell をそのまま直結してみたところ、一応光る。だが色が青っぽい。さらに点滅している。なんかやばそうなので、すぐやめて HT7733A を仕込んだカートリッジでやってみた。

それなりに光る。色もだいぶ白に近くなった。周囲を照らす感じで良いのだが、3.3V ではあまり明るくない。Vf が高めなのだから当然といえば当然。

次は、2連 の HT7733A モジュールの製作。ダイオードを付けて電圧を 3.7V にするのだ。

一応できました。なんというか、作った基板の出来が悪くて 変なところにある VIA とショートしたりしてちょっと面倒だったり。

電圧は、3.75V ぐらい。点灯させてみると、すごく明るい 2つは。1つは、点滅したりして暗い。

3.3V にもどすと、暗かったのがどれか判らない状態で問題なし。

Vf まで合わせたのに..

しばらく様子をみてから、電流制限抵抗をいれるか、LED をいれるかしよう。

とりあえず、LED交換 3.244V のやつ。

しばらく点灯してみたが、予想以上に電池が持つ。熱くなっているのは、インダクタだけ。オーバドライブなのはインダクタで、そんなに電流流せないのかも。

電流制限抵抗はパス。劣化したのは、半田付けのときで、熱を加えすぎたのかも。

ずっと点灯させてどうなるか見てみた。暗くなっていって、最後には点いているだけで、まったく明るくない状態まで行ったがなかなか完全に消灯しない。しばらく Off にするとまた復活するし。

HT77xx は、電池を絞りつくすみたいな表現をいくつか見たが、なるほどと思った。

追記:

RFAD のサイトで、パワーLED用アルミ基板を扱ってた。秋月の1W/3W出力LEDが付けられるようだ。



改造ネタに良いかも。

実際ランチャーの内部にマウントするにはどうしたら良いだろう?


秋月で売っている 24mm x 18mm x 17mm の放熱器を 使うことを検討してみる。

まず、24mm で両脇に 板が伸びているが スター型のアルミ基板は 20mm ぐらいなので 2mm 厚だとしても 入るはず。できたらネジを切って ネジ止めするようにしたら良いのではないかと思う。

次に、ランチャーの内径は φ 22mm ぐらいで、この放熱器の 対角の長さは 30mm 。(ピンを抜いてから) 4mm づつぐらい角を削る。削ったところしかランチャーと接触しないから、圧入するつもりで 調整しながら削る。

スプリングが付いている、ランチャーの基板は活かす。LED とか抵抗を取って、LED の反対側(放熱側)に貼り付け配線する。

    現物に合わせてみたら全然ダメ。深さが足りなく、フィン部分しか入らない。

電源は、2 セルから昇圧。とりあえず エコプラス製USB充電用電池BOXから部品を外すことを前提にする。

この IC は、2.4V から昇圧したとして、350mA を流して 5V まで昇圧する能力はない。4.0V 止まり。だが、3.0V なら 4.5V まで上がる。基本的に 350mA なら 1.6V の昇圧と考えれば良いのではないかと思う。

アルカリ電池を使うことを考えると、
4.7Ωを 3 パラで 放熱器のフィンに挟むように 付けると良いかも。350mA なら 0.54V の電圧降下。

HT7733A22uH 電源用インダクタ で自作しても良いかも。

インダクタは、直径 7.7mm なので、単四より細く 単四1 本分のスペースに入れられる。

問題は、どこまで電流が流れるか。

定格の 3.3V ではたぶん電圧が十分でない。無理やり電圧を上げるには、VCC 端子を 出力から ダイオードを通して接続する。

こうやって電圧を上げようとしても、流せる電流に上限があるのは、エコプラス製USB充電用電池BOX で使っている BL8530 と同じ。IC 内部で 制御している。ただ、個体差があるし インダクタとの組み合わせでも変わる上、LED の個体差で 電圧まで変わる。

要するに 実際に組んでみないと わからない。そういう意味では、エコプラス製USB充電用電池BOX であたりを付けてからバラして組み直す方が面倒が少ないように思う。

追記:
秋月でも 放熱基板付白色パワーLED(300円)パワーLED用放熱基板(50円)を扱いだした。




RFAD のサイトで、パワーLED用アルミ基板を扱ってた。
posted by すz at 23:00| Comment(3) | TrackBack(0) | 日記

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) | 日記