2006/08/02(水)UART PC16550(PC16550DN)によるシリアルインターフェース

トランジスタ技術の2006年5月号から6502を使ったマイコンボードの連載が始まっていた。興味を引いたのはシリアルポートにナショセミの16550を使っている事だ。

PC16550DN

80系でUARTのチップといえば8251が定番であるが、ボーレートジェネレータを内蔵していないのでチップ数を減らす場合には不利だろう。この記事に触発されて最初にした事はこのチップの入手であるが、DIP品種となるとなかなか見つからない。

しかし鼻が利くのかこれまたスンナリと入手。さてこのチップの情報はマイコンで調べるよりもPC互換機には大量に使われているので、その上で走るオープンソース系のOSを調べたほうが早い。

その上、デバイスドライバーのソースコードだけではなく、貴重な説明資料も豊富に見つかる(その上日本語で)。

もちろんこのチップを扱うのは初めてだけれど、データシートも英語だけれどそんなに難しくはないし、実際の

FreeBSD2.8のドライバーのソースなんかも大変参考になるだろう。Cが得意でなくてもinb()とoutb()周りだけ読めればそれでも大抵理解できる。また、現在の物よりも古いソースの方が単純で明快だ。

さて、問題は何に繋ぐかだ。やっぱりここは8048の出番だろうか。PICやAVRではUARTのポートなんて当たり前の事なんだが。

2006/07/30(日)DRAMテスターその後

Z80

[Z80]なんとか成功にたどり着く

Z80では計算上、確かにREFRESHサイクルが間に合わず、テスト出来ないのですが、その後実はタイミングの出し方が悪かった事が判明。書き込み時にRASを出した後にデータを一旦セットしてからWEとCASを出さなければ書き込みが失敗する事が判明。またREFRESHタイミングが足りない部分は、1アドレスについて読み書きする度にREFRESH信号を加えてセルフリフレッシュさせる事で、ALL1,ALL0,ランダムデータ書き込みテストがパスするようになりました。

REFRESHサイクル

連続して読み書きするのならば、連続する下位アドレスをRAS側に出してやる事でセルフREFRESHさせる部分を取り除いてもテストが通る事が確認されました。実際計算すると2ms/128をかなりオーバーしているんですが・・・・こんななんちゃってでも動作するんだなぁ。凄いなぁ民生品のレベルは。

2006/07/29(土)TMS9918 VDP ビデオボード

Z80

TMS9918

既に1年以上経っているが心の隅につっかえている

TMS9918を使ってみたいという想いだが、これを扱うには2つの大きな課題がある。

1つ目は、TMS9918は16KのD-RAM 4116を8本も必要なのだが、このチップは3電源(-5V +5V +12V)も必要なのである。家にある1982年のメモリIC規格表にはピンコンパチで単一電源の4816という物が載っているが現在はとうにディスコンで入手は諦めていたが、

最近になってやっとHM4816AP-4というチップを8本入手できた(1本350円で8本で2800円もしました)

2つめは、8本ものDRAMをハンダ付けするのがイヤでたまらない。昔はサンハヤトからICB-015というD-RAM増設基板があったらしいのだが、これも既にディスコン。方々に探し回っていたが、こればっかりは見つからず、夏休みに全精力を投入してUEW配線を行うか、はたまた片面基板でバス配線だけでもしてしまおうかと悩んでいたが、サトー電気さんに在庫があるという知らせで、ギリギリ入手が出来た(現在は無いそうです)

さて、全ての問題がクリアしたので早速製作に取り掛かるとしよう。でも、直ぐに思い立った事があってそれは、実は昔からマイコンに携わってはいるがD-RAMを扱ったことは一度もないのである。

[Z80]DRAMテスター

このZ80ボードのI/Oポート経由でDRAMテスターを作ってみようと思い立ち、16PINのソケットをハンダ付け。そして8255のポートへとUEW線で接続して簡単なバラックを起こした。

最初に全ビットを0にして読み出しテストをするとOK。しかし、全ビットを1にして読み出しテストをすると最初のアドレスで既にNG。データシート片手に何度かRAS・CAS・WR信号のタイミングを変えてみるもやはり1が書き込めない。

