2012年8月31日金曜日

PIC32MX220F032B-01 LEDチカチカ(+入力)をする


秋月にてPIC32MX220F032Bが220円と大変安価かつDIPにて32bitマイコンが手に入るようになりました.
折角なので,PIC16FシリーズだけでなくPIC32MXも遊んでみようと試みようと
後閑さんの『高速・多機能を実現する pic32mx活用ガイドブック
を購入させていただきました.
大変良くまとまっています.PIC32MXをC32コンパイラで使うなら手元に置いておきたい.購入するべきです.
しかしながらPIC32MX340F256H用に書かれたものであり,PIC16Fシリーズで扱っていたCCS-Cなどと異なり,単純なコピー&ペーストを行っただけではコンパイルエラーになったり正しい動作が行われなかったりしまてしまいました.
ここではPIC32MX220F032B用に書き直して紹介していきたいと思います.

注意:私の提供する情報を元に何らかのトラブルが生じても責任を負いません.

<今回行うこと>
とりあえず,PIC32MX220F032BにてI/Oの基本機能を扱えるようにしたい.
つまりLEDチカチカだけでなく,INPUTも行います.
INPUTのHigh Lowの状態によって点滅周期が変わるようにします.
ここでは,RB5(14番ピン)を出力に,RB13(24番ピン)を入力とします.

<対象者>
既になにかしらのマイコンを弄った経験のある方であることを前提とします.

<用意するもの>
LEDチカチカするためには以下の部品等が必要になります.揃えましょう.

  • パソコン(「MPLAB X IDE v1.30」と「C32 Cコンパイラv2.02」の環境で行いました)
  • PIC32MX220F032B(言うまでもないけど)
  • PICkit3(PICkit2でも書き込む方法があるらしい)
  • ブレッドボード(EIC-102が好きなのですが,単品で買える店が少ない)
  • ジャンパ線( EIC-102J付属品で良いと思う)
  • 抵抗 1k Ω(LED用),10k Ω(プルアップ用) 各1こ
  • コンデンサ 10uF 最低1こ (0.1uでも動作したが,「なし」では動作しなかった)
  • LED 1こ
<資料>
最新版を探してきたつもりですが,検索かけ直して入手する方が良いと思います.

<配線>
とりあえず,データシートの4ページの下を見てみましょう.
図1 PIC32MX220F032Bのピン配置
私の愛用していたPIC16F88とは異なり,AVDDやらVCAPやらがあります.
どうすれば良いのかさっぱりですね.そこでデータシート27ページを開くと,
図2 推奨する最小接続部品構成
本当はこの程度抵抗なりコンデンサなり付けなければならないようですが,たかだかLEDをチカチカさせるだけなのにここまでしなくてはならないと思うとなんだか面倒です.
そこで,図3に示すような構成で試したところ,特に問題なく動作しました.

図3 LEDチカチカにおけるPIC32MX220F032Bの最小構成
※左右端にある+ラインと-ラインはそれぞれ互いに接続されているものとしています. 
しかし,いくつかの部品を省いていますので場合によっては誤動作する可能性があります.
半透明で黄緑色に塗りつぶしている箇所にPICkit3の信号線を差し込みます.
ブレッドボードのピンアサインとPICkit3のピンアサインは一致しませんので気をつけてください.
私は専用のコネクタを自作し,図4に示すように接続して利用しています.

図4 PICとPICkit3との接続
<プログラム>
以下からソースコードをダウンロードできます.(リンク先にてCtrl+SでZIP保存)
https://docs.google.com/open?id=0B25yKH5pEApFdE9mdFg3dzUyN0U



/*********************************************************************
 *
 *      LEDチカチカ     by Taku MIURA
 *
 *********************************************************************
 * FileName:        main.c
 * Dependencies:    plib.h
 *
 * Processor:       PIC32MX
 *
 * Complier:        MPLAB C32
 *                  MPLAB X IDE v1.30
 * Company:         Microchip Technology Inc.
 ********************************************************************/

//      pin_1       <<MCLR>>
// pin_2       PGED3
// pin_3       PGEC3
// pin_4       RB0
// pin_5       RB1
// pin_6       RB2
// pin_7       RB3
// pin_8       <<Vss>>
// pin_9       RA2
// pin_10      RA3
// pin_11      RB4
// pin_12      RA4
// pin_13      <<Vdd>>
// pin_14      RB5
// pin_15      <<Vbus>>
// pin_16      RB7
// pin_17      RB8
// pin_18      RB9
// pin_19      <<Vss>>
// pin_20      <<Vcap>>
// pin_21      RB10
// pin_22      RB11
// pin_23      <<VUSB3V3>>
// pin_24      RB13
// pin_25      RB14
// pin_26      RB15
// pin_27      <<AVss>>
// pin_28      <<AVdd>>



