目次

デジタル電圧計(真空管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にしましたので殆どちらつきはありません。

回路図

ソースコード

powerMeter.c
//********************************************************************** 
 
/*
 
*/
 
//********************************************************************** 
 
#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です。

電源がONの状態です。無負荷状態では338Vでした。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details