JF1DIR業務日誌(はてなblog版)

アマチュア無線局JF1DIRのアクティビティをつづっています。

はてなブログへ引っ越しました

長年使っていたはてなダイアリーがとうとう終了するというので、はてなブログの方へ引っ越してきました。
実は2013年ごろに一度引っ越したのですが、あまり思い出せない理由でインポート作業を途中で放置していたのです。

アクティビティは相変わらず低迷すると思いますが、こちらでもよろしくお願いします。
(旧はてなダイアリーにアクセスすると、こちら強制リダイレクトされるはずです)

新年明けましておめでとうございます

ちょっとご挨拶がおくれましたが、新年明けましておめでとうございます。

去年2018年の振り返りを簡単にしますと、2017年の記念局開設&運用の反動とHFのコンディションが悪いことも相まって、無線運用のアクティビティが1/10以下に減ってしまいました。海外運用の時期はまだ先でしょうか。それまではアクティビティが細くなっていくような気がしています。その分、ほったらかしにしていた他の趣味に没頭できたので、私生活はまぁまぁ充実しました。仕事面では、組織の体制がちょっと変わって、基幹職ではあるのですが、管理職よりも実務(研究開発)のほうがボリュームが多くなりました。若い技術者を引っ張りながら一緒に知恵を出し合い身体も使って仕事する機会が増え、刺激的な仕事生活でありました。

2019年は無線運用はコンテストくらいになってしまうと思いますが、引き続き交信よろしくお願いします。また、記念局の開設も近々予定しておりますので、その準備をしたいと思っています。電子工作やプログラミングは相変わらずやっています。最近、勉強し始めたプログラミング言語のRustを使いこなして、ARMを動かしてみたいとか^^; 仕事面は、どうなるかわかりませんが、まぁほどほどに頑張りたいと思います。

最後に。はてなダイアリーがそろそろ終了とのことで、はてなブログの方に本格的に引っ越しする予定です。

ことしもよろしくお願いします。73

WiFi NTP時計の製作

また更新をサボってしまいました。無線に対するモチベーションが低下し特に書くことがない、というのが正直なところ。しかし、電子工作はほそぼそと続けています。

以前、安価なGPSモジュールでGPS信号を受信し、その中の正確な時刻データで校正する置き時計をARMマイコンで作ってみました。明かりのない部屋でも確認できるので寝室用の置き時計として使っていましたが、部屋の模様替えに伴い、この時計の置き場所を少し窓から遠いところへ変えたら、GPS信号を安定に受信しなくなってしまいました。GPSモノは鉄筋のマンション住まいにはやっぱり苦しいところです。GPSアンテナを外に出してケーブルで引っ張ってくるという手もありますが、いろいろ面倒なのでやるつもありはありません(以前、ThunderBolt DOを制作したときGPSアンテナを外に設置しましたが、すぐに引っ込めました)。そこで、WiFiを使ったNTP時計を作ってみることにしました。作例はたくさんあるので、あちこちのブログを参考にしながら作ってみました。

Wifiバイスには、秋月で売っているESP-WROOM-02Dip化モジュールを使ってみました。開発時はリセットスイッチや電源周りが付いている、開発キットを使っていましたが、実際の時計には上記キットを使いました。このモジュールの中にすべてのプログラムを入れてしまってもよいのですが、7セグLEDのドライバを使いたかったりしてピン数が足りないので、WiFiモジュールでNTPで校正した時刻を生成し、シリアルで別のARMマイコンと通信して、そのARMマイコンでLEDを表示するという方式にしました。

まずはESP-WROOM-02のプログラミング。ArduinoIDEでプログラミングして書き込みました。ソースはこちら。ESP8226WiFiというライブラリを入手してIDEにインストールしてください。ソースのとおり、3時間おきにNICTのNTPサーバーに接続し時刻を校正し、成功したら先頭に"-"の文字を、それに続いて時刻をUSART経由で送信します。その後、1秒毎時刻を同様に送信し続けます。

