直読型周波数カウンタ の プリント基板 届く

件の周波数カウンタである
自分用にDRAKE R-4AとFT-101EでのQRV用に作成したのであったが、仲間にこの製作の話をすると ’じゃあ一枚作ってよ’ と製作を依頼されることがある

とりあえずユニバーサル基板に手配線で作成して、でっち上げたモノなので、すこぶる生産性が悪いのであった
1号機を作っているときは、気合が入っていて半日位はあっという間に過ぎるのであるが、同じモノを作れと言われると気持ちが萎えてしまうのは、私が根性なしだからであろう

IMGP6183

<記念すべき1号機の基板である>

IMGP6184

<基板の裏面は手配線での実装である>

結局、ブリント基板を作ろうかと言うことになったのである ここら辺の判断は’良い加減’である
72mm×42mmのユニバーサル基板と同じサイズで、この回路の実装は簡単だろうと思っていたのである
片面基板でアートワーク屋(パターンの設計者)さんと話したら、これは両面でお願いしますと言われてしまった
更に、リード部品で考えていたのであるが、この基板サイズならチップ部品でお願いしますとのこと
今回CRは1608サイズのチップ部品である

出来る限り基板面積を小さくしたかったのでチップ部品でのレイアウト設計を基板屋さんに発注したのである
とりあえず、1シート15枚

回路図をアートワーク屋さんに出図するときと、出来上がったプリント基板の確認がとても緊張する時である

基板が出来た後に回路図の間違いやコネクタ接続の間違いが見つかると、最悪やり直しであり、基板は単なるゴミになりかねないのである 趣味とは言え、ここはとても真剣である

そして本日、生基板が到着したのであった

IMGP6181

<直読型周波数カウンタ基板の表面>

IMGP6182

<直読型周波数カウンタ基板の裏面>

この後は実装して基板の動作確認である
今週はルーペとピンセットでチップ部品の実装にチャレンジである

基板よ一発で動いてくれ!! 

いや手直し出来る範囲で良いので動いて下さい m(_ _)m

 

 

 

IMGP6185

<チップ部品実装の必需品 ルーペとピンセットである>

今回の基板作成についても、大先輩の矢花氏に大変お世話になったのである

いつも本当にありがとうございます

直読型周波数カウンタの制作 活用編1

部品の調達と組立

今回の直読周波数カウンタで、特別な部品は無いのである
只、この部品は最初からバンドメモリの切替に利用を前提としていた
12接点のロータリSWである、なおこのロータリSWは使用接点数でストッパーを掛ける事によって8接点で使用している
このロータリSWの代わりに普通のボリームでも使用出来るが、バンド切替であるのでやっぱりロータリSWの方が使い勝手は良い
このロータリSWの端子に抵抗を取付て、クリック付き8接点VRとして今回は用いている
その他のスイッチ類も一般的なものである

IMGP5679

 

水晶発振器は安かったので、10個パック300円の表面実装タイプを使用した
常温で使用するので、ゲートタイムの補正機能があれば十分と考える

アンプ回路も、一般的な2SK141と2SC1815である

 

ケースは色々と考えたのであるが、私の加工技術が未熟であるため、金属パネルを綺麗に直線に切り抜きが出来ない
従って、今回は安易に100均のミニカー等のディスプレイケースを用いた
自分用であるため、周波数測定入力は2系統とし、スイッチで切り替えられる様にした
電源は、9VのACアダプタのコネクタを付けて対応している

IMGP5684

<FRONT >

IMGP5681

<REAR>

フリーハンド加工であるため超適当ではあるが、何となくそれっぽい雰囲気にはなった

IMGP5683

R-4Aの上に載せた、周波数カウンタである

思ったほど、違和感は無い(自分的に)

 

次に続く…

直読型周波数カウンタの制作 要素開発編4

とりあえずの、ファームウェア概要である

最近の機器の場合は、商品なり制作物の仕様の大半が、搭載されるファームウェアによって実現される
そして開発費用のかなりの部分がファームウェア開発費となっていると思う
ファームウェアの開発規模も昔に比較すると巨大なものとなっており、その生産性と品質の向上にトップエンジニアが日夜努力をしている

この直読型周波数カウンタについては、自分が自分のために開発しているファームウェアである
従って、自由に仕様が決められるのであり、ファームウェア検査も自分自信が行う甘々の検査である

で、前置きはともかく本題に入ろう

最初に動作モードは以下の3点である
1.通常計測モード
a.電源を投入するとこのモードとなる
b.入力信号の周波数を計測し、選択されたバンドメモリのオフセット周波数と計測周波数を演算して表示をする
c.バンドメモリの0-7で8メモリである

<バンドメモリ0はオフセット周波数は0Hzで、計測周波数がそのまま表示される>

IMGP5675

写真は、10MHzを入力

・バンドメモリ7番の オフセット周波数は-455KHz

・表示周波数は 10MHz – 0.455MHz = 9.555MHz

 

2.較正モード
a.Funcボタンを押しながら電源を投入するとこのモードとなる
b.バンドメモリのオフセット周波数は演算されない
c.計測した周波数を選択したバンドメモリにオフセット周波数として登録できる
d.電源OFFで解除

IMGP5677

写真は、10MHzを入力

・バンドメモリ7番の オフセット周波数は-455KHz だがオフセット演算はしない

・表示周波数は 10MHz

・ここでFuncボタンを押すと、バンドメモリ7番に表示している周波数がメモリされる

 

3.オフセット修正モード
a.Modeボタンを押しながら電源を投入するとこのモードとなる
b.通常計測モードと同等であるが、FuncボタンとModeボタンでオフセット周波数を5Hz単位で加減出来る
c.電源OFFで解除
*古い無線機や受信機では第一局発の水晶発振周波数がズレている事が多いのでこのモードで調整を行う想定である

