M5Stack単独でPICマイコンに書き込む
はじめに
PICkit3はPICマイコンにプログラムを書き込むデバイスですが、書き込み速度が遅いです。そこで、まず、Seeed XIAO RP2040を使って、自作PICライタを作成しました。PICkit3よりも、速く書き込むことが出来るようになりました。
次に考えたのが、M5Stackを使えば、M5Stack単独で書き込めるようになるのではないかと思いました。そして、今回のM5Stack単独でPICマイコンに書き込める自作PICライタの制作にいたりました。
用意するもの
- M5Stack BASIC
- M5Stack FIRE
- PICマイコン。VPP電圧は、12V、9V、5Vに対応。ロジック電圧は、5V、3.3Vに対応。
- ガーバーファイル:PCBWayなどに、基板製造依頼してください。
- M5Stack用ユニバーサル基板キット3(共通部)を1つ
- M5Stack用ユニバーサル基板キット3(フレーム部)タイプ1Bを1つ
- 1x5ピン ピンソケット(メス・L型) SSW-105-02-G-S-RAを1つ
- スライドスイッチSS-14MDH2を1つ:12V、9V、5Vの切り替え
- 小型スライドスイッチ 1回路2接点 SS12D01G4を1つ:5V、3.3Vの切り替え
- MAX662 DIPモジュールを1つ:12Vの昇圧に用います
- 積層セラミックコンデンサー 0.22μF50V X7R 5mmを2つ:12Vの昇圧に用います
- 積層セラミックコンデンサー 4.7μF50V X7S 5mmを2つ:12Vの昇圧に用います
- MOSFET 2N7000を1つ:3.3V→12V,9V,5Vのレベル変換に用います
- 三端子レギュレーター 9V100mA HTC製 LM78L09を1つ:12Vから9Vをつくる
- 積層セラミックコンデンサー 0.1μF250V X7R 5mmピッチを1つ:12Vから9Vをつくる
- 積層セラミックコンデンサー 0.33μF50V X7R 5mmを1つ:12Vから9Vをつくる
- I2Cバス用レベル変換モジュール MM-9617を1つ:3.3V←→5Vのレベル変換に用います
- カーボン抵抗(炭素皮膜抵抗) 1/6W1kΩを4つ:プルアップ抵抗
- カーボン抵抗(炭素皮膜抵抗) 1/4W300Ωを3つ
- カーボン抵抗(炭素皮膜抵抗) 1/6W330Ωを1つ
▲ 開発当初はユニバーサル基板を使ったが、 写真の基板はPCBWayに発注した。 |
回路図
書き込みを行うのに「VDD」、「VSS(GND)」、「ISCPDAT」、「ISCPCLK」、「MCLR」という5つのピンを用います。 MCLRピンにPICマイコンの動作電圧より高い電圧(12V、9V、5V)の信号を与える必要があります。 また、ISCPDATピン、ISCPCLKピンとM5Stackの電圧が異なるため、レベル変換する必要があります。
1)M5Stackから出力される5Vを、12Vに昇圧する必要があります。そのために、MAX662 DIPモジュールを利用します。
2)12Vから9Vをつくるには、三端子レギュレーター LM78L09を利用します。
3)3.3V→12V,9V,5Vのレベル変換するのには、MOSFET 2N7000を利用します。
4)3.3V←→5Vのレベル変換するのには、I2Cバス用レベル変換モジュール MM-9617を利用します。
色々なレベル変換モジュールをためしましたが、どれを使っても高周波数信号の波形がなまります。 M5Stackは、電源回路の時定数が大きいようです。仕方がないので、書き込みに時間は掛かりますが、周波数を落とすことにしました。
ソフトウェア
pickle
C言語で書かれていますので、これをM5Stack用に移植を試みます。本体は、ほぼ、そのまま使用し、INPUT側のインターフェースの部分とOUTPUT側のインターフェースの部分を書き換えます。 Arduino IDEで開発しました。プログラムコードを公開します。
もう一つ書き換えた箇所があります。それは、ヒープメモリです。元のプログラムは、Linux環境で豊富にヒープメモリが使えますが、マイコンの場合、限られています。 そこで、M5Stack BASIC に関しては、microSDの記憶領域を利用し、M5Stack FIRE に関しては、8MBのPSRAMを利用しました。プログラムコードは、どちらも共通で使えるように作ってあります。
プログラムコード(2024.11.18更新)
ボードマネージャー: 公式M5Stack Ver 1.0.9
ライブラリ: M5Stack Ver 0.4.6, LovyanGUI(改造版), LovyanGFX(Ver 1.1.7)
対応ボード: M5Stack-Core-ESP32
<M5Stack FIRE の場合>
ボードマネージャー: 公式M5Stack Ver 1.0.9
ライブラリ: M5Stack Ver 0.4.6, LovyanGUI(改造版), LovyanGFX(Ver 1.1.7)
対応ボード: M5Stack-FIRE
※オプション:PSRAM->Enabled
2024.11.09より、M5Stack FIREに対応するため、回路を変更しています。以前の回路を利用する場合は、
プログラムコード(旧回路用)を使用してください。
書き込み(M5Stack単独)
1)M5StackとPICマイコンを接続します。PIC書き込みアダプタを利用すると便利です。
2)プログラム(hexファイル)をmicroSDに書き込み、それをM5Stackに挿入します。
3)M5Stackの画面とボタンで操作し、プログラム(hexファイル)をPICマイコンに書き込みます。
書き込み(PC操作)
1)M5StackとPICマイコンを接続します。PIC書き込みアダプタを利用すると便利です。
2)プログラム(hexファイル)をmicroSDに書き込み、それをM5Stackに挿入します。
3)PCとUSB接続(仮想COM、UART)して、PCより操作して、プログラム(hexファイル)をPICマイコンに書き込みます。 Tera Termなどを使って操作できますが、自作の書き込みソフトも作成しました。
Windows用書き込みソフト(2024.11.09更新)