表題のことをMikroC、PIC16F1827でやってますっていう人が某掲示板で質問してた。
その人のケースはただのシンタックス・エラーだったようだ。
久しぶりにPIC16F1827という名前を見かけたので懐かしくなった。
そういえばMCCでプログラムしたことあったかなあと思ったので、このお題を借りてMCCでやってみることにした。
半固定抵抗で分圧した電圧をAD変換する。
その値の大小を3つのLEDを点灯させて示す。
動作確認用に別のLEDを常時点滅させる。
新しいプロジェクトを作るところから。
(1)プロジェクトの名前
(2)プロジェクトの保存先
(3)文字コード
(4)以上の設定で作成
MPLAB Code Confugurator(MCC)のアイコンをクリックする。
MCCの設定を保存する。
クロックの設定を行う。
LED用の出力ピンを設定(緑色でカギがかかった状態の絵)する。
Analogになっている場合があるのでPin Moduleでも確認して赤枠の部分のチェックは外す。
ADCを追加(赤枠をダブル・クリック)する。
Pin Manager:Grid ViewにADC用のピン設定が追加される。
ここではRB3(AN9)を使うことにする。
ADCは以下のように設定した。
上で選んだRB3もちゃんと表示されている。
動作確認用のLEDのためのTimer0を追加(ダブルクリック)する。
下のように設定する。
10ms×50回=500msとする。
実際には9.984ms×50回=499.2msになるようだ。
GenerateするとMCC Generated Filesの中に様々なファイルが自動で作成される。
作成されたtmr0.cを編集する。
10msの割り込みが50回ごとにTMR0_CallBack()が呼ばれるので、ここにLEDの点滅を追加する。
main.cを編集する。
これだけはMCC Generated Filesの外に作成される。
AD変換値を納める変数adcを用意する。
割り込みをEnabledにするため、//を2ヶ所外す。
AD変換とLEDの点灯の処理を書き加える。
半固定抵抗をつなぐのがRB3でChannelは9なので、
ADC_GetConversion(9)
とする。
はい、出来上がり。
あまりにも簡単なので少々不安になるが、例えばAD変換の初期化は
main.cのSYSTEM_Initialize();–>mcc.cのADC_Initialize();–>adc.c
とたどれば、該当部分にちゃんと書かれている。
肝心のAD変換も、adc.cのADC_GetConversion()に全部書いてある。
チャンネル番号を渡せば結果が返って来る。
変換後のResult Alignmentがleftでもrightでも構わず左にビットシフトするコードを吐くように思ったので、その点は注意が必要かもしれない。
「PIC16F1827 – AD変換結果をシリアル-USB変換モジュールで出力する。-」
Tweet