#include <ESP8266WiFi.h>
#include <time.h>

#define JST     3600*9

const char* ssid = "◯◯◯◯";
const char* password = "◯◯◯◯";

void set_ntp() {
  Serial.begin(115200);
  delay(100);
  Serial.print("\n\nStart\n");

  WiFi.begin(ssid, password);
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
  configTime( JST, 0, "ntp.nict.jp", "ntp.jst.mfeed.ad.jp");
}

void setup() {
  set_ntp();
}

void loop() {
  time_t t;
  struct tm *tm;
  int time_count = 0;
  
  while(1) {
    t = time(NULL);
    tm = localtime(&t);
    Serial.printf("-%02d:%02d:%02d\n", tm->tm_hour, tm->tm_min, tm->tm_sec);
    time_count++;
    if (time_count >= 3600 * 3) {
      set_ntp();
      time_count = 0;
    }
    delay(1000);
  }
}

次にARM側のプログラミングです。石は手元に大量にあるNXPのLPC1114FN28/102を採用しました。外部クリスタル不要で、DIP品でいろいろと使いやすいです。開発環境はmbedを使いました。書き込みはとても便利なLPCISPを使いました。表示は6桁の7セグLEDですが、ベッドの上で(つまりメガネを外した状態)はっきりと見えるくらいの大きさ(文字高20mmほど)、色はグリーンにしてみました。なかなか見つからず、RSコンポーネンツでアノードコモンのものをようやく見つけました。LEDドライバはMAX7219を採用。カソードコモン用なので、トランジスタアレイでロジックを反転させました。カソード側にシンクタイプのドライバ、アノード側にはインバータロジックを搭載して、電流アンプも兼ねることにしました。WiFiとARMマイコンには3.3V、LEDドライバと反転ドライバには5Vを使用しています。
WiFiモジュールとの通信は、UART受信割り込みで時刻をARM側にコピーするという感じになります。MAX7219を動かすには、各桁にどんなどこエレメントを光らせるか1バイトで表現してそれを書き込むだけとシンプル。
基板の様子がこちら。


LPC1114FNのソースはこちら。

// Wifi NTP Clock for LPC1114 and ESP-ROOM-02
// by JF1DIR 2018/11
//
#include "mbed.h"
#include "max7219.h" // 本家MAXIMからライブラリを入手 https://os.mbed.com/teams/Maxim-Integrated/code/MAX7219/

Max7219 max7219(dp2, dp1, dp6, dp4); // SPI0_MOSI, SPI0_MISO, SPI0_SCK, SPI0_SS
static const uint8_t num[10] = {0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x72, 0x7f, 0x7b};
Serial rx_time(dp16, dp15); // tx, rx
uint8_t h, m, s;

// ESPからシリアルで文字列受信し時刻(時分秒)データを格納
// 文字列の先頭に'-'があるデータだけを有効とする
void update_time()
{
    char data[256];
    uint8_t data_index = 0;
    while(1) {
        if (!rx_time.readable()) continue;
        char c = rx_time.getc();
        data[data_index++] = c;
        if(data_index > 255) break;
        if(c == '\n') {
            data[data_index] = '\0';
            data_index = 0;
            if(data[0] != '-') return;
            char h_str[3], m_str[3], s_str[3];
            h_str[0] = data[1]; h_str[1] = data[2]; h_str[2] = '\0';
            m_str[0] = data[4]; m_str[1] = data[5]; m_str[2] = '\0';
            s_str[0] = data[7]; s_str[1] = data[8]; s_str[2] = '\0';
            h = atoi(h_str); m = atoi(m_str); s = atoi(s_str);
            break;
        }
    }
    return;
}
 
