PICマイコンを使う

高見 豊のFacebookページ
この記事が気に入ったら
フォローしよう
最新情報をお届けします。
PICマイコンの写真 電子工作
PICマイコンの例

 PICマイコンは、アメリカMicrochip Technology社が開発した、安価なマイクロコンピューターです。半面、性能が低く、Atmel社の開発したAVRマイコンと人気を二分しています。国産では、ルネサスエレクトロニクスのH8マイコンの流れをくむマイコンや、元々NECが開発したμPDマイコンの流れをくむ78Kシリーズなどが良く使われます。

PICマイコンの応用例

PICマイコンの応用例1
PICマイコンの応用例2

PICマイコン書き込み器

 PICマイコンに作ったプログラムを書き込むには、書き込み器が必要です。書き込み器には、Microchip Technology社が販売しているPICkitが便利ですが、世代の違いで、どんどん高価になってしまいました。

生産が終了したPICkit2とPICkit3
秋月電子が以前販売していたAKI-PICライター
秋月電子通商AKI-PICライターキットとケーブルとACアダプターと書き込み用ソケット
マイクロチップ MPLAB SNAP: 開発ツール・ボード 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作マイクロチップ MPLAB SNAP秋月電子通商 電子部品通信販売
MPLAB SNAP DEBUGGER PG164100 Microchip製|電子部品・半導体通販のマルツ
【PG164100】 MPLAB SNAP DEBUGGER 2,010.59円 提携先在庫数:970個 納期:5営業日程度 Microchip製|16:00までのご注文を翌日お届け、3,000円以上購入で送料無料。【仕様】・パッケージ:箱...

PICマイコン開発用ソフトウェア

 PICマイコンのソフトウェアを開発するためには、IDEと呼ばれる統合開発環境MPLAB® X Integrated Development Environment (IDE)または、SDKと呼ばれるソフトウェア開発キットが必要になります。

 Microchip社のMPLAB® X IDEは、マイコン開発元のマイクロチップ社が出しているだけあって、32ビットマイコンのPIC32シリーズなど、すべてのマイクロチップ社のマイコンに対応していますが、少し使いにくいです。

 MikroE社で、Mikro BASICやMikro Cなどの使いやすいコンパイラーを販売していますが、国内代理店での販売はないようです。

使いやすいMikro BASIC PRO for PIC

mikroBasic PRO for PIC | Mikroe
Basic compiler for Microchip PIC MCUs. IDE, Debugger, 500+ library functions, Smart optimizations, Tools, Examples, Free...

Mikro BASICの使い方を知りたい方は古い書籍ですがこちらをどうぞ

Amazon.co.jpで「携帯電話でリモート操作ができる電子工作」を購入する

使いやすいMikro C PRO for PIC

mikroC PRO for PIC | Mikroe
mikroC offers a unique mechanism to easily use libraries in your project, just select the libraries you need and they wi...

Mikro C PRO for PICで書かれたプログラム例

unsigned short seg[6];
unsigned short prev,v;
unsigned dist;

unsigned short mask(unsigned short num) {
      switch (num) {
        case 0 : return 0xc0;
        case 1 : return 0xf9;
        case 2 : return 0xa4;
        case 3 : return 0xb0;
        case 4 : return 0x99;
        case 5 : return 0x92;
        case 6 : return 0x82;
        case 7 : return 0xf8;
        case 8 : return 0x80;
        case 9 : return 0x90;
        case 10 : return 0xff;  // all clear
        case 11 : return 0x86;  // E
        case 12 : return 0xAF;  // r
  }
}

void interrupt() {
    if(INTCON.TMR0IF) {
        INTCON.TMR0IF = 0;    // Timer0 Interrupt flag clear

        if(PORTA.b7) {
          prev=1;
        } else {
          if(prev==1) {
            if(PORTA.b6==0) {
              if(dist<200000) {
                dist++;           //rightcountup
              }
            } else {              //not
              if(dist>0) {
                dist--;           //leftcountdown
              }
            }
            prev=0;
          }
        }

        PORTB = seg[v];
        switch(v) {         // for pic16f819 drive
            case 0: PORTA = 0x0e; break;
            case 1: PORTA = 0x0d; break;
            case 2: PORTA = 0x0b; break;
            case 3: PORTA = 0x07; break;
        }
        v++;
        if(v > 3u)
            v = 0;
    }
}

void data_convert() {
        unsigned short i;
        unsigned temp;
        temp=dist;        //count/pulse
        if(temp > 9999 || temp < 0) {
            seg[3] = mask(11);
            seg[2] = mask(12);
            seg[1] = mask(12);
            seg[0] = mask(0);
        } else {
            i = (temp / 1000u) % 10u;
            seg[3] = mask(i);
            i = (temp / 100u) % 10u;
            seg[2] = mask(i);
            i = (temp / 10u) % 10u;
            seg[1] = mask(i) & 0x7f;        //DPflush
            i = temp % 10u;
            seg[0] = mask(i);
        }
}

void countup() {
    dist+=15;
    if(dist>200000) dist=0;
    data_convert();
    Delay_ms(100);
}

unsigned int read_adc(unsigned short p)
{
    unsigned int dat;
    unsigned int i;

    dat = 0;
    for(i = 0; i < 10; i++) {   // 10 count avg.
        dat += 1234;
        Delay_ms(100);
    }
    return dat / i;
}

void main()
{
    unsigned int humd;
    unsigned short i;

    OSCCON = 0b01110000;        // 8MHz internal clock
    PORTA = 0b00001111;
    PORTB = 0b00000000;
    TRISA = 0b11110000;            // RA7-4
    TRISB = 0b00000000;            // RB all output.

    ADCON1 = 0x06;              //ADconvertor no use

    ADCON0 = 0b11100001;        // Fosc/32 AN6           //*
    ADCON1 = 0b10100000;        // ADFM Right and Vref+,AVss //*

    OPTION_REG = 0b10000011;    // portd pull-up,PSA set 100=1/16

    INTCON.TMR0IE = 1;            // Timer0 Interrupt Enable
    INTCON.GIE = 1;                // General Interrupt Enable

    i = 0;
    v = 0;
    prev = 1;

    dist = 0;
    data_convert();
    while(1) {
        //countup();
        if(PORTA.b4==0) {
          //dist=0;
          //data_convert();
        }
        data_convert();

    }
}

Microchip社のMPLAB® X IDE

Access Denied
マイコン開発環境とIoTはおまかせ マイクロエレクトロニカ
マイコンの開発環境や評価ボードを始め、マイコンの世界を拡張する手軽で使いやすい組込モジュール、無線通信モジュールを販売しています。IoT時代に便利な製品を取りそろえております。

使いやすいマイクロエレクトロニカ社のSDK

mikroSDK - Software Development Kit - MIKROE
mikroSDK makes application code portable, and reusable on many different platforms and architectures, with virtually no ...