JH3DRN 趣味の徒然

主にアマチュア無線、電子工作について書いてます.

新しい半田ごて 買った

経緯

私は昔から電子機器や無線機の自作を楽しんで来た経緯から半田ごてには並々ならぬこだわりがある。今現在、何本持っているかも分からない状態ではるが、常に良いコテを探し求めているのは間違いない。色々使ってきて今使っているのはこれ。

太平洋電機さんのRX-802
早い立ち上がりで素早い作業が出来るので、今の所はこれをメインコテとして工作していた。そんな折り、半田コテ:もう一方の基幹メーカー HAKKO さんからリユースした半田コテの案内が来ていて、うーーーーん の末購入してしまった。半田コテの両巨頭メーカーなので間違いはないと思うので、これから色々使っていきたいと思う。今回このコテを購入した大きな理由はリワーク用のコテ先が数多くラインナップされている事。今は必要ないが将来的に必要かもと思い購入に至った。新品なら4.5万円くらいするのだが、リユースと言う事で1.9万円で購入出来た。で、購入したのがこれ。
HAKKO社さんのコテ FX-951-51
オプションのコテ先も一杯あるし、これからが楽しみな設備にになりそう。

紙QSL数百枚 書く & 追加で自作

経緯

私は基本的に紙のQSLをビューロ経由で送る事にしている。これは紙QSLが特に欲しい訳ではなく、完全に自己満足で「世界の何処かで誰かがこの紙QSLを見てくれている,,,」と思うのが楽しいからである。昔に比べて印刷コストも下がっているしビューロなら送料もそんなに掛からない。

今週の作業は

とは言うものの、随分サボっていて先週今週と集中してカードを書いた。以前に書いた通り、RumlogNGからのadifファイルを変換してコール順にシールを印刷しているのでカルタ取りは必要ないがやはりサインは必要だと思うのと、海外局はマネージャーが存在するので怪しい局はQRZ.comで調べて " via ****** " 見たいに書いているとそれなりに時間が掛かった。恐らく5,600枚くらいになったと思う。

カードが足りない

実際何枚必要かと確認もせずに書き進めたのだが、途中で足りない事に気がついた。先日追加で注文したのだが到着まで時間が掛かりそうで待っていると気が滅入りそうなので足りない分、取りあえず印刷してみた。絵柄は以前に飛行機内から撮影した富士山。自分では気に入っているのだが。。。

自作QSLのデザイン

ExpertSDR3 Ver 1.0.5 Beta 公開される、が?

FBで見つけた

何時もの様にSunSDR2DXのFBを見ていると、”ExpertSDR3 V1.0.5 Release" との記事があったので早速DLした。インストールの前にEE社のフォーラムを見ると何やら怪しげな雰囲気。

  • Intel Mac Book Pro + Sonoma14.0 で動かすと画面が枠しか表示されない(ボタンは有るべき場所を押すと反応する)
  • E-_coder Plus が反応しない

など、余り良き書き込みは無い。迷ったが取りあえずインストールしてみた。ファイルを開くと見慣れないアプリが入っていた。

ESDR3 1.0.5 のアプリ

取りあえずインストールしてみた

インストールした結果は、

  • 画面は正常に表示された
  • E-Corder Plus は全く動かない

私の場合、E-Corderは必須なのですぐ、1.0.4 へ戻したが、それ以外でも「良かった!」と言う書き込みは皆無なので1.0.5へのバージョンアップはお勧めしない。 1.0,5に付いてはリリースノートも上がっていないので何が変わったのか? 追加されたアプリは何か? 良く分からないのでこの当たりの情報が整理されたら再度チャレンジしてみようと思う。(今はDXペディッション: 7O8AD, TJ9MD, 等がオペレーションしているのでβ版のテストに時間を掛けたくないし)

Keychron Q1 JIS Knob付き 使ってみた

経緯

この前の記事でQ1 Knob付きキーボードが何とかmacでJIS配列として使用出来る様になったと書いたがその他の機能に付いて補足したいと思う。まず大体の特徴はと言うと.

  1. Windows, mac 両方で使用出来る(感じではmac主体の人がWin使う場合でも違和感無いって感じか?)
  2. QMK/VIAを使えば、macOSWindowsでも、直感的にお気に入りのキーをリマップ出来る
  3. ノブを含む任意のキーでマクロを作成することができる
  4. 兎に角重い!(約2kg、安定性は抜群)
  5. LED内蔵で好きな様に配色して光らせられる
  6. キーが半田付け不要で交換出来る(買った後で、もうちょっと重いキーとか欲しい時には便利か?)
  7. デフォルトで付いているキーは茶軸で、まあこんなもんかと思う
  8. マニュアル、WEB での資料は多いがちょっとわかり難い.
