目次

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

概要

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

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

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

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

<仕様>

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

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

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

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

回路図

ソースコード

led_12_4.c
//**********************************************************************
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の点灯数が信号の強弱に合わせて変化します。

著作権表示 copyright notice

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