電子工作を始めてみたいけど、何から手を付けていいか分からない…。そんな方のためのゼロからLEDを点滅させる(通称Lチカ)ところまでの超入門講座です。
PICとは
まず初めにPICについて軽く紹介したいと思います。PICはマイコンの一種でC言語(やアセンブラ)でプログラミングすることができます。マイコンといえばPICの他にはArduinoやRaspberry Piなどが有名です。
違いや特徴について、Raspberry PiはOSを搭載していて高度な処理をすることができます(使ったことないのでよく知りませんが)。ArduinoはできることはPICと同等ですが、コアとなるマイコンだけでなく、電源ポートや通信ポートなどの周辺機器がセットになったマイコンボードとして売られています。また、ライブラリも豊富で初心者にも手を出しやすいようです(使ったことないのでよく知りませんが)。PICの特徴は、ズバリそのシンプル性と安さにあります。マイコンというのはメモリの制約の中で開発しなければならないので、ライブラリの冗長なコードに頼るのではなく自分が必要なものだけを書いた方が良いことが多々あります。
そして何よりも安いです。プログラマーが初期投資として少々値が張りますが、PIC本体は百円ちょっとで買えるのでランニングコストはとても安いです。AruduinoやRaspberry Piはちゃんとしたものは数千円はしますから、安くて気軽に使えるのは大きなメリットです。
必要なもの
まずは電子工作を始めるにあたってLチカまでに必要となるものを紹介します。
1.必須のもの
どれも当たり前のものばかりです。マイコンやLEDなどの電子部品は秋月電子が安くて品ぞろえも豊富なのでお勧めです。ネット通販で購入できます。
今回はPIC16F1827、PICkit3、Windows 10のPCで開発していきます。Macでもできますが、私はWindowsしか持ち合わせていないので、そちらの説明はできません。PICの選び方についてはページ下部にオマケ情報として書いておきました。
ブレッドボードとはこのように電子部品を挿すことによって、はんだ付けすることなく回路を作ることのできる便利なものです。

LEDは好きな色のもので構いません。色によって電圧が違ったりするので、何色もあった方が面白いかもしれませんね。LEDを光らせるときに、抵抗を挟まずに直接電源に繋げてしまうと、ショートしてLEDが壊れてしまうので抵抗が必要となります。よく使う抵抗値としては、100Ω、1kΩ、10kΩ あたりがあれば困らないと思います。
電源に関しては、マイコンの種類にもよりますが、基本的に3.3V~ 5Vが必要となります。電池でも大丈夫ですが、先程の写真のようにUSBを電源とすると簡単に5Vが得られるのでお勧めです。
2.あるといいもの
- スイッチや可変抵抗、コンデンサ、センサーなどその他電子部品
- ユニバーサル基板
- はんだごて、ニッパー、ラジオペンチ
- テスター
今回はLチカまでの講座なので使いませんが、送料などの問題もあるのでその後使いたい電子部品も一緒に買っておいた方がよいでしょう。Lチカはブレッドボードでできれば十分ですが、もっと発展的なものを作るときには、ブレッドボードで試作した後ユニバーサル基板にはんだ付けして回路を作ることになると思います。それまでは、はんだごて等はなくても大丈夫です。(ブレッドボードで使うモジュールを組み立てるのには必要かも)
テスターは確実に1台持っておいた方がよいでしょう。電圧を測定したり、導通チェックしたりあると便利な場面が多くあります。
電子部品やはんだごてはAmazonでセットになっているものが安く売っているのでそういうものを買ってもいいと思います。若干信頼性には劣りますが、趣味で使用するには十分だと思います。
MPLAB X IDEの導入
PICのプログラミングをするときは、Microchip社が無料で提供しているIDEのMPLAB X IDEを使います。
今回は実際にWindows 10のPCに導入しながら説明をしていきたいと思います。
まずはこちらのページにアクセスして下の方にあるDownroadsからWindows用のインストーラーをダウンロードして実行します。

下の画面において、IPEは必要ないのでチェックを外していいです。また、8bitマイコンしか使う予定がない場合は、16bitや32bitのチェックを外して構いません。

インストールが終了するとき、一つ目のチェックだけ入れておくとすぐに次のステップに行けて便利です。

ここで紹介されているMCC(MPLAB Code Configurator)はコンフィギュレーションの設定等(その3で解説)をGUIを使って行えるプラグインです。私はコードの透明性を重視するために使用していませんが、便利なので通常のコンフィギュレーション設定ができるようになってから一度試してみるとよいと思います。
次にXC8コンパイラをインストールします。
インストール終了時に開いたページで先程と同様にDownroadsのWindows用のインストーラーをダウンロードして実行します。