int main() {
    // setting for LED driver
    max7219_configuration_t cfg = {
        .device_number = 1,
        .decode_mode = 0,
        .intensity = Max7219::MAX7219_INTENSITY_8,
        .scan_limit = Max7219::MAX7219_SCAN_8
    };
    max7219.init_device(cfg);
    max7219.enable_device(1);
    max7219.set_display_test();
    wait(0.1);
    max7219.clear_display_test();    
    
    // setting for serial port    
    rx_time.baud(115200);
    NVIC_SetPriority(UART_IRQn, 1); // UART割り込み優先の設定
    rx_time.attach(update_time, Serial::RxIrq);
    
    while(1) {
        // send to driver
        max7219.write_digit(1, 6, num[h/10]);
        max7219.write_digit(1, 5, num[h%10]);
        max7219.write_digit(1, 4, num[m/10]);
        max7219.write_digit(1, 3, num[m%10]);
        max7219.write_digit(1, 2, num[s/10]);
        max7219.write_digit(1, 1, num[s%10]);
        wait(0.1);
    }
}

7セグLEDは別基板にして2階建て構造にしました。後ほどスチロール製の透明ケースに入れます。

暗闇で見るとこんな感じ。もう少し鮮やかなミドリがよかったのですが・・・

LM3886アンプにハイレゾDACを実装してみる

かなり長期間ブログをほったらかしにしておりました。ネタがないわけではないのですが億劫なだけでした。ようやく更新してみるネタができたようなので書いてみました(汗)。

書斎のPCのサウンドを再生するアンプには自作真空管アンプや自作半導体を使っております。今は2年前に作ったLM3886を組み込んだシンプルなアンプをしばらく使っておりました。製作記事はココです。LM3886は非常に使いやすくてよいアンプの石なので気に入っております。DCサーボを組み込んで完全DC化をやってみるつもりでしたが、これは次回にしておきます。今回は比較的入手しやすいDACハイレゾオーディオを実現して見ようとやってみました。どうやらラズパイにDACをI2S接続してハイレゾPCオーディオが簡単に再生することが流行っているようで、これも時間のネタにしておきます。
せっかくなのでUSB→I2S変換を経由する回路にしてみました。

USBアダプタDACにPCM2706を使いPCM5102AへI2S接続してアナログ出力するというシンプルな構成です。外付け部品がずいぶんと少なく済んでいます。USBのバスパワーだけでは足りなさそうなので外部電源で動作する仕様としました。PCM5102Aは32bit, 384kHzのDACでしかも単電源でもパスコンなしにアナログ信号を出力してしまうというなかなか便利(チャージポンプ回路で負電源をIC内で生成)なので、アンプの方にもパスコンなしでダイレクトに接続してしまいました。おかげで音質は非常にクリアでFBです。LM3886アンプに組み込むとこちらです。

電源は別筐体になっております。±24Vの電源を使っているので、DAC基板に積んでいる3端子LDOの入力電源最大電圧が20Vしかないのに気が付き、急遽9Vの3端子レギュレータを実装しました。音が良くなっただけでなく、アンプにUSBケーブルを繋げるだけでよいのでずいぶんシンプルになりました。
DAC部の回路図はココを参考にさせていただきました。VY TKS。

◯◯互換小型マイコンキットの使い方

ローカル局から「いま流行りのフィジカルコンピューティングをやってみたいのだが、何を買ったらいいの?」と聞かれたので「とりあえずArduino Unoを」と答えておいたのですが、どういうわけか秋月の「AE−ATMEGA328−MINI」を買ってきてしまいました。おそらく「安くて小さく」て「上位互換」という謳い文句に釣られたのでしょうか。純正のArduino Unoは秋月でも2,940円するので分からなくもないのですが、AE-ATMEGA-MINIの取説には最低限のことしか書いてないし、USBインターフェースがついてない上にブレッドボードを持ってないと使いづらいので初心者には少しハードルが高いと思います。さらに、aitendoにはは400円足らずのArduino互換の「あちゃんでいいの」が有名ですが、これもインターフェースなしで(もちろん取説なんてついてない)、AVRマイコンが別売りだったり(ブートローダーの書き込みが初心者にはシンドイ)して、こちらもハードルが高いです。安いからとりあえず買っておくかと、つい手を伸ばしてしまいがちですよね・・・。
パーツ箱の肥やしになってしまわないためにも、各安価互換マイコンボードの使い方をまとめて書いてみます。

