PIC(8)-開発ボード

今回は、開発ボードについて調べてみました。

なぜ、開発ボードを調べたかといいますと、基板が出来上がる間、動作させるものがないと、PICに組み込むプログラムを作成する効率が良くないからです。

やはり、実物があった方が作りやすいですよね!

また、1つの種類のPICだけでなく、他の種類のPICに置き換えて動作テストもできるの便利です!

各種レジスタへ入出力できるピンも用意されているものもあります。

※開発ボードにも、もちろんpickit3やICD3のような書き込みツールも必要なので、用意しておいて下さい。


Microchip pickit3単体 【PG164130】
価格 6474 円
「PICkit 3」で、PIC(R)、及びdsPIC(R) フラッシュマイクロコントローラのデバッグとプログラミングができます。従来デモボードとのセット品(DV164131)からデモボードを省いた本体だけの製品です.ICSP方式でターゲットPICにプログラミングを行います.またMPLAB統合開発環境(IDE)のGUI(グラフィカルユーザインタフェース)を利用します。PICkit2と比較して,データ速度が高速化されていますので,全体的に作業スピードが向上しています.また,最新のPICデバイスをサポートしていますのでサードパーティー製のライターに比べ新デバイスへの評価がスムーズに行なえます.・・・
詳細はこちら


Microchip インサーキットデバッガ 【MPLAB ICD3】
価格 28066 円
ハイスピードUSB対応のICDシリーズの最新作です。ICD 2 と比べ、より高速でより快適な開発を行う事が可能になります。特に、高速になったことで使いやすくなったリアルタイムデバッグ機能等、新しい魅力も満載です。内容物・MPLAB ICD 3 In-Circuit Debugger・Diagnostic Test Interface Module・USB 2.0 to PC interface Cable・RJ-11 Cable from MPLAB ICD 3 to Target・MPLAB IDE CD with Full Documentation and User's Guide・MPLAB ICD 3 Poster・MPLAB ICD 3 Design Advisory・Notep・・・
詳細はこちら


Microchip EXPLORER16 DEVELOPMENT BOARD 【DM240001】
価格 23522 円
■商品紹介dsPIC33FとPIC24コントローラーの評価ボード。理想的なプロトタイプ作成ツールで、スピーディーな開発をサポート。ICD2と組み合わせれば、リアルタイムなエミュレーションとデバッグ環境が同時に実現。■特長 ・100ピンPIC24と100ピンdsPIC33F汎用プラグインモジュールに対応(PIM) ・TC1047A高精度、アナログ出力温度センサー搭載 ・16桁×2行 LCDディスプレイ ・ボード拡張をサポートするPICtail-PLUSコネクター ・全ピンアウトとブレッドボードエリアにアクセスできる拡張コネクタ・・・
詳細はこちら


Microchip PICDEM HPC EXPLORER BOARD 【DM183022】
価格 11856 円
DM183022は、8ビットPIC18F8722を搭載した、非常にコストパフォーマンスに優れた製品です。ICD2と接続して快適な開発環境を提供します。【ボード仕様】 ・PIC18F8722、128k Flash、80-pin TQFP microcontroller 搭載 ・PIC18 J-series devices with Plug-in Modules をサポート ・10MHz crystal oscillator 搭載 ・10-bit A/D、アナログ入力用調整ボリューム搭載 ・温度センサ(TC74)搭載 ・8LED搭載 ・RS-232通信機能搭載(UART1) ・32kHz crystal を利用したリアルタイムクロック・・・
詳細はこちら


EK JAPAN ピカ・タワー 【AW-864】
価格 2886 円
LED(発光ダイオード)を使用した3Dイルミネーションキットです。LEDは赤・緑・青・黄の4色、全部で27個使用。円柱状に配置したLEDを光らせ、オブジェとして机の上などに飾ることができます。マイコンはMicrochip社のPIC16F1827を使用。マイコンのプログラムを書き換える(※1)ことで、自分だけのオリジナル点灯パターンの作成なども可能です。LED部は分離可能で、マイコンボードの「Arduino UNO」にそのまま取り付けることができ、点灯パターンをプログラムすることも可能(※2)です。プログラミングの方法を解説したマニュアルは、弊社サイトから無償でダウンロードをすることができます。※1 マイコンのプログラミングには、Microchip社のMPLAB XやXC8コンパイラ、PICk・・・
詳細はこちら

PIC(7)-パルス発生器

今回のテーマは、パルスになります。

