- | 次の10件
Z80基板動作確認 [Z80]
さて、できあがった基板だが8085の基板は8251のフットプリントを32pin DIPにしてしまうという大ボケをやらかして使うことはできない(笑)。
6303の方もいくつかミスがあり、パターンカットしてジャンパ飛ばししてデバッグ中。
1発オッケーだったのがZ80基板。
部品実装したのがこれ。
何しろ主要な部品はZ80CPU、Z80SIO、PICのみのシンプルな構成。
Z80SIOのアドレスデコードを手抜きしているのでTTLもなし。
同じく部品実装したメモリボード。
このメモリボードは使い回すことを考えすぎて、色々ジャンパが付いているがこの基板はワイヤを半田付けしてしまって80系のROM(0000H~)とRAM(8000H~)専用に。
この2枚の基板の接続はフラットケーブルでもいいけれど、今回はこれ。
実はこれらのボード、昔日本コムネットというところからでていた、GUPPYシリーズのマイコンボードに規格を合わせている。
GUPPYバスはZ80の信号がほぼそのままでていて、M1とかRFSHまででているが、Z80専用システムにするつもりはないし、そうだとしても実際使わないだろうから別の信号にわりあてた。
68系のボードもでていたのだが、どういった割り当てになっていたのかは不明。
GUPPYボードが使えるかどうかはまた別の機会にと思っているが、やるかどうかは…
上の写真のボードはGUPPYのボードを5枚入れられるラックのマザー部分を取り出した物。
今回のZ80ボードとメモリボードを搭載するとこんな感じになる。
動作確認だが、「古典電脳物語」という本で使われていたAKI-80版のTinyBASICを使わせてもらいました。
変更点はAKI-80版のものは、シリアルのボーレートをCTCで生成しているがこちらはPICで。
あとはZ80SIOのアドレスが違うぐらいだが、SIOはチップセレクトにA7を入れてるだけだし、CTCの設定も存在しないI/OにOUTするだけなので、これが16bit以上のCPUなら無効なアドレスをアクセスすると例外が発生したりするが、単純な昔の8bitCPUはそこまでしないのでたぶん無修正でも動作するはずだが、一応修正しておいた。
そしてすんなりと動作しました。
使用したCPUは東芝のTMPZ84C000AP-6。
CPUクロックはPICで生成しているが約6MHzなので、BバージョンのZ80でC-MOS版。
実際は6.3MHzほどでていてオーバークロック気味だが、特に問題なし。
実はこの回路、クロックを特に何も処理していなくてGUPPYマザーが全信号を10Kでプルアップしているのでクロックもそうなってしまっているが、N-MOS版のZ80はクロックに対する要求がシビアなのでたぶん動かないだろうなぁとザイログとSHARPのN-MOS6MHzのものを用意したが、案の定かなり不安定。
C-MOS版のZ80は確かTTLレベルでよかったはず。
したがってこのボード、C-MOSのZ80しか動かないことになる(笑)
試したCPUがこの3つ。
CPUを入れ替えて電源を入れた(USB接続)しただけの動作結果がこれ
最初の起動メッセージがC-MOS版のもの。次のやつがN-MOS版でまともに表示せず暴走気味に。
6303の方もいくつかミスがあり、パターンカットしてジャンパ飛ばししてデバッグ中。
1発オッケーだったのがZ80基板。
部品実装したのがこれ。
何しろ主要な部品はZ80CPU、Z80SIO、PICのみのシンプルな構成。
Z80SIOのアドレスデコードを手抜きしているのでTTLもなし。
同じく部品実装したメモリボード。
このメモリボードは使い回すことを考えすぎて、色々ジャンパが付いているがこの基板はワイヤを半田付けしてしまって80系のROM(0000H~)とRAM(8000H~)専用に。
この2枚の基板の接続はフラットケーブルでもいいけれど、今回はこれ。
実はこれらのボード、昔日本コムネットというところからでていた、GUPPYシリーズのマイコンボードに規格を合わせている。
GUPPYバスはZ80の信号がほぼそのままでていて、M1とかRFSHまででているが、Z80専用システムにするつもりはないし、そうだとしても実際使わないだろうから別の信号にわりあてた。
68系のボードもでていたのだが、どういった割り当てになっていたのかは不明。
GUPPYボードが使えるかどうかはまた別の機会にと思っているが、やるかどうかは…
上の写真のボードはGUPPYのボードを5枚入れられるラックのマザー部分を取り出した物。
今回のZ80ボードとメモリボードを搭載するとこんな感じになる。
動作確認だが、「古典電脳物語」という本で使われていたAKI-80版のTinyBASICを使わせてもらいました。
変更点はAKI-80版のものは、シリアルのボーレートをCTCで生成しているがこちらはPICで。
あとはZ80SIOのアドレスが違うぐらいだが、SIOはチップセレクトにA7を入れてるだけだし、CTCの設定も存在しないI/OにOUTするだけなので、これが16bit以上のCPUなら無効なアドレスをアクセスすると例外が発生したりするが、単純な昔の8bitCPUはそこまでしないのでたぶん無修正でも動作するはずだが、一応修正しておいた。
そしてすんなりと動作しました。
使用したCPUは東芝のTMPZ84C000AP-6。
CPUクロックはPICで生成しているが約6MHzなので、BバージョンのZ80でC-MOS版。
実際は6.3MHzほどでていてオーバークロック気味だが、特に問題なし。
実はこの回路、クロックを特に何も処理していなくてGUPPYマザーが全信号を10Kでプルアップしているのでクロックもそうなってしまっているが、N-MOS版のZ80はクロックに対する要求がシビアなのでたぶん動かないだろうなぁとザイログとSHARPのN-MOS6MHzのものを用意したが、案の定かなり不安定。
C-MOS版のZ80は確かTTLレベルでよかったはず。
したがってこのボード、C-MOSのZ80しか動かないことになる(笑)
試したCPUがこの3つ。
CPUを入れ替えて電源を入れた(USB接続)しただけの動作結果がこれ
最初の起動メッセージがC-MOS版のもの。次のやつがN-MOS版でまともに表示せず暴走気味に。
8ビットマイコン基板 [8bitマイコン]
MC6801関係でぼちぼち遊んでる間も、別のものに浮気してたりしてその成果物を。
1.8085CPUボード
既に基板はできあがってきてます。
主要な石は8085とシリアル通信用の8251、USB変換のPIC1454。
あとはTTLが3個程度。
メモリを搭載すれば動かせますが、メモリは別ボードで。
このPICはMC6801の時に使った物と基本的に同じ。
CPUクロックとボーレート用クロックとリセット。
実はこの基板だけ電源用USBコネクタは搭載していない。
部品点数的にすかすかの基板だけど、
そのコネクタ一つ追加するだけで配線に苦労するようになったので。
縦横、ICの向きがかわっているのもその影響。
6801の時と同じで、基本的にKiCadの全自動配線を利用。
全部自動で配線させてみては、その結果をみて配置を変更を繰り返し
残未配線が数本で、手動で通せそうなら残りを手動でやり完成。
2.Z80CPUボード
こちらはZ80版。Z80は同じZ80ファミリで作ると非常にシンプルになり
Z80CPU、Z80SIO、PICのみとなりTTLはなし。
そのおかげもあって、こちらはUSB電源コネクタを搭載。
Z80SIOは2チャンネルあるので片方も使えるようにだけはしておいた。
3.メモリボード
64KBのメモリボード。
基本的に32KBのSRAMと32KBのROMを搭載するようになっている。
このメモリボードは使い回しできるように、色々よけいな回路を組み入れていて
(1)CPUボードと接続するためのメモリストローブ信号として80系ではMREQを想定しているが
68系ではEを割り当てストローブ代わりに。
MREQは負論理だけどEは正論理なのでジャンパで切り替えられるように。
(2)80系はリセットが0スタートなのに対して、68系は$FFFEがリセットベクタなので
ROM、RAMの配置をアドレス逆転できるように。こちらは6Pスイッチを想定。
(3)ROMをRAMに変更して全RAMにできるように。これは後々を考えて。
そのため28pinのメモリを3個搭載できるようになってるが同時使用は2個。
これもジャンパ設定での切替で昔のパソコンみたいにI/Oをたたいてきりかえる
なんてことはできません。
できあがってから思ったけど、貫通ビアを入れすぎかな?
なんか気持ち悪い(笑)
4.HD6303ボード
メモリボードを68系でも使えるようにしたのでその確認用に。
64pin SDIPタイプのHD6303X、HD6303Y。
最初は6802でやろうとしたけど、部品点数の少ない基板でも配線に苦労したので
部品点数を減らせる6303で。主要なものは6303とPICのみです。
ワンチップマイコンらしく、I/Oコネクタを搭載し、6303のポートをだしています。
実はこれのみ全部手動で配線しました。
KiCadの自動配線は結構おバカで、時々基板外形の外側に配線してしまうことがあって
特にバス出し用の2列ピンヘッダパターンを基板端に配置するとよくなり、
この基板の時のみどうやっても外に配線してしまって困り果てました。
で、部品点数も少ないすかすか基板なので自分でやる事に。
結果的にはこれが一番時間はかかってるかも?
ちなみに裏側がこれ。
自動配線ではアドレスバス、あるいはデータバスといったバス配線をきれいに並べてくれないけど
自分でやればこの通り。
それ以外も、スカスカ基板のおかげもあって無理なく。
自動配線だとこの程度のすかすか配置でも、
どこ飛ばしてるんだ!?といった感じにこねくり廻してくれます。
4枚とも2列ピンヘッダの横に1列ハーフピッチのピンヘッダを配置してるがこれも配線対策。
とにかくヘッダのまわりと回り込むように配線しようとするので、
いったん横にまっすぐださせてバスを横一列に並べるような感じに。
こうしておくと手動配線するときも楽です。
それだけのためのパターン。
ハードでバッグ用にテストピン立てたりするには便利かな?
さて、あとは組み立てて動作検証を。
修正することなく1発で動いてくれるかな?
1.8085CPUボード
既に基板はできあがってきてます。
主要な石は8085とシリアル通信用の8251、USB変換のPIC1454。
あとはTTLが3個程度。
メモリを搭載すれば動かせますが、メモリは別ボードで。
このPICはMC6801の時に使った物と基本的に同じ。
CPUクロックとボーレート用クロックとリセット。
実はこの基板だけ電源用USBコネクタは搭載していない。
部品点数的にすかすかの基板だけど、
そのコネクタ一つ追加するだけで配線に苦労するようになったので。
縦横、ICの向きがかわっているのもその影響。
6801の時と同じで、基本的にKiCadの全自動配線を利用。
全部自動で配線させてみては、その結果をみて配置を変更を繰り返し
残未配線が数本で、手動で通せそうなら残りを手動でやり完成。
2.Z80CPUボード
こちらはZ80版。Z80は同じZ80ファミリで作ると非常にシンプルになり
Z80CPU、Z80SIO、PICのみとなりTTLはなし。
そのおかげもあって、こちらはUSB電源コネクタを搭載。
Z80SIOは2チャンネルあるので片方も使えるようにだけはしておいた。
3.メモリボード
64KBのメモリボード。
基本的に32KBのSRAMと32KBのROMを搭載するようになっている。
このメモリボードは使い回しできるように、色々よけいな回路を組み入れていて
(1)CPUボードと接続するためのメモリストローブ信号として80系ではMREQを想定しているが
68系ではEを割り当てストローブ代わりに。
MREQは負論理だけどEは正論理なのでジャンパで切り替えられるように。
(2)80系はリセットが0スタートなのに対して、68系は$FFFEがリセットベクタなので
ROM、RAMの配置をアドレス逆転できるように。こちらは6Pスイッチを想定。
(3)ROMをRAMに変更して全RAMにできるように。これは後々を考えて。
そのため28pinのメモリを3個搭載できるようになってるが同時使用は2個。
これもジャンパ設定での切替で昔のパソコンみたいにI/Oをたたいてきりかえる
なんてことはできません。
できあがってから思ったけど、貫通ビアを入れすぎかな?
なんか気持ち悪い(笑)
4.HD6303ボード
メモリボードを68系でも使えるようにしたのでその確認用に。
64pin SDIPタイプのHD6303X、HD6303Y。
最初は6802でやろうとしたけど、部品点数の少ない基板でも配線に苦労したので
部品点数を減らせる6303で。主要なものは6303とPICのみです。
ワンチップマイコンらしく、I/Oコネクタを搭載し、6303のポートをだしています。
実はこれのみ全部手動で配線しました。
KiCadの自動配線は結構おバカで、時々基板外形の外側に配線してしまうことがあって
特にバス出し用の2列ピンヘッダパターンを基板端に配置するとよくなり、
この基板の時のみどうやっても外に配線してしまって困り果てました。
で、部品点数も少ないすかすか基板なので自分でやる事に。
結果的にはこれが一番時間はかかってるかも?
ちなみに裏側がこれ。
自動配線ではアドレスバス、あるいはデータバスといったバス配線をきれいに並べてくれないけど
自分でやればこの通り。
それ以外も、スカスカ基板のおかげもあって無理なく。
自動配線だとこの程度のすかすか配置でも、
どこ飛ばしてるんだ!?といった感じにこねくり廻してくれます。
4枚とも2列ピンヘッダの横に1列ハーフピッチのピンヘッダを配置してるがこれも配線対策。
とにかくヘッダのまわりと回り込むように配線しようとするので、
いったん横にまっすぐださせてバスを横一列に並べるような感じに。
こうしておくと手動配線するときも楽です。
それだけのためのパターン。
ハードでバッグ用にテストピン立てたりするには便利かな?
さて、あとは組み立てて動作検証を。
修正することなく1発で動いてくれるかな?
HD6301/HD6303 シングルボード [6801]
まただいぶ間が空いてしまいましたが、基板を起こしてしまいました。
ちょっと欲張りに回路を詰め込んで、
それでいて7×10cmの大きさに収めるために色々と端折っています。
MCUとROM/RAM、ターミナル接続用のシリアル自体はMCU内ですが
USB変換のPIC。これは前回のものと全く同じです。
電源はシリアル通信用のUSBからの直接給電ですが、
外部給電に対応させています。
USB2.0までのMax500mAでも充分なのですが、これも欲張り部分ですね。
ただこちらもUSBコネクタです(笑)。
今までなら2.1Φのピンジャックを使ったACアダプタなんでしょうが
今時はUSBのACアダプタの方が簡単に手に入ります。
シリアル通信用のUSBと給電専用のUSBとの電源切替はジャンパで。
基板はKiCadで作成しました。配線はほぼ自動です。
自動で配線してどの程度無理があるか確認しては部品配置変えてまた自動で、
を繰り返していき、できなかった配線が2~3本ぐらいになったら
その2~3本を手動で。
ただ、さすがに無理があるのでかなりこねくり廻すはめになります(笑)
できあがった基板がこれです。
ただやっぱり一発目は色々問題あって、
まず外部給電用のmicroUSBコネクタのフットプリントをミスって
ちょっとわかりにくいですが、下写真のようにパターンがずれてしまっています。
これはピンをちょっとまげれば特に問題ないですが
次作以降では修正したフットプリントを使用。
次にMCUの動作モードを変更できるようにしたのはいいのですが
そのジャンパのフットプリントを間違えて2mmピッチの2×3ヘッダにしてしまい
手持ちパーツには2mmのはないのでモード毎に基板作成です(笑)。
あるいは2mmピッチのものをいずれ買ってくるか…
HD6301のデータシート参考に回路書きましたが、MC6801と一部端子が違う事に
できあがってから気付きました。
HD6301は7番ピンがSTBY、21番ピンがVccですが
MC6801(およびHD6801)は7番ピンがVcc、21番ピンがVccStanbyになっています。
それとは直接関係ないのですが、そのSTBYをプルアップでつっていたのですが
Lowに落ちてしまってスタンバイ状態に入り動作しません(笑)。
単なるTTL入力だと思っていましたが違うようです。
確認すると入力"High"レベルのminがVcc-0.5Vになっているのがくせ者のようです。
早速ジャンパ飛ばすはめになって、STBYを直接VCCへ。
前回の子亀載せたピギーバックのHD68P01で動作確認。
スタンバイの関係で最初動きませんでしたが、上記対策施して無事動作。
ブレッドボード上の時はかなり不安定でしたが、安定して動作します。
USBコネクタ挿した直後はモニタ起動メッセージがでないのはご愛敬ですが(笑)。
起動メッセーがでないだけで動作はしてますが、ソフトで対処すべきなんでしょうね。
USB接続が確立するまで待てばいいのかな?
6801側からはわからないので、PIC側で通信OK/NGのステータス出すようにした方がいいかな?
写真ではモード6(内蔵ROM/RAM使用、内蔵以外の全アドレス外部メモリ使用)に設定して
RAMものせてますが、シリアル設定以外はLILbugほぼそのままで、
ポート4に上位アドレスがでてないので外部メモリはアクセスできず、
ワンチップモードと同等です。
LILbugのMコマンドはベリファイしているみたいで、外部アドレス空間の書き換えは全てNGです。
内部RAMはOKなので、一部のポートしか使えないワンチップマイコンとして動作してます。
ちょっと欲張りに回路を詰め込んで、
それでいて7×10cmの大きさに収めるために色々と端折っています。
MCUとROM/RAM、ターミナル接続用のシリアル自体はMCU内ですが
USB変換のPIC。これは前回のものと全く同じです。
電源はシリアル通信用のUSBからの直接給電ですが、
外部給電に対応させています。
USB2.0までのMax500mAでも充分なのですが、これも欲張り部分ですね。
ただこちらもUSBコネクタです(笑)。
今までなら2.1Φのピンジャックを使ったACアダプタなんでしょうが
今時はUSBのACアダプタの方が簡単に手に入ります。
シリアル通信用のUSBと給電専用のUSBとの電源切替はジャンパで。
基板はKiCadで作成しました。配線はほぼ自動です。
自動で配線してどの程度無理があるか確認しては部品配置変えてまた自動で、
を繰り返していき、できなかった配線が2~3本ぐらいになったら
その2~3本を手動で。
ただ、さすがに無理があるのでかなりこねくり廻すはめになります(笑)
できあがった基板がこれです。
ただやっぱり一発目は色々問題あって、
まず外部給電用のmicroUSBコネクタのフットプリントをミスって
ちょっとわかりにくいですが、下写真のようにパターンがずれてしまっています。
これはピンをちょっとまげれば特に問題ないですが
次作以降では修正したフットプリントを使用。
次にMCUの動作モードを変更できるようにしたのはいいのですが
そのジャンパのフットプリントを間違えて2mmピッチの2×3ヘッダにしてしまい
手持ちパーツには2mmのはないのでモード毎に基板作成です(笑)。
あるいは2mmピッチのものをいずれ買ってくるか…
HD6301のデータシート参考に回路書きましたが、MC6801と一部端子が違う事に
できあがってから気付きました。
HD6301は7番ピンがSTBY、21番ピンがVccですが
MC6801(およびHD6801)は7番ピンがVcc、21番ピンがVccStanbyになっています。
それとは直接関係ないのですが、そのSTBYをプルアップでつっていたのですが
Lowに落ちてしまってスタンバイ状態に入り動作しません(笑)。
単なるTTL入力だと思っていましたが違うようです。
確認すると入力"High"レベルのminがVcc-0.5Vになっているのがくせ者のようです。
早速ジャンパ飛ばすはめになって、STBYを直接VCCへ。
前回の子亀載せたピギーバックのHD68P01で動作確認。
スタンバイの関係で最初動きませんでしたが、上記対策施して無事動作。
ブレッドボード上の時はかなり不安定でしたが、安定して動作します。
USBコネクタ挿した直後はモニタ起動メッセージがでないのはご愛敬ですが(笑)。
起動メッセーがでないだけで動作はしてますが、ソフトで対処すべきなんでしょうね。
USB接続が確立するまで待てばいいのかな?
6801側からはわからないので、PIC側で通信OK/NGのステータス出すようにした方がいいかな?
写真ではモード6(内蔵ROM/RAM使用、内蔵以外の全アドレス外部メモリ使用)に設定して
RAMものせてますが、シリアル設定以外はLILbugほぼそのままで、
ポート4に上位アドレスがでてないので外部メモリはアクセスできず、
ワンチップモードと同等です。
LILbugのMコマンドはベリファイしているみたいで、外部アドレス空間の書き換えは全てNGです。
内部RAMはOKなので、一部のポートしか使えないワンチップマイコンとして動作してます。
HD68P01で1チップ構成(3) [6801]
だいぶ間があいてしまいましたが、一応色々やっていたのですが引き続きHD68P01。
昔のCPUで遊ぼうとするとだいたいシリアルでPCとつないでターミナルソフトで、ってなると思いますが、今のPCにCOMポートなるものがつくことはほぼなくなり、必然的にUSB変換してPCとつなぐことになりますが、このUSBシリアル変換チップというのは各種でてはいても表面実装部品ばかり。
ここでも利用したように小さな基板に組み込んだ完成モジュールを利用することになりますが、だいたいそれなりのお値段になってしまいます。
ということで、このUSBシリアル変換を自前で製作してしまうことにしました。
加えて、その他機能ももりこんで部品点数減少も狙ってみました。
・USBマイコン
USB内蔵マイコンは各種ありますが、PIC16F1454を使うことにします。これは
(1)なんといっても安い(秋月さんで130円ほど)
(2)比較的少ピン(14pin)
(3)外部クロックを必要としない
という理由からで、特に3番目は他USBマイコンにはない特徴です。
USBは割とシビアなクロックを要求するので、USBマイコンでUSBを使用するときは水晶発振子使用を推奨していて、最低限セラミック発振子が使われています。
このPIC1454は発信周波数を常に監視して自動的に更正する機能を持っており、外部発振子を必要としませんので部品点数を減らす目的でもうってつけです。
・CPUクロック
せっかくなのでCPUのクロックもPICで生成することにします。
先の例ではシリアルのボーレート(9600bps)をCPUクロックから生成するために4.9152MHzという水晶発振器を使いましたが、PICからこの周波数を生成するのは無理があります。
クロック生成にPWMを使いたいところですが、このPICはPWMが2chありますがピンの割り当ての関係で1chしか使えないのでPWMはボーレート生成に使います。
MC68P01のCPUクロックはPICのシステムクロックから作り出すことにしますが、USBを使う場合、USBが要求する12MHzを作り出すためにPICのシステムクロックは48MHz(あるいは24MHz)にするしかなく、このシステムクロックからは2のn乗分周のクロックしかとりだせません。
しかたないので6MHzを生成してMC68P01を1.5MHzのオーバークロックにすることにします。
いや、動作確認するだけなら半分の0.75MHzでもいいのですが(笑)。
・ボーレートクロック
動作クロックを1.5MHzにした場合9600あるいは、よくあるボーレートクロックを内部でつくりだす事はできないのでPICのPWMでボーレートを生成することにし、MC6801系はシリアルクロックを外部から入力する場合8倍のクロックを要求するので9600の8倍、76800bpsをPWMで生成することにします。
このPIC、自動更正して安定発振させているとはいえ周波数自体はそれなりにいいかげんです。
実測すると6.35MHzほどなので48MHzのところ、実際には50.8MHz。
ボーレート用クロックは80.86KHzだったので、ボーレートは10108bpsになってしまいます。
ただ、PIC側のボーレートもこの50.8MHzから生成しているので、PICとの通信のみで使う限りぴったり一致して問題ありません。
ちなみに周波数測定は、画像のようにテスターで測っただけです。
・その他機能
空いてるピンを使ってその他機能ももりこみます。
まずリセット。リセットは単純な機能ですが意外とはまるのでPICで生成。
外部リセット入力できるようにしますが、ポートのプルアップ機能とソフト処理によるチャタリング対策でスイッチのみ付ければOKに。
リセット出力はリセットスイッチが押されればアサート、リセットスイッチOFF後約100ms後にネゲート。
あと、電源LEDも入れましたが、これはPIC動作確認用でもあるので点灯ではなく点滅にしました。
・MC6801側ソフト
MC68P01側のソフトは引き続きLILBugを使いますが、シリアルボーレートが内部生成ではなく外部入力になったのでその部分を変更してアセンブルし直してROM焼き。
・動作検証
例によってブレッドボードに組み、ジャンパワイヤで空中配線をすると動作が不安点になってしまったので一部配線をブレッドボードにぴったり這わすようにしました。
こんな感じです。
主にUSB関係の配線ですが、本当はクロック系もそうしたかたったのですが配置、引き回しの関係で断念。
一応動作しましたが、それでも不安定な部分もあってソフトなのかハードなのか、切り分けるのも何ですので、この段階で基板を起こすことにしました。
本当は、きっちり動作確認できてからと思っていたのですが。
1チップ構成とタイトル付けながら、PICも使用しているので2チップ構成になっていますね…
昔のCPUで遊ぼうとするとだいたいシリアルでPCとつないでターミナルソフトで、ってなると思いますが、今のPCにCOMポートなるものがつくことはほぼなくなり、必然的にUSB変換してPCとつなぐことになりますが、このUSBシリアル変換チップというのは各種でてはいても表面実装部品ばかり。
ここでも利用したように小さな基板に組み込んだ完成モジュールを利用することになりますが、だいたいそれなりのお値段になってしまいます。
ということで、このUSBシリアル変換を自前で製作してしまうことにしました。
加えて、その他機能ももりこんで部品点数減少も狙ってみました。
・USBマイコン
USB内蔵マイコンは各種ありますが、PIC16F1454を使うことにします。これは
(1)なんといっても安い(秋月さんで130円ほど)
(2)比較的少ピン(14pin)
(3)外部クロックを必要としない
という理由からで、特に3番目は他USBマイコンにはない特徴です。
USBは割とシビアなクロックを要求するので、USBマイコンでUSBを使用するときは水晶発振子使用を推奨していて、最低限セラミック発振子が使われています。
このPIC1454は発信周波数を常に監視して自動的に更正する機能を持っており、外部発振子を必要としませんので部品点数を減らす目的でもうってつけです。
・CPUクロック
せっかくなのでCPUのクロックもPICで生成することにします。
先の例ではシリアルのボーレート(9600bps)をCPUクロックから生成するために4.9152MHzという水晶発振器を使いましたが、PICからこの周波数を生成するのは無理があります。
クロック生成にPWMを使いたいところですが、このPICはPWMが2chありますがピンの割り当ての関係で1chしか使えないのでPWMはボーレート生成に使います。
MC68P01のCPUクロックはPICのシステムクロックから作り出すことにしますが、USBを使う場合、USBが要求する12MHzを作り出すためにPICのシステムクロックは48MHz(あるいは24MHz)にするしかなく、このシステムクロックからは2のn乗分周のクロックしかとりだせません。
しかたないので6MHzを生成してMC68P01を1.5MHzのオーバークロックにすることにします。
いや、動作確認するだけなら半分の0.75MHzでもいいのですが(笑)。
・ボーレートクロック
動作クロックを1.5MHzにした場合9600あるいは、よくあるボーレートクロックを内部でつくりだす事はできないのでPICのPWMでボーレートを生成することにし、MC6801系はシリアルクロックを外部から入力する場合8倍のクロックを要求するので9600の8倍、76800bpsをPWMで生成することにします。
このPIC、自動更正して安定発振させているとはいえ周波数自体はそれなりにいいかげんです。
実測すると6.35MHzほどなので48MHzのところ、実際には50.8MHz。
ボーレート用クロックは80.86KHzだったので、ボーレートは10108bpsになってしまいます。
ただ、PIC側のボーレートもこの50.8MHzから生成しているので、PICとの通信のみで使う限りぴったり一致して問題ありません。
ちなみに周波数測定は、画像のようにテスターで測っただけです。
・その他機能
空いてるピンを使ってその他機能ももりこみます。
まずリセット。リセットは単純な機能ですが意外とはまるのでPICで生成。
外部リセット入力できるようにしますが、ポートのプルアップ機能とソフト処理によるチャタリング対策でスイッチのみ付ければOKに。
リセット出力はリセットスイッチが押されればアサート、リセットスイッチOFF後約100ms後にネゲート。
あと、電源LEDも入れましたが、これはPIC動作確認用でもあるので点灯ではなく点滅にしました。
・MC6801側ソフト
MC68P01側のソフトは引き続きLILBugを使いますが、シリアルボーレートが内部生成ではなく外部入力になったのでその部分を変更してアセンブルし直してROM焼き。
・動作検証
例によってブレッドボードに組み、ジャンパワイヤで空中配線をすると動作が不安点になってしまったので一部配線をブレッドボードにぴったり這わすようにしました。
こんな感じです。
主にUSB関係の配線ですが、本当はクロック系もそうしたかたったのですが配置、引き回しの関係で断念。
一応動作しましたが、それでも不安定な部分もあってソフトなのかハードなのか、切り分けるのも何ですので、この段階で基板を起こすことにしました。
本当は、きっちり動作確認できてからと思っていたのですが。
1チップ構成とタイトル付けながら、PICも使用しているので2チップ構成になっていますね…
HD68P01で1チップ構成(2) [6801]
では実際にブレッドボーにくみ上げます。
主立った部品は以下のもの
・HD68P01V0P
・クリスタルオシレータ(4.9152MHz)
・USB-シリアル変換基板(Sanhayato製)
MC6801系はCPUクロックとなるEクロックからボーレートを設定でき、
なるべく簡単に動かすためにこれを利用するのですが
9600bpsにするために入力クロックを4.9152NHzにしなければいけません。
使用する石は1MHz動作品ですので入力クロックはMax4MHzで
オーバークロックとなりますがこの程度は問題なく動きますし、
業務で使うわけではありませんので気にしない事にします。
ブレッドボードにくみ上げると写真のような感じになりますが、
ジャンパワイヤーは特にプルアップ系は長さ適当です。
結線はシリアルポートと変換基板、クロック。
パワーONリセットはCRで生成して定数はすぐに取り出せた物(10KΩ、47μF)で適当。
割り込み関係とSTBYを+5Vに。
MC6801系はリセット中にP20~P22をチェックしてモードを切り替えるので、
ワンチップモードにするためにそれらを+5Vへ。
電源は変換基板からとります。
動作確認ソフトとして定番となるモニタソフトを使います。
これも定番であるモトローラ純正のLILBUGというものを利用。
MC6800用のモニタMikbugのMC6801版みたいなものです。
ソースはネットにありますがアセンブルする必要があり
アセンブラは、昔ちょくちょく使っていたモトローラ純正のMOTOASMというものを利用。
ネットあされば他にも色々ありますが、昔から持ってて使い慣れていますので。
MOTOASMはCPU別に6800,6801,6804,6805,6809,6811があるのですが、
今ならオプション、あるいは疑似命令でCPU指定でしょうか。
このMOTOASM、Amiga用もあって確かソースもあったような…。
ただ、これはMS-DOS向けのソフトで最近のWindowsでは動作しません。
そこで、MS-DOSのプログラムをWin32-64bit環境で動かすツール
MS-DOS Player for Win32-x64を利用します。
このモニタ、CPUクロックが1.2288MHz、あるいは0.6144MHzが前提となっていて
ボーレートはデフォルトが300、コマンドで2400および9600に
切り替えるようになっていますがデフォルト9600に変更。
くわえてボーレート切替コマンドを削除。
ボーレート関係の修正を加えてアセンブルを実行。
多少エラーでますが修正して無事アセンブル完了。
書き込みはTL866AというROMライター利用。
いざ書き込もうとするとこれに付属する書き込みソフト、
データはインテルHEXかバイナリしか受け付けません。
それに対してMOTOASMはSレコードを生成します。
しょうがないのでMOTOASM付属のバイナリ変換ソフトを使おうと思いましたが、
ROMサイズを指定してバイナリ生成できるのは良いのですが
オフセット指定はできないような感じで、
2732にあわせて4KBを指定してもアドレス0から4KBのバイナリを生成してしまいます。
生成コードはF800からなのでアドレスF000からの4KBにしたいのですができません。
しょうがないので64KB丸ごと生成しようとして65536を指定するとこれまたできません。
MS-DOS時代のソフトなんで16bitサイズなんでしょうね。
そこでサイズとして65535を指定して、
バイナリエディタでラスト1バイト付け足すことも考えましたが
vectorから別のバイナリ変換ソフトをおとし利用することにしました。
これまたMS-DOSソフトなのでMS-DOS Playerから利用します。
色々手間取りましたが、なんとかROMに書き込みHD68P01の上にのせ
PCでターミナルソフト(TeraTermPro)を起動、変換基板経由で
PCとHD68P01を接続。無事teratermにプロンプトが表示されました。
F800からF8FFまでダンプ表示した結果です。
なんか長々だらだらとした文章になってしまいました。
今後は構成を考えていく必要ありますね。
主立った部品は以下のもの
・HD68P01V0P
・クリスタルオシレータ(4.9152MHz)
・USB-シリアル変換基板(Sanhayato製)
MC6801系はCPUクロックとなるEクロックからボーレートを設定でき、
なるべく簡単に動かすためにこれを利用するのですが
9600bpsにするために入力クロックを4.9152NHzにしなければいけません。
使用する石は1MHz動作品ですので入力クロックはMax4MHzで
オーバークロックとなりますがこの程度は問題なく動きますし、
業務で使うわけではありませんので気にしない事にします。
ブレッドボードにくみ上げると写真のような感じになりますが、
ジャンパワイヤーは特にプルアップ系は長さ適当です。
結線はシリアルポートと変換基板、クロック。
パワーONリセットはCRで生成して定数はすぐに取り出せた物(10KΩ、47μF)で適当。
割り込み関係とSTBYを+5Vに。
MC6801系はリセット中にP20~P22をチェックしてモードを切り替えるので、
ワンチップモードにするためにそれらを+5Vへ。
電源は変換基板からとります。
動作確認ソフトとして定番となるモニタソフトを使います。
これも定番であるモトローラ純正のLILBUGというものを利用。
MC6800用のモニタMikbugのMC6801版みたいなものです。
ソースはネットにありますがアセンブルする必要があり
アセンブラは、昔ちょくちょく使っていたモトローラ純正のMOTOASMというものを利用。
ネットあされば他にも色々ありますが、昔から持ってて使い慣れていますので。
MOTOASMはCPU別に6800,6801,6804,6805,6809,6811があるのですが、
今ならオプション、あるいは疑似命令でCPU指定でしょうか。
このMOTOASM、Amiga用もあって確かソースもあったような…。
ただ、これはMS-DOS向けのソフトで最近のWindowsでは動作しません。
そこで、MS-DOSのプログラムをWin32-64bit環境で動かすツール
MS-DOS Player for Win32-x64を利用します。
このモニタ、CPUクロックが1.2288MHz、あるいは0.6144MHzが前提となっていて
ボーレートはデフォルトが300、コマンドで2400および9600に
切り替えるようになっていますがデフォルト9600に変更。
くわえてボーレート切替コマンドを削除。
ボーレート関係の修正を加えてアセンブルを実行。
多少エラーでますが修正して無事アセンブル完了。
書き込みはTL866AというROMライター利用。
いざ書き込もうとするとこれに付属する書き込みソフト、
データはインテルHEXかバイナリしか受け付けません。
それに対してMOTOASMはSレコードを生成します。
しょうがないのでMOTOASM付属のバイナリ変換ソフトを使おうと思いましたが、
ROMサイズを指定してバイナリ生成できるのは良いのですが
オフセット指定はできないような感じで、
2732にあわせて4KBを指定してもアドレス0から4KBのバイナリを生成してしまいます。
生成コードはF800からなのでアドレスF000からの4KBにしたいのですができません。
しょうがないので64KB丸ごと生成しようとして65536を指定するとこれまたできません。
MS-DOS時代のソフトなんで16bitサイズなんでしょうね。
そこでサイズとして65535を指定して、
バイナリエディタでラスト1バイト付け足すことも考えましたが
vectorから別のバイナリ変換ソフトをおとし利用することにしました。
これまたMS-DOSソフトなのでMS-DOS Playerから利用します。
色々手間取りましたが、なんとかROMに書き込みHD68P01の上にのせ
PCでターミナルソフト(TeraTermPro)を起動、変換基板経由で
PCとHD68P01を接続。無事teratermにプロンプトが表示されました。
F800からF8FFまでダンプ表示した結果です。
なんか長々だらだらとした文章になってしまいました。
今後は構成を考えていく必要ありますね。
高速運作TL866CSプログラマ/USBついプログラマ EPROM FLASH AVR TL866シリーズプログラマ
- 出版社/メーカー: Generic
- メディア: エレクトロニクス
HD68P01で1チップ構成(1) [6801]
前々から昔の8bitや16bitCPUを使った製作ブログは色々あったと思いますが、
最近になっていくつか本も出版され、
なんとなく触発されて自分でもやってみたいと思うようになった次第で、
コレクションしていた古いCPUや周辺チップ、メモリを引っ張り出してきました。
最初はとりあえずの実験的なもの。
なのでなるべく部品点数も少なくブレッドボードで。
いやぁ、ブレッドボードって便利ですね。仕事でも試作段階でよく使います。
そのうち基板もおこそうと思っています。
部品点数少なくするためにまずはワンチップ系でやることにして
選択することにしてモトローラのMC6801系。
モトローラといいながら写真は日立の石ばかりですが、左から
HD6803P-1、HD63B01V1P、HD637B01V0C、HD68P01V07
今回使うのはHD68P01V07。
ピギーバックと呼ばれた石で、
チップの上にEP-ROMを載せることができるソフト開発用の石です。
右から2つ目はUVEP-ROM内蔵のもので、
ROMライタで書き込みするためのアダプターを以前作ったことがあるのですが
今はなく、いずれまた作ってこれも活用する予定です。
ROMを載せた状態。こんな感じになります。
4pinあまってますが、HD68P01VはROM容量4KBで
32Kbitの24pinDIPのROMを使うのですが
8KBのHD68P01M0というのがあって、
それは64Kbitの28pinDIPのROMを載せるようになっていて
それとパッケージが共通なのでしょう。
これで、オシレータやCR等、
PC接続用にシリアル-USB変換基板は使いますが
ほぼ1チップで構成できます。
実例は次回に。
最近になっていくつか本も出版され、
なんとなく触発されて自分でもやってみたいと思うようになった次第で、
コレクションしていた古いCPUや周辺チップ、メモリを引っ張り出してきました。
最初はとりあえずの実験的なもの。
なのでなるべく部品点数も少なくブレッドボードで。
いやぁ、ブレッドボードって便利ですね。仕事でも試作段階でよく使います。
そのうち基板もおこそうと思っています。
部品点数少なくするためにまずはワンチップ系でやることにして
選択することにしてモトローラのMC6801系。
モトローラといいながら写真は日立の石ばかりですが、左から
HD6803P-1、HD63B01V1P、HD637B01V0C、HD68P01V07
今回使うのはHD68P01V07。
ピギーバックと呼ばれた石で、
チップの上にEP-ROMを載せることができるソフト開発用の石です。
右から2つ目はUVEP-ROM内蔵のもので、
ROMライタで書き込みするためのアダプターを以前作ったことがあるのですが
今はなく、いずれまた作ってこれも活用する予定です。
ROMを載せた状態。こんな感じになります。
4pinあまってますが、HD68P01VはROM容量4KBで
32Kbitの24pinDIPのROMを使うのですが
8KBのHD68P01M0というのがあって、
それは64Kbitの28pinDIPのROMを載せるようになっていて
それとパッケージが共通なのでしょう。
これで、オシレータやCR等、
PC接続用にシリアル-USB変換基板は使いますが
ほぼ1チップで構成できます。
実例は次回に。
タグ:HD68P01
- | 次の10件