エントリー

2008年10月の記事は以下のとおりです。

甦ったPC-E500

  • 2008/10/27 17:06
  • カテゴリー:make:

 もう1回だけPC-E500のネタにお付き合い下さい。

 今回のメモリ増設をもって,PC-E500の改造は本当に終了しました。あとは日本語環境やファイラー,ゲームなどをインストールして終わりという感じなのですが,1年前に書きましたように,このPC-E500は私にとって2台目なのです。

 1台目は10年ほど前に入手したのですが,昨年久々の動作確認時に壊れていることがわかり,2台目を同じようにオークションで手に入れることにしました。

 その時,PC-E200,PC-2001,X-07,PX-1246やPC-1401など,何かに取り憑かれたように,目に付いたポケコンを片っ端から落札しては,宅急便のおじさんがポケコンを我が家に運び込む度に我に返るという生活を,年明けくらいまで繰り返していたわけです。

 PC-E500の故障というのは,そういう破滅的な生活のきっかけになった事件だったのですが,その故障したPC-E500は,何度か修理を試みつつも失敗に終わり,部品取りとしてジャンク箱に投げ入れられていました。

 修理の過程で部品も一部なくなっていますが,基本的に程度は良い方です。

 それは突然のことで,なぜかそのPC-E500が修理出来ると,根拠もなく確信したのです。

 当然,X-07という大物を修理した後にも修理を試みていますので,この1年で経験値が上がっているわけでも,なにか閃いたわけでもありません。ただ,なんとなく今回は修理出来ると思ったのです。

 果たして,土曜日にジャンク箱から取り出した,壊れたPC-E500を目の前にしていました。

 まずは不足している部品を戻すことから始めます。コンデンサもいくつかなくなっているので,これは回路図を調べて,同じものを取り付けます。SRAMもとりあえず256kbitのものを取り付けて元通りにしておきましょう。

 この段階で電源を入れても,やはりなんの表示も行われません。表示が行われないだけではなく,LCDに電源が入っていないような感じです。つまり,全く動作していません。

 どんなときでも,マイコン関係のトラブル対策は,電源,クロック,リセットの3つの神の手を調べることです。

 電源は・・・CPUにもメモリにも5Vがかかっていますね。これは問題なし。LCDの電源も一応供給されているようです。LCD電源用のDC-DCコンバータが動いていない可能性もあると思いましたが,なんとく動いているようなので,とりあえずそれは後回しです。

 リセットは・・・PC-E500の場合,パワーオンリセットは「ない」のです。恐ろしいといえば恐ろしい設計ですが,CPUのリセットはリセットボタンのみに繋がっており,電源ONキーが割り込みに繋がっています。

 ですから,PC-E500は電池を入れたら必ずリセットボタンを押さないといけません。電源ONキーと同時にリセットボタンを押すとメモリのオールクリアになり,初期状態になります。

 PC-E500は完全スタティックか回路ですので,電源OFFはスタンバイに入れることになりますし,電源ONも割り込みでスタンバイからの復帰をすれば良いだけです。電池交換でも,動作用電池とは別のリチウム電池が,メモリやCPUをバックアップしているので,動作用電池の交換後でも,元のようにレジュームがききます。

 そう考えると,確かにパワーオンリセットなんて必要がない,ということになるかも知れません。

 ということで,リセットは手動のみ,きちんと解除されているので,CPUは動いているはずです。

 クロックは・・・PC-E500はCR発振のスロークロック(約200kHz)が常時発振し,電源ONで2.3MHzのセラロックが発振をします。見てみるとどちらも問題なく発振しているようです。

 ということで,この3つがきちんと揃っているのに,動かないというのはちょっと厄介です。つまり,部品の不良かハンダ付けなど配線の不良のいずれかということになります。

 配線の不良ならまだ良いのですが,部品の不良ならお手上げになる可能性が高くなります。CPUも汎用品ではありませんし,ましてROMなど壊れていたら,もう本当に入手は無理です。(もちろん,ROMを自分で焼けばよいのですが)

 しばらく考えて,次のチェックです。3つの神の手が正常であるなら,CPUは少なくとも動こうとしているはずです。アドレスバスやデータバスを確認すると,なにやら必死になって波形を出しています。ちゃんと5Vと0Vを行き来しており,中途半端な電位は見あたりませんので,バスのショートはとりあえずなさそうです。

 次にチップセレクトを見てみます。リセットをかけてからチップセレクトの動きを見てみると,ROMへの信号は動いても,RAMへの信号は全く動きません。ということは,CPUはROMのアクセスをしようとして,失敗しているということでしょう。

 こうなると,CPUとROMの間の配線を見ていくのが良さそうです。データバスのD0からD7,続いてアドレスバスのA0から順に見ていきます。すると,A4で導通がありません。A3もA5も大丈夫なのに,A4だけ導通がないというのは,やっぱりおかしいです。

 そこで,とりあえずCPUとROMのA4をジャンパ線で直結してみました。

 電源を入れてみると,メモリ初期化のメッセージが画面に出ています。おお,修理が出来ました。とりあえず,どの部品も壊れていないようです。

 配線については,全部のICのハンダ付けをやり直しているので大丈夫と思っていたのですが,基板が壊れて,配線が切れていたようです。

 さて,こうして修理出来たことはうれしいのですが,あくまでこいつは予備機です。どこまで改造するべきか悩みましたが,もう1台のPC-E500がRAMをフル実装してあり,メモリカードまで潰していますので,こちらはメモリカードを使える機種として温存しておきましょう。

 ということで,RAMはS1:エリアをフル実装の256kByteとし,S2:やそれ以外のエリアには一切手を付けません。RAMは秋月で買った1MbitのSRAMを2つ使って改造します。

 SRAMを2段重ねにし,256kbitのSRAMを外して,交換します。A16まではそのままCPUから引っ張ってきて,CPUのA17を下の段のRAMのCS2に,上の段のRAMのCS2にはインバータで反転したA17を入れます。こうするとA17によってどちらかのRAMが選択されるという仕組みです。全メモリエリアをきっちり半分ずつ2つのチップで分け合う場合に,もっとも簡単な方法です。

 作業が終わって電源を入れると,ちゃんと256kByte認識しています。問題なしです。

 むしろ困ったのは,バックアップ電池のフタを固定するためにある,金属製のナットをなくした事でしょう。仕方がないので,0.5mm程の真鍮の板を重ねて,これをナットに加工して作ることにしました。

 ということで,PC-E500が2台になりました。それぞれのROMバージョンを調べると,2と3ということがわかりましたが,私にはどちらのバージョンの方が良いのか,わかりません。

 今度こそ,PC-E500のネタは終わりのはず・・・