パルスとは、とても短い時間の電流や電波、信号の事をいいます。

PIC(4)-タイマー0割り込み機能で、LEDの点滅を行いましたが、今回は、外部からのパルスを用いてLEDを点滅させてみようと思います。
まずは、パルスを出力するところから取り組んでいきます。

そこで、パルス発生器(シグナルジェネレータ又はファンクションジェネレータ)を用意しました。

今回使用したパルス発生器は、サインスマートのパルス発生器です。

サインスマート 信号発生器 DDS-140用 PWM 20MHZ

こちらは、PIC(5)-オシロスコープで紹介したサインスマートDDS-140(オシロスコープ)に接続して使用します。

サインスマート DDS-140 40Mバンド幅 最大サンプルレート200MS/s オシロスコープ

DDS-140(オシロスコープ)と信号発生器、ロジックアナライザーのセットでも販売されています。

サインスマート 手持型 USBオシロスコープ DDS-140 バンド幅40MHz 200M/S 信号発生器 ロジックアナライザ

パルス発生器からの1KHz、Duty50%のパルスをオシロスコープで観測してみた結果が下記の画像になります。

signal_generator_001

1周期1msecで信号が出力されている事が、わかります。

PIC(6)-UARTとRS232C通信

本日は、PICを使用した通信機能です。

PIC側はUARTという通信を使用します。
UARTは、Universal Asynchronous Receiver Transmittionの略で、いわゆる汎用のシリアル通信の機能をもった周辺回路モジュールです。
名前の通り、全二重の非同期式通信であり、調歩同期式通信とも呼ばれます。

PC側(外部機器側)はRS232C通信を使用します。
ちなみに、RS232Cは、OSI参照モデルの物理層に位置づけされます。
ネットワークの物理的な接続・伝送方式を定めたものです。

ここで気になるのは、PIC側とPC側で通信方式が違うということです。
ということは、中間に変換するデバイスが必要となります。
中間デバイスとしては、MAX232やFT232などがあります。
今回使用するボードには、FT232が使用されていました。

下記のコードは、RS232C通信規格で、UARTを使用した通信機能のコードになります。
クライアント側から文字列を送信すると、PIC側から同じ文字列を返信する機能になります。


#include <xc.h>

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

// CONFIG1L
#pragma config WDT = ON
#pragma config STVR = ON
#pragma config XINST = OFF

// CONFIG1H
#pragma config CP0 = ON

// CONFIG2L
#pragma config FOSC = HS
#pragma config FOSC2 = ON
#pragma config FCMEN = ON
#pragma config IESO = ON 

// CONFIG2H
#pragma config WDTPS = 32768

// CONFIG3L
#pragma config EASHFT = ON
#pragma config MODE = MM
#pragma config BW = 16
#pragma config WAIT = OFF

// CONFIG3H
#pragma config CCP2MX = ON
#pragma config ECCPMX = ON
#pragma config ETHLED = ON

#define _XTAL_FREQ 25000000

char buffer[40];

//受信割込み処理
static void interrupt isr( void )
{
    static int i;
    static int j;
    static char data;
    
    // 割込みはUSART通信の受信可能であるか
     if (RC1IF == 1) {
         
         data = RCREG;
         if(data == 0x0a || data == 0x0d){
             if(i >= 1){
                 buffer[i] = data;
                 for(j = 0; j <= i; j++){
                    if (TX1IF == 1)
                    {
                        TXREG = buffer[j];
                        while(TX1IF == 0){ }
                        __delay_ms(10) ;
                    }
                 }
             }
             i = 0;
         }else{
             buffer[i] = data;
             i++;
             if(i == 40){
                 i = 0;
             }
         }
     }
}

//main処理
void main(void) {

    //ポート設定
    TRISC7 = 1;
    TRISC6 = 1;

    T0CS = 0;
    
    // 通信設定
    BRGH1 = 1;
    TXEN1 = 1;
    SYNC1 = 0;

    CREN1 = 1;
    SPEN1 = 1;

    BRG161 = 0;
    ABDEN1 = 0;
    
    SPBRG1  = 162 ;
    
    // 割り込み設定
    RC1IP = 1;

    RC1IE = 1;
    IPEN = 1;
    GIE = 1;
  
    //メインループ
    while(1){ }
}

それでは、プログラムのソースコードについて解説していきます。

関数は2つになります。
main関数と、受信割り込み関数です。

