Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC16F1827でAD変換して値に応じてLED点灯

表題のことを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変換モジュールで出力する。-

このエントリーをはてなブックマークに追加

Posted under: PIC16F1827


コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.