PC-E500のメモリが1Mbyteに迫る勢い

  • 2008/10/24 19:21
  • カテゴリー:make:

 PC-E500関連の資料を眺めていて思ったのですが,S1:というエリアとS2:というエリアにそれぞれ256kByteのメモリを搭載したことで,もうメモリを追加する方法はない,と思い込んでいた私は,どうも間違っていたようです。

 もちろん,バンクメモリという荒技や,NANDフラッシュを内蔵するという方法で大きなメモリを搭載する方法は知っていましたが,これらはいずれもアマチュアが考えついた独自の方法であり,デバイスドライバがなければアクセスできません。

 私個人は,そこまでやってしまうことはオリジナルシステムを無視したように感じてしまい,どうも美学に反するように感じてしまうので,そうした方法を使ってまでメモリを増やそうとは思いません。

 PC-E500に搭載されたSC62015という8ビットCPUは,後にPIザウルスにも搭載された高性能なCPUです。先日も書きましたが,ユーザーが我慢できないコンピュータの弱点は処理速度よりもメモリの小ささだと思っていまして,PC-E500シリーズがマニアに指示された理由は,やはりこのメモリを搭載できる力に長けていたことにあると考えています。

 SC62015は,アキュムレータや汎用レジスタが8ビットなので8ビットCPUの範疇に入れてよいと思うのですが,スタックポインタやインデックスレジスタは20ビットの長さがあります。そのくせプログラムカウンタは16ビットだったりするので,なにやらアクの強さを感じますね。

 プログラムカウンタは確かに16ビットですが,4ビットのセグメントレジスタも持っていて,この2つで20ビットのアドレッシングを可能にしています。ただし,プログラムカウンタがオーバーフローしてもセグメントレジスタはインクリメントされないので,その点では8086なんかと同じように,64kByteの壁が存在しています。

 そんな話はよいとして,このCPUはとにかくアドレスを20ビット生成する力があるということですから,最大1MByteのメモリをアクセス可能なわけです。もともと32kByteしかRAMを持たないPC-E500にとって,1MByteというのは無限に広がる荒野に近いといえます。

 8ビットCPUでも64kByte以上のメモリをアクセスできるCPUは多いのですが,残念なことに多くはアドレスを生成するレジスタが16ビットだったりするので,実際に使ってみると非常に面倒な制約がついてしまうのです。SC62015についても,セグメントの境界による制約がないわけではありませんが,少なくともコードではなくデータについてはリニアアドレスと見て良いだけの自由度があります。

 もう1つ,20ビットのアドレスが生成できるからといって,CPUの信号線としてアドレスバスを20本も出しておく事は,普通はない話です。半導体の価格は,一般にチップ面積だといわれていますが,それは高価な半導体の場合のお話で,安い半導体の場合,チップそのものよりもパッケージの価格が大きく見えるようになることも多いのです。

 そしてそのパッケージの価格は,ピンの数と関係があります。使わないピンは出さないでおいて,ピンの数を減らした方が安くて小さいICになることは言うまでもないでしょう。

 SC62015の場合,アドレスバスが18本外に出ています。256kByteのメモリまでをサポートしているわけですね。上位の2ビットのアドレスは外には出てこないので,一見すると1Mbyteのメモリはサポートされないように思うのですが,実は上位のアドレスをデコードしたチップセレクト信号を8本出してあります。

 そうなんですよね。確かに20本のアドレスバスを全部外に出しておいてくれれば,どんなアドレスにも好きなサイズのメモリを繋ぐことが出来るのですが,一方でそのメモリチップを割り当てたアドレスの範囲でアサートされるチップセレクト信号を作ること(これをアドレスデコードといいます)は,メモリのサイズが大きくなればなるほど規模も大きくなり,煩わしいのです。

 そこで汎用性の低い組み込み向けのCPUではアドレスデコードを済ませたチップセレクト信号をアドレスバスの代わりに出しておくことが一般的です。気の利いたCPUでは,デコードするアドレスをレジスタで可変出来るようになっていて,これはこれでなかなか便利なのですが,弱点がないわけではなく,プログラムが走り出して,レジスタの設定が終わるまで外のメモリにアクセスが出来ません。

 SC62015の場合,チップイネーブルのアドレスデコードは固定されているため,言い換えると8本出ているチップセレクトにデコードされたアドレスが,即メモリマップになるというわけですね。

 これによると,

