文書の表示以前のリビジョンバックリンクPDF の出力全て展開する/折り畳むODT 出力文書の先頭へ この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。 ====== 温度データロガーV2 ====== ===== 概要 ===== 以前に製作した、温度データロガーは、PIC12F683と高精度温度センサー「S8100B (SEIKO)」を使用したもので、測定結果は、RS232Cでパソコンに送信するものでした。 今回は、PIC12F683と高精度温度センサー「LM60」を使用し、測定結果は、EEPROM「24LC1025」に記録しました。 記録したデータは、前回製作した、EEPROM/reader&writer(SDカード)を使って、SDカードにファイルとして抜き出します。 そして、パソコン上のExcelを使って、グラフ表示しました。 <仕様> * 温度測定範囲は、-25℃~+99℃とする。\\ ※LM60の測定範囲は、-25℃~+125℃、1℃当たり6.25mV * 測定周期は、1秒とする。 * 記録は、最大16384件とする。(約4.5時間分:131072バイト÷8バイト÷3600秒) * A/D変換の、基準電圧は、2.495Vとする。(最小分解能2.4mV) * 測定精度は、約0.4℃(2.4mV÷6.25mV)とする。 ===== 動作原理 ===== - 内臓モジュールを初期化する。 - スイッチが押されるのを待つ。 - 温度を100回測定し、その平均を求める。 - 結果をEEPROMに書き込む。\\ ※格納フォーマットは、1データ8バイト構成で、次のようになります。\\ "29.8"+CR+LF\\ "-12.4"+CR+LF - 測定周期が、約1秒になるようにスリープ(遅延:delay)する。 - スイッチが押されると測定を停止する。 - 1.に戻る。 ===== ソースコード ===== <code c ThermoLogger.c> //********************************************************************** /* 『温度データロガー(ThermoLoggerV2)』 ■概要 約4.5時間の温度データを記録します。 131072バイト÷8バイト 格納フォーマットは、1データ8バイト構成で、次のようになります。 ”△△29.8”+CR+LF ”△-12.4”+CR+LF */ //********************************************************************** #define SW GPIO.F3 #define LED GPIO.F2 #define ON 1 #define OFF 0 #define CR 0x0D #define LF 0x0A //********************************************************************** void EEPROM_24LC1025_Page_Write(unsigned long addr, unsigned short *buf, unsigned short len) { unsigned short cnt; // Soft_I2C_Start(); if ((addr & 0x10000) == 0) Soft_I2C_Write(0xA0); else Soft_I2C_Write(0xA8); Soft_I2C_Write((addr >> 8) & 0xFF); Soft_I2C_Write(addr & 0xFF); for (cnt = 0; cnt < len; cnt++) { Soft_I2C_Write(buf[cnt]); } Soft_I2C_Stop(); } //********************************************************************** void main() { static unsigned char buf[10], cnt; static unsigned double ad; static unsigned long addr; // CMCON0 = 0b00000111; ANSEL.ANS0 = 1; ANSEL.ANS1 = 0; ANSEL.ANS2 = 0; ANSEL.ANS3 = 0; ADCON0.VCFG = 1; TRISIO = 0b00001011; OSCCON = 0b01110000; // for (cnt = 0; cnt < 10; cnt++) { LED = ON; Delay_ms(50); LED = OFF; Delay_ms(50); } // Soft_I2C_Config(&GPIO, 4, 5); // while (1) { //スイッチが押されるのを待つ。 while (SW == 1) Delay_ms(10); // addr = 0; while (1) { LED = ~LED; //温度を100回測定し、その平均を求める。 ad = 0; for (cnt = 0; cnt < 100; cnt++) { ad += Adc_Read(0); Delay_ms(1); } ad = ad / 100.0; ad = ((((ad * 2.4365234375) - 268.0) / 6.25) - 25.0) * 10.0; //結果をEEPROMに書き込む。 IntToStr(ad, buf); buf[6] = buf[5]; buf[5] = '.'; buf[7] = CR; buf[8] = LF; EEPROM_24LC1025_Page_Write(addr, &buf[1], 8); addr += 8; if (addr >=0x20000) break; //約850msecの遅延(遅延内でスイッチが押されると停止する) for (cnt = 0; cnt < 17; cnt++) { Delay_ms(50); // if (SW == 0) { break; } } if (cnt != 17) break; } // for (cnt = 0; cnt < 10; cnt++) { LED = ON; Delay_ms(50); LED = OFF; Delay_ms(50); } } } //********************************************************************** </code> ===== 動作確認 ===== {{:imgpaste:202004:htmikan-20200429-102619.png?500}} 左側から、LED、LM60、TL431、PIC12F683、24LC1025、スイッチの順です。 {{:imgpaste:202004:htmikan-20200429-102642.png?500}} 夜中の23時から約4.5時間測定してみました。 その時の記録データです。(最初の部分) {{:imgpaste:202004:htmikan-20200429-102704.png}} その時の記録データ(16384件)です。(最後の部分) {{:imgpaste:202004:htmikan-20200429-102724.png}} 測定データを、Excelでグラフ表示させて見ました。 23時~3時30分にかけて、徐々(1時間に1℃の割合で)に温度が下がっています。 {{:imgpaste:202004:htmikan-20200429-102742.png?500}} <callout type="warning" title="著作権表示 copyright notice"> このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。[[elechobby:picdic:picdic|詳細]] This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.[[elechobby:picdic:picdic|Details]] </callout> elechobby/picdic/pic12f683/17.txt 最終更新: 2025/10/17 14:29by 127.0.0.1