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

ソース/バイナリ

ソース: MPLAB Project files (ThermometerSrc.zip)   2011/03/20
HEX: ThermometerHex.zip   2011/03/20

開発環境


MPLAB  v8.46  +  C18  v3.35  マイクロチップテクノロジージャパン株式会社

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

ライタ&デバッガ

 PICkit 2  PICkit2の使用法

秋月電子で¥3500 で購入できます。

プログラム説明
上記プロジェクトに含まれるソースファイルは、この main.c だけです。
各パラメータは#defineされているので、必要に応じて変更してみてください。クロックも
現在のFCY3.685MHz以外に、FCY10MHz, FCY40MHz へ変更出来るようにして
ますが、無用に消費電力が上がるだけでなく、PICが発熱し温度計測に誤差が生ずる
ため良くないと思います。内臓FRCの7.37MHzで十分です。

7セグLEDのダイナミック駆動は、TMR1の割り込みを使っています。
CDSから得られた値を元に、デューティー比を変更して明るさを制御しています。

ADCは、12ビットモード、VREF+参照で動作させ、TADやサンプルタイムはなるべく
小さくなるように設定しています。

// ADコンバータ
// TAD: Min.117.6ns, TSAMP: Min.3TAD, tCONV: 14TAD
AD1CON1 = 0b1000010011100000; // AD12B:1 SSRC:Auto ASAM:Manual
AD1CON2 = 0b0010000000000000; // VCFG:VREF+&AVSS ALTS:Sample
AAD1CON3bits.ADRC = 0;

// TCY = 1/Fcy = 1/3.685MHz = 271.3nsec
// TAD = TCY*(ADCS + 1) = 271.3nsec * (0 + 1) = 271.3ns
// 全工程 = (4 + 14 + 2)*271.3ns = 5.4us
AD1CON3bits.ADCS = 0;
AD1CON3bits.SAMC = 4; // 4TAD
また、サンプリングの開始は手動で行い、サンプル終了後は自動的にAD変換を行う
ように設定していますので、開始と完了待ちは下記の様になります。
AD1CHS0bits.CH0SA = SENS_TAMP;
AD1CON1bits.DONE = 0;
AD1CON1bits.SAMP = 1;
while (!AD1CON1bits.DONE);
s_nTherm1 = ADC1BUF0;
就寝時、真っ暗になるとスリープモードに入ります。ただ、定期的な温度計測は継続して
行い、傾向を検出するようにしています。これは、下記の様に、ウォッチドッグタイマによる
スリープモードからのウェイクアップを利用しています。
RCONbits.SWDTEN = 1;
Sleep();
RCONbits.SWDTEN = 0;
DelayMs(1);
タクトSW入力は、変化通知割込みを使っています。機能としては、押下する度に表示
内容を切り替えます。スリープモードになっている時は、一時的に表示状態になります。

・温度表示(3桁)+c表示・温度表示(3桁)
・温度表示(4桁)
・入力AD値表示(4桁)
・入力電圧表示(4桁)
・アンプゲイン表示(4桁)
・光量AD値表示(4桁)

 

拍手[0回]

PR
この記事へのトラックバック
この記事にトラックバックする:
隊長

ブログ内検索

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