ひと眠りして、目がさえたので、先のアンテナコントロール回路の実験がうまくいったのでそのゲート回路について防備録兼ねてのブログ投稿です。
3バンドのバーチカルアンテナの回路を4バンドにすべく検討しました。理由は単純に1.9Mz(1.8MHz)も追加したい為です。今までの、3.5MHz,3.8MHz,7MHzの切り替えの回路をそのまま使いたい思いがあったのですが、物理的に使用したPICのPIC12F675(8P)では3入力4出力を要するのでポート1つが足りない勘定です。そこを何とか同じPICでやろうという訳です。先に検討したPICでの実際のリレーコントロール出力をみると以下の3通りです。
7MHz 、3.8MHz、 3.5MHzの順(1は出力ON 0はOFF)
100
010
001
ここにない状態を1つ付けたしたいのですが、一番簡単なのが、次の
000
です。
出力がない状態を1.9MHzとするように3入力のSWをプログラムします。
なぜ、000にしたかというと、ゲートにてPICで出力できない(ポートが足りない)分をハードでカバーするためです。単純に000と3出力が出たときに出力するゲート回路を組めばいいのです。しかも、000 3出力を入力として出力1を出すだけです。そのまま単純に真理値表からNORゲートが当てはまります。私の場合は、手持ちゲートICの都合から実際に組むにはNORをNAND回路に変換して、汎用ゲートICで構成です。

前のPIC&コントロール回路を変更します。

アンテナの切り替えリレー部も変更します。各バンド毎の設定に換えました。実際に調整が楽だったためです。

実際のゲート実験回路です。実験というより、単純に配線しただけですが。。。

前作成の回路とドッキングです。

以下、PIC12F675の3入力にての4バンドコントロールプログラムです。7MHzにSWで選択されているときは、SW2,SW3は押しても出力は7MHzから変わらないようにプログラムしてます。SW2,SW3の同時押しでも同じです。なお、電源が入った状態では、バーチカルアンテナの7MHzのデフォルト設定です。
int main(int argc, char** argv) {
OPTION_REG = 0b00000010;//prescale 8 デジタルI/Oに内部プルアップ抵抗を使用する
CMCON = 0x07; //コンパレータは使用しない
ANSEL = 0b00000000; //アナログは使用しない(全てデジタルI/Oに割り当てる)
//TRISIO = 0b00110000; //GP4,GP5だけ入力その他のピンは出力に割り当てる(GP3は入力のみ)
TRISIO = 0b00111000; //GP5,GP4,GP3だけ入力その他のピンは出力に割り当てる(GP3は入力のみ)
//WPU = 0b00110000; // GP4,GP5 PULLUP
WPU = 0b00110000; // GP5,GP4,GP3 MANUAL PULLUP
GPIO = 0b00000000; //出力ピンの初期化(全てLOWにする)
OPTION_REG = 0b00000010;//prescale 8 デジタルI/Oに内部プルアップ抵抗を使用する
CMCON = 0x07; //コンパレータは使用しない
ANSEL = 0b00000000; //アナログは使用しない(全てデジタルI/Oに割り当てる)
//TRISIO = 0b00110000; //GP4,GP5だけ入力その他のピンは出力に割り当てる(GP3は入力のみ)
TRISIO = 0b00111000; //GP5,GP4,GP3だけ入力その他のピンは出力に割り当てる(GP3は入力のみ)
//WPU = 0b00110000; // GP4,GP5 PULLUP
WPU = 0b00110000; // GP5,GP4,GP3 MANUAL PULLUP
GPIO = 0b00000000; //出力ピンの初期化(全てLOWにする)
while(1)
{
if ((GPIO5 == 1) && (GPIO4 == 1 ) && (GPIO3 ==1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1; //7MHz Nominal
}else{
if((GPIO5 == 1 ) && (GPIO4 == 1) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1;
}else{
if ((GPIO5 == 1) && (GPIO4 == 0 ) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0; // 3.5MHz
GPIO0 = 1;
}else{
if ((GPIO5 == 1) && (GPIO4 == 0) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1; //7MHz
}else{
if ((GPIO5 == 0) && (GPIO4 == 1 ) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0; //1.9MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if ((GPIO5 == 0) && (GPIO4 == 0 ) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0; //1.9MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if ((GPIO5 == 0) && (GPIO4 == 0) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 1; //3.8MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if((GPIO5 == 0) && (GPIO4 == 1) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 1; //3.5MHz
GPIO0 = 0;
}else{
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 0;
Delay_ms(10);
}
}
}
}
}
}
}
}
}
}
{
if ((GPIO5 == 1) && (GPIO4 == 1 ) && (GPIO3 ==1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1; //7MHz Nominal
}else{
if((GPIO5 == 1 ) && (GPIO4 == 1) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1;
}else{
if ((GPIO5 == 1) && (GPIO4 == 0 ) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0; // 3.5MHz
GPIO0 = 1;
}else{
if ((GPIO5 == 1) && (GPIO4 == 0) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 1; //7MHz
}else{
if ((GPIO5 == 0) && (GPIO4 == 1 ) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0; //1.9MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if ((GPIO5 == 0) && (GPIO4 == 0 ) && (GPIO3 == 0)){
Delay_ms(10);
GPIO2 = 0; //1.9MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if ((GPIO5 == 0) && (GPIO4 == 0) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 1; //3.8MHz
GPIO1 = 0;
GPIO0 = 0;
}else{
if((GPIO5 == 0) && (GPIO4 == 1) && (GPIO3 == 1)){
Delay_ms(10);
GPIO2 = 0;
GPIO1 = 1; //3.5MHz
GPIO0 = 0;
}else{
GPIO2 = 0;
GPIO1 = 0;
GPIO0 = 0;
Delay_ms(10);
}
}
}
}
}
}
}
}
}
}
// 1mS x ms ウェイトルーチン
static void Delay_ms(unsigned char ms){
unsigned char c;
for (c=ms; c>0 ;c--){
Delay_1ms();
}
}
static void Delay_ms(unsigned char ms){
unsigned char c;
for (c=ms; c>0 ;c--){
Delay_1ms();
}
}
// 1ms ウエィトルーチン
static void Delay_1ms(){
unsigned int cnt;
unsigned int i;
cnt = 76;
static void Delay_1ms(){
unsigned int cnt;
unsigned int i;
cnt = 76;
for (i=0; i<cnt ; i++){
NOP();
}
}
NOP();
}
}
余談ですが、4バンド用で、SW3を外せば(使わなければ)、前の3バンドの切り替えそのまま使用できます。今回はオプション的な追加でもあります。
つづく?