PIC18系マイコンでEEPROM書込み・ADCなど周辺機能が動作しない時の解決方法

じぶんキーボードはMacからアプリでキーの割り当てを変更できるようにする予定ですが、PICマイコン側(PIC18F14K50側)では変更した内容をEERPOMに書き込もうと思います。ただ、このEEPROM書き込みにちょっとハマってしまいましたので、備忘録として対処方法をまとめておきます。じぶんキーボードのPICマイコン向けプログラムを作っていたのですが、以前は何問題なくなできていたEEPROMへの書き込みが動かなくなってしまいました。原因がわかりましたので備忘録としてまとめておきます。

問題の内容

じぶんキーボードのマイコンはMicrochip社のPIC18F14K50を使用しています。このマイコンを使って、カスタマイズできるキーポードを作っているのですが、せっかくカスタマイズできるので、Macアプリを作って、アプリからキーの割り当てが変更できるようにしようとしています。Macのアプリからキーの割り当てを変更したら、EEPROMに保存しようとして、eeprom_read()、eeprom_write()関数を使用したのですが、eeprom_read()は返り値がいつもゼロ、eeprom_write()は書き込みができない、という問題が発生しました。

なんとか回避できましたので、対処方法をまとめておきます。

 

原因

原因は、コンパイラXC8のVersion1.35から、Peripheralライブラリが同梱されなくなったためでした。やはり新しいバージョンのコンパイラを使用する場合は、きちんとリリースノートを読むべきですね。と言っても英語なのでなかなか読む気になれませんが…

XC8 Version 1.35 リリースノートの「Migration Issues」の項目に以下の内容が記載されていました。

Removal of PIC18 peripheral libraries
The PIC18 peripheral libraries and their associated header files and documentation are no longer shipped with this compiler. The MPLAB Code configurator (MCC) can be used to generate routines that perform similar tasks to those supplied by the peripheral library, and can generate code for many devices, not just the PIC18 family. The MCC is available as an MPLAB X IDE plugin and can be downloaded from the IDE under the Tools > Plugins menu. If you need to use the peripheral libraries that were formerly shipped with the compiler, an archive of these are available as a separate download and will need to be installed over the top of your compiler installation. The archive was built for v1.34 of the compiler. If you encounter any inconsistencies between the archived libraries and projects compiled with a more recent compiler, you can copy the relevant library source modules into your project.

(Microchip Technologies社 XC8コンパイラリリースノートより引用)

内容は以下のような感じです。

PIC18系のペリフェラルライブラリを削除しました
PIC18系のペリフェラルライブラリと関連ヘッダファイル、ドキュメントは今後コンパイラに同梱されません。今後は、ペリフェラルライブラリと同じようなことをするには「MPLAB Code Configurator (MCC)」を使用してください。MCCはPIC18系だけでなく、他の系列のPICマイコンもサポートしています。MCCはMPLABX IDEのプラグインとして提供されていて、MPLABX IDEのToolメニュー ⇒ Pluginメニューからダウンロードできます。
もし、以前のバージョンのコンパイラに同梱されていたペリフェラルライブラリを使いたい場合は、独立してダウンロード、インストールできるようにしています。そのライブラリはXCコンパイラVersion1.34向けにビルドしたものです。もし最近のコンパイラでビルドしたものとこのライブラリに不整合が生じた場合は、適切なライブラリのソースモジュールをプロジェクトに組み込む必要があります。

ということで、ライブラリが別途必要とのことですので、まずは「MPLAB Code Configurato」を試してみました。

 

MPLAB Code Configurator

MPLAB Code Configurator = MCCは、Microchip社のサイトを見ると、今後のデバイスのコンフィグレーションやペリフェラル機能(ADCやECCPなど)は、このMCCを使うようになっていくみたいです。MCCってよくわからなかったのですが、サイトの紹介内容を読んだり、ちょっと試してみたりしてなんとなくわかったので自分なりに説明してみます。

MCCとは、ざっくり言うと、PICマイコンが持っているペリフェラル機能(ADC、ECCP、MSSPなどの各モジュール機能)を使うためのコードを自動生成する、というもののようです。

PICマイコンのペリフェラル機能を使う場合、今までは全てコーディングしていましたが、MCCを使うとダイアログで必要なパラメータを設定するだけで、ある程度コードを生成してくれるようになります。これは、Xcodeなどの統合開発環境の機能向上やArduinoなどラピッドプロトタイピングなどを意識しているようにも思えます。これも時代の流れなんでしょうか。

ということで、イメージがわかるようにどんな感じか具体的に説明してみます。

最初に説明しましたが、MCCはMPLABX IDEのプラグインとして供給されています。手順としては、MPLABX IDEでMCCのプラグインをダウンロード、使用するということになります。

まずはMPLABX IDEを立ち上げます。アプリメニューの「Tools」⇒「Plugins Download」を選択します。

Mcc step 1

以下のようなダイアログが表示されますので、「Go to MPLAB X Plugin Manager」ボタンをクリックします。

Mcc step 2

プラグインの管理画面が表示されますので、「MPLAB Code Configurator v3」を探してチェックボックスをONに、その後下の方の「Install」ボタンをクリックします。

Mcc step 3

プラグインのインストールが始まります。Next>ボタンをクリックします。

Mcc step 4

