PIC解説

PIC超入門!ゼロからLチカまでの道【その3:コンフィギュレーション~プログラミング】

投稿日:2020-07-10 更新日:

前回プロジェクトを作成して設定まで終わったのでいよいよプログラミングに入ります。PICの第一の関門であるコンフィギュレーションも順を追ってやっていけば簡単にできます。

前回の記事はこちらhttps://rikeden.net/?p=338

コンフィギュレーション

プログラムを書く前にコンフィギュレーションの設定を記述しなければなりません。

コンフィギュレーションとは、簡単に言うとクロック源の設定やWDT(Watch Dog Timer)といったハードウェアの設定のことです。MPLAB X IDEではコンフィギュレーションビットが一覧となって設定できる機能があるのでそちらを利用します。

ツールバーのProduction > Set Configuration Bitsを開きます。

画面下部に設定ウィンドウが表示されるのでそこで設定をします。PICの種類によって設定できる項目は違うのですが、基本的には以下の3点を設定すれば大丈夫です。

  • FOSC : INTOSC (内蔵発振器使用)
  • WDT : OFF (ウォッチドッグタイマー不使用)
  • LVP : OFF (低電圧プログラミング不使用)

まずはPICの動作に必要なクロック源の設定です。時計に使ったりなど高精度のクロックが必要な場合を除けば、内蔵発振器で動作させるのが簡単です。

ウォッチドッグタイマーとは、一定時間プログラムからタイマーにアクセスがない場合(意図せず無限ループにはまっている場合など)にハードウェア的に強制的にリセットをかける機能です。

製品に組み込む場合には動作が停止しては困るので使うことがあるかもしれませんが、実験段階ではこれのせいでプログラムが走らなかったりするのでOFFにしておいた方が安全です。

低電圧プログラミングはプログラムを書き込むときに、通常は高電圧をかけてPICを書き込みモードにするのに対して、高電圧をかけずに特殊なプロセスによって書き込みモードにする機能です。

通常の書き込みで特に問題はなく、余計な設定もいらないので 低電圧プログラミング もOFFにしておきます。

 

以上を設定したら下にあるGenerate Source Code to Outputと書かれたボタンを押します。

すると、Outputのタブにテキストが出力されるので、これを丸ごとコピーしてmainファイルの先頭に貼り付けます。

余計なコメントは削除して構いません。また、
#include <xc.h> は最初から書かれているので2回書かないようにしてください。

以上でコンフィギュレーションの設定は完了です。

 

初期設定

コンフィギュレーションの設定に続いて、初期設定をする必要があります。

これはどういうものかというと、IOピンの入力/出力の設定や、デジタル/アナログの設定などです。

その前にまずはデータシートでIOピンの場所を確認しましょう。ちょっとスクロールしたところにお目当ての図がありました。

なにやらいっぱい書いてありますが、RAxやRBxと書かれているのがピンの名称です。ピンはポートA、ポートBというように8個セット(場合による)で管理されます。

入出力設定

まずはピンの入出力を設定しましょう。これはTRISA/TRISBレジスタで管理されます。それぞれが ポートA、ポートBに対応し、各レジスタの上位ビットからRx7, Rx6, ... Rx0に対応します。

このビットが0だと出力に、1だと入力になります。

例えば、下図のようになります。

今回は入力は使わないので全部出力に設定しておきます。(MCLRのRA5は入力専用ピンです)

TRISA = 0b00100000;
TRISB = 0b00000000;

デジタル/アナログ設定

デジタル/アナログはANSELA/ANSELBレジスタで設定します。各ピンとビットの関係は先程と同様です。

対応するビットが0だとデジタルに、1だとアナログになります。

今回はすべてデジタルのままにしておきます。

ANSELA = 0b00000000;
ANSELB = 0b00000000;

その他設定

PICの種類にもよりますが、内蔵発振器の周波数を設定できたり、WPU(Weak Pull Up)の設定ができたりします。

これらの機能を使う場合には設定が必要ですが、何もしなくてもデフォルトの値が設定されるので、PICが動かないということにはなりません。(上記二つも同じですが、使わない場合にも明示的に書いておいた方がよいと思います。)

今回はクロック周波数を1MHzに設定したいと思います。この設定はOSCCONレジスタで行います。(データシートP67参照)

OSCCONbits.IRCF = 0b1011;