レイヤと言う考え方

macWindows両方で対応しているのが、レイヤと言う考え方。ざくっと言うと、「Fn」キーを押さない状態と押した状態で、キーマップを変える事が出来る。言葉で説明すると分かり難いので画面を貼る。下が " fn /MO(1) " キーを押さない状態の配列

レイヤ0 の配列とノブの定義(ボリュームコントロール
そしてこれが下が " fn /MO(1) " キーを押した状態の配列
レイヤ1の配列とノブの定義(音楽再生制御)
 レイヤ1の ▽印はレイヤ0と同じと言う意味らしい。私の場合、文字編集が多いのでファンクションキーは通常設定で、レイヤ1で機能キーをして使う設定になっている。

ノブの制御

先の画面の下の方にノブの定義が写っている。ちょっと見にくいが上から、 Rotate Counterclockwise: KC_MPRV, Rotate Clockwise: KC_MNXT, Press Encoder: KC_MPLY となっていて、意味は 次の曲、前の曲、再生/停止 みたいな感じになる。(この設定は元から有った訳ではなく後から変更した設定)変更するには該当するボタンをクリックすると画面が表示される。

ノブの設定変更画面
 上の画面で言うと "KP_MPRV" を変更するのだが、最初何を入れたら良いのか分からず戸惑った。結論として下記URLで定義されているので、これを参考にして設定せよと言う事らしい。ただ、全ての項目が設定出来る訳ではないみたいだ。(このURLは後のマクロの項でも参照します)

VIA のキー定義

この定義表からキーを見つけて登録する(マクロも同じ)のだが、これも分かり難いよねえ〜。

マクロ定義

ざくっと言うと 幾つかのキーを同時に打つ場合にマクロに登録すると1つのキー(レイヤ1の場合は2つになるが)で再現出来る機能。(順番に押していく機能もあるので後述)。では実際に登録してみよう。macで良く使う 範囲指定画面コピー(Control + Shift + 4)をマクロ:M1 に設定する例として。まず、マクロメニューからM1を選択する。

マクロ画面を開く
 画面中央に有る " < / > " ボタンを押すと下記画面が表示される。予め先ほどのURLから "Control + Shift + 4” に該当する定義 "{KC_LSFT,KC_LGUI,KC_4} " をエディタ等に書いておく。順番に文字を打ちたい場合には記述を "{KC_4}{KC_5}{KC_6},{KC_7}" と書くとマクロから出力される文字列は "456,7" となり、この組み合わせを使えばキーボードマクロ見たいなのも作れそう。
マクロ定義を書く
画面に文字列を貼り付けて画面右下の "Save" ボタンを押して保存する。次にキーマップの画面に戻って登録したいマクロキーをクリックする。
マクロキーを選択してクリック
 これで登録完了、中々の強敵でした。まあ、機能が多いマシンはどうしても使い方が複雑になってその分マニュアル表現が難しくなるのは否めないが、このバランスが旨く取れれば良い製品を的確にアピール出来ると思う。が、言うは易し 西川きよし。お後がよろしいようで。

キーボード交換してみた Keychron Q1 JIS Knob付き

経緯

1年くらい前の話。近くのアップル扱い店でキーボードを見ていた所、HHKBの新作とKeychron Q1 と言う右上にノブが付いたキーボードを発見した。HHKBは使っているのと、Keychron より高価だったので対象から外して、それでもKeychronはそこそこの値段がしてたのでその場では買わずに "直売なら安いかも" と 後日ネットで注文した。(今の値段と比べると6000円ほど安い。円安恐ろしや! 買った値段:¥28,215, 現在の価格:¥34,980)その後すぐには使用しないで寝かして置いたのだが、気が向いて使ってみた。外観はこんな感じ.

Keychorn Q1 JIS Knob

問題発生

このキーボードは、”オープンソースQMK/VIAを使用すると、お気に入りのキーを直感的に再マッピングし、任意のオペレーティングシステムmacOSWindows、またはLinux)で任意のキー(ノブを含む)を使用してマクロを作成し、流動的なワークフローを実現できる” との事。まずはmacに接続して叩いてみると、、、JISになっていない! シフト8で ”*” が表示されるし、シフト2で ”@” が表示される。で、VIAなるソフトを起動してみると画面がこんな感じ

