H8/3664F ネットワークアナライザ
IMAGE11.GIF - 980BYTES  概要
IMAGE11.GIF - 980BYTES  ハードウェア
IMAGE11.GIF - 980BYTES  ソフトウェア (H8/3664F side  - C)
IMAGE11.GIF - 980BYTES  ソフトウェア (PC side - VB5 )
IMAGE11.GIF - 980BYTES  ソフトウェアダウンロード
IMAGE11.GIF - 980BYTES  参考文献
IMAGE12.GIF - 2,801BYTES

変更履歴
2001年11月10日修正   ----  一部修正、写真変更
2001年11月 3日修正    ----  一部修正、写真変更
2001年10月31日修正   ----  一部修正、写真変更
2001年10月28日修正   ---- ソフトウェア部分追加
2001年10月23日修正   ----  新規プロジェクト設定

SCASE_FRONT.JPG  SCASE_OPEN.JPG                                          

S_ALL_VIEW0.JPG  SCPU.JPG  SRF_AMP.JPG

SDDS1.JPG  SRF_DET1.JPG



Network Analyzer ----- 概要IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

何が出来るのか?

能動回路であれ、受動素子回路であれ、その回路の周波数特性を測定する事が出来ます。
例えば、4MHzの手持ちのクリスタル(周波数のばらつきを選抜せずに)3個のラダー型フィルターを作成して、その周波数特性を測定すると下記のような特性図が書けます。コンデンサ等を調整すれば、自分のほしい特性を得る手助けになります。

S_FILTER_CHAR.JPG


ネットワークアナライザ目標仕様

1.信号発生部
        可変周波数範囲:
                100KHz 〜 60MHz
        出力範囲:
                0.1Vp-p to 4Vp-p max.
        キーデバイス:
                AD9851BRS DDS(Direct Digital Synthsizer)
                EL2075CN  OP-Amp (2GHz Gain-Bandwidth)
        出力:
                正弦波

2.信号検出部
        キーデバイス:
                AD8307  DC-500MHz,92dB Logarithmic Amplifier

3.制御部
        MPU:
                H8/3664F
        Memory:
                (External EEPROM  24LC64)
        EIA-232 interface for PC communication

PC側制御

S_SCR_NORMAL.JPGS_SCR_GRAPH.JPG

下記の制御コマンドだけでも、汎用ターミナルソフトでアナライザの動作を制御する事が出来ますが、上記PCソフトがアナライザ制御を便利にします。

制御コマンド

コマンド コマンド形式          機能                            例
H          [H]                 ヘルプ                     Network Analizer by Kenji Arai / JH1PJL Oct..,2001
F          [F-0to9&AtoF(8chr)-*]  周波数設定  F00120345* = 120.345KHz, F50123000* = 50.124MHz
D          [D]                 データ読み出し          Send "D" then receive "R123T321*" (R=12.3dB, T=32.1dB)
A          [A-0to3(1char)-*]   DDS出力            A1* = +10dBm (0=Max,1=+10dBm,2=0dBm,3=-10dBm)
S          [S]                 現在の全てのデータ表示  Send "S" then receive "SFF50123000#R123T321#A123*" 
T          [T]                  時間表示                 Send "T" then receive "T01234567*"   Unit = mSec
P          [P-0to9&AtoF(8chr)-*] ステップ周波数設定   F00120345* = 120.345KHz, F50123000* = 50.124MHz
+          [+]                  アップ                      New Freq = Current Freq. + Step Freq.
-          [-]                  ダウン                      New Freq = Current Freq. - Step Freq.




Network Analyzer ----- ハードウェアIMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

回路構成

回路は、2チャンネルの同じ回路構成ログアンプ部、DDSをメインとする周波数発振部、H8による制御部、更に電源部から構成されます。
構成は、ここをご覧ください。各部の主要回路はそれぞれの部分をクリックしてください。

              ログアンプ回路
                   ここ

              DDS回路
                   ここ

              H8/3664Fピン配置
                   ここ

デバイス

DDS(AD9851BRS)を除いたキーデバイスは、秋月で入手出来ると思います。




Network Analyzer ----- ソフトウェア (H8/3664F - C program)IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES

ネットワーク本体側のプログラム構成は、非常に簡単な構成です。ソースコードの一部に、コメントを掲載しますので参考にしてください。

測定精度向上の為に、Wavetek製シグナルジェネレータ(Model3004)を用いて補正を実施しています。データは、H8内のコードエリアに置いていますが、EEPROM内に移しPC側との連携を取って自動校正出来る機能を検討しています。
補正時に使用したデータは、このExcelファイルで確認ください。

