====== デジタル電圧計(真空管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]]