VIA設定画面&キーマップ
んん? JIS配列じゃ無いじゃないか!? これから長い戦いが行われたのだが、全部書くと諄くなるので要点だけ書くが上の画面:設定が最終的にmacでJISキーボードとして使えた設定になる(変だよねえ)

    1. VIAの表示と実際にエディタに打ってみて、表示される文字は違う
    2. この状態でWindowsマシンに接続すると、シフト8で "(" が表示される
    3. VIAの設定画面はJISキーボードに完全対応してないのでは無いか?
    4. JISキーボードの場合、キーマップに表示される内容と実際に登録される値が違う場合があるらしい(あくまでも私の見解)

で、Windwosだと正常にJIS配列で使用出来て、macだとJISにならない件だが、

macでのキーボード設定

結論から言うとシステム設定でキーボードの種類を明示的に”JIS配列”にしないといけないらしい システム設定→キーボード→キーボードの種類を変更 でJIS配列に指定する。以下画面を参照されたい

システム設定からキーボードを選択
キーボードの識別:ここで右シフトの右横 "^" キーを押す
キーボード選択画面が表示されるので、JIS配列を選択する。
キーボードをJIS(日本)に設定する
これで完了。1日掛かってしまったが、Keychron Q1 は快適です。暫くはこのキーボードでいけそう。Windowsと共用しようかとも思ったが、同時に使う事が有るのでこれは止め。暫くは楽しめそうな予感が嬉しい。因みに右上のノブはデフォルトで音量調整になっており、そのまま使っている(意外と便利かも)マクロ機能とかは、追々使えるかもしれないけど、必要あるか???

5X3K Uganda DXPedi終了 SunSDR2PRO 使われていた

DXペディッションでよく使われる無線機

この所お空を賑わしていたDXペディッション:5X3K(Uganda) が10/7 に終了した。主催の皆様お疲れ様でした&有り難うございました。私も 10m と 15mでQSO出来て,無事ログもアップされていた。良かった良かったと思いペディッションのHPを見ると見慣れた無線機が。オペレーターDavid OK6DJ 氏の机の上に SunSDR2PRO , E-Corder が見受けられた。やっぱりペディッションでは人気があるのだなあと、一人納得。
5X3K OP OK6DJ

KBS京都専用ラジオを作ってみた:スケッチ編

備忘の為スケッチ掲載.

I2Cでコントロール出来るラジオ用IC : Si4730 は値段も安く、AM / FM が受信出来て便利なICでは有るのだが、このラジオを作った当時、参考になるスケッチが無かったので、データシート見ながら自分で関数作った覚えがある。余り参考にならないと思うが備忘をかねてスケッチを掲載する事にした。このスケッチは Arduino IDE 1.8.16 でコンパイル出来る事は確認したのだが、保証は出来ないので悪しからず。

/*------------------------------------------

  Si4730 FM/AM Radio use aitendo Si4730-M
    for Teke Bar Version
    Writen JH3DRN 2020/08/20   Fix Ver  

    PORTB (Digital pin 8 to 13) 
    PORTC (Analog pin) 
    PORTD (Digital pin 0 to 7)
    Pin 2   Interrupt 0 (use this case)
    Pin 3   Interrupt 1 (not use)
    Use Arduino IDE Version is 1.8.16

-------------------------------------------*/

#define   SCL_PIN 5               // SCL=pin A5
#define   SCL_PORT PORTC 
#define   SDA_PIN 4               // SDA=pin A4 
#define   SDA_PORT PORTC 
#define   I2C_FASTMODE  1
#include  <SoftI2CMaster.h>

#define   si4370_add      0xc6    // if use Wire.h Val=0x63
#define   Mode_sel        9       // Freq select DipSW 1
#define   Mode_AM         0
#define   Mode_FM         1
#define   Reset_Pin       3      // Module reset pin
#define   CHATR_CHK       15     // Chattaring check count
#define   CH_MAX_TOKYO    8      // Recive ch MAX Count of Tokyo
#define   CH_MAX_KYOTO    10     // Recive ch MAX Count of Kyoto
#define   CH_MAX_OSAKA    11
#define   Tokyo           0      // Area code Tokyo
#define   Kyoto           1
#define   Osaka           2

// variables will change:
int  buttonState = 0;         // variable for reading the pushbutton status
int  ch_pos;                  // Ch Position
int  ch_max;                  // Ch Count Max Value
int  area_code;               // 0=Tokyo,1=Kyoto etc
char printBuffer[32];         // Need 50 byte
int  ch_pos_now;              // Now Chanel Possition
int  ch_pos_befo;             // Beffore Chanel Possition
int  mode_now;                // Default Band is FM=1 AM=0
int  mode_befo;               // Before Band 
int  mode_cnt=0;

