2011年02月02日

Microtouch

つれづれ日記』で知ったのだが、『Microtouch - a handheld AVR touch screen demo board』は、なかなか興味深い。

mega32u4 に 2.8 inch タッチパネル LCD を 接続したボードで、ファームウェアもオリジナルのものを頑張って作っている。タッチバネルは専用IC を使わずに自力で読み取っている -- これだけでも参考になる。あと、バッテリー駆動で USB で充電でき USB で接続して通信もできる。 MicroSD や 3軸加速度センサーも付いていてなかなか気合が入っている。

基板サイズは 50mm x 45mm -- 液晶より小さい。



ガーバーデータのツール』に画像生成機能を追加したのでテストを兼ねて画像化してみるとこんな感じ。

    だいたい合っているが ISP コネクタの Octagon が変。-- そういえば Octagon 使ったことがないや。
    → 画像は修正できた。(参考用旧画像)
    特に円と細い線が汚いので、描画系みなおし。(参考用旧画像)

前記事でも書いたように今基板を作ろうとしているので、一緒に割付け(自分で切るので面付けと言えない)して作ろうかと思った。

ちょっとストックしているパーツと相談しながら検討してみた。ーー結構なじみがないパーツを使っている。以下メモ

  • LCD

    1mm ピッチ 37 pin タイプ 2.8inch のがぴったり合った。OK 。ただし信号線は未チェック。

  • LP2985 3.3v LDO :

    これは、TAR5SB33 と置き換えたい。その場合、BP のところにコンデンサが必要。ただ、コンデンサを入れるスペースがない。

  • 16 MHz 水晶 / MicroSD:

    いつものやつ(FA238 / ヒロセ DM3AT)に置き換える。MicroSDまわりはちょっと変えないといけない。

  • USB/リセットスイッチ

    いつものやつが付きそうな気がするが、要チェック。厳密なチェックは面倒だから置き換え?

    USB は、位置決めボス付きが付くようになっている。ヒロセ UX60A-MB-5ST も、合うようだ。リセットスイッチも いつものやつが合うことは合う。ただし、向きを間違うと まずい。対角だけ接続すれば、向きを気にしなくて良いのだが ...

  • パワーボタン

    表面実装の横押しタイプ! ジャンクになった基板を持っているので、外せばパーツはなんとかなりそう。だが、一般的な部品で代替もできるようにすべきだろう。

    で、一般的な部品とは何だろう? Omron の タクトスイッチの pdf には、標準の 6mm のもので横押しタイプが載っている。どこやらで売っているのを見たこともある。これに対応しておけば、普通のタクトスイッチを 無理やり付けることは可能だろう。ただ、7.4mm も 高さがあり一番背の高い部品になりそうだ。

    実は、この基板と 液晶でバッテリーをサンドイッチする構造になっている。だから 下側に 3 mm 程はみ出しても問題ない。普通のタクトスイッチで基板を挟むようにマウントするのが良いのかも。

    あるいは、リセットスイッチのように 面実装にする。ケースにいれたとして、裏面にはなにもないのだから、押しこむような形の電源ボタンでも問題ないように思える。

    ケースの話が出たのでついでに書いておくと、やはり RFAD の MK8060 が良いのではないかと思う。ガラス窓と液晶がだいたい同じサイズ。ただ、ちょっと厚いので不恰好になるかも知れない。

      薄いケースに改造するのは手間だが可能のような気がする。下部ケースの嵌め合わせるところ -- 1mm 程の段になっているわけだが、これをのこぎりとかで削っていけば良い。もとは 20mm 厚だが 5mm ほど削って 15mm にすれば 良い感じになるのではないだろうか?

      あるいは、上部ケースどうしをニコイチ。つなぐ部分は板を貼り付ける。これだと単純に 削っていって好きな厚さにできる。底面になる方には好きな板をいれればよい。

  • リポ電池コネクタ。

    この形状のものは持っていない。ピンヘッダ用のスルーホールに変えたいところ。

  • MCP73811/2

    いつものやつは、MCP73831 。STAT が CE に変わっているので 無接続にしないとまずい。

    あと、充電中は電源からバイパスする回路を追加すべきだろう。.. だが、スペースがない。電源周りだけがごちゃごちゃしている。リセットボタンを右上あたりに移動して、スペースを空けたほうが良いかもしれない。



      具体的に回路図を書くとこう。D1 は逆流防止と 電圧をわざと下げて MCP73831 の負担を減らす目的で入れる。PCH MOSFET は、バッテリーからの電流供給。外部電源があると OFF なのでダイオードが入っているのと同じで逆流を防止する。外部電源をはずすと ON になり低抵抗で接続。この回路がなくとも、動くことは動く。でも、そうすると充電の制御が狂うから良くないらしい。

      あと入力側の コンデンサは 10u が基本らしい。これより大きいのはダメで、小さくするのも推奨されないようだ。バッテリー側のコンデンサも 10u で バッテリーが外れたときのために必要らしい。

  • 3軸加速度センサ MMA7455

    これはどうするのが良いのだろう?

    デジキーで結構安く手に入る。1 個 183円。次回発注時にでも買うことにして、そのままにしよう。

  • 抵抗やコンデンサ

    合うのかどうか要チェック。2012/1608 兼用でないと困る。

    サイズは OK -- いつも使っているパターンよりも 広い。

この基板は 50mm x 45mm で そのまま Fusion PCB に発注可能なようだ。だが、そうすると部品の入手が結構面倒なことになる。

中途半端に手をいれるより、いっそのことディメンジョンだけ合わせた互換ボードにした方が良いようなきがしてきた。今回の基板に入れるのは、パスして 別途考えることにしよう。

.. というわけで、メモだけ残しておく。
posted by すz at 20:17| Comment(2) | TrackBack(0) | 日記

2011年01月11日

Tiny20/Tiny40

Atmel のサイトを見ていたら Tiny20/Tiny40 というのがあるのに気がついた。Tiny10 の仲間かと思ってデータシートをダウンロードしてみたら 全然違った。

TPI があるから 仲間ではあるが、Tiny20 は 14 pin で、Tiny44A とかと互換性があるピンアサイン。Tiny40 は 20 pin で 他とは互換性がない。

で、両方とも SPI と TWI が付いている。なにかスレーブ・コントローラに徹した感じがする。

そんなことより Tiny20/Tiny40 は命令が 54 しかない。Tiny10 ですら 112 命令 あるというのに。(普通 Tiny は 123 - 125 命令)

  • いまさら命令を大幅に減らすとは、なかなか興味ぶかい。どの命令を減らしたのか? なぜそれで問題ないのか? について 分かったことがあったらここに追記していこうと想う。

  • 一番興味があるのは なぜそうしたか。命令を減らせばチップ面積は減るだろうけど、大して変わらないような気もする。32 個の 特別な I/O レジスタとか 2レジスタ 転送命令 や ビット操作命令 をやめれば チップ面積を減らせてクロックを上げられそうな気がするが、どうなのだろう?

... とか思ったのだが、命令表を見たら 以下のように 普通だった。

算術命令 (20)
ADD , ADC, SUB , SUBI , SBC , SBCI, AND, ANDI, OR, ORI , EOR , COM ,
NEG , SBR, CBR , INC , DEC, TST , CLR , SER

ブランチ命令 (34)

RJMP, IJMP, RCALL, ICALL, RET, RETI,
CPSE, CP , CPC, CPI, SBRC, SBRS, SBIC, SBIS
BRBS, BRBC, BREQ, BENE, BRCS, BRCC, BRSH, BRLO, BRMI,
BRPL, BRGE, BRLT, BRHS, BRHC, BRTS, BRTC, BRVC, BRVS, BRIE, BRID

ビット・フラグ操作 (28)

SBI, CBI, LSL, LSR, ROL, ROR, ASR , SWAP, BSET, BCLR, BST, BLD, SEC,
CLC, SEN, CLN, SEZ, CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT
SEH, CLH

ロード・セーブ (10)

MOV, LDI, LD(9), LDS, ST(9), STS, IN, OUT, PUSH, POP

MCU命令 (4)

BREAK, NOP, SLEEP, WDR


これだと 96命令。 LD/ST の アドレッシングモードを別にカウントして 112 命令。

Tiny2313 (123 命令) と比べてないのは以下のもの

算術命令 (2)

ADIW, SUBIW

ロード・セーブ (5)

MOVW, LDD, STD, LPM(3), SPM

ちょっと数が合わないが、要するに 2レジスタ転送命令系がなくなった先祖返りで Tiny10 と同じということか。ちなみに LPM, SPM は TPI ベースで仕組みが違う以上 なくなる方が自然。

なんだ。

ただ、54 って何? というのが次の疑問。

少なく見積もって 96 だ。大幅に減らすとしたら ブランチ命令 の条件と フラグ操作のフラグ名を モードの違いと定義づけるしかない。

BREQ, BENE, BRCS, BRCC, BRSH, BRLO, BRMI,
BRPL, BRGE, BRLT, BRHS, BRHC, BRTS, BRTC, BRVC, BRVS, BRIE, BRID

これを BRBS, BRBC の別名にすれば -16 。

SEC, CLC, SEN, CLN, SEZ, CLZ, SEI, CLI,
SES, CLS, SEV, CLV, SET, CLT, SEH, CLH

これを BSET, BCLRの別名にすれば さらに -16 。

こうすると 64 命令にはなる。しかし後 10 命令は?

    ここに 命令一覧がうまくまとめられている。

    LSL 0000:11dd:dddd:dddd # logical shift left (= ADD Rd,Rd)
    ROL 0001:11dd:dddd:dddd # rotate left thru C (= ADC Rd,Rd)
    TST 0010:00dd:dddd:dddd # TEST (= AND Rd,Rd)
    CLR 0010:01dd:dddd:dddd # clear register (= XOR Rd,Rd)
    SBR 0110:KKKK:dddd:KKKK # set bit register (= ORI)
    SER 1110:1111:dddd:1111 # set register to 255 (= LDI) (追加)

    どうも別名の命令がもともとあるらしい。これで -6 。
    (追記: SER に後で気がついた。以下それに合わせて修正)

    なんでもアリなら carry あり/なし を 1 命令に定義しなおすことは可能だ。

    ADD 0000:11rd:dddd:rrrr # add without carry
    ADC 0001:11rd:dddd:rrrr # add with carry

    SBC 0000:10rd:dddd:rrrr # subtract with carry (borrow)
    SUB 0001:10rd:dddd:rrrr # sub w/o carry

    CP 0001:01rd:dddd:rrrr # compare withoout carry
    CPC 0000:01rd:dddd:rrrr # compare with carry

    SBCI 0100:KKKK:dddd:KKKK # subtract immediate with carry
    SUBI 0101:KKKK:dddd:KKKK # subtract immediate w/o carry

    こんな風な関係。普通ではないかも知れないが、これで数はあう。

    あとは、SET/CLEAR だとか INC/DEC とか シフトの方向だとかで 2個イチにはできる。

    BRBS 1111:00kk:kkkk:ksss # branch if bit set
    BRBC 1111:01kk:kkkk:ksss # branch if bit cleared

    BSET 1001:0100:0sss:1000 # bit set in FLAGS
    BCLR 1001:0100:1sss:1000 # bit clear from FLAGS

    CBI 1001:1000:AAAA:Abbb # clear bit in I/O register
    SBI 1001:1010:AAAA:Abbb # set bit in I/O register

    SBIC 1001:1001:AAAA:Abbb # skip if bit cleared in I/O register
    SBIS 1001:1011:AAAA:Abbb # skip if bit set in I/O register

    LSR 1001:010d:dddd:0110 # logical shift right
    ROR 1001:010d:dddd:0111 # rotate right thru car

    INC 1001:010d:dddd:0011 # increment register
    DEC 1001:010d:dddd:1010 # decrement

    極めつけは、演算つき レジスタ間移動命令

    AND 0010:00rd:dddd:rrrr # logical AND
    EOR 0010:01rd:dddd:rrrr # exclusive OR
    OR 0010:10rd:dddd:rrrr # inclusive OR
    MOV 0010:11rd:dddd:rrrr # copy register

    遊びのようなものだが、減らす方法はいろいろありそうだ。

まぁいいや。しかし、命令数を 可能な限り少なく見積もるのに なにか意味があるのだろうか?
ちょっと驚いたが、普通だということが分かって安心した。

... と思ったが汎用レジスタが 32本→16本に減っているのに気がついた。これは面倒な話。

    こんな AVR は存在したことがない。AT90S2313 や その前の世代の AT90S1200 ですら 32個ちゃんとある。レジスタ減らすと ABI の定義から初めて GCC までだいぶ改造しないといけないはず。

    ちなみに 16 個のレジスタは、r16 - r31 。X/Y/Z レジスタがあるから当然か。

    で、そこまでするメリットがあるわけか。

      レジスタは単純なメモリではない。最低でも 1 clock (あたり) LOAD x 2 + STORE ができないといけない。2 レジスタ同時だと STORE x 2 。しかも、パイプラインプロセッサだから、演算結果を STORE する前に参照できないといけない。配線の規模がばかにならないということになる。

      ちなみに、I/O レジスタも メモリではなくレジスタなのだ。分岐命令で BIT を見たり できるから 特別な配線が必要。これも規模が増える要因。だが、32 より上のアドレス(こちらはメモリに近い)に移動したりしていないようだ。削減の効果がレジスタほどではないということか。

      追記: 頑張って GCCで サポートしたようだ。ググってみると、

      The AVR 8-bit GNU Toolchain : Release 3.1.0.206

      The AVR 8-bit GNU Toolchain adds support to the following devices: • ATxmega128B1. ATTiny10 Support.

      それは良かった。FPGA なんかで 互換プロセッサを作る場合、規模を減らしても GCC が使えるというわけだ。(というより、こういうのは FPGA でこそ有用だろう。)
      それはともかく、ATxmega128B1って何? USB とか付くと嬉しいのだが。

        これは本当に USB 付きらしい。見つけたのはロシア語のページだったのでよく分からないが、どうも (開発版?) Flip に ATxmega128B1 が USB デバイスとして登録されているらしい。これに限らず開発ツールは発表前に対応するから 注意深く見ていると じきに入ってくるだろう。

        結構嬉しい。入手できる頃にホンキを出そう。

        追記: WinAVR は開発終了で AVR Toolchain に移行したのだそうだ。知らなかった。

        とりあえず、レジストなしで入手するには、AVR Tools Beta Site に行って、AVR32 Studio 2.7 (Windows 版と Linux 版がある) の zip をダウンロードし、そこから抜き出すしかないかも。zip で 300MB 前後あるから 全部をインストールするのは、ちょっと 困る。gcc がある .../x86 ディレクトリだけ取り出して zip で固めると 84MB まで減る。ここから さらに avr32 関係と doc,info,man など抜いてしまえば 30MB まで減る。

        とりあえず取ってきたものは、AVR32 Studio 2.7.0.851 (Toolchain 3.1.0.201012011657)。これをちょっと使ってみようかと思う。

      ところで、ついでに次の文章を見付けた。

      (Tiny10 について) But its use is limited by its silly programming scheme - it requires 5V power and 5V singles on 3 of the 4 IO pins.

      TPI のデバイスを扱う場合は、電源周りをよくよく調べておかないと。



さて、ちょっとでも興味があるのは Tiny20 か。なにしろ Tiny44 系と似ている。

  • ADC が シングルエンドしかない。AREF もない。
  • USI がなくなり SPI/TWI が付いた。
  • ISP がなきなり TPI になった。
  • 水晶/セラロックは付かない。
  • DIP がなくなり TSSOP が追加された。

命令以外の違いはこんなところか。TWI や SPI が付いたのは嬉しいし、TPI も歡迎。だが、ADC の機能は寂しくなった。

劣化した機能は、実際には役に立たない/あまり使われない... ということだろうか?

確かに USI での I2C スレーブは問題があった。2レジスタ転送命令系は性能が多少違うだけ。
ADC はどうなのだろう?

    ちなみに、Touch sensing という 特別な項目があり、QTouch ライブラリに最適化したチップだという説明がある。どういうことだろう? 普通のADC のようにしか見えないのだが。

    追記: まったく説明がないが QTCSR というレジスタがあった。なんだろう?
posted by すz at 03:13| Comment(0) | TrackBack(0) | 日記

2011年01月09日

eJackino製作中

いまさらながら、eJackino (と AE-ATmega) を製作している。AE-UM232Rピン互換ボードのテストが目的。最初は、AE-ATmega を作り出したのだが、ケースに入らないことが分かって、確認のために eJackino のボードを出したので、これも作ることにした。



パーツが足りなくて未完成だが、良い感じになってきたので紹介。

    最近は表面実装の部品ばかり使っているので、発掘しないと ダメなのだ。いっそのこと買い直した方が手っ取り早そう。発掘したとしても手元にないのは、セラロックと DCジャック。発掘すれば見つかるはずなのが 10K の抵抗と 16M の水晶。

    ちなみに 電源は、バスパワーしか考えていない。付けたとしても 安定化 5V にするつもり。なので問題は 10K の抵抗と 16M の水晶だけ。面倒なので 表面実装の部品を無理やり付けようかとも思っている。



ケースが目につくと思うが、これは千石で(も)売っている RFADテクノロジー MK8260 (326円)。こんな風にあつらえたように ぴったりなのだ。

    ガラス窓付きケースというもので、ガラスを外してそこに基板を入れている。逆にすることで仕舞うためには、そのままだと枠が干渉する。
    ー最初だけ: 現在は枠と基板の順序を逆にしている。最初の写真も置き換えた。

    ちなみに、arduino はこれより短いので ぴったりにはならないが 多分入る。(最後の方参照)

    枠の外し方: 薄手の平刀(ダイソーで買った)を使って中央から差し込みながら徐々に端まで外していく。厚い刃だと無理。カッターナイフでも出来るかも知れないが、こじったりできないし厳しい。たぶんこれが最も楽で安全。

    ちなみに このケースについて以前記事にしたことがある。→ 『RFADテクノロジーのケース

    追記: 東京サイエンスで扱っている標本ケースが(おそらく)元で、中薄ケ−ス( 82× 60×h20mm) 250円以外に 大厚ケ−ス(118× 82×h40mm)500円、中厚ケ−ス( 82× 60×h40mm) 290円なんてのがある。-- 中厚ケ−スもなかなか興味深い。


    (上記リンク先カタログから引用: 中薄ケ−ス(SC003) == MK8260)


IC ソケットは 秋月の 丸ピンICソケット 32P を切って使っている。あと工夫したところは、電源切り替えのところをスイッチに変えたぐらい。

もちろん、RST は パターンカットしている。



こちらは、AE-ATmega 。いまのところ同じ状況。



残念なことにこいつは少し長くてケースには入らない。あと作っていて気がついたのだが、本体LED (透明のやつ)は、向きが逆になっている。要注意かも。

    よくよく見たら 1mm ほど長いだけ。AE-UM232R 側を削れば うまく入りそう。(上部ケースの) 両サイドは削らなくても良いから、かえって収まりが良いかも知れない。


追記: 基板を削ってケースにいれた。



1mm 削るのは基板を切るのとさほど変わらないと思い直してケースに入れてみることに。(前の写真は、削りカスが付いていてきたないので置き換え)

AE-UM232R 側だけだと厳しかったので、反対側も少し削っている。ケースの上部は AE-UM232Rだけでなく、LED も干渉してた。

あと水晶を付けた。無理やりっぽいが、eJackino ではコンデンサもいるので、こうする理由はある。

    動作確認したが、水晶の接触不良があった。なかなか難しい。

    実を言うと AREF のコンデンサを間違えた。0.01uF にしてしまった。
    ーこれは、AREF だしまぁいいか。


追記: 仕舞えるようになった。



eJackino は、そのままでケースに入った。AE-ATmega は、ISP コネクタに当たる部分を削ることで入るようになる。ただし本体のみである。

基板から 12mm 高以内にしないと入らない。AE-UM232R だと ピンヘッダの高さを押さえる改修をした上で基板に直付けしなければ無理。

    kosaka さんの記事に、『DCジャックより背が高いとシールドに干渉します。』と書いてあった。11mm に抑えた方が良いらしい。

ケースに入れるのを前提にモジュールを設計するのなら 当然ながら IC ソケットを使うことも可能なのだ。細ピンヘッダを加工して、モジュールから直接足を出せば、12mm 以内に収まる。私の場合UM162 を作るわけだからなにも問題ない。

    AE-UM232Rの足を外そうとしてみたことがあるが、壊してしまった。ちなみに マルツ MFT232R が AE-UM232R 互換で足がついていない。ただ、高価なのが問題。

    12mm と書いたが、12mm を切るかも。下側のケース 自体 14mm で底面がどれだけかが問題。
    とりあえず 12mm として、4mm が IC ソケット、1.6mm が(モジュール)基板に取られる。残り 6.4mm 。USB MINI-B がもっとも背が高いように改修したとして 4mm 。2.4mm 残るから 細ピンヘッダ(根本の部分 1.5 mm) なら問題ない。

    ちなみに 細ピンヘッダは足が長すぎる。一本づつ押し出して長さを調整しておかないといけない。

    AE-UM232Rの足を外すのは、全部のピンに熱を与えないとダメで結構難しい。しかも抜いた後スルーホールからハンダを除去するのが面倒。



ケースに載せたところ。AE-ATmega の方は、ぎりぎりまで削ってみたが、ここまでやらない方が良い。あと0.5mm ほど残しておいたほうが良かった。ぎりぎりまで削るべきなのは反対側だった。

    枠に挟む方法なら問題ないのだが、下側のケースに乗せる方法だと、AE-ATmegaの短辺が短いのでちょっとずらすとケースの中に落ちるのだ。基板が薄いので強度的にも問題がある。

  • ISPコネクタ側を ぎりぎりまで削る。2 つの穴のふちぎりぎりが目安。
  • 現物合わせで、上部ケースに嵌まるように、AE-UM232R 側を削る。

    こんなところか。削るのには大きい平ヤスリを使った方が良い。小さいのだと効率が悪い上、精度を出せない。ちなみに、大きい平ヤスリも百均(セリア)で購入。

    削りすぎたので、下側のケースに 内枠を付けるとか工夫が必要になってしまった。

      結局、ユニバーサル基板を切って、内側側面に両面テープで貼り付けることにした。弱い部分の補強にもなったので、これでよしとする。




いままで枠で基板を挟んでいたが、枠を上部に追いやった。たぶんこれが完成形。

    AE-ATmega では、枠を下側のケースに貼り付けたほうが良かった。仕舞ったときの高さもかせげるし。だが後の祭り -- もうはずせない。

    .. と思ったが、内側に 板を貼ることで、補強になり 基板がケースの中に落ちることもなくなった。そうであれば無問題だ。

追記: ほぼ完成か?



大して代り映えしないのだが、相当な苦労の末完成に大分近づいた。



まずこれ。AE-UM232R の 足と上部ピンヘッダを全部外して、細ピンヘッダに付け替えた。全部一度に外せなかったので、足のところのプラスチックを 2ピン毎に溶かして 2ピンづつ外している。で、コテ先が相当痛んだ。プラスチックが付着した感じで、なかなか元にもどってくれない。ちなみに、以前は横着して、ニッパで割っていたら スルーホールが死んだ。

今回も中央のスルーホールが死にかけ。eJackino はオープンで使うので、これでも良いか。




一応リファレンスのつもりで作っているので、TX/RX/DTR の 6pin に ジャンパピンをすなおに付けている。そうすると 今度は削らないと仕舞えなくなってしまった。

なかなかに面倒。



使わないと思うのだが、DCジャックを一応eJackino に付けてみることにした。AE-ATmega はDCジャック を付けるのを最初からあきらめた。

AE-ATmega はきちんと仕舞えるのだが、ejackino は、DCジャックをつけたおかげで、ちゃんとは仕舞えなくなっている。DCジャックのところも 6pin のところのようにしないと。

ちなみに AE-UM232R 付けたまま仕舞える。12mm はクリアできたわけだ。だが、微妙に DCジャックより背が高い気がする。AE-ATmega は、写真の状態だとあて板が干渉した。ずらさないと付けたまま仕舞えない。

ついでに書いておくと、まだ未完成。まだ、AE-UM232R の動作確認もしていない。その前にジャンパーピンをどうするか決める必要があるのだ。

  • J2(2ピン) : VCC への電源供給。これはオプーンで良いが、単独で使用できなくなる。スルーホールが死に掛けだしどうするか悩んでいる。-- もう外せないから失敗はゆるされない。
  • J1(3ピン) : VIO - VCC を外部で接続することで オープンで良いようにするつもり。だが、これも単独で使用するためには、ちゃんと付けないといけない。高さをクリアするために下部に付けるしかないと思うが、足の根元は、1.5mm 。これより下まで出ると ブレッドボードのとき すわりが悪くなる。やはり悩ましい。



    最終的にこうした。J1 はジャンパピンを差した状態でギリギリになるようにして上部にハンダ付け。

    J2 は、よくよく考えて ダイオードにした。ダイオードだと VCC に入力する電圧が下がるが別に問題ない。eJackino では 5V と VCC が接続され 5V になる。ただし、外部電源にしても 電源をいれなくとも 4.4V ぐらいが供給されてしまう。.. といっても UNO と同じようなもののはず。

    AE-UM232R の電源と 本体の電源を完全に分けることも出来そうだ。(AE-UM232R の)#15 VCC を パターンカットして N.C. にしてしまえば、VIO は外部から供給され VCC はバスパワーで動作する(はず)。(ちなみに、eJackino 側の # 15 VCC → VIO をジャンパしている。)

おまけ: (RST パターンカット済)



参考: arduino と RFADケース



確認したところ別の意味でピッタリだった。まぁかえってこっちの方が良いのかも知れない。ちなみに、枠にはさむ方法にすれば、問題なく上部にマウントできる。

ケースの下側の深さは 12mm で、枠が 2mm ぐらいだから、ガラスに接触しない。(一番高さがあるのは、USB-BコネクタDCジャックで 11mm 、3mm あるから 基板厚を考慮しても大丈夫)。長辺の幅は、USB-B コネクタが飛び出ていて微妙な感じ。

    調べてみたが、(UNO , Duemilanove 両方)全長 75mm 。一方このケースの内寸は 76mm 。保管用なら、まさにぴったり。

ケースの 内側底面 から 18mm 。ピンヘッダの根元が 2mm / ピンソケットが 8mm / 基板が 1.6mm として 基板底面からボトムまで 6.4mm 。

使うためのケースならこれだけ浮かさないといけない。プラスチック連結スペーサーを切ったりすると良いかも。

内側側面に板を貼るのもひとつの手。プラスチック(ABS)で問題がないが、 ユニバーサル基板を切って貼るのもアリ。

おまけ: 電源自動切り替え

UNO の回路図を見ると、外部電源 と USB (VBUS) を自動的に切り替えるようになっている。もう少し詳しく書くと、コンパレータを使って 3.3V の 2 倍の電圧が 外部電源として入力されると、USB (VBUS) を 切り離す。



簡易な回路としてこんなのは、どうだろう? UNO も Pch MOS FET を使っていて、普通とは逆向きに Source を 出力側に付けている。こう付けると ボデーダイオードで、Off でも 電圧は下がるものの通電する。外部電源がなければ、Pch MOS FET は ON になるので、低抵抗でつながるわけだ。外部電源があると、Pch MOS FET は Off になる。D1は、逆流しない機能であれば良く、arduino の場合は、レギュレータに置き換えて考える。(... で良いとおもうが未確認)。また、外部電源を 安定化 5V にすると ダイオードによって電圧が下がるので少々具合が悪い。

