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