mainのモジュールで、ポートの設定、通信の設定、割り込みの設定をして、後は、while文でループしています。
while文でループしている間に、PC側から文字列が送信してくると、受信割り込みが発生して、割り込み関数へ処理が移行します。

割り込み関数では、送信されてきた文字の処理を行っています。
改行コードか復帰コード以外の文字列が送信されてくると、配列の中に文字列を保存します。
改行コードか復帰コードが送られてくると、配列に保存されている文字列をPC側に送信します。
ただし、40文字PC側から文字列が送信されると、配列に保存されている文字列はクリアされてしまいます。

今回、PC側にTeraTermというフリーソフトウェアを使用して、文字列を送信、受信して、動作を確認しました。

PIC(5)-オシロスコープ

前回、タイマー0割り込みを活用したLED点灯、消灯の繰り返しが、50ms毎に行われているかオシロスコープにて確認したいと思います。

使用したオシロスコープは、サインスマートのDDS-140になります。

サインスマート DDS-140 40Mバンド幅 最大サンプルレート200MS/s オシロスコープ

これは、PCにUSBで接続して、オシロスコープの画面はPCに表示させるものです。

下記の画面が、LED点灯と消灯の繰り返し周期を測定した結果になります。

pic_oscilloscope_001

縦軸が電圧、横軸が時間になります。

縦軸は1メモリ0.5Vに設定、横軸は1メモリ50msecに設定してあります。

50msecの間隔で電圧が0.5Vと0.0Vを繰り返しており、LEDの点灯、消灯が50msecの間隔で繰り返している事がわかります。

PIC(4)-タイマー0割り込み機能

本日は、PICを使用したタイマー割り込み機能です。

タイマー0割り込み機能は、一定周期で処理をしたい場合などに使用します。

下記のコードは、タイマー機能を使用して、50ms毎にLEDランプが点灯、消灯を繰り返す機能になります。


#include <xc.h>

// CONFIG
#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config CP = OFF

//タイマー0割り込み
void interrupt isr(void)
{
    TMR0 = 0x3D;    //タイマー0初期値
    RB0 = RB0 ^ 1;  //電圧レベル反転
    T0IF = 0;       // タイマ0割込みフラグをクリア
}

//メイン
void main(void) {
    
    PORTA = 0xFF;
    PORTB = 0xFF;

    TRISA = 0xFF;
    TRISB = 0x00;

    T0CS = 0;       // クロック源を内部クロックに設定
    OSCF = 1;       //0:48kHz 1:4MHz

    PSA = 0;        // プリスケーラをタイマ0に割り当て
    PS2 = 1;        // プリスケーラ値を256に設定
    PS1 = 1;
    PS0 = 1;

    TMR0 = 0x3D;    //タイマー0初期値
    T0IF = 0;       // タイマ0割込みフラグをクリア
    T0IE = 1;       // タイマ0割込みの許可
    GIE = 1;        //全体的に割り込みの許可

    //メインループ
    while(1){}
}

それでは、プログラムのソースコードについて解説していきます。

今回は、メイン関数の他に、タイマー0割り込み関数が用意されています。

タイマーのカウントがオーバーフローした際に、タイマー0割り込み関数にとびます。

では、タイマーのカウント数について考えていきます。

今回、クロックは4MHzに設定しています。

内部クロックの場合、カウンタは4周期に1カウントするので、今回は1000000カウントできることになります。

この場合、LEDの点灯、消灯は1μsecになります。

今回は、50msecという設定なので、500000カウントすれば良い事になります。

ただし、タイマーのカウントは8bitしか用意されていません。

ようするに、256回までしかカウントできません。

そこで、プリスケーラを活用します。

プリスケーラは8bit用意されているので、これを活用すると256×256で65536カウントできます。

これなら50000カウントできるので、50msecの周期をつくれそうです。

50000カウンタをプリスケーラ値256で割ると、約195カウンタになります。

タイマーのMAX値の256カウントから195カウントを引いた値をタイマーの初期値にすることで、50msec後にタイマー0割り込みが発生するような機能が構築できます。

TMR0にカウンタの初期値を入力するので、TMR0=0x3Dとなっております。

このカウンタ値の設定は、メイン関数の部分の他にも、タイマー0割り込み関数でも設定しております。

T0CS、PSA、PS2、PS1、PS0、TMR0、T0IF、T0IE、GIEはタイマー0割り込みを行う為の設定になります。

タイマー0割り込みの設定については、ソースコードのコメントを参考にしてください。

OSCFは、内部クロックの設定になります。

