Pi上のScratchにて簡単かつ安価にアナログセンサを取り扱えることを紹介しました。PICマイコンには自作プログラムを書き込まなければならず、その書き込み用のツールPICkit3が6千円程度することがややネックでした。PiのGPIOからPICのプログラムを書き込む方法が分かったので紹介します。Piをお使いの方ならば、数百円でPICマイコンにプログラムを書き込むことができるようになります。Pi上のScratchでアナログセンサを取り扱うことがさらに身近になります。それ以外の用途への応用も可能です。用意するもの今回、PICマイコンへプログラムを書き込むために用意するものは下記の通りです。3.3Vで動作するPICマイコン。本ページではAD変換とシリアル通信を取り扱うことのできるPIC12F1822とPIC16F1823を用いました。5V以上でしか動作しないPICマイコンでも原理的に書き込み可能だと思いますが、3.3V←→5Vのレベル変換がさらに必要になるので、回路がやや複雑になるでしょう。Piにpickleというソフトウェアをインストールする必要があります。書かれたリンクがあるのでクリックし、ファイルをダウンロードします。Piのブラウザでは、通常「Downloads」または「ダウンロード」ディレクトリに保存されますので、ファイルマネージャでそれをユーザーpiのホームに移動しておきます。ターミナルソフトウェアLXTerminalを起動し、下記のコマンド順にを実行し、pickleをインストールします。install以上で必要なソフトウェアのインストールが終わりました。そのターミナルを終了せず、そのまま下記のコマンドを実行します。pickleを用いるための設定ファイルを適切な位置に作成しています。3.2.1以降ではテキストエディタとしてleafpadではなくmousepadを用います。その場合、二つ目のコマンドは次のようになります。/home/pi/.pickle/configテキストエディタleafpadで空のファイルが開きますので、下記の内容をコピーして貼り付け、保存してください。3用の設定ファイルであるという意味です。1系やZero系を用いている場合は「DEVICE」を「RPI」に設定してください。その他の設定の意味については、公式サイトに説明があります。次に、PICマイコンに書き込みを行うための回路を準備します。そのために、利用するPICマイコンのピン配置をあらかじめ調べておく必要があります。programming」という手法です。一般に、マイコンにプログラムを書き込むことを「プログラミング(programming)」と呼ぶことにも注意しておきましょう。この手法には「VDD」、「VSS(GND)」、「ISCPDAT」、「ISCPCLK」、「~MCLR」という5つのピンを用いますので、そのピンの位置を事前に調べておきます。今回用いるPIC12F1822およびPIC16F1823の仕様書は英語版と日本語版がありますが、それらによると、該当するピンは下記のように配置されていることがわかります。programmingでは、~MCLRピンにPICマイコンの動作電圧より高い電圧(ここでは9V)の信号を与える必要があります。PiのGPIOから出力される信号は3.3Vなので、これを9Vに変換する必要があります。そのために、本ページではNチャネルMOSFETを用いた下記のようなレベル変換回路を利用します。これは、「ロジックレベル双方向変換モジュールBOB-12009」で用いられている回路と同等なものです。以上をまとめると、PIC12F1822を用いるときに構成すべき回路は下図のようになります。この回路を構成する場合、9V電池の取り扱いには十分注意してください。Piが壊れる可能性があります。同様に、回路の接続が正しいことのチェックも重要です。同じですが、PIC16F1823の場合は下図のようになります。書き込み最後に、書き込みを行いましょう。Pi上のScratchでアナログ入力を利用してみた」というエントリで用いるファイルを書き込んでみます。HEXファイルはPIC12F1822用とPIC16F1823用の2つしか用意しておりませんのでご注意ください。LXTerminalを新たに開き、下記のコマンドでファイルをダウンロードし、そのディレクトリに移動します。TinyPicoBoardpickleというソフトウェアをインストールした際、p12、p14、p16、p24、p32、などといったコマンドがインストールされ、用いるPICマイコンの種類によって使い分けるのですが、本ページではp14コマンドを用います。Piに接続されているPICマイコンの情報を取得するには、下記のコマンドを実行します。idその結果、下図のように、PICマイコンの情報が表示されます。PIC12F1822が認識されていることが見て取れますね。TinyPicoBoardディレクトリにある「12f1822.hex」というファイルをPIC12F1822に書き込むには、下記のコマンドを実行します。上図にその様子が示されていますね。12f1822.hex同様に、「16f1823.hex」というファイルをPIC16F1823に書き込むには、下記のコマンドを実行します。16f1823.hexなお、PICに書き込まれているプログラムを消すためのコマンドとしては下記が使えます。消すことの確認を英語で求められたら、「y」をタイプしてEnterします。Pi上のScratchでアナログ入力を利用してみた」に基づいて使用することができます。~MCLRピンに接続する信号を9Vにレベル変換する必要があることに気づくまで時間がかかってしまいました。本ページでは3.3Vで動作するPIC12F1822やPIC16F1823を対象としました。4V以上でないと動作しないPICマイコンの場合、恐らく下記のようにする必要があるでしょう(試していません)。Piではじめる機械学習」を執筆しました。