CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

部品実装完了

アナログ系の部品取付けはさらっと済みました。オーディオ信号入出力のΦ3.5ジャックは足を少しヤスらないと挿入できないので後回しです。

 

コーデックAD1847には汎用のデジタル出力端子が2個ありこれにLEDを接続してあります。まず手始めにこれを制御してLEDチカチカから始めようと思いマニュアルを読み始めたのですが何かエラくめんどくさそうです。

 

まずDSPとコーデックはフレーム同期シリアルで通信しますが、そのためのDSP側の通信設定とコーデックの初期設定、シリアルのバスマスタはコーデック側になるので通信開始はDSPへの割込みで駆動、レジスタの選択はタイムスロット毎に時分割送出するなどやるべきお膳立てがいっぱいあります。

ここらへんはマニュアルを読んでもさっぱり理解できないのですがアナデバのアプリケーションノートにADSP-2181AD1847のシステムによるループバックのサンプルプログラムがあったのでこれを解きほぐしながらやってみます

 

アナログ部組立て

デジタル系のみ動作確認していたADSP2101ボードですが、放置していたアナログ系も着手することにします

 

 

アナログ系のオプションパーツキットです(ディアゴスティーニだと挫折/飽きたころに届くセット)

そろえたものはキーパーツのコーデックAD1847の他、入出力コネクタやコンデンサ類です。アナログフィルタを構成するCRは、Rについてはチップ抵抗でも構わないと思ってるのですが、オーディオ信号を積層セラミックコンデンサに通すのがどうも気分的によろしくないので、かさばりますがスチロールコンデンサやオーディオ用無極性ケミコンを使っています。

LED基板

寄せ集め基板から切り出した8桁LED基板も組み立ててみます

 

使うLEDはHP5082-7760。1個の幅が12.7mm(0.5inch)なのでこれを8個並べると101.6mmで100mm幅の基板にギリギリ乗っかりました。というか両側が少しはみ出るのですが、そのためにこのユニットを左右に隙間なく並べることができます。

 

基板裏には制御ICのMAX7219と信号入力/カスケード接続用のコネクタがあるだけです。コネクタの選択はちょっと失敗しました。基板設計時に適当な2×3配置のフットプリントを置いたのですが何かピッチが狭い。あとで手持ちか入手しやすいコネクタに現物合わせで差し替えようとしたのですがうっかり忘れてそのまま基板発注してしまいました。

出来上がってきたらこれが2mmピッチなんですね。あるにはありますがあまり一般的ではない・・QI(MINI)とか、ヒロセのDF11シリーズとかですが。

 

DF11は手に入ったのですが、ハウジングに差し込むコンタクトにリード線をカシメるのが異様にたいへん。もちろん専用圧着工具なんて持ってないのでラジペンでやると勘合部分を潰してしまったり、うっかり半田付けすると全体に回ったりで歩留まり悪すぎです

 

なんとか出来上がったハーネスでCPUボードと接続。これはなんでもいいですがi8031ボードに接続した状態です。PPI8255のPA0,1,2にCLK、DATA、LOAD信号を割り当てています

グリッドドライブ

蛍光表示管LD8118のボードですが7セグ8桁であれば、セグメントドライブ8回路(7セグ+小数点)とグリッドドライブ8回路なので8チャンネルのトランジスタアレイを2個使えばカバーできます。

・・数字を7セグメントで表現するのを考えた人はほんとエライ。小数点の1セグメント合わせて1桁が8ビット(1byte)になってCPUバスと相性がばっちりです。発明者は不明らしいですが・・

 

このLD8118は9桁あるのでそのためにトランジスタアレイを1個追加するのもなんなので9桁目(G9)のドライブはディスクリート回路にしました。

ところがこれが大失敗。

グリッド信号GD8をL/Hに振ってもトランジスタQ5はONしっぱなしになってしまいます。見れば明らかなんですがVAAが20V近くあるわけでGD8が0~5V変わったくらいでは当然OFFになりません。これは前段にZDかNPNトランジスタ入れてレベルシフトしてやらなきゃだめですね。たまにアナログっぽいことに手を出すと必ず何かやらかします。ここはこの回路は取っ払い14セグメント上位用の3つ目のトランジスタアレイをくっ付けてグリッドドライブへ転用することにします

(ベースをプルアップしておいたのでGD8がつながるPICのピンを入力(Hi-Z)/出力Lの切替えで制御する・・という手もあったかな?)

 

ところでこの表示管には「COM」という謎の端子があります。ダイナミックドライブ用の素子なんでコモン信号ということはないし・・ LD8118の数少ない情報でもこれについて何の説明もありません

 

今回トランジスタアレイを追加したので余っているドライバでこのCOM端子をSEG8として叩いてみました。すると・・

 

最上位桁だけにあるシングルクォーテーションのようなものでした

電卓用の表示管なのでオーバーフローとかなにかのインジケータ用みたいです

ACV測定

7セグメントVFDLD8118を使った基板の方も制御ファームを書き込んで動かしてみました。表示がちょっと暗いかな

 

フィルタをかけるとこういう感じ。カウントアップテストで最下位桁はちらついてます

 