レジスタの中で一部だけ値を変更したいときは、bits.xxを付けることによってそこだけアクセスできます。(ビットフィールドという構造体の一種です)

_XTAL_FREQ

こちらは初期設定とは異なりますが、一緒に紹介します。Crystal Frequencyすなわちクロックの周波数を #defineで定義しておきます。これを定義しておかないと、delay関数などが使えなくなるので必ず定義しておきましょう。

実際と異なる値に定義してしまうと、delay関数の待ち時間がずれてしまうのでちゃんと設定しましょう。

今回は1MHzに設定したのでそれに合わせて記述します。

#define _XTAL_FREQ 1000000

0の数を間違えないように気を付けましょう(笑)

 

ここまでで以下のようなコードとなります。

 

プログラミング

さていよいよプログラミングです。といっても今回はLチカさせるだけなのでほんの数行しかありませんが。

今回はRA0ピンを使ってLチカします。

いきなり完成形を紹介しましょう。

これだけです。出力ピンのON/OFFを切り替えるには、0か1を代入するだけで大丈夫です。

__delay_ms() は指定した時間何もせずに待機します。ミリ秒単位で整数値で指定できます。最初の_は2個なので注意してください。

これをwhile(1) で無限ループさせます。無限ループから出ることはないので、元から書いてあったreturn; はなくて大丈夫です。

というわけで今回のソース全体はこのようになりました。

プログラムが出来たら書き込みの前にビルドをする必要があります。

ツールバーにあるビルドボタンを押します。

プログラムが正常であればOutputウィンドウに BUILD SUCCESSFUL と表示されます。

何らかのエラーがあれば、その位置とともに教えてくれます。

 

今回はプログラムをビルドして完成させるところまでやりました。次回はこのプログラムをPICに書き込んで、ついに目標のLチカです。https://rikeden.net/?p=342

-PIC解説

執筆者:


  1. いぬ千代 より:

    こんばんは
    PIC超入門!ゼロからLチカまでの道【その3:コンフィギュレーション~プログラミング】
    にあります、「LVP : OFF (定電圧プログラミング不使用)」
    ですが、低いほうの電圧で低電圧プログラミング のことでしょうか?

    それと、先程コメントしました件ですが、
    書いてあるのをよく読んで進めますと、無事にノーエラーと成りました。
    ただ、MCLRの設定をせず、すべてのポートは出力にしました。
    後は、書き込みデータはどの様に出て来ますのでしょうか?
    書き込みツールはPICerFTと云うHEXを投入する方式です。
    https://tinyurl.com/nlq7a3x

    ありがとうございました

    • きっちー より:

      ご指摘ありがとうございます。記事を修正しました。

      問題も自力で解決できたようでよかったです。

  2. いぬ千代 より:

    プロジェクトを右クリックしてHEXファイルを無事出力できました。
    ありがとうございます

comment

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

CAPTCHA


関連記事

PIC超入門!ゼロからLチカまでの道【その4:プログラム書き込み~Lチカ】

前回プログラムが完成したので、あとはプログラムを書き込んで、回路を組み立ててついにLチカです! あともう少しでゴールなので頑張りましょう。 前回の記事はこちらhttps://rikeden.net/? …

【PIC】SPI通信のやり方

多くのPICに搭載されているMSSPモジュールを使うとI2CとSPIの2つのシリアル通信を行うことができます。 今回はSPI通信のやり方(マスター)を紹介します。I2Cについてはこちらを参照してくださ …

【PIC】ADCの使い方 サーミスタで温度測定

今回はADC (Analog to Digital Converter) の使い方を解説します。PICのIOピンは通常デジタルの入出力しか出来ませんが、ADCを使用することでアナログ入力(電圧測定)を …

PIC超入門!ゼロからLチカまでの道【その1:部品購入~IDE導入】

電子工作を始めてみたいけど、何から手を付けていいか分からない…。そんな方のためのゼロからLEDを点滅させる(通称Lチカ)ところまでの超入門講座です。 目次1 PICとは2 必要なもの2.1 1.必須の …

PICでカラーLCDモジュールを動かしてみた話【ST7789】

今回は以前にAmazonで購入したまま積んでいた フルカラーグラフィックLCDをPICで制御してみました。 激ムズというわけではありませんでしたが、いくつかつまずいたポイントがあったので備忘録がてら記 …