ちなみに この回路は、『中華フォトフレーム』を分解して知った。バッテリーと 外部電源(USB) を切り替えるのに使われていた。(この場合は バッテリーは USB VBUS の方に相当)
posted by すz at 00:56| Comment(132) | TrackBack(0) | 日記

2010年12月15日

著作権法の改悪に反対する

このブログは技術的な話題しか書かないのだが、こればっかりは書かざるを得ない。著作権法は既に技術的手段に言及があり、技術を封じ込める面がある。今回の改変はさらにこれがエスカレートすることになりそうだ。

DVDコピー、家庭内も禁止へ 暗号で保護のソフト対象』これを読むと、

  • 暗号化技術を使って保護されているソフトが対象で、保護を破るプログラムの製造や配布も禁止される。

と書いてある。この一行を読むだけで、なにやら うさんくさそうな感じがする。

  • まず、「暗号化技術を使って保護されているソフト」を(ひとつ)作れば、「保護を破るプログラムの製造や配布」 を制限できる と読める。

    まさかこのままの意味ではないだろう。暗号化した zip をひとつ作れば (Windows そのものを含む) zip の解凍ソフト の配布を禁止できたりすることにはならないだろう。

    でも、だれでも著作物は作れるのである。このとおりではなくとも、従来のフォーマットのDVDを保護しようとする法律を作れば、既に広く普及している 「プログラムの製造や配布」 を簡単に制限できることになるはずだ。

    だから、たぶんそんなことはないのだろうが、このような法律にしようとすること自体が同じぐらいおかしなことなので、安心して見てられない。

    Windows はなんとかしても、ubuntu など メディアプレイヤーの機能をもったソフトの 「製造や配布」 を制限されるかも知れない。油断しているとひどい法律になるかも知れない。

      従来のフォーマットまで保護するのは論外でありえないとして ..
      暗号が破られていない ブルーレイのようなものを対象にしているしよう。で、暗号を破ること自体は海外では違法にはならない。海外で 暗号を破り、「暗号化技術を使って保護されているソフト」をひとつ作り 日本に持ち込めばどうなるのだろう? 
      ひょっとしたらブルーレイ・プレイヤーの 「製造や配布」 を制限できてしまうかも知れない。法律に穴があれば恐ろしいことになるのだ。「プログラムの製造や配布」 を制限するような 大きな権利を与えることは危険なのだ。

  • もっと恐ろしいことに、「暗号化技術を使って保護されているソフト」なら 誰も勝手に解読できないし、できたとしても解読してはいけないわけだから、中身が見えなくとも保護される。

    コピーした違法な著作物を 「暗号化技術を使って保護」すれば、だれも手出しできないのではないか?

    まさか対策を考えていないとは思いたくはないのだが ..

      違法な手段に訴えないと違法な著作物であることは分からない。そして 違法な手段をつかえば 法律は保護してくれない(クリーンハンズの原則により 親告罪である著作権侵害罪の告訴が受理されない)。

    これをどうクリアするのか? へたに対策をすると、さらにおかしな法律になりそうだ。

    だいたい、暗号化されたものは、(意味のある)表現ではない。表現でない以上著作物ではないだろう。暗号を解いて出てくるものが著作物であり、著作権法の対象は 暗号化されていないものに限るべきだと思う。

    範囲を超えて保護しようとするとおかしなことになるのは必然だと思うのだが、どうだろう?

  • じつは 最も主張したいことは別にある。著作権法は技術的手段に踏み込むべきではないということ。

    著作権は有限の期間しか有効でない。技術的手段も規定してしまうと、権利がなくなってしまったものまで保護することになる。

    著作権が切れたとき、著作物は社会のものになる。著作権というものが存在できる前提だと思うのだが、それをどうやって担保するのだろうか?

    著作物をメディアに縛り付けると、著作権が切れるまでメディアが持たない。切れたときには消滅しているか、切れてなお(もとの)著作権者が権利をコントロールできることになるのである。

      ちょっと違う話になるが、引用する権利はどう考えられているのだろう? 技術的手段も規定してしまうと 引用まで不可能になる。

    これがたいそう気に入らない。こういう特別な保護を認めるなら 登録制にしてほしい。マスター を 政府に登録してもらって、 著作権が切れたとき、著作物は社会のものになることを担保してほしい。もちろん 保存する費用がかかるだろうが、登録料をとってかまわない。特別な権利を与えるのだからおかしなことではない。そして登録料の支払いが継続できなければ、著作権も消滅させる。... これぐらいしてほしいところだ。

これぐらいの懸案点がすぐ出てくるのだが ... それらが解消された形で 改正されても なにも問題を解決しないように思える。

  • 著作物をメディアに縛り付けると 利便性が明らかに低下する。技術は進むから 十年ぐらい先のことを考えると 買った著作物は 役に立たないものになっているはずだ。

    現在でも DVD ぐらいは microSD にらくらく入る。正規に買っても メディアプレイヤーに 入れるために リッピングするのが普通だろう。ブルーレイなど新しい規格でも 10 倍程度の容量でしかないわけだから、3-5 年先には DVD と同じような 感覚になってくるはずだ。

    そうなると、メディアに縛り付けられた著作物を誰が買うのか? 全部 ダウンロード販売に流れることになるのではないか?

    ( 結局、市場が消滅するのを加速するだけの結果になるのではないか? )

  • メディアに縛り付けて意味があるのはゲームのソフトだけになるだろう。それでも やはり技術は進歩する。技術の進歩によってたとえば 今のマジコンが存在しているわけだが、それもさらに技術が進めば意味がなくなる。たぶん 完全なエミュレータは出来るだろう、今の Advance のソフトの状況を見れば、それが将来 DS にも起きるのは明らかである。

    で、そういうものは 海外で作られる。日本の法律だけどうこうしても意味がない。日本のユーザだけが利便性を取り上げられ、海外で好き勝手にされている状況は変わらないだろう。

    ( 暗号化の解除に関する規制は、暗号化を解除されてしまったものとは無関係だ。まったく意味をなさなくなるまで、時間はかからないだろう。)

はっきり言って 、法律を決める人たちは 今と過去しか見えていないし、影響を与える範囲も見えていないのでは? と思える。

そんなことはないだろうと思いたいのだが、子供手当てでもザルなのが露見しているし、ザル法をつくられる疑念がぬぐえない。

というわけで、一応(反対を)表明しておく。

    補足しておくと、これを書いたのは こういう視点での議論があまりされていないと思えたからである。こういう疑念は一例であるが、既に回答が用意されていないようだと十分に議論されたとは言えずザルである可能性が高い。
    中身がよくわかっていないのに反対するのはおかしいと思われるかもしれないが、とりあえず反対しないと、取り上げられもしないのである。なので、反対と書いたが、表明することに重きを置いている。(特許だとこういうプロセスがある。)


追記: 「技術的保護手段に関する中間まとめ」



「技術的保護手段に関する中間まとめ」に関してのリンクを貼った。

    これをすこし読んだが、予想以上にひどい。現時点の DVD や ゲームソフトをどのように保護するかの視点だけで書かれており、それ以外のものについてどのような影響があり得るかについて まったくと言ってよいほど考察されていない。それに将来的にどうなるかについての考察もまったくない。

    例えばフェア・ユースについて 米国の例として出しているが、日本版フェア・ユースが策定されたらどういう関係になるのかすら記述がない。フェア・ユース目的ならば、技術的保護手段の回避にあたらないということにでもなれば、技術的保護手段に関する規定が無意味になってしまうから重要な観点だと思うのだが関知しないらしい。

    それに コピーコントロールCD そのものについての記述はあるが、その顛末についてもまったく考察されていない。規制を強化すれば DVD がまったく売れなくなる結果になりそうなのは容易に想像でき、一部の著作者には不利益を与えることになりかねないが考察にも値しないらしい。

    上記の2つの例ですら考察されていないのだから、都合の悪いものは見ないという方針が貫かれているようにしか思えない。そうやって作られてしまうと (関係者が)思いもしなかった悪用がされるものになってしまう恐れがある。

    予想以上にひどいと思ったのは、まずプログラムの製造・所持に関する規定だ。

    技術的保護手段の回避を専らその機能とする装置・プログラムの公衆譲渡等目的の製造・輸入・所持

    が禁止されるらしい。まず、GPLやBSDライセンスなどパブリック・ライセンスのものは、そもそも『公衆譲渡等目的』のものである。これらが禁止されるわけだ。

    プログラムは、パーツに分けられるから 『専らその機能とする』はなにも意味をなさない。『技術的保護手段の回避』あたるかどうかだけが焦点になりそうだが、『技術的保護手段』の範囲を広くしようとしているから、思わぬものが引っかかる可能性がある。

    また、技術的保護手段の回避をして 得られた著作物は、私的利用の制限を外すらしい。私的利用の制限が外された著作物とそうでない著作物の ニ種類ができるということになる。技術的保護手段の回避の手段の所持でさえ禁止されるわけだから 保護期間の制限も事実上外されているわけだ。一方に権利を与えて一方に与えないということであり、おかしな話のように思える。

    パブリックコメントに意見は出したいのだが、つっこみどころが多すぎる。理解してもらうためには、悪用される例を探して、こういう権利まで認められるのか? という書き方が有効だと思うのだが、期限は 2011/1/7 まで。なかなか時間的に厳しく間に合わないかも知れない。

追記: 「技術的保護手段に関する中間まとめ」に対する意見を送った。

相当に問題があるので、とにかく意見を送るだけは送ることにした。どのように扱われるか分からないし、指摘点そのものを理解されなくて無視されるかも知れない。「技術的保護手段に関する中間まとめ」に問題を感じている方は是非意見を送って欲しい。

ここに「送った意見」を添付しておく。これは一例として考えて欲しい。まだまだ問題があるはずだ。また、送った内容を読んで分かりにくい等、改善点を見つけた方は是非修正したものを自分の意見として送って欲しい。添付した「送った意見」の著作権は放棄する。コピーして一部修正したものを自分の意見として送ってもかまわない。

    補足: この意見は、プログラムをレビューしたりデバッグしたりする時の流儀で作成している。
    観点は、論理として筋が通っているかどうかだけである。ただし、論理だけを書くと理解されない恐れがあるので、説明自体は具体的に書くようにしている。
    その結果、なにか主義主張があって書かれているように見え、その主義主張に一貫性がないように見えるかも知れない。そういうことは気にしないというのが レビューしたりデバッグしたりする時の流儀であるので、誤解されるかも知れない。

    また相手を信用しすぎてはいけないと思う。法律というものは、論理としてはプログラムと比べれば単純である。人に理解されることを目的としているものが、プログラムほど複雑な論理であるはずがない。だから、相手は複雑な論理を扱うのに慣れてはいないと考えるべきであって、十分な説明が必要なのだろう。

    これでは十分ではないような気もする。是非、説得のための内容を補間して自分の意見にして送って欲しい。

    追記:やはり書き足りない。どうしよう。

  • 5 番目の意見の補足:

    この法律が意味を成すには、やはり『「技術的保護手段」をひとつのライセンサーに独占させる』というのが前提になると思う。なんの登録も必要なしに、 違反した者に対して 刑事罰を求められる権利を認めてしまうのはどうか? アルゴリズム -- アイディアに属する 特許法の範疇の権利が 無料で期限なしに登録さえ必要とせずに 認められるのである。

    しかも 条件がはっきりしない。 DVD など既存のアルゴリズムさえ「技術的保護手段」として認め保護しようとしているように見えるから、やはり zip の暗号化さえ 「技術的保護手段」として請求できてしまうような気がする。区別する論理は存在しないように思える。そうなれば、zip の複合化コードを入手している人に対し 刑事罰を求めることができる。恐ろしいことである。

    しかもこの権利は、ほぼ世界中の人間に与えるのである。著作物を日本に持ち込むだけで良い。実際に利用する人間は不在でかまわない。刑事罰を受ける側は国内にいる人間だけで、権利を与えた人間に及ぶとは限らない。どのような権利の行使が行われることになるのか、想像すると非常に怖い。

    こういうのは あり得ないはずなのだが、現実に形となっているわけで とても危険である。

  • 1 番目の意見の補足:

    zip の暗号化が「技術的保護手段」として認められないとしても、ある種のソフトウェアは 「技術的保護手段」として認められるのである。登録が必要ないことから なにが 「技術的保護手段」として認められるか判断できす。後出しですら OK そうある。そして 違反していれば 刑事罰を求めることができるわけである。

    で、譲渡目的 -- 言い換えれば 誰にでもライセンスすることを目的とした ソフトウェアの製造・輸入・所持および 公衆への頒布に 刑事罰を求めることができる。

    なにが 「技術的保護手段」として認められるか分からない状況で、いきなり 刑事罰を求めることができるわけであるから、オープンソースソフトウェアの所持そのものが危険ということになる。そうなると、オープンソースソフトウェアの活動を破壊させる効果が出てくる。後出しがダメだとしても、それと知らずにダウンロードすることがあるわけで いきなり 刑事罰を求められる危険性があることには変わらない。

    これは恐ろしいことである。誰にでもライセンスすることを目的とするものは、基本的に文化の発展に寄与する意図があると捉えるべきものであろう。

    そういう意図があるはずはなく、そのようなことをするとすれば なにか悪意しかないと判断しているわけである。で、それを阻止して 著作者の商業的利益を守ろうとしているわけである。

    文化庁は文化の敵であると自ら宣言したと という論理すら成立しそうだ。

      誤解されるかも知れないので、さらに補足しておくと、そう主張しているわけでも、そう主張したいわけでもない。したいのは単なるデバッグである。デバッグでは、可能性が(ある程度)ある仮説を(できるだけ多くの視点で)いくつも立てて、厳密に精査していく。否定できるだけの論理がないとバグである可能性が濃厚になっていく。プログラムの場合は、こういう検討をしたということをできるだけ残す。残さないと検討すらしていないと見做され信頼されない。法律の場合も基本おなじような手順だと思うのだが、ひょっとしたら違うのかも知れない。



「送った意見」-- 1意見1メールなので、以下の6つを別の意見として送った。

  • [6]該当項目および頁数 :◆第4章 19頁 回避機器規制の対象となる行為
    [7]意見

    ... 頒布目的の製造、輸入、所持を規制対象にする旨が記述されているが、
    GPLライセンスやBSDライセンスのオープンソース・ソフトウェアはそもそも頒布目的のものである。これらは膨大な量に及ぶ上、多数のソフトウェアをまとめて入手する行為も普通に行われている。(海外では合法のため)規制対象となりうるソフトウェアがまぎれ込む可能性があり選別するためには非常な労力が必要になることが予想される。

    また、既に入手しているソフトウェアが、新たに規制対象になりうるとすれば、所持している膨大な量のオープンソース・ソフトウェアから選別するための非常な労力を個々人に果たすことになる。

    従来と同じ考えで問題ないとはとてもおもえない。新たに規制対象になる以前から所持しているソフトウェアの所持に対しては、規制対象から外すべきであり、また輸入に関しては、新たに規制対象なったものでも故意でなければ規制対象にすべきではないと考える。

    それが認められたとしても、頒布に関して問題がおきる。オープンソース・ソフトウェアでは海外のサイトをミラーしており、利用者の便宜を図っている。このミラーサイトが違法となる可能性がある。取り除くとしても、整合性を保つために新たなソフトウェア開発が必要になる可能性がある上、そのままの形でしか頒布を認めていない場合、ミラーサイトが成立しない可能性もある。

    以上の理由により、規制対象となるソフトウェアが紛れ込んでいることを知っていても対処ができない可能性がある。輸入したものをそのままの形で頒布する場合は、規制対象から外すべきであると考える。

  • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
    [7]意見

    日本でもフェア・ユースの概念を法律に盛り込む動きがあったと記憶しているが、
    これが認められた場合、回避行為規制が無意味になる可能性がある。どのように対処

    するのか 考え方を盛り込むべきであると考える。

  • 該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
    [7]意見

    過去に正規に入手した DVDの複製やメディア変換による非正規の機器での
    視聴が認められなくなるとすれば、正規の利用者の利益を損ずることになる。また 過去にメディア変換した私的複製の所持が認めらなくなるとすれば
    正規の利用者の利益を大きく損ずることになる。この不利益は、違法な
    複製による権利者の不利益よりはるかに大きいと考えられるが、基本的な
    考え方が提示されていない。

    正規の利用者の利益を損ずることになれば、正規の利用者の怒りを買う
    ことになり DVDの市場が壊滅するほどの動きになる可能性も考えられる。

    また新たに購入するDVDの複製やメディア変換が禁止されるだけであっても、正規の利用者にとって価値がさがるということであり、DVDの市場が
    縮小していくのは明らかである。( コピーコントロールCD が存在しなく
    なったのは、保護の方式の不完全さにも理由があるが、正規の利用者の
    利便性を大きく減じたためであると考えられる。DVDの市場にも同じこと
    が起きる恐れがあることは容易に予想できるはずである。)

    これについての是非は問わないにしても、 非常に重要な要素であり、
    基本的な考え方を提示すべきだと考える。

  • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
    [7]意見

    CSS 型の「暗号化」の技術について、技術的保護手段の対象と評価する
    とあるが、悪用される恐れが多分にある。

    有効な著作物がすくなくともひとつあり、「技術的保護手段の対象」
    と評価される「暗号化」の技術が存在したとする。

    そうすると、回避機器規制のため ライセンスを受けなければ 回避機器を
    所持できず、同じ「暗号化」の技術を用いて暗号化したものの復号が違法
    になる。

    著作物でないものの保護は行わないとも別の箇所で記述があったが、
    実質に有効に機能するのか甚だ疑問である。

    有効に機能しなければ、違法な著作物を暗号化したものですら保護
    されることになり、かえって違法な著作物の蔓延を助長する恐れすらある。

    「技術的保護手段の対象」と評価するには、条件が足りないと考えられる。
    おそらく「誰でもライセンスを受けられるようにすること」というのがひとつの条件だろう。中身を確認することが可能なようになっていれば、
    少なくとも違法なものを保護してしまう可能性はなくなる。
    ただし、高価な価格を付けられるとその条件も有効に機能しない
    可能性があり、「無料での試聴を許可すること」も条件にしない
    といけないのではないか。

    このように考えるにしても著作物そのものの試聴でなくては意味を
    なさないため、「技術的保護手段の対象」と評価するには、必然的に
    「アクセスコントロール」を合わせもったものになりそうである。

    基本的な考え方では、こういったことについてどう考えるのかについての
    方針を提示すべきではないか。

  • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
    [7]意見

    「復号化」しか問題にしていないが、「暗号化」の技術自体の複製に
    ついての考え方が必要である。「暗号化」の技術そのものはアルゴリズム
    であり、著作物ではないため同じ動作をするソフトウェアの開発は可能で
    ある。

    それで暗号化した著作物が存在すると「技術的保護手段の対象」と認め
    られ、正規の「復号化」ソフトが違法となる。

    「暗号化」自体は海外で行うことも可能なため違法とすることはできない。
    「技術的保護手段」をひとつのライセンサーに独占させなければ、この問題は
    解決しないと思われるが、その是非もあるので、基本的な考え方で方針を提示
    すべきだと考える

  • [6]該当項目および頁数 :◆第4章 19頁 回避行為規制 基本的な考え方
    [7]意見

    「技術的保護手段の対象」の範囲が広がり影響が拡大するため、
    従来も規制されていた件についてだが意見を書かせていただく。

    回避行為規制は、著作物でないものを保護しないとは言え、回避手段を規制
    されてしまっているため、実質、著作物でないものも保護してしまう。

    著作物であっても 著作権の保護期間は有限であるため 権利がなく
    なった後も実質保護してしまうことになる。

    特に DVD などメディアに縛り付ける著作物は、メディアが保護期間終了
    まで持たないことは確実である。社会への還元を放棄していると見做す
    こともでき、文化の発展に寄与していると言えるのか?、
    そのようなものに手厚い保護が必要なのか?という疑問もある。

    このことについて、合理的な説明が必要であると考える。

    私見ではあるが、「技術的保護手段」と認め権利を与えたものについては、
    担保をとり著作権の保護期間終了後に政府が公開したらどうか?

    また、メディアが破損したときに 発売が停止していたりすると場合
    二度と入手できないことになる。
    「技術的保護手段」を与えたものが入手できないことに対する
    救済措置が必要と考える。担保をとっていれば政府が著作者の代わりに
    正規の利用者の権利を保証することは可能である。

    技術的にはそれが可能になりつつある。是非検討していただきたい。

posted by すz at 19:32| Comment(2) | TrackBack(0) | 日記

2010年12月09日

TPI/PDI

ATtiny10 などで新規に採用された プログラミングインターフェイス TPI(Tiny Programming Interface) を調べてみることにした。

この TPI の基本プロトコルは XMEGA で採用された PDI と よく似ている。調べる際 PDI との違いについてもチェックすることにした。

物理層



TPI PDI
リセット RESET x
クロック TPICLK PDI_CLK
データ TPIDATA PDI_DATA
開始方法 (1) RESET を L
(2) TPIDATA を H (1) PDI_DATA を H
(3) TPICLK x 16 (2) PDI_CLK x 16
(4) KEY送付 (3) KEY送付
終了方法 RESET を H PDI_CLK 停止

こんな感じ。データの送受信は 8bit + Parity EVEN + STOP2 が基本で、1本の DATA 線を TX/RX で 共有する半二重。

  • PDI は パリティを常に守るわけではなく パリティ を 無視する 特殊なデータがある。9bit + Parity NONE と思ったほうが しっくりする。

  • PDI は CLK を送付しつづけないといけない。これが扱いにくいところで FT232RL でライターを作ろうとすると エラーが起きたら最初からやりなおす -- みたいな処理が必要になる。(avrdude の terminal mode を愛用しているのだが、特に このモードと相性が悪い)

コマンドセット


TPI も PDI も 『FLASH に書く』といった コマンドがあるわけではない。メモリ空間に レジスタがあって プログラムとおなじようにレジスタにアクセスすることで、FLASH に書き込んだりする仕組み。

コマンドセットは、次のようになっている。

    TPI PDI
    READ ( アドレス直接指定 ) SLDCS LDS
    READ ( ポインタ間接 ) SLD LD
    READ ( ポインタ間接 ++) SLD LD
    WRITE ( アドレス直接指定 ) SSTCS STS
    WRITE ( ポインタ間接 ) SST ST
    WRITE ( ポインタ間接 ++) SST ST
    ポインタ設定 SSTPR ST
    キー設定 SKEY KEY
    READ ( IO空間専用 ) SIN x
    WRTIE (IO空間専用 ) SOUT x
    READ ステータス SLDCS LDCS
    WRITE コントロール SSTCS STCS
    繰り返し指定 x REPEAT
    注) ++は ポストインクリメントつき

完全ではないが、まぁこんな感じ。TPI には REPEAT がないが、空間が小さいから 必要ないのだろう。

さて、コマンドを送れば結果が返ってくる(ものがある) 。そのときに 送信/受信が切り替わるわけだが、ガード 期間が定義されていて、一定期間(クロック)後から 結果を返すようになっている。

この ガード 期間 最小 2 クロック。設定によって +128 クロックまで期間を長くすることができる。

    TPI は、それを設定する専用のレジスタがある。PDI は、コントロールレジスタで 専用のコマンドで設定する。

    なお、このコマンドセットは XMEGA では JTAG に (ほぼ)マッピングできるそうだ。

ライタの設計



TPI/PDI はこういうものなので、いくつかの空間に対して READ/WRITE するような メソッドをライタで提供し、あとは上位レイヤで やってもらう -- というのが 一つの案。

avrdude-5.8 のソース(AVRISPmkII とかに XMEGA用のコードがある)を見てみたのだが、AVRISPmkII も 実際 そういう仕組みになっている。そして avrdude.conf に 各空間の 定義が書いてあり、その定義によって操作するようだ。

もう一つの案として、物理レイヤーをそのまま見せる方法も考えられる。

  • TPI だと

      DTR : クロック送出
      RTS : リセット ON/OFF

      みたいな割り当てをする。で、TX/RX の 共有 をどうするか ... が問題だが AT90USB162/ATMEGA32U2 など コントローラで制御するなら 比較的簡単に 対処できる。

        外付け回路を付けるなら、TX の START BIT から 12 クロック 分 ゲートを開く .. みたいなのが良いかも。

        AT90USB162/ATMEGA32U2 だと PORT の設定をプルアップにしておいて、送信するときだけ TXEN(送信許可)を enable にすれば良さそう。RXEN(受信許可) については、自分の送信データを受信してチェックしても良いし、送信中は disable にしても良いかも知れない。

          追記: PDI では、受信時 プルアップではなく HI-Z にしなくてはならない。プルアップでは衝突検出に引っかかって動かない。(確認した)

        さて、XCK , TX/RX を割り当てるのは必然なのだが、RESET にはなにを割り当てたら良いのだろう? PORTD ならなんでも良さそうだが、過去に作ったボードもチェックして決めようかと思う。


    • 問題なのは PDI 。パリティエラーになるデータを扱っている。これはいったいどうしたものか。

      パリティエラーになるデータは 3 つで、BREAK(0xBB) / DELAY(0xDB) / EMPTY(0xEB) 。
      BREAK は、HOST が中断のために送出するデータで シリアルの SEND_BREAK にマッピングできる。(ちなみに TPI も BREAK があるが、シリアルの BREAK 信号そのもの )

      これがあるだけで、普通の シリアルにマッピングするのが難しい。JTAG インターフェイス にマッピングするのが妥当のような気がしてきた。

        追記: 上記の特殊キャラクタは JTAG のみの話だった。勘違い。TPI と同じでシリアルにマッピング可能。

      ただ、そういうのをわざわざ作っても 遅延の問題があるから あまり高速にできない。結局 メモリ空間を指定してブロック転送するもの を作るほうが 高速になりそうなのだ。

    USBasp の拡張案


    そう言えば ... USBasp のプロトコルにマッピングできないだろうか?

      USBasp にも メモリ空間に対してブロック転送する コマンドはあるのだ。

        SETLONGADDRESS -- 32bit のアドレスを指定
        READFLASH -- FLASH から読み込み (最大 200バイト)
        READEEPROM -- EEPROM から読み込み
        WRITEFLASH -- FLASH に書き込み (最大 200バイト)
        WRITEEEPROM -- EEPROM に書き込み

      SETLONGADDRESS は 32bit あるので、高位アドレスを使い 対象空間を変えることにすれば 多数の空間を扱える。それに FLASH と EEPROM の 2 つの空間も使える。

      EEPROM          FLASH
      TPI IO空間 全空間
      +コントロールレジスタ (0x80 ずらしてマップ)
      PDI コントロールレジスタ メモリ空間

      こういう空間マッピングが良いかも知れない。これなら 上記の コマンドセットの機能を全部使える。

      で、そういう動作にするモードを指定する には どうしたらよいのだろう?

        CONNECT -- TARGET と接続する。
        DISCONNECT -- TARGET を切り離す
        ENABLEPROG -- TARGET をプログラミングモードにする

      こんなコマンドがある。avrdude-5.8 の usbasp のコードを見てみたが、USBの CONTROL パケットの INDEX / VALUE は all 0 。CONNECT の コマンドで mode を設定すれば 切り替えるようなことはできそうだ。

        CONNECT で value_h を プロトコルバージョン とみなし 2 だったら value_l によって メソッドを変える。予定では 2 が TPI 3 が PDI (1 は ノーマルの別チャネルとか)

        という風にすることに決めた。

      ちなみに、その他のコマンドは次のものだけ。

        TRANSMIT -- 4バイトの ISPコマンドを実行する
        SETISPSCK -- BIT CLOCK を設定する。(通常 AUTO 指定)

      SETISPSCK はそのまま使う。TRANSMIT は サポートする必要はない。が、シグネチャー読み出しぐらいは、シミューレートしても良いかも知れない。それ以外にも プログラマ自身の設定を変えたり、ステータスを返したりする機能を仕込むとデバッグが楽になるかも知れない。


    ... というわけで、AT90USB162/ATMEGA32U2 に 移植した USBasp を改造してみようと思う。
    serjtag でやろうとも思ったが まだベースも動いていないし。

    ここまで書いた段階で、avrdude tpiでググってみた。

    • あ、LUFAに、AVRISP-MKII Clone が入っていて PDI/TPI をサポートしているのか。

    • 実装例のひとつが、USBTiny Mkii

      これを読むと、Avrdude 5.10 support for ISP, PDI and TPI と書いてある。

    • ほかに TPI bitbang implementationというのも投稿されているなぁ。最新版に入っているのだろうか?

    USBTiny Mkii は、AT90USB162/ATMEGA32U2 を使っているみたいだし、すなおに LUFA 使えば簡単そうではある。ただ libusb-filter 入れろとか ちょっと気になることが書いてある。

    まぁ、AVRISPmkII は 秋月で 3300円だから すなおに AVRISPmkII 買ったほうがお勧めではある。

    なんというか、使うより作るのが目的のようなものだから、この方針のまま検討を進めよう。ライタのファームウェアより avrdude での対応が 面倒で そっちの方が重要。-- なにはともあれ、avrdudeの最新版 5.10 を見てみよう。

    あと、デバイスをなんとかしなくては。XMEGA は 16A4 と 192D3 を確保済みだが、ATtiny10 は買えるのか?

      デジキーだと ATtiny10 のリードタイムは 1/12/2011 だそうだ。ATmega32u4のリードタイムも 1/23/2011 だし、この際 発注しておくか。