aitendoのあちゃんでいいの

いつくかバージョンがあるようですが、今店頭に並んでいるのはバージョン2のようです(ですが基本的に変わりません)。
AVRマイコンを除いたパーツが入っていて、お値段なんと99円。マイコンを加えても400円くらいになります。Arduino互換というよりは、AVRマイコンにクロック水晶とリセットボタン、電源LET、UART接続のため引き出しピンが付いている基板です。小さくてなにより安価なので、この基板のまま完成品に実装してしまうことを想定しているのでしょうか。
部品点数が少ないですが一応キットです。作り方はaitendoの説明の通りです。表面実装のCRのはんだ付けが不慣れな方にはネックでしょうか。また、附属のピンヘッダは径が太くてブレッドボードなどに差し込みにくいので、細ピンヘッダに取り替えたほうが良いと思います。基板の裏に取り付けられた水晶は割りと高さがあるので、ピンがブレッドボードに完全に差し込むことができないなどの不具合?があります。
組み立て終わったら、USB-シリアル変換と接続します。DTR端子が付いたものが必要です。あちゃんでいいののUART端子は1番が順に、TX, RX, VCC, GND, PROG_RESET(TR5GPというらしい)となっています。TXにはシリアル変換のRXを、RXにはTXを、PROG_RESETにはDTRを接続します。USBをPCに接続すると電源があちゃんでいいのに投入されるので、LEDが点灯するはずです。WindowsのデバイスマネージャーでUSB-シリアル変換のCOMポート番号を控えておきます。USB-シリアル変換が付属していないだけなので、これさえ出来てしまえば、あとは普通のArduinoと同じです。
次にArduino IDEを立ち上げ、シリアルポートを設定し、ボードの指定は「Arduino UNO」にします(AE-ATMEGA328-MINIならばArduino Pro or Pro MINIに設定)。あとはプログラミングしてマイコンに書き込むだけです。

aitendoのDIP化最小構成マイコンキット

製品名から一体何のマイコンなのかが分かりません。Webを見ればLPC1114とわかりますが、店頭だと恐ろしく見にくいLSI上のシルク印刷を読まないと分かりません。なんて不親切なんでしょうか。
「最小構成」とあるように、DIP品のLPC1114FN28と同じサイズの大きさ中に水晶とリセットスイッチ、ISPブートジャンパー、LEDが付いています。実装が楽にできてかつ395円とDIP品のマイコン単体よりも安いくらいです。下の写真は、左からaitendoのDIP化最小構成マイコンキット、SSOP28ピンタイプのLPC1114FDH28/102をDIP化したもの、DIP品のLPC1114FN28/102。サイズがすべて同じです。

当然ながら作り方の説明は一切ありません。SSOP28ピンのLPC1114FDH28/102も自分ではんだ付けする必要があります。あちゃんでいいのようにシリアルと接続する端子が出ていません。LPC1114の使い方をある程度知っていないと手出しできませんね(汗)。
あちゃんでいいのと同様、USB-シリアル変換を用意しておきますが、TXとRXだけで結構です。最小構成マイコンキットの16ピンと15ピンにそれぞれtx, rxと書かれています。下の写真のようにUSB-シリアルとクロスで接続しておきます(もちろん、GNDとVCC(3.3Vなので注意)も忘れずに)。
プログラミングはmbed環境を使うことができます。mbedのターゲットプラットフォームをmbed LPC1114FN28にしてプログラミングをビルドすると、binファイルがダウンロードされてきます。このbinファイルをマイコンに転送する方法はいくつかありますが、一番簡単でオススメなのは、LPCIPSというツールを使ってbinフィアルをUART経由でマイコンへ書き込む方法です。ISPモードで転送する必要があるのですが、最小構成マイコンキットのISPジャンパーをショートしてリセットボタンを押すとISPにモードに入ります。この状態でLPCISPでファイルを書き込んで下さい。書き込み後、ジャンパーを外してリセットボタンを押すと書き込まれたプログラムが起動します。

