====== ミニ温度計(7セグ表示) ====== ===== 概要 ===== 今迄に、温度に関する物を、多数製作してきました。 * 温度データロガー...「S8100B」、-40℃~+100℃、シリアルデータ出力 * 温度データロガーV2...「LM60」、-25℃~+99℃、EEPROM出力 * 温度データロガーV3...「LM60」、-25℃~+99℃、EEPROM出力 * 温度計(温度制御機能付き)...「LM35DZ」、0℃~+100℃、リレー出力、LCD表示 今回は、出来るだけコンパクトを目指して、製作してみました。 * 温度センサー:LM61CIZ * 測定範囲:-30℃~+100℃ * 温度係数:+10mV/℃ * 結果表示:7セグ(3桁)、小数点第一位まで表示(例“12.3") * 測定精度:2.44mV(0.41℃) * 電源:単三電池2本(3V) ===== 動作原理 ===== ダイナミック点灯の基本的な原理は、ミニ周波数カウンタ(kHz表示)を参照してください。 電源電圧の設定については、ミニ電圧&電流計(7セグ表示)を参照してください。 <温度の測定> - 温度センサーの出力電圧を、A/D変換で1000回測定し、平均電圧(V1)を求める。 - 電圧(V1)データを、温度データに変換する。\\ 温度=%%((V1 - 300mV) ÷ 10mV) - 30℃%% - 温度データが、マイナスであれば、LEDを点灯させる。 - 温度データを、7セグ(3桁)に表示する。 - 1.へ戻る。 ===== 回路図 ===== {{:imgpaste:202004:htmikan-20200430-100208.png}} {{:imgpaste:202004:htmikan-20200430-100221.png}} |<100px>| ^ ポート ^ 7SEG ^ | PORTB(0) | E | | PORTB(1) | D | | PORTB(2) | dp | | PORTB(3) | C | | PORTB(4) | B | | PORTB(5) | F | | PORTB(6) | A | | PORTB(7) | G | |<100px>| ^ ポート ^ DIG(SEG) ^ | PORTA(0) | DIG1 | | PORTA(7) | DIG2 | | PORTA(6) | DIG3 | ===== ソースコード ===== //********************************************************************** /*   <ミニ温度計(7セグ表示)> */ //********************************************************************** #define DATA0 0b01111011 #define DATA1 0b00011000 #define DATA2 0b11010011 #define DATA3 0b11011010 #define DATA4 0b10111000 #define DATA5 0b11101010 #define DATA6 0b11101011 #define DATA7 0b01111000 #define DATA8 0b11111011 #define DATA9 0b11111010 #define DATA_SPACE 0b00000000 #define SPACE 10 #define NON_SEG 0b00000000 #define SEG1 PORTA.F0 #define SEG2 PORTA.F7 #define SEG3 PORTA.F6 #define ON 0 #define OFF 1 #define LED PORTA.F1 //********************************************************************** short seg_flg, data1, data2, data3, dot; short tbl[11] = {DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8, DATA9, DATA_SPACE}; void interrupt() { if (PIR1.CCP1IF == 1) { PIR1.CCP1IF = 0; //7SEG(3桁)点灯処理 switch (seg_flg) { case 0: seg_flg = 1; SEG3 = OFF; PORTB = (dot == 1) ? tbl[data1] | 0b00000100 : tbl[data1]; SEG1 = ON; break; case 1: seg_flg = 2; SEG1 = OFF; PORTB = (dot == 2) ? tbl[data2] | 0b00000100 : tbl[data2]; SEG2 = ON; break; case 2: seg_flg = 0; SEG2 = OFF; PORTB = (dot == 3) ? tbl[data3] | 0b00000100 : tbl[data3]; SEG3 = ON; break; } } } //********************************************************************** unsigned long measurement(unsigned short channel) { static unsigned long dat; static unsigned int cnt; // dat = 0; for (cnt = 0; cnt < 1000; cnt++) { dat += Adc_Read(channel); } return (dat); } //********************************************************************** void main() { static char buf[16]; static double dat; // TRISA = 0b00111100; TRISB = 0b00000000; OSCCON = 0b01100000; // クロックを4Mhzに設定する。 ANSEL = 0b00000100; // A/D変換を使用する。 ADCON1.VCFG1 = 1; ADCON1.VCFG0 = 0; // TIMER0の設定 OPTION_REG.T0CS = 1; OPTION_REG.PSA = 0; OPTION_REG.PS2 = 0; OPTION_REG.PS1 = 1; OPTION_REG.PS0 = 0; // TIMER1の設定 PIE1.TMR1IE = 0; PIR1.TMR1IF = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 0; TMR1L = 0; TMR1H = 0; // CCPの設定 PIE1.CCP1IE = 1; PIR1.CCP1IF = 0; CCP1CON.CCP1M3 = 1; CCP1CON.CCP1M2 = 0; CCP1CON.CCP1M1 = 1; CCP1CON.CCP1M0 = 1; CCPR1L = 0x71; // 5msec...(1÷4000000)*4*8*625 CCPR1H = 0x02; // // SEG1 = OFF; SEG2 = OFF; SEG3 = OFF; seg_flg = 0; data1 = SPACE; data2 = SPACE; data3 = SPACE; dot = 0; // 割り込みを許可する。 INTCON.PEIE = 1; INTCON.GIE = 1; // T1CON.TMR1ON = 1; // while (1) { dat = measurement(2); dat = (dat / 1000.0) * 2.4365234375; //2.495V/1024...TL431 dat = (((dat - 300.0) / 10.0) - 30.0) * 10.0; IntToStr(dat, buf); dot = 2; if (dat < 0) LED = ON; else LED = OFF; data1 = ((buf[3] == ' ') || (buf[3] == '-')) ? SPACE : buf[3] - '0'; data2 = ((buf[4] == ' ') || (buf[4] == '-')) ? SPACE : buf[4] - '0'; data3 = ((buf[5] == ' ') || (buf[5] == '-')) ? SPACE : buf[5] - '0'; } } //********************************************************************** ===== 動作確認 ===== {{:imgpaste:202004:htmikan-20200430-100600.png?500}} 左側:A/D変換用の基準電圧(2.5V)を得るための、シャントレギュレータ(JRC431)です。 右側:温度センサー(LM61CIZ)です。 {{:imgpaste:202004:htmikan-20200430-100622.png}}{{:imgpaste:202004:htmikan-20200430-100625.png}} 私の作業小屋の温度を、測定してみました。 {{:imgpaste:202004:htmikan-20200430-100632.png?500}} 如何ですか? 蛇の目基板に実装すれば、かなりコンパクトに仕上がると思います。 このページは稲崎様の閉鎖した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]]