Z80-MBCのアップデートバージョンであるZ80-MBC2を作る。
Z80-MBC2は、Z80MBCに対していろいろバージョンアップされシンプルなボードから若干ごちゃごちゃしたボードになった。
機能追加としては
SDカードのサポート メモリのバンク切り替え I2Cによる拡張端子
手持ちの部品が無いのでLED用のトランジスタ2N2907は2SA1015をバンク切り替え様の1N5817は相当品?に物を使用した。毎度のことですね。
2SA1015は端子の入れ替えの為コレクタとベースの端子位置を入れ替えています。
組付けには部品配置にはA040618 BOM.ods を使用しました。(excel棟で開きます)ですがA040618 PCB Layout Guide.zipの方がわかり易いような気がします。
A040618 PCB Layout Guide.zipのA040618 – PCB Front Val.pdfにわかり易いように色を付けてみました。
抵抗は赤四角、コンデンサは青四角、ダイオードは緑四角、LEDは丸です。またLEDの色はBOMファイルの色を付けました青、赤、緑、白(グレー)になります。
組付けが完了したので次はATMEGA32Aの準備です。
Z80-MBC2のISP端子を使用した書込み方法はこちらの方に詳しく書かれています。
書込みは前回同様①Arduinoを使う方法と基板に実装して②USBaspを使う方法があります。
①Arduinoを使用して内部8MHzクロックでの書込みはできたのですが、外部16MHzでの書込みはerrorでできません。一度内部8MHzで書き込んだらダメでしたっけ?
ArduinoUNOを使ってATMEGA32へのブートローダの書込む
- arduinoのインストール(今回はArduino1.8.5をインストールしました)
- arduinoへのMightyCoreボードマネージャ追加
- ArduinoUNOにarduinoISPを書込み
- ブレッドボードを使用してブートローダ書込み
- ArduinoUNOとATmega32を下の様に配線しました
- 下記の配線に水晶を追加しました
②USBaspを使用して書込み使用と思ったのですがWindows10で認識しませんでした。
Windows10ドライバーを入れないといけないみたいです。一応ここからダウンロードしてきましたが今回はパスすることにしました。
③最終的にMiniPROで書き込みました。
未使用と思われるATMEGA32Aのリード画面
内部8MHzのブートローダを書き込んだATMEGA32Aのリード画面
今回書き込んだ外部16MHzの画面(取り忘れました)
書込みに使用したHEXファイルは
「ディレクトリ」 C:\Users\xxx\AppData\Local\Arduino15\packages\MightyCore\hardware\avr\2.0.1\bootloaders\optiboot_flash\atmega32\16000000L 「書き込んだHEXファイル」 optiboot_flash_atmega32_115200_16000000L.hex
LOCKビットなどは
「ディレクトリ」 C:\Users\xxx\AppData\Local\Arduino15\packages\MightyCore\hardware\avr\2.0.1 「参照したファイル」 boards.txt 「使用した値は」 32.bootloader.unlock_bits=0x3f 32.bootloader.lock_bits=0x0f 32.bootloader.low_fuses=0b{bootloader.bod_bits}{bootloader.sut_cksel_bits} 32.menu.clock.16MHz_external.bootloader.high_fuses=0xc6
基板にATMEGA32Aのみ搭載してArduino IDEでS220618_IOS-LITE-Z80-MBC2.inoを書込みました。
S220618_IOS-LITE-Z80-MBC2.inoまで書き込んだ状態のMiniPROのリード画面が下記になります。
ArduinoIDEで書き込みができたので一応OKと言うことでICを5個載せて
電源を入れると問題なくMS BASICまで起動しました。
実は、Z80 clock set at 8MHz が4MHzで触っている間に8MHzになりました。使用しているZ80はNEC D70008AC-6の6MHz品だったりします。
<2018/8/23追加しました>
私の環境ではMEGA32のヒューズビットの設定が
Fuse Low Byte: 0x3F Fuse High Byte:0xC6 Lock Bit Byte:0xFF
で動作していましたがTwitter上でうまく動作しない状況があり@FoschiaさんがISPで書き込んだヒューズビットを公開してくれました。(@FoschiaさんのTwitterを見るとこの値も標準の値と違うかもしれません)
異なっている設定は、発振安定時間であったり低電圧検出リセット設定電圧と発振子の増幅設定?と未使用LOCKビットで動作に影響ないのかな?
Fuse Low Byte: 0xAF Fuse High Byte:0xD6 Lock Bit Byte:0xCF
MiniPRO(TL866CS)で設定を変更して動作する事を確認しました。
私の場合は現在の設定をリードして(下のリード画面は上のリード画面を使用しました従ってCODEMemoryの値はA040618のSDカード非サポート版)
config設定にてヒューズビットを変更して
書き込んでみました(下のライト画面は今回リードしたCODEMemoryの値でA040618のSDカードサポート版)
動作的に変わったところはありませんが動作しています。
MiniPRO(TL866CS)ならフューズビットだけの書込みもできますがCODE,DATAは読み込んで再度上書きしてしまいました。
一時データとして下記を作りました。
S220618_IOS-LITE-Z80-MBC2.inoのブートローダのベリファイ版を作成しました。
ファイル名はへS220618_IOS-LITE-Z80-MBC2cmp.inoです。
ファイルはここにあります。
ダウンロードしたデータが見たい場合は 2289行目からを下記に変更
// if(PINA != value){ Serial.println(PINA,HEX); // Write the byte to load in RAM on data bus delay(10); // }
ベリファイエラーのない場合のbasic起動画面
ベリファイエラー発生時のbasic起動画面
「一度内部8MHzで書き込んだらダメでしたっけ?」のところですが、それは大丈夫だと思います。AVRISP mkII cloneの書き込み試験は、ATmega164でやりましたが、内蔵8MHzと外部16MHzをなんども往復して書けてました。
ピン接続も適切のようですし、あと考えられるのはパスコンぐらいでしょうか。ATmega32の10,11の間に0.1uFを足すとか。
いいねいいね
ありがとうございます。ATMEGA32Aが2個あり2個とも同じ症状だったので確認は後にして動作を優先させました。この辺は忘れたころにするのでまたまとめておきたいと思います。
いいねいいね: 1人
Z80-MBC2のICSP端子6本を繋いで、Arduino as ISPを使って書く手もあります。そうしなかった理由がおありでそうしなかったのでしょうが、念の為。
いいねいいね
6ピンコネクタを付けるのが面倒で付けていなかったのですが。書き込む前につけましたから今は使用しないのについています。
理由はありません。
ただMiniPROを使ってフューズビットを書いてみたかっただけです。
いいねいいね: 1人