忍者ブログ
 30年ぶりに復活した隊長の電子工作指令本部
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ソース/バイナリ

ソース: MPLAB Project files (PowerUnitSrc.zip)   2012/01/10
HEX: PowerUnitHex.zip   2012/01/10

開発環境

MPLAB  v8.83  +  C30  v3.30b  マイクロチップテクノロジージャパン株式会社

全て無料の環境で開発する事が出来ます。

ライタ&デバッガ

 PICkit 2 または PICkit 3 または 対応ライタ

プログラム説明
上記プロジェクトに含まれるソースファイルは、この main.c だけです。

今回のPICの役割は、電圧電流を表示するだけですので簡素です。
動作クロックは、内部FRC(7.37MHz)を約8MHzに調整し、1/4して2MHzを作っています。
これはFOSCなので、実質的なクロック(FCY)としてはさらに半分の1MHz駆動となっています。

 // クロック設定(Fosc = 2.0014155MHz)
 _TUN = 23; // +8.625% -> 8.0056625MHz
 _FRCDIV = 0b010; // FRC divide by 4

メインループでは、測定をセットアップし、ADC割り込みで値を取得後、表示データを作成する
処理を繰り返すだけです。
作成した表示データは、タイマ割り込みで7セグLEDへ表示します(測定中を除く)。

ADCは、12Bitモード差動入力(負極性入力有効)に設定し、VREFを使うように設定します。

 // AD1CON1
 _ADSIDL = 0;
 _AD12B = 1; // 12Bit mode
 _FORM = 0b00; // 符号なし整数
 _SSRC = 0b111; // 自動変換
 _ASAM = 1; // 自動サンプリング
 _SAMP = 0;

 // AD1CON2
 _VCFG = 0b001; // VREF+ AVSS
 _CSCNA = 1; // CH0チャンネルスキャン
 _SMPI = 0b0111; // 8回の変換動作完了で割込み
 _BUFM = 0; // 全変換結果をバッファ
 _ALTS = 0; // 常にサンプルA

 // AD1CON3(変換時間=(4+14)xTAD=18x250ns= 4.5us)
 _ADRC = 1; // TAD=TADRC=250ns(4MHz)
 _SAMC = 4; // サンプルタイム=4TAD(1uS)

 // AD1CHS0
 _CH0NA = 1; // チャンネル0 負極性入力にAN1を選択

 // AD1CSSL
 AD1CSSL = 0b0000000000111100; // Analog AN2,3,4,5

 _ADON = 1;

測定は、ノイズの影響を受けないようにSleep中に行うようにしています。
Sleep中にチャンネルスキャンを実行させ、8回の測定を終えた後に割り込みが入り、ウェイク
アップします。
最初の4回分は、Sleepモードに入った直後の計測ですので捨てて、安定していると思われる
後の4回分の値を使用します。
電圧電流それぞれ2つのレンジがありますが、ADCは12Bit(max.4096)ですので、低い方の
値4000を境に自動レンジ切り換えを行います。

[電圧]
 1mVStep(0~4.000V)
 2mVStep(4.000V~)

[電流]
 1mAStep(0~4000mA)
 2mVStep(4000mA~)

尚、スイッチは、最大値ホールド、最小値ホールド、ノーマル表示を切り換えます。
ホールド表示では、それが判るように電流計の小数点を点滅させるようにしています。

拍手[0回]

隊長

Copyright © [ The 電子工作 ] All rights reserved.
Special Template : 忍者ブログ de テンプレート and ブログアクセスアップ
Special Thanks : 忍者ブログ
Commercial message : [PR]

PR