2006/01/22(日)MCS48 TMP8155

またお友達が増えました TMP8155

しかし何と言うか最近はこいつらから私に声を掛けてくるというか、こいつらの声が聞こえるのか。8048/8051/8085/8088系のintelの昔のチップでデータバスとアドレスバスが時分割されているチップのRAMとI/O拡張のチップです。日本橋の近くに出かける用事があったので帰りに何気なくお店を覗くと「10本400円」でした。これを見つけたとき少し脱力しました。なんか名指しで「買って帰ってください」と言わんばかり。なんででしょ。当分8048から抜け出せません。8155が何か知りたい方はこちらをご覧下さい。

TMP8155-P

不器用な人向けのユニバーサル基板

ところで、良く使うユニバーサル基板ですが、私はこの写真にあるような電源ラインが引かれている基板の方が好きです。多分不器用なので込み入った配線をしないからだと思っています。一般的な全部が穴あきだけの基板の方が便利だよと回りは助言してくれるのですが・・・。

20060122_1.jpg

1SS97

知らなかったのですが、検波用に良く使われたショットキーの1SS97とかのダイオードってディスコンなんですねぇ。昔は携帯電話の光るアンテナとかによく使いましたが。ゲルマダイオードに似ているのでパーツ箱で混ざると訳わからなくなるので要注意ですね。お店の人に聞くと「在庫あるだけ」との事です。無線な人は「共立電子」へ急ぐべし。

1SS97

2005/11/27(日)8048を使った室温モニター

またまた8048

8048な室温モニター

約2年間もこのボードでせっせと8048していますが、回路図って描いたことありませんでした。書くほどの事は無かったという感じです。

この図で左側の部分が今回のメインで、TTL発振回路の抵抗の部分にサーミスタが入っています

サーミスタは温度に敏感に反応して抵抗値が高く(温度が下がる)なったり低くなったり(温度が上がる)しますので、結果この発振回路のパルス幅は温度と共に変化します。

8048でこのパルス幅を読み取って、変化したらBEEP音を鳴らそうという物です。久しく8048を使ってないのとアナログ回路も超久しぶりだったので、結局丸一日を費やすことになってしまった。

発振回路

8048な室温モニター

最初ここに74LS04を使ったのが間違いの始まりで、サーミスタが15K~10Kオーム位なのですが、LS-TTLではこの値は高すぎたようです。ちなみにこのサーミスタも最近やっとディジットで見つけました(ちゃんと買えば幾らでもあるけれど)昔は良く使われていたパーツなのですが(と要っても30年くらい前?ゲルマトランジスタのB級プッシュプル回路のバイアス用に)探し方が悪いのか小さな物が見つかりませんでした。ちなみに写真で手前にコードが延びた先の黒い物がサーミスタ。購入したものはチューブで絶縁してありました

見張り番

温度が高くなると高い音で、低くなると低い音でBEEP音がなります。今も横で室温をカウント(発振回路のパルス幅を)していますが、現在の値は 0x67 です。(全く補正していいないので意味はないが)明日の朝は一体どの程度の値なのでしょうか。今日は8048が添い寝してくれるみたいです

2004/07/10(土)8048マイコンを使った単音オルゴール

mmlplay

古くはTK-80でもオルゴールのプログラムがあったように8048版のオルゴール演奏プログラムを書いてみた。I/Oポートの1つから圧電スピーカへ接続しただけの簡単な回路で始めてみた。これでメロディーを奏でるには音程と音の長さを決めたデータを用意するだけで簡単に実現する筈である。

音程

音程は割りと簡単に決める事が出来る。ポートをHighにして決まった時間だけ待ってからポートをLowにして同じ時間だけ待つ。これを繰り返せば音が鳴るわけで、ドレミファソラシドの周波数は決まるし、クロックとマシンサイクルからループに費やすカウンターの値は決まる。これを繰り返せば必要な音程の矩形波が出力される事になる

音の長さ

ここで難しいのは音の長さを等しくする事だ。低い音と高い音ではループに費やされる時間が異なるので、決められた長さの音程を出力する為に、どの程度上記の音程ルーチンを繰り返すかは、音程によって変わる訳で、TK-80のサンプルでは音の長さを決めるカウンターを音程を決めるループの中で一緒に減算してこれを解決している。しかしTK-80のCPUである8080Aでは16ビットのレジスタ(HLとかDEとかBCなど)があって割りと簡単に実現できるが、8048では同じ事しようと思うとステップ数が多くなってしまい、高い音が出せなくなってしまった。さてと、考え付いたのは8048には内蔵のタイマーがあるので、これを使って音の長さを決める事とした。8048の内蔵カウンターの最大は20msなので、これを基準とした。音を聞いてみると判るけれど20ms毎にプログラムが動くので音が濁っている

音のデータ

なんだかんだで音が出せるようになっても肝心の曲データが見つからない。著作権の絡みで音楽データはおいそれと入手できないのである。インターネットを調べてもなかなか掲載されていない。一昔前は着メロデータとか言って色々な人のページに耳コピーした曲データがあったのに・・・

テキスト音楽

そんな中みつけたのが「テキスト音楽・サクラ」である。Windows用のソフトで音符を貼り付けると演奏してくれる。この中でMML(MusicMacroLanguage)機能を見て「MMLデータを演奏できるプログラム」にすれば、あらかじめWindows上でメロディーを確認してから8048のROMにそのまま焼ける!と思いついた。しかし本当のMMLは8048には割りと実装が重いのでMMLをまだ簡素化したものをインプリメントした。

映画・禁じられた遊び