追記: avrdude-5.10 をチェック

avrdude-5.10を見てみた。観点は、どんな風に実装されているか。

まず、flags に AVRPART_HAS_PDI , AVRPART_HAS_TPI が設定される。これを見て動作を切り分ければ良いようだ。

また、AVRPART_HAS_PDI を見ているのは、jtagmkII.c と stk500v2.c のみ。さらに、AVRPART_HAS_TPI まで見ているのは stk500v2.c のみ。... どうも stk500v2.c だけチェックすれば良いようだ。

で、stk500v2 は、次のメモリタイプがあるらしい。

stk500v2_private.h:
avrdude mapping
XPRG_MEM_TYPE_APPL 1 "flash","signature"
XPRG_MEM_TYPE_BOOT 2 "boot"
XPRG_MEM_TYPE_EEPROM 3 "eeprom"
XPRG_MEM_TYPE_FUSE 4 "fuse"
XPRG_MEM_TYPE_LOCKBITS 5 "lockbits"
XPRG_MEM_TYPE_USERSIG 6 "usersig"
XPRG_MEM_TYPE_FACTORY_CALIBRATION 7 "calibration"

stk500v2 は、こうなっているだけの話で、そういう風なメモリタイプの分け方をする必要はないらしい。

avrdude.conf の定義はこんな風になっている。

# ATXMEGA16A4
       :
signature = 0x1e 0x94 0x41;
has_jtag = yes;
has_pdi = yes;
nvm_base = 0x01c0;
:
memory "eeprom"
size = 0x0400;
offset = 0x08c0000;
page_size = 0x20;
readsize = 0x100;
;
memory "flash"
size = 0x00005000;
offset = 0x0800000;
page_size = 0x100;
readsize = 0x100;
;
memory "usersig"
size = 0x200;
offset = 0x8e0400;
page_size = 0x100;
readsize = 0x100;
;
memory "signature"
size = 3;
offset = 0x1000090;
;

offset や readsize が定義されているので、write はともかく read するのには苦労しなさそう。
では、TPI のほうはどうなっているのだろう。

# ATtiny10
:
signature = 0x1e 0x90 0x03;
has_tpi = yes;
:
memory "flash"
size = 1024;
offset = 0x4000;
page_size = 16;
blocksize = 128;
;
memory "signature"
size = 3;
offset = 0x3fc0;
;
memory "fuse"
size = 1;
offset = 0x3f40;
blocksize = 4;
;
memory "calibration"
size = 1;
offset = 0x3f80;
;


まぁ、同じような感じ。

write は、それぞれのメモリタイプ毎の方法を知ってないといけないにしても usbasp 拡張への対応はあまり難しくないような気がしてきた。

追記: コード作成中

大分出来てきた。いろいろ分かってきたので訂正。

  • PDI の特殊コードのうち DELAY と EMPTY は単に無視すれば良さそう。そして残る1つの BREAK は、本当の BREAK と同じ扱いで良さそう。

    具合が悪いこともあるかも知れないが、たぶんタイムアウトでなんとかなる。

    ... そうなると 半二重 + 同期 という特殊なモードを作れば、シリアルのインターフェイスで対応できそう。 それはそれで面白いかもしれないが、とりあえずは、USBasp の拡張をやってみる。

  • TPI で NVM(FLASH など不揮発メモリの総称) に書くには、NVMCMD に WORD_WRITE を設定してから、SST で WRITE するようだ。チップイレーズは、NVMCMD に CHIP_ERASE を 設定して WRITE 。その後 ビジーフラグをチェックする。終わったら NOP を設定しておく。

    PDI も 似たような感じではある。が、機能が多い上に 領域毎に専用コマンドがあったりして すごく面倒。
    こんなのは、上位レイヤーの avrdude でやりたいのだが、ブロック書き込みだと ページ毎に NVMCMD を設定してやらないといけないので、なかなか厳しい。

  • TPI は 空間が 3 つあった。グローバルな空間 と I/O 空間 と コントロール・ステータス空間。仕方ないので、I/O 空間 と コントロール・ステータス空間 の 2つをアドレスで切り分けて もとの EEPROM 空間にマップすることにした。

    PDI では空間は グローバルな空間 と コントロール・ステータス空間の 2つしかないのだが、実を言うと NVM 制御用に 別の空間を定義したくなった。NVM 制御では、ポインターは使わないので、アクセス方法が違う。ただ、1 バイトアクセスが多いので ブロック転送よりは、ISP コマンドでアクセスするほうが効率が良さそうなのだ。なかなか悩ましい。

  • それはそうと、LUFA のコードは 参考になる。実際に動くコードというのは貴重だ。

追記: コード作成中(2)

コード作成がだいぶ進んで、テストに入れそうなぐらいになってきた。ちょっと難しかったところがあるのでメモしておく。


  • NVM_CMD

    FLASH とか EEPROM に書き込む時の手順が難解だった。マニュアルに載っているわけだが、よくわからなかったし、細かいことはやはり分かっていない。

    ページ単位で書き込める リソースには、EEPROM / FLASH(APP) / FLASH(BOOT) / USERSIG と FLASH(ALL) の 5 つがあるようだ。それぞれ NVM_CMD が違う。また FLASH(ALL) は、APP と BOOT のエリアを統一的に扱うもののように見えるが詳しくはわからない。

    これらの書き込みは、NVM_CMD は違うものの 手順 は同じようだ。

    手順はこんな感じ 。マニュアルの用語がわかりづらいので 自分流の用語にしている。

      (1) ページバッファ消去 (CLEAR_BUFF)
      (2) ページバッファへのデータのロード (FILL_BUFF)
      (3) ページ消去 (ERASE_PAGE)
      (4) ページバッファのページへの書き込み (WRITE_PAGE)

      この手順が書いてあるのだが、私には次の方が理解しやすい。

      (1) boot_page_erase (A) ページ消去 (ERASE_PAGE) (B) ページバッファ消去 (CLEAR_BUFF)
      (2) boot_page_fill ページバッファへのデータのロード (FILL_BUFF)
      (3) boot_page_write ページバッファのページへの書き込み (WRITE_PAGE)

      左のは、ブートローダでの自己プログラミングの関数で、この手順だと同じようなことをしていると理解できる。


      EEPROM APP BOOT USERSIG (FLASH)  trigger poll
      (1A) ERASE_PAGE 0x32 0x22 0x2A 0x18 0x2B SPM NVMBUSY
      (1B) CLEAR_BUFF 0x36 0x26 0x26 0x26 0x26  NVMEX NVMBUSY
      (2) FILL_BUFF 0x33 0x23 0x23 0x23 0x23 SPM
      (3) WRITE_PAGE 0x34 0x24 0x2C 0x1A 0x2E SPM NVMBUSY

      NVM_CMD はこのようになっている。CLEAR_BUFF / FILL_BUFF については EEPROM だけが違う。

      (2) の FILL_BUFF で実際に書くデータを埋めていく。SPM と書いてあるのは、PDI で ページがあるアドレスに対して Write する操作。FILL_BUFF だけがデータに意味があり、他は Write でアドレスのみが意味がある。

      さて、こんな風に リソースによってコマンドを切り替えないといけない。結局 stk500v2 のようなメモリタイプの定義になってしまった。残った(書き込む)リソースは FUSE と LOCKBITS のみ。これら は、上記のk記法で書くと

      FUSE LOCKBITS trigger poll
      o WRITE 0x4C 0x08 SPM NVMBUSY

      こう。NVM_CMD をセットして PDI で Write 。


  • USBasp とのインターフェイス

    いろいろ試行錯誤した結果こうなった。


        メソッド 型
    (NEW) ops.pgm_poll (void (*)(void))
    ops.pgm_disconnect (void (*)(void))
    ops.pgm_transmit (void (*)(uchar *, uchar *))
    ops.pgm_enable (uchar (*)(void))
    ops.pgm_read_space0 (uchar (*)(uint16_t))
    ops.pgm_write_space0 (uchar (*)(uint16_t, uchar))
    ops.pgm_read_space1 (uchar (*)(uint32_t))
    ops.pgm_write_space1 (uchar (*)(uint32_t, uchar, uchar))
    (NEW) ops.pgm_blk_start (void (*)(uchar, int16_t))
    (NEW) ops.pgm_open_page (uchar (*)(uint32_t, uchar))
    ops.pgm_close_page (uchar (*)(uint32_t, uchar))

    • (NEW) と書いてないものは、想定どおりで 従来の ISP用メソッドと 1:1 のマッピング。

    • pgm_poll はなんとなく付けたものでつかっていない。pgm_open_page は、page_size が分かれば必要ないのだが、pgm_close_page と対になるようにした。pgm_close_page は、ISP だと ispFlushPage にマッピングされる。

    • pgm_blk_start というのが純粋な新規インターフェイスなのだが、やっぱり事情がある。PDI は、REPEAT 命令があるから これから何バイト分 アクセスされるのか知っていたほうが都合が良い。最初は ブロック READ/WRITE のバイト数だけを引数にしていたのだが、この値は普通 200 で ページサイズとは無関係。上記で説明したように ページの切れ目で REPEAT を解かないといけないことに気づいたので、ページサイズも引数にした。

      ちなみに、pgm_read_space0/pgm_write_space0 は、もとは EEPROM 。これを 0x8000 のビットが立っていれば コントロール・ステータス空間 そうでなければ IO空間(PDI では レジスタがある下位アドレスに対するダイレクトアクセス) に割り付けた。
      pgm_read_space1/pgm_write_space1 はもとは FLASH で、全メモリ空間(PDI ではポインタによる間接アクセス)としている。

      さて、NVM_CMD の コマンドセットを切り替えなければ 書き込めないのだが、どうやって切り替えるか。
      いろいろ考えたのだが、pgm_transmit を使うことにした。ついでなので、ISP コマンドとの互換コマンドも少し取り入れて次のようにした。

      0x30 READ_SIGNATURE
      0xc0 WRITE_EEPROM
      0xa0 READ_EEPROM
      0xf0 CHK_BUSY
      0xac ISP_CONF - 0x80 CHIP_ERASE
      (PDI) 0xac ISP_CONF - 0x01 SET_SPACE
      (PDI) 0xac ISP_CONF - 0x59 RESET

    • READ_SIGNATURE は、まずは知りたい情報だから入れた。WRITE_EEPROM/READ_EEPROM は 上記の space0 への read/write と同じ機能。1 バイトアクセスが多いので こっちの方が使いやすそうだと考えた。 CHK_BUSYは、上記の NVMBUSY のチェック専用。ついでなので CHIP_ERASE も入れた。

    • PDI 用の新規コマンドの SET_SPACE は、上記 NVM_CMD コマンドセット切り替え。RESET は、RESET ON/OFF 用でリセットラインの機能。

    • FUSE と LOCKBITS までサポートするのは、面倒なのでやめた。コマンドを組み合わせて 上位レイヤで実装する。

  • 半二重 同期通信

    TPI/PDI で共通にすることにした。ベースは ゆきさんの R8Cプログラマ 随分変えてしまったが、基本は踏襲。もともと半二重通信を意識したコードだったので 都合が良かった。実をいうとまだ動くかどうかも分かっていないのだが、現状のやりかたをメモしておく。

    • 同期通信

      マニュアルみてもなかなか分からなかったのだが、同期通信 の 速度の設定 は SPIマスタと同じだそうだ。U2X1 は 無意味 -- ではなく 0 に設定する必要があるらしい。

      あと、UCPOL1 は 1 にするはず。これで、XCK からクロックが常時出るようになるのだろうか? 期待通りに 非同期通信のパラメータが効くのだろうか? 不安があるが.. まだテストしていない。

    • 半二重 処理。

      バッファ切り替えの出力も付けたいので完全な 半二重 処理 が必要になる。

      送信と受信が同時に enable されないように UCSR1B を次のように設定している。

      受信モード UCSR1B = (1<<RXEN1)|(1<<RXCIE1);
      送信モード UCSR1B = (1<<TXEN1)|(1<<TXCIE1)|(1<<UDRIE1);


      送信モード になるのは、最初にデータを送ったとき。送信完了割り込みで 解除。
      次々にデータを送る場合は、送信データ空き割り込みで 送られるので、送信完了になるのは、全部データを送信し終わったとき。

      送信を disable にしたとき 通常ポート動作に切り替わるが、pull-up モードにしておけば 問題なさそう。

      正しくデータを送ることができたならば、全部送信が終わらないと データを送ってこないはず。... これもちゃんとは確認してない。

    • その他の処理

      あとタイムアウトを入れている。データを送ってこないようなら エラーになるようにしている。これはベースと同じように 10ms タイマ割り込み。NVMBUSY のタイムアウトもあるので、タイムアウトのタイマー変数は 2 つ作っている。

      気になるのは、受信バッファ溢れ。REPEAT 命令があるからといって REPEAT 数を増やすと どんどんデータが送られてきて 溢れる結果になりそう。REPEAT 数 は 受信バッファのサイズと 同じにしておいた。

       - EMPTY とか DELAY の特殊データも 受信してしまうと 受信バッファが溢れるので、無視することにしている。
       - ただし、BREAK や 本当の受信エラーは 受け取りたいので バッファは 16bit 幅。

      ... といってもこれまた未テストで 少々不安。バグなら直せばよいが、仕様を読み違えていると 一気に不可能になるおそれがある。


追記: ここまでの ソースコード (もちろん未テスト)

  • usbasp.c (テキスト)
  • usbasp.h (テキスト)
  • angel_loader-1.1f.zip AT90USB162/ATMEGA32U2 ファームウェア


  • avrdude-5.10 の usbasp を いままで説明したプロトコルに対応させてみた。未テストで、これをデバッグするのだ。

    従来互換で、PDI/TPI のチップでは、切り替わるようになっている。

    ファームウェアの方も PDI/TPI 用のポートは切り替わる。

      PD2(RX)/PD3(TX)/PD5(XCK) と TPI 用の RESET に PD0 を使う。あと PD4 を バッファ制御用に使えるようにしている (L: TX / H : RX)。

    だが、ISP の場合も USART の SPIマスターモードを使ったほうが 良さそうな気がしてきた。

    ちなみに、正規の 6pin ISP コネクタは とっても適当なアサインになっている。
    AVR042(pdf) を見ると次の配置。()内は 割り当て案

    ISP TPI PDI
    (RX) MISO VCC (RX+TX)DATA VCC (RX+TX)DATA VCC
    (XCK) SCK MOSI (TX) (XCK)CLK N.C. N.C. N.C.
    (PD0) RESET GND (PD0)RESET GND (XCK) CLK GND

    TPI はまだ 良い。PD4=L で TX を RX に ミックスするようなもので 十分対応できる。
    PDI はそれに加えて XCK を PD0 に ミックスする別の制御線が必要になる。そして、PDI のとき PD0 は HI-Z にしておかなければならない。

    それに加えて、MOSI が N.C. にできてない。これも制御する信号線が必要なのだろうか? ... PDIの CLK が TPI の CLK の位置だったら 良かったのに。

追記: コードデバッグ中(1)


(pdi_base.alc : LAP-C ファイル)

シバ某のログ:実験結果小まとめ(TXT)も参考にして いろいろやって、ようやく 思ったようなコマンドが出せるようになった。ロジアナがないとデバッグは厳しい。買ってよかった。ちなみに、ソースコードは随分変わった(公開は別途)。

ターゲットには、XMEGA16A4 を使っているのだが、まだ XMEGA16A4 からの受信は成功していない。


  • 買ったロジアナの使い方すらよくわからなかったのだが、シリアルのデータ を出すには、BUS に信号を入れて BUS Proparty で設定することがやっと分かった。
  • クロックは 250kHz にしているが、TPI の ATtiny10 ですら 2MHz まで OK 。PDI だと 10MHz までいけるが、むしろ最低周波数 (10kHz) をクリアしないといけない。ロジアナの設定は、Find the baud ... にチェックすればよいらしい。 bps のところに数字を入力すればよい。
  • クロックはちゃんと出せていて、ちゃんと 立下りで 信号を切り替えている。
  • USART の同期モードでもちゃんと START BIT/STOP BIT が出ている。-- 未確認だったので、これすらできるか不安だったのだ。もう不可能ということにはならない。デバッグするのみ。
  • 送信は C1 59 81 と連続で出せているが、割り込み使ったバッファ処理は うまくいかなかったので、ポーリングに変更している。

追記: コードデバッグ中(2)

  • usbasp.c (テキスト)
  • usbasp.h (テキスト)
  • angel_loader-1.1h.zip (ファームウェア)
  • avrdude-serjtag04i.zip (usbasp 改造版 含む )


    (isp_base.alc : LAP-C ファイル)

    ISP の PORT を SPI から USART SPI に切り替える ISP2 というのも作っていて これは完成した。usbasp も対応して -c usbasp2 と指定すると チャネルを切り替える。TPI/PDI は どちらでも良いことにした。

    ただ、PDI のテストは進んでいない。ターゲットを 以前作った XMEGAボードにしようと思い製作中。

追記: コードデバッグ中(3)


    (pdi_test-bad1.alc : LAP-C ファイル)

    なんだかうまくいっていない。これは、ガード期間を短くしたときのもので 設定したガード期間を読みだそうとしたデータ。なぜかクロックに同期したデータが来る。

    で、いろいろしらべてみると、XMEGA には衝突検出のロジックがあって、値が 変化するときだけ出力するらしい。プルアップしてたので、XMEGA が ..00.. を 出力しようとしたらこれに引っかかる(はず)


    (pdi_test-bad2.alc : LAP-C ファイル)

    で、XMEGA が送信するタイミングでは HI-Z にするようにしたら L レベルになってしまう。



    ただちょっとうまくいきかけたこともあったのだ。なにか値を返そうとしている。が、1 回限りで 値もおかしい。

    ... 今思えば、pull-up してたから 途中で衝突検出にひっかかったのだと思う。...そうなると XMEGA を壊してしまったとか?

    ところで、TPI のほうにも衝突検出がある。こちらは、内部で pull-up して L レベル と Hレベルの最初のクロックだけ出力。PDI と同じように 受信モード(ターゲット送信)時は HI-Z でも良いし、単に pull-up しても良い。-- こっちの方が嬉しいが、それだとクロックを上げられないのだろう。

    ... それはともかく、だいぶ嫌になってきた。気分転換に LUFA のコードを見たりしてみようと思う。

    • やはり、pull-up は使わず 出力・入力 のどちらかにしていた。
    • 送信する場合は、DATA を H にしてから、1 clock 待っている。(↓↑)
    • 受信する場合は、送信完了を待ってから受信にし、その後で TX を HI-Z に している。

追記: コードデバッグ中(4) -- signature まで確認

  • angel_loader-1.1i.zip (ファームウェア)


  • KEY を送り、PDI_CS_STATUS を READ したところ。OK なので enable 完了

  • シグネチャの最初の 0x1E を読んだところ。
    (pdi_test-ok1.alc : LAP-C ファイル)

    シグネチャ読み込みまで確認できた。XMEGA が壊れたかと思ったが、電源かケーブルの接触の問題だったようだ。

    変更点はよくわからなく... 。もちろん 受信時には、HI-Z にした。あと 受信エラーになったら 次に送信モードにするときに BREAK を送るようにした。(1 回しか 戻ってこないのは、BREAK を送っていないせいだと思うので)。

    これで基本的な通信は OK 。デジアナはもう必要ない。

    (メモ)
  • 受信モードで終わるようにしているが、両者 HI-Z にしているのでマズそう。むしろ受信が終わったら、送信モードにした方が良い。後で直さないと。
  • BREAK はコード入れただけで未検証これも要確認。
  • 1MHz 以上で動作を変えているところがある。これも要検証。
     - TX か RX のどちらかを enable しないと CLOCK が出ないようでバグってた。
  • 最低クロックをあまり低くすると timeout が長くなって デジアナで見にくいので 250KHz にしている。最大クロックは、4MHz (16MHz の場合 8MHz) だがもちろん未検証。
  • せっかく USART 版を 作ったのだが、PORT で制御したい理由があった。これもつくらなくては。

追記: コードデバッグ中(5) -- read ができるようになった。

  • angel_loader-1.1j.zip (ファームウェア)

    read 自体はすんなりできるようにいなったのだが、どうも値がおかしい。よくよく見ると 0x90 のところにシグネチャが見える。

    で、首を傾げていたのだが、原因が分かった。LD 用のポインタを設定するときに 3 バイトのモードを使っていたのだが 上位バイトになにか設定されているようで、違うところ --シグネチャがあるところを READ してたらしい。4 バイトをちゃんと設定するようにしたら OK になった。

    NVM_CMD には、どうも READ_NVM(0x43)を設定すれば良いらしい。よく分からなかったのだが、LUFA のコードをまねしてみたら OK になった。ただ READ ができるようになったといっても正しいかどうかは、未だ分からない。WRITE できるようにならないと。

    さて、SOFT モードはどうしよう。... これは以前作ったボードが XMEGA ボードに付くようにしたのだが、PORT しか割り当てていないので、急遽つくることにした。

    • idle のとき タイマー割り込みで、クロック出しておけば良さそう。シリアルといっても SPI みたいなものだから、通信するときは同期でいける。問題はタイマー割り込みの頻度。-- 今は 250Hz にしているが.. 64 倍の 16KHz にするか。



追記: コードデバッグ中(6) -- SOFT モード ができるようになった。

  • angel_loader-1.1k.zip (ファームウェア)


    (pdi_test-soft.alc : LAP-C ファイル)

    32kHz で割り込みを発生させて 送受信する SOFT_PDITPI が動いた。これで適当に PORT を割りあててしまったボード で書き込むようなこともできるはず。

      上記の画像は、REPEAT 命令を使って 32 バイト連続で読み込もうとしているところ。期待通りに動くようになった。

      ところで、PDI サポートでの通信部分は yukiさんのコードを使わせてもらっていたのだが、デバッグが進むうち書き換えが進んでほんのわずかになってしまっていた。結局これも書き換えて 全部自分のコードにした。

    ただ、書き込みのテストは完了していない。今の状況は、なんとか ページの一部が書けるようになったところ。 flash, boot, application , と usersig は、ページサイズが 256 バイトだが 2 ページ目の 0x1fe からの 2 バイトが書けていない。途中 0xff のデータを使ったのでどこまで書けたかも分からない。eeprom のページサイズは 32 バイト。これも 2 ページ目から書けていない。

    こんなところだが、まぁなんとかなるだろう。

    ところで、chip erase で FLASH , EEPROM は初期化されたのだが usersig は初期化されなかった。一応 write_byte で書き込むと section erase するようなオペレーションを付けておいた。これは、terminal mode で 1 バイトだけ書き込む操作で使える。本当は 1 バイトの書き換えだが エラーにするかわりに 消去する仕様にした。で、問題は usersig の消去をいつやるか。とりあえず eeprom , boot, application, usersig は paged_write のときに write_byte 使って消去することにしている。(都合が悪そうなら変更する)


追記: コードデバッグ中(7) -- tiny10 入手。TPI もテスト中。

tiny10 を手に入れたので、テストしてみることにした。TPI などちょろいだろうと思ってたが、まだ書き込みができていない。ロジアナでみているが、シーケンスは正しそうなのだが、書かれない。ひょっとして、3.3V 電源しか使っていないのが原因? (TPI は 5V)

ちなみに、nega32u4 も同時に入手したので、対応中。一応は動いているのだが、USB の認識に失敗することが多い。(認識されればちゃんと動く)
posted by すz at 22:02| Comment(64) | TrackBack(0) | 日記

2010年10月24日

taobaoでジャンク基板

ちょっと妙なものを見つけてしまった。



これは、ここで売っている Jz4725(無印)搭載の PMP の基板で製造途中のもの。なんと 23元(16円換算でも 368円!)。taobao だから 代行業者を通さないと買うのが難しいし、単体で 1 個だけ買うわけにも行かないのだが...

    jz47xx は、中国 Ingenic 社が作っている MIPS32 互換の CPU で 360MHz で動作する。中国の製品では珍しく Linux や ブートローダー ツールなどの ソースコードが公開されている。現行のCPU は、PMP用では Jz4755 と Jz4725B で Jz4725 は 旧製品。

    推測だけで書くが、安PMP も Jz4725 から Jz4725B/Jz4755 に切り替わっているようだ。Jz4725B はピン互換で性能も同じなのだが、ソフト見えでは互換性がなくなってしまっている。Jz4725 には新しいファームウェアが供給されないから 載せてしまったボードは使い道がないのだろう。

    ただ中国本国でどれだけ格安なのかは想像できない。なにしろ、まともなメーカーが作った jz4755 が載った PMP の製品が 150元ぐらいからある。LCD,バッテリー,FLASH(4G),RAM が載ってこの値段だから CPU だけのボードなら 50元以下の原価かも知れない。

SDRAM も FLASH も載っていないが、usb からブートできるし、SDRAM さえ載せれば 動きそうな感じ。
SDRAM も持っているし、ちょっと試しに買ってみようかと思っている。

    Jz4725 の データシートやプログラミングマニュアルは入手済み。usb からブートするツールや Linux のソースコードも公開されていて入手済み。-- 壊れてさえいなければ使えるはず。

    追記: 代行業者で見積りを取ってみたが、買えなかった。残念。
    写真はサンプルで、同じものとは限らないようだし。諦めよう。