#include <plib.h>
#include <stdlib.h>

// SYSCLK = 40 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK  = 40 MHz
#define SYSCLK  40000000L                      //システムクロック
#define SYSCLKdiv10MHz    (SYSCLK/10000000)    //ディレイ関数用


// Configuration Bit settings
// DEVCFG3:
#pragma config IOL1WAY  = OFF           // Peripheral Pin Select Configuration
// DEVCFG2:
#pragma config FPLLODIV = DIV_2         // PLL Output Divider
#pragma config UPLLEN   = OFF           // USB PLL Enabled
#pragma config UPLLIDIV = DIV_2         // USB PLL Input Divider
#pragma config FPLLMUL  = MUL_20        // PLL Multiplier
#pragma config FPLLIDIV = DIV_2         // PLL Input Divider
// DEVCFG1:
#pragma config FWDTEN   = OFF           // Watchdog Timer
#pragma config WDTPS    = PS1           // Watchdog Timer Postscale
#pragma config FCKSM    = CSDCMD        // Clock Switching & Fail Safe Clock Monitor
#pragma config FPBDIV   = DIV_1         // Peripheral Clock divisor
#pragma config OSCIOFNC = OFF           // CLKO Enable
#pragma config POSCMOD  = OFF           // Primary Oscillator
#pragma config IESO     = OFF           // Internal/External Switch-over
#pragma config FSOSCEN  = OFF           // Secondary Oscillator Enable (KLO was off)
#pragma config FNOSC    = FRCPLL        // Oscillator Selection
// DEVCFG0:
#pragma config CP       = OFF           // Code Protect
#pragma config BWP      = ON            // Boot Flash Write Protect
#pragma config PWP      = OFF           // Program Flash Write Protect
#pragma config ICESEL   = ICS_PGx3      // ICE/ICD Comm Channel Select
#pragma config JTAGEN   = OFF           // JTAG Enable
#pragma config DEBUG    = OFF           // Background Debugger Enable




void delay_us(unsigned int usec);
void delay_ms(unsigned int msec);

int main(void)
{

    //System Setting
    SYSTEMConfigPerformance(SYSCLK); //システム最適設定
    mJTAGPortEnable(DEBUG_JTAGPORT_OFF); //PORTA is used I/O, JTAG port must be disabled.

    mPORTAClearBits( BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0 );
    mPORTASetPinsDigitalOut( BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0 );
    ConfigCNBPullups(CNB13_PULLUP_ENABLE);//RB13をプルアップ
    mPORTBClearBits( BIT_5 );           //RB5をLowに
    mPORTBSetPinsDigitalIn( BIT_13 );   //RB13を入力
    mPORTBSetPinsDigitalOut( BIT_5 );   //RB5を出力

    mPORTBSetBits( BIT_5 );             //RB5をHighに
    delay_ms(2000);                     //2秒待機
    mPORTBClearBits( BIT_5 );           //RB5をLowに
    delay_ms(2000);                     //2秒待機

    while(1)
    {
        mPORTBToggleBits( BIT_5 );     //RB5の出力状態を反転

        if(mPORTBReadBits( BIT_13 ))    //RB13の入力状態がhighなら1
            delay_ms(500);              //0.5秒待機
        else
            delay_ms(250);              //0.25秒待機
    }
}


/**********************************
*  ディレイ関数 usec
**********************************/
void delay_us(unsigned int usec){
 unsigned int i, delay;

 delay = usec * SYSCLKdiv10MHz;
 for(i=0; i<delay; i++){}
}
/**********************************
*  ディレイ関数 msec
**********************************/
void delay_ms(unsigned int msec){
 unsigned int i;

 for(i=0; i<msec; i++)
  delay_us(1000);
}




MPLABにて,(メニュー),OpenProjectで解凍したファルダを選択し,
図5のようにPICkit3を接続した状態でこのプロジェクトに対して右クリック,Runを選択.
図5 MPLABにおけるRunの実行方法

これでコンパイルから書き込みまで行なってくれます.
ちなみに「Set as Main Project」を選択すると,キーボードのF6を押すだけでRunを実行します.
LEDが1秒周期で点滅し,RB13をジャンパ線でGNDに短絡させると0.5秒周期で点滅するはずです.

不明な点,ミスやご指摘等がありましたらコメント等で連絡ください.


ブログランキング・にほんブログ村へ

0 件のコメント:

コメントを投稿