====== デジタル電圧計(真空管B電圧用) ====== ===== 概要 ===== 以前に真空管アンプ用別電源を作成しましたが、電圧計が付いていないので、今回、高電圧を測定可能なデジタル電圧計を作成しました。測定範囲は0V~999Vとしましたので、大概の真空管装置(ラジオ、アンプ等)で使用可能です。 ===== 動作原理 ===== 回路図を見ても分かりますように、とても簡単な構成としました。 先ずは、入力電圧を抵抗で分圧(約1/200)します。 つまり、1000V→5Vにします。 その分圧した電圧をPICでA/D変換し、7セグメントLEDで3桁表示します。 使用したLEDは、秋月電子通商で200円で購入しました、7セグLED 超高輝度赤色3文字(カソードコモン)です。 PICの能力上は、1023Vまでいけるのですが、4桁目は使用していません。 ソフトウエアでは、A/D変換を100usec周期で10回取り込みその平均を求めます。 そして求めた結果を7セグメントLEDでダイナミック点灯させます。点灯の周期は約1msecにしましたので殆どちらつきはありません。 ===== 回路図 ===== {{:imgpaste:202004:htmikan-20200429-163816.png}} ===== ソースコード ===== //********************************************************************** /* */ //********************************************************************** #define DATA1 PORTB.F1 #define DATA2 PORTB.F2 #define DATA3 PORTB.F3 #define SEGA PORTA.F0 #define SEGB PORTA.F6 #define SEGC PORTB.F5 #define SEGD PORTB.F7 #define SEGE PORTA.F1 #define SEGF PORTA.F7 #define SEGG PORTB.F4 #define SEGH PORTB.F6 void data_0() { SEGA = 1; SEGB = 1; SEGC = 1; SEGD = 1; SEGE = 1; SEGF = 1; SEGG = 0; SEGH = 0; } void data_1() { SEGA = 0; SEGB = 1; SEGC = 1; SEGD = 0; SEGE = 0; SEGF = 0; SEGG = 0; SEGH = 0; } void data_2() { SEGA = 1; SEGB = 1; SEGC = 0; SEGD = 1; SEGE = 1; SEGF = 0; SEGG = 1; SEGH = 0; } void data_3() { SEGA = 1; SEGB = 1; SEGC = 1; SEGD = 1; SEGE = 0; SEGF = 0; SEGG = 1; SEGH = 0; } void data_4() { SEGA = 0; SEGB = 1; SEGC = 1; SEGD = 0; SEGE = 0; SEGF = 1; SEGG = 1; SEGH = 0; } void data_5() { SEGA = 1; SEGB = 0; SEGC = 1; SEGD = 1; SEGE = 0; SEGF = 1; SEGG = 1; SEGH = 0; } void data_6() { SEGA = 1; SEGB = 0; SEGC = 1; SEGD = 1; SEGE = 1; SEGF = 1; SEGG = 1; SEGH = 0; } void data_7() { SEGA = 1; SEGB = 1; SEGC = 1; SEGD = 0; SEGE = 0; SEGF = 1; SEGG = 0; SEGH = 0; } void data_8() { SEGA = 1; SEGB = 1; SEGC = 1; SEGD = 1; SEGE = 1; SEGF = 1; SEGG = 1; SEGH = 0; } void data_9() { SEGA = 1; SEGB = 1; SEGC = 1; SEGD = 1; SEGE = 0; SEGF = 1; SEGG = 1; SEGH = 0; } void data_null() { SEGA = 0; SEGB = 0; SEGC = 0; SEGD = 0; SEGE = 0; SEGF = 0; SEGG = 0; SEGH = 0; } void data_set(char c) { switch (c) { case '0': data_0(); break; case '1': data_1(); break; case '2': data_2(); break; case '3': data_3(); break; case '4': data_4(); break; case '5': data_5(); break; case '6': data_6(); break; case '7': data_7(); break; case '8': data_8(); break; case '9': data_9(); break; default: data_null(); break; } } void main() { static unsigned int ad0, ad1, cnt; static char buf[10]; // CMCON = 0b00000111; ANSEL = 0b00000100; TRISA = 0b00000100; TRISB = 0b00000000; OSCCON = 0b01110000; // PORTA = 0b00000000; PORTB = 0b00000000; // while (1) { ad0 = 0; for (cnt = 0; cnt < 10; cnt++) { ad0 += Adc_Read(2); Delay_us(100); } ad0 = ad0 / 10; IntToStr(ad0, buf); // for (cnt = 0; cnt < 100; cnt++) { data_set(buf[3]); DATA1 = 1; Delay_ms(1); DATA1 = 0; // data_set(buf[4]); DATA2 = 1; Delay_ms(1); DATA2 = 0; // data_set(buf[5]); DATA3 = 1; Delay_ms(1); DATA3 = 0; } } } //********************************************************************** ===== 動作確認 ===== 電源がOFFの状態です。0Vです。 {{:imgpaste:202004:htmikan-20200429-163941.png?500}} 電源がONの状態です。無負荷状態では338Vでした。 {{:imgpaste:202004:htmikan-20200429-163957.png?500}} {{:imgpaste:202004:htmikan-20200429-164009.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]]