30年ぶりに復活した隊長の電子工作指令本部
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ソース/バイナリ
ソース: 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桁)
隊長
カテゴリー
PR