まぁジャンク基板をわざわざ買わなくても、マジカル上海の Neo Slim 3000 が 1999円のセール中で、こちらのほうがおすすめ。(データシートがないが)液晶 や バッテリー, FM ラジオモジュール取りで元がとれそうな値段にまで下がっている。

    入手できた。
  • バッテリーが放電してしまっている。バッテリー自体に過放電保護があるし、充電も専用IC だから 普通に使える状態になると思う。
  • ファームウェアも 古いようだ。試しに使ってみるなら ここから V1.7 をダウンロードしたほうが良いかも。

これはこれで予備に買い増ししておくと思うが ...ジャンクを再生して電子工作に使えるなら、それはそれで楽しいかも知れない。

    ... とは言え、液晶つないでPMPに仕立てるのでは意味がない。-- すなおにPMP買ったほうが安く付く。
    Linux もあるが、Jz4725 と Jz4725B では大分違う。Linux を動かそうとしているのは Jz4725B のほうで、Jz4725 でがんばろうとはあまり思っていない。

    こいつには、電子工作で役に立ってもらおうと思っている。Linux の移植などしなくとも、AVR でやっていたレベルのプログラムは usb からロードして動かせる。

    すくなくとも 使える I/O は、I2C と 16bit PWM 2 つ(I2C と排他)。 あと LCD 用のピン 16 + 4ぐらいを GPIO として使える。当然ながら 既に付いている サウンド出力や MicroSD も 使える。マイクと FM モジュール用の LINEIN も大丈夫だろう。ボタンも付いているが、自由に使えるかどうかは不明。PIN 不足のため大概凝った実装になっているので、解析しないと無理。ちなみに、MicroSD は SPI ではない。SD の 1bit インターフェイスで使えるようにするのは骨かも知れない。

    裏面に液晶接続用のパッドがあるはずで、液晶サイズは、2.8inch 〜 3.2 inch ぐらい? ならば 0.8mm 〜 1mm ピッチで 36pin 〜 44pin のものだろう。( 0.5mm ピッチでコネクタが必要だと、コネクタの高さがあるから、コネクタが表面に来るはず。)

      液晶コントローラの接続は 2 通りある。HYNC/VSYNC を使うLCD接続と コントローラを使う SLCD接続。どちらの接続かかわからないが、データ線 16bit 分と HSYNC(RS)/VSYNC(WR) は確実に使う。たぶん SLCD接続 で、RESET/CS に割り当てた GPIO として使える。

    シリアルの Tx はたぶん空いている。.. のだが線が引き出せないかも知れない。Rx も内部用の PWM に使われてしまっているかも知れない。シリアルはあてにしないほうが無難。

    そのかわり、USB が通信に使えると思う。ツールのソースもあるし Linux のドライバソースもあるから使い方は分かる。AT90USB162 で作ったのを移植したりすれば大丈夫だろう。

    スタンドアローンで使うには、少なくとも NAND FLASH を付けなくてはならない。FLASH は、使わなくなった eeePC 用の SSD とか 時代遅れになった PMP から取れるのだが、0.5mm ピッチのハンダ付けには自信がないし、すなおに PMP 使ったほうが楽そうなので そこまでしないかも。

    一応 バッテリー充電専用 IC は付いているように見える。5/6 pin の IC は 4 つ載っていて、コイル付きが 2 つ。コイル付きは、core 用 1.8V と LCD 昇圧用。残りが 2 つもあり、ひとつは 3.3V 用としてもあと 1つ余る。余るなら バッテリー充電専用 IC のはず。-- もう見方をマスターしてしまった。
    ただ、バッテリー周りは、満充電センスと 外部電源があるかどうかのセンス、あと場合によっては、外部電源時のバッテリー使用ストップとかのスイッチがあるはずで、それらを解析しないといけない。

    スピーカーも付くものだと思うが、8pin の IC が見えない。ひょっとしたら裏面かも。



こっちは、同じところで買える RK2706 の 基板で 22元。SDRAM は載っているものの FLASH がない。ただ、FM ラジオモジュールが付いている。

RK2706 は良く知らないので使えるような気がしない。.. のだが 使いこなせる人もいるかも知れないので、ついでに紹介。

    RK2706 のデータシートぐらいは入手できているのだが、boot の仕組みがいまいち分からない。
    boot できなければ、ただの部品取り用ジャンクにしかならないし。




ちなみこんなのもある。これは、Jz4740 の CPU 基板で こことかで 270元で売っている。

全ピンを引き出しているので、USB-HOST とか 全機能が使える。PMP ベースより自由度が高い。

2011/09/22 追記

タオバオ新幹線』というところを見つけたのでアレコレ買うついでに買ってみることにした。

    以前 別のところで見積もりしたときは、あっさり無視されたが、一応交渉してくれたようで 6 個 買えることになった。

    ( 23 元 x 6 + 中国送料 10 元 ) x 14.0(レート) = 2072円
    + 国際送料 600g 分

    これで、なにかちょっとでも遊べたら、安い買い物だと思える。

    ちなみに、写真のとおりのものが来るとは限らない。あとメモリも Nand Flash も付いていない。まともな品なら SD-RAM を付けるだけで、動かせるはずなのだが...

    それはともかく、電子部品でも 躊躇しないで代行してくれるようだ。

    ちなみに他のアレコレとは ...
  • Jz4755 CPU Chip 21 元
  • 4.3 inch タッチパネル液晶 58 元
  • 5 inch タッチパネル液晶 85 元
  • 紫光 T816 (Jz4755 PMP) 145 元
  • IQQ M1 (5 inch MIPS Android) 369 元

    Jz4755 CPU Chip は、0.4mm ピッチでちょっと手に負えそうにないのだが、買えなくなるかも知れないので一応確保。いつかボードを作ってみたい。タッチパネル液晶は、40pin で aitendo の これのタッチパネル付きと たぶん互換。紫光 T816 は、Jz4755 の開発用。付属品なしなら 135元まで安くなる。IQQ M1 は、MIPS Android 。少々もっさりのはずだが、サスペンドでバッテリーが持つのが売り。(ちなみに、デザインがスマートになった IQQ M2 がそろそろ出るのでお薦めかどうかは微妙)。これは、開発用でなく持ち歩いて使ってみたい。

    9/30 追記: 上記が届いた。

    まずは、主題のジャンクボード。これは、写真のものが届いた。基板の周りの捨て基板?がついたままで、明らかに未使用。問題は生きているかどうかだが、USB コネクタに一番近いボタンを押しながら USB に差し込むと USB Boot になり ドライバを要求された。SD-RAM も NAND-Flash もついていないが USB Boot にはできるのだ。(USB boot は、ROM で動作し 32kb のキャッシュにブートローダをロードする)

    CPU は、Jz4725 無印。USB boot で動かしてみるだけなら SD-RAM をつければ良いはず。スタンドアローンで使うためには、NAND-Flash もつけないといけない。

    基板の裏には、よくある 37pin ? の液晶のパターンが付いている。ただ、液晶をつなげるのなら、最初から PMP を買ったほうが安い。なにしろ Jz4725B の PMP が100元であるのだ。

    一応、これは電子工作で使うつもり。信号線は、FMラジオのパターンから I2C,Line-in , 液晶のパターンから 数十本の GPIO が取り出せる。

    Jz4755 CPU Chip も入手はできた。だが、板にテープで貼ってあるだけのような ... これでなにか作ったとしてちゃんと動くかどうかは不安。-- ただのコレクションになってしまいそうだ。

    紫光 T816 は、Jz4755 でなく全然違う CPU かも。見慣れた画面ではなかった。中国語と英語しかサポートしておらず OS も全然違うようだ。T816 も 見慣れた画面のものがあるはずなのだが... どうもハズレらしい。

    IQQ M1 は、期待通りのもの。だが、ここでは詳細は書かない。

2012/10/14 いまさら追記

    ジャンク基板だが、よく見たら SDRAM と NAND FLASH を外した痕跡がある。その際に 一部の CR が取れてしまっているようだ。取れて違うパーツにくっついたものもある。また、SDRAM と NAND FLASH にブリッジが見られる。USB に接続する前に ブリッジだけは取り除かないと危ない。

    取れたパーツは、数個で 1608 の 抵抗/コンデンサ。ちなみに、その近くに バッテリー充電IC のパターンがある。空きパターンなのかついでに外したのかは判別できない。回路的にはたいしたことがなさそうなので、RD を参考に復元しないと。

    これについては、記事を起こすかも。
posted by すz at 13:28| Comment(0) | TrackBack(0) | 日記

2010年10月13日

中華バッテリーについて

まずは、次の記事を読んでみて欲しい。

この記事が正しいか?と言われれば概ね正しいように思える。だが、少々危険であることをアピールしすぎのような気もする。また、高いものなら安全で安いものは危険という認識で書かれているように見受けられた。

中国製電池は、いろんなものに使われている。盲目的に危険だと思ってしまえば、なにも買えなくなる。

ここでは、中国製電池が実際どんなものなのか、調べたものについて写真を載せてまとめておこうと思う。




まずは、これ。$4.20 で買った NDS LL Li-ion Battery (3.7V 2000mAh) の分解写真。

  • DSi 用のバッテリーにゲタを履かせて、LL に入るようにしただけに見える。容量が 2000mAH もあるはずはなく、良くて 850mAH ではないかと思われる。中華バッテリーにおいては、容量は詐称するものであって、容量を増やすためにわざわざ危険な構造などにはしないはず。

  • バッテリーの電極の絶縁には紙が使われている。バッテリー本体のショートは、たいへん恐ろしく濡らすことは厳禁。だが、これは中華バッテリーに限ったことではない。
    絶縁体にダンボールとは、ここのことなのだろうか? 内部には電解液が入っているはずで、さすがに内部には使わないと思うのだが...

  • 防爆弁 というのは、確認できなかった。リポ電池なら膨らむし - それが過ぎれば破裂はするかも知れないが爆発には至らないと思うのだが、カンタイプで内圧を逃がす仕組みがないとすれば結構怖い。

  • 保護回路はちゃんと載っている。後述するが、6本足の IC が 2 個使われているのは典型的な回路で、過放電/過充電/過電流保護の機能がある。ちなみに保護回路とバッテリーの間には黒いスポンジが入っていた。(写真を取るために外してある。)

  • 電極は、中央が(-)、ケース側は (+) 。保護回路に Nch MOS FET を使う関係で (-) 側に保護回路が入っていて (+) 側は common。



DSL用の互換バッテリーだが似たようなもの。もちろん 2000mAH などあるはずもない。



こちらは、2.4 inch のデジタルフォトフレームに載っていたバッテリー(150mAH 程度)の保護回路。

  • 電圧を 測定したら 0V で死んだものとばかり思い(保護回路の写真でも撮ろうと)黄色のフィルムを剥がしてみた。念のために、出てきたバッテリー側の電極の電圧を測定してみたら.. 2.79Vあった。

  • IC には、DW01 と 8205 のマークがある。DW01 が保護 IC で、8205 が 外付けの Nch MOS FET 。データシートも手に入る。DW01データシート, 8205データシート

  • かならずしも、DW01 と 8205 のマークがあるとは限らないのだが、互換品なら、100Ω(前後),1KΩ(前後),積層セラミックコンデンサの 3 つの部品が使われている。

  • DW01 のデータシートを見ると 4.3V ±50mV で過充電保護が効く。この電圧は少々高めで これをあてにして簡易な充電回路を組むのは危険。

  • DW01の過電流保護には、二段階ある。一定の時間過電流が流れると 接続を切るが、短絡して大電流が流れると速やかに接続を切るようになっている。




問題なのは、これ。モトローラ携帯電話用格安互換バッテリー。




なにやら保護回路らしき基板はあるのだが、1 個しか IC が載っていない上に、他に IC を載せるためのパターンがある。

  • IC のマークは、2936H 。

  • 端子は取ってしまっている。




IC の 2936H を頼りに画像検索したところ、DW01 も一緒に載った写真を発見した。基板の端子の形状を見るとこれも モトローラ携帯電話用。DW01 も一緒に載るということは、2936H は保護用IC でない?。すくなくとも、DW01 と同程度の機能は持っていないはず。(そうでなければ一緒に使う意味が無い)

    同系統の BT60互換バッテリーのレビューを見ると恐ろしいことが書いてある。

    Do not buy - exploded and caused fire

    I bought twelve for a battery pack. When they arrived, I noticed they were made in 2006 but thought they are OK. After a month of work one of the batteries exploded and the fire started, with other batteries exploding: open fire, debris everywhere. It was like nightmare, I was happy to be at home when it happened.

    Bottomline: Do not buy. They are old and not so protected as they should be.





こちらは、千石電商で 格安(515円)で売っている モバイル充電器 スリムポーターの中身。

  • 簡単に分解できるが、生のバッテリーが載っているので、間違っても(バッテリー本体の)電極をショートさせてはいけない。

  • 保護回路は、基板の左下の 2 つの IC 。6pin IC に、DW01 のマーキングはないが、互換なのは確か。下は TSSOP-8の 8205A(データシート) 互換 Nch MOS FET 。(回路を確かめた)

  • 中央の 5pin の IC は、EMC5754(データシート) で、LTC4054互換の充電用IC。

  • バッテリーの電圧を測ったところ 3.76-3.78V で過放電してはいなかった。

  • 満充電の電圧は、4.16 - 4.18V だった。





これは、電子タバコの中のバッテリー。

  • リポ電池のように見える。容量は 150mAH 前後らしい。

  • 満充電を知らせるしくみはあるが、充電がそれで止まるかどうかは不明。独立したバッテリー保護回路は入ってはいない。

  • 万が一のときは、どうなるのだろう? 先端は、キャップとコントローラ基板をはめているだけだから、先端から圧力が逃げると思われるが ..





これは、2600mAH 表記のソーラーバッテリー。 (写真は、リンク先から転載)

  • 容量は 2400mAH -- 例によって(わずかだが)詐称している。

  • 保護回路は、基板に載っていて DW01+8205A 。

  • 問題は充電回路。0.5Ω とダイオードを介して バッテリーの (+) 側に直接接続されている。

  • 満充電を知らせるしくみはある。信号線を 8205A にパラレルに接続することで、充電を止めることは出来そうだが、実際に満充電(4.2V)で充電が止まるかどうかは不明。DW01 を期待した回路なら 4.3V になってしまう。

  • 2000mAH表記のソーラーバッテリーも似た様なもの。こちらは入手済みなので後日調べる。




単三タイプのバッテリー用 プロテクト基板

  • マーキングは読めないが、DW01(互換?) + 8205A(TSSOP-8) なのは明らか。

  • 部品が、抵抗 2 つ(データシート通りの 100Ω+1KΩ) と 積層セラミックコンデンサ ということからも判断できる。

バッテリーと PSE法



リチウムイオン電池が規制対象になっているのだが、400ワット/リットルという 体積エネルギー密度の意味がよくわかってなかった。

ダイヤテック:リチウム・イオンとリチウム・ポリマーの相違点 の記事をみると..

  • リチウムポリマーを採用し、体積エネルギー密度も250〜300ワット時毎リットル程度です。
  • ※リチウムポリマー方式は体積エネルギー密度を400ワット時毎リットル以上にすることが、技術的に非常に困難です。

とかいてある。リポ電池だから対象外とよく言われるのはそういう理由だったのか。

ちなみに、装置に組み込んだ状態のものも規制の対象外。普通組み込まれているのはリポ電池だから二重に問題ないわけだ。-- 電子タバコも PSE法 的には問題ない。

ちょっと手持ちのバッテリーで 体積エネルギー密度 を見積もってみよう。

  • リポ電池 3.7V 650mAH 453048 / 実際の電池本体のサイズ: 3.0x3.5x0.4
     4.2cc 2.4W で 570 W/L ... あれ?
     453048 はサイズだと思われるのでそれを採用すると 6.5 cc で 370 W/L 。
  • DSL用の互換バッテリー 3.7V / 実際の電池本体のサイズ: 2.2x4.7x0.60
    6.2 cc 3.1W(840mAH とみなす) で 500W/L

かえってよくわからなくなった。まぁ実際の容量も 実際の体積もよくわからないのだから当然か。
ただ、400ワット時毎リットルというのは、わりと微妙な値だということは分かった。



posted by すz at 19:44| Comment(0) | TrackBack(0) | 日記

2010年09月15日

I2C→RS232C変換(メモ)

Jz4725B の中華PMPのシリアルは空いていないことが多い。汎用的に使えそうな I/O は I2C だけ。

    RxD が LCD バックライトの PWM に使われていたりする。TxD は、空いているような気がするが、カーネルメッセージを垂れ流していたりしそう。I2C は、FMラジオ(大概オプションになっている) 接続に使っているので、使えるのだ。

    I2C 経由で付けてみたいデバイスは、Bluetooth , キーパッド(or フルキーボード) , GPS , Gセンサ , 温度/湿度計 , 電圧/電流計 ぐらいか。

    温度/湿度計 は ロギングが目的なのだが ... バックライト OFF でいったいどれぐらいバッテリーが持つのだろう? 一度ちゃんと調べてみたい。

      A-33 で ちょっとやってみている。5 時間で 目盛り 1 つ減っただけ。11 時間で目盛り2つ。14 時間で目盛り 3 つ減った。だが 15時間は持たなかった。
      ちなみに、状態は LCD のバックライトを Off にして IDLE 状態。サスペンドしているわけではない。400mAH の容量を 15時間で使うとすれば 平均 26mA 流れていることになる。.. これはまぁそんなものか。
      -- ただどうもおかしい。1 時間ほどで Full 充電になった。今度は A-41 でやってみる。


そういうものにデバイスを付けたい場合、マイクロコントローラでスレーブI2C デバイスを作り、シリアルなどに変換してやる必要がある。

一例として、RS232C を付けたい場合どうしたら良いのか考察してみる。

I2C の性質について


  • I2Cスレーブは、マスタが決めたタイミングで データを返さないといけない。だから、データが用意できるまでホストを待たせるようなことはできず、既にあるデータしか返せない。

  • データの受け取りも同様で、バッファリングできる分しか一時には受け取れない。

  • READ/WRITE はパケットの属性で、SPI のように コマンドを送っての READ という操作はできない。

    ただし、複数のパケットの送受信を連続して行うことはできる。

  • 送られたデータの受け取り拒否はだけはできる。WRITE の場合、スレーブは、バッファ以上のデータを受け取らないことはできるが、READ で 存在しないデータの READ が来てもなんらかのデータを返さなければならない。


こういう性質のもので、一般に 多数の機能がある I2C スレーブ IC などは次のような使い方をする。

  • WRITE する場合、レジスタ番号(or ファンクション番号) を 第一バイトに設定する。次からのデータは、レジスタに書き込むデータ(or その機能に対して送るデータ)。

  • メモリのようなデバイスは、第二、第三バイトにアドレスを設定し、そこから後にデータが続くような使い方をする。

  • READ の場合は、すべてのレジスタを順に送るタイプがある。

  • 最初に レジスタ番号だけ WRITE して、それから READ を行い 該当レジスタのデータを送るようなタイプもある。

  • メモリのようなデバイスは、最初に アドレスだけ設定して データなしの WRITE を行い。次の READ で 該当アドレスからの READ を行う。


プロトコルの基本的な設計

さて、RS232C はストリームなので、アドレッシングの機能は必要ないのだが、バッファーは FULL になる場合が出てくる。READ も同様で バッファーが空のときどうするか考えないといけない。

とりあえず、

  • 制御とかする必要があるので、第一バイトは ファンクション番号とする。
  • READ も複数のデータの種類があるので ファンクション番号だけの WRITE が、READ のデータの種類を 設定する機能と定義

ということにしておこう。

バッファーの 制御については、

  • WRITE で FULL になったら NAK を返し受け取り拒否
  • READ の第一バイトは、最大データ数として データが続く。空になったら 不定のデータを返す。

こんな風にしておけば良さそう。

制御については、

  • 多バイトのコンフィグレーションレジスタを定義する。
  • 1 バイトしか WRITE しなければ 1 バイト目だけを変更する。
  • 後ろの方のバイトに あまり使わない機能を置く。

こんな感じで設計すれば良いだろう。

上記を基本の設計として、すこしモデファイすることにする。

READ で、READ のデータの種類を設定するのに、ファンクション番号だけの WRITE を使うと書いたが、READ のデータの種類を 1 種類にして、WRITE を不要にする。

  • ステータス(1バイト) -- READ 可能なバイト数 -- 実際のデータ
    という風にひとつづきにして、ステータス だけが必要なときは 1 バイトの READ を行う。

    どれだけ READ できるか知りたいときは、2 バイトの READ を行い、あらためて データの READ を行う。

    大きなバッファーを用意して その分を読み込み 有効な データを 後で知るという使い方も OK 。

  • WRITE バッファーの残量をステータスに含めたいところだが、Xon/Xoff のように 1/3 以下になったら bit を立てるというものでも制御するには十分だろう。


プロトコルの詳細な設計

上記の考察をもとに 詳細を決めていこう。

(後述)

どんなマイクロコントローラを使うか

普通なら AVR を使うとして、Tiny2313 で 作れそうな内容。ただバッファーが少ない。GPS などはそれでも十分だろうが、Bluetooth では足りないかも知れない。まぁそういうときは、Mega328P を使えばよい。

ついでに書くと I/O エクスパンダなどは、I2C の線に 加えて 割り込み用の線を持っている。普通だとポーリングするしかないのだが、割り込みを使えれば、オーバヘッドと応答性能を改善できる。

普通と書いたが、USB Bluetoothドングル を使うなら、PIC24FJ64GB002/PIC24FJ32GB002 を使うことになるだろう。

プログラムが作り易く、コンパクトで USB HOST の機能を持っているのはこれぐらいしかないので、これ一択になるはずだ。

I2C スレーブの機能もあるし、メモリも多いので、十分だろう。

おまけ TI の キーパッドスキャン IC TCA8418

I2C は、低速のデバイスを接続するなら十分。キーパッドを付ける専用の IC も出ている。

この IC は、8 ROW x 10 COL で 80個までのキーを扱える。ちょっとデータシートを見てみたが、キーの状態を読み取れるが、キーの PRESS / RELEASE イベントを発生させ 10 個まで FIFO でバッファリングできるようだ。

RS232C の実装でヒントがないか -- バッファリングの部分をチェックしてみようと思う。

おなじような キーパッド制御をするプログラムを書くときにも プロトコルが参考にできそうだ。
( このチップ自身は BGA なので、個人では使えない )
たぶんこういうのも Tiny2313 でぎりぎり実装できるのだろう。

キーの数がすくなければ、14 pin の Tiny44A も使えそうだ。

メモ:I2C 経由で付けてみたいデバイスについて
posted by すz at 00:19| Comment(34) | TrackBack(0) | 日記

2010年09月14日

Digikeyで買い物(2010)

そろそろ ATmega32u4 が、入っているんじゃないかと思いデジキーに久々にアクセスしてみた。

... 見てみたら なんと リードタイムが来年になっていた。

もうさすがに、ATmega32u4 を待つのはやめた。

あと XMEGA を見てみたら .. A1 以外で XMEGA192D3 だけが買えるようになっていた。欲しいのは A3 だが、しょうがないので押さえておくことにした。

これだけで 7500 円分も買うのは厳しいので、某Nさんのブログにあった、SST25VF016B を買うことにした .. のだが 32Mbit の SST25VF032Bも値段があまり変わらない。... 安易に容量の大きい SST25VF032B にした。

    データシートをちょっと見てみたが、まえに使った A25L080とあまり変わらないようだ。A25L080 の使い方に追記していこう。

あと、最近 中華PMPの中を見ているのだが、47uF とか 100uF のタンタルコン(3216 ぐらい) が使われているのを知って、探してみたらあったので買ってみることにした。買ったのは、Rohm の TCA0J476M8R,TCTAL0J107M8R 3216 で 6.3v 耐圧。100uF が 10個 849円、47uF が 10個 345円。

    普通ヘッドホンアンプの出力のカップリングコンデンサには 220uF を使うのだが、チェックした 中華PMP は、どうも直列に抵抗を入れて、小容量で済ませているらしい。出力は小さくなるが.. イヤホンも(ネオジウム使ったりして)性能が上がっているから それでも良いのだろう。

    100uF というのは、33Ωぐらいの抵抗を入れて 最大出力を 1/4 (7mW ぐらい?)にするのだろうけれど 47uF で済ます場合 1/16 にするのだろうか?

    あと、中には、10uF というのもあった。それは、さすがにどうかと思う。 よく見たら 107 と書いてあった。

    ちなみに、Ben NanoNote の回路図をみたが 100uF だった。ポップノイズ対策をしていたりして結構参考になる。

    http://en.qi-hardware.com/w/images/9/9c/Lb60_schematic.pdf

    あれ? 4V 耐圧を使っている。-- 4V なら F950G227MSAAQ2 とか 3216 で 220uF まであるのか。高いけど。


あとハンダ 。0.5mm とか日本でなじみのないサイズだった。


追記: もう日本に来ている。月・火あたりに発注すれば、週末には届きそう。

NARITA, JP 09/15/2010 3:51 A.M. IN TRANSIT TO
LOUISVILLE, KY, US 09/15/2010 3:50 A.M. DEPARTURE SCAN
09/15/2010 3:25 A.M. DEPARTURE SCAN
09/15/2010 12:32 A.M. ARRIVAL SCAN
MINNEAPOLIS, MN, US 09/14/2010 9:48 P.M. DEPARTURE SCAN
09/14/2010 8:07 P.M. ARRIVAL SCAN
THIEF RIVER FALLS, MN, US 09/14/2010 1:30 P.M. DEPARTURE SCAN
09/14/2010 12:14 P.M. ORIGIN SCAN
US 09/14/2010 3:52 P.M. BILLING INFORMATION RECEIVED
posted by すz at 22:17| Comment(0) | TrackBack(0) | 日記

2010年08月31日

Netduino

スイッチサイエンスで扱いはじめた Netduino 。電子工作な人たちのフォロー率が高いらしい。

ARM だが、Arduino とコネクタに互換性があり、各種シールドが使えるのが目新しい。

ダウンロードのページ を見ると いろいろな情報が公開されている。

開発環境は、.NET Micro Framework だそうだが、firmware のソース、開発環境でつかうライブラリのソース、回路図やボードレイアウト(Eagle brdファイル) も公開している。

で、ちょっと回路図を見てみた。

コネクタのアサインは特殊機能を優先して配置している。
出ている機能は、PWM x 4 , シリアル x 2, SPI , TWM , ADC

TWM , ADC は 別々のピンの機能だが、切り替えられるようになっていて、互換性を高めている。

SPI など シリアル系は DMA が可能。firmware で使っているかどうか分からないが。

ADC もなかなか高速。... というか XMEGA を除く AVR の ADC が低速なだけなのだが。

ちなみに、水晶は、18.432MHz。 中途半端だが、これには理由がある。この値だと USB からの SAMBA BOOT が可能になるのだ。

100 pin の IC を使いながら、ほとんどのピンを切り捨てて Arduino 互換に徹するなんてなかなかできない。

    そういえば Japaneno 。最初の計画は、ATmega32u4 で チップの供給が遅れていて実現しなかったと思っているのだが、実現していたらどういうピン配置にしていたのだろう?

