CYTEC版    エンコ−ダ−を使った、メインダイアルのスッテプ数を、自動的に    設定するル−チンです。       2019/03 CYTEC/Uchida ************************************************************************** //■■■グロ−バル変数設定 ■■■■■■■■■■■■■■■■■■■ ■■■■■■ static unsigned long count=0; //メインカウンタ−(発振周波数用) static unsigned long LCD_count; //LCVD表示用変数 static unsigned long step; //エンコ−ダ ステップ数用カウンタ− static unsigned long RE_count; //時間単位での変化量用レジスタ static unsigned int en_con; //割り込み回数カウンタ− static unsigned char RE; //エンコ−ダ用変数その1 static unsigned char RE_TMP; //エンコ−ダ用変数その2 //■■■ 割り込み処理 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■ void interrupt() { INTCON.T0IF = 0; //割り込みフラグ・クリア TMR0 = 0x80; //割り込み周期調整定数 //エンコ−ダ−回転方向取得 RE <<= 2 ; //エンコ−ダ−の状態を保存する RE &= 0b00001100; RE_TMP = PORTA; //現在のエンコ−ダ−の状態を読み込む RE_TMP >>=4; RE_TMP &= 0b00000011; //マスク処理 RE = RE | RE_TMP; //旧デ−タと新デ−タを足す //ステップ数自動切換え Type 2 en_con = en_con+1; //割り込み回数カウント if(en_con == 3000) //2000 to 4000ぐらいが良いようです。 { RE_count &= 0xFFFF; step = 10+(float)((RE_Count/6.8)*12.4); //ステップ数計算 if(step>200) step = 1000; //ステップ数が200を越したら1KHzステップに en_con = 0; //カウンタ−類クリア RE_count = 0; //ステップ用カウンタ−クリア } //1倍カウント if(RE == 1) { count = count + step; //カウントUP RE_count = RE_count +10; // Step作成用カウンタ− if(limit_flag == 1) //周波数設定時パスする 0設定 { if(count >= vfo_freq_hi) //周波数上限リミット { count = vfo_freq_hi; } } } if(RE == 4) { count = count - step; //カウントDown RE_count = RE_count +10; // Step作成用カウンタ− if(limit_flag == 1) //周波数設定時パスする { if( count <= vfo_freq_low ) //周波数下限リミット { count = vfo_freq_low; } } } LCD_count = count; //表示を10Hzからにするため。 } //////////////////////  END  ///////////////////////////////////////////////////// この後、     count を使い、周波数を設定尾する LCD_count を使い、LCDに周波数を表示させる。 PICの初期設定で、Timer0のインタ−バル割り込みが、できるようにする。 今回は、PIC内臓プルアップを、使っています。 メインダイアルの同調フィ−リングは、  1)ステップ数計算においての     割り込み数                     RE_countを割る数の大きさ その後,掛ける数の大きさ 2)機構的に 使用するエンコ−ダ−の種類緒、構造 使用するダイアルツマミの大きさ などにより変わります。これっといった定量井的なものはなく、 ダイアルを回して、実際に受信してみて、調整するしかありません。