CLC機能を動作させて見ます

〔PICの動かせ方入門に戻る〕


12F1501の新しい機能でCLC(Configurable Logic Cell)が有るので動作させて見たいと思います。
この機能はソフトウエアとは別にPICのハードでロジック(AND/OR等)が構成出来ます。
ロジックモジュールは2個有り、1つのモジュールあたり4つの入力が出来、16個の選択可能な
入力源(PWM/OSC/TMR/外部PIN等)が有ります。

実験するロジックの構成図  動作実験は左の構成で行って見たいと思います。
 RA5端子にスイッチを接続し、RA2端子にはLEDを
 配線します。
 スイッチを押せばPWM 3の信号が押している間出
 力されLEDが点灯するはずです。

実はスイッチはPIC内蔵プルアップにしたので通常点灯で押せば消えるです。
(ロジックモジュールで反転入力にしても良いのですが、ここではそのままです)

《CLC設計ツール》

下記のツール(CLCDesignerTool.exe)は、現在MPLAB X IDEのMCC機能に統合されたので
ツールは削除されています、詳しくはこちらを参照下さい。 *2)

CLCで使用するレジスタは9種類程有り、設定するにはちょっとぉ面倒で大変です。
なので、これを手助けしてくれるツールがMicrochip社より手に入るのでこれを使って見ます。

インストール

@まずは、こちらからダウンロードします。
 そのHP最後の方に有る"Download the CLC Configuration Tool here."文字をクリックすればOKです。
 また、ツールのマニュアルはこちらが日本語なので良いでしょう。

Aダウンロードしたファイルを解凍させます、
 作成されたディレクトリごと適当な場所(c:\PrograamFilesの下とか)に移動させます。

B"CLCDesignerTool.exe"を起動させればOKです。

操作画面

上のロジック構成(4-input AND)をツールを使って設定して見た画面
ツールの詳しい操作方法はマニュアルを読みましょう!
赤枠の場所で信号の反転操作が出来ます。
ゲート1にCLC1IN1(RA5)を設定、ゲート2にPWM 3を設定しています。
ゲート3/4にも入力しないと動作しなかったのでPWM 3を入れています。
操作画面

 下がツールにて設定した内容で保存したファイル内容です。
 ---------------------------------------------------------------------
 // File: CLC_AND_SET.inc
 // Generated by CLC Designer, Version: 3.0.0.4
 // Date: 2014/05/04 15:44
 // Device:PIC16(L)F1501

	CLC1GLS0  = 0x02;
	CLC1GLS1  = 0x20;
	CLC1GLS2  = 0x20;
	CLC1GLS3  = 0x20;
	CLC1SEL0  = 0x01;
	CLC1SEL1  = 0x06;
	CLC1POL   = 0x00;
	CLC1CON   = 0xC2;
 ---------------------------------------------------------------------
 12F1501ではCLC1出力がRA2とRA4の何れかを選択できますが、このファイルにはその設定が有りません。
 CLC1SEL= 0 ;   // 0:RA2から出力 1:RA4から出力
 とこの行を追加する必要が有ります。

《実験回路》

ピン構成図
PIC12F1501のピン構成図です

CLC1は4(RA3)番ピンCLC1IN0、2(RA5)番ピンCLC1IN1、CLC1の出力は5番(RA2)と3番(RA4)から
選択します、なのでぇ、[CLC1SEL]レジスタビットで切り替えます。
CLC2は6(RA2)番ピンCLC2IN0、7(RA0)番ピンCLC2IN1、CLC2の出力は2番(RA5)ピンです。
だからぁ、CLC2とCLC1IN1は2番(RA5)ピンですので何方かになります。

実験回路図  左が今回の実験を行た回路です。

 PICの1番ピンに電源+5V、8番ピンに電源GND(-)を接続しています。
 LEDは足の長い方(+)をPIC側に接続し抵抗は470Ωにて配線しています。
 スイッチは2番ピン(RA5)に接続し、PIC内蔵プルアップ抵抗を利用しています。
 プルアップなので通常は電気が流れて、スイッチを押せば電気が切れると
 言う事になります。

《サンプルプログラム》