なかなか興味深い... のではあるが、今は別のことをしているので手を出すつもりはない。他の人がどう使っていくか見ているだけにしようと思う。

    別に秘密ではないので書いておくと今興味があるのは、Ingenic 社の JZ4725B(など) を積んだ安物の中華PMP。(安いものでは、30 ドル台前半で買える)

    この Ingenic の チップは、MIPS アーキテクチャで 400MHz ぐらいまでで動作する。

    Linux や u-boot とかソースコードが公開されているのが魅力の1つだが .. usb からプログラムをロードしてのブートが出来て、そのツールのソースコードまで公開されているのが、最も大きな魅力。いろいろ作らなくてはならないが、チップを生で使うことも出来るのだ。

    電子工作観点だと パッケージは、0.4 mm 128pin 。-- 一応自分で基板が作れる範囲。(ハンダ付けは自分ではできなさそう)。入手も一応可能で、taobao なんかを見ていると 1 個 20元 とか 15.5元で売られている。1 元 = 14 円だとして 20元 = 280 円?

    RAM は、SDRAM 。DDR2 でないのは性能的に残念な点だが、逆に電子工作ネタにできる。

    まぁ開発用ボードを入手したり作ったりするまでもなく、いろいろなデバイスが準備されている PMP を使えば開発が楽しめるわけで、それで遊ぼうと思っているわけだ。

    ちなみに、デバイス付けたりするのに使えそうなポートは JZ4725B の場合 ほとんどない。普通 FM ラジオは載っているので、それをコントロールする I2C ぐらい。シリアルは使ってなければ線が出ていることはあまりない。使っているなら自由には使えない。ただし LCD を外したりすれば、その分は使えそう。

    あと、LED すら載っていないのがほとんど。デバッグで LED ピカピカさせたいなら、LCD のバックライトぐらいしかない。

    こんな風に悩みは多いのだが、USB は自由になるし 外部デバイスの依存性がない環境を用意できれば、逆に使うのが楽になりそうな気もしている。

    ついでなので Jz4725B を採用している 中華PMP の紹介。

    • aneca A-41 FocalPrice 33.80 ドル (1 ドル 87円として 2940円(送料無料))
      -- 2.4 inch LCD の PMP。 RAM 16MB/FLASH 2GB(4Kpage)
      -- 黒モデルは Jz4725(無印)かも。
    • aneca A-33 FocalPrice 37.80 ドル(送料無料)
      -- 3.0 inch LCD (400x240) の PMP。 RAM 16MB/FLASH 4GB
      -- Jz4725B を確認。
    • P5-5 FocalPrice 43.62ドル(送料無料) / DealExtreme 46.50 ドル(送料無料)
      -- 2.8 inch の ゲーム機 兼 PMP。 RAM 16MB/FLASH 2GB(4Kpage)
    • Neo Slim 3000 マジカル上海 3999円
      -- 3.5 inch の ゲーム機 兼 PMP。 RAM 32MB/FLASH 2GB(2Kpage)
    • 追記(2010/10/23): 1999円になっている。そろそろ販売終了か。

    実用としてはどれもイマイチかも知れない。400x226 30fps の H.264 が音ズレしていくレベル。aneca の日本語対応はだいぶまともだが、それ以外はひどい。まあ安PMP だから。お気に入りは A-41(→A-33 になった) 。
    Jz4725B は Port が足りないので ボタンの実装に苦労しているようだ。Neo Slim 3000 は、LCD と共用。P5-5 はコントローラを付けている。A-41 はもっと変かも。-- それは良いのだが解析とかドライバ作成が面倒。
    メモリが少ないのも難点だが、付け替えることは可能な範囲。

    この 4 つはそれぞれ特徴があって、どれが良いとは言えない。ただメモリの換装をしないなら Neo slim 3000 一択かもしれない。
  • 追記(2010/10/23): aneca A-41/A-33 も安いとこは売り切れた。同じ設計のものを末永く売ってくれれば嬉しいのだが、そういうわけにはいかないらしい。
    Neo slim 3000 はメモリが多めなのは良いが液晶の接続が RGBインターフェイス なので GPIO を使って気軽に表示させてみることが出来ない。... なかなか難しいものだ。

ちょっと脱線しすぎたが、もうちょっと書いておく。

    電子工作のレベルで扱える もっとも高性能な CPU は何だろう?とか考えていて PMPのCPU に行き着いた。ARM9 の rk27xx というのもあるのだが、情報はあまり公開されていないようだ。で、情報とかソースとかが手に入るのが、Jz47xx だったのだ。好都合なことに USBからブートでき、JTAG とかの機材もいらないことが後で分かった。

    taobao を知って CPU自体 も買えそうなことも分かった。

    こうなれば、自作したいような気もしてきた。(もっとも 自由に扱えるようになった後でしか考えないが)

    PMPと同じじゃつまらないし、作るのなら変わったものを考えたい。

    まずは、LCD 。HSYNC/VSYNC を使った接続(RGBインターフェイス)ではなくて、コントローラ経由(SmartLCD)なら 複数接続できる。コントローラに90°回転の機能があるから、回転表示で苦労しなくて良さそうというメリットもある。(IPU という色空間変換+拡大縮小の機能はあるのだが、IPU は回転できない。)

    320x240 の液晶を 2 枚使ったものなら他にないだろう。

    メモリは、無印SDRAM しか使えない。256Mb(32MB) の チップは、aliexpress でも買えるし taobao でもあるようだ。Jz4725B だと 16bit 幅しかないので性能は低い。

    どうせなら Jz4755 のほうが良いかもしれない。これだと 32bit 幅。176pin に増えるが 難易度はさほど変わらないような気がする。ちなみにこれも入手可能。25元 とかで値段もさほど変わらない。

      Jz4755 は、Dual core だが片側は DSP 的使い方しかできない。ひょっとしたらプログラミングも出来ないかも知れない。さらに言えば情報が入手できなくて使い方すら分からないかも。

      Jz4755 には、カメラインターフェイスがある。カメラが付くと応用範囲が広がりそう。自立したなにか... とか。

    Jz4725B も Jz4755 も SD インターフェイスが 2 つある。(MSC0/MSC1) 。ただし、MSC0 を使う場合は FLASH が使えない。この場合、MSC0 からブートできる。

      MSC0 は、両方とも 最大 80Mbps x 4bit だが、Jz4725B の MSC1 は、最大 80Mbps x 1bit 。1bit しか使わないので 遅いのだ。

    FLASH なくて良いから microSD x2 にしたいような気がする。

    ついでに書いておこう。Jz4740 は BGA で電子工作の対象にできないが、コンパクトなボードが taobao にあった。270元ぐらい。1.27mm ピッチ2列を並べるなら、(コネクタ形状が)SO-DIMM とかのほうが嬉しいんだが。

posted by すz at 23:28| Comment(0) | TrackBack(0) | 日記

2010年07月24日

電子タバコ(HEC2MOD)

最近になって電子タバコを試してみた。

理由は、dealextreme.com を利用するようになって そこで商品を見つけたのでなんとなく。



Mini Electronic Cigarette with 6-Refills $8.03
EL-501 Refills Set (10-Pack) $3.06

最初に買ったのはタバコ型ケースの本体 と別売カートリッジ。知識もなく選択基準は適当。後で知ったのだが HEC2(互換機)というものらしい。


仕組みについて



長い方の筒(バッテリー)に 電子回路が仕込まれていて、吸うと LED が赤く光るとともに、金属製のパーツ(アトマイザー)の中にある電熱線に電流を流す。"吸い" を検出するのには、2 通りあって 負圧スイッチ? と コンデンサマイクによる 気流の音検出。

    買ったのがどちらなのかはわからないが、他の HEC2 互換機のレビューに複数マイクの話題が出ているところから、マイクではないかと思う。レスポンスがすごく良いところから鑑みても マイクのような気がする。

    ちなみに、煙の元の(いわゆる)リキ が センサーに入るとどちらのタイプでも壊れそう。吸口を上にして保管するのは厳禁。

煙の元は短い筒(カートリッジ)の中の小さなタンクに入っている粘度が高い液体。

バッテリーが切れると LED が点滅し、充電中は LED が点灯→充電完了で消灯 という機能もある。

小さななかに、マイクロコントローラがあって センサに応じて 電熱線に電流を流すのを制御したり バッテリー電圧を監視したりしているわけだ。常時ON だから使わないときの消費電流の問題とか、吸い検出の正確さの問題とかもあるだろうし なかなか凝った仕掛けだ。



ただ USB に挿せる小型の充電器の機能は貧弱らしい。抵抗が入っているだけとか。-- 充電しっぱなしは危険で気を張らないといけないのが面倒。(4時間以上の充電はダメ)

さて、HEC2 互換機は 結構気に入ったのだが、電池の持ちが問題。どうにかしたいところ。高級機には MOD なるものがあって選択枝があるようなのだが ... やはりここは自作してみたい。

    ちなみに、リキッドを使っている。カートリッジを外して アトマイザーに 3 適 含ませカートリッジを付ける。これを 1 単位として、2-3 単位しか持たない。(正確なところはわからないが、感覚的には新品カートリッジ 1個分ぐらいか)

    ついでに書いておくと、カートリッジは 別売りのほう(なかのタンクが大きめ)に、不織布 (レーヨン+ポリエステル)を詰めている。 リキッドを保持するというより漏れ防止のつもり。

本体については、バッテリーが劣化するのを待って改造するとして、まずは充電器。

充電用IC は購入済みだから 口金さえなんとかすれば、作ることは出来そう。問題は充電電流をいくつにするか。劣化するのを厭わなければ どれぐらいまで流せるのだろう?

  • まず 電熱線に流す電流は 1A - 2A が普通らしい。で、RN4081 より細身だから 150mAH だとすると 10C ぐらいは流していそうだ。そういう大電流用のリチウム電池は充電も 急速充電が出来そうなイメージだが実際はどうなのだろう?

  • ラジコン関係のサイトを見ていると 20C 放電可能な電池でも 1C 充電が基本らしい。2C 充電が可能なリチウム電池もあったが、専用の充電器以外では 2C 充電をしないように という断り書きがあった。

  • というわけで、100mA 〜 150mA ぐらいに押さえておくのが無難そうという結論にした。


次に本体。バッテリー劣化したら工作開始の予定だが 2通り検討中。

(1) バッテリーをケーブルでつなぐ別体型タイプ

中身を取り出し バッテリーを抜いて代わりにコンデンサつないで バッテリーの線を出す。

バッテリーをバラすのは

  • まず先の 灰色のキャップを外す。
  • 口金が取れるなら、口金方向に LEDが付いている基板を押して抜く。
  • 取れないのが普通で、パイプカッター(ダイソー 420円)を使って切ってしまうのが一般的。

という感じだから、短くなったのを作ることになりそう。ケーブルはしなやかでないと嫌だから、イヤホンケーブル(2本線タイプを +/- で使う)か。

それを 保護回路付きの TrustFire Protected 10440 600mAh 3.7V (2-Pack) $5.08 とか TrustFire Protected 14500 3.7V 900mAh (2-Pack) $5.40 とかにつなぐ。保護回路付きにするのはショートしたときの対策 -- やっぱりショートは怖い。(当然ながら、Short circuit 保護 が明記されているのが前提)。あと、3.6V のやつはパス。入手した充電IC が3.7V 用なのもあるが、構造が古くて問題が多いイメージがあって嫌(根拠はない)。

ケースはプラ製のスイッチ付き電池ケース(2 本用)。1 本だけ入れて空いているほうに 充電回路を仕込む。

充電電流は 1/2 C にしておく。充電しながら放電も可能で、たぶんパススルーのような使い方もできるはず。供給電流を制限するので、500mA とかの USB AC アダプタも使用可能なのがパススルーと違うところ。

    保護回路を当てにできるのなら、抵抗だけでも充電回路になりそう。4.2V 以上電圧がかからないし、抵抗で電流も制限できるわけだ。ただし、Short circuit 保護, over-charge 保護 が明記されていないと怖くて当てにできない。

    10440 のほうは細かいスペックが記載されているから当てにできるかも知れない。 2.0V 差(bat 3.0V) のとき 450mA 流すとすれば 1/2 W 10Ω x2(並列) 使えば良いのか。-- でも完了間際は電流減少するし、充電IC 使ったほうが充電が早そう。専用IC は 3.0V 以下の弱った電池でも問題なく充電できるのが利点でもある。

    注意: 抵抗だけの充電器だと (保護回路があっても)過放電してしまった電池を充電するのは危険。例えば 3.0V からの充電(電圧差 2V) を標準として 抵抗値を決めると 0V になってしまったら 2.5 倍もの電流が流れる。ちなみに 専用IC は、電池が弱っているとある電圧になるまで 電流を 1/10 にしたりする(予備充電)。


(2) 一体型タイプ

一体型にするなら、回路的には単純にバッテリーだけ置き換えるのが良さそう。標準のチャージャーなら 容量に比例して充電時間が長くなるはず(4倍なら 8時間!)だから、改造したチャージャーを使ったほうが良いかも知れない。

一体型にする場合のケースはどうしよう。放熱性のよいアルミ製にしたいし、10440 使いたいし。

    14500 なら選択枝は多い。Aluminum Emergency USB Charger $3.99 なんてものや 沢山の種類があるフラッシュライトをベースにできる。

    だが、断固拒否である。10440 にはスペックが書いてあって(自分には)安心できるし、なにより軽い。いまのところ一日に 4 回ぐらいまでしか充電していないし 4倍の容量で十分なはず。


ケースの選定


2-in-1 LED + Pointer Flashlight $1.55 -- これか?
分解写真みるとよさげな気がする。ちなみに 5.6 cm x φ1.0 cm のように書いてあるが、LR44(φ11.6mm) より 10440(φ10.0mm) のほうが細いから違うはず。... と思ったら AG3(LR41:φ7.9mm) だそうだ。じゃぁダメだ。

    これには、電池や基板を固定するスペーサが付いている。この分の厚みがあるから 実際はもう少し太いかも知れない。




3-in-1 Red Laser + White Light + UV Light LED Flashlight Keychain $2.57 -- これならどうだろう? ちゃんと LR44 だ。
(2-in-1 で $2.20 の もあった。ケースしか使わないからこれで十分。)

-- 実をいうと現物は持っている。分かっていることを書くと

  • 上記の10440 は入る。長さ的には銀色のキャップから 2-3 mm ぐらいのところに正極の端が来る。
  • 筒は金属製。銀色のキャップはメッキした樹脂。底のねじもメッキした樹脂。
  • 10440の 負極は平坦ではない。フィルムの分奥まっている。
    一方底のネジは中央が空洞なので、バネが必要。-- 電池ボックスとかのバネ付き電極を空洞につっこむだけで良さそう。
  • 正極はあまり飛び出ていないが面積はある。負極は露出していないから 電極をどうするかについての自由度は高い。
  • スペース的に全部のパーツは入らない。もとのバッテリーの筒を(短くして)挿し込むような形で固定する必要がある。幸いキャップは樹脂なので加工は楽そう。
  • 最大の問題は、中のパーツをどうやって抜くかということ。
    最初の LR41 のやつの分解写真では、キャップを外すことなく、パーツを抜いていたから、同じようなこれも 底のほうへ押し出すのだと思う。だが、うまくいっていない。
    -- 破壊覚悟でラジペンで挟んで引っ張るのだろうか?
    -- 普通のラジペンは入らないことが分かった。一体どうすれば良い?
    -- ラジペンでキャップを挟んでグリグリしたところ、キャップは抜けた(当然傷だらけ)。LED やレーザーモジュールがキャップに接着されていて(キャップの)再利用は難しい感じ。




他の選択枝としては、Mini LED Flashlight Keychain $1.92 も良さそう。

-- 逆にしてスイッチ部分に口金を付ける。うまくすれば電池の交換も楽そうだ。ただ長さが足りなさそうでなにか工夫が必要そうだ。ちなみに太さは、φ1.4 cm 。電池は AG13 と書いてあるが AG13 = LR44。

写真を見ると 3ピースに見える。だが実際どうなのかは分からない。もし 3ピース でTOPが外れるなら、TOPを加工したりできるかも知れない。



どれもこれも課題が多い。-- すなおに Flashlight with Carabiner Clip (1*AAA) $4.15 つかったほうが良さそうに思えてきた。



TOP と BOTTOM はこんな感じ。太さは φ15mm で随分太い。電池を固定するための ゴムの筒が付属している。こうなると電池の熱を伝えられない。うーん。

もう少し探してみよう。




Red Laser Pointer Pen (2*AAA) $1.81 なんてものが見つかった。

単四 2 直列だ。多分筒は金属だからパイプカッターで 好きな長さに切れる。キャップはネジ式。ネジの口金が外せればキャップも使えるかも知れない。だが、使えなくとも問題はない。

    もとのバッテリーの筒が φ8 mm ちょっとでバッテリーケースが 10mm ちょっとだから、1mm 厚のアルミ板とかで巻けば入る(はず)。入ったら瞬間接着剤を流しこめば良い(はず)。長さが自由になるから接着面積も稼げて、しっかり固定できる(はず)。

ちなみに もある。なぜかちょっと高い $2.62。 太さの表記が一致しないが、10440 は 普通の単四アルカリと同じ太さだったから問題ないだろう。

ところで大事な要素を忘れていた。

LED の基板をどこに配置してどう配線するか。

LED の情報は重要だ。見えないようにするわけにはいかない。だからどこかに付けたいわけだがスペースがない。また AAA の装置を流用すると 内部は AAA ぴったりだから 配線の余地がない。
さらに 底はネジになっているから 底に付けるとしても 直接配線するわけに行かない。頭が痛い問題になりそうだ。

LR44 系を改造するなら配線するスペースぐらいは出来る。少なくとも 1.6mm の隙間はできる。-- 1mm ぐらいの基板なら 筒に配置することも可能かも知れない。



秋月の SMDプロトタイピングガラスユニバーサル基板(0.3mm厚)Cタイプ に LED を付けて 基板を筒の外に貼りつけて 配線するのかな? 筒に穴あけて線を引き込めれば少しはマシに見えるかも知れない。


充電用IC について

充電回路は、LTC4054-4.2 互換の MCP73831T-2ACI (日本語データーシート) で作るつもり。

LTC4054-4.2 互換 の 専用IC は、弱った電池を使うときの 予備充電とか トリクル充電→充電停止の機能があるから 安心して使えるのだが、デジキーとかでしか売ってなくて人には勧めづらい所がある。


おまけ:

1) アトマイザーにはリキがこびりついてくるわけだから定期的な洗浄が必要らしい。HEC2 は交換用アトマイザー もなさそうだから 長く使うには洗浄方法をマスターしなければならない。

-- というわけで 超音波清浄器も 入手してみた。まだ未使用。



ものは、「アイテック ソニックウエーブ MA-213」 あまり良いものではないかも知れないが、とりあえず洗浄したいのはアトマイザー とメガネ ぐらいなので価格と洗浄槽の大きさを優先。 ちなみに買ったのはここ

2) メンソール風味を楽しみたいなら ハッカ結晶をリキッドに入れると良いらしい。



というわけで メントールクリスタル 20g 240円というのを買ってみた。

だが 分量がさっぱりわからない。「10ml に 大きめのカケラ 3 つ」とかの説明は見たのだが、最大のカケラは 4cm ぐらいある。小さいのはどこまでも細い。耳かき 3 杯 分とかの表現ならまだ見当は付くのだが..

とりあえず 1cm ぐらいで細いやつを選んで 3 つばかり入れてみた。溶けにくいものらしいが、わりとすぐ見えなくなった。

それは良いのだが、ほとんどメンソールの風味がしない。少なすぎるのか?、実は溶けていないのか? あるいは混ざっていないのか?

入れすぎると元にもどせないので、気長にやっていこう。

    メントールクリスタルは同じ分量の無水エタノールに溶けるそうだ。メントール 1:エタノール 2 で濃い溶液を作っておけば、ハッカ油のように使えそうだ。
    -- お風呂に数滴いれたり、ハッカおしぼりとかハッカスプレーを作ったり 夏は電子タバコ以外に役に立ちそう。

... こんな感じで散財しつつ楽しくやっている。が、この手の話題はこれ以上しない予定。電子タバコ自体についても 上記で書いた内容の経過報告ぐらいにするつもりなのであしからず。

追記: MOD 第一号機を作成。

なんだかんだ能書きばかり書いてきたのだが、ついに作成した。





単四x2電池ボックスを使うのが安易で良さそうとは思っていたのだが、充電回路周りが綺麗に入れられるかどうか自信がなく躊躇していた。



はさみで切れる 0.3mm 厚のSMDプロトタイピング基板USB mini-Bコネクタ を載せたものが、電池ボックスのスイッチの穴に うまく収まることが判ったので、ヤル気が出てきた。



充電回路は、このようにした。MCP73831T-2ACI を使う。充電電流は、300mA 。充電中は 赤の LED が点灯し、完了すると 黄色の LED が点灯するようにした。

この回路を、空きスペースの 1/2 ほどを使って組む。基板は上記の SMDプロトタイピング基板。

残り 1/2 は、HEC2 をダイソーのパイプカッターで切って バッテリーを抜いたもの。




HEC2 の中身はこんな風になっている。短い黒い線はすぐ外れてしまうが、バッテリーの + に接続されている。
長い黒い線は、バッテリーの - と パイブ (GND)。赤い線は パイプの先の電極。



コントローラは、これだけ。下に マイクと マイクのカバーが付いている。線が付いているところが、黒い長い線でGND 。その上に 2 つ電極があるが、上から 赤い線(アトマイザー)、黒い短い線(バッテリー) の順。

    元のケーブルは、細い単線なのだが、作っている間に 1本づつ切れていった。結局 より線で全部を入れ替えるはめになった。だから分解の際に切れても気にする必要はない。

    入れ替える際の注意を 2 つ。

  • 赤い線(アトマイザー)の先の電極は、シリコンゴムを介してはまっているだけなので外れる。空気の穴を塞がないようにハンダ付けするわけだが、太い線だとうまく行かないかも。そこで、元の単線を少し残して輪っかを作り、そこにより線をハンダづけしている。

  • 黒い長い線を元のところにハンダづけするのは、とても難しい。かといって、パイプは鉄で 直接ハンダづけするのも難しい。
    そこで、ラジペンで 根っこの部分を 毟って(?)折り曲げ、そこにより線を巻きつけてハンダ付けして電極を作り、その上に より線を接続した。




これは、バッテリーだけを入れ替える形で一旦配線したところ。充電に長い時間がかかるが、この状態でも使える。

この状態にした後、電池に充電回路と USB mini-B コネクタを付けるわけだ。

フタを閉めるとLEDが見えないわけだが、3mmφの穴を後であけている。

    ちょっと TIPS
  • コントローラを パイプのおしりにはめこむわけだが、はめこみかたで、吸い込みが重くなったり軽くなったりする。要調整なので、組む際に注意。

  • パイプを挿し込む穴は、例によってハンダごてを使った。穴を空けてから カッターナイフで削ったりしたが、最後に綺麗にするために 切ったパイプの片割れを使った。ハンダごてで温めつつ スムーズに入るようにするわけだ。

    ちなみに、最後は瞬間接着剤で 固定した。このやりかただと、接触面積が増えるので都合が良かった。

  • USBのところの基板は実をいうと薄すぎる。厚みとしては普通の基板のほうが良いのだ。結局、紙を隙間に入れて 調整している。

  • 使うパイプは長いほうが良い。短くしてしまったが、連続で吸うと パイプが熱くなりすぎる。真ん中で切るのが良いような気がする。



posted by すz at 16:42| Comment(66) | TrackBack(0) | 日記

2010年07月08日

wii 用 bluetooth モジュール



Wii 用の bluetooth モジュール J27H002 が、dealextreme で 7.75 ドルで買えることを知った。

ちゃんと認可を受けているようだし、インターフェイスは たぶん UART だし 電子工作で使えると嬉しい。ちなみにサイズは、2.6cm x 1.8 cm だそうだ。

    focalprice のほうは、6.47 ドルだった。 3 つ買えば単価が 5.57 ドルまで下がるし。



ちょっと調べてみると、Wii のモジュールは もともとは ミツミの WML-C43 だったらしい。それの後継品か互換品か知らないが 信号やプロトコルは互換性があるのだろう。

WML-C43 の場合 テスト用のパッド が 8 つだから 信号線は全部で 8 つなのだろう。J27H002 もシールをめくれば テスト用のパッドが見えてきそうな感じがある。

    -- 入手した。シールの下には 予想どおり に 8 つのパッド。ただし、パターンが若干小さい。

    VCC(3.3V),GND , TXD/RXD/CTS/RTS と RESET で 7本かなぁと想像しているが、全然違うかも。

    プロトコルは、HCI-UART のはず。


wii 本体と ロジアナがあれば ピンアサインは 調べられそうだが、残念ながら両方とも持っていない。自分では調べられないので調べた方がいたら教えて頂けると非常に嬉しい。

あと対応コネクタは、Molex 54722-0168-Cだと思うが確信しているわけではない。

追記: Wii は USB だった。

「ぷちのいず」さんのところで、実際に Wii に接続して調べたところ、USB だったとのこと。

接続は、上の WML-C43 の写真の向きで、見て左から

    (1) ? H レベル
    (2) ? H レベル
    (3) D-
    (4) D+

    (5) ? L レベル
    (6) ? H レベル
    (7) ? H レベル
    (8) GND

(ただし、(1)-(7) が逆かも)。

まだピンが余っているから そこに シリアルが仕込まれている可能性はある。

    それは望み薄という気もしてきた。テスト用パッドまで互換にするとすれば、理由があるはず。-- 検査に必要だからとか? ファームウェア書き込み用の SPI とかかも。

USB only だとしても 3.3V なら ちょっと嬉しい。前記事:格安 Bluetooth ドングルで書いたように、PIC24FJ64GB002/PIC24FJ32GB002 を使えば 3.3V only ので コンバーターが作れる。

    その前に 電源ピンを確定して、PC への接続テストをしないと ... 3.3V というのも違うかも知れないし。

それに私が欲しいのは、I2C へのコンバータなので、どうせコントローラは必要なのだ。(PIC必須か AVR で済むかの違い)

ちなみに、シリアルの HCI プロトコルには、BCSP (Blue Core Serial Protocol) と H4 がある。
H4 は、CTS/RTS のハードフローコントロールが必須で 8bit/Parity None 。
BCSP は、ハードフローコントロール なし(TX/RX のみ), 8bit/Parity Even 。
ボーレートは、4800 - 921.6K bps の範囲。

    "Three-wire protocol" というのもあるそうだ。これは、BCSP をベースにしてて H5 とも言うらしい。信号線は Tx/Rx の 2本 (GND 入れて3?) 。フローコントロールは Xon/Xoff 。

    公式のドキュメントは、ここ


追記: 2010/11/11

少々知識が増えたところで、改めて ググってみたところ、WML-C43 も J27H002 も BCM2045 だという情報が得られた。ここに、BCM2045 と I2C rom (M24C32) が載っている写真がある。
M2432 は、32kbit (4KB) しかないから、設定が格納されているだけなんだろう。

Product Brief だけ見つけられたのだが、Supperts UART, USB, SDI, SPI HCI transport って書いてある。
SDIO を持っているから SDI って SDIO のこと? ... それはともかく、残りの 4pin が信号線なら USB 以外で接続できるのかも知れない。.. データシートがないとどうにもならなそうだが、とりあえず。

Broadcom は、SDK なんかを配布しているようなのだが... 詳細はよくわからない。


追記: 2010/11/6