コメントの通り、0の場合は48kHz、1の場合は4MHzになります。

実際に動作させると、LEDの点灯、消灯を繰り返す事ができました。

しかし、点灯、消灯の周期はどう確認すればよいでしょうか?

そこで、オシロスコープを使用します。

オシロスコープでの確認は次回行いたいと思います。

PIC(3)-LED点灯のソースコード

前回、PICにプログラムを書き込んでLEDを点灯させました。

C言語のコンパイラはXCコンパイラを使用しています。


#include <xc.h> // インクルードファイルの読み込み

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config CP = OFF

// メイン関数
void main (void)
{
	CMCON = 0x07;   // 1,2,17,18端子を入出力端子に設定

	PORTA = 0xFF;   // 電圧レベルの初期設定
	PORTB = 0xFF;   // 電圧レベルの初期設定

	TRISA = 0x21;   // 入出力設定
	TRISB = 0x00;   // 入出力設定

	// 永久ループ
	while(1)
	{
		if (RA0 == 0)   // SW1がONの場合
		{
			RB0 = 0;    // LED1点灯
                        RB1 = 0;    // LED2点灯
		}
		else    // その他の場合(SW1がOFFの場合)
		{
			RB0 = 1;    // LED1消灯
                        RB1 = 1;    // LED2消灯
		}
	}
}

このプログラムのソースコードについて解説していきます。

#include <xc.h>

ヘッダファイルの宣言です。

xc.hを指定する事で、現在使用しているPICで宣言できるプログラムが設定されます。

#pragma config *** = ***

コンフィグレーションのコードになり、PICのモード設定をしています。

void main (void)

C言語でおなじみのメイン関数です。

それでは、メイン関数の中身を見ていきます。

CMCON = 0x07;

16F627AのPICは18端子ありますが、一つの端子に複数の役割を持っているので、設定しています。

PORTA = 0xFF;

ポートレジスタの電圧レベルを設定するコードです。

TRISA = 0x21;

ポートレジスタが入力か出力か設定しています。

0が出力、1が入力になります。

while(1)

ループ宣言で、これもC言語でお馴染みですね。

変数に「1」を指定しているので、無限ループになります。

if (RA0 == 0)

条件分岐宣言で、これもC言語でお馴染みですね。

スイッチがONの時に、RA0が「0」になります。

RB0 = 0;

ポートレジスタの各端子に電圧レベルを設定しています。

LEDは、アノード側が電圧レベル「1」、カソード側を電圧レベル「0」に設定する事で点灯します。

今回の回路はアノード側には電源あるので、カソード側の電圧レベルを「0」にします。

これらのコードを組み合わせる事で、LEDを点灯させています。

PIC(2)-LED点灯

今回は、PICにプログラムを書き込んで、LEDを光らせてみようと思います。

それではMPLABを実行して、開発環境を開きます。

※MPLABが実行できない場合、セキュリティソフト(ファイアウォール)が影響している事があるので、設定を変更してみて下さい。

pic_mplab_001

新規プロジェクトを作成していきます。

FileメニューよりNewProjectを選択します。

新規プロジェクト作成ダイアログが開かれれるので、Standalone Projectを選択して、Nextを選択します。

pic_mplab_002

ここでは、使用するデバイス(PIC)を選択して、Nextを選択します。

pic_mplab_003

ヘッダーの選択画面が開かれますが、今回使用しないので、Nextを選択します。

使用しているPICライターの選択ダイアログ開かれます。

私はPICkit3を使用しているので、PICkit3を選択して、Nextを選択します。

現在使用しているPICライターが無い場合は、Simulatorを選択すれば良いと思います。

pic_mplab_004

使用するコンパイラを選択するダイアログが開かれます。

XC8を選択しますが、XC8はMPLABをインストールした時には同時にインストールされないかもしれないので、インストールされていなかったら別途インストールしておく必要があります。

pic_mplab_005

プロジェクトの作成先を選択するダイアログが開かれます。

Project Name、Project Location、Project Folderを設定します。

今回は、Project NameをSample_LED_001、Project Locationをドキュメントフォルダの中のMPLABフォルダにしました。

Project NameとProject Locationを設定するとProject Folderが自動で設定されます。

日本語文字を使用する為に、EncordingはShift_JISを選択して、Finishを選択します。

pic_mplab_006

これで、新規プロジェクトの作成は完成です。

画面左上側にプロジェクトが表示されているのがわかります。

それでは、ソースファイルの作成に取り組みます。