この基板は自作のVFD電源が載っていますがアノード、グリッドのドライブ波形を見ると19Vくらいしかありません。LD8118Va,Vgは24Vtypのようなのでちょっと低いようです。ただ昇圧電圧はトランスの巻き数比なので変えようが無いんですが

 

多少出力が改善するようなのでトランス一次側にパラでつながるコンデンサを調整して共振周波数を100kHz程度にしました。このときヒータ電圧はこんな具合で8.6Vp-pありこちらは十分です

 

この周波数帯域の微小AC電圧は測定が難しいです。オーディオ帯域の少し上ですがデジタルテスタのACVレンジではまったく測れません。テスタのACVレンジは商用周波数50/60Hz専用みたいなもので手持ちのsanwaDA-50Cでは帯域わずか500Hz、FLUKE87でも20kHzLPFが入っててダメでした。

本来はバルボルがあればいいのでしょうが、これではどうかと古いアナログテスタを引っ張り出してきました

AC3Vレンジで帯域200kHzと謳ってますが2.9V程度を指示しています。8.6Vp-pは仮に正弦波とすると実効値約3Vなのでいい線行ってます

 

らい太くん4爆誕

ROMライタのハード、ファームはこれで完成としました。新旧のFlashROMライタを並べると幅は同じくらいですが厚みは半分です。これらは同じPC側ホストプログラムで制御できます。

 

今回のプロジェクトは最終的にケースにも収まって珍しく完成度が高いのですが、振り返るとちょっと気になるところもあります

 

(1)バッファ用メモリ

これはターゲットROMの最大容量と同じだけあったほうがマッピングを考えずに済みます。今回は手持ちの1MbitSRAMを付けてしまいましたが4Mbitのほうがベターです

 

(2)電源スイッチの要不要

USBバスパワーの+5Vを入り切りする電源スイッチを付けたのですがノブが出っ張って邪魔なのでUSBコネクタの抜き差しで代替しても良かったかもしれません。フォトMOSリレーでROMの電源だけ切るというのは諦めていて、同じ内容のROMを複数個焼くという使い方もまずしないので、スイッチ無し、都度ケーブル抜き差ししてダウンロードの方がシンプルです。むしろSRAMのバッテリバックアップをするべきだったか・・

 

(3)両電圧対応

今回は3.3V系フラッシュ(29LVシリーズ)を焼くために作りましたがレギュレータをパスすれば同じハード・ファームで5V系(29Fシリーズ)にも使えます。コントローラのPICも3~5Vでの動作は問題ありません。電源スイッチはむしろ3.3V/5Vの切替えのために使えばよかったなぁと。(しかも中点OFFのトグルスイッチだったので)

本来はレギュレータの出力とバスパワーの切替えのところにスイッチがあればよかったのですが実際の回路・パタンは以下のようになっているのでのように無理やり3.3V系に5Vを突っ込む修正を考えました。これだとジャンパ1本で済みます

(3端子レギュレータでVIN<VOUTにするのは御法度ですが以下の場合はVINが開放状態でVOUTが逆流する先が無いのでOKとするマニュアルもあり)

といざやろうと思ったら、実装したSRAMが3.3V専用でしたということであえなく企画倒れ。もし初めに付けたSRAMが5V系だったら実力値で3.3Vで動いたかもです

(4)漏れ電流

電源スイッチを廃しようと思ったもう一つの理由が、USBケーブルを差すとシリアル信号TXDがPIC内の寄生ダイオードを経由して電源ラインを持ち上げてしまうことで、これがなんとも気持ち悪いところです。電源スイッチOFFでも3.3V電源系は約2Vまで上昇しまい、PICのBOR(BrownOutReset)電圧はデフォルトのLo設定だと1.9Vなので電源スイッチ操作でのリセットも効きません。BORはHi設定にすれば2.5Vになりリセットするようになりますが、のところに入れた保護抵抗を通信速度に影響しない範囲でもっと大きくすれば良いのかもしれません

I/F変更

PC上で動作する既存のROMライタホストプログラムは次のようなコマンドを発行します。これを受けて応答を返すようにROMライタ本体のファームウェアのI/Fを変更しました

ケースに組み込んだ際、コントローラをPIC16F914からPIC16F1939に差し替えておきました。プログラムエリアが4kWから16kWと4倍になったので消費量は23%となり一気に余裕ができています

これでホストプログラムから制御できるようになりました。

ただ一点問題があり、バッファメモリ128kB<ターゲットROM容量512kBとサイズが異なります。現状のホストプログラムはバッファの0番地からバッファサイズmaxまでをROMの0番地からベタで書き込むようにROMライタファームへ指示しているためROMの0x20000番地以降が書き込めません。仕方がないのでRomBaseSelectというコマンドI/Fを追加してROMの開始アドレスを変更できるようにしました

普通はアセンブラだろうがCだろうが128kBに達するようなコーディングはまず無いのでリセットベクタを含むROMの後半1/4、ROMBASE=0x60000に指定しておけばたいてい事は足ります

ROMライタファームウェア側の機能としてエレクトロニックシグネチャの取得も付け加えました。UVEPROMにもある機能ですが従来は+12Vくらいの高電圧印加が必要でした。FLASH-ROMではオペレーション電圧のまま決まったコマンドシーケンスで読み出すことができます

データシートに記載されている通り”014F”が返ってきました。