直読型周波数カウンタの制作 要素開発編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に続く

 

直読型周波数カウンタの制作 仕様検討編

いままで、色々と調べて来た内容から、制作する周波数カウンタの仕様概要を決めるのである

HMY0121_4

<とりあえずの回路図である>

以下 直読型周波数カウンタの仕様概要案

1.動作範囲等

a.周波数の測定範囲は100KHzから40MHzまでとする (内蔵PreScale OFF時)

b.入力感度は3dBm以上入力インピーダンスは50KΩ以上 (40MHz時)

c.動作温度は常温とする

2.周波数計測桁数は10MHz測定時に7桁(ゲートタイム0.1秒時)とし、ゲートタイムが1秒時には8桁とする

3.測定周波数とオフセット周波数の表示は同時に行う

4.表示は16桁2行のLCDとする

5.操作系のスイッチは以下の通り

a.ゲートタイム切替  b.オフセット登録(FUNCTIONキー) c.変調モード切替(MODEキー) d.内蔵PreScreler切替 e.バントメモリ切替(ロータリーSW)

FunctionとModeキーは登録したオフセット周波数の+-の調整機能を持たせる

6.マイクロコントローラはEEPROMが256Bytesでプログラムステップ4Kwordの16F88を使用する (将来は16F1827切替を予定)

7.周波数計測の増幅器は、入力インピーダンスを高くし感度を確保するため、初段にFETを使用しPICへのT1入力へトランジスタを使用する二段アンプとする

8.ファームウェアの実装でC言語だとプログラム容量の不足が想定されるため、開発言語にはアセンブラを用いる

9.クロック信号には20MHzの水晶発振ユニットとする、精度が必要な場合は発振器を選別で対応をする
ざっくりとした仕様は上記であるが、全体のかなりの部分がファームウェアの開発に費やされることになるである

要素技術確認編へ続く

*筆者はこの回路及び記事を使用した場合の責任は負いませんのでご留意下さい

直読型周波数カウンタの制作 調査編2

仕様を決めるときは、要求仕様の検討が大切である

完成時の搭載機能を検討しないままで設計に入ると挫折するケースが多くなる、特にファームウェアについてはその可能性が高いのである (自分の経験的に..)

今回の仕様への要求は、平たく言うと自分が使用している、Drake R-4AYAESU FT-101Eの運用周波数がそれなりの精度と速度で直読出来れば良いのである

早い話が、YC-601BFR4を足して2で割った仕様である…

 

けれど、その要求分解を分解すると、様々なポイントが抽出される

一旦、出来上がったイメージを色々とフリーハンドで書いてみた

IMGP5669

(とても汚い字で申し訳無いのである..)
今回自作する、直読周波数カウンタの要求仕様の概要は以下の通りであった

a.部品点数が出来るだけ少なくする (実現性とコスト)
b.周波数カウンタとしてそれなりの精度があること
c.オフセット周波数をバンドメモリーとして複数登録出来て簡単に呼び出し出来ること (YC-601Bでのバンド切替のイメージ)
d.R-4Aのプリミックス端子(INJ端子)やFT-101のVFO出力の周波数をプラグインで計測出来ること
e.測定周波数の範囲は、100KHz~40MHzであること (Drake R-4Aで使用するため)
f.VFO操作の追従性を確保するため、ゲートタイムは0.1秒で測定結果の表示を含めたサイクルタイムは0.11秒以下であること (VFOを回した時に追従感が狂うと使う気になれない)
g. 周波数測定方法は、直接計測法としレシプトリカル方等の複雑な計測はしない、計測粒度はゲートタイム0.1秒時に10Hz単位とする
h.単体の周波数カウンタとしても使用するため、ゲートタイムは1秒と0.1秒の切替とする

まぁ ざっとこんな所であろうか

これが実現出来れば、何とYC-601BER4を同時に入手したことと同等の価値である、この後の制作にも力が入っているのであった

仕様検討編に続く

直読型周波数カウンタの制作 調査編1

欲しいものは高価なのである
R-4AFT-101等で使用出来る、直読型周波数カウンタについて調べてみた
各機種専用のメーカ純正品や、サードパーティの専用品はオークションで偶に出品されている
しかし、コレクターズアイテム価格で、とても私ごときが、おいそれと購入は出来ないのである
そこで、諸先輩方の周波数カウンタの制作実例を拝見させて頂いた
皆様色々と工夫されているのである。

お手本として、16F88を使用した稲垣氏の周波数カウンタVer7をダウンロードして組立てて見た

シンプルな回路で、ここまで出来るのは凄いことである

稲垣氏のオリジナル
(稲垣氏開発のファームウェア、周波数カウンタV7)

一般的なラジオの中間周波数である455KHzをオフセットとして測定周波数に対して足して表示する周波数カウンタの作例は多い、それ以外のオフセットについては自分で、PICファームウェアの書き換えか、PICのEEPROMの書き換えが必要である
製作例によっては、オフセット周波数書換え専用ツールがあるが、出来ればパソコン無しでオフセット登録をしたい

YC-601みたいにバンド切替SWで、オフセット周波数とオフセット演算が選択出来て、主要なバンドの周波数が直読出来ればよいのである。

現時点での要求仕様では、市販品や諸先輩の作例をそのままの利用は難しい、との結論に至ったのであった。

ここで、R-4AとFT-101などで使える、直読型周波数カウンタの仕様検討を開始することにしたい

調査編2へ続く..

 

MPLABXでのPICKIT3書き込み電圧の設定

MPLABXとPICKIT3を使って、チップにプログラムを書き込むする時に必要な設定である。

PICKIT3ISCPを使ってプログラムを書き込む

その際に書き込むPICへの電圧は、ターゲット基板から供給されることが、デフォルトでの設定値となっている

変換アダプタを使った場合は電源供給が無いため、書き込み電圧をPICKIT3から供給する様に、設定しないと書き込みが出来ない

そのための設定は以下の通りである

1.FILE-Project Propertiesを選択する (以下のイメージ)

mplabx_1

2.左の項目でPICKIT3を選択し、右のOption categories:でPowerを選択 (以下のイメージ)

mplabx_2

3.Power taget circit form PICkit3のボタンを選択し、OKを押す (以下のイメージ)

mplabx_3

これらの設定で、PICKIT3と変換アダプタの組み合わせで、書き込みが出来る様になる

これは、ターゲット基板の電圧でPICKIT3を壊さないためのプロテクトであるが、この設定を行うために、結構な時間を消費したのも事実ではある

 

 

12F675に書込みをしてみる

マイクロコントローラで何らかの事をするためには、マイクロコントローラ自体のプログラムメモリにプログラムの書込が必要である
PICの場合は様々な書込方法があるが、自分が良く使うのはPICKIT3ICSPからDIPソケットとの変換アダプタである

IMGP5639

(緑の基板がICSP-DIP変換アダプタ)

プログラムコードをアセンブルもしくはコンパイル後に、MPLABXの統合環境からそのまま書込が出来る
コードを書き込んだチップを目的の基板に挿して動作確認を行う事になる
12F675等の8pinチップの場合は、ISCPでポートを使用してしまうので、この方法による書込はリーズナブルと思う

IMGP5640

(8pinPIC用に作った、評価基板)

組込みソフトウェアは、プログラム作成→コンパイル(アセンブル)→目的チップへの書込のサイクルが確実に実施出来る環境を整える事が大切である

 

PICのソフトウェア開発環境

PICのソフトウェア開発環境は、Microchip社から無料で提供されている
MPLABXを使用するのが一般的かと思う

MPLABX
この開発環境は、エディターからアセンブラ・リンカ・シュミレータ(デバッガ)を含んだ統合環境である。
特に、素晴らしいと感じるのはPICのシュミレータである
このシュミレータは、PIC自体が無くても、PICのプラグラムを走らせる事が出来る
PICの動作については、このシュミレータで検証する事ができる
また、このシュミレータはC言語やアセンプラで使用している、変数や各ラベルに対応しているので、デバッグも効率的であり、各IOピンの状態も画面でウォッチ出来る
只、開発環境自体の機能が豊富であるがゆえに、慣れるまで操作には戸惑う事があるかも知れない
これについては’習うより慣れろ’で操作を覚えるしかない

更にPICKIT3を使う事で、PIC自体へのプログラム書込と、回路に組み込んだ状態でのデバッグが可能となる
(回路に組み込んだ状態での、プログラム書込とデバッグについては、ISCPと呼ばれる回路での仕組みが必要)
PICKITについては数千円で入手出来るし、文献や情報も沢山あるので、PICでプログラミングを検討している方は入手すべきアイテムである

何らかのシステムに組込んで使用する、マイクロコントローラではデバッグが特に肝となる
場合によっては、回路そのものの動作チェックまで、マイクロコントローラでプログラムする可能性もある
目的のソフトを作成する前に、システムで使用する各要素のデバッグを完了させないと、少しコードサイズが大きくなって来ると、混乱してしまう事もある

マイクロコントローラを選定する要素としてデバッグの効率性は重要なポイントである
それなり投資が出来る人(会社)は、ICE(in-circuit emulator)の利用やメーカサポートが重要であるが
少額で、評価や開発を行いたい人には、MPLABXは魅力的である

時代の変化

 

その昔、何らかの処理をコンピュータで動かすには、大変な作業が必要であった

CPUからのアドレスバスにデコーダを繋ぎ、指定したアドレスにラッチ回路を入れ

それらのハードウェアをデバッグしつつ、ソフトウェアを書いて行くって感じで、CPUを含んだ基板を設計するだけでも、手間がかかったのである

現在であれば、PICに代表されるマイクロコントローラがあれば、簡単に実現出来る

それもクロック精度が重要でなければ、クロックは発振器が内蔵され、プログラムを流して電源を投入するだけで動作してしまう

テクノロジーの恩恵は享受しなければ損である、仕事であれ趣味であれ、やりたい事が低コストで実現出来るのであれば、色々とチャレンジしてみたい

p1

(この写真は8pin 12F675 古めのチップであるが 1024Wordのプログラムエリアで64Byteのメモリ、4CHのA/D変換器と2つのタイマーを持つ)