CE0 80000h - BFFFFh 256kByte 内蔵RAM(S1:)
CE1 40000h - 7FFFFh 256kByte RAMカード(S2:)
CE2 C0000h - FFFFFh 256kByte 内蔵ROM(S3:)
CE3 20000h - 3FFFFh 128kByte 未使用
CE4 0C000h - 0FFFFh 16kByte  未使用
CE5               LCDコントローラ
CE6 10000h - 1FFFFh 64kByte  ROMカード
CE7 BC000h - BFFFFh 16kByte  システム

 ということで,実は1Mbyte全部のエリアをアクセス出来るようにはなっていません。

 アドレスバスは18本しか出ていませんから,チップセレクト1つあたりに接続できるメモリは最大256kByteまでとなります。すでにCE2は256kByteのROMが接続済みですので,内蔵RAMとRAMカードのエリアをそれぞれ256kByteにした合計512kByteが,PC-E500の限界だと私は思っていたわけです。他のアドレスにRAMをただ繋いでも,システムレベルでサポートされなければ使い道がありませんからね。

 ところが,CE3にしてもCE6にしても,別にGPIOを併用したバンク切り替えで作り出されたアドレスとは違って,CPU自身が生成するアドレスであるところがミソでして,ここにRAMを繋ぐと,確かにシステムレベルでのサポートはなくても,CPUからは特別な工夫無しに自由にアクセス出来る事には違いないのです。

 もし,内蔵ROMのアドレスに割り当てられているS3エリアを,CE3に増設したRAMのアドレスに割り当てることが出来れば,CE3のRAMが直ちにシステムレベルでのサポート対象となりますね。(あ,ここでいうシステムレベルというのは,PC-E500のIOCSが持つファイルシステムでアクセスが可能になる,という意味でして,S3でROMがアクセス出来なくなっても,そもそもその必要性が薄いため支障がないのです。)

 それで調べて見ると,この割り当てというのは,IOCSのワークエリアの5バイトに,開始アドレスとサイズの2つを書き込むことで行われているらしく,要するにここをCE3のアドレスにしてやれば,めでたくS3エリアをRAMにすることが出来そうです。

 そこで先程のメモリマップを眺めてみますと,CE3の128kByteとCE6の64kByteが連続したエリアとして合計192kByteを割り当てることも可能です。

 ただ,256kByteで1チップのRAMなどを使うわけにはいかない(チップセレクトを2本使わないといけませんからね)ので,どうしたって2チップが必要になります。

 ここまで考えて,思いついたのは先日秋月電子で買っておいた1MbitのSRAMです。こんな事もあるかと買っておいたのですが,CE3に繋がる分はいいとして,CE6に繋がる分は半分余らせてしまうことになります。

 もったいないと思いましたが,よく考えると1つ100円です。100円をけちるのに256KbitのSRAMを2つ使うようにアドレスデコーダを組む手間や,あるいは256KbitのSRAMを1つだけ使って32kByte足りないままで使うよりは,ずっとお得と考えて,1MbitのSRAMを2つ使う事に決めました。

 回路図をささっとかいて,PC-E500を分解します。

 私のPC-E500は,S1やS2エリアのSRAMに,2Mbit品というちょっと変わったものを手持ちの関係で使っています。実は3.3V品なのですが,ダイオードで電圧を落としてごまかしてつかっています。(やばいんですけどね,こういうことをするのは。)

 ですからトータル512kByteになっているPC-E500としては配線数も少なく,またSRAM自身もTSOPという小型パッケージですので,スペースは十分にあると思っていたのですが,今回の1MbitのSRAMは通常のSOPです。分厚い上に大きいので場所がありません。

 そこで,RAMカードを入れる部分をこわして,ここに配置することにしました。どうせカードをはめ込めば暴走するわけですし,これでいいです。

 しかし,SOPのSRAMは分厚いです。1つあたり2.7mmほどあるので,重ねると5.5mm程にもなります。やはり少し削って,高さを抑えないといけないと判断し,ベルトサンダーを持ち出して削りました。

 あまり削りすぎると壊れるので慎重に削っていきますが,結局2つで5mm弱程度にしました。見た目には随分薄くなったように見えるのですが,シャーペンの芯1本文くらいしか薄くなってないのかと思うと,結構がっかりです。

 配線をどこから確保するかも悩んだのですが,元のRAMが付いていたランドはすでに2MbitのSRAMへの配線で使われていて,ここを使うのはトラブルの原因になるように思いました。そこで,RAMカードのコネクタを潰して,ここから信号を取り出すことにしました。どうせカードは使えないのですし,別にいいです。

 後は40本程度の配線を根気よく繰り返すだけです。私は単純作業が好きな人ですので,こういう配線は全然苦になりません。時間の経つのも忘れてしまうほど没頭できます。もしかすると,写経なんかもやってみたらどっぷりはまるかも知れないです。

 配線が終わってテスターでひと通りの確認をして電源を入れると,問題なく起動はします。追加したアドレスに値を書いて読み出すと同じ値になっているので,まずは動作しているようです。

 S3のアドレスをワークエリアを書き換えてみると,ちゃんとS3として増設したRAMが読み書きできます。一応動いていそうです。

 でも心配なので,増設したエリア全域を,AAhと55hで埋め尽くし,正しく読み出せるかを行ってみましたが,エラーも出ずにすんなり終了。もう大丈夫でしょうね。

 これで,私のPC-E500は,256+256+192の704kByteのRAMを実装したポケコンになりました。おお,往年のPC-9801を越えましたよ。(FM-RやPC-100,ハイレゾの98には勝てないのですが)

 これに内蔵ROMの256kByteを加えると,実に960kByteとなり,SC62015の限界である1Mbyteも目前というところまできます。調べて見るとさらにCE4まで使ってしまう人までいるようですが,私はもうそこまではやる気はしません。

 で,これだけメモリを増やしてどうするのか,とお思いでしょうが,日本語化するとメモリがたくさん必要なので,とてもありがたいのです。日本語フォントが50kByteちょっと,変換辞書が70kByteちょっとですので,合計ですでに130kByteほど。これにユーティリティ類やゲーム数本,ヘルプファイルをいれておくと,あっという間に256kByteなんか使い切ってしまいます。

 S1エリアはメインメモリですから,ここをストレージにするのはあまりにもったいないです。そこでS2にファイルのたぐいを集めるのですが,私の場合残り2kByte程まで使い切っていたのです。そこに192kByteも増えるのですから,これはもう盆と正月が一度に来たくらいありがたい話です。

 設定をすませ,広いメモリ空間をゆるゆると漂う感覚は,いつ味わってもいいものです。

 仮想メモリという「偽物」を当たり前の存在にしたモダンなOSに,飼い慣らされて牙を抜かれた現代人は,目の前にあるアドレス以外は信じない,という原始の我々が一様に備えていた野生の感覚を取り戻し,あの時のように星を頼りに粗末な小舟で果敢にこぎ出すことの喜びを,もう一度知ることが出来るのでしょうか。
 

テスタの修理

  • 2008/10/23 12:02
  • カテゴリー:make:

 ところで,先日の土日は,ふとしたことから随分時間のかかる修理をやる羽目になりました。

 それは,バーグラフ式のデジタルテスタです。1985年頃だと思いますが,今はなきソアーというメーカーから,バーグラフ式のデジタルテスタが出ていました。

 なんでもかんでも「デジタル」が優れていると盲目的に言われた80年代,テスタも例外なく,アナログ式のテスタは古くさいものとして扱われていました。

 ただ,電子工作の世界は,ベテランのおじさんたちが「アナログテスタには変化を見たりフルスケールに対する割合をぱぱっと確認出来るという良さがある」などと吹聴して回ったこともあり,アナログとデジタルが拮抗すると信じられていた特異な世界でもありました。

 ならばデジタルテスタでアナログのような表示をさせればいいんじゃないか,と本気で考えた面白い人たちがいて,それが先程のバーグラフ式デジタルテスタとして世に出るわけです。

 まあ,ちょっと考えればわかるんですが,せっかくデジタルになっている情報を,わざわざLCDのセグメントに1つ1つ割り当ててバーグラフにしてしまっても,何の意味もありませんわね。

 アナログは連続量だから針で示されるわけですし,デジタルは離散量だから数字で表示出来るのであって,本質的なデータの扱い方と表示方法を切り離し,入れ替えただけでは,それぞれの弱点を組み合わせただけの,最弱のテスタが出来上がるだけです。

 面白い,とそれなりに評判になったと記憶していますが,主流になることもなく,また後継機種が出ることもなく,さらに加えると絶賛する声もないまま,メーカーであるソアーと共に消え去りました。

 余談ですが,三和,日置などと列んで,テスタのメーカーとして知られたソアーですが,どうもこの少し後で倒産し,マザーツールとカスタムの2社に分かれたようです。どちらのテスタも店頭で見ることが出来ますが,正直どちらもぱっとしないという印象が私にはあります。

 デジタルテスタのサンプリングレートが上がり,連続変化をある程度捉えることが出来るようになり,これを視覚的に表現するために,数字での表示と一緒にバーグラフを出すテスタは普通に売られていますね。1つにサンプリングレートの向上と,1つはバーグラフを補完的に使うという役割の整理により,このアイデアは後世に残ることとなったわけです。

 というわけで,その時代が生んだ迷えるバーグラフ式テスタですが,私が手に入れたのはひょんなことからです。

 高校の1年と2年の夏休みに,大阪日本橋のジャンク屋「デジット」でアルバイトをした私は,そこで大変お世話になった店長さんと時々立ち話をするのが大好きでした。確か大学の入学が決まった冬だったと思うのですが,デジットから少し離れたビルに,デジットの2号店を出すという話を耳にし,開店直前に様子を見に行ったのです。

 店長の姿が見え,いつものように話を始めたところ,デジットの2号店としてここの店長も兼務するということ,店の名前は「客をデバッグしてやる」という挑発的な意味で「デバッグ」にした,ということを聞きました。

 デジットよりはもう少し綺麗なものを扱うことにしたらしく,いわゆるジャンクというよりも,今で言うアウトレットショップのような雰囲気を目指していたように思います。

 結局デバッグは紆余曲折を経てCCPというケーブルやコネクタの専門店になり,今はもう跡形もなくなっています。

 で,そのデバッグの開店時の目玉商品の1つが,先のバーグラフ式テスタでした。といってもソアーのものではなく,おそらくソアーのOEMと思われる,別のブランドのものでした。DT3100というのですが,ググってもかすりもしません。

 本体は水色で,いかにも80年代の色をしていますが,およそ測定器っぽくありません。付属品はテスタリードだけで,ケースもカバーもありません。説明書は英語のみで,外箱は簡素なボール紙です。これが確か3000円か4000円か,そんな値段だったと思います。いや,この価格はデジタルテスタとしても安いんですよ。

 手にとって「面白そうですね,買っていきますよ」と私が言うと,上機嫌な店長は「1000円でええわ」と気前よくサービスをしてくれました。お得意さんだろうが身内だろうが商売は商売と言い放つ店長が,どういうわけだかこの日は大盤振る舞いだったので,私は気味が悪くなったほどです。「入学祝いやとおもっとき」と,ニコニコして下さったことを,私は今でも覚えています。

 私にとっては3台目のテスターで,これで測定にも幅が出るなと喜んでいたのですが,使ってみるとあまり便利なものでもなく,次第に出番が減っていきました。

 その後,電池を何回か入れ替えて使えるようにはしてあったのですが,先日思い出したようにスイッチを入れてみると,動作しません。電池をしばらく替えていないなあと思いつつふたを開けると,見るも無惨に液漏れしていました。

 ソニーの電池は,百発百中で液漏れしますね。本当に時限爆弾です。

 アルカリ電池の液漏れは本当に始末が悪く,基板を溶かしてしまうことは昨年にも書きました。電池金具はボロボロですが,幸いなことに基板には浸透していない様子です。

 そこで,修理計画です。出番がないのでもう捨ててもいいかと思いましたが,やはり思い出の品ですし,測定器には違いありませんから,とりあえずやってみましょう。

 電池金具は,リン青銅板で作り直してみましょう。ちょっとバネが弱いですが,なんとかなるでしょう。同じサイズに切り取り,曲げて加工すれば出来そうです。

 そして土曜日,修理を始めます。金具を交換するのに全部ばらすことになったのですが,それはそんなに難しくありません。20年経っているとは思えないほど,中は綺麗です。

 金具を交換し,電池を入れてみると,あれ,動きません。表示が出ないのです。ちょっといじっていると表示が出たので,電池金具の接触だろうと,組み立て直します。

 しかし,組み立てると表示が出ません。

 これは困った。

 もう一度ばらしてみますが,やはり表示が出ません。LCDは外し,その下のシールド板を外して確認をしますが,目視ではなにもおかしいところはありません。

 見ると,シリンダ型の水晶発振子があります。これがクロックを作っているのでしょうが,動かない場合はクロックを疑うのがセオリーです。オシロスコープで確認すると,やはり発振していません。

 少なくとも,電源を入れて水晶発振子が発振していないというのは正しい動作ではありませんね。そこで,指で触ったり何度か電源を入れてみると,ノロノロと発振が始まるのがわかりました。発振開始に数秒もかかるのですが,こんなに発振しにくいのでは不安定すぎます。

 でも,もともとこれでちゃんと動いていたのですから,もう一度組み立ててみます。しかし,やはりだめです。

 今度は順番に確認していきます。基板単体で発振するのを確認し,シールド板を取り付けます。まだ発振してます。LCDを取り付けると発振停止。うーん,これは面倒です。

 水晶発振子が劣化することは,しばしばあることなので手持ちの32.768kHzと交換しますが,最初から発振しないか,発振しても同じような様子です。発振子が悪い訳ではなさそうです。

 ならばと外付けのコンデンサの値を調整しますが,10pF未満にしてもあまり変わらず。32kHz位の水晶なら,発振を安定させるためにコンデンサを小さなものにすると良いので,直列にして5pF位にします。

 そうするとかなりすっと発振が始まるようになりました。それまで正弦波だった波形も,矩形波に近くなってきました。力強くなってきたので気をよくして組み立てます。

 LCDを付けたところではまだ大丈夫です。しかしケースに入れると発振しません。何度か電源を入れると数秒後に画面が出てきます。しかし,それで2時間ほどもするとまた発振しなくなるのです。

 うーん,これでは使い物にならんなぁ,と,シールドのために切り刻んだ銅箔テープを手にくっつけながら,白んだ窓の外をながめて布団に入りました。

 翌日,改めて基板を見てみると,どうも水晶発振子とLSIのパターンが長すぎて,浮遊容量が大きそうに見えます。私のような素人でも,こんなパターンは危なくてひきません。

 考えたのは,LSIの足を浮かせて発振子を直接ハンダ付けし,最短距離で配線すること,それがダメなら発振器を別に作り,外部入力でクロックを入れてやろうという,2つのプランです。

 まず,最短距離での配線をやってみます。すると,強力な発振が始まります。これならいける,そんな風に思って組み立てますが,やはり大丈夫そうです。

 最終的に組み立てて何度か電源を入れてみましたが,問題なし。制度も確認してみましたが大きな誤差もないので,このまま使えそうです。

 というわけで,あまり便利ではないキワモノテスタですが,一応直って何よりと言ったところです。どうして壊れてしまったのか,なにが悪かったのか分からずじまいですが,結果良ければすべて良し。少なくとも発振しやすい方向で改善をしたのですから,今回やったことは無駄にはならないはずです。

 改めて思ったのですが,うちにあるテスタはどれももう10年以上のものです。中には20年以上昔のものもあります。メインで使っているのは秋月の安物ですし,予想通りそれぞれみんな値が違います。なにが正しいのか,もう分かりません。

 ちゃんとしたテスタを買い直す時が来たのかも,知れません。