unsigned char Cmd_Si4730_power_up[] =   {0x01,0x41,0x05};            // Power on
unsigned char Cmd_FM_power_up[] = {0x01,0x10,0x05};                  // Power on FM Band
unsigned char Cmd_AM_power_up[] = {0x01,0x11,0x05};                  // POwer on AM Band
unsigned char Cmd_FM_Freq_Tune[] = {0x20,0x00,0x24,0x54,0x00};       // 93.00MHz  Init Freq
unsigned char Cmd_AM_Freq_Tune[] = {0x40,0x00,0x04,0x6e,0x00};       // 1134KHz   Init Freq
unsigned char Cmd_FM_DeemP[] = {0x12,0x00,0x11,0x00,0x00,0x01};      // Deemph 50μS
unsigned char Cmd_FM_Antena_In[] = {0x12,0x00,0x11,0x07,0x00,0x01};  // FM Antena Input
unsigned char Cmd_Set_Vol[] = {0x12,0x00,0x40,0x00,0x00,0x3f};       // Volume Control Max=0x3F

uint16_t Stations_kyoto_FM[CH_MAX_KYOTO] = {7650, 7700, 8100, 8150, 8400, 8940, 9190, 9490};
uint16_t Stations_kyoto_AM[CH_MAX_KYOTO] = {558, 666, 828, 945, 1008, 1143, 1215, 1242};

uint16_t *defaultStations;
/*
TBS Rsdio       954khz
Bunka Hoso      1134khz
Nippon Hoso     1242khz
NHK No1         594khz
NHK No2         693khz
Eagle810        810khz
RadioNippon    1422khz
*/
 
void setup() {
  
  pin_mode_init();            // Set Pin mode to init
  i2c_init();
  Serial.begin(115200);
  Serial.println("Start init");
  RadioModule_Reset();        // Chip Reset
  delay(100);
  freq_mode_set();  
  ch_pos=0;                   // Set Chanel possition is 0
  Set_Chanel(mode_now, ch_pos);
 }

void loop() {
  char option;
  char vol = 15;
  uint8_t  Retbtn;
  byte current_vol;
 
  ch_pos_befo = ch_pos;
  mode_befo = mode_now;
  
  while(1)
    {
    if(digitalRead(Mode_sel) == HIGH)   // Mode AM?
      {
      if(mode_now == Mode_FM)
      {
       mode_now=Mode_AM;
       mode_setting_AM();         
      }
      }else
      if(mode_now == Mode_AM)
      {
       mode_now=Mode_FM;
       mode_setting_FM();              
      }
      
    Retbtn=read_freq_dipsw();       // Read Dip SW
    ch_pos = Retbtn;                // Save now ch
    Serial.print(Retbtn);
    Serial.println();

    if(ch_pos_befo != Retbtn)
    {
    Set_Chanel(mode_now, ch_pos);
    ch_pos_befo = ch_pos;      
    }
    delay(1500);
    }
  delay(100);
}

void RadioModule_Reset(void)
{
  pinMode(Reset_Pin, OUTPUT);    // Reset pin D9 is output
  digitalWrite(Reset_Pin,LOW);
  _delay_ms(1);
  digitalWrite(Reset_Pin,HIGH);
  _delay_ms(1);  
//  PORT_LOW(PORTB,RADIO_RESET);
//  _delay_ms(1);
//  PORT_HIGH(PORTB,RADIO_RESET);
//  _delay_ms(1);
}


void Chip_Power_Down(void)
{                         //     'パワーダウン  受信モードを変える場合、一度電源落とす
unsigned char pow_off[]={0x11};
Si4730_Cmd_Write(pow_off,1);
delay(300);
}

uint8_t Read_Status(void)      // CTS が0x80になるまで待つ
{
  uint8_t msb,lsb;
  uint8_t retdt,i;

  for(i=0;i<10;i++)           // 10回待って駄目なら諦める
  {
  i2c_start(si4370_add | I2C_READ);
  lsb = i2c_read(false);
  msb = i2c_read(true);
  i2c_stop();
//  Serial.print(msb,HEX); Serial.print(" ");
//  Serial.print(lsb,HEX); Serial.println(" ");
  if( lsb == 0x80) break;  // if ACK Recive
  delay(100);
  }
  return(lsb);
}