Serial Bluetooth RF Transceiver Module RS232 (goodluckbuy.com , $6.35) なんてものを見つけてしまった。

やりたいのは、I2C 変換して、PMP につなぐことなのだが、USB だと PIC24F 使わないと無理そうで面倒に思っていた。最初からシリアルだと手馴れた AVR で作れそうだし嬉しい。

AVR つなげるなら mega88系? それはともかく、ちょっと買ってみよう。

    下記にわかったことをまとめておいたが、goodluckbuy.com のは、たぶん、old version のファームウェアで slave にしかなれないように思う 。new version が明らかなのは eBay E'go china のやつで 2 個 $20 。あと、CuteDigi BMX の $15.99 。
    いずれにしても 対応しているのは SPP。

    AVR とかで デバイスを作るには良いと思うが、ちょっと Host 向きではないようだ。

    チップは、CSR BC417143 (BlueCore4-External)で、Flash が載っている。firmware がダウンロードできたりすると面白いのだが...

    Radio Datacom というところの KC21 は、ボードの形状は違うが、同じチップセットで HCI も対応している。値段は $23.21(サンプル)。これが良いのだが..
    ちなみに、RDC4202 $17.50 は、goodluckey.com のと 外観がそっくり。だが、チップが、BlueCore4-AudioROM でちょっと違う。 機能が KC21 と同じならこっちのほうが良さそう。

追加情報:

これは、eBay でも売っている。ちょっとメモ。


    Technical Specification:
  • Item Name: Bluetooth UART RS232 serial converter Module
  • Default Baud Rate: 9600,8,1,n.
    (1200,2400,4800,19200,38400,57600,1152000)
  • Operating Frequency Band:2.4GHz unlicensed ISM band
  • Bluetooth Specification:.V2.0+EDR
  • Output Power Class:Class2
  • Operating Voltage:3.3V
  • Host Interface: USB/UART
  • Audio Interface: PCM and Analog interface
  • Flash Memory Size: 8Mbit
  • Dimensions:27.2mm x 12.8mm x 2.5mm
  • Net Weight:9.6 g
    ※ USB とか PCM とか書いてあるが、物理的にインターフェイスがあるだけ? 使えるという意味ではなさそう。
    ※ serial converter って書いてあるし、ボーレートが低いから SPP ?

    ピンアサイン 回路例


    こっちにもっと詳しい情報があった。マニュアルとかもダウンロードできる。

    内容が違ったり、書いてなかった情報

  • Modify master & slave mode at any time, master and slave mode is the same as the hardware to support the AT command set to support the baud rate 2400 to 1382400.
  • The current firmware has been modified for the new version: The default setting for serial port 【9600, N, 8,1】, password: 1234.
  • Support the AT command to modify the baud rate, device name, passkey, master or slave mode
  • Build-in CSR company Bluetooth chip BC417143
  • Paired with various Bluetooth adapter, Bluetooth phone use, master-slave can also be used in double
  • The maximum serial baud rate: 1382400bps, support for hardware flow control transfer
  • Size: 26.9mm x 13mm x 2.2 mm
  • Power Supply      +3.3VDC 50mA

    同じものにしか見えないのにサイズまで違うし。そもそも外見は同じでも ファームウェアによって機能が変わるようだ。



    ダウンロードした 資料を見てみた。

      外観はちょっと違うが、CuteDigi BMX と同じもののようだ。
      CuteDigi BMX には、old firmware 版と new firmware 版があって、どちらのマニュアルもダウンロードできる。

      で、この資料のマニュアルは、new firmware 版 と同じ。そういえば 商品ページにも new firmware と書いてある。

      ひょっとしたら goodluckbuy.com のは、old firmware かも。デフォルト 9600 bps というのが同じだし。

      以下は、new firmware 版の内容。

    Manual(EN).pdf を読むと AT コマンドの説明が載っている。
    PORT まで AT コマンドで制御できるようだ。

    まず上記と違う点や補足:
  • Default Baud Rate: 38400,8,1,n
  • CSR BC417143 (BlueCore4-External)
     - 確かに写真には、csr / BC417 / 143xxx / xxxxxx と印字されている。
  • port を(H/L に)操作できるのは、PIO2-7 と PIO10 。
  • PIO8 は、working status で PIO9 は、link status。極性は設定できる。
  • 全部の port は読み込むことができる。
  • アドレスは、初期値 all 0 で、自分で設定しないとダメかも。

    あと、transparrent data mode の記載があった。
  • PIO11 を Floating or L レベルにする。
  • リンクが確立すると 自動的に transparrent data mode になる。
    ※ AT command mode にするには、PIO11 を pull-up しないといけないらしい。
     - あるいは BREAK 送出? よくわからない。

    上記の回路例では、Floating になっている。LED の割り当ても違うし、KEY (リンク確立のリクエスト)もある。
     - ファームウェアが違うのかも?

    • ただし、回路例が自分でポートを制御するのを意図しているなら LED や KEY は関係ない。
    • transparrent data mode だけは、ファームウェアが関係ある。
      .. といっても pull-up されていたりするだけかも知れない。
      .. あるいは、記載のほうが間違っている可能性まである。
      .. あるいは、BREAK 送出とか別の手段があるのかも。
      いずれにしても、PIO11 は要チェック。

    添付されていた回路例:


    old firmware 版について。

    old/new 両方に AT+VERSION? コマンド がある。だが、それを見てもどちらなのか判断できる情報がない。

    old firmware は、AT+UARTMODE? があるが、new firmware は、AT+UART? で機能も違う。まずは、これで判断して、どちらか見極められそう。

    もし、old firmware だとすると PORT 操作などはできないようだ。コマンド体系も結構違う。

    どうも old firmware は、master になれないような... inquiry のコマンドがないし接続先を指定するコマンドもない。

    最初の eBay の Q and A に書いてあった。slave にしかなれないそうだ。ようするに 2 つ買っても お互いに接続できない。

    new firmware だと master mode があって、相手を選んで接続できる。ただし、リンクは 1:1 -- 複数の slave とは接続できない。

    さらにさらに。第三の資料が見つかった。

    E'go china に slave onlyのモジュール があって、pdf がダウンロードできた。それを見ると回路図とかが買ったモジュールと合致する。

    で、説明にある AT コマンド の種類は少ない。CLASS も設定できないようだ。

CSR BC417143 (BlueCore4-External) について

    Programming CSR Bluecore chip に面白いことが書いてある。どうも、パラレルポートのライタで、SPI を通して BlueCore4-External の firmware を セーブしたり書き戻したりできるようだ。ただし、それをするのに BlueLab というソフトが必要らしい。

    で、BlueLab は、csr の開発環境で $3000 もするものだった。
    単に 読み書きするようなものなら、他にあるんじゃないかと思うのだが..

    De-bricking your Bluetooth Dongle というところを見たのだが、そういうものはないらしい。

    BlueCore4 External の データシート を探したら 見つかった。

    SPI の仕様は書いてあった。16bit アドレスに対して 16bit 単位で 読み書きできる。... だが 書いてあるのはそれだけ。

    FLASH は、8Mbit で 16bit データ幅なら アドレスは 18bit 必要。... どうも何か情報が足りないのだ。
    多分 FLASH を制御する レジスタがあって、そこに対して READ/WRITE しないといけないんじゃないだろうか?

    お手軽に Firmware を書き込むというわけにはいかないようだ。残念。

    さらに探したら、Radio Datacom というところがヒットした。Firmware の書き換えの方法を説明した pdf が置いてあって、Radio Datacom のモジュール用だがファームウェアも置いてある。このファームウェアは上記のものとは全然違う AT コマンド体系だが、HCI モードも持っている。

    Firmware の書き換えの説明では、SPI を推奨していた。(このファームウェアの)Serial にも Dfu があるが、失敗しやすいとのこと。それはともかく、書き換えのツールには、Bluelab に含まれているらしき BlueFlash を使う説明になっていた。だが、kcToolKitV4.1 というのもダウンロード出来る。なにやら書き換えのツールも含まれているかんじ。

    241664 Dec 11 2008 bc5fm.dll
    77824 Jan 6 2006 cclspi.dll
    114688 Dec 11 2008 flash.dll
    28672 Jan 6 2006 spi.dll
    13824 Dec 11 2008 spilpt.dll
    28672 Dec 11 2008 usbspi.dll

    dll を見るとこのあたりが、それっぽい。届いたら書き換えを試してみたい。

    同じチップセットで 同じ Class 2 なら、回路は恐らく同じ。PIO/AIO は、名前が変わっているものの数は同じで、内部で使用していない。書き込めば動きそう。
      ちょっと説明 -- KC21 で PIO は 0-10,13-15 があるが チップセットの PIO は 0-10 (と AIO 0-2)
      で兼用機能は、番号が決まっている。

      PIO_0 Connection
      PIO_1 Power
      PIO_2 RXD passthrough (PIO7)
      PIO_3 -
      PIO_4 Activity
      PIO_5 CTS passthrough (PIO6)
      PIO_6 RTS passthrough (PIO5)
      PIO_7 ADC,DAC (AIO 0 or 1 ?)
      PIO_8 -
      PIO_9 Class 1 RX Enable (PIO0)
      PIO_10 Class 1 TX Enable (PIO1)
      PIO_13 -
      PIO_14 ADC,DAC (AIO 0 or 1 ?)
      PIO_15 TXD pass (PIO4)

      分かっているのをマッピングしてみるとこんな風になる。ちなみに AIO は、8bit の DAC / ADC の機能がある。
      ちなみに、書き込むには ライタが必要だが、Programming CSR Bluecore chip に パラレルポート用の回路図がある。
      パラレルポートがあるPC じゃないと出来ないのは面倒だが、調べれば、どういう風に SPI の制御をしているか分かるかも。

      (載っていた回路図)
      プリンタポート の信号
      2 OUT D0
      8 OUT D6
      9 OUT D7
      10 IN #ACK
      16 OUT #INIT (不要?)
      18-25 GND


    追記 2010/11/11

    「ぷちのいず」さんのコメントより。

    SzParts.com の Bluetooth BC417143 SPIライタ (2250円) は、上記 パラレルポート用ライタとピン割り当てが同じっぽく 純正のツールが使える。

    買うと、PSTool という設定ソフトが ゲットできるらしい。

      BlueZ に bccom という同じようなツールがあるが、設定できる項目の数が全然違う。あと、当然ながら SPI に対応している (bccom は未対応)。

    で、思ったのだが firmware(プログラム)だけ書き換えられても、設定をどうにかしないと動かないのでは?
    なら、PSTool は是非にでも入手しておかないといけないのかも知れない。

    実をいうと goodluckbuy.com のに加えて E'go china のも入手中。firmware 入れ替えたりしようと目論んだわけだ。そのうえこれも買うことになりそう。なんだか 散財しまくりだが .. まぁいいのだ。なんか面白そうだし。

    追記:モジュール入手
    goodluckbuy.com は、11/6(土) に発注し、11/8 発送 11/13 受け取り(発送元: 中国/SHENZHEN)。 E'go china のは、11/8 発注 11/8 発送 11/16 受け取り(発送元: シンガポール)

      ちなみに、(firmware 以外) パターンすら同じもの 。 E'go china の 写真が一番近い。E'go china の水晶は黒で / goodluckbuy.com は銀 -- これだけが違う。

    早く着いたのは良いのだが、準備ができていない。... ケーブルを直ハンダするのは、パターンが剥がれるのが怖いし。しっかり基板に固定すると 実際に使うときに困りそう。

    なにか治具が作れないか検討中。

      Fusion PCB で、プリント基板を作ってみることにした。
    • bc04extmod-01.zip -- 全部入り
    • bc04extmod-01-out.zip -- 提出ファイル
      でっち上げに近く、いろいろダメなところがありそうだが、安いから出してみることにした。

      bc04extmod ボード(サイズ 43.8 x 26.7)

    • 出来上がったのは、こんなやつ。使いたい端子を 2.54mm ピッチに変換。
    • ランドは大きめにして、(なにか端子を付けることで)治具になるように考慮した。
    • あと、最終的に I2C で制御したいので、ATmega88 (TQFP) を載せられるようにした。
      (あんまり推敲していないので)ATmega88周りはバグがあると思うが、とにかく作ってみたかったのでとりあえず形にした。
    • 余白がある変な形状だが、これは ターゲットの中華PMP のバッテリーのサイズに合わせたため。縦横は余裕があるが、厚みが厳しい。基板を 0.8mm 厚 にしてもらおうとは思っているが、裏に部品を付けたら収まらなさそう。

        CN1/CN2/CN3 は、単にピッチ変換
        CN4 は、ATmega88 用インターフェイス ISP と I2C 。
        ATmega88 の SPI を モジュールのSPI に接続(SPI + SS) 、シリアル(TX/RX) も 接続。CTS/RTS/RESET も一応接続している。(PD3/PD2/PC2)
        水晶は、FA238 。-- 付けるつもりはないが、内蔵RC で同期が取れなかったときの対策。
        LED は付けられるようにしたが、どこと接続するか決められなかったので、CN2 に接続。パーツは、SEC2764C1608タイプ x2 。
        治具にするときは、LEDやダイオードの足を付けるとか ...

    • bc04extmod-03.zip
    • bc04extmod-03-out.zip

      もう出してしまったので手遅れなんだが、あまりにひどいので修正版を作った。コネクタの位置を修正したり、5V 入力できるようにしたり .. (でも回路図自体はチェックしてない)

      • シリアルには、AE-UM232Rを使う予定なのだが、3.3V の供給能力は弱い(30mA)。別に レギュレータが必要だろうということで付けることにした。
      • 5V → 3.3V の レギュレータは、TAR5SB33 にした。
      • 移動したコネクタ(1) CN1 -- 下に 0.1 inch ずらして、NC を移動し 5V 入力に割り当て。
      • 移動したコネクタ(2) CN3/CN4 -- 0.05 inch 下にずらしてアライメントを合わせた。

      -- 実は手違いで最初のやつは送れてなかった。メールが来たので、すかさず 03版を送付。
      -- 03 版はそのまま受け取ってもらえた。既に製造中らしい。


        追記: Fusion PCB を扱っている www.seeedstudio.com で Bluetooth Beeというのを扱っている。あきらかに同じモジュール。(ファームウェアは違うかも知れない) これも ピッチ変換ではある。こういう風にする手もあったのか。まぁ 2mm ピッチにする理由がないから こうはしないけど。

      2010/11/30 到着:


      変換基板なので、ランドが正しく配置されていないと無意味になってしまう。少々不安だったのだが安心した。

      写真は両面テープで貼って合わせただけのもの。モジュールは直接ハンダ付けしないで、うまく付けられるようにしようと思う。『治具(ジグ)の考察』の記事に顛末を載せるつもり。ちなみに Atmega88 という MCU を載せられるよにはしているが、まずは 治具 のための変換基板として使う。秋月 C 基板(片面)に、これと シリアル変換と パラレルポートを載せられるとよいなぁと思っている。
posted by すz at 00:23| Comment(108) | TrackBack(0) | 日記

2010年05月15日

格安 Bluetooth ドングル

DealExtreme で Bluetooth ドングルが $1.93 と格安で売っている -- Free shipping なので本当にその値段で入手可能 。こいつをいろんな電子工作で使えると嬉しいのだが ... どうにかできないだろうか。

USB HOST の機能をもったマイクロコントローラを使うのが素直な考えかただと思うが、AVR だと AT90USB1287/AT90USB647 しかない。ちょっと高いうえに入手に難がある。

他のマイクロコントローラではどういうものがあるのか探してみた。0.5mm ピッチ以外という条件だと、


が見つかった。PIC24FJ32GB002 は、DIP または SOIC 28pin で扱い易そうな上に DIP 452円と 安い。

PIC であれこれ工夫して作るのは嫌だったりするのだが、例えば HCI USB を HCI UART に変換するチップと思えば許容範囲かも知れない。

ちなみに、あれこれ工夫して作ってる人は既にいるようだ。→「想いのほか楽しい人生」

ところで、格安 Bluetooth ドングルの中はどうなっているのだろう? 入手できたので中を見てみた。


    (写真はこちらから転載)
    ちなみに、裏の部品は円筒形の水晶のみ。

チップは、0.5mm ピッチ? 48pin。CONWISE CW6626M と印刷されていた。CW6626M の情報は見つけられていないが、COMWISE の サイト http://www.conwise.com.tw/big5/wireless.htm には、CW6621 の説明がある。-- たぶん格安ドングルはみな COMWISE なのだろう。


    ちなみに、USB 的には VID 0A12 PID 0001 という風に見える。 VID 0A12 は、Bluecore を出している CSR のことだから 詐称しているような... Microsoft のスタックをそのまま使うためだろうけれど、黙認されているのだろうか?

チップ自体には、UART や SPI インターフェイスがあるようだ。ピンアサインが分からないし、分かったところでチップが小さいのでどうにか出来るような気がしないのだが 一応書いておく。

    未使用ピンが多数ある。0.5mm ピッチなら、ピンアサインさえ分ればなんとか出来る人もいそう。


やはり素直に USB から使うのが良さそうだ。... ただ 3.3V で使いたいところ。でも 3.3v のレギュレータも builtin だそうだからそれも無理かも知れない。


    思い出した。-- これは SmartQ 5 の BlueTooth 。よくよく見れば同じもの。ケーブルの変なつなぎ方から見て 3.3V を直接入力していると思うのだが どうだろう。


    注意!: フォーラムに 「Idential Bluetooth ID numbers」という スレッドがある。
    どうも、すべての MAC アドレスが 00:15:83:15:a3:10 で変更も出来ないらしい。
    まともなデバイスなら 「Change or Modify Bluetooth Device hardware (MAC) address」の記事のやりかたが使えるらしいのだが ... これは無理だそうだ。

    この製品ではないが、こういう EEPROM が載るタイプのものもあるようなので、CW6626 なら絶対無理なのかというと よくわからない。

    追記: 3.46 ドルの ドングルを買ってみた。

    DX で扱ってっいる 超小型格安の 2.0 USB ドングルは全滅だそうなので、試しに 大きめのを買ってみた。

    これも、簡単に分解できるので基板を見てみたところ、8pin の EEPROM らしき IC が載っていた。こちらは ID の問題はなさそう。

    ちなみにアンテナらしきものは、ただのプラスチックの飾り。

ところで、DealExtreme だが、電子工作向けのお薦め品がいくつかあるので紹介しておく。

おまけ forcalprice で見つけたもの
posted by すz at 01:30| Comment(32) | TrackBack(0) | 日記

2010年04月25日

TN-8102BC

aitendo の 特売 LCDモジュール TN-8102BCを買ってみた。詳細不明なわけだが、なんとなくピンアサインは分かるに違いないとタカをくくって買ってみたわけだ。

なぜこれが使いたいかと言うと、消費電力がケタ違いに少ないから。普通のキャラクタ液晶だと カタログスペックで 1mA ほどありバッテリ駆動で 常時 ON にするのには厳しい。ストロベリー・リナックスの I2C液晶が その 1/4 の 250uA だが、さらにその数分の一が期待できる。

    データシートには、80 uA という記載があった。もも さんのコメントでは、CPU 込み 実測 550 uA なので 200 uA 以下にはなっているだろうとのこと。



来たモジュールは、透明なプラスチックの枠に入っていた。上部にはスピーカーが入るように見える。PHS とかで使うためのものは明らか。PHS 用の 白黒液晶? ... となると大分昔に作られたように思う。

液晶面には、保護用のフィルム。中古と書いてあるが 新品ではないかと思う。



内部のモジュールを取り外してみた。モジュールはかなり薄い。裏をみると チップが見える。COG -- Chip on glass の液晶モジュールだ。chip があるだけで他の部品は一切ない。もちろんバックライトなし。あと、光にかざすと透ける。

ピン配置の調査1


さて、液晶モジュールにはコンデンサが普通必要で TFTカラー液晶などは、フレキに載っていたりする。... がこれは一切ない。

ということは コンデンサを接続する線も出ているということで白黒なのにピン数が多いのはそれが理由のはず。

例えば上のリンクのメーカの製品だと 30pin もあって いくつかのコンデンサ用の線があり、さらに V1-V5 という線(出力?)もある。

COG のチップの種類もたくさんあるようだ。ただ PHS 用ならグラフィックだろうし それなりの解像度のはず。縦 32dot とかは除外して良さそう。

で、いろいろ探してみたのだが、26 pin で両脇が NC というものは見つけられていない。最近の TFT は共通なピンアサインのものが割と多かったのだが、結構バラバラ。18 pin や 20 pin のものが多い印象。

どうやって探せば良いものか途方にくれた訳だが幸い チップそのものは見える。



写真は 上がフレキ側。チップのサイズは 横 8mm 弱 / 縦 3mm 前後。大きめのパッド が 16 個あるのが特徴的。あと全体のパッドの数は 200 個もありそうになく少ないように思う。

HD66741が近いかもしれない。ちゃんと突き合わせてみよう。ただ、これだと分かったとしても、ピンアサインまでは分からない。チップの順番に並べているのだとは思うが、間引いているはずで、どれが間引かれているのか見当が付かない。VDD と GND さえ分かれば試行錯誤できそうだが、現時点ではそれもわからない。

HD66741 で必要そうな信号線。

    IM1 IM2 IM0
    OPOFF
    DB7-DB0
    RESET
    CS
    RS
    E/WR/SCL
    RW/RD/SDA
    GND
    VCC
    C4+ C4- (昇圧チャージポンプ用)
    C3+ C3- (昇圧チャージポンプ用)
    C2+ C2- (昇圧チャージポンプ用)
    C1+ C1- (昇圧チャージポンプ用)
    VLCD

これで 28pin 分。24 pin だと 4 pin も間引かないといけない。あと OSC1/OSC2 は既に省いているが、抵抗を外付けしないといけないのかも。ちなみにデータバスが 8bit とは限らない。例によって 4bit モードも存在する。I2C はないがシリアルもある。その場合 データバスも不要。あと、昇圧チャージポンプ用コンデンサは 5倍昇圧しなければ C4 は不要だったりする。

突き合わせてみた。

データシートには、チップのサイズが載っているのだが、8mm x 3mm ぐらいのチップは見つけることもできなかった。大概は 10mm 以上 あって 逆に幅が狭い。

チップを見つけることが第一歩だと思ったのだが ... 全然だめ。困った。

ピン配置の調査2


あれ... ひょっとしてこれ?



サイズは 7.70 x 2.77 かつ大きなパッドが 16 個。かつ トータルPAD 数が 200 以下。

ちなみに、これを見つけるまでにチェックしたチップのリスト -- 近いものすらなかった。

    HD66705U 9.69 2.73
    HD66717 10.88 2.89
    HD66727 11.39 2.89
    HD66724 10.34 2.51
    HD66725 11.97 2.51
    HD66726 13.13 2.51
    HD66728 13.67 2.78
    HD66729 12.23 2.52
    HD66741 14.30 2.78
    HD66750 10.97 4.13
    HD66751 10.97 4.13
    HD66751S 8.42 3.18
    HD66750S 8.44 2.95
    HD66752 12.68 4.31
    HD66753 15.90 2.02
    HD66732 12.68 4.31
    SED1520 7.04 4.80
    SED1526 5.92 4.68
    SED1530 6.65 4.57
    SED1560 8.08 5.28
    SED1565 10.82 2.81
    SED1570 8.04 3.51
    S6A0093 7.02 1.62
    S6B0721 9.64 2.02
    S6B0724 9.68 2.03
    ST7533 7.24 1.00
    ST7541 12.575 1.22
    ST7545T 8.20 1.02
    ST7548T 8.20 1.02
    ST7565R 5.90 1.00
    PCF8811 12.409 2.271
    PCF8813 10.845 1.845
    ML9042 7.8 1.8
    ST7575 5.57 0.77
    SSD1815 10.977 1.912
    S1D12200 7.70 2.77
    S1D12205 7.85 1.97
    S1D12300 10.23 3.11
    S1D12304 10.23 3.11
    S1D12400 8.70 2.80
    S1D15300 6.65 4.57
    S1D15200 7.04 4.80
    S1D15210 7.04 4.80
    S1D15400D 7.04 4.80
    S1D15600 8.08 5.28
    S1D15605 10.82 2.81
    S1D15700 8.04 3.51
    S1D15705 13.30 2.81
    S1D15710 16.65 2.90
    S1D15A06 9.93 2.15
    S1D15801 10.82 2.81
    NJU6636 5.33 2.08
    NJU6676 8.72 2.37


データシートは、openpdf.com でサーチ。

チップの型番は、S1D12202D(SED1222D) 。データシートの日付は 2001年(1998年) で相当に古い感じ。

これでないとしたら、同じぐらいの数をチェックしないと見つからないだろうし ... これだと決めることにする。違っていたら諦めることにしよう。

さて、これはどんな機能なのだろう?

  • 供給電圧(ロジック) 2.4v - 3.6V
  • 供給電圧(LCD) 4.0v - 7.0V
  • 消費電流 80uA
  • Duty 1/18
  • インターフェイス 8bit/4bit/シリアル
  • segment 60 common 18


ガーン。12 桁 2 行の キャラクタディスプレーだった。--- 消費電力が極端に少ない表示器が欲しかったので、表現力はまぁいいや。

気をとりなおして、チップの PIN アサイン

    x2 昇圧 x3 昇圧
    1 A0   
    2 /WR(E)
    3 CS
    4 D7(SI)
    5 D6(SCL)
    6 D5
    7 D4
    8 D3
    9 D2
    10 D1
    11 D0
    12 VDD     
    13 VSS
    14 V5 o o
    16 V4 o o
    16 V3 o o
    17 V2 o o
    18 V1 o o
    19 V0 o o
    20 VR o o
    21 VOUT o o
    22 CAP2- o
    23 CAP2+ o
    24 CAP1- o o
    25 CAP1+ o o
    26 VSS
    27 VDD
    28 /CK
    29 VS1 o o
    30 P/S
    31 I/F
    32 RES
    34 VDD


1番ピンから A0(RS ?) で 必要そうな感じ。... で並べていくと 34 ピンにもなってしまう。10 ピンも間引かなければ 24 ピンにならない。あと 12- 27 は大パッドなので間引かないのではないか .. と想像できる。V1-V5 などはコンデンサを接続することになっていて間引けなさそう。

さぁピンを確定するにはどうしたら良いのだろう?

VDD/VSS が分かればあるいは ... だいたい決まりそうな気がするが .... VDD や VSS が 二ヶ所にあるならば、抵抗値を測定することで VDD や VDD の位置を決められるかも。

ちなみに、透明電極の配線自体が見えれば分かりそうなものなのだが、残念ながら全然わからない。

追記:

透明電極の配線がなんとか見えた。1-11 の間で 7 本。... ということは D0-D3 が配線されていない。12-27 は、均等に配線されているが 15 本のみ。たぶん 12/13 のどちらかが配線されていない。28 - 34 で 2 本。VS1 が必須だとすれば残りは何? RES だとは思うが、P/S だったりするかも(願望)。

    追記: コメントでももさんから情報を得たので訂正。