PC-E500の電池電圧検出回路Final

  • 2008/10/20 18:42
  • カテゴリー:make:

 まず最初に,先日の電池電圧検出回路についてです。この土日に波形の確認を実機で行ったところ,考えたとおりの動作をしていました。電圧検出器にかかる電圧も,GPIOがLowからHighになったときに少しだけ上昇するようになっており,1つの電圧検出器で2つの電圧を判定できることも確認できました。

 さて,改めて改造後の実機で動作を見てみたのですが,2度目の割り込みがかからず,BATTマークが点灯しただけで終わってしまいます。電流を調べて見るとショットキーダイオードからの漏れ電流が小さくなっており,従って2度目の割り込みがかからないようです。

 数uAの電池への流入ということで,放っておいても構わないような気がしたのですが,BATTマーク点灯の後の電圧降下で電源が切れないことが問題ですし,日によって動作が異なるというのは許し難い状況です。それに,わずかな電流でも電池は劣化すると言いますから,やっぱり避けた方がいいです。

 要するにGPIOによって検出電圧を切り替えればよいわけで,トランジスタを使って抵抗をON/OFFするような回路などを考えてみたのですが,どうもうまくいきません。たぶん無理だと割り切って,ディスクリートで作るのはあきらめました。

 電圧検出器を電池に直結し,分圧抵抗を外すという作戦も考えましたが,これは試してみるとBATTマークの検出の直後にもう1回連続して割り込みがかかり,結果として電源が切れてしまいます。これでもいいのですが,やっぱりBATTマークで警告を先に出して欲しいです。

 そこで,幼稚な手を使いました。できればこういう芸のないことはしたくなかったところですが・・・

 やってることは単純で,GPIOと39kΩの抵抗との間に,CMOSインバータを2段直列に入れるだけです。インバータの電源は言うまでもなく電池電圧,つまり3.9kΩと同じ電圧です。

 こうすると,GPIOのHighレベルはCPUの電源電圧である5Vから,CMOSインバータの電源電圧である電池の電圧に変換されます。よって,39kΩはLowになったり電池電圧になったりして,元々のような2電圧検出が可能になるわけです。しかも,もう電位差はありませんから,逆流防止用のダイオードは必要なくなります。

 しかし,ここで私はずるいことをしました。CPUからの入力は5V,一方CMOSインバータの電源電圧は5V以下です。場合によっては4V付近になります。電圧の差が1Vもあるので,下手をすれば1段目のインバータは壊れてしまうかも知れません。

 1段目はトランジスタで受け,ここで反転させたものを2段目のインバータに入れれば良いように思ったのですが,それだとGPIOがHigh(電源OFF時)にコレクタ電流が流れたままになり,もったいないないです。CMOSインバータならほとんど電流は流れません。

 インバータ2つと電圧検出器のトータルが消費する電流は,全部で6uAほど。ちょっと大きいなあと思いつつ,SRAMのバックアップにDC-DCの消費電流を加味して200uAも全体で消費するので,まあいいかと考えました。素人丸出しの設計で,仕事だとこんな事をしたら怒られてしまいます。

 この回路の動作を確認してみると,4.2V付近でBATTマーク点灯,電源OFFは3.9V付近でした。うん,これならちょうどよいでしょう。

 ということで,この件はもうオシマイです。あんまりいじりすぎると壊してしまいますから,もうこのくらいにしておきましょう。

 そして,大容量512kByteのメモリを内蔵した改造PC-E500の本領は,日本語化によって発揮されます。15年前のデータやプログラムがちゃんと残っているのがPC-E500のマニアっぷりを象徴しています。

 10年ぶりの作業なのでもうほとんど覚えていませんでしたが,思い出しながらの作業でとりあえず日本語化完了。しかしクロックを高速側に切り替えた瞬間暴走してリセットをかける羽目に・・・わずか15分の命でした。

 クロックを上げて暴走するのは,電池が減っているときと言われています。私の場合,5Vに安定化したので大丈夫かとおもったのですが,PC-E500にとって5Vは低い電圧のようです。5.5Vまでかさ上げすればたぶんクロックアップに耐えられるのでしょうが,なんというか,そこまでする気ももうないので,このまま作業をやり直します。

 終わってみると,これで結局なにもすることがないという状況に寂しさが募るわけですが,これが確かに15年前,あるいは10年前なら,大したものだと感激したことでしょう。これでPDAのようなアドレス帳やスケジュール帳があるとさらに面白いのですが,その手の実用ソフトが皆目揃っていないというのが,当時のPC-E500の立ち位置を微妙に表しています。

 考えてみると,PC-E500のCPUは後にZaurusに搭載されるCPUです。それなりにパワフルで当然です。しかし,いつの時代でもマシンの陳腐化は「メモリ不足」であることを今回もつくづく感じますね。メモリさえあればどうにかなるものです。