uint8_t Si4730_Cmd_Write(unsigned char *cmd,int len)
{
  uint8_t ret;
  int i;
  i2c_start(si4370_add | I2C_WRITE);    // write mode 
  for(i=0;i<len;i++)
    {
    i2c_write(cmd[i]);     //    I2cwbyte &H2c  'max 0x3f
    }
  i2c_stop();
  ret=Read_Status(); 
  return(ret);            //    I2cstop
}

void Set_Chanel_Tune(int mode,unsigned int freq_int)
{
//  Serial.print("freq="); Serial.print(freq_int,DEC);
//  Serial.print("mode="); Serial.print(mode,DEC);
  switch(mode)        // AM = mode0,FM = mode1
  {
    case Mode_AM:
            Cmd_AM_Freq_Tune[2]=(freq_int & 0xff00) >> 8; 
            Cmd_AM_Freq_Tune[3]=(freq_int & 0x00ff);
            Si4730_Cmd_Write(Cmd_AM_Freq_Tune,sizeof(Cmd_AM_Freq_Tune));
            break;
    case Mode_FM:
            Cmd_FM_Freq_Tune[2]=(freq_int & 0xff00) >> 8; 
            Cmd_FM_Freq_Tune[3]=(freq_int & 0x00ff);
            Si4730_Cmd_Write(Cmd_FM_Freq_Tune,sizeof(Cmd_FM_Freq_Tune));
            break;
    default:
            break;
  }
}

void pin_mode_init(void)
{
  pinMode(10, INPUT);   // Dip SW port D10=12Mode sel
  pinMode(11, INPUT);   // D11-13 Freq select
  pinMode(12, INPUT);
  pinMode(9, INPUT);    // D9 = Freq AM/FM

  pinMode(Reset_Pin, OUTPUT);   // Board reset port (D3)
  pinMode(5, OUTPUT);           // LED port D5 = Mode sel
  pinMode(6, OUTPUT);           // D6-D8 Freq. sel sw
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);

  digitalWrite(5,HIGH);    // all LED off
  digitalWrite(6,HIGH);    
  digitalWrite(7,HIGH);    
  digitalWrite(8,HIGH);    
}

/*
TBS Rsdio       954khz
Bunka Hoso     1134khz
Nippon Hoso     1242khz
NHK No1         594khz
NHK No2         693khz
Eagle810        810khz
RadioNippon    1422khz
*/

void Set_Chanel(int mode, int pos)       // mode AM/FM pos ch possition
  {
//  Serial.print(pos,HEX); Serial.println("  pos ");
  Set_Chanel_Tune(mode,defaultStations[pos]);    // Start Freqncy setup
  }

//--------------BAND SWITCH --------------------------

void mode_setting_AM()
  {
  Chip_Power_Down();            // Chip Power down
  Si4730_Cmd_Write(Cmd_AM_power_up,sizeof(Cmd_AM_power_up));
  defaultStations = Stations_kyoto_AM;  // Kyoto Frequncy set
  ch_max = CH_MAX_KYOTO;
  ch_pos=0;
  Set_Chanel(mode_now,ch_pos);
  digitalWrite(10,LOW);

  }
  
void mode_setting_FM()
  {
  Chip_Power_Down();            // Chip Power down
  Si4730_Cmd_Write(Cmd_FM_power_up,sizeof(Cmd_FM_power_up));
  ch_max = CH_MAX_TOKYO;
  ch_pos=0;
  defaultStations = Stations_kyoto_FM;  // Kyoto Frequncy set
 
  Set_Chanel(mode_now,ch_pos);
  digitalWrite(10,HIGH);
}

uint8_t read_freq_dipsw()     // Read Dip SW Value & Set LED
{
uint8_t retval;

retval = 0x00;              // init val set

if (digitalRead(10) == HIGH)
  {
    retval = retval | 0b0001;
    digitalWrite(8,LOW);
  } else digitalWrite(8,HIGH);

if (digitalRead(11) == HIGH)
  {
    retval = retval | 0b0010;
    digitalWrite(7,LOW);
  } else digitalWrite(7,HIGH);

if (digitalRead(12) == HIGH)
  {
    retval = retval | 0b0100;
    digitalWrite(6,LOW);
  } else digitalWrite(6,HIGH);
return(retval);
}

/* Freq Mode set  */

void freq_mode_set()
  {
   if ( digitalRead(Mode_sel) == HIGH )        // Mode AM ?
        {
        mode_now=Mode_AM;
        mode_setting_AM();
       } 
       else
       {
       mode_now=Mode_FM;           // Default Band is FM
       mode_setting_FM();
       }
  mode_now = mode_befo;
  }