/****************************************************************************
Network Analyzer.c
Programmed by Kenji Arai/JH1PJL
      E-mail:     kenjia@sannet.ne.jp  jh1pjl@arrl.net
       URL:        http://www.page.sannet.ne.jp/kenjia/

  August  16,2001 Start new proj. using H8/3664,AD9851 & AD8307
  October   8,2001 1st Version
  October  28,2001 Homepage version

Copyright (C) 2001 Kenji Arai/JH1PJL
All rights reserved. Permission is granted to use, modify,or redistribute
   this software so long as it is not sold or exploited for profit.

THIS SOFTWARE IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND,
EITHER EXPRESSED OR IMPLIED.
****************************************************************************/
/*   Original article was on the QST magagines (Jan.& Feb.,1998)     */
/* ================================================================== */
/* =====        Network Analyzer PIC Interface Program          ===== */
/* =====            By: Steve Hageman 12Jan97                   ===== */
/* ================================================================== */
/* Hardware                 */
/*   AKI-3664 Tiny Micom (H8/3664F 42Pin SDIP)        */
/* ----- Include Files ---------------------------------------------- */
#include "3664f.h"
#include "sci.h"
#include "ad9851.h"
省略

/* -----< Data Table >------------------------------------------------ */
dB表示の為の補完データ(シグナルジェネレータ使用の実測補正値)
const unsigned long TbL_Freq[TBLNOFREQ] = {
100000, 500000, 1000000, 5000000, 10000000, 20000000,
   30000000, 40000000, 50000000, 60000000, 70000000  周波数テーブル
};
const int Tbl_dB[TBLNODB] = {
   100, 0, -100, -200, -300, -400, -500   実際値は1/10
};
周波数と各dB値(上記テーブル)毎のAD変換生データ
const long Tbl_ch0[TBLNODB][TBLNOFREQ] = { 1チャンネル目の実測データ
  {1460,1508,1560,1584,1650,1750,1807,1831,1826,1864,1864},
  {1189,1246,1303,1332,1398,1489,1546,1569,1569,1607,1603},
  { 937, 989,1051,1075,1137,1232,1289,1322,1317,1360,1355},
  { 666, 732, 794, 823, 880, 980,1037,1065,1070,1108,1103},
  { 328, 471, 523, 552, 614, 713, 780, 851, 808, 842, 837},
  { 228, 271, 300, 319, 347, 461, 518, 547, 552, 590, 580},
  { 224, 228, 228, 233, 238, 271, 304, 319, 319, 347, 347}
};
const long Tbl_ch1[TBLNODB][TBLNOFREQ] = { 2チャンネル目の実測データ
  {1465,1508,1560,1584,1650,1750,1807,1836,1855,1826,1845},
  {1194,1251,1303,1332,1398,1493,1541,1569,1598,1579,1584},
  { 951, 994,1051,1075,1137,1227,1284,1322,1346,1327,1336},
  { 675, 747, 799, 818, 885, 980,1037,1070,1099,1080,1089},
  { 333, 476, 533, 556, 614, 713, 780, 813, 842, 823, 828},
  { 238, 276, 304, 323, 361, 466, 518, 552, 580, 556, 571},
  { 224, 228, 233, 233, 243, 276, 309, 323, 342, 328, 338}
};
/* -----<< Main >>---------------------------------------------------- */
void main()
{
initialize(); イニシャライズ
opning_msg(); PCへのオープニングメッセージ表示
/*  Main loop  */
while(!DOOMSDAY) 無限ループ
{
  /*  Wait for EIA232 char -> parse to command  */
  LED_COMM = OFF;
  Buf = SciGetC(0); PCからに1文字入力待機
  LED_COMM = ON;
  switch(Buf){ 入力された1文字の分析
  /*  Send Help massage */
    case '?': {
     goto job_H;
    }
    case 'H': {
     goto job_H;
    }
    case 'h': {
job_H:
     SciPutC('/');
     help_msg();  ヘルプ要求に対して受け付け可能なコマンド情報を送出
   SciPutC('*');
     break;
    }
  /*  Frequency set Parser */
    case 'F': {
     goto job_F;
    }
    case 'f': {
job_F:
   LED_FCHG = ON;
     SciPutC('/');
     set_dds_freq_direct(); DDS発振周波数の設定コマンド受付と周波数設定
   LED_FCHG = OFF;
     break;
    }
  /*  Frequency step set Parser */
    case 'P': {
     goto job_P;
    }
    case 'p': {
job_P:
   LED_FCHG = ON;
     SciPutC('/');
     set_dds_freq_step(); ステップ周波数のコマンド受付と設定値のメモリへの格納
   LED_FCHG = OFF;
     break;
    }

  /*  Data transfer Parser */
    case 'D': {
     goto job_D;
    }
    case'd': {
job_D:
     SciPutC('/');
   data_send();  dB換算後の2チャンネルAD変換値の表示
   SciPutC('*');
     break;
    }

  /*  Set Amplitude of DDS */
    case 'A': {
     goto job_A;
    }
    case 'a': {
job_A:
     SciPutC('/');
     set_dds_amp();  DDS出力設定のコマンド受付と出力設定
     break;
    }
  /*  Show current data */
    case 'S': {
     goto job_S;
    }
    case 's': {
job_S:
     SciPutC('/');
     set_all_data();  現在の全ての設定データの表示
   SciPutC('*');
     break;
    }
  /*  Show timer data */
    case 'T': {
     goto job_T;
    }
    case 't': {
job_T:
     SciPutC('/');
     show_timer(); 電源ON後からの経過データ表示
   SciPutC('*');
     break;
    }
  /*  Frequency UP */
    case '+': {
     goto job_UP;
    }
    case ';': {
job_UP:
     SciPutC('/');
     freq_updwn(0); 現在の周波数+ステップ周波数=新しい周波数
   SciPutC('*');
     break;
    }
  /*  Frequency DWON */
    case '-': {
     goto job_DWN;
    }
    case '=': {
job_DWN:
     SciPutC('/');
     freq_updwn(1); 現在の周波数−ステップ周波数=新しい周波数
   SciPutC('*');
     break;
    }
  /*  Check Conection */
    case ' ': {
     SciPutC('/');
     break;
    }
  /*  Not in command list */
  default: {
   /*  Error */
   SciPutC('!'); 文字が登録されていない場合の処理
  }
  LED_RUN = ON;
  } /*  End of switch */
} /*  End of while */
} /* ----- End of main ----- */