文字が入っているほうを1番ピンとして、まとめるとこう。

    1 NC
    2 RES (0: 68 interface 1: 80 interface)
    3 IF
    4 VS1 ( -- 1u -- VDD )
    5 CAP1+ ( --- 1u -- CAP2-)
    6 CAP1-
    7 CAP2+ ( --- 1u -- CAP2-)
    8 CAP2-
    9 VOUT ( -- 1u -- VDD )
    10 VR ( VDD --- Ra -- VR -- Rb -- V5 )
    11 V0 (= VDD )
    12 V1 (1/5 x V5, -- 0.1u -- VDD)
    13 V2 (2/5 x V5, -- 0.1u -- VDD)
    14 V3 (3/5 x V5, -- 0.1u -- VDD)
    15 V4 (4/5 x V5, -- 0.1u -- VDD)
    16 V5 ( -- 0.1u -- VDD)
    17 VSS
    18 VDD
    19 D4
    20 D5
    21 D6
    22 D7
    23 CS
    24 /WR(E)
    25 A0 (RS 0:CMD 1:DATA)
    26 NC

  • 1u と書いてあるのは、0.1uF - 4.7uF の範囲。
  • Ra/Rb は コントラスト調整用。レジスタによって調整できるので 固定抵抗でも可。Ra + Rb の目安は 1MΩ前後。Ra:Rb は、1:1 か 1:2 か ? よくわからないが そのあたりで試してみるのが良さそう。
  • V1-V4 は無接続でも良さそうな気がする。(追記: 無接続で良いらしい)

ちょっとメモ。



0.8mm ピッチの変換基板IFB-ZY-FGD1442701V1に貼り付けるとすると ..

    -- [0] [9] --
    NC [8] [7] A0
    WR [6] [5] CS
    D7 [4] [3] D6
    D5 [2] [1] D4
    VDD [0] [9] VSS
    VDD -0.1u- V5 [8] [7] V4 -0.1u- VDD
    VDD -0.1u- V3 [6] [5] V2 -0.1u- VDD
    VDD -0.1u- V1 [4] [3] V0 ------ VDD
    VR [2] [1] VOUT-0.1u- VDD
    CAP2- [0] [9] CAP2
    CAP1- [8] [7] CAP1
    VDD -1u- VS1 [6] [5] IF
    RES [4] [3] NC
    -- [2] [1] --

    ( VDD --- Ra -- VR -- Rb -- V5 )

こんな配置か。2mm のところを使って必要な 部品を付けるのも良いかも。CAP1/CAP2 は問題ない。
VDD - VSS もいける。V1-V5 , VS1 のコンデンサはなくても OK 。他の VOUT/VR は厳しいか。

追記: 電子工作マスターへの歩み:液晶モジュールの解析(TN-8102BC) なんて記事を発見。配線がわかりそうな(?)写真も載っている

私の解析は、中途半端なまま中断しているが、是非動かすところまで行って欲しい

追記: 50円カラー液晶 LCD018-05P28P の解析

    (ももさんのコメントから) LCD018-05P28P まで解析できたそうだ。

    コントローラは、HD66766 で、STN 128RGB*160 だそうだ。

    ピンの配置は、

    1 LED(+)
    2 LED(-)
    3 GND
    4 D15
    : :
    19 D0
    20 /RD
    21 /WR
    22 /RS(A0)
    23 /CD
    24 VDD
    25 GND
    26 /RES
    27 VREF
    28 GND

    だそうだ。

    それにしても、どうやって解析したのだろう? コントローラの目星が付けられば、コンデンサの位置とかから、かなり絞れるものの ... 相当に大変な作業だ。

    さて こいつのコネクタは、0.5mm ピッチ 28P 。新品を購入して基板を起こす... なんてことをするなら、デジキーの FH33-28S あたりを使う? コネクタの単価は 167 円で 結構する。10 個買っても 単価 139 円であまり下がらない。

    手配線でなんとかするなら、aitendo の 26P の変換ボード を使うしかないかも知れない。液晶側は LED の部分をカットする ... とか。

    ただ、接続をクリアしても 16bit パラレルでしかアクセスできない。 AVR で扱うにはちょっと厳しい。
posted by すz at 20:47| Comment(6) | TrackBack(0) | 日記

2010年02月28日

2.8インチ液晶 EGO028Q02

aitendo で扱っている 2.8インチTFT 液晶 EGO028Q02 が気になっている。解像度が 320x240 で AVR の手に余るのだが、なかなか良さそうだ。


なにが良いかというと

  • TFT で綺麗。視野角も広い。
  • タッチパネル付き。
  • 3.3V でドライブできる。-- バックライトも 3.2V - 3.4V 。
  • 比較的安い 1980円。タッチパネルも利用するなら格安かも。
  • ちょっと改造するだけで、8bit パラレルにできるらしい。
    EGO028Q02 8ビット MPU I/F化 成功!!
    R3 の抵抗を R4 に移すだけ。
  • コネクタが 1mm ピッチフレキ。


この液晶のサイズは、50.0 x 69.2 x 4.05 だそうだ。C 基板より少しだけ幅がある。

C 基板サイズで思い出したのだが、千石でも扱っている RFAD のケースに入りそう。MK8260 は 外寸:82× 60×20mm 内寸: 76× 54×12mm 。ガラス板は、ABS の枠を下から当てて止めている。この枠は瞬間接着剤で接着してあるような感じだが、なんとか外せる。(彫刻刀の平刀をタガネ代わりにする/はがし液(アセトン)は×)

    彫刻刀は、中央は半丸刀をつかって、端は薄刃の平刀をつかっている。(どちらもダイソー)。半丸刀は、隙間を広げていくのに具合が良いが端の処理ができない。端は薄刃のほうが具合が良い。



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



    NEWランチャーライト改造ネタに良いかも。


    大きさは 20mm 。一方 NEWランチャーライトの内径は φ22mm ぐらい。入るのは良いが、熱を外に伝える方法を考えないと。


次の基板設計のネタにしたい。

ちなみに、2.4 inch の YHY024006A も同じ機能。コントローラチップも同じでピンアサインも同じ(ピッチは 0.8mm で違う)。8bit パラレルに改造できるのも同じ (R2 を R1 に付け替え) 基板を設計するならこれもつなげられるようにしたい。



基板サイズは、50 x 72 ?

CPU は xmega256A3/192A3 にしたいところだが... それでいったい何をするのかが問題だ。

    理由は 0.8mm ピッチで最大のものだから。D4は、RAM が少ないし、ADC が 1つしかない。( DAC も 1 個だが 2ch 出力なので OK)

簡易オシロ?

    XMAGA の ADC は、2つあり 12bit で 最大 2M sps。同期しての採取も可能。... 差動入力もあり利得が 1 倍 〜 64 倍まで、 符号付きも OK。さらに 内部 1.0V 基準電圧 はデータシートによると非常に正確だそうだ。
    DMA も使えるから CPU の負荷も減らせる。

    メモリが少ないし演算能力も相対的に低いので 簡易オシロにしかならないが、なかなか良さそう。

      メモリは、xmega256A3/192A3 が 16KB 。
      ちなみに DMA は 直接 SPI とかに送ることも可能。あまりわかっていないのだが、2 バイト x 2ch を送るのも可能なような感じ。相手が SPI RAM とか なら 2M bytes/sec (2ch 12bit なら 500ksps) で 32KB 連続で書き込むことは可能。
      microSD では、連続で書けるのは セクタサイズまでなのでバッファリングしないといけない。ただ microSD 内部に書き込みバッファがあるので、工夫すれば MB クラスの量を途切れなく書き込める(はず)。あと、たいがいの シリアルフラッシュは連続書き込みは遅い。


    入力部は、こんな風にオペアンプを入れようと思う。


    ここでは AREF=1.0V と仮定。そして、AREFを仮想グランドにする。増幅度が 1/10 になるから フルスケール -9V 〜 +11V 。Rail-to-Rail のオペアンプでなければ もっと範囲は狭くなる。

      11V だと オペアンプの出力は AREF を基準にして -1V .. すなわち 0V 。差動入力 ADC から見れば +1V だから MAX 値。

      -9 V だと オペアンプの出力は AREF を基準にして +1V。差動入力 ADC から見れば -1V だから、両極モードで測定する。

      ADC の利得は、8 倍まで。そうしないと 0V も測定できなくなる。カップリングコンデンサを enable にすれば AC しか測定できないが、利得は 64倍まで OK。AC/DC モード の切り替えは アナログスイッチ(SN74HC4066D,74LVC4066Dなど)を使おうと思う。

      1M + 0.1uF の直列 は HPF で cut-off 周波数は、1.6 Hz。

      オペアンプの (+) 入力 は、R1 // R2 (合成抵抗値) の抵抗を通して 仮想グランドに接続すると良いらしい。R1 = 1M, R2 = 100K だと 合成抵抗値は 90K 。基準電圧の インピーダンスが 高い場合は、ボルテージフォロワとかで増幅する。



      低電圧で動作するオペアンプは選択枝が少ない。0.65mm ピッチの LMV358 ぐらいしか安く買えない。これでも 帯域幅 1 MHz あるし、RAIL-to-RAIL 出力だし 問題ないように思う。ADC の性能 以上は無意味だし。一応 デジキーで これ以上の帯域のものを探してみたが、TS972 , MCP6022ぐらい?

      実は、内部基準電圧は外部に引き出せない。外部基準電圧を使う場合 1.2V の方が具合が良い。1.0V で検討してみたが、たぶん 1.2V に変更する。

      ところで、A4 は、ADC が 1つしかないから選択しないと書いた。同時に採取できないと思ったためだが、条件を付ければ同時採取が可能。ADC 1 つにチャネルが 4 つある。ch0/ch1 は、利得のない差動増幅器付きで、ch2/ch3 は、利得付き。利得なし と 利得ありは、同時に採取できる。よくわかっていないのだが、ch0/ch1/ch3 の同時起動 または全チャネルの同時起動で ch1/ch2 が同時採取になるみたい。


ロジアナ?

    8ch で 数M sps で良いのならロジアナも可能かも知れない。こちらも メモリがネック。

      事象システムとDMA を組み合わせる。事象システムで 4clock の遅延がある。... となると 最大でも 8M sps ぐらい?

      あと外付けラッチを付けないと 数クロック遅れて採取することになる。定期的に採取するなら PWM でラッチを制御する。

        ラッチは 透過モードと 3state がある 74LVC573AM が 良さそう。5V トレラントだし。

        OE=L , LE=H で、入力がスルーになる。LE=L にすると、そのときの値を HOLD 。トリガにした場合は、XMEGA が受け取るまで (120ns) L レベルを保つ必要がある。入力をスルーにした場合でも、レベル変換のバッファとして役に立つ。OE=H にすれば Hi-Z になるので、PORT を他の目的に使用できる。

        機能は良いのだが、20pin SOIC は 幅がある。0.65 mm ピッチは嫌なのだが ... うーん。

      あと 数クロック遅れて良いなら、トリガの自由度を高くできる。

      ポートを複数つかっての同時採取はできそう。ただやっぱりメモリが厳しい。

    SDRAM を付ければメモリの問題は一気に解決するわけだが ... そこまでしたいなら XPLAIN を買う。

音源とかプレーヤーとか?

    DAC も 付いているし取り敢えずサウンド出力は付けるだろう。... そうなると MicroSD も一応付けたくなる。

    DAC に 負帰還のアンプが付いているようだから カップリングコンデンサを入れるだけで ヘッドホン出力ぐらいは出来そう。

    カップリングコンデンサは場所を取る。いっそのこと BTL とかにできないか。(低耐圧の大容量セラコンは波形が歪むから良くないらしい。耐圧は 25Vぐらい欲しい)

パラレル出力

    PORT A,B は、ADC/DAC 用として割り当てる。それ以外はデジタル。いろいろなデバイスと兼用になっているわけだが、同じ種類のデバイスが複数あるので、条件は少ない。パラレル出力用に PORTF あたりを割り当てれば良さそう。

    ところで、DMA で出力するには、起動するためのタイミングが必要。パラレルの場合データを出力するだけなので、それ自体にはタイミングがない。たぶん PWM を使って nWR のパルスを作り、nWR の __↑~~ に合わせて DMA で次のデータを出力するのだろう。PWM を止めるのも 事象システム+DMA 。DMA 完了で PWM を止めるためのデータを転送する。

    ちなみに、ILI9320 のデータシートには、nWR のパルス幅は 50ns 以上、WRITE サイクルタイムは、100ns 以上と書いてある。DMA がどれぐらい遅延するか見極めないと周期が決められないので要注意。
    ( PORTに事象0 を出力する機能を使って nWR を作ろうかと思ったのだが、1clock 30ns のパルス幅なので厳しい。)

タッチパネル

    タッチパネルも 自前の ADC で制御したい。コントローラとして、ADS7843があるので、データシートをちゃんと読めばどうするのが良いかわかるはず。

    ... どうも 測定しない方 に 電圧をかけて 分圧した電圧を AREF=VCC で測定すれば良いらしい。

    X+    X- Y+ Y-
    PORT(H) PORT(L) ADC
     ADC     PORT(H) PORT(L)

    この程度の処理なら、AVR の ADC で十分そうだ。


ホスト インターフェイス

    やはり、USART か。自作ボードの DAC23-U4 か SRT162B をつなぎたい。この 2 つのボードは USART のピン配置を同じにしている。

    PDI にもつなげておけば、書き換えも出来るようにはなる。普通はブートローダ使うのだろうけど。それを作ったりもしたいから PDI も欲しい。

    DAC23-U4 の場合、ADC も 4ch コネクタに出しているし、SPI も使える。単独で液晶を制御できても良いかもしれない。

    液晶のコントローラ ILI9320 自体は、SPI をサポートしているのだが、SPI に設定する IM1/IM2 がアサインされていない。フレキ上になにか抵抗があれば、あるいは設定可能だったりするのかも。

    XMEGA の方でも パラレルでDMA するのはなにかと面倒なので、結局 SPI の方が高速になったりするような気がする。どうにかならないものか。

    ... フレキの上にある抵抗は 1 個しかない。どうやっても無理そうだ。


追記:

サイズを確認するためのデータを作成。



一番外が RFAD ケースの内寸 -1mm 。基板の最大サイズ。四方に穴があいているのが C 基板のサイズ。コネクタは、dac23-mega とか dac23-u4 に合わせた。

2.8インチTFT 液晶 EGO028Q02 と 2.4 inch の YHY024006A の両方を載せられるようにするのは無理がありそうだ。そして、YHY024006Aの方が収まりが良い。他のものと干渉しないし、C 基板にフィットしている。

YHY024006A を使うことを考えようかと思う。--- というわけで確保。EGO028Q02 の方は忘れよう。

ところで、バックライト LED が 3つ4つあり、アノードコモンになっている。明るさにバラツキが出るのは面白くないし、ちょっとドライバは凝りたい。

普通は個別に電流制限抵抗を付けるそうだ。そうすると Vf より少々 高い電圧が必要になる。Vf はばらつくのが普通だから、電流を揃えるのは面倒そうだ。探したら、STP08DP05MTRというのを見つけた。8bit の ラッチ付きシフトレジスタなのだが、出力に定電流回路がある。出力を LEDK1/2/3/4 に直結できて良いかも。他にも同じピン配置の TLC5916CAT4008Wなどがあり定番の IC らしい。



LMV358を使った定電流回路でも良いかも知れない。安いし小さくて場所を取らない。

    ちなみに、大電流を流す場合は、トランジスタや MOS FET を追加する。



    あ、LED はアノードコモンだった。トランジスタを入れないと使えない。... そうすると場所を取る。... ボツ。

追記:ちょっと考えかたを変えた。

いろいろ検討してきたが、すべてを載せるのは無理そう。

とりあえずは、DAC23-U4 ボードをマウントして使う場合に便利なものを載せて、I/O ボードとして考える。その上で、XMEGA も同じようにマウントできるようなことを考えよう。

そして、DAC23-U4 ボードで効率良く使うために SPI でインターフェイスする。SPI → パラレルは、CPLD で 設計する。

CPLD は、XC2C64A 。32A でも、SPI 機能 に十分そうだが、もう少し付加機能を入れたい。

もともとある SPI 機能互換にするのは能がないので、以前の記事で書いた I2C ディスプレー と同じように、制御バイトを付けて、コマンド / データ を切り分ける。Read をできるようにすべきかどうか あまり考えていない。

付加機能 としては、LED のドライバはどうだろう?

I/O バンクは 2 つあるので、片方を LED 用ドライブ用にする。合計で 60mA 流せるのかどうか? よくわからないものの大丈夫そうな感じ。絶対最大定格は 4.0V で 通常範囲では 最大 3.6V 。Vf は、最大 3.4V だそうだから大丈夫。1 pin あたりは、数 mA しか流れないから 何本か まとめて 1 つの LED に接続する。

クロックを供給して、個別に明るさを調整できる PWM 機能を付ける。8bit は無理で 6bit ぐらいか。クロックは DAC23-U4 の MCLK 用のピンから供給する。

    無理かも知れない。出力 1 つに マクロセル 1 つ 必要だし。そんなことより、余ったら付けるべきは プリスケーラ。AVR は同期入力だから、クロック / 2.5 ぐらいまでの周波数しか入力できない。周波数カウンタとか .. そういうものを作りたい場合 プリスケーラが有用。

基板サイズも決めた。RFADのケースの内寸 + 1mm 〜 1.5mm で作成して、ガラスが入っていたところにマウントする。ケース内部に入れる基板も面付けして同時に作る前提なら、縦方向は 内寸ギリギリでも可。ちなみに、厚さは 1.6t で問題ない。現物で合わせてみた。

    120mm x 120mm に面付けすることを考えると ガラス部分用 + 内部用 に加えて 余った部分に 小ケースの ガラス部分用 + 内部用が作れる。切りしろ (外形線含む)をいれないとこんな感じか。

    76.5 35.5
    +------------------------+---------------+
    | | |
    | | |
    | 大ガラス部分用 |小ガラス部分用 | 56.5
    | | |
    | | |
    +------------------------+---------------+
    | | |
    | | |
    | 大内部用 | 小内部用 | 54.5
    | | |
    | | |
    +------------------------+---------------+

    56.5 mm の部分が ガラス部ぎりぎり。大だと長辺で、小だと短辺。後は内寸に合わせてあるから遊びが大きい。

    ガラス部専用なら

    78.5 37.5
    +------------------------+---------------+
    | | |
    | | |
    | 大ガラス部分用 |小ガラス部分用 | 56.5
    | | |
    | | |
    +------------------------+---------------+
    | | |
    | | |
    | 大ガラス部分用 |小ガラス部分用 | 56.5
    | | |
    | | |
    +------------------------+---------------+

    遊びは、ほんのわずかなので、角をすこしヤスリで削らないといけないかも。両辺合わせたので 上記から -0.5mm しても 問題ないはず。

    小ガラス部分用はなにに使おうか考えていない。


そういうものにしたので、2.8インチTFT 液晶 EGO028Q02の方がやっぱり見栄えがしそう。うーん YHY024006A をいくつか確保したんだが .. 悩ましい。

ところで、サイズを見ていて思ったのだが ... Arduino のサイズは、68.58mm x 53.34mm で RFAD のケースに入る。ピンソケットが 8mm タイプだとしても 内寸の 12mm 以下のはず。

ガラスをつけたまま 保存用ケースとして使えるし、ガラスを取って、ピンソケットだけ露出させるというのもアリかも知れない。

ejackino は、78.74mm x 55.88mm でケースには入らない。だがしかし、DC ジャックが邪魔なものの ガラス部分にはマウントできる。下向きにマウント出来るなら、使わないときの保護ケースになったりして便利かも。

それはともかく、作ろうとしているものが arduino に合うのなら考えねばならない。 japanino。たぶん dac23-u4 とコネクタ位置が 競合しない。

追記: CPLD の回路設計

いろいろ考えてみたわけだが、CPLD の回路が作れなければ話にならない。さて、それは作れるのだろうか?

基本的なことをここでメモしておこうと思う。

SPI は、1 バイトのデータを送るのに CLK に対して 8 回 クロックする。 普通 MSB が先。送信データはお互いに ↓でシフト。受信側では ↑で受け取る。作ろうとしている回路は データが確定したら nWR にパルスを送らなければならない。



CS ~|__________________________________...._|~
_ _ _ _ _ _ _ _
CLK ___| |_| |_| |_| |_| |_| |_| |_| |______

MOSI |MSB| D6| D5| D4| D3| D2| D1| D0|
|
(shift) 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 0

______________________________ _________
nWR |_|

どうも nWR の↑で データ採取するようなので、CLK の ↑ で
o シフトレジスタを シフト
o 3 bit のカウンタを +1
 o カウンタ(の今の状態) が 7 のとき nWR = ~CLK , それ以外で H


RS を外から指定する前提なら 8bit のシフトレジスタ と 3bit のカウンタで事足りる。ちなみに CS は リセット 。

さて、制御バイト を追加して、RS を内部で作り出すには ...

まず、状態として RS と nCB , nCONT を新たに作り、以下の動作を カウンタ(の今の状態) が 7 のとき 行う。

  o nCB が 0 のとき、RS=D7 (シフトレジスタの MSB)
  o nCB が 0 のとき、nCONT=D6
o nCB が 0 のとき、nCB=1
o nCB が 1 のとき、nCB= ~nCONT


あと、nWR の動作を変更

  o カウンタが 7 のとき nWR = ~(CLK && nCB ) , それ以外で L


まぁ間違っているかも知れないが、最低限の機能はだいたいこんな感じ。

ここまでで、ラッチ数 14 bit 。XC2C32A ですら 楽勝。

READ を付けるとすると どうなるのだろうか?

まず、RD という情報を 追加。制御バイトの bit5 を RD に割り当てる。

で、RD=H のときは、シフトレジスタの出力を Hi-Z にしなければならない。あと、READ 用の シフトレジスタを用意する。READ したデータは一旦ここに格納して、次の 転送で送る。

... ここらで面倒になってきた。それにしても 楽に 32bit に入りそうだ。

    ちなみに、LED 用の PWM の機能を追加するには、まず カウントと PWM のレジスタ 4 つを定義して、それぞれ「カウンタ値 > レジスタ値」で H を出力する。PWM のレジスタに書き込む場合は、制御バイトに bit を追加していけば良さそうだ。


追記: arduino のシールドにしてRFAD のケースに入るのか?

サイズ確認のためのデータ2



灰色の点線がケース外寸で実線が内寸。arduino 自体はケースに入りそうだし、dec23-u4 のコネクタとも干渉しない。

だが、高さが問題。液晶の基板から底面まで 12mm しかない。普通のピンソケットとピンヘッダの組み合わせだと基板間 10mm 。基板厚 1.6mm とすると 入りそうな気もするが 基板底面のハンダ部分があるから無理。ケース底面にドリルでくぼみを作るぐらいしないと。液晶の基板側のピンヘッダを ピンだけにすれば基板間 8mm にはなる。だが、今度は aruino の部品と 液晶の基板の部品が干渉する。AVR や ISP コネクタ、コンデンサの位置を入れてみたが、結構厳しそうだ。

さらに、大物がある。USB コネクタと DC ジャック。USB コネクタは 11mm 高さだったような... これは無理。液晶の基板を切るぐらいしないと。 DC ジャックは樹脂だから、削ればなんとか。

互換ボードだと Seeeduino なら MINI コネクタだし なんとかなりそう。大人の科学の japanino どうなるか分からないが 背があるのは、コンデンサぐらいのようだ。

arduino + ケースというオプションは 、ほとんど部品を載せられない。それでは本末転倒のような気がしてきた。とりあえず忘れよう。

そんなことより、基板が大きくなったおかげで、部品が沢山載るようになった。再度 XMEGA を検討してみよう。

posted by すz at 15:21| Comment(0) | TrackBack(0) | 日記

2010年02月24日

PWR44

勢いで tiny44A のボードを設計した。




パターンを見ただけで、やっつけ感バリバリ。



回路図はこんなの。抵抗値などは適当。

忘れそうなので、どんなものを作ろうと考えたかメモしておく。

基本は、ステップダウン DC-DC コンバータの回路。Pch MOS FET を PWM でスイッチングして、電流と電圧を測定し フィードバックする。

電源は、DC ジャックから取る。
スイッチングの回路を簡単にするため、tiny44A の VCC も 入力と同じにしている。

基準電圧は、1.2V の レギュレータを使おうと思う。出力 電流が 0 だと 安定しないかも知れないので、抵抗を付けている。

電流測定は、差動入力の ADC を使う。分圧しないでそのまま接続。

電圧測定は、別の ADC 。基準電圧は 1.2V なので とりあえず、5:1.2 で 分圧。ノイズ対策 か 微調整のために、2012 の パターンを1 個 付けている。

    あ、間違ってる。GND にすべきところに ADC を接続している。... ダメダメだ。

あと、インジケータとして LED を 2 個付けられるようにしている。2色LED の SEC2764C を予定。

コネクタは、電源入力と出力。あと ISP 。ISPの信号は、ホストと接続したり、(自作)I2C ディスプレーと接続するようなことを考えている。

なにができるか ... というと 最初に考えたのが NiMH の充電器。

市販の 充電器もボタンがないし、LED だけつけようと考えてこうしている。

そうは言っても、他にもいろいろ使えるはず。ちょっとメモ


  • 高機能電源

    電圧・電流がわかるのだから、ホストとつなげて、ログしたり 電圧を設定したりすることは出来そうだ。

    問題は、電源が 5V 系(予定) なこと。自作装置はすべて 3.3V 系で統一しているから、接続できるものがない。秋月の FT232RL ボードぐらいか。... となると、ソフト シリアルで通信することになりそう。(自作)I2C ディスプレーにつなぐ場合は、5V にも対処できるようにしておけば OK 。

    もっと問題は、高機能であっても高性能にはならないこと。

    ADC からフィードバックするので、出力電流変動が大きいと レスポンスが悪くて追従できないかも。あと、VCC が 入力と直結だし、スイッチングするのでノイズの影響を受ける。

    制御せずに 電流測定をするだけならまだ、なんとかなるかも。

    ちゃんと作るべきだったとは思うが、まずは使ってみようと思っている。

  • ボリュームでの制御。

    ADC はいっぱいあるので、電圧を設定するのに ボリュームを使えても良さそうだ。

    フィードバックの レスポンスは落ちるが、これも試してみようと思う。


反省点。

今日発注したのに、すでにいくつも反省点がある。-- まぁやっつけだから仕方ないか。


  • ノイズ対策
    よく見たらパスコンすらない。スイッチングの入力のコンデンサと同じでは、ノイズ乗りまくりになりそう。

    LC フィルタを通して VCC に接続すべきだった。

    あと、ベタアースとか。実を言うと試してみたのだが、うまくできなかったのでやめてしまった。

  • ボリューム用パターン

    全然考えてなかった。基準電圧を切替えるのは嫌なので、1.2V - GND を分圧するのが良いかも知れない。

  • ホスト との通信。

    電圧差があるので I2C は無理そう。シリアルならそれで良いので、出力を分圧するぐらいしておいても良かった。

  • 電圧フィードバック

    ADC ではレスポンスが悪い。... とすれば コンパレータは使えないのか?

    コンパレータと比較する電圧を PWM で作れば レスポンスが良いものを作れたかも知れない。

    ただし、PWM の電圧を安定させるには、電源をレギューレータにしないとまずそう。... あるいは、コンパレータと比較する電圧を測定した方が良いか。



... というわけで、充電器になれば幸い みたいな基板になってしまった。まぁそういうものでも使っていこうと思う。


追記:あまりにひどいのでデータを作り直した。... あとの祭りだが、次の機会に出すためには用意しておかないと。

    基板データに問題があるという連絡がきた。自作面付けツールのバグだったが、これ幸いとデータ入れ替えすることに。

