Dip_RotaryでLED点灯切換
 
複数個のLEDの個々の点滅をスイッチで切り替える場合、単極単投スイッチを使うとLEDの個数分のスイッチが必要です。DIPスイッチでも同数の接点が必要になります。ディップロータリースイッチを使用するとスイッチの個数を大きく減らすことができます。このスイッチの中身を調べたうえで、PICと1個のディップロータリースイッチで6個のLEDを切換える単純な回路を作りました。

          プログラムの説明
 使用したDIPロータリースイッチはKELのKDS10−422で0から9までの2進化10進出力です。スイッチの1・2・4・8がPICのRA0からRA3につながっていますのでスイッチの値をAポートで直接読み込んだものがswitchの式になります。
caseの定数式にはAポートの入力値を、文にはLEDのつながったBポートの出力アドレスを書きます。
switchは、式の値によって分岐させる文で書式は
switch(式){
 case 定数式:
    文;
   break;
になっています。

        ソースリスト
#include <16F648A.h>
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT

main()
  {
   while(1)
     {
      set_tris_a(0xFF);
      set_tris_b(0x00);

      switch(input_a() & 0x0F)
      {
       case 0x0E:            //00001110 Dip_Rt1
        output_b(0x01);         //00000001
        break;
       case 0x0D:            //00001101 Dip_Rt2
        output_b(0x02);         //00000010
        break;
       case 0x0C:            //00001100 Dip_Rt3
        output_b(0x04);         //00000100
        break;
       case 0x0B:            //00001011 Dip_Rt4
        output_b(0x08);         //00001000
        break;
       case 0x0A:            //00001010 Dip_Rt5
        output_b(0x10);         //00010000
        break;
       case 0x09:            //00001001 Dip_Rt6
        output_b(0x20);         //00100000
        break;
       }
     }
  }

回路の説明

      スイッチの構造
 
ディップロータリースイッチは右の写真のような外観で今回使用するものは2進化10進出力するものです。底にコモン(c)、1、2、4、8のリード端子が5本出ており、下表のような関係になっています。
 列の数字1,2,4,8はスイッチの端子で、行の数字0〜9はスイッチの窓に表示される数字です。○はCと接続されていることを表し、×はCと切り離されていることを表します。

× × × × ×
× × × × × ×
× × × × × ×
× × × × × × × ×
トップページへ戻る

 PICのAポートをDIPロータリーに接続し、Bポートでダーリントントランジスタアレーを通じてLEDを駆動しています。内部クロックを使用していますので、外付けの発振子は使用していません。トランジスタの負荷はLEDと電流制限用の抵抗だけです。貰い物のプリント基板がありましたので、この基板を改造して使用することにしました。LEDは6個に限定されていますが、DIPロータリースイッチの数字に対応した場所のLEDを点灯するようにしました。今回使用したPICは648Aですが、84Aでも可能です。ただ、貰った基板が648Aとして設計されたもので、外部発振回路のないものでしたので84Aが使えませんでした。トランジスタアレーはサンケンのSTA403Aで、Vceo 100V,4W,4A, hFE 1000以上で4回路入っています。完全なオーバースペックなのですが、これもついでに貰いましたので使用しました。ステッピングモーターに最適ではと思っています。勿論、抵抗とLEDを直接ポートに接続できますが、トランジスタアレーを入れることで負荷をLED以外のモーター等にすることもできます。

RA0〜RA3は10kΩでプルダウンしています。DIPロータリースイッチのコモンをVccに接続して、アクティブHにしていますので、アクティブでないスイッチの出力端子はオープンで、PICの入力ポートからみればフローティングになり不安定になります。そのため抵抗でプルダウンしています。
回路図ではLEDの直列抵抗は全て100Ωになっていますが、実験では6種類のLEDを接続しましたので、その種類により抵抗値は異なります。赤2種類、黄、青、緑、白のLEDでしたが、赤と黄はGaAS系ですので、
Vfが2.2V,他はGaN系ですので3.3Vとして10mA流すため各々270Ωと180にしました。