私は見たことないのですが、有名な曲ですよね。これのデータはインターネットにあったのでこれを拝借。(著作権はどうなんでしょう?)それと、音楽を趣味でやっている友人にオリジナル楽曲を「テキスト音楽・サクラ」で貰いました。

  • 8048 MML Player ソースリスト mmlplay.lst

  • 禁じられた遊びを演奏中 KinjiraretaAsobi.mp3

  • SHOIさんのオリジナル・うっかりハチベイを演奏中 8bei.mp3

  • ちなみにオリジナルはこういうMIDI楽曲 Shoi_8bei.mp3です

  • 2004/06/27(日)DM2020 uPD7228 LCD DISPLAY

    upd7228

    uPD7228

    2月に、古いLCD(DM2020)を使った時計の事について書きました。その時は、何度やっても表示が上手くいかず、これはLCDが壊れていると結論付けましたが、「ヤマカン」さんから8分割モードではなく16分割モードで使うであろうというアドバイスを頂きました。そこで、再度挑戦してみた。

    久しぶりにというか、やっぱりというか、何度も、テストプログラムを書いては、信号を送り、よく判らないuPD7228のデータシートと格闘する事やく半日。ごらんの通り、無事、20桁を綺麗に表示させることに成功しました。

    要点は、

    左側uPD7228を16分割SYNC出力、右側uPD7228を16分割SYNC入力と設定すること。

    左側から上位アドレスが始まる

    LCDの上8ドットがバンク1、下4ドットがバンク0であることです。LCDに写真のような簡単な表示をさせるだけでも一苦労。でも、ここまでくれば、あとは応用しだいですね。

    uPD7228 キャラクターセット

    uPD7228 Character Set

    lcd.lst

    コンパイルリスト lcd.lst

    2004/02/19(木)8048と古いLCDディスプレイ(DM2020)との格闘

    DM2020

    8748のテストランもそろそろ終盤。約15年前に多分秋月電子だと思うが古いLCDディスプレイが見つかったので、これと悪戦苦闘していた。

    一緒に見つかったのはLCDドライバNECのuPD7228のマニュアルとLCDディスプレイ基板から伸びている14本のピンコネクションだけだ。

    こんな時、PICやAVRみたいにリアルタイムにプログラムが書き込めたらと痛感。やはり古いチップで開発するにはそれなりに根性がいる。2本しかない8748をイレーサーで消しながら、LCDディスプレイにタイミングを送っては表示を確認するを20回ほど繰り返した。

    どうやら20桁x1行の製品のようだが、裏にはuPD7228が2つ載っている。スペックを確認するとuPD7228単体では8x50ドット(8分割モード)又は16x42(16分割モード)ドットを駆動できるらしい。が、LCDは5x12が20桁分となっている。

    悪戦苦闘の結果、8分割モードで左10桁、右10桁を駆動しているらしいという事までは実験の結果から判った。でも、右10桁はドット落ちしていて、満足に表示できない。その上、写真からも判るように1桁12ドットのうち、下4桁が上4桁のドットパターンを表示してしまう。

    もう、思いつく限りの組み合わせを行ったが力尽きる。という訳で、とりあえず、積算カウンターを作ってみた。現在3分2秒後の写真。幾つかスイッチを付けて時計に仕上げたいなぁ

    21日追記:

    丸一日動かしてみると、24時間で約30秒ほど時間が進んでいる事が判明。使っている水晶がキッチリ6MHzでは無いのだろうと推測。では、どの位かを計算すると、一日は86400秒、それが30秒多い86430となる。

    つまり 86430/86400*6MHz=6.002083MHz, 誤差0.035%である。これは無調整にしては上等。これを平均的な時計の様に1ヶ月で誤差15秒とするならば、

    86430*30 / 86430*30+15 * 6MHz, 誤差0.00058%の精度が必要。つまり6MHzの水晶に6,000,034.7Hzの精度が必要となる。これは無理だ。水晶発振モジュールに頼った方が良さそうだ。

    lcdclock.lst

    一応アセンブルリスト lcdclock.lst

    この古いLCDディスプレイ(DM202)のピン配置(欲しいという方へ)

    20040219_2.gif

    2004/02/15(日)8048系ワンチップマイクロコンピュータ活用ノート

    久しぶりにマイライブラリーが増えました

    1989年5月発行、室橋 仁著

    8048系ワンチップマイクロコンピュータ活用ノートが到着。

    なぜかamazonで見つけて衝動的に購入。サンプルのソースが沢山載っていて素晴らしい。ネットで購入する書籍はハズレが多いけれど、今回はどうやら当たりだったようだ。Z80物も大分入手困難になってきたけれど、8048本が未だ売っている事は素晴らしい。ちなみに、8048とはその昔、Intel初の8Bitワンチップマイコンとして1976年に発表したMCS-48シリーズの1つ。8048はマスクROM品だが、8748というEP-ROM版が割と安く出回っていた事と、私の手元に死蔵品が幾つかある為、悪戯半分に工作で使っている。

    そういえば、8051系はAtmelが未だ現行品として出荷している様子。フラッシュROMなので8751より便利でその上C-MOS。8051系の良書は無いかなぁ。

    2003/06/24(火)TopMax購入!MCS48でバーサライター

    P-ROMライター入手

    Topmaxを購入。全てはここから始まる。昔から手元にあってとっても気になっているMCS-48シリーズのプログラミングを開始

    [8048]8748でバーサライターを作ってみた

    8048 バーサライター

    これは家にあった8748を書き込める環境を手に入れた記念です

    バーサライタのスペルはversa-writerです

    versatile-writerを意味しているそうです

    イギリスで開発された当時も8748(8048)のMCS-48だそうです