オリジナルのフィギュアをオーダーメイドで製作いたします。 あなたの描いたイラスト & 写真などから立体化しています。
New Skill

LED発光までの備忘録

フィギュア製作で、クリアパーツを使用することは、最近は、普通になってきましたが、更にクリアパーツの使いみちを増やすために、LEDによる発光ができれば楽しいかなと思ったので、PICプログラムに挑戦してみました。

PICを使わない場合のいわゆるLEDと抵抗と電源のみを使用するシンプルな構造はわかるんですが、PICとなると、今まで触ったことが無かったので、正直、どうしたもんかと思いました。 ただ、このまま使えないというのも製作できるフィギュアの範囲を狭めているようで、悔しいので、挑戦してみました。絶対、習得したいと思います。( ー`дー´)キリッ

以下、できる方が見れば、どーってことない内容だと思いますが、初心者にとって、特に自分にとっては、大きな一歩でしたので、備忘録として書いておきます。

2016/01 まとめ作成。

1. 開発環境(ソフトとハード)を手に入れる。

Microchip社Webサイトの「開発ツール」のページよりダウンロードします。

PICへの書き込み用にライタとアダプタを購入します。今回、購入したのは以下のものです。

  • PICライタ : PICkit3
  • PICkit3用の書き込みアダプタ基板 : 「MPIC-DPPA」

2.インストールした手順。
  1. MPLAB X IDEをインストールする。
  2. 今回、インストールしたバージョンは、v2.26です。
    以前、v3.10をインストールした時にエラーが出たので、安全を考えて少し古いバージョンを入れました。

  3. XC8コンパイラをインストールする。
  4. インストールバージョンは、v1.33です。

  5. プログラムを書く。
  6. 開発環境

    今回、書いたプログラムはこちら。

  7. コンパイル
  8. コンパイルエラー解決その1.
    コンパイル時に、__delay_ms関数の部分で警告が出る場合は、XC8をインストールしたフォルダの「include」フォルダ内のpic.hの149行目あたりの「__PICCPRO__」を「__PICC__」に変更する。

  9. PICに書き込む。
  10. 書き込みエラー解決その1.
    「Target device was not found. You must connect to a target device to use PICkit 3.」というメッセージが出る場合は、PICkitからパワーをもらうと解決します。 ProjectのPropertiesメニューを選択して、そこからConfのPICkit3を選択します。次に、Option categoriesでPowerを選んで、Power target circuit from PICkit3にチェックを入れます。 これで、PICkit3からパワーをもらえます。

    書き込みエラー解決その2.
    PICへの書き込み時に、PICを認識しない場合は、IDEと一緒にインストールしたMPLAB IPEやMPLAB driver switcherを起動後、もう一度、X IDEでコンパイル後に書き込みをしたら、スムーズに書き込めました。

  11. ブレッドボードで確認。
  12. 画像では、消えてますが、実際は、プログラム通りLEDが点滅しています。よかった(^^)。

    ブレッドボードで確認

多少、エラーなどは出ましたが、手順としては思ったよりも簡単でした。

PICへの書き込む方法がハードルを高くしている部分だと思うので、この書き込み作業の方法が解れば、あとはプログラムでいろんな点滅方法などができるようになるので、楽しくなりそうです。


3.サンプルコード

サンプルはネットでもいろいろありますが、自分なりに理解したものを自分の保存用として、下に書いておきます。


/* 
 * File:   main.c
 * Author: katsuno
 */

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

// PIC12F683コンフィグレーションビット設定
#pragma config FOSC = INTOSCIO  // Oscillator Selection bits
#pragma config WDTE = OFF       // Watchdog Timer Enable bit
#pragma config PWRTE = ON       // Power-up Timer Enable bit
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit
#pragma config CP = OFF         // Code Protection bit
#pragma config CPD = OFF        // Data Code Protection bit
#pragma config BOREN = ON       // Brown Out Detect
#pragma config IESO = OFF       // Internal External Switchover bit
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit


// クロック周波数指定
// (__delay_ms()関数が必要としているため)
#define _XTAL_FREQ  1000000

int main(int argc, char** argv) {

 // PICマイコン初期化
    OSCCON = 0x40;  //クロック周波数を1MHzに設定
    ANSEL  = 0x00;  //すべてのピンをデジタルモードに設定
    TRISIO = 0x00;  //すべてのピンを出力に設定
    CMCON0 = 0x07;
    
    while(1)
    {
        GP2 = 1;
        __delay_ms(500);
        GP2 = 0;
        __delay_ms(500);

    }

    // ここには到達しない
    return (EXIT_SUCCESS);
}

なかなかPICをお仕事で使う場面は出ないと思いますが、個人的な作品で使うかもしれないので、プログラムを思い通りに書けるようにがんばります。

PICマイコンについてはマルツオンラインに入門編ページがあります。すごく参考になりました。
もちろん、PICやLEDなど、いろいろ買えますので、挑戦してみようという方はどうぞです。