PIC16F18326のCLCのテストをします。
CLC(Configuable Logic Cell)は、内蔵している下の図(いずれもmicrochipの説明書より)のロジックを設定により、プログラムとは関係なく使用できる機能です。これにより、高速の処理を行うことができます。
実際には、下のCLC BLOCK DIAGRAMで必要な設定をすることで使用可能になります。Logic Functionに上記のロジックのいずれかを設定します。
CLCの入力は、次の中から選択します。
microchipの説明書によれば、次のようなCLCの応用例が紹介されています。
• 応用例1: 位相検出器
• 応用例2: SCCP を入力とするデッドバンド制御を備
えた相補波形ジェネレータ
• 応用例3: 非同期のデータ信号モジュレータ(DSM)
• 応用例4: 複数パラメータの監視
• 応用例5: NRZ からRZ へのエンコード
• 応用例6: 2x1 マルチプレクサ
• 応用例2: SCCP を入力とするデッドバンド制御を備
えた相補波形ジェネレータ
• 応用例3: 非同期のデータ信号モジュレータ(DSM)
• 応用例4: 複数パラメータの監視
• 応用例5: NRZ からRZ へのエンコード
• 応用例6: 2x1 マルチプレクサ
うーん、よく分かりません。とりあえず、どんな風に設定して使うのかWebで調べてみると、「はじめてのPIC & Arduino」というサイトにCLCを利用して、スイッチを押すとLEDが点灯するという記事を見つけたので、これをやってみることにしました。記事は、こちら。(ただし、PICはPIC16F1619が使用されています。 )
さっそくプロジェクトを作成し、MCCを起動して、設定を始めます。
systemモジュールです。デフォルトのままです。クロックは1MHzです。
CLC1モジュールを導入しました。(CLC1からCLC4まで4つのCLCが使えます。)Mode、つまり使うLogic Functionは、AND-ORを選びます。
下の論理回路をクリックして、入力はCLCIN0を1のOR回路に接続し、2のORの出力を反転させます。最後に出力を反転させます。
次に、pinモジュールで、CLCの入力ピンと出力ピンを選択します。
今回は、CLCIN0をRC4にCLC1OUTをRA4に設定しました。
回路図です。RC4のPUSHスイッチを押すとRA4のLEDが点灯します。
Generateして、build書き込みをしました。(ICSPでテストしています。電源は、PICKit3から供給しています。)
プログラムには、次のように何も書かれていませんが、CLCは動作します。
------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
// initialize the device
SYSTEM_Initialize();
while (1)
{
}
}
---------------------------------------------------------------
ブレッドボードです。スイッチを押すとLEDが点灯しました。
最も簡単な回路で、CLCの動作を確認することができました。
しかし、ここまで来るのに1週間ほどかかってしまいました。というのは、先述のサイトでは、CLCの出力をRA5としているので、私も最初はその設定でやってみました。
ところが、ボタンを押してもLEDはつきません。何故?。
CLCの設定やピンの設定、回路を見ても問題ありません。原因が分かりません。もんもんとして1週間が過ぎました。
ひょっとして、RA5の出力設定がダメなのかな、と思いRA5を使ったLチカをやってみると、案の定LEDが光りません。PICを替えてやっても光りません。他のピンでは、Lチカができました。
どうも、RA5を出力に設定できていないようです。Webで探ってみるとRA5は外部ロックのINに設定されているらしい。
CLCの出力先をRA4に変更してみると、問題なく動作しました。ちょっとしたことで沼にはまってしまったわけです。
このCLC機能をアマチュア無線で何かに利用できないか、今後考えていきたいと思います。
※コメント投稿者のブログIDはブログ作成者のみに通知されます