電子工作を始めてみたいけど、何から手を付けていいか分からない…。そんな方のためのゼロから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 を使ってプログラミングを行います。
おまけ: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;
}