やっとこさ PIC までたどり着いた…と思ったら、LPC という ARM のチップがあることを知ったので(mbed って ARM ですね、確かに)、小さくするのならば LPC でもいいかなと思い始めてはいるのですが…ともあれ、どちらもやったことがないので、まずは PIC から。
秋月電子で、PICkit3 と PIC18F14K50使用USB対応超小型マイコンボード を一緒に買いました。PIC のチップだけを買えば、100円もしないのですが、書き込み方がよくわからないのと、USB 書き込み(たぶんシリアル経由ですよね)と ICSP直結(こっちが PICKit3 で書き込む方)自体がよくわからなかったので、まあひとまず、初期投資ということで。それでも RPi を買うよりも随分安いわけですが。
開発環境をインストールする
MPLAB®X IDE | Microchip Technology Inc.
http://www.microchip.com/pagehandler/en-us/family/mplabx/home.html
上記から MPLAB X IDE をダウンロードします。現時点で、v3 のベータ版が出ているのですが、Available Downloads のほうの v2.35 を入れました。
これをインストールすると、コンパイラが自動でダウンロードして…となるハズなのですが、なんか、どうやってもコンパイラは自動ではインストールされていないみたいなので(アセンブラのほうは入った模様なんですが)、自前でダウンロードしてインストールします。これをやらないと、ビルドするときに「対応するコンパイラーがない」というエラーがでます。
| Microchip Technology Inc.
http://www.microchip.com/pagehandler/en-us/devtools/mplabxc/home.html
この中の MPLABR XC8 Compiler v1.34 をダウンロードすれば ok です。Free 版は最適化が弱いのですが、どうせ実験なのでこれで十分です。ビルドサイズに制限があるのかどうかは分かりません。32kb の制限がありそうな気がします。いくつかのブログでは HI-TECH PICC Lite の手順が書いてあったりしますが、Hi-TECH という会社が、Microchip社に買収されて、名前が、XC8 みたいになったようです。MPLAB X IDE の対象のコンパイラに Hi-TECH の名前が残っていますが、それは無視していいようです。
プロジェクトを作る
Visual Studio のようにいくつかのテンプレートが用意されています。PIC18F14K50 の場合は、Samples > Microchip Embedded > PIC18 C Template を選択すればよいでしょう。
そうすると、こんな風にいくつかのファイルを自動的に作ってくれます。使うところは main.c だけなんですが、
プログラミングする
Arduino とか Netduino のように、なんとなく勘で(苦笑)と思ったのですが、あえなく挫折しました。LED を光らせるにしてもポートの指定の仕方が分からないし、ポートの指定にしても PIC の種類によって違うらしく、目的のものを見つけないと難しい。
PIC18F14K80 の特徴 入門と応用
http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_00.htm
そんな訳で、PIC18F14K80 でひたすら検索して、ずばりそのものを引き当ててコードを丸写しして動かしました。こりゃ大変だわ、と思って先人の感謝です。どうやら USB 内蔵の高性能 PIC らしいんですが、そこまで使い込めるかどうか自信がありませんw。まあ、練習用なので。
以下のコードでLチカができています。たぶん、#pragma のあたりはいらないのでしょうが…と思ったけど無いと動きません。そのままコピペです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /******************************************************************************/ /* Files to Include */ /******************************************************************************/ #if defined(__XC) #include <xc.h> /* XC8 General Include File */ #elif defined(HI_TECH_C) #include <htc.h> /* HiTech General Include File */ #elif defined(__18CXX) #include <p18cxxx.h> /* C18 General Include File */ #endif #if defined(__XC) || defined(HI_TECH_C) #include <stdint.h> /* For uint8_t definition */ #include <stdbool.h> /* For true/false definition */ #endif #include "system.h" /* System funct/params, like osc/peripheral config */ #include "user.h" /* User funct/params, such as InitApp */ /******************************************************************************/ /* User Global Variable Declaration */ /******************************************************************************/ /* i.e. uint8_t <variable_name>; */ #define LED LATCbits.LATC0 #pragma config FOSC = IRC #pragma config USBDIV = OFF, CPUDIV = NOCLKDIV #pragma config IESO = OFF, FCMEN = OFF, PLLEN = ON #pragma config BORV = 30, BOREN = OFF, PWRTEN = OFF #pragma config WDTPS = 32768, WDTEN = OFF #pragma config MCLRE = OFF, HFOFST = OFF, XINST = OFF #pragma config BBSIZ = OFF, LVP = OFF, STVREN = ON #pragma config CP1 = OFF, CP0 = OFF, CPD = OFF, CPB = OFF #pragma config WRT1 = OFF, WRT0 = OFF, WRTB = OFF, WRTC = OFF #pragma config EBTR1 = OFF, EBTR0 = OFF, EBTRB = OFF #define _XTAL_FREQ 12000000 /******************************************************************************/ /* Main Program */ /******************************************************************************/ void main( void ) { /* Configure the oscillator for the device */ ConfigureOscillator(); /* Initialize I/O and Peripherals for application */ InitApp(); /* TODO <INSERT USER APPLICATION CODE HERE> */ OSCCON = 0x40; // 4MHz TRISC = 0x00; // Degital mode while (1) { Delay1KTCYx(500); LED = 1; Delay1KTCYx(500); LED = 0; } } |
トラブルシューティング
最初はなかなか動かなくて苦労しました。で、もう一度動かそうと思って苦労してたりするので、ハマりどころが多いのかもしれません。
コンパイルができない
最初に嵌った穴で、MPLAB X IDE をインストールしただけではダメです。コンパイラ MPLABR XC8 Compiler v1.34 も手動でダウンロードしてインストールします。たぶん、以前から使っている場合は、HI-TECH PICC Lite が入っているので大丈夫っぽいのですが、新規にインストールするときはコンパイラを忘れずに
PICKit3 から書き込めない
Connect できないパターンは、私の場合は3つの落とし穴でした。
- PICkit3 は USB 2.0 に差すこと(USB 3.0のコネクタでは動かない)
- PICkit3 の電源のため、USB ハブではなくて、PC の元に差すこと(これはマニュアルにも書いてありました。電力が結構必要なようです)
- PIC 自身に電源供給をしないと駄目。PICkit3 から PIC のチップへ給電するモードもあるのですが、安定せずに何回か失敗します。
PIC への書き込みも、種類によって 3V から 9V まで必要な電圧が違うそうなので、USB の 5V だけでは足りない場合もあります。そのときは、外部電源として電池を使うのがいいんでしょう。
何かを壊して、書き込めないときがある
よくわからないのですが、The programmer could not be started: Could not acquire hardware tool communications resources: PICkit3PlatformTool SN# のようになって、何度やっても書き込めないときがあります。どうやら、ブートローダーか何かを壊したらしく、そのままでは書き込みができません。同じようなプロジェクトを作って、焼き込みをすると直るという不思議な現象なのですが、そういうものみたいです。ドライバーを再書き込みすればいいみたいです。
そんな訳でやっとこさ Lチカまで。
この後、mbed を試したのですが、これはすんなりといきました。ああ、セッティングをしなくていいいってのは mbed の素晴らしところですね。