そこで、各アドレスに0や1を書いては読み出しテストをすると全アドレスがOKとなる事が判った。これはREFRESHのタイミングが間に合わないのでは無いかという考察に(やっと)たどり着く。DRAMはREFRESHしなくても連続して読み出し・書き込みをすればREFRESHは不要なハズである。ではREFRESHに必要なサイクルとはどの位なのかと計算してみる。必要な時間は2msの間に128アドレスについて操作しなければならず、1アドレス当り15.6usである。え゛?この時間だと例えば2.5MHzのZ80ではIN/OUT命令だけでも4.4us掛かる訳でRAS・CAS・WRのタイミングで夫々OUT命令が必要でそれらをLOWにしてHIGHにするので最低でもOUT命令だけで6つは必要。これだけで26.4usとなる。当然間に合っていない訳です。

AVRとかではどうなんでしょうか。20MHzで1サイクルとすると1命令は50nsという計算で312命令が使える訳です。再びAVRを取り出すべきだろうか。

2006/07/02(日)リモコンのデータフォーマット

赤外線リモコン RM-SE770

RM-SE770

就職してから直ぐに買った物の中に、オーディオコンポがあった。ビクターのロボットコンポというやつでレコードプレイヤー・チューナー・タイマー・スペアナ・グライコ・ダブルカセット・CDプレイヤー、そしてアンプとスピーカーがセットになっていた物で総額30万円くらいだったと思う。それを確かローンを組んで買ったと記憶している。で、これは全部お払い箱で現在はそのスピーカーとリモコンだけが何故か手元に残っている。

[Z80]データフォーマット PL-IRM0101使用

解析結果はご覧の通り割と単純ですね。ちなみに一昨年のこの日記を書いて以降ずーっと今日まで机の上にZ80のボードが放置されていた。どうりで片付かない訳だ。

RM-SE770 データフォーマット

2006/06/25(日)16KbのPROM

小さなメモリー空間

X2816 NMC27C16 MB8516

8080AやZ-80そして8048/8035の外付けのROMとして広く使われた2KBのメモリー(P-ROM)。

今となっては2KBというのは猫の額より狭い空間かもしれないけれど、同時期のSRAMに至っては256x4bitや1024x1bitなんていうのもザラでした。

これら3つはintelの2716ピンコンパチブルなので置き換え可能な品種

Xicor X2816BP

XicorのEE-PROM 2816 5V単一で書込み可能 書き込み時間の遅いSRAMと同等に扱える。バイト単位で再書き込み可能(5ms)、一万回保障。100年間のデータ保障。 DateCode 9020

NMC27C16(2716 C-MOS)

National Semiconductor C-MOSの為、消費電流が非常に少ない 80C35と組み合わせて電池駆動可能だろう。DateCode 8424。最近になって、若松通商にて購入した。今でも売っていたのが信じられなかったが。

MB8516(2716)

Fujitsu MB8516 DateCode i2716の富士通版 独特のパッケージです。ピンが折れやすいが金メッキ品です。 DateCode 8103 四半世紀前の物。現在でも問題なく消去・書き込み出来ています。

2006/06/18(日)MCS48 DS1822 高精度温度計完成

0度以下も測定可能

8048とDS18B20を使った温度計だけれども、0度以下の温度表示も対応してみた。なにせ、よく考えてみると、昔のZ80の頃にさえ真面目に数値演算処理なんてした事なかったので、符号付き二進演算について基礎知識が足りなかったのだ。そんな訳で苦労して作ったソースプログラムのテストで家の冷蔵庫の温度を測ってみたら、冷凍庫は-20度だったが、冷蔵庫内は9度だった。これではビールが飲み頃まで冷えないではないか。

この温度計は3桁なので温度によって表示パターンを変える仕組みになっている

100 - 127 チップが壊れそうだが

00.0 - 99.9 これは通常の表示

-0.1 - -9.9 これは0度以下。真冬にはこの程度も必要だろう

-10 - -99 -99度まで測定できるか不明だが。

そして、室温モニターとして温度の変化を音で知らせる。

  • 2/16 度以上高くなると ピッピッピッ
  • 2/16 度以上低くなると ピューン
  • そして 1度以上の変化の場合はそれぞれの音が3回続けて鳴る

室温の変化

部屋の温度の2/16度の変化って結構ありますね。窓を開けておくと、風がスーっと吹き抜けるだけで簡単に0.5度程度は部屋の温度が下がるし、DS18B20の近くに手をかざしただけで0.3度程度は測定値が高くなります。夜には電球のスタンドの光を当てただけでも変化が見られます。

放射冷却の実験にも

現在、28.8度を表示していますが、DS18B20にエチルアルコールを吹きかけると、24.5度程度まで一気に下がります。これは放射冷却を目のあたりにしたのではないでしょうか

DS18B20/DS1822