こちらは特に設定せずにそのままインストールすれば大丈夫です。
これでIDEを使う準備が整いました。次回はIDEを使ってプログラミングを行います。https://rikeden.net/?p=338
おまけ:PICの選び方
秋月電子のサイトでPICを検索してみると分かりますが、PICはめちゃくちゃ種類が多いです。そのため、どれを選べばいいのか分からないと思います。最初に使うのは紹介したPIC16F1827でいいと思いますが、今後作品を作るときに状況に適したPICを選ぶ方法を軽く紹介します。
選ぶ際のポイントとなるのは以下のようなものがあります。
- IOピンの数
- 搭載しているモジュール
- PPS
- メモリ容量
- 値段
まずはIOピンの数です。PICには8ピン、14ピン、18ピン、28ピンというように色々な大きさのものが存在します。大は小を兼ねるとは言うものの、使わないピンが多くあってはリソースの無駄遣いですし、基板上のスペースも無駄遣いすることになりますから、必要十分の大きさのPICを選ぶとよいでしょう。
次にモジュールですが、PICにはタイマーやシリアル通信、ADC(Analog to Degital Converter)など様々なモジュールがあり、関連レジスタを制御することでハードウェアで様々な機能を果たしてくれます。 しかし、モジュールはPICの種類によって搭載している種類と数が異なるので、必要とするモジュールを搭載しているか確認しましょう。PPS(Periferal Pin Select)とは、モジュールの入出力ピンを自由に割り当てられる機能です。先程のモジュールの話に関連しますが、使いたいモジュールを搭載していても、複数の機能が一つのピンに割り当てられていて同時に使えないということがあります。PPS機能があれば好きな機能を好きなピンに割り当てられるので、そういった問題の解決に繋がるほか、配線の自由度が増すといったメリットもあります。あって損はない機能です。
続いてメモリ容量。プログラムサイズは書いてみないと分からないので適切な大きさを見極めるのは難しいですが、いくつも作品を作るうちに経験的にどれくらいあれば足りるか見当がつくようになるかな?もちろん大は小を兼ねるのですが、せっかくマイコンを使っているので、限られたメモリの中でプログラムの無駄をそぎ落として美しいコードを書く体験をしてみてもいいと思います。
最後に値段です。気を付けなくてはいけないのは、PICに関しては値段と性能が比例しないことです。古くて性能が低いPICが高く、新しくて高性能なPICの方が安いということはしばしばあります。8bitマイコンの中では、PIC16F1xxxという型番のシリーズがEnhanced Mid Rangeと呼ばれ、高機能低価格で使いやすいものになっているのでお勧めです。






こんにちは
下記の様に作ってみたんですが、
エラーばっかり出てHEXファイルが出来ません。
何処を直せばよいか、教えて頂けませんでしょうか?
チップは12F1612を使う予定です。
それではよろしくお願いします
// BL24_11_09-2.c
#pragma config FOSC = INTOSC // 内部オシレータ使用
#pragma config WDTE = OFF // ウォッチドッグタイマー無効
#pragma config PWRTE = ON // パワーアップタイマー有効
#pragma config MCLRE = ON // MCLRピン有効
#pragma config CP = OFF // コード保護無効
#pragma config BOREN = ON // ブラウンアウトリセット有効
#pragma config CLKOUTEN = OFF // クロック出力無効
#pragma config IESO = OFF // 内部/外部切替え無効
#pragma config FCMEN = OFF // フェイルセーフクロックモニター無効
#include
#include
#include
#define _XTAL_FREQ 8000000 // クロック8MHz
#define RightON1 1000 // 点灯1の時間(ミリ秒)
#define RightOFF1 1000 // 消灯1の時間(ミリ秒)
#define RightON2 1000 // 点灯2の時間(ミリ秒)
void main(void) {
// 内部オシレータを8MHzに設定
OSCCONbits.IRCF = 0b1110; // 8MHz
OSCCONbits.SCS = 0b00; // 内部オシレータ
// ポートの設定
TRISA = 0; // 全てのRAピンを出力に設定
ANSELA = 0; // 全てのRAピンをデジタルI/Oに設定
LATA = 0; // 全てのRAピンをLOWに初期化
LATA4 = 1; // RA4をHIGHに(LEDを点灯)
__delay_ms(RightON1);
LATA4 = 0; // RA4をLOWに(LED消灯)
__delay_ms(RightOFF1);
while(1) {
LATA4 = 1; // RA4をHIGHに(LEDを連続点灯)
__delay_ms(RightON2); // 最後の連続点灯でRightON2の時間ごとに繰り返して、ノイズなどで消灯しないようにします。
}
// return;
}