IMGP5678

写真は、10MHzを入力

・バンドメモリ7番の オフセット周波数は-455KHz

・表示周波数は 10MHz – 0.455MHz = 9.555MHz

・ここでFunc/Modeボタンで、バンドメモリに記録されているオフセット周波数を5Hzステップで修正出来る

 

 

実際にファームウェアを実装してみると、4Kwordでのプログラミングは厳しいのである
コードの共通化や、コードの見直しを行い4Kwrodに押し込める(なんか大昔を思い出してしまうのである)
今風のエレガントなコードからかけ離れてしまったコードが残念である 自分の非力さを改めて思い知ったのであった

直読型周波数カウンタの制作 活用編1へ続く

直読型周波数カウンタの制作 要素開発編3

3つ目の要素開発は、クロックに水晶発振子または水晶発振器を使用した場合の、周波数ズレの対策である

水晶発振子を使用した場合は、数10PPM程度の周波数誤差が想定され、水晶振動子にコイルとトリマコンデンサを接続して調整しても調整しきれない場合もある
クロックに校正済のOCXOが使えれば、測定精度は著しく向上するがコストの問題で非現実的である、安価なTCXOでも良いが、簡単に入手可能な20MHzのモノが見当たらないし、組立時に発振周波数の確認と較正は必要である

IMGP5672

<写真は今回使用する、水晶発振子 SG-636-20MHz>

機材の中に組込むのであれば、特に送信時などはあっと言う間に、周囲温度は上昇するため、温度補償は必須である

 

要素開発編4へ続く

直読型周波数カウンタの制作 要素開発編2

2つ目の要素開発項目は、16F88自体での周波数カウント方法である

ポイントは内蔵タイマをどの様に使って周波数数カウントし、限界値(最大測定周波数)が要求仕様に入っているかを確認する事である
LCDが動作しているので、周波数をカウント出来れば単体で、テストが出来る様になる
今回は、timer0とtimer1を試して比較してみた

PICではtimerと呼び名が付いているが、オーバフロー時または設定したカウンタ値に到達したら、割り込みが発生するフリーランカウンタである

入力に一定周期のバルスを入力すると当然タイマーとなるのである
入力周波数をカウントするのに、どのTimerが良いか検討した

1.timer0

16F88のtimer0は入力信号と内部クロックの信号が同期となっている

・入力はシュミットトリガでは無い

・カウントのON/OFFが制御出来無い

従って原理的にCPUクロック(20MHz)以上のカウントは出来ない

2.time1

16F88のtimer1は入力信号と内部クロックの信号が同期を非同期に設定することが可能

・カウントのON/OFFが制御出来る

・入力はシュミットトリガ

CPUクロックに非同期入力なので、カウンタロジックの限界値までカウントが可能

3.time2

・カウントのON/OFFが制御出来る

・内部クロックのみ入力可能なので、外部信号のカウントには使用出来ない

当然ながら信号の周期数カウントにはTimer1を使用する事にした

次にゲートタイムの測定用timerであるが、timerのon/offが制御出来るので、timer2を使用することなった

この辺りの構成は、結局稲垣氏の周波数カウンタVer7と全く同じであり、稲垣氏の着眼点に敬意を表するのである

ちなみに私の実験ではtimer1のプリスケーラなしで、60MHzのカウントが出来た

timer1のカウント入力は簡単に確認出来、次にtime2を使用して、1秒と0.1秒のゲートタイムタイムにする
この辺りは、基本フローを紙に書き出して、タイミングと処理内容を整理して、ファームウェア実装を行い、周波数の計測が出来ることを確認した
ゲートタイムの評価は、Timer1の入力設定でクロック信号の1/4を利用する
この場合測定周波数が20MHzの1/4である5MHzになる筈である

一旦はこれで、基本機能評価が出来る用になったのである

 

IMGP5671

要素開発編3へ続く

 

直読型周波数カウンタの制作 要素開発編1

要素開発とは、なかなか聞き慣れない方も多いと思う

一般的には製品を作る中で、必要な技術を確立させることである

今回の周波数カウンタ程度では、要素開発なんて大げさではある、けれど個人の趣味プロジェクトなので、偉そうに使った言葉ではある
さて、今回の制作には3つの要素開発が必要と考えた
1つ目は、16桁2行のLCDの制御である、LCDは一般に発売されているSC1602Bを利用する、SC1602Bについては一般的に動作さいてる実績が沢山あるので、今更感はあるのである

けれど、情けないことに自分の手の内(自分で理解して修正や応用が出来る)にはないのである

従って、自分でSC1602Bの初期化を含め、データのハンドシェクの一連を手の内に入れることを目的として、LCD制御部分を作成してみることにした
今回はLCDのBUSYを読出しする事で少しでも周波数測定のサイクルタイムを早くする必要があるので、とりあえず色々とやって見ることにした
取敢えずは諸先輩方のソースを色々と拝見させて頂き、大体の制御の流れを理解する
初期化処理、4bitモードでのハンドシェイク、画面クリアやカーソル処理などスクリーン制御と、1文字入力からカーソル位置によってのスクロール処理を実装した
その後に、C言語でのputc()と同等の関数を作成して、LCD表示についての処理を表示モジュールに集約してみた

とりあえずは、SC1602Bの制御は手の内に入ったと思う

IMGP5670

(写真は、キャラクターコードを順に表示しながら、スクロールしている画面、スクロールも高速である)

ちなみにLCDの制御については、PICのポートをどの様に使うかが諸先輩の嗜好が別れており面白い所である

要素開発編2に続く