/* -----<< Subroutines >>--------------------------------------------- */
void initialize()
{
全てのイニシャライズ処理
}
void opning_msg()
{
電源ON時のオープニングメッセージ表示
}
void help_msg()
{
受け入れ可能なコマンド一覧の表示
}
void set_dds_freq_direct()
{
PCからの発振周波数データをDDSへセット
}
void set_dds_freq_step()
{
PCからのステップ周波数データをメモリへ格納
}
void data_send()
{
PCへ2チャンネル分のAD変換値(dB換算後)の送出
}
void set_dds_amp()
{
PCからのDDS出力設定コマンドにもとずく設定
}
void set_all_data()
{
現在のデータ設定
1.DDS設定周波数
2.2チャンネル分dB値
3.電源ON後の時間経過
4.DDS出力値
}
void show_timer()
{
電源ON後の時間経過送出
}
void freq_updwn(unsigned char i)
{
現在の発振周波数に対してステップ周波数分の増減操作
}
void IdleFunc()
{
;
}
void PutCRLF()
{
シリアルラインへのキャリッジリターンとラインフェード出力
}
unsigned long n_ascii2long( int n )
{
N個の文字を数字に変換
}
int ascii2hex( char c )
{
1個の文字を数字に変換
}
unsigned long set_dds_data()
{
PCからのデータの正当性を判断し、DDS発振周波数としてメモリーに格納
}
void cnvrt_dds( unsigned long freq )
{
DDS発振周波数データをDDSチップへ送出(データ変換後)
}
void ad_out_db( int dt )
{
データをASCII変換して送出
}
void adc_dB( unsigned char ch )
{
AD変換データを周波数別に構成した補完データで修正してPCへ送出
}
unsigned char get_freq_range()
{
補完の為の周波数レンジを確定
}
int get_dB_data(unsigned char ch, unsigned char f_no, unsigned int dt)
{
補完作業
}
void ad_reset()
{
AD変換処理のイニシャライズ
}
void amp_reset()
{
DDS出力設定のイニシャライズ
}
void show_amp()
{
現在のDDS出力設定値の送出
}
void show_data( unsigned long dt )
{
データの10進化
}

/* -----<< Interrupt >>----------------------------------------------- */
/* TIMERV Initialize routine */
void reset_timerV()
{
タイマーイニシャライズ
}
/* TIMERV Interrupt Handler */
void timerV_irq()
{
1mS毎のタイマー処理
}



Network Analyzer ---- ソフトウェア (PC side - VB5 program)
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES


VB5側のソフトウェアは、下記のフォーム構成で成り立っています。

