PICでLチカするための環境を整える

やっとこさ PIC までたどり着いた…と思ったら、LPC という ARM のチップがあることを知ったので(mbed って ARM ですね、確かに)、小さくするのならば LPC でもいいかなと思い始めてはいるのですが…ともあれ、どちらもやったことがないので、まずは PIC から。

image

秋月電子で、PICkit3PIC18F14K50使用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 を選択すればよいでしょう。

image

そうすると、こんな風にいくつかのファイルを自動的に作ってくれます。使うところは main.c だけなんですが、

image

プログラミングする

Arduino とか Netduino のように、なんとなく勘で(苦笑)と思ったのですが、あえなく挫折しました。LED を光らせるにしてもポートの指定の仕方が分からないし、ポートの指定にしても PIC の種類によって違うらしく、目的のものを見つけないと難しい。

PIC18F14K80 の特徴 入門と応用
http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_00.htm

そんな訳で、PIC18F14K80 でひたすら検索して、ずばりそのものを引き当ててコードを丸写しして動かしました。こりゃ大変だわ、と思って先人の感謝です。どうやら USB 内蔵の高性能 PIC らしいんですが、そこまで使い込めるかどうか自信がありませんw。まあ、練習用なので。

以下のコードでLチカができています。たぶん、#pragma のあたりはいらないのでしょうが…と思ったけど無いと動きません。そのままコピペです。

/******************************************************************************/
/* 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チカまで。

image

この後、mbed を試したのですが、これはすんなりといきました。ああ、セッティングをしなくていいいってのは mbed の素晴らしところですね。

カテゴリー: PIC パーマリンク