使用許諾内容が表示されますので、「I accept the terms in all of the license agreements.」にチェックをつけて、Next>ボタンをクリックします。

Mcc step 5

しばらく待つとインストールが終わります。

Mcc step 6

これでインストール完了です。

次に、編集したいプロジェクトを開いて、「Window」⇒「MPLAB Code Configurator v3」⇒「MPLAB Code Configurator」を選択します。
Mcc step 7

自分の場合は、PIC18F14K50を使用するプロジェクトを開いてこの操作を行いましたが、、、

Mcc step 8

なんと、PIC18F14K50はまだ非サポートとのことです…。ということで、PIC18F14K50のプロジェクトはMCCを使うことができないので、後述の対策が必要です。

ということで、とりあえずMCCがサポートしているPIC12F1822を使用する中身がカラのプロジェクトを作ります。

Mcc step 9

先ほどと同様に「Window」⇒「MPLAB Code Configurator v3」⇒「MPLAB Code Configurator」を選択します。以下のような画面になりますので、Generateボタンをクリックします。Generateボタンをクリックすることにより、MCCが使用するプロジェクトファイルを作るようです。

Mcc step 9 2

Generateボタンをクリックすると、MCCのファイルを作成、保存するダイアログが表示されますので、そのままOKボタンをクリックします。

これでMCCを使う準備ができましたので、次にペリフェラル機能の管理画面(リソース管理画面)を表示します。「Window」⇒「MPLAB Code Configurator」⇒「MPLAB Code Configurator Resource Management」を選択します。

Mcc step 11

選択すると以下のようにペリフェラル機能を管理する画面になります。

Mcc step 12

ここで、ADC(ADコンバータ)機能のコードを生成してみます。まず、Device Resources(デバイス機能)欄から「ADC」を見つけてダブルクリックします。

Mcc step 13

ダブルクリックすると、ADCがProject Resorucesに追加、右側にパラメータ設定画面が表示されます。

Mcc step 14

パラメータを設定したら、Generateボタンをクリックすると、ヘッダファイルとコードが生成されます。

Mcc step 15

生成されたコードは、プロジェクトの「Header Files」と「Source Files」の「MCC Generated Files」フォルダに格納されています。

Mcc step 16

という感じで、コードをガシガシ書かなくても自動生成されるんですね。

でも、MCCでサポートされていないPIC18F14K50は相変わらず自分で書く必要がありますね。ということで、最後にMCCで対応していないPICマイコンの対処方法です。

 

PIC18系/PIC24系/PIC32系マイコンのペリフェラル機能対策

PIC18/24/32系マイコンは、XCコンパイラのリリースノートにあるように、自分でペリフェラルライブラリをダウンロードしてインストールする必要があります。また、ビルドする際に、ペリフェラルライブラリを使う、という設定も必要になります。この2点を押さえておけばOKです。

まず、ペリフェラルライブラリのダウンロードとインストールです。microchipのサイトに行き、XCコンパイラのダウンロードページにPeripheral Librariesがありますので探します。

Peripheral libraries download

PIC18系マイコン用のペリフェラルライブラリがありますので、ダウンロード、インストールします。インストールの際、インストール先のXCコンパイラのフォルダ指定画面がありますが、インストールが必要なXCコンパイラのディレクトリを選択します。インストールは特に難しいところはないので説明は省略します。

これで、ペリフェラルライブラリのインストールができましたが、まだこのままではペリフェラル機能は動作しません。MPLABX IDEのプロジェクトプロパティで、ペリフェラルライブラリを使用する設定をする必要があります。

まず、MPLABX IDEでプロジェクトプロパティを開きます。次にXC Linker (XC8であれば、XC8 Linker)を選択します。選択するとXC Linkerの設定が表示されますが、「Runtime」設定の下の方に「Link in Peripheral Library」という項目がありますので、これにチェックをつけます。

Use peripheral libraries

これで、ペリフェラル機能が使用できるようになります。

自分の場合は、eeprom_read()、eeprom_write()が動きませんでしたが、これでXC8コンパイラVersion1.35以上でもビルドできるようになりました。

通知の設定
通知タイミング
guest
4 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
m_c_turbo
m_c_turbo
7 年 前

PIC18F26K22で以前出来たAD変換が出来なくなり、困っていました。
出来ていた時はMCC2で、現在はMCC3になり、XC8のバージョンも変わって、
原因の切り分けに苦慮していたところ、このサイトを発見し、
Link in Peripheral Libraryにチェックを入れたら解消しました。
ありがとうございました。

管理者
管理者
返信  m_c_turbo
7 年 前

コメントどうもありがとうございます!
自分も、新しい環境にしたら突然ADCが動作しなくなって困ったのですが、少なくともPICマイコン標準機能については、デフォルトで使えるようにして欲しいですよね…
お役に立ててよかったです!

nakjack
nakjack
8 年 前

ペリフェラリライブラリのダウンロードとインストール大変参考になりました。昔出来ていたPIC18F14K50のEEPROM read/WriteがXc8 1.36で動作しなくて、悩んでいました。

管理者
管理者
返信  nakjack
8 年 前

コメントどうもありがとうございました!

記事の内容は網羅的に書いたので分かりづらいかもしれませんが、手っ取り早く解決するには、ペリフェラルライブラリをダウンロードしてインストールしてしまった方がいいかもしれません。

また何か気づいたら記事にしてみます!

目次