HOME  > 電子工作

M5Stack単独でPICマイコンに書き込む

図1

はじめに

 PICkit3を使わずに、M5Stack BASIC もしくは、M5Stack FIRE を用いて、M5Stack単独でPICマイコンにプログラムを書き込むシステムを制作しましたのでご紹介します。
 PICkit3はPICマイコンにプログラムを書き込むデバイスですが、書き込み速度が遅いです。そこで、まず、Seeed XIAO RP2040を使って、自作PICライタを作成しました。PICkit3よりも、速く書き込むことが出来るようになりました。
 次に考えたのが、M5Stackを使えば、M5Stack単独で書き込めるようになるのではないかと思いました。そして、今回のM5Stack単独でPICマイコンに書き込める自作PICライタの制作にいたりました。

用意するもの

制作に必要なものは下記の通りです。

回路図

回路図
2024.11.09より、M5Stack FIREに対応するため、回路を変更しています。
それに伴いプログラムコードも変更されていますので、ご注意ください。
 PICマイコンに書き込みを行うための回路は上図のようになります。
 書き込みを行うのに「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という、Raspi(Linux)でPICの書き込みを行うプログラムがあります。

pickle

 C言語で書かれていますので、これをM5Stack用に移植を試みます。本体は、ほぼ、そのまま使用し、INPUT側のインターフェースの部分とOUTPUT側のインターフェースの部分を書き換えます。 Arduino IDEで開発しました。プログラムコードを公開します。

もう一つ書き換えた箇所があります。それは、ヒープメモリです。元のプログラムは、Linux環境で豊富にヒープメモリが使えますが、マイコンの場合、限られています。 そこで、M5Stack BASIC に関しては、microSDの記憶領域を利用し、M5Stack FIRE に関しては、8MBのPSRAMを利用しました。プログラムコードは、どちらも共通で使えるように作ってあります。


プログラムコード(2024.11.18更新)

コンパイラの設定
  <M5Stack BASIC の場合>
  ボードマネージャー: 公式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単独)

 下記の方法で、M5Stack単独でPICマイコンにプログラムを書き込めます。

1)M5StackとPICマイコンを接続します。PIC書き込みアダプタを利用すると便利です。

2)プログラム(hexファイル)をmicroSDに書き込み、それをM5Stackに挿入します。

3)M5Stackの画面とボタンで操作し、プログラム(hexファイル)をPICマイコンに書き込みます。



hexファイルのタイプを選択します。

高電圧プログラミング(HVP)モードか、
低電圧プログラミング(LVP)モードかを
選択します。

まず、PICマイコンの素性を読み込みます。

「PIC16F753」であることが分かります。

PICマイコンに書き込むhexファイルを選択します。

microSDに入っているhexファイルが表示されます。
ここでは、「PIC16F753.hex」を選びます。

hexファイルをPICマイコンに書き込みます。

書き込みが成功しました。
書き込み時間は、2.446秒です。

書き込み(PC操作)

 下記のように、PCとUSB接続(仮想COM、UART)して、PCより操作して、プログラムをPICマイコンに書き込みを行うこともできます。

1)M5StackとPICマイコンを接続します。PIC書き込みアダプタを利用すると便利です。

2)プログラム(hexファイル)をmicroSDに書き込み、それをM5Stackに挿入します。

3)PCとUSB接続(仮想COM、UART)して、PCより操作して、プログラム(hexファイル)をPICマイコンに書き込みます。 Tera Termなどを使って操作できますが、自作の書き込みソフトも作成しました。


Windows用書き込みソフト(2024.11.09更新)


PCとM5StackをUSB接続したあと、PC側より自作の書き込みソフトを起動し、COMポートを設定します。

PC側よりポートを設定します。それ以外はデフォルトのままで良いです。

M5Stack側より、USBモードを選択します。

M5Stackに、この画面が表示されていれば、PCから操作できます。

ここからは、PCから操作します。hexファイルのタイプを選択します。

まず、PICマイコンの素性を読み込みます。
「PIC16F753」であることが分かります。

microSDに入っているhexファイルが表示されます。

PICマイコンに書き込むhexファイルを選択します。
ここでは、「PIC16F753.hex」を選びます。

書き込みが成功しました。
書き込み時間は、2.445秒です。

終わりに

以上です。この他にも、Seeed xiao RP2040を利用して書き込むシステムを制作したり、Raspberry Piを利用して書き込むシステムを制作したりしてます。

このページのトップへ