やっぱり目の付け所がシャープ

  • 2008/10/17 19:58
  • カテゴリー:make:

 昨日,PC-E500というシャープのポケコンの電池電圧検出回路を「謎だ」と書いたのですが,気になってずっと動作を考えていました。

 電圧検出器は4.0Vのものが1つ,3.9kΩと39kΩの2本の抵抗で電池電圧(PC-E500の場合電池電圧と回路電圧はダイオードの電圧降下分だけの差で変化は同じです)とGNDを分圧し,その中点が電圧検出器に入力されています。

ファイル 226-1.jpg

 この回路で2つの電圧を検出し,1段階目ではBATTマークの点灯,2段階目では強制的な電源OFFと,2つの動作を行うようになっています。どちらも割り込みで処理をしていますから,CPUの割り込み入力端子に繋がっています。

 検出電圧は4.0Vのみ,割り込みも1本のみ,この状態でどうやって2つの電圧を判定しているのか・・・頭をひねって考えていました。そして,ようやく答えが出ました。

 え,こんなん簡単やんけ,ですって?こんなん当たり前やがな,ですって?

 いやー,私は頭が固いので,こういうパズルは苦手でして。


・フェイズ1~電源OFFの状態

ファイル 226-2.jpg

 39kΩの抵抗をずっとGNDに落としたままにしてしまうと,電源を切っていようがいまいが常に140uA程度の電流が抵抗に流れ続けてしまい,電池が消費されてしまいます。電源OFFのときなど,何の役にも立たない電流ですから,これをカットするためにCPUのGPIOをHighにしてあります。

 これはまあ,いいですね。