電源を入れればLEDが点灯して、スイッチを押せばLEDは消灯すると思います。
CLCの入力の1つにPWM3を入れています、
PWM 3の周期はTIMER2で1KHzを発生させPWMのデューティ比は50%です。
但し、PWM 3の3番(RA4)ピンからはPWMの出力は行っていません。
尚、PICのシステムクロック(Fosc)は内蔵8MHzで行っています。

下記がプログラムソースです、
MPLAB X(v2.15)MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。
 プロジェクトを作成して新規ファイルにコピーペーストして貼り付けて下さい。 *1)
---------------------------------------------------------------------
#include <xc.h>

// コンフィギュレーション1の設定
#pragma config FOSC     = INTOSC   // 内部クロック使用する(INTOSC)
#pragma config WDTE     = OFF      // ウオッチドッグタイマー無し(OFF)
#pragma config PWRTE    = ON       // 電源ONから64ms後にプログラムを開始する(ON)
#pragma config MCLRE    = OFF      // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(OFF)
#pragma config CP       = OFF      // プログラムメモリーを保護しない(OFF)
#pragma config BOREN    = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF      // CLKOUTピンをRA4ピンで使用する(OFF)

// コンフィギュレーション2の設定
#pragma config LPBOR  = OFF        // 低消費電力ブラウンアウトリセット(OFF)
#pragma config WRT    = OFF        // Flashメモリーを保護しない(OFF)
#pragma config STVREN = ON         // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV   = HI         // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP    = OFF        // 低電圧プログラミング機能使用しない(OFF)

// メインの処理
void main()
{
     OSCCON     = 0b01110000 ; // 内部クロックは8MHzとする
     OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
     ANSELA     = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
     TRISA      = 0b00100000 ; // RA5のみ入力、その他は全て出力に割当てる(RA3は入力のみ)
     WPUA       = 0b00100000 ; // RA5は内部プルアップ抵抗を指定する
     PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)

     // CLCの設定
     CLC1SEL   = 0 ;          // 0:RA2から出力 1:RA4から出力
     CLC1GLS0  = 0x02;        // ゲート1は入力1の信号(CLCIN1)を真(非反転)で使用する
     CLC1GLS1  = 0x20;        // ゲート2は入力3の信号(PWM3)を真(非反転)で使用する
     CLC1GLS2  = 0x20;        // ゲート3は入力3の信号(PWM3)を真(非反転)で使用する
     CLC1GLS3  = 0x20;        // ゲート4は入力3の信号(PWM3)を真(非反転)で使用する
     CLC1SEL0  = 0x01;        // 入力1=CLC1IN1  入力2=Fosc
     CLC1SEL1  = 0x06;        // 入力3=PWM3     入力4=NCO1_out
     CLC1POL   = 0x00;        // ゲート出力もCLC出力も反転出力はしない
     CLC1CON   = 0xC2;        // CLCは有効でピンから出力、ロジックは[4-input AND]

     // PWM3の設定
     PWM3CON = 0b10000000 ;   // PWM3ピンからは出力しない
     PWM3DCH = 64 ;           // デューティ値は50%で初期化
     PWM3DCL = 0 ;
     T2CON   = 0b00000010 ;   // TMR2プリスケーラ値を16倍に設定
     TMR2    = 0 ;            // タイマー2カウンターを初期化
     PR2     = 124 ;          // PWMの周期を設定(1000Hzで設定)
     TMR2ON  = 1 ;            // TMR2(PWM)スタート

     while(1) {
     }
}
---------------------------------------------------------------------

実行結果

ロジックアナライザに信号を表示させる為に、PWM3をRA4に出して、スイッチのプルアップを
外付けにしました。下記がロジアナの表示画面です。

ロジアナの表示画面

PWM3とスイッチがAND条件なのでスイッチの信号がLOWになると出力(CLC1OUT)は出ていませんね。

レジスタの設定

レジスタの設定説明についてはツールを使えば簡単に設定可能なのでここでは説明を省きます。

《その他》

最近ロジックアナライザを買ってしまった、やっぱり信号の挙動が見れて良いですね〜。
これは必需品ですよぉ、思い切って買って良かったぉ、一番安いのですけどね。
あとはぁ、オシロスコープか?、でもこればっかりは値段が高いなぁ......



記事一部追記(*2) 2016/12/01
MPLAB X用に記事変更(*1) 2015/10/02


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2016 Shigehiro Kimura All Rights Reserved.