MPLAB XとMCCを使ったPICプログラミング

PICkitとPICチップが準備できたら、さっそく開発を行いましょう!(^^)! とは言え、こういった情報が少なすぎて、私は何回か挫折しましたが(^^;;;

PIC関連の本やブログは山のようにあります。しかし、ド素人の私はどうやっても開発のノウハウが蓄積できませんでした。コレ、という道標がないのです。購入してから何もせず眺めていました(笑)。開発が起動に乗ったのは、PICkit3を購入してから、丸3年ほど過ぎてからでした。( ゚Д゚)

3年の間は何をしていたかというと、Raspberry Piでばかり開発していました。実は、Raspberry Piを購入した数か月後にPICkit3を購入していたのですが、完全に放置していました。(^^;;; その間も、書籍からもネットからもPICに関する最新情報は得られませんでした。MPLAB Xの使い方を説明した書籍もありませんでしたし、後述するMCCを使った開発事例も見たことがありませんでした。厳密に言うと、紹介程度の情報はあったのですが、実際の開発例がまったく見つからないのです。

恐らくですが、PICで開発する方は、電子工作の延長でプログラミングするようになったのではないでしょうか。どの情報もかなり古いスタイルの開発手法に見えました。そういえば、以前も同じことを思ったものです。「Raspberry PiでSC1602とSC2004を制御する」にこんなことを書いていました。

私はプログラミングを先に経験してから電子工作を始めました。だから思うのですが、これらのコードを書いた人は電子工作を専門にやっている人のように思えるのです。電子工作する上で避けて通れないからプログラミングをしているように思えるのです。

そんな訳で、今回の目標は最新の環境を使って、とりあえずPICを動かすことにします。1つでも動作する環境ができれば、後は興味が出てくるので、自分で色々やってみることができます。そして数年前の私はこういう情報が欲しかったのです。

PICkitのインストール

MPLAB X IDEをインストールすると、このような画面になります。

MPLAB X IDE v4.20

この画面のまま、PICkit3を接続します。Windowsの場合、右下にバルーンが出ますが、OSのバルーンというよりもMPLAB Xが出すバルーンです。しばらくすると消えます。

あれ、と思われたかもしれませんが、PICkit3にはいわゆるドライバーが不要です。デバイスマネージャーでは[HID準拠ベンダー定義デバイス]になります。デバイスマネージャーの設定を[表示] – [デバイス (接続別)]にすると探しやすいです。

デバイスマネージャー内のPICkit3

XC8のインストール

次にコンパイラーをインストールします。まずはMPLAB X IDEを一旦終了してください。Microchip Downloads Archiveへ移動し、XC8コンパイラーをダウンロードします。2018年10月現在、私の推奨は1.43です。

利便性向上のため、直リンクを貼っておきます。

OS ファイル名
Linux xc8-v1.43-full-install-linux-installer.run
Windows xc8-v1.43-full-install-windows-installer.exe
OSX xc8-v1.43-full-install-osx-installer.dmg

ダウンロード後はインストールしてください。説明は省略しますが、[次へ]だけ押せばいいはずです。

参考までに、1.44では外部ライブラリをインポートするとコンパイルができなくなります。1.45では、ライブラリのコンパイルで不具合が発生します。最新版のバージョン2.00では、後で使用するMCCにてトラブルが発生します。バージョンアップに伴い不具合が増えるとはひどいですね。(^^;;;;

プロジェクトの作成

MPLAB X IDEを開いてください。左上の[Projects]を右クリックして、[New Project]をクリックします。

Choose Project

[Standalone Project] のまま、[Next >]をクリックします。

Select Device

PICチップの型番を入れて、[Next >]をクリックします。ここでは当ブログの推奨チップのPIC16F18346を選択しました。

Select Tool

PICkitを選び、[Next >]をクリックします。

Select Compiler

コンパイラー (≒使う言語)を選びます。[Select Device]の所で選択したPICチップが利用できるコンパイラーが表示されます。PIC16F18346が対応している言語は、アセンブラ (mpasm)とC言語 (XC8)です。XC8を選択します。

ここで注意が必要です。先ほども触れましたが、XC8のバージョン1.43を指定してください。写真では1.45になっていますが。詳しくは「Microchip’s New XC8 Compiler Appears Incompatible With MCC Boilerplate」(英語)を参照してください。

[XC8 (v1.43)]を選び、[Next >]をクリックします。

Select Project Name and Folder

[Project Name]はプロジェクト名です。値は任意です。私は「PICチップ名_目的」にしています。ここでは「PIC16F18346_UART」にしました。

[Project Location]はプロジェクトフォルダの保存先です。ドキュメントフォルダの下にMPLABXProjectsというフォルダがあると思いますので、その下にProjectsというフォルダを作成し、それを指定しました。そうすると、MPLABXProjects\Projects\PIC16F18346_UART.Xというフォルダが作成され、そのプロジェクトに関するファイルがそこへ格納されるようになります。

[Project Location]が半角スペースを含む場合、MPLAB X IDEの起動時に以下のエラーが出るようになります。

Warning: Project "PIC16F18346_UART" refers to file "C:\File path with space\MPLABXProjects\Projects\PIC16F18346_blog.X\main.c" that contains spaces or odd characters in its name or its path.
Some of the files in this Project "PIC16F18346_UART" contain spaces or odd characters in their name or their path. This could potentially cause issues during the build process. This is a limitation of GNU Make tool that we use as part of our build process. Removing spaces from all file and folder names included in this project will eliminate this potential issue.

ソースコードのビルド時にエラーとなる可能性があるようですが、これまで1度も発生したことはありません。(^^;

[Set as main project]はチェックのままにします。

[Use project location as the project folder]は未チェックのままにします。これにチェックしてしまうと、PIC16F18346_UART.Xというフォルダが作成されません。

[Encode]はUTF-8のままにします。

最後に[Finish]をクリックします。

Project追加直後

MCCのインストール

画面上にアイコンはありますか?確か初期状態ではインストールされないので、以下のようにインストールします。

メニューの[Tools] – [Plugins] – [Available Plugins]の順にクリックします。

MCC v3.65

一覧からThe MPLAB® Code Configuratorを探してインストールしてください。スクリーンショットは私の環境なので[Installed]タブを開いています。インストール前だと[Available Plugins]の中にあるはずなので探してください。

MCCを起動する

先ほど説明したアイコンをクリックしますが、その前に注意が必要です。MCCを起動する際は、対象となるプロジェクトが必ずmain projectに設定されている必要があります。(太文字になっている状態です。) main projectに設定するには、プロジェクトを右クリックして、[Set as Main Project]をクリックします。

アイコンをクリックすると、以下のウィンドウが突然表示されます。以前はこんな動きをしなかったのですが。(^^;;;

Save MCC Configuration file

そのまま[保存]してください。

MCC Main

ここからは、初期設定を行います。画面中央には[System Module]が表示されているかと思います。見ていただくとなんとなくわかると思いますが、MCCはPICチップの初期設定を行うためのツールです。

Internal Oscillator

PICの速度を設定します。PICチップはパソコンのCPUのように動作速度を変更できます。

System Module

詳細は省きますが、以下のように設定するだけで、32MHzで動作します。8ビットPICで水晶もないのにここまで速くなるとは、さすがPIC16F18346。!(^^)!

Oscillator Select HFINTOSC with 2x PLL
HF Internal Clock 16_MHz
Clock Divider 1
Watchdog Timer Enable WDT disabled; SWDTEN is ignored
Low-voltage Programming Enable Check

Pin Manager

これはPICチップの機能と端子の対応表です。

Pin Manager Grid View

PICチップのサイズを指定します。

Package PDIP20

よく使われるのはブレッドボードにささるPDIP型です。これを変更すると、右上の図がこのように変わります。

Pin Manager Package View

UART機能の追加

UARTとは、簡単に言うとシリアル通信の機能です。これを使うと、PICとパソコン間を通信させることができます。私がプログラミングするのには欠かせないので、必ず設定しています。

左側にある[Device Resources]の中からEUSARTを開きます。

Device Resources

ESURT [PIC10 / PIC12 / PIC16 / PIC 18 MCUs by Mictochip Technology, Inc.]をダブルクリックします。中央にEUSARTウィンドウが開きます。以下のように設定します。

EUSART

変更したのは以下の項目のみです。

Enable Transmit Check
Enable Receive Check
Redirect STDIO to USART Check

ここまで設定すると、以下のようになるはずです。

EUSART設定後

ピン(端子)の変更

[Pin Manager Package View]を見ると、10番ピン(RB7)にはシリアル通信データ送信用端子であるTX、12番ピン(RB5)には受信用であるRXが設定されたはずです。このままでもいいのですが、設定を変更します。そうすれば関連する接続を近くにまとめることができて、ブレッドボード上の見通しが良くなったり、はんだ付けする際のレイアウトの自由度があがったりして便利です。なお、こういったことが変更できるのも、PIC16F18346の大きな選定理由です。設定変更できないPICもかなり多いと思います。

10番ピン(RB7)と12番ピン(RB5)のをクリックしてへ戻します。次に13番ピン(RB4)とRXが交差するセルをクリックしてにします。同じく、13番ピン(RB4)RXが交差するセルをクリックしてにします。

ここで気づいたかと思いますが、RXの行はになり、TXはのままになっていますね。RXは1つのピンにしか指定できないのですが、TXは複数のピンが指定できます。これまでのところ、複数指定したことはありませんが。(^^;

ここまで設定できれば、以下のようになっているはずです。

Port変更後

MCC設定の保存

左側にある[Project Resources]の右に[Generate]があります。

Project Resources

これをクリックすると、[MPLAB® Code Configurator]ウィンドウに以下のようなログが表示されます。

21:56:21.852    INFO: *****************************************************
21:56:21.852    INFO:  Generation Results                                  
21:56:21.853    INFO: *****************************************************
21:56:21.866    INFO: main.c                              Success.
21:56:21.867    INFO: mcc_generated_files\device_config.c Success.
21:56:21.867    INFO: mcc_generated_files\eusart.c        Success.
21:56:21.867    INFO: mcc_generated_files\eusart.h        Success.
21:56:21.867    INFO: mcc_generated_files\mcc.c           Success.
21:56:21.867    INFO: mcc_generated_files\mcc.h           Success.
21:56:21.867    INFO: mcc_generated_files\pin_manager.c   Success.
21:56:21.868    INFO: mcc_generated_files\pin_manager.h   Success.
21:56:22.113    INFO: *****************************************************
21:56:22.113    INFO:  Generation complete (total time: 555 milliseconds)
21:56:22.113    INFO: *****************************************************
21:56:22.113    INFO: Generation complete.

を押してMCCを終了します。すると、以下の画面になります。

MCC終了直後

使わないタブが前になってます。いつもの外観に手動で戻してください。気配りが足らないIDEですね・・・。(-_-;)

いつもの外観

テスト回路の作成

ここで回路の話になります。以下の回路を作成してください。

開発用回路(仮)

色々と部品が乗っていますね。詳細はそのうち説明します。Fritzingで書くと、以下のようになっています。

ブレッドボード

回路図

要は、PICkit3とPIC16F18346 (図ではPIC16F1829)の以下の端子同士を接続しています。

PICkit3 PIC16F18346
1 nMCLR/Vpp 4 nMCLR
2 Vdd 1 Vdd
3 Vss 20 Vss
4  PGD (ICSPDAT) 19 RA0/ICSPDAT
5 PGC (ICSPCLK) 18 RA1/ICSPCKL

リセットスイッチがあればPICの動作をリセットできます。写真のものは、千石電商のMS-312 白です。スイッチには色々な種類がありますが、いわゆるリセットボタンと同じ動きをするものにします。押した時だけ接続し、ロックせず、手を離すと回路が切れるものです。詳しく書くと、SPST (単極単投)、1回路2接点、モーメンタリ、ノンロック、NO (Normally Open)のものです。

リセットスイッチには抵抗が必要です。これはプルアップ抵抗です。PICにはプログラムからON、OFFできるプルアップ抵抗があるのですが、リセットスイッチだけは実際に抵抗を用意する必要があります。

シリアルケーブルを差し込みます。これは秋月電子のTTL-232R-3V3 (M-05840)です。

TTL-232R-3V3とブレッドボード

先端は加工してあります。加工方法については今後説明します。

TTL-232R-3V3 先端

元々のケーブルの色 ピンソケットの色 機能
オレンジ 黄色 TX
黄色 RX
GND

シリアルケーブルはクロス接続する必要があります。よって、ピンソケットの黄色(TX)はブレッドボードの緑(RX)と接続し、ピンソケットの緑(RX)はブレッドボードの黄色(TX)と接続します。

USB端子側をPCへ接続します。確かドライバーは手動でインストールしたと思うのですが、覚えていません。すみません。認識されてると、デバイスマネージャーでは、USB Serial Port (COM3)のように表示されます。

デバイスマネージャー

Hello Worldの作成

さて、MPLABへ戻ります。フォルダツリーを開くと、以下のようになっています。

フォルダツリー

ファイルが増えているのは、MCCが自動生成したからです。これがMCCのいい所です。(^^♪ Source Filesの中にmain.cというファイルがあるので、ダブルクリックしてください。エディターが開きます。

このファイルの中身は以下のようになっています。

/**
  Generated Main Source File
  中略
*/

/*
    (c) 2018 Microchip Technology Inc. and its subsidiaries. 
    中略
*/

#include "mcc_generated_files/mcc.h"

/*
                         Main application
 */
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
    }
}
/**
 End of File
*/

プログラムをこのように変更してください。printfの行を追加するだけです。

    while (1)
    {
        // Add your application code
	printf("Hello World!");
    }

これは、PCの画面にHello World!と表示し続けるプログラムです。このように、すべてのプログラムはこの部分へ書くことになります。逆に、ここ以外はMCCに任せてしまいます。こうしておくことで、PICチップの型番を変更したとしても、MCC上で設定しなおすだけで済むようになります。

書き込み

PICkit3 と 44ピン デモボード」でも書きましたが、MPLAB X IEDのメニューにあるボタンをクリックすると、このような画面が開きます。

警告

PICチップが5V対応でない場合は、チップにダメージを与えてしまいますよ、という警告です。今回は素直に[Cancel]を押します(笑)。

アイコンを押します。もしくは[File] – [Project Properties]の順にクリックします。

Conf: [default]の下にある[PICkit3] をクリックします。Option categories:[Power]にします。

電圧設定2

[Power target circuit from PICkit3]にチェックを入れ、[OK]します。Voltage Levelがデフォルトでは5.00なので、3.25にします。実際には1.8Vから 3.6Vであればいいのだと思いますが、私は3.25しか使ったことがありません。

再びアイコンを押します。もしくは[File] – [Run Main Project]の順にクリックします。また警告が表示されますので、今度は[Do not show the message again]にチェックし、[OK]をクリックします。

Programming/Verify complete

と表示されるはずです。これで書き込みが正常完了しました。また、PICは直ちに動作を開始します。

シリアル通信ソフト

PCの画面にHello World!を表示するためには、シリアル通信ソフトが必要です。有名なのはTera Termです。私はPuTTyをよく使うのですが、好みで決めてください。(^^; 窓の杜でTera Termのページを見ると通常版とポータブル版があるようです。ここではv4.99ポータブル版中にある、ttermpro.exeを実行して動作確認しました。

起動すると、以下の画面になります。Serialを選択し、Portには先ほどデバイスマネージャーに表示されていたCOMポートであるCOM3を指定します。

Tera Term v4.99

OKを押した途端、Hello World!という文字が無限に表示されます。\(^o^)/

Hello World!

もしうまくいかない場合は、[Setup] – [Serial port]を開き、以下の設定となっているか確認してください。なお、Flow controlはnone、Xon/Xoff、hardwareのいずれでも動作しました。

Tera Term Serial port setup

初めからシリアルケーブルを接続していないと、以下のように文字化けします。その場合はリセットスイッチを押してください。

文字化け

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です