SWITCH文を使用しています。式に当たるのがB0〜B3の4ビットです。定義はB0(赤LED点灯)、B1(緑LED点灯)、B2(照度大)、B3(点滅)です。各ポートはアクティブ”L"ですので、CASEの定数式は各動作モードに当てはめると14(1110)、10(1010)、6(0110)2(0010)、13(1101)、9(1001)、5(0101)、1(0001)です。

LEDの電流は約20mA

LEDの電流は約5mAですがギラギラしています。

LED固定文字表示機

パーシャルとは

1ドットあたり縦に2LED使用しています。

 多くのLEDを使用すれば文字を表現することができます。LEDで漢字表示に掲載した256ドット分のLED(フルドット)を使用すればJIS第一水準の漢字はほとんど表現できるのですが、文字を変える必要のない場合、使用しない部分のLEDは、点灯しないので最初から配置しません。又、材料費、生産コストにも響いてきます。そのため、最初からフォントに必要な部分だけLEDを使います。それをパーシャル表示機といいます。ガソリンスタンドやコイン駐車場でよく見かけます。”パーシャル”は英語の”PARTIAL”部分的という意味です。フルドットの表示機で固定文字だけを表示した場合、もう一つ問題があります。それはフルドットの表示機で長時間にわたり固定文字を表示したあと、フルドットで点灯させると表示しないはずの固定文字のフォントが影のように読み取れてしまうことです。固定文字のLEDが、固定文字を構成しない部分のLEDに比べて、通電時間が長いため輝度が劣化するスピードが異なり、輝度劣化したLEDで文字のフォントを形成してしまうからです。時がたつほど顕著になります。従って、フォントを変えない場合はパーシャルにするのですが、どうしてもフルドットにする必要がある場合は、ソフトでフォント全体を定期的にずらせるという方法もあります。もっとも、パーシャルではカラム、ローの制御は必要ありませんので、簡単なものは電源、抵抗、LEDだけで構成できます。しかし、パーシャルだからといってLEDを並べて電源に繋げば良いというものではありません。まず、安全面から直接に商用電源に繋ぐのでなく低圧(5〜24V)の直流電源を使用するべきです。これらを考慮してPICを使用したパーシャル満空表示機を作りました。

概要は以下のとおりです。
1.PIC16F84A(最もポピュラーなPIC)を使用
2.表示内容は満(赤)、空(緑)
3.周囲の明るさに応じ発光輝度を自動的に変えることができる。
4.目立たせるため点滅させることができる。
輝度を変えるためにLEDの電流のDUTYを変えています。
詳細はソースファイルに示してあります。

トップページに戻る

回路図

ソフトの説明

ソースリスト

 満(RED)、空(GREEN)、点滅(BLINK)はアクティブ・ローです。CDSは周囲が暗くなれば抵抗が上がるので、RB2のスレショールドより下がりLEDの輝度を下げます。LEDはアノードコモンでカソードをパワーMOSで引きこんでいます。

 LEDに直列の抵抗は、使用するLEDの種類により変わります。勿論、電源電圧によっても変わりますが、PICが5Vですので5Vに合わせました。LEDの電圧降下は窒化ガリウム系は3.3V,ガリウム砒素系は2.2Vとして電流が20mAを超えない限度で抵抗値を決めます。窒化ガリウム系のピュアグリーンのLEDは数oAでも非常に輝度が高いので、赤のガリウム砒素系のLEDの輝度とのバランスを考えて、電流の設定をする必要があります。

#include <16f84A.h>
#fuses HS,NOWDT,PROTECT
#use delay(clock=5000000)
// Active Low:B port
void main()                        //B0 満信号
  {                           //B1 空信号
   int i;
   while(1)                      //B2 照度信号
    {                       //B3 点滅信号
     switch(input_b())
      {
       case 14:                    //満点灯
        output_bit(PIN_A0,1);
        delay_ms(2);
        output_bit(pin_A0,0);
        delay_ms(1);
        break;
       case 10:                  //満・照度信号
        output_bit(PIN_A0,1);
        delay_ms(1);
        output_bit(PIN_A0,0);
        delay_ms(2);
        break;
       case 6:                  //満・間欠点灯
        output_bit(PIN_A0,1);
        delay_ms(500);
        output_bit(PIN_A0,0);
        delay_ms(500);
        break;
       case 2:                //満・照度・間欠点灯
        for(i=0;i<0x40;i++)
         {
          output_bit(PIN_A0,1);
          delay_ms(1);
          output_bit(PIN_A0,0);
          delay_ms(2);
         }
         output_bit(PIN_A0,0);
         delay_ms(500);
         break;
       case 13:
         output_bit(PIN_A1,1);            //空を点灯
         break;
       case 9:                  //空・照度信号
         output_bit(PIN_A1,1);
         delay_ms(1);
         output_bit(PIN_A1,0);
         delay_ms(2);
         break;
       case 5:                   //空・間欠信号
         output_bit(PIN_A1,1);
         delay_ms(500);
         output_bit(PIN_A1,0);
         delay_ms(500);
         break;
       case 1:                 //空・照度・間欠点灯
         for(i=0;i<0x40;i++)
          {
           output_bit(PIN_A1,1);
           delay_ms(1);
           output_bit(PIN_A1,0);
           delay_ms(2);
          }
         output_bit(PIN_A1,0);
         delay_ms(500);
         break;
       default:
         output_a(0x00);
         break;
       }
     }
   }