データ:pwr44-0.2.zip
更新データ:pwr44-03.zip (EzPCB 向けに DRC 変更 と 他の小基板も同梱)





電圧のレベル変換を、抵抗+ツェナーですることにした。V-USB をかで使っている方法。これなら I2C も OK 。... というか I2C の出力 H は pull-up だから 電流もあまり流れず都合が良い。

あとは、ボリューム用に基準電圧を出力したり、コンパレータを使えるようにしたり、VCC の前に LC フィルタ入れたり。

メモ;

普通に ADC で電圧測定する場合は、ADC2/AIN1 を使う。基準電圧 1.2V なので 分圧抵抗を入れる。

電流は、ADC5 - ADC3 。差動入力が使える組み合わせ。

さて、コンパレータを使う場合。OC0B で比較する電圧を作る。その先に ADC1/AIN0 が接続されている。ADC1 で期待した電圧かどうか測定してフィードバックをかける。

この電圧は 基準電圧の1.2V 以上は必要ない。C6 と並列に抵抗を入れて PWM の精度を無駄にしない方が良い。

制御は、AIN1 > AIN0 になったのを割り込みで検出して 一定期間 メインのスイッチングを止めるとか。

パーツリスト

抵抗やコンデンサの値は決めていない。それ以外のもの。


  • ATtiny44A-SSU
  • U1 MCP1700T-1202E 基準電圧用 (1.2V)
  • Q1 Pch MOS FET(SOT23)DMG3415U
  • L1 NRG4026T 22uH/0.9A (VLF4012AT 47uH/360mA(秋月)など 4mm タイプも一応適合)
    NR5040T 22uH/1.4A とかもぎりぎり載るかも。
  • L2 CB2518T 22uH or 47uH (or マイクロインダクタ 47uH(秋月))
  • D1 SBD (SOD-123) SS2040FL(秋月) , RB161M
  • D2 SEC2764C(秋月)
  • D3,D4 ツェナー 3.3V RD3.3S(鈴商) , BZT52C3V3
  • DCジャック マル信 MJ-83/84 (pdf) (秋月)
    DCプラグは、φ3.4 x 1.4 。3.5mm x 1.3mm も? 千石や共立 他で扱っている。
  • RC値の案

    R1 100k (1k 〜 470k )
    R2 100
    R3 0.1 (〜 1) ±1% 電流測定用
    R12,R13 220 (100 〜 1K)
    R4 47k R5 12k 電圧測定用
    R6 100k (10k 〜 )
    R7 1K LED 高輝度赤 (Vf 1.7V)
    R8 470 LED 黄 (Vf 2.0V)
    C6 10u + 47k, R11 100k -- PWM の電圧を 1/3 ぐらいに。cut-off 0.5 Hz
    R9,R10 10k (1k - 10k) -- ISP で使用するため。
    C4,C5 1u
    C3 10p で cut-off 7.2 kHz -- たぶん不要。
    C7 10u (L2 = 47u なら cut-off 7.3kHz )
    C3 22u (L2 = 22u なら cut-off 7.2kHz )

    C2 は、22uF 以上。3216 100uF(Z)(秋月) とか 3216 47uF(K)(秋月) とか。

    PWM は 40kHz 以上を目指す。8MHz 内蔵rc なので、200 clock 周期 以下。OSCCAL 変更で周波数を上げるのもアリか。
    ADC の フィードバックの周期は 15kHz ぐらい? レスポンスは十分かも。


インターフェイス

インターフェイスに使える信号は 2 本しかない。MOSI/SDA と SCK/SCL だけ。ただし、3.3V 対応にはできる。

要するに I2C のマスタか スレーブ。マスタの AVR に接続して I2C で通信すれば、一応なんでもできるはず。I2C のマスタにする場合は、(自作)I2C ディスプレーを接続する。

それ以外には、ADC4 と ADC6 になるので、ボリュームが 2 個までつなげる。

それでほぼすべて。I2C 用の線をソフトシリアルにすることは可能だが ... たぶん使わないだろう。

追記:基板ができて来た。



posted by すz at 18:56| Comment(116) | TrackBack(0) | 日記

2010年02月11日

はさみで切れる基板

アマゾンで売っている ユニバーサル基板(黒)超薄型t=0.4mm 230x320mmは、ハサミで切れる基板として、「なんでもつくっちゃうかも」他で紹介されている。

さらに自由に曲げられるユニバーサル基板 なんてのもある。これは、「スタバブログ」で紹介されていた。

    2011/1/16 追記: 結構安いものもあるようだ。

    しまりす堂というところだと、片面だが 70x90mm が一枚 200円。10 枚セット 1800円。両面大型だと 180x300mm ののものが 1700 円。
    さらに 400mm x 150mm なんてのもある。

    どうも 自動車の LED 装飾用の市場というものがあるらしい。

「エレ玩 Konyaの開発記録: 自己流基板制作方法覚書き」は、プリント基板の作り方が解説されている素晴らしい記事だが、実をいうと 「0.5mm厚の基板を使用しているので、基板カットはハサミで大雑把に切り、ナイフで仕上げます。」という記述が一番驚いた。

とにかく、基板というものは、0.4mm 〜 0.5mm までならハサミで切れるもののようだ。

    基板がはさみで切れるものだという発想自体がなかった。シール基板(0.1mm)なら切ったことはあるのだが、そのとき どの厚さまでなら切れるのだろうなんて考えなかった。

    30mmx10mm の基板を作ったときは、相対的な厚みに驚いた。もうブロックのような感じ。これ以上小さなものを作るのは難しいだろうと思った。はさみで切るのなら、いくらでも基板を小さくできる。SOT23 サイズ 2 個だけのせた基板でも問題ない。

この事実を知ったとき、最初に思ったのが、0.4mm 〜 0.5mm の基板を発注できたら、面倒だったり高価だったりする面付け指定しなくとも良いし、極小基板も自分で切れば作れるではないかということ。

PCBCARTが、0.5 mm を扱っているので調べてみた。

自分で切るなら、サイズは 80x100 で良さそうだ。デフォルトからシルクを 2面に変更したのを ベースとして、0.5mm にしたものと、さらに レジスト色変更+金色仕上げの比較。

    80x100 Silkscreen 2sides
    10 20 50 75
    1.6mm $ 95.50 $ 115.70 $ 160.70 $ 191.95
    0.5mm $ 116.30 $ 139.10 $ 194.20 $ 232.45
    0.5mm + ETC $ 129.00 $ 153.50 $ 214.20 $ 256.70


まぁ安くはない。だが、B基板だって 20枚買えば 4000円近くにはなる。20枚作るとして、高々 それの 3倍ぐらいだ。よく使うパターンを集めれば十分もとはとれる。.... と思うことにしよう。

EzPCB も 0.4mm 厚が発注できるようだ。

ちょっと値段をメモ

    80x100
    10 20 50 75
    1.6mm $ 121.14 $ 166.66 $ 262.53 $ 330.38
    0.4mm $ 116.31 $ 148.86 $ 218.29 $ 271.86

シルクはたぶん片面。

追記: 秋月の SMDプロトタイピングガラスユニバーサル基板(0.3mm厚)Cタイプ(72x47mm) もハサミで切れる。裏面はベタグランドだそうなので、丈夫なような気がする。

    追記 :
    これは、結構便利につかえる。ただパターンが細かすぎで となりにブリッジしたりしてハンダ付けは、なかなか難しい。



    ちなみに、こんな風に USB MINI-B コネクタを無理やり載せることもできる。これを切って親基板に貼り付けるといったこともできる。


2011/1/16 追記

    なんと 0.8 mm でもはさみで切れた。詳しくは『Fusion PCB』の記事を参照。



    使ったはさみ。百均で購入。... 確かセリアの ペット関係。



    はさみで切れることが分かったので小基板を詰め込んだのを設計してみた。記事は『小基板セット』。

    Fusion PCB は 50mm x 50mm までなら 最低 10 枚 でほぼ 2000円(送料込み)。( 今まで発注したのは おまけが付いて 12 枚入っていた。)

    10枚だとしても 一枚 200 円。この基板は 8 つ入れたから 1 つ あたり 25 円。全部について同じ数必要というわけではないが、格安感がある。10m x 10cm に 面付すれば、4 倍入って 4000円ぐらい。そこまで数は必要ないので作らないが、そういう手もある。
posted by すz at 12:14| Comment(1) | TrackBack(0) | 日記

2010年02月10日

シリアルLEDディスプレーメモ

何日か前に、秋月の 3桁 7セグLED C-533SRをみたら品切れだった。(今は入荷したようだ) これで思い出して 8x8 の BU5004-R はどうなったのか見てみたら、なくなっていた。2色の BU5004-RGはまだ売っているようだ。

なくなりかけてから記事にするのもどうかと思うが、なくなってしまっては記事を書けないので、これらを使ったものの記事を書いておこうと思う。

BU5004-RG を BU5004-R と同じ配線にすると 緑の単色ディスプレーになる(はず..確か)。RG を R の代替として Tiny2313 を使った簡単配線の シリアルディスプレーを 考えてみようと思う。

    実は、昔に記事にしたものの焼き直し。最近は事情が変わったので再考してみようと思う。変わった事情としては、

    • FT232RL が手軽に使えるようになって シリアルが使い易くなった。
    • チップ抵抗を使うようになってきた。
    • 140x40のユニバーサル基板が発売されたが、これに並べたくなった。
    • Tiny2313 をあまり使っていなくて死蔵しそうになっている。

    こんなところ。


さて、簡単配線と書いたが、基本は 8x8 ディスプレーに合わせて配線して、プログラム側で対応する方針。考えてみたのだが、次のようにしたら良さそう。Tiny2313 は裏がわに実装する。図は裏から見たもの。



Tiny2313 を LED のピンの間におくとすると、配線図のように、Tiny2313 が 上下にはみだす。なので、横に並べることになる。

    幅は 24mm .. ということは、0.945 inch で 0.1 inch 単位ではない。 0.05 inch 分 無理やり 右か左にずらすことになる。複数並べるときは、最初から考えておかないと 隙間が空いたりでこぼこになったりするので注意。
    140x40 基板に並べたとすると 5 つ。40x8 dot 表示器になる。
    (5+1)x7 で表示するとすれば、6桁+α。値段は RB5004-RG が 200円 Tiny2313 が 100円。140x40 基板が 200 円。5つ並べれば 1700円。

RXD は、全部共通。受信処理もまったく同じにして、すべてのチップが同じデータを持つようにする。チップの EEPROM の 設定で 表示の位置だけを変える。こうすれば、メモリが許す範囲でいくつでもつなげられるはずだ。

表示は、1dot づつ表示する。いくつ並べても 1/64 duty ということになる。このような表示の仕方なら Tiny2313 は 40mA 程度は流せる。LED 側も OK -- ただし、バグなどで、ずっと表示し続けると 焼けるおそれがあるので、3.3V では 数 mA になるようにしてデバッグしておいて、バグが取れたら 5V で使うとか工夫がいる。

    緑だと Vf が高く 2.4V ぐらい。100 Ωなら 3.3V で 9mA 。5V だと 26mA 。9mA で 1/64 duty だと暗いかも知れないが、焼けるおそれはない。赤なら Vf は、1.8V ぐらい。3.3V でも 15mA , 5V なら 32mA 。-- 100Ωでいけそうだ。 (というか 100Ωしか持っていない)

簡単配線といっても、ななめに接続している。チップ抵抗(2012) を使うのが前提。ただし、本当に簡単かどうかは未確認。

あと、ICソケットを付けると配線が難しくなりそう。直付けするのを前提にしている。

ちなみに、ROW1 を PD1 = TXD に 割り当てている。8x7 で良いなら、これを外して、TXDを使うことは可能。たとえば、ボタンを LED の配線と共用で付けて、ボタンの状態を送るとか .. 。TXD は ボタンを付けたチップだけ接続する。全部をつなぐわけではないのでうっかりしないように。

    ボタンの付け方は、
                            __
    COL1(K) -- |>|----o o--- GND

    とか。COL1 を pullup すると ... ボタンを押したとき 0 が読める。表示する場合 COL1 は、Hi-Z か L なので、ボタンを押しても影響がない。

あとは、プログラムを作るだけだが、昔作ったのを利用しようと思っている。→ bu5004s-0.1.tar.gz

作成中のは コレ。bu5004s-0.2.tar.gz。配線に対応しただけ。

ところで、作ったあと、プログラムを書き換えるには ... ICクリップを使うしかない。秋月だと、20個2500円。これは 0.8mm ピッチもいけるロジアナ用の高級品。昔ながらのやつだと、aitendo で 1個50円のこれとか これとか
(後者の方が良さそうに見えるがどうなんだろう?)

さて、同じように、 3桁 7セグLED も扱えるはずだ。ちょっと考えてみた。(ちなみに、4桁7セグLED も、互換性がある。6pin が DIG4)



これは、3桁を 2 個まで接続する例。(裏から見た図)

    C-533SR は、幅 24.7mm, 高さ 18.8mm 。C 基板をたてにしたとして、横方向に 2 個ならべられる。--- ただし、Tiny2313 を左にずらさないといけない。

4桁 2 個のときは TXD を使う→7桁(最後の桁は不表示), 使わない→8 桁 にできるようにする。

ちなみに、aitendo の 4桁 7セグは、50.3mm x 19.0 mm 。140x40 基板に 横に 2 個載る。さらに 上下というのもできるかも知れない。そんなに付けてどうするか? --- デロリアンは、3段だったはず。まだまだ足りない。

それはおいておいて... 7セグの方のプログラムはない。... といっても 上記のプログラムで無理やり使うことは可能なはず。定義ファイルを書き換えて、グラフィック用のデータを送ってやれば良いはず。まぁ、ボチボチ試してみよう。
posted by すz at 21:11| Comment(0) | TrackBack(0) | 日記

2010年02月07日

Tiny44Aをなにに使おう

i2c 温度計が欲しかったので、デジキーで買ったのだが、ついでに Tiny44A も買ってしまった。1個だと 217円だが、25 個だと 137円だったので、ついついぽちった。DIP ではなく SOIC の方。

    他のついでとしては、TCXO 付き RTC の DS3232S とか SPI RAM の23K256 とか。あと 1SV322

    DS3232Sは、1Hz を出力させて AVR に水晶を付けたときの精度とか温度特性を見るために購入したのだが、他は明確な使い道を決めていない。

    ちなみに、23K256 は、A25L80などの SPI FLASH とピンアサインが同じ、コマンド体系も似ている。→A25L80の使い方

AT90USB162/ATmrga32U2 は、ADC がないし 補助用と割り切っても良いかなぐらいの気持ちで買ってみたのが実情。Tiny45 の方が少し安いのだが、8pin では厳しいのではないかと思い 14pin の Tiny44A にしてみた。ちなみに、コストパフォーマンスが良いのは、この 2 種類だと思う。

    8pin の Tiny45 と比べると、使える pin 数が多いのが有利な点。VCC/GND/RESET を除くと 5pin vs 11 pin 。これだけ違えば使える範囲も随分違う。
    ただ、不利な点もある。Tiny45 は、高速な PWM を持っていて、それで音を出したりするのに有利。あと 8 pin なので、SOIC でも実装が楽という利点もある。

    ちなみに ATmega32u2+Tiny44A と ATmega32u4とを比べれば、387円+217円 vs 473円 で 値段の面だけでも ATmega32u4 の方が良さそうだ。USB 用のエンドポイントの数(4 vs 6)とかバッファの量(176B vs 832B)から見ても ATmega32u4 の方が嬉しい。ATmega32u4 が入手できるようになれば、補助としても用なしになりそうだが... 2chip ならではの利点があるかも知れない。

AT90USB162/ATmrga32U2 の補助で使うときは、i2c スレーブにして、ADC とか 電源制御とかを考えている。ただ、AT90USB162/ATmrga32U2 からの書き込みもしたいので、4 pin で接続することになるかも知れない。

  • ISP をまるまる空けるとしても、8 pin も使える。AREF を基準電圧入力に使うとして.. 使える ADC は、ADC1,2,3,7 の 4pin。差動入力が使えるのは、ADC1,2,3 の任意の 2pin 間 と ADC3-7間。MOSI を、ISP 用に使うとしても ADC ぐらいは使えるかも知れない。 その場合は ADC5 が使え ADC3-5 の 作動入力 もある。

  • ADC の差動入力は、両極入力モードが使え、x20 利得モードもある。

  • PWM は、OC0A が空いていて、OC0B は、ADC7 と排他で使用できる。あと MOSI を使う場合、ADC5 と排他で OC1B が使える。

  • XTAL1/2 に水晶をつながない場合は、PORT としてしか使えない。

こんなところ。ADC 専用チップとしても、お得なように感じる。

補助としてどう使えるかについては、だいたいイメージできた。が、なにしろ沢山買ってしまった。スタンドアローンで使う場合どういうものに使うと良いのだろう?

  • V-USB でアレコレするパターンは、USB910B で結構やった。
    V-USB + ADC というのは、あまり美味しくない。USB を駆動するとインピーダンスが低いのでノイズが載ってしまう。USB の通信を抑止することもできないので、ノイズを除去するのも難しい。

  • ATmega88 系が向いているもので、Tiny44A を無理に使っても意味がない。なにしろ ATmega328 が 秋月で 250 円だ。実装スペースを減らしたいとか、差動入力を使いたいとかなら Tiny44A が向いていそうだ。

あまり目新しいのは思いつかないのだが、例えば... 充電器。

差動入力で電流を測定できるから向いているはず。充電器を含めた電源制御をまかせてしまうのもありかも知れない。

あとは、ちょっとした測定器。I2C 液晶を作る予定なので、インターフェイスは 2pin で済む。測定はこちらですることを考えようかと思う。普通は ATmega88 系 1個で済ませられるわけだが、レギュレータと水晶とを 1組にまとめたいので、一応意味はある。

まぁ、他に思いついたらここに追記していこうと思う。

ところで、レギュレータと水晶とを 1組にまとめるのに、アイテムラボの SOP20-1P27-Wを使おうと思っている。



これを次のような配線にするつもり。



現物合わせで、水晶がランドに届かないことがわかった。(スルーホールは絶縁処理されている)足を付けてからハンダ付けしないといけなさそう。それに、かなり配線が多い。ちょっと作るのは厳しいかも知れない。



pin 割り当てはこんな感じ。INT は、内部使用 の意味。AREF は、TAR5SB33 の NOISE 端子を使ってみる。1.2V 前後のはず。

    パーツリスト
  • 水晶:FA238-16MHz
  • レギュレータ TAR5SB33 or SI91841DT-285(2.85V)
  • 水晶用コンデンサ 2012 18p (マルツ:22p)
  • レギュレータ用コンデンサ(入力側) 1608 1u
  • レギュレータ用コンデンサ(出力側) 2012 10u
  • レギュレータ用コンデンサ(NOISE) 2012 0.01u (マルツ)
  • Tiny44A (SOIC-14)
  • 変換基板 SOP20-1P27-W (アイテムラボ)

ちなみに、レギュレータと水晶とを 1組にまとめるために わざわざ こういうふうにしている。単に Tiny44A を使うだけなら、基板に直付けすると思う。カプトンテープかなにかで絶縁しておいて、端の 4pin だけ 基板のランドに付ければ十分だと思う。

追記:結局(ワークサイズパッケージのついでに)基板を作った。




こんな回路図。



で、出来上がったのがこれ。

追記: 2010/12/10 いまさらながら作ってみた。





なんだか.. 適当になってしまった。IC はナナメになっているし。他のパーツもあまり整然とはしていない。

足は、ダイオードの線。2 つに折って 基板に挿している。drill を 1.0mm φにしたのでけっこうぎりぎり。写真では分かりにくいのだが、基板の横ピッチは 400mil のはずなのだが、ブレッドボードに挿すときに 300mil 分の位置に挿してしまった。そのため足が内側を向いている。いつか IC ソケットに挿すかも知れないので、そのままにしている。



ちょっとばかり出来が悪いので修正した。(作るつもりはまだないが、一応)

  • clk44-02.zip

  • まず、C4 の真ん中に VIA が来ている。ちょっと気をつかうので、位置を変えた。
  • あと、線が全体的に細い。ライブラリも修正して、線やランドを太くした。
  • コネクタの drill は 1.1mm φにした。
  • 最後に 裏をベタアースにしておいた。

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

i2c液晶の設計

どういうわけか、ATtiny2313 で i2c インターフェイスのキャラクタ液晶を作ろうとしている。

作りたいのは、別のものなのだが、プログラムが入らなくて満足できなかったときの保険として、同じハードで役に立ちそうなものをと考えていたらこうなってしまった。


とりあえず、プログラムが先に出来た。→ i2clcd-0.3.tar.gz

もちろん、デバッグなどしていない。ここでは、どういうものを作ろうとしているかまとめておこうと思う。

    回路図(予定)


まず、使おうと思っているのは、aitendo で安売りしている、8x2のSC802A-3.3V。これと、ボタンを 3 つ付けて i2c デバイスに仕立てようと思っている。

    一応 8x2 液晶のリスト。
    Aタイプ (上に端子) 14 ピン,16 ピン 40Wx35.4H

  • デジキー NHD-0208A 各種
  • サイキットストア XCL-082A-BG-YE 5V BL なし
  • aitendo SC802A-3.3V , SC802A(5V)

    Bタイプ(左に端子) 14 ピン 58Wx32H
  • デジキー NHD-0208B 各種
  • 秋月 ACM0802C-NLW-BBH 5V?, 白ヌキ

    Bタイプ(左に端子) 16 ピン (位置が ずれる) 58Wx32H
  • aitendo SC802B-3.3V


ST7032i


i2c 液晶は、ストロベリー・リナックスで扱っている

これが、どういうものなのか、まず調べてみよう。

データシートのリンクを開くと ST7032i のデータシートだった。
これを見てみたところ、基本は、キャラクタ液晶のコマンド体系をそのまま使って、i2c に載せただけのようだ。

もう少し詳しく説明すると、

  • i2c のパケットの先頭バイトがコントロールバイトで、RS (データかコマンドの指定)と、Co (コントロールバイトをこれ以降使うか使わないかの指定) だけが含まれている。続くデータは、キャラクタ液晶 と同じ意味。

  • Co = 1 のときは、RS + DB0-7 のデータを常に組で送る。16bit データだと単純に考えてもよい。RW は、i2c のパケットに含まれている。8bit 単位でしか送れないにもかかわらず、4 bit mode まで有効。

  • RS 1 bit のために 1 バイト消費するのは効率が悪い。Co = 0 にすると以降のコントロールバイトを省略できる。当然ながら、パケット内では RS の状態を変えられない。

  • i2c のアドレスは、0x3e 。

  • i2c インターフェイスでは、read (RW = 1) は、使えない。Write Only 。


これで基本は説明できた。キャラクタ液晶 を使ったことがあれば、使い出せるはずだ。

ただし、全部は説明していない。コントラストをコマンドで設定できる機能がある。

データシートを見ると、Function Set (001xxxxx) の bit0 が、IS (normal/extension Instruction Select) となっている。

IS = 1 にすると、コマンドセットの一部が切り替わる。

切り変わるのは、Set CGRAM (01xxxxxx) と Cursor or Display shift (0001xxxx)。この部分が、ST7032i 独自のコマンドに切り替わる。

仕様を決める


ST7032i に準じたものにしようと思う。違う点は以下のもの。


  • 4 bit mode は、サポートしない。Function Set の DL が指定されても常に 8bit mode として扱う。
    ... 内部は 4bit mode を使うので、DL = 0 に変換するわけだが、i2c 上のデータは常に 8 bit 単位ということ。

  • read で、bit 0-2 にボタンの状態を読めるようにする。
    ... 複数バイト読もうとしても 1 バイトしか読めない。

  • 拡張コマンド。IS で切り替えるのは同じだが、切り替えるのは Set CGRAM (01xxxxxx) のみ。拡張コマンドでは、コントラストと バックライトをサポートしようと思う。


      拡張コマンド(予定)
      0100 B7 B6 B5 B4 バックライト 上位ビット設定
      0101 C7 C6 C5 C4 コントラスト 上位ビット設定
      0110 B3 B2 B1 B0 バックライト 下位ビット設定
      0111 C3 C2 C1 C0 コントラスト 下位ビット設定


    下位ビット設定に意味があるかどうか分からないし、あくまで予定。輝度調整もできない場合がある(予定)。


    仕様まとめ
  • Write:

    (1) I2C アドレス + RW=0 , control byte , コマンド/データ
    control byte , コマンド/データ
                 ....
    (2) I2C アドレス + RW=0 , control byte , コマンド/データ
    コマンド/データ , コマンド/データ
                 ....

    control byte: bit7 (Co) : Co = 1 (1) パターン ,
    Co = 0 (0) パターン
    bit6 (RS) : RS = 0 コマンド , RS = 1 データ

      コマンド仕様:
    00000001 : Clear Display
    0000001x : Return Hone
    000001 I/D SH : Entry Mode Set
    00001 D C B : Display ON/OFF Control
    0001 S/C R/L xx : Cursor or Display Shift
    001 1 N F 0 IS : Function Set
    01 AAAAAA : Set CGRAM Address (ノーマルモード)
    01 ...... : 拡張モード
    1 AAAAAAA : Set DDRAM Address

  • Read:

    (1) I2C アドレス + RW=1 , xxxxx b2 b1 b0

    b[012] はチャタリング処理済の ボタンの状態 (1 = ON)


i2c スレーブドライバの API 変更


USI を使った i2c スレーブドライバを以前作ったのだが、上記の仕様に合わない。すこし API を考えて作りなおそうと思う。

いくつかセンサ系の i2c デバイスのデータシートを見てきたのだが、だいたい次のような使い方をしている。

  • Write では、最初のバイトで レジスタ番号を指定して、続くデータは、そのレジスタの値。
  • レジスタ番号 のみの Write をする使い方もある。その場合、次の Read で読む レジスタの指定になる。

実は、以前作ったのはこういう使い方すら出来ない仕様だったのだ。

さて、API をどうしよう。

READ は どうも 指定された メモリを勝手に 返すだけで良さそうだ。 レジスタ番号が変更されたら、メモリのアドレスを再度設定すれば良い。xx_set_read_buffer とかそんな感じ。

WRITE の場合、ストリームではなく、パケットを意識したコードを書くことができないといけない。まぁ、パケットの終わりが判かれば良いだけなので、xx_can_getc で、0/1 以外に -1 を返してパケットが終わったことが判るようにしようと思う。

それ以外にも、問題はある。一旦バッファに読み込んで処理する方式なので、受け取ることができるパケットのサイズには上限がある。しかも受け取ったパケットの処理中は、ACK を返せない。
これについては、方式を変えないと対処できないので今回はパス。

追記:i2c のコネクタ

忘れていた。i2c のコネクタをどうするか決めないといけない。

workshop Nakでは、こんな配列を使っているらしい。

    1. GND
    2. VCC
    3. SCL
    4. SDA


あと、玄箱 PROでは、

    SCK(SCL?)
    SDA
    VCC
    GND

らしい。SCL と SDA が逆。I2C はコネクタで接続するものではないから、標準などないのだろうなぁ。とりあえず workshop Nak と同じにしておこう。

追記:

もうひとつ見つけた。Seeeduino V328 では、

    1. VCC
    2. GND
    3. SCL
    4. SDA

これまた違うアサイン。
posted by すz at 07:27| Comment(114) | TrackBack(0) | 日記