激安ARM STM32F103C8T6ボード

以前STM32F103C8T6ボードの紹介をしました。このときはUART経由で書き込む方法を紹介しましたが、ボード上にST-LINK用の端子がついているので、今回は簡単なST-LINKで書き込む方法を紹介します。
ST-LINKはST様のプログラマ/デバッガの書き込むツールで、純正品の他に中華コンパチ品も出回っております。後者のドングルが500円くらいで入手できるので、STM32を使う人は揃えておいて損はないと思います。なお、Nucleoの頭の部分についているのがST-LINKです(偶然にもSTM32F103C8T6が使われています)。あまりメリットないですがNucleoでもST-LINKで接続することができます。
ボードのST-LINK端子にそれぞれドングルのピンを接続します。STM ST-LINK UtilityをST様からダウンロードし入手します。最初にST-LINKとPCを接続した時に、ST-LINK自身のファームウエアをアップデートしておきましょう。ST-LINK Utilityはbinだけでなくhex形式も読めます。LPC1114と同様に、mbed環境でプログラミング・ビルドして得られたbinファイルをST-Link Utilityに読み込ませ、"Target -> Program"でマイコンに書き込むことができます。

ボード、ST-LINKともに中華品なのでとても安いです。mbed環境がそのまま使えて、高性能なマイコンを使いこなしたいならば、この構成が最強なのではないでしょうか。

8J1C70Y終わりました

だいぶ遅れてしまいましたが、あけましておめでとうございます。2018年もよろしくお願いします。

さて、去年の5月から始めていました、茅ヶ崎市制70周年の記念局、8J1C70Yが昨年末でで閉局となりました。正月明けて、各運用者からのログが集まり、QSO統計を取りました

まずはエリア別集計

JA1 JA2 JA3 JA4 JA5 JA6 JA7 JA8 JA9 JA0 DX S.T.
1.9M 42 17 15 10 4 2 14 6 3 9 0 122
3.5M 305 127 114 53 23 25 109 23 37 68 4 888
7M 1,606 671 821 386 161 233 475 161 142 246 63 4,965
10M 124 61 72 52 23 45 68 34 9 18 4 510
14M 41 11 10 15 5 8 14 11 1 8 18 142
18M 35 4 25 28 13 21 26 25 3 4 6 190
21M 73 13 50 49 23 79 34 35 1 3 23 383
24M 18 4 21 14 2 14 7 7 0 3 1 91
28M 21 6 4 4 0 13 1 4 1 1 6 61
50M 214 5 0 4 0 8 0 0 0 0 1 232
144M 217 20 0 0 0 0 1 0 0 0 0 238
430M 423 27 5 0 0 0 3 0 0 3 0 461
1200M 6 0 0 0 0 0 0 0 0 0 0 6
SAT 47 18 36 23 1 9 0 6 1 7 3 151
Total 3,172 984 1,173 638 255 457 752 312 198 370 129 8,440

次にモード別集計

CW SSB FM RTTY DSTAR S.T.
1.9M 122 0 0 0 0 122
3.5M 223 665 0 0 0 888
7M 2,890 2,003 0 72 0 4,965
10M 510 0 0 0 0 510
14M 133 9 0 0 0 142
18M 161 29 0 0 0 190
21M 144 239 0 0 0 383
24M 91 0 0 0 0 91
28M 58 3 0 0 0 61
50M 98 134 0 0 0 232
144M 114 110 14 0 0 238
430M 85 0 352 0 24 461
1200M 0 0 6 0 0 6
SAT 137 14 0 0 0 151
Total 4,766 3,206 372 72 24 8,440
% 56.5% 38.0% 4.4% 0.9% 0.3% 100%

