PIC三昧(10) NCO(数値制御発振器)を使ってみる、PIC16F18855

Joseph Halfmoon

前回は参照電圧を生成してくれるFVRを使ってみました。PICマイコンの良いところはハード搭載がなければ外付けになってしまう「お役立ち」回路がいろいろ搭載されており、かつその設定がソフトウエアでできるところじゃないかと思います。今回使ってみるのはNCO(数値制御発振器)です。お好みのクロックを生成できるもの。

※『PIC三昧』PIC関係の記事総目次はこちら

NCO(Numerically Controlled Oscillator)

クロック波形を作り出せる回路を複数搭載しているPIC16F18855ですが、その中でもNCOはそのレゾリューションが細かいです。2の20乗のレゾリューションの細かさで広い範囲の周波数を設定することができます。内部クロックを元に動作することだけでなく、外部入力、ことに第6回でやったConfigurable Logic Cellの出力を元クロックとすることも可能なのでデバイス上限内であればいかなる周波数でも作りだせるでしょう。

MCC Classicを使ってコンフィギュレーション

いつものとおりMicroChip社MPLAB X IDEの自動コンフィギュレーションツールMCCのClassic版を使ってソースコードを自動生成します。

NCOを使うためにはDevice ResourcesウインドウでNCO1(1回路しか搭載されていない)の緑の+印をクリックしてProject ResourcesにNCO1を加えます。DeviceResourcesNCO

Pin Managerを使って端子設定を行います。まず、NCO1の出力はPortAの4番としておきます。また、例によってmain関数内のソフトループでLチカさせるためにPortAの0番はGPIO出力としています。なお、使用している開発ボードのPortAの0番から3番にLEDが接続されています。pinMGR_NCO

さて、NCOの設定ですが、今回はNCOの以下2つのモードを試してみることにしたので2種類のオブジェクトを作っています。

    • FDC_mode (Fixed Duty Cycle mode)
    • PFM_mode (Pulse Frequency mode)

まずはFDCモードのときの設定が以下に。NCOsetting

つづいてPFMモードの設定が以下に。PFMmodeSetting

どちらも周波数は1kHzと同じ設定ですが、設定により波形が異なるところを観察したいと思います。

自動生成されたソースに書き込むのはLチカ部分のみ

MCCにより自動生成されるソースにより必要なハードウエア設定が成されるので、main()関数側では例によってにPort Aの0番端子にソフトでLチカするのみ。

実験結果

まずはFDC_mode (Fixed Duty Cycle mode)ときの波形が以下に。ほぼ1kHz、デューティ50%の波形がでてます。FDCmode_Waveform

一方、PFM_mode (Pulse Frequency mode)ときの1kHz波形が以下に。上記のFDCモードのときの時間DIVが、パルス一発の幅に対して広すぎるので、DIV変えました。1kHzの周波数は同じですが、パルス一発の幅は1μsです。

PFMmode_Waveform

クロック信号も作り放題だ、と。ホントか?

PIC三昧(9) FVR(固定参照電圧源)を使ってみる、PIC16F18855 へ戻る

PIC三昧(11) DSM(データ信号変調器)を使ってみる、PIC16F18855 へ進む