Projectsの中のSorce Filesを右クリックして、メニューの中のNew→C Source Fileを選択します。

ファイル名を設定して、Finishを選択します。

C Source Fileのファイル名設定画面が表示されるので、ファイル名を設定して、Finishを選択します。

pic_mplab_008

C Source Fileが作成されたので、この中にプログラムを書き込んでいきます。


#include  // インクルードファイルの読み込み

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config CP = OFF

// メイン関数
void main (void)
{
	CMCON = 0x07;   // 1,2,17,18端子を入出力端子に設定

	PORTA = 0xFF;   // 電圧レベルの初期設定
	PORTB = 0xFF;   // 電圧レベルの初期設定

	TRISA = 0x21;   // 入出力設定
	TRISB = 0x00;   // 入出力設定

	// 永久ループ
	while(1)
	{
		if (RA0 == 0)   // SW1がONの場合
		{
			RB0 = 0;    // LED1点灯
                        RB1 = 0;    // LED2点灯
		}
		else    // その他の場合(SW1がOFFの場合)
		{
			RB0 = 1;    // LED1消灯
                        RB1 = 1;    // LED2消灯
		}
	}
}

メニューバーのRunより、Build Main Projectを選択して、ソースをビルドします。

ビルドが成功すると、BUILD SUCCESSFUL (total time: 125ms)と表示されます。

ビルドしたファイルをPICに書き込む前に、PICkit3からPICへ電源供給する為の設定をします。

Power target circuit from PICkit3のチェックボックスをON、BVoltage Levelを3.25に設定しておきます。

pic_mplab_009

それでは、ビルドしたファイルをPICkit3を使用してPICに書き込みます。

下記のようにPICkit3とPICを接続します。

pic_mplab_010

メニューバーのRunより、Run Main Projectを選択して、書き込みを実行します。

書き込みが成功すると、Programming/Verify completeと表示されます。

PICをLEDの搭載されている基盤に配置して動作させてみます。

pic_mplab_011

無事、SW1をクリックすると、LED1とLED2が光りました。

PIC(1)-PICについて調べてみる

前回からFPGA MAX10を使用して、LEDを光らせるような簡易的な回路を作成してきました。

FPGAは、論理回路設計からできるよう多機能性を持っていました。

それに比べてPICは、論理回路も決まっており、命令数も多くありません。

では、PICは必要ないのというとそうではありません。

PICは、低コスト、小型、省電力という特長があります。

家電品のエアコン、炊飯器、電気ポットなどに使われています。

PICは、Peripheral Interface Controllerの略で、日本語訳にすると周辺機器接続部制御となります。

PICはマイコンの一種で、CPUや入出力インターフェイス(I/O)、メモリ(RAM、ROM)が一つのICの中に搭載されたワンチップマイコンが主流です。

以前のマイコンはCPUやI/O、RAM、ROMは別々のICとして分かれていたようです。

PICは機能の違いやピン数の違い、メモリ容量の違いなどでさまざまな種類があります。

例えば、名前にCがつくものは、プログラムを書き込むことができるが、消去する事ができません。

PIC16C63AはCがついているので消去ができないものとなります。

それに対して名前にFがつくものは、フラッシュメモリがついているもので、プログラムを書き込んだり、消去する事ができます。

PIC16F1827はFがついているので、フラッシュメモリが搭載されているものとなります。

今回は、PICを使用して、LEDを制御してみたいと思います。

以下のようなものを準備しました。

(1).PICの書籍と学習キットのセットです。

キットで遊ぼう電子回路シリーズNo.09 新PIC入門C言語編セット(テキスト&実験キット) ECB-900T

※学習キットを使う際に、電源ケーブルが必要なので、別途用意する必要があります。

(2).PICライター(PICにプログラムを書き込む為の機器)

PICプログラマーA (エープラス)

上記、PICライターは書籍と同じメーカーのものとなります。

私は書籍を購入する前に下記のPICライターを購入してしまったので、そちらでPICにプログラムを書き込んでいきます。

Microchip pickit3単体 【PG164130】

マルツエレック DIPパッケージ・PICマイコンプログラミング・アダプタキット 【MPIC-DPPA】

後は、実際にプログラミングを構築する開発環境が必要です。

開発環境はMPLAB X IDEを使用します。

次回からPICにプログラムを書き込んで、LEDを光らせてみようと思います。

2016年9月24日 | カテゴリー : PIC | タグ : , | 投稿者 : net_sec