運用者別集計

運用者 QSO %
JF1DIR 4,640 55.0
JR1CFM 2,375 28.1
JK1THE 1,024 12.1
JG1TRT 139 1.6
JH1XHX 111 1.3
JL1UGN 41 0.5
JA1DIR 29 0.3
JE7IZM 20 0.2
7N4NMF 17 0.2
JE1TOZ 11 0.1
7M4RKS 10 0.1
JM1NHQ 6 0.07
JI1SLZ 3 0.04
JO1KXP 3 0.04

となり、トータルで8,440QSOと予想を大きく上回るQSO数でした。たくさんのQSOありがとうございました。

2017年振り返り

今年も残り僅かになりましたので、例年通り今年の振り返りをやってみたいと思います。さて振り返りることなんてあるのかな?・・・(汗)

無線運用の停滞

condx低下と去年に10万QSO突破してしまったことも相まって、無線を運用すること自体がだいぶ減ってしまいました。モチベーションが低下してしまったということです。家からではDXを手軽に楽しむことができなくなってしまったし、国内の移動おっかけは飽きてしまったし、これまでマメに参加していたローカルコンテストもパスすることが多くなってしまいました。正しくカウントしていませんが、個人コールで運用したのは、2,000〜3,000QSOくらいだと思います。以前は10〜15kだったのに。
去年は海外運用をたっぷり楽しんだのですが、今年は結局いけず(全く運用せずにパラオの免許の期限(1年)を切らしてしましました)。まぁ、condxとともにモチベーションが上昇すると思います。

仕事が忙しくなってきた

今年度に上級の経営基幹職になってしまったせいで、仕事の密度が上がってしまい、休暇を自由に取れないなど、趣味に少し影響を受けたと思います。仕事の方は割りと充実しているので、このことがストレスになっているわけではないので、さほどマイナスではないのですが、昔のように勝手なことができなくなってしまったのは確かですね・・・

地元の無線クラブの運営

JQ1ZQQという地元の無線クラブの役員をやっています。このクラブの運営に従事することが今年は多かったと思います。おかげさまで、構成員も順調に増えて、これからやらなければならないことが山積みですが、以前よりは活発なクラブになってきたと思います。

体調すぐれず

気管支の炎症と一年中、咳が止まらない症状に悩みました。いろいろ調べてみると重度のアレルギーとのこと。特にスギ花粉、ハウスダスト、イヌ?ダストに過剰に反応する体質になっているとのこと。原因が分かりホッとしているのですが、アレルギーの薬が手放せなくなりました。また、アレルギーが原因か分かりませんが、免疫力が低下し、ちょっとダイエットするとすぐに風邪を引いてしまうことが多くなりました。体調悪くてコンテストの参加を辞退、というのも多かったです。

自作派復活

無線運用の方が不活発になってきた反面、自作・電子工作のほうが活発になった年だと思います。JL1VNQさん設計のVN-4002に出会ったせいで自作熱が復活。ついでにARM系マイコンいじりも復活。秋葉原では無線屋よりもパーツ屋に行く機会が増えました。まだ作ってないVNシリーズがあるのでこの冬休みで作ってみたと思います(汗)。

記念局8J1C70Yの開設・運営

今年は何と言っても記念局の開設・運営をやったことでしょうか。実質的にほぼ私一人が開設から運営管理までやったのですが、やはり一人ではどうしてもできないことがあり、各方面にはご面倒をおかけしたと思います。また地元茅ヶ崎市JARLにもいろいろお世話になりました。記念局の開設や運営については改めて別の記事で語りたいと思います。

というわけで、今年はいろいろお世話になりました。来年も引き続きよろしくお願いします。