FormNtWrk_Anlyzr(anlyzr_H8.frm)
メインとなるフォームで、ネットワークアナライザーとの通信をベースとし下記機能を持ちます。
PCとの通信機能
DDS周波数設定機能
周波数掃引設定機能と掃引
アナライザデータ表示機能
PANEL_EXPLAINE.JPG - 104,872BYTES

(1)"Sweep Mode” スイープモードがスタートします。ファイルへの記録を必要とするか否かの問い合わせが事前に行われます。
 ----> このイベントによりfrmTip(frmTip.frm)のフォームを開き、ファイルへの記録の必要有無確認が行われ、ファイルへの書き込みが必要であれば、更にFromFileControl(FromFileControl.frm)のフォームへ移行します。ファイル名称はデフォルト値として日時から自動作成されますが、必要なら変更可能です。

(2)”Show File"でセーブされているファイルを検索し、必要があればグラフ表示します。
 ----> このイベントによりfrmFileFind(frmFileFind.frm)のフォームに移行し、すでにセーブされているファイルの検索を行います。検索してファイルが選択されるとfrmFreqChart(frmFreqChart.frm)へのグラフ描画に移行します。

(3)"About”でバージョン等の表示を行います。
フォームfrmAbout(anlyzr_H8_about.frm)へ移行します。

frmAbout(anlyzr_H8_about.frm)
バーション表示の為のフォームです。

frmFileFind(frmFileFind.frm)
過去のネットワークアナライザーで測定したデータが、ファイルとして保存されていればそれを表示します。ファイル名だけでなく測定日時や、測定時のメモ(書き込んでいれば)が表示されますので、検索が容易です。

frmFreqChart(frmFreqChart.frm)
ファイルに保存した記録を基に、周波数特性を表示します。グラフは縦軸が、dB表示のRF信号の検出値で、横軸が周波数を表します。周波数表示は、スイープ条件の開始・終了周波数から最適の表示幅が選択されますが選択幅が狭い場合や一部拡大したい場合はこのフォーム内で、自由に設定出来る様になっています。

frmTip(frmTip.frm)
測定データをファイル保存するか否かを選択するためのフォームです。

FromFileControl(FromFileControl.frm)
ファイルのセーブ場所を選択する機能とファイルにメモを書くための機能を有します。尚、ファイルはCSV形式をデフォルトとしています。



Network Analyzer ----- ソフトウェアダウンロード
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES
 
H8/3664F制御ソフトウェア
--------  Anlyzr_H8_Software

VB5 PC側ソフトウェア
--------  Anlyzr_VB_Software




H8Network Analyzer ----- 参考
IMAGE12.GIF - 2,801BYTES
TOP02_001.PNG - 934BYTES


私が、ネットワークアナライザの記事を最初に読んだのは、QSTの1998年1月号と2月号に掲載された、下記のものが最初でした。
Build Your Own Network Analyzer  by Steve Hageman

下記サイトでPICのプログラムがダウンロード出来ます。PC側のプログラムは公開されていないようです。
(Feb 1998 Build Your Own Network Analyzer?Part 2, by Steve Hageman,
p 35. Windows 3.1/95 operating program and the source code)  ---- hageman.zip
http://www.arrl.org/files/qst-binaries/

早速その年には、彼の回路にもとずき1号機を製作しました。その時はH8/3048Fで本体を構成し、VB4でPC側のソフトを作成しました。
この時の回路のキーデバイスは、H8/3048F + HSP45102 +AD602 でした。

今回の構成は、先の経験と後閑さんのホームページを参考にさせてもらいました。後閑さんのものは、いつもながらの洗練された製作例になっているのですが、私のものは全くの手作り1回限りの製作です。更に、後閑さんのグラフ作成プログラム(PC側VB)の考え方を参考にさせてもらいました。ありがとうございました。
http://www.picfun.com/appframe.html

部品情報は、下記を参考にしてください。
H8/3664F(HD64F3664BP)のマニュアルは、下記から入手出来ます。
リンク先が、そのままファイルを示していますので、注意してください。http://www.hitachisemiconductor.com/sic/resource/japan/jpn/pdf/mpumcu/j602071_h8300hpm.pdf http://www.hitachisemiconductor.com/sic/resource/japan/jpn/pdf/mpumcu/j602223_h83664.pdf
http://www.renesas.com/jpn/products/mpumcu/16bit/tiny/3664/index.html

H8/3664Fのヘッダーファイルは、下記を使用させてもらいました。
http://www7.airnet.ne.jp/~showa/tiny.html

DDSチップとログアンプのマニュアルは、下記から入手出来ます。
http://products.analog.com/products/info.asp?product=AD9851
http://products.analog.com/products/info.asp?product=AD8307

EL2075は下記から、入手してください。
http://www.elantec.com/