前回1Hz桁表示とチューニング、CW速度1WPM以下設定改造をしました。juma-tx500.cファイルのFREQ+ FREQ-ボタンにそれぞれ押しっぱなしフラグをたてて、短押しで1Hzステップ、押しっぱなしで10Hzステップ調整としました。もともとチャタリング対策で100ミリ秒ほどディレイを置いているものの時々短押しのつもりが10Hz動いてしまうことがあるので別途カウンタを設けて0.2秒以上の長押しで10Hzステップになるように追記しました。
( int temp_time; // for save delay time 変数宣言追加)
【juma-tx500.c メインループ始まり部分】
// Main forever loop _____________________________________________________________________________________________________________
for(;;)
{
MAIN_TEST = !MAIN_TEST; // timing test
static unsigned char sw_flag = 0;
// status flags bit0:UP button, bit1:DOWN button, bit2:setting change
【FREQ+ボタン処理部分(FREQ-も同様の処理)】
// Freq +/- (PA100 Band buttons)
// static unsigned char sw_flag = 0;
static unsigned char cnt = 0;
if(FREQ_UP == 0) // Band + button
{
sw_flag &= 0xFB; // clear frequency change end flag
if(RFPWR == 0)
eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 100; // speed tune
else if(sw_flag & 0x01)
eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 10; // normal tune
else
eeprom.defval.txfreq[board_type] = eeprom.defval.txfreq[board_type] + 1; // fine tune
if(eeprom.defval.txfreq[board_type] > hi_tx_freq[board_type])
{
eeprom.defval.txfreq[board_type] = hi_tx_freq[board_type];
// beep(HZ587_31, cal.calval.beep_len); // D tone over beep
beep(TONE_A, cal.calval.beep_len); // A tone over beep
}
else
// beep(HZ466_85, cal.calval.beep_len); // Bp tone ok beep
beep(TONE_D, cal.calval.beep_len); // D tone ok beep
calc_tword(); // just calculate new DDS set value
ms_delay(BUTTON_DEBOUNCE);
if(FREQ_UP)
{
sw_flag &= 0xFE; // clear UP button pressing flag
sw_flag |= 0x04; // frequency change end flag
temp_time = seconds;
cnt = 0;
}
else if(cnt) sw_flag |= 0x01;
else cnt++;
}
また、475.5kHzの免許申請が厳しいため必要以上の電力が選択されないように、CONFIGメニューにMAX(60W...といっても実測54Wくらいなのですが^^;)を選択できなくするようなリミッタON・OFFメニューを追加して、電源ONの時にはMAXが選択できなくなる(メニューで解除できる)ようにしました。
【main関数内 select sub modeセクションに追加】
(int limit = 1; // power limit(0:OFF for TX136, 1:ON for TX500) 変数宣言追加)
// MAX Power limitation for Mobile
case 11:
set_cur_lcd(LINE1);
lcd_putst("Mobile POW limit");
set_cur_lcd(LINE2);
limit = limit + encoder_get(); // power limit on /off
if(limit < 0) // keep within limits
limit = 0;
if(limit > 1)
limit = 1;
lcd_putst("Select = ");
if(limit == 0)
lcd_putst("OFF ");
if(limit == 1)
lcd_putst("ON ");
break;
【main関数内 RF powerセクションに追加】
// RF power
if(RFPWR == 0 && FREQ_UP == 1 && FREQ_DN == 1) // RF PWR - button alone
{
eeprom.defval.rfpwr++;
#if 0
if(eeprom.defval.rfpwr > MAX_RFPWR)
{
eeprom.defval.rfpwr = 0;
beep(HZ587_31, cal.calval.beep_len); // D tone beep whe roll over
}
else
beep(HZ466_85, cal.calval.beep_len); // Bp tone beep
#endif
if(limit)
{
if((eeprom.defval.rfpwr + 1)> MAX_RFPWR) eeprom.defval.rfpwr = 0;
}
else if(eeprom.defval.rfpwr > MAX_RFPWR) // check roll over
eeprom.defval.rfpwr = 0;
switch(eeprom.defval.rfpwr) // sound different tone for each power level
{
case 0:
beep(TONE_A, cal.calval.beep_len); // A tone beep
break;
case 1:
beep(TONE_B, cal.calval.beep_len); // B tone beep
break;
case 2:
beep(TONE_C, cal.calval.beep_len); // C tone beep
break;
case 3:
beep(TONE_D, cal.calval.beep_len); // D tone beep
break;
}
ms_delay(BUTTON_DEBOUNCE);
while(RFPWR == 0)
{
}
}
あと、オリジナルでは設定変更や周波数の変更が電源OFFのときにのみEEPROMに書き込むようになっており、不意の停電で設定変更が反映されないという事象に対して、CONFIGメニューの離脱5秒後、または周波数変更完了の5秒後にEEPROMに書き込むようなコードを追加しました。
【DISPLAY/CONFIGボタン長押し処理部分】
if(long_push == 0) // major mode change
{
lcd_mode++;
sw_flag &= 0xFB;
if(lcd_mode > MAX_LCD_MODE)
{
sw_flag |= 0x04; // setting change end flag
temp_time = seconds;
lcd_mode = 0;
}
【メインループ内に追加 5秒後に記憶する】
if(sw_flag & 0x04)
{
if((seconds - temp_time) == 5)
{
save_defaults();
// beep(TONE_C, cal.calval.beep_len); // for debug
sw_flag &= 0xFB;
}
}
改造中にコードを読むことでだいたいの処理の流れがおぼろげながら見えてきたところです。今後は必要な処理を考える上で、オリジナルプログラムでのEEPROM書き込み読み込み、タイマー処理(内部にフリーの秒カウンタがあるので活用するなど)の仕方を読み取っていこうと思います。
メッセージメモリ読み書き部分はKeyer Mini-V2のコード流用が出来そうです。
MAX制限のメニュー |
0 件のコメント:
コメントを投稿