DS18B20もDS1822も同じモノなんでしょうか。データシートではDS18B20が誤差0.5度、DS1822が誤差2度となっていますが、どちらも、差し替えて見た所、誤差は同じようです。また最小分解能は1/16度ですが、この程度は測定する度にパタパタと変化を繰り返すので、このソフトウェアでは2/16度以上の変化で音は鳴らすようにしている。

ledtemp.lst

ledtemp.lst

2006/06/04(日)8048使用 デジタル温度計 V2 完成

今度は個人宅でサーバー運用

実は、このprotom.orgって色々な所で寄生していて、昨日の夜11時に旧サーバを停止して、本日の昼には立ち上がる予定だったんですが、DNSサーバのキャッシュ時間を縮めておくのを忘れたため、周辺のPCがなかなか新IPアドレスに向いてくれなくて右往左往してしまいました。

配線完了

LED 8048 温度計

約3時間かかりました。しかし、7SEGのLEDのスタティック駆動って結局全部の本数を配線するって事ですね。最後は少し嫌になりました・・

まっ、いつものUEW線での配線なんですが、ちょっと込み入ってますね。

小さく作るにはテクニックより目の良さと集中力が必要だな。

なんとか簡単にプリント基板って作れない物だろうか。

CD-Rに直接プリントとかってプリンターがあるから、プリント基板に直接パターンを印刷して、そのままエッチングっていうプリンター無いでしょうか。

8048デジタル温度計 V2 完成

LED 8048 温度計

DS18B20はほんとに凄い。無校正の状態で0.1℃単位で測定出来るそれにデータシートでは誤差0.5℃だ。が、この8748バージョンは失敗だった。折角出来たのでデジカメで写真を撮っていると、温度がどんどん上がっていくのが確認できる。

最初は、電気スタンドのライトの光が当たってそれが影響しているのかなと思った・・・が、

設計ミス

何気なく8748を指で触れるとあちちち!かなり熱いのである。やっぱり、LEDとポート直結はまずかったらしい。いくら同じIntelだからって、何時からおまえはPentiumになったんだ!といわんばかりの熱さだ。しかし、今更各ポートに抵抗を付けるスペースなど基板の何処にもないのだ!あー。3時間かけてUEW線をハンダ付けしたのはなんだったんだ?もう寝よ。

100Ω

で、取り急ぎ、LEDのコモンからVCCへの配線の途中に100オーム入れて見ました(7セグのLED3個で100オームの抵抗一本を共有)これがドンピシャで、8748は熱くなりません。明るさもまぁまぁ。今晩はこのボードを枕元に置いて寝てみよう。火事にならないよね。きっと。

2006/06/03(土)MCS48 7SEG LED 温度計

2進数と10進数

nibble - decimal

DS1820では温度を小数点以下4ビットまで測定できる(データが来る)のであるが、これを10進数で表示するところで困っている

LED3桁で0.1℃単位まで測定できる温度計を作ろうとしているが、小数点以下1桁で丸めようとするとこんな結果になってしまう。

かと言って、小数点以下2桁ではムダな感じもする

回路図はこんな感じで(6/4 100Ω追加)

LED 8048 ledtemp

配線待ち

LED 8048 ledtemp

CPUにintel MCS-48/8048 (今回はNECのuPD8748HD) 7SEGのLED DS1820の簡単な作り。

2006/05/20(土)セメダイン ラピー

UV-EPROMの窓シール

UV-EPROM 窓シール

昔はパーツ屋に行くとPROMの窓シールとか普通に売っていましたが、暫く前からめっきり見かけなくなりました。自分で使う分くらいは手元に少しあるのですが、大抵は黒いビニールテープを切って使っていました。2716とかのUV-EPROMだとそんなに神経質にならなくても良いのですが、8748/8479とかのEPROM内蔵の古いマイコンは光に弱くて、スタンドライトを付けたり、写真を撮ろうとしてフラッシュを使うとその途端に暴走してしまいます。で、写真にある通り文房具屋にいったら古い在庫らしいメタリックテープが80円で売っていました。金、銀、赤、青の4色でした。

8748も8749も2716も大喜び

さっそく家でEPROMの窓に張ろうとすると幅が広くて少しはみ出ますが、ハサミで切ってしまえばOKです。張って見た感じ、とってもグッドです。

ネットで「セメダイン ラピー」のページを見ると、今はこの大きさの物は販売していませんでした。まだ沢山在庫あったからもう少し買ってこようかな。

でもちょっと薄いみたい

しかし、それでもデジカメのストロボを近ずけて写真を撮ると8748は暴走してしまいました。薄いので強い光は透けるようです。