PIC三昧(1) PIC16F18855のCLKOUTとビットバンギングで周波数確認

Joseph Halfmoon

別シリーズ記事にてMicroChip社の8ビットマイコンPIC16F1xxxのプログラム作成がどうにか軌道に乗りました。さすればということで、PIC16F1xxxの「諸機能」を端から勉強していきたいと思います。とりあえずのターゲット機はPIC16F18855、MPLAB X IDE+MCC Classicにて作業。

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

以下の5記事5回を費やし、8ビットPICマイコンを触りました。相当久しぶりです。老人の忘却力とて過去の記憶は一切ありません。

鳥なき里のマイコン屋(167) PIC16F18855、MPLAB IDEで吉例Lチカ

鳥なき里のマイコン屋(168) PIC16F18855で吉例Hello World.

鳥なき里のマイコン屋(169) 復活! PICkit2 で読み書き出来たものの

鳥なき里のマイコン屋(170) デモボード搭載マイコン、PIC16F1829に交換

鳥なき里のマイコン屋(171) MCC MelodyとMCC Classicどっち?

PIC16F1xxxx

米MicroChip社は、よくわからないくらい沢山のシリーズ品ぞろえを誇って?います。8ビット機もベーシックな奴とかミッドレンジとかいろいろある中で、今回練習してみん、と思い立ちましたのが、ミッドレンジのPIC16F1xxxxシリーズです。なお、xxxxには3桁もしくは4桁の数字が入ります。

歴戦のPIC8ビット機の中でPIC16F1xxxxシリーズは、「近代化改修」をうけた8ビット機といえるかと思います。PIC16Fから始まる品種でもFの直後に1と書いてある機種がモダーンなやつで1無は伝統機種、ということみたいです。知らんけど。

今回からしばらく練習台に使うのが以下の機種です。製品ページが以下に。

PIC16F18855

MPLAB X IDE+MCC Classic でプロジェクト新規作成

PIC16F18855の諸機能を端からみていくにあたって、最初はやはりクロック源です。オシレータと分周器など。実際に内部クロックを外部へ出力して設定どおりに動いていることを確認しておきたいと思います。

さてプロジェクトはローカルストレージにインストール済のMPLAB X IDEでMCC Classicというソース等の自動生成ツールを使って新規作成です。MCC には Melody という「フレーバー」もあるのですが、別シリーズで書いた理由にてClassic使ってます。

SYSTEMモジュール、INTERNAL OSCILLATORから設定確認していきます。PIC16F18855にはざっくり内蔵オシレータ2種、外付け発振子用オシレータ2種の合計4個のオシレータが搭載されてます。他にもMFINTOSCという内蔵オシレータの先っぽにつながる「オシレータ」や逓倍回路(PLL)などが存在し、その組み合わせはかなり多くなります。

ともあれ、外部に振動子や信号源がなくとも内蔵オシレータはいつでも使える頼みの綱です。生成したプロジェクトのデフォルト設定は以下のようです。INTERNAL_OSC

LFINTOSCとHFINTOSCの2個ある内蔵オシレータのうち、高い周波数を担当するHFINTOSCを使用してます。オシレータの発振周波数は4MHzだけれども4分周してシステム・クロック(Fosc)は1MHzということでよいのかな。

MCC Classicの場合、Registersタブを開くと関係の各レジスタの値が「人間可読な」フォーマットで読み取れるようになっているので便利っす。まずはOSCCON1レジスタの設定。

OSCCON1

一方、CONFIG1レジスタの設置が以下に。RESET後、HFINTOSC(1MHz)クロックで動作せよ。また、CLKOUT信号としてFOSCを4分周したクロックを端子から出力せよ、という設定にしてあります。CLKOUT信号を外部で観察すれば、FOSCつまり、HFINTOSCから出力されているクロックの周波数が確認できるハズ。CONFIG1

外部端子としては以下のような設定になってます。まずCLKOUT端子はかならずPA6番でないとダメなようなので、そこに出力してます。

一方、ソフトウエアループの中でビットバンギングをやってその周波数を確かめようと思うで、PA7番をGPIO出力としています。

Pin_CLKOUT_enable

実験に使用したソースの一部

ソフトウエアによるビッドバンギングのコードは以下です。

while (1)
{
    RA7 = 0;
    RA7 = 1;
}

上記のコードをビルドした結果、以下のようなオブジェクトが得られてます。

LOOP_list

l757から、goto l757の間の4命令のうち、movlb、bcf 12,7、bsf 12,7の3命令は1サイクル命令、goto命令のみ2サイクル命令です。よって上記のビッドバンギングループは1回転5サイクルで「回転する」ハズ。

実機動作実験結果

信号線RA6(黄色、FOSC/4クロック)、RA7(白色、ソフトウエア・ビッドバンギング)を実機上、外部に取り出したところが以下に。

PIC16F18855_CLKOUT

オシロでの観察結果が以下に。黄色C1が、FOSC/4(FOSC=1MHz)なので250kHzのハズ。青色C2がソフトウエアによるビットバンギングです。1命令=1サイクル=FOSC/4クロック1個という関係です。先ほど述べたように、1ループ5サイクルの筈なので、FOSC/4クロック5発分のハズ。

FOSCFreq_BitBang

予定通りの周波数出てますな。よかった。

PIC三昧(2) MCCでPIC16F1xxxx。TMR2+PWM6でPWM出力 へ進む