簡易レベルメータ(LED×12個)

概要

8ピンのPIC(PIC12F683等)は、ポート数が少ないため多くのLEDを接続点灯させることが出来ません。 従って、多数のLEDを点灯させるようなレベルメータには、あまり向いていません。

そこで、少ないポート数で、より多くのLEDを点灯させる方法はないものかと調べてみますと、“先人の知恵“を発見しました。

マイクロチップ社のアプリケーションノート「TB029」では、4個のポートで、12個のLEDを点灯させる方法が掲載されていました。

早速、これを応用した、簡易レベルメータを製作してみました。

<仕様>

入力チャネルは、1チャネルとします。

点灯させるLEDは、12個とします。

入力電圧範囲は、0~5Vとします。

動作原理(ハードウェア)

LEDの接続 下図のように、4個のポートに12個のLEDを接続します。 LED1~LED12までを点灯させる時の、各ポートの設定は、下表のようになります。

ポート1	ポート2	ポート3	ポート4
LED1	1	0	-	-
LED2	0	1	-	-
LED3	1	-	0	-
LED4	0	-	1	-
LED5	1	-	-	0
LED6	0	-	-	1
LED7	-	1	0	-
LED8	-	0	1	-
LED9	-	1	-	0
LED10	-	0	-	1
LED11	-	-	1	0
LED12	-	-	0	1

※“-“は、ポートを入力モードにします。

動作原理(ソフトウェア)

アナログデータ変換処理
1チャネル(AN2使用)を、A/D変換(10ビット)します。

LED点灯処理
A/D変換した値(0~1023)を、79で割って、0~12の値に変換します。
変換した値に応じて、LEDをダイナミック点灯(周期≒1msec)させます。

回路図

ソースコード

//********************************************************************** char table_io[13] = { 0b00000000, //Led non 0b00000001, //Led 1 0b00000010, //Led 2 0b00000001, //Led 3 0b00010000, //Led 4 0b00000001, //Led 5 0b00100000, //Led 6 0b00000010, //Led 7 0b00010000, //Led 8 0b00000010, //Led 9 0b00100000, //Led 10 0b00010000, //Led 11 0b00100000 //Led 12 }; char table_tris[13] = { 0b00111111, //Led non 0b00111100, //Led 1 0b00111100, //Led 2 0b00101110, //Led 3 0b00101110, //Led 4 0b00011110, //Led 5 0b00011110, //Led 6 0b00101101, //Led 7 0b00101101, //Led 8 0b00011101, //Led 9 0b00011101, //Led 10 0b00001111, //Led 11 0b00001111 //Led 12 }; //********************************************************************** //■■■メイン関数■■■ void main() { int cnt, ad; // OSCCON = 0b01110000; CMCON0 = 0b00000111; ANSEL = 0b00000100; TRISIO = 0b00001001; // for (cnt = 0; cnt <= 12; cnt++) { TRISIO = table_tris[cnt]; GPIO = table_io[cnt]; Delay_ms(100); } // while (1) { ad = Adc_Read(2); ad /= 79; for (cnt = 0; cnt <= ad; cnt++) { TRISIO = table_tris[cnt]; GPIO = table_io[cnt]; Delay_ms(1); } } } //**********************************************************************

動作確認

※配線がLEDを跨っているので少し分かりずらいです

10バーLEDアレイを2個使用しました。(8個のバーは使用しません)

12バーを全てを点灯させてみました。 アナログ入力端子に信号を入れるとLEDの点灯数が信号の強弱に合わせて変化します。

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