・フェイズ2~電源が入った

ファイル 226-3.jpg

 電源がONになると,GPIOをLowにし,図のように39kΩをGNDに落とします。すると電圧検出器の入力電圧は,抵抗によって分圧された電圧になります。仮に電池電圧が5Vだとすれば,4.55Vになります。

 電圧検出器は4.0VでCPUに割り込みを発生させますから,この電圧ならまだ割り込みは発生しません。


・フェイズ3~電圧が下がった

 このまま使い続けると,電圧が下がっていきます。電圧検出器の入力電圧が4.0Vになる電池電圧を計算すると,4.4Vと求まります。4.4Vになって割り込みが入ったら,CPUは画面にBATTマークを点灯させて,ユーザーに電池が減ったことを通知します。この段階ではまだ電源を強制的には切りません。1つ目の電圧検出が終わりました。

 そして,これがミソなのですが,GPIOをHighに切り替え,39kΩを電池電圧と同じにします。


・フェイズ4~さらに電圧が下がると

ファイル 226-2.jpg

 39kΩが電池電圧と同じなったために,電圧検出器の入力電圧はまた4.4Vに上昇します。CPUへの入力も復帰しますが,割り込みはかかりません。

 そして電圧がさらに下がり,電池電圧が4.0Vになった瞬間,同じ割り込み端子に2度目の割り込みが入ります。CPUはこの2度目の割り込みによって,電源を強制的にOFFするわけです。

 実際には,電池からダイオードを通っていますので,電池の電圧はすべて0.6Vほど高い電圧です。ということは,BATTマーク点灯は5.0V,強制電源OFFは4.6Vとなります。

 3.9kΩを大きくすればBATTマークの点灯する電圧が高くなり,同時に電源が切れるまでの差が広がります。逆に小さくすればBATTマークの点灯する電圧が下がり,電源が切れるまでの差は縮まります。

 どうですか・・・GPIOによって電源OFF時の無駄な電流をカットすることと,検出電圧を2つ用意するという2つの機能を実現出来ているんですね。いやー,私などは目からウロコがボロボロ落ちましたよ。見事ですね。

 PC-E500,PC-E550,PC-1480Uなど,同じ回路構成の派生機種や,製造時期の違いによって分圧抵抗の値もちょっとずつ違っていたりします。BATTマークを点灯させる電圧を何度か修正してあるということでしょう。どっちにしても,電源をOFFにする電圧は4.0Vということがはっきりしました。

 実は,PC-E500のエミュレータで,LowBattery割り込みを与えてみると,1度目の割り込みではBATTマーク点灯,2度目の割り込みでは電源OFFという動作をします。割り込みによってどういう動きをするかはファームウェアによるわけですが,そのファームウェアは実機のROMから吸い出したものを使っていますから,今回の答えで間違いないのではないかと思います。

 さて,この回路は電池の電圧とGPIOのHighの電圧が同じ,という条件で動いています。しかし,昇圧回路を組み込んで回路電圧を安定化したモダンな回路構成では,もうひとひねりが必要です。

 まず,電池電圧の検出は,電池端からショットキーダイオードを通して3.9kΩに与えます。これは,電池の電圧がGPIOのHighよりもいつも低くなることで発生する逆流を防止するためです。また,回路電圧は5.0Vで安定化してありますので,GPIOのHighは5.0Vとなります。

 同じような手順で考えてみると,


