2026年2月17日火曜日

PE4302ステップアッテネータ

AliexpressでPE4302ステップアッテネータがある。ローコストかつDC-4GHzと魅力的でパラレルI/F仕様。実験用に購入した。3V系でコントロールする様なので、Attiny1614 3.3Vを使った。



回路図


Attint1614ボードは、GQPオリジナルのレギュレータ、UPDI書込み端子付き仕様である。パラレルポートをAポートに割り付けたので、PA2からPA7を使った。


スケッチ

メモリー機能とPE4302挿入損失補正(1.5dB)。操作は、UP/DOWNで0.5ステップ設定が出来る。PE4302は、0.5dB~31.5dB設定なので、挿入損失分を考慮すると2.0dB~33.0dBのアッテネータである。


//////////////////////////////////////////////////////////////////////////////
//       Copyright©2018.JA2GQP.All rights reserved.
//            PE4302 paralel Attenater control        
//                                                    2026/2/9
//                                                    JA2GQP    
//////////////////////////////////////////////////////////////////////////////

#include <Tiny4kOLED.h>
#include "font/Tlcdnums14x24.h"
#include <EEPROM.h>

//------------------------ Define value -------------
#define SW_UP       4                
#define SW_DOWN     5                

#define DEF_Att     17              // 8.5db(8.5+1.5=10dB)
#define Loss        3               // Insertion Loss 1.5dB

//---------- EEPROM Memory Address ------------------
#define Eep_Init    0x00            // Eep Init(1byte)
#define Eep_Att     0x02            // REPT sw(1byte)

//---------- Memory Define --------------------------
int att_level = DEF_Att;            // -10dB
unsigned long Time_Passd;           // control timer
const byte Int_End = 73;            // Initial end code

//------------------------ Setup --------------------

void setup() {
  PORTA.DIRSET = B11111100;         // PA7,PA6,PA5,PA4,PA3,PA2
                                    // PA1,PA1 <<<read port>>>
  PORTA.OUT = B00000011;

  pinMode(SW_DOWN, INPUT_PULLUP);
  pinMode(SW_UP, INPUT_PULLUP);

  oled.begin();
  oled.clear();
  oled.on();

  if(EEPROM.read(Eep_Init) != Int_End){ // Eep initialaz
    delay(10);
    eep_init();
    init_end_disp();
    delay(2000);
  }
  else{
    if(digitalRead(SW_UP) == LOW){
      delay(10);
      eep_init();
      init_end_disp();
      delay(2000);
      while (digitalRead(SW_UP) == LOW);
    }
  }
  att_level = EEPROM.read(Eep_Att);

  oled.clear();
}

//------------------------ Main ---------------------

void loop() {
  if (digitalRead(SW_UP) == LOW) {      // UP_SW on?
    att_level++;
    delay(50);
    while (digitalRead(SW_UP) == LOW);
    Time_Passd = millis();              // Timer start
  }

  if (digitalRead(SW_DOWN) == LOW) {    // dpwn SW on?
    att_level--;
    delay(50);
    while (digitalRead(SW_DOWN) == LOW);
    Time_Passd = millis();              // Timer start
  }

  att_level = constrain(att_level,1,63);
  if(Time_Passd+2000 < millis()){       // 2 second over?
    EEPROM.write(Eep_Att,att_level);
  }
  att_disp(att_level + Loss);                  // level display
  PORTA.OUT = att_level << 2;           // port out
}

//----------  EEPROM Initialization -----------------

void eep_init(){
  int i;

  for (i=0;i<16;i++)                   // 0 clear(128byte)
    EEPROM.write(i, 0);

  EEPROM.write(Eep_Att,DEF_Att);      // Repeater off
  EEPROM.write(Eep_Init,Int_End);       // Init end set(73)  
}

//---------- Attenator display ----------------------

void att_disp(int lv) {
int lev;

  oled.setFont(&Tlcdnums14x24);
  oled.setCursor(16, 0);
  lev = lv / 2;

  if(lev < 10)
     oled.print(':');
  oled.print('-');
  oled.print(lev);
  oled.print('.');
  if(lv & 0x01)
    oled.print('5');
  else
    oled.print('0');

  oled.setFont(FONT8X16);
  oled.setCursor(96, 2);
  oled.print("dB");
}

//---------- Initialayze end display ----------------

void init_end_disp() {
  oled.setFont(FONT8X16);
  oled.setCursor(1, 0);
  oled.print("Initialayze end");
}

結果

PE4302ボードのコネクタは、
直出した。
1GHz帯でHP-432Aを使って
測定したが問題なかった。
耐入力電力24dBm(250mW)。







ダウンロード

JA2GQP's Download siteのPE4302フォルダからダウンロードできる。

  









0 件のコメント: