DDS発振器に、いろんな機能を付ける
0.早くも、プログラム変更
使い勝手を考えて、ファンクション(SG、memory呼び出し、VFO)の切り替えは、ロータリーエンコーダーで、行なう事にしました。
決定は、全て、down_swのpushのみです。
up_swは、周波数設定時の、位取り専用に、しました。
やっぱ、操作は、統一がとれないと、戸惑うことに、なるので....
今の所、ファンクションに応じて、ロータリエンコーダーは、
3つの働き(SG、及びVFOのoffsetの周波数設定、メモリー呼び出しの切り替え、ファンクションの切り替え)を、しています。
これらが、出来ないと、データフラッシュの読み書きを、さわる気が、出てこないんです。
今んところの、改良したプログラムも、置いときます。
操作画面は、殆ど変わりません。
VFOモード
上段 左端の、"0"は、現在のメモリー位置、下段の "x1MHz" は、周波数設定ための、現在の位取り。
+は、VFOのオフセットを、プラスに採っている事を、示す。
右の画像の、周波数カウンターは、DDSの、真の、発振周波数を示す。
同じく、VFOモードで、オフセットは、マイナス。 これが、default。
右の画像の、周波数カウンターは、DDSの、真の発振周波数を示す。
次に、
オフセットをプラスに採るには、downスイッチを推しながら、電源投入する。
こんな画像を表示する。
downスイッチを離すと、このinformationは、消える。
他には、ダイアル逆回し
これは、電源投入時に、upスイッチを押しておくと
informationが、表示され、upスイッチを離すと、消えて、SGモードに入る。
プログラム的には、難しくありません。
メイン関数の最初の所で、判定するだけです。
void main()
{
drr0=drr1=drr2=drr3=1; //駆動能力 high
set_FastCLK();
set_terminals();
p1=0x00;
set_timerX();
initialize_LCD();
set_terminals();
if(!down) //function switch
{
offset_plus=1; //offset direction default is minus
locate (1,2);
lcd_write_str("offset is +");
while(!down);
}
if(!up) //桁取りswitch & メモリー選択switch
{
dir[13]=+1; //逆dialに設定
dir[14]=-1;
locate(1,2);
lcd_write_str("set to revese dial");
while(!up);
}ロータリーエンコーダーの、回転判定の為の配列 dir[]の中身を、入れ変えるだけです。
その他、
単純な、SGモード
メモリー呼び出しモード。(データフラッシュのメモリーでは、ありません。)
ロータリーエンコーダを回すと、メモリーの内容が変化する。
決定は、upスイッチを押す。 すると、SGモードになり、この周波数が、設定される。
まだ、これだけの機能しか、ありません。
データフラッシュへの、書き込み、及び、呼び出しも、まだ、できてませんねん。
今の、私と、しましては、単純な、SGモードで、充分なもんで....
苦労した所は
なんせ、各種設定のためのボタンが、2つしか、無いところです。
upスイッチは、主に、周波数設定の為の、位取りに採りました。
ただ、メモリーの内容をSGモードに送る時だけ、このupスイッチで、決定いたします。
downスイッチは、function設定に使います。
最初のモードは、SGモードです。
もう一回押すと、メモリー呼び出しモードに、なります。
このモードの決定は、唯一、upスイッチで決定します。
もう一回押すと、VFOモード設定に、入ります。
まず、offsetの設定に入ります。
この時、ロータリーエンコーダによる周波数設定、及び、位取りは、有効です、当然。
"Cnfg VFO"は、"cnfg offst"の、方が、見栄え、ええなあ。
offsetの決定は、同じ、downスイッチを押します。
これで、VFOモードに、入ります。
同じスイッチに、違う意味を持たせる為に、3つほど、変数を設定する必要が、ありました。
ここが、ややこしい所ですわ、手間取りました。
考えてみたら、メモリー位置の表示は、不要かも.....
その他、フラッシュメモリーの読み書き、2トーンジェネレータ、sweep等、考えられる事は、沢山あります。
2トーンジェネレータは、以前、SH7047で試した事が、ありますが
単に、2つの周波数を、交互に出力すれば、可能だと、思います。
フラッシュメモリーは、1万回の書き込みができるそうですが、
「R8C/Tinyマイコンリファレンスブック 新海先生 CQ出版 」によると、
工夫で、もっと、沢山の回数が可能になる、ようです。
バグあると、思いますが、ここまでのプログラムを、残して置きます。
H.17.12.10