・フェイズ1
 GPIOはHighで,ダイオードがOFFなので電圧検出器の入力電圧は5.0V。よって割り込みは発生しないし,電流の消費もない。

・フェイズ2
 電源ONでGPIOはGNDに落とされる。これは先程と同じ。

・フェイズ3
 1回目の割り込みがかかるのは,先程と同じ4.4Vにショットキーダイオードの電圧降下分を加えた4.6V。4.6Vに達して割り込みが発生するとBATTマークを点灯し,GPIOをHighにする。

・フェイズ4
 GPIOがHighになったので電圧検出器の入力電圧は5.0Vになる。ここから電池の電圧が下がっても,ダイオードがONしないため電流が流れず,よって5.0Vのまま。


 ということになります。あれ,2度目の割り込みはかからないですね。

 実際の動きと違うので,LTSpiceという回路シミュレータを使って動作を見てみました。ショットキーダイオードを使うと実際と同じような動きをしますが,シリコンダイオードを使うと上に書いた状態になります。何が違うのか?

 そうですね,ショットキーダイオードは逆方向電流が多く流れるのです。シリコンダイオードは逆方向電流がほとんど流れないために,シミュレータの結果が上に書いた状態と一致します。

 しかし,ショットキーダイオードは品種によるのですが,今回のシミュレーションでは30uA程も流れてしまいます。試しに,ショットキーダイオードを1N5817にしてみると,以下のような感じの挙動を示します。


・フェイズ1
 GPIOはHighで,電池電圧が4.8Vとすると,電圧検出器の入力電圧は4.82Vと少し高め。割り込みは発生しない。

・フェイズ2
 電源ONでGPIOはGNDに落とされる。これは先程と同じ。電池電圧が4.8Vなら電圧検出器には4.3Vがかかる。まだ割り込みはかからない。

・フェイズ3
 1回目の割り込みがかかるのは,4.45V。この電圧で電圧検出器の電圧が4.0Vを割る。そしてGPIOをHighにする。

・フェイズ4
 GPIOがHighになることで電圧検出器には4.51Vがかかる。ここからさらに電池電圧が下がり,2度目の割り込みがかかるのは3.8V。


 ということで,なんとまあ1度目の割り込みは4.45V,2度目の割り込みは3.8Vという結果が出ました。実機によく似た状況が再現されています。ちなみにフェイズ4における逆方向電流は26.4uA。恐ろしいことに,この微弱な電流が電池に流れ込んでいるというわけです。液漏れしそう・・・

 さらに怖いのは,この電流は温度が上がるともっと増えます。当然検出電圧も変化するだろうし,電池も危険になります。ここにはショットキーダイオードは使えそうにないということが分かってきました。

 実に奥が深い。

 さらにもうひとひねりしないと,実用にならない感じがしてきました。

 それにしても,シャープはなかなか工夫上手ですね。回路電圧と電池電圧が同じであるという前提が制約としてあるとしても,1つの電圧検出器で2つの電圧を判定できるというのは,なかなかパズルっぽくて,いい勉強をさせてもらいました。

ページ移動

  • ページ
  • 1
  • 2

ユーティリティ

2008年10月

- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

過去ログ

Feed