7MHz 1/4λのバーチカルアンテナに延長コイルを追加して、3.5MHzと3.8MHzのバンド追加を構想した。以前もリレーで切り替え使用していた回路がありましたが、今回は、アンテナがどのバンドになっているかをLEDを点灯表示させる表示回路を考えてみました。案外と2つのSWでバンドを切り替えを行うには、少し条件がいります。SW1とSW2で制御するのですが、SW1で7MHzになっているときは、SW2が効かないようにしなければなりません。SW1が3.5/3.8MHzに選択されているときだけ、SW2が効くようにするためには、やはり論理回路で組むのが得策です。

真理値表です。
----入力----    -----出力--------
SW1   SW2     7    3.5    3.8
0        0      1    0    0
0        1            1      0      0
1        0            0      1      0
1        1            0      0      1

最初に考えた論理回路です。
(ANDゲート,INV,BUFの3種類で構成です。)
イメージ 1

上記の制御回路にて、SWトランジスタ回路でリレー2個を制御します。3.8MHzはLED表示用のみです。
イメージ 2

リレー2個でバーチカルアンテナに延長コイル2個を付けて3.5MHzと3.8MHzを切り替えます。
イメージ 3

上記は、大まかな回路ではありますが、現実的な面で、コントローラでANDゲートをそのまま使用してもいいのですが、汎用のNANDゲート(4011)にて構成するように書き換えてみました。(ANDとNOTを書き換えです。H!)
イメージ 4

しかしながら、4011のNAND(2入力4個入り)を4個も用意する必要があります。てがるな、4011ではありますが、BUFをふくめてもゲートIC数が5個です。かえって最初の回路のAND回路の場合のほうが4個ですみます。

ここで、発想の転換で、ハードではなく、ソフトウェアでゲート回路の動作をプログラミングしてみました。回路的には、2入力SWに対して3出力が制御できれば良いことになります。一番使いやすい8ピンのPIC 12F675等がマッチします。
簡単に、プログラムのコーディング構想として、ササッと書いたものが次になります。

IF SW1=0 AND SW2=0
THEN OUT1=1,OUT2=0,OUT3=0 ;7MHz
IF SW1=0 AND SW2=1
THEN OUT1=1,OUT2=0,OUT3=0 ;7MHz(SW2が効かないようにしてます)
IF SW1=1 AND SW2=0
THEN OUT1=0,OUT2=1,OUT3=0 ;3.5MHz
IF SW1=1 AND SW2=1
THEN OUT1=0,OUT2=0,OUT3=1 ;3.8MHz
上記の仕様でPIC12F675のコーデイングを行いました。

設定部は省略でメインのコーディングです。
******************************************************
int main(int argc, char** argv) {
    OPTION_REG = 0b00000010;//prescale 8 デジタルI/Oに内部プルアップ抵抗を使用する
    CMCON      = 0x07;       //コンパレータは使用しない
    ANSEL      = 0b00000000; //アナログは使用しない(全てデジタルI/Oに割り当てる)
    TRISIO     = 0b00110000; //GP4,GP5だけ入力その他のピンは出力に割り当てる(GP3は入力のみ)
    WPU        = 0b00110000; // GP4,GP5 PULLUP
    GPIO       = 0b00000000;  //出力ピンの初期化(全てLOWにする)
    while(1)
    {
        if ((GPIO5 == 1) && (GPIO4 == 1 )){  //2番,3番ピン(GP5,GP4)のスイッチが押されたか?
            Delay_ms(10);
            GPIO2 = 0;     
            GPIO1 = 0;
            GPIO0 = 1;     //7MHz Nominal
        }else
            {
                if ((GPIO5 == 0) && (GPIO4 == 1 )){  // 7,3.5MHzSW on(0)  3.5,3.8MHzSW off(1)
                    Delay_ms(10);
                    GPIO2 = 0;     
                    GPIO1 = 1;      // 3.5MHz
                    GPIO0 = 0;
                }else{
                        if ((GPIO5 == 0) && (GPIO4 == 0 )){  //7,3.5MHzSW on(0)  3.5,3.8MHzSW on(0)
                            Delay_ms(10);
                            GPIO2 = 1;     //3.8MHz
                            GPIO1 = 0;     
                            GPIO0 = 0;
                        }else{
                                if ((GPIO5 == 1) && (GPIO4 == 0 )){ //7,3.5MHzSW off(1) 3.5,3.8MHzSW on(0)
                                    Delay_ms(10);
                                    GPIO2 = 0;
                                    GPIO1 = 0;
                                    GPIO0 = 1;  //7MHz
                                }else{
                                    GPIO2 = 0;
                                    GPIO1 = 0;
                                    GPIO0 = 0;
                                    Delay_ms(10);
                                }
                            }  
                    }
            }
    }
}
***********************************************************
簡単なIF分でのコーディングのみで出来てしまいます。
PIC12F675の実験時の実際の回路構成です。ブレッドボードに組みました。
イメージ 5

コーディング後にライターで書き込みです。
イメージ 6

コーディング、書き込み、チェックを繰り返してデバッグして完成した動作の動画です。仕様通りに動作してくれています。

PIC12F675を使用した場合の回路は下記になります。
イメージ 7
たった1個のPICで、先のゲート回路と同じ動作が出来てしまいました。やはりソフトウェアのほうが回路もシンプルになります。
久々にPICコーディングしました。Windows10にインストールしたMPLABでコーディングしましたが、最初PICの認識ができなくて、あせりました。単純に端子の酸化による接触不良がトラブルの原因でした。端子を数回ゴシゴシと酸化膜をはがすことで解決しました。久々に使用するとこんなことになります。Hi!

ゲート回路を考えること自体が最高に面白いですが、今はやはりハードよりソフトウェアのほうが、全体の作業も楽で、簡単になり、仕様も任意に変更対応できるので望まれる時代のようです。しかしながら、久々に頭の体操になりました。