秋月電子通販で売ってる MCS51(古き良き8051互換)なマイクロコントローラー CH552P DIP化キット(180円!)でLEDチカチカと、BASIC-52を動かしてみました。
1970年代にBASICマイコンを動かすのは、たくさんのLSIチップをはんだづけして作らねばならないということで、資金的にもかかりますし、技術的にも至難の業でありました。今回作ったマイコンはCH552P DIP化キットとUSB-C DIP化キット、数個の抵抗器でBASICマイコンが動いてしまいます。すばらしい!!
CH552Pとは
CH552PというマイクロコントローラーはIntel 8051互換の8bitマイクロコントローラーでありまして内蔵フラッシュ16kB、RAM 1280バイト。USBにも直結できるイカすやつです。タイマー、UARTx2、PWMx2、SPIx1装備というゴージャスなI/Oって感じです。詳しくは、秋田純一さんの以下の書籍がたいへんお勧めです。英語や中国語のデータシートでうんうん言わなくて良いのでたいへん良い本です。
また、いつもおせわになってる かんぱぱ(@kanpapa)さんのBLOGにも、CH552Eを動かした素敵な記事があります。参考にさせていただきました。
秋月電子から、CH552Pという3mm角ぐらいのQFN16パッケージをDIP 18ピン 300mil (TTL ICと同じ幅!!!)にしたものが販売されてますので、今回はそちらを使いました。
LEDチカチカとかの回路
今回はCH552Pで、LEDチカチカとBASIC-52を動かしてみたいので、以下のような回路にしました。
- パソコンとの接続してプログラム書き込みや電源に、USBtype-CコネクタDIP化キット(シンプル版エコノミータイプ)[AE-USB2.0-TYPE-C-5077CR]を装着
- シリアル通信用に、いつものFTDI互換端子 6P ピンヘッダを2つ装備(BASICでは回路図名称でいうと
シリアル-2
を使います。(TxD1、RxD1とつながってます)) - LEDチカチカ確認用に抵抗器経由でLEDを1つ装備。
- 書き込みモードへ移行するためのDFUモード(書き込みモード)ボタンを装備。
- 5Vと3Vのところには0.1uFのパスコンを装着。
回路は、見た目ちょっとごちゃごちゃしてますが、配線量はそんなにありません。今回は秋月電子Cタイプユニバーサル基板で試作してみましたが、ほぼ裏面の配線だけで接続できました。以下に写真を掲載します。ちょっと汚い配線ですがご容赦を。
CH552P DIP化キットからUSB DIP化基板へつなぐところの端子(VCCとかD+/D-とか) の並びがいい感じで揃ってて真っすぐに配線すればよかったところが多くてらくちんでした。いつもどおり、githubに回路図などをUPしてます。参考にしてください。
Ardiono IDEとWCHISPTool
Arduino IDEにCH55xdionoを追加
CH552P用のプログラム作成や書き込みには色々と方法があるみたいですが、Arduino IDE+CH55xduinoを使った方法が簡単そうでしたので、そちらでLEDチカチカをやってみました。
- WindowsにArduinoIDEをインストール後、ArduinoIDEを起動して ファイル>環境設定>追加のボードマネージャのURLに以下を追加
https://raw.githubusercontent.com/DeqingSun/ch55xduino/ch55xduino/package_ch55xduino_mcs51_index.json - ツール>ボード>ボードマネージャで”ch55xduino”をインストール
- ツール>ボードから、CH552を選ぶ
WindowsにWCHISPToolを導入
WCHISPToolを導入することで、CH552PをDFUモードでつないだときUSBデバイスとして認識するドライバーも一緒に導入されるみたいです。
あとで、BASIC-52を書き込むときにも使うので、ここで導入してしまいましょう。以下のWCHのサイトでダウンロードできます。
LEDチカチカ Blinkサンプル のソース変更点
LEDチカチカのソースは ch55xduinoをインストールすると出てくる”Blink”を使います。
“Blink”を開くと以下のようなソースが出てきまして、 #define LED_BUILTIN
のところにLEDをつなぐ端子の設定がかいてあります。 33
が指定されていますが、 こちらのサンプルプログラムでは、 P3.3
端子にLEDをつなぐかたちとなっています。
今回のわたしの回路では、回路図を見るとわかりますが P1.4
という端子につなぎますので、 14
へ変更します。
LEDチカチカプログラムの書き込み! 動いた!
ソースを変更したら、以下の順番で書き込みを行います。
DFUモード(書き込みモード)ボタンを押しながら、基板とPCをつなぐ
DFUモード(書き込みモード)ボタンを押しながらUSB-CケーブルでPCのUSB端子に基板を接続すると、WindowsがUSB機器として基板(というか、CH552P)を認識します。
この状態で基板に電源も供給されますので、LEDが光ったりしますが気にしない…
Arduino IDEでBlinkプログラムをコンパイル→書き込み
その状態で、いつものArduino IDEの書き込みボタン 「→」をクリックして
書き込みが成功すると、こんな感じで1秒間隔ぐらいでLEDがチカチカします。これで基板の動作確認完了です。電源もPCのUSB端子から供給されるので、別電源を用意しなくてよくて便利です。
BASIC-52の入手とHEXファイル書き込み
LEDチカチカが成功しましたので、次はBASIC-52を動かしてみたいと思います。 X(旧Twitter)で みかんとひよどりさんが CH552で動かしたBASICを公開されていましたので、使わせていただきました。
CH552Pと端子が違うだけで中身はほぼ一緒のCH552E用のBASICのhexファイルを WCHISPTool を使って書き込みします。
WCHISPToolは初めて使いましたが、右側に出ているメニューボタンの「E8051 USB MCUs」を押して、左側に出てきたメニューの「Download File」のところをクリックしてBASICのHexファイルを指定。
その後、DFUモード(書き込みモード)ボタンを押しながらUSB-CケーブルでPCのUSB端子に基板を接続した状態で、左下の「Download」ボタンを押下するとBASICのHEXファイルが書き込みができました。
いつものASCIIARTをテスト!
TeraTERMの準備とプロンプト表示
BASICとのやりとりは、TeraTERMなどのシリアル端末をつないで行います。TeraTERMの通信速度は19200bpsに設定します。BASICとの通信では、BASIC側の処理で文字の取りこぼしなどもありますので「送信遅延」設定も以下のような感じで設定しておくと良いです。(適宜 秒数は見直してください)
基板のシリアル端子-2(TxD1,RxD1) につなぐとBASICと通信することができます。
BASICのHEXファイル書き込みが成功した状態で、シリアル-2 (TxD1,RxD1) にTeraTERMを動かしたPCを接続するとBASICのプロンプトが表示されます。上記のように、行番号付きでBASICのプログラムを入力すると正しく動作するはずです。
ASCII ARTプログラムの送信と実行
みかんとひよどりさんが公開されているファイルには、みんな大好きASCIIARTのBASICプログラムが入っていますので、BASICプログラムを 適当なテキストエディタでひらいて全選択→ctrl+CでCOPYし、BASICが動いているTeraTERMのウィンドウに張り付けて送信します。
文字化けが起こらず送信ができたら、run コマンドを投入するといつものASCII ARTが表示されます。8bitマイコンのBASICなどではのんびりした表示でしたが、あっというまに表示が終わるのでCH552Pの速さを体感できます。
上のメッセージにも書いてますが、CH552PはRAMが1kバイトなんでBASICプログラムを保存する領域が大変少ないのです。よって短いプログラムしか動きません。
しかし、1970年代のマイコン少年が欲しくてたまらなかったBASICマイコンがこんなに部品点数が少ない基板で、このスピードで動くのは感動ものであります!!
今後に向けて…
CH552PはI2Cの端子はありませんが、Arduino IDEに入れたCH55xduinoのサンプルにSoftI2Cがあったりしますので、GPIOをパタパタさせてキャラクタ液晶とか温度センサーとかを動かしてみたら楽し気ではないかと思ったりしています。
またCH559などRAM容量が大きいチップも秋月電子通販では販売されていたりしますので、もっと大きいBASICプログラムを動かしたみたいなぁという野望もあったりします。RAM容量が大きいチップを入手したら試してみたいと思います。
コメント