Универсальный синтезатор Si570/Si5351

UR5FFR
Site Admin
Posts: 2195
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Универсальный синтезатор Si570/Si5351

Post by UR5FFR »

Не, это очень мудрено. Вам всего-то надо переписать выставление кодов диапазона на дешифратор в UpdateBandCtrl().
В trx.BandIndex содержится индекс бенда. Можно завести простой массив который будет ставить в соответствие бенду что выдавать на дешифратор.

Code: Select all

void UpdateBandCtrl() 
{
  const byte BandToBPFIndex[] = {0, 1, 2, 7, 3, 4, 3, 3, 1, 5};
#ifdef BANDCTRL_ENABLE
  byte bpf_idx = BandToBPFIndex[trx.BandIndex];
  outBandCtrl.Set(BCPN_BAND_0, bpf_idx & 0x1);
  outBandCtrl.Set(BCPN_BAND_1, bpf_idx & 0x2);
  outBandCtrl.Set(BCPN_BAND_2, bpf_idx & 0x4);
  outBandCtrl.Set(BCPN_BAND_3, bpf_idx & 0x8);
BandToBPFIndex - это массив кодов выдаваемых на дешифратор диапазонов. Его длина должа быть равна количеству диапазонов
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Code: Select all

{0, 1, 2, 7, 3, 4, 3, 3, 1, 5}
Я так понимаю в примере 10 диапазонов ,и на каждом указан код выводимый при включении соответствующего бэнда.
Просто, нет слов :)
А я тут кнопку цепляю :D
Спасибо!
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Все работает, но есть небольшое но :)
Сдуру запилил аж 47 дапазонов :D с удобной для меня раскладкой-
ругается на нехватку динамической памяти :oops: .
30 кушает без проблем, но раскладка не такая удобная.
А так как уменя только приемник, то возник вполне закономерный вопрос- что лишнее можно отрезать из режима передачи, что бы не грузило динамическую память?
Типа сплит, рит, куарпи и прочее не нужное при приеме.
И еще один вопрос- можно ли что то подправить,чтобы достигая конца диапазона автоматически переходить на следующий?

Code: Select all

if (BandIndex >= 0) {
      if (state.VFO[state.VFO_Index] < Bands[BandIndex].start) 
        state.VFO[state.VFO_Index] =Bands[BandIndex].end ;
      else if (state.VFO[state.VFO_Index] > Bands[BandIndex].end)
        state.VFO[state.VFO_Index] =Bands[BandIndex].start ;
Я подправил перестройку по кольцу с конца в начало (и наоборот) текущего диапазона.
UR5FFR
Site Admin
Posts: 2195
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Универсальный синтезатор Si570/Si5351

Post by UR5FFR »

С памятью вопрос никак не решается - только менять процессор.
Бенду по кругу можно так попробовать

Code: Select all

if (BandIndex >= 0) {
      if (state.VFO[state.VFO_Index] < Bands[BandIndex].start && BandIndex > 0) {
        SwitchToBand(BandIndex-1); // переключаем бенд
        state.VFO[state.VFO_Index] =Bands[BandIndex].end ; // становимся в конец
      }
      else if (state.VFO[state.VFO_Index] > Bands[BandIndex].end && BandIndex < BAND_COUNT-1)
        SwitchToBand(BandIndex+1); // переключаем бенд
        state.VFO[state.VFO_Index] =Bands[BandIndex].start ; // становимся в начало
      }
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Ок, спасибо, попробую.
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Здравствуйте , Андрей!
Попробовал - при настройке вверх -сразу становится в начало текущего диапазона.
При настройке вниз - в начало первого, независимо от текущего диапазона.
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Еще вопрос- пробую обозначить диапазон по достижении нужной частоты- все работает красиво, пока только один диапазон.
Ввожу второй, и цифры обозначения диапазона начинають мерцать, причем последний почти не мерцает. Понимаю , что идет наложение цифр , но как побороть не знаю. Может подскажете как?
Под RX на фото обозначен диапазон 80 м.
А как в название диапазона ввести буквы?
Если делаю через drawBtn надпись , то и на одном диапазоне мерцает , а через tft.print - не мерцает.


Code: Select all

 int  bands;
	
	 { 
	 bands = 160;
	if (trx.state.VFO[trx.GetVFOIndex()] > 1810000 && trx.state.VFO[trx.GetVFOIndex()] < 2000000 ) 	
	{		
	tft.setTextColor(ILI9341_WITE);
    tft.setFont(&Tahoma18);
	tft.setTextSize(1);
    tft.setCursor(0, 70);
    tft.print(bands);
	   } else {
	  drawBtn(0, 35, 55, 33, "       " , ILI9341_BLACK, ILI9341_BLACK); 
	   }
	   
	   { 
	 bands = 80;
	if (trx.state.VFO[trx.GetVFOIndex()] > 3500000 && trx.state.VFO[trx.GetVFOIndex()]<3800000 ) 	
	{		
	tft.setTextColor(ILI9341_WITE);
    tft.setFont(&Tahoma18);
	tft.setTextSize(1);
    tft.setCursor(0, 70);
    tft.print(bands);
	   } else {
	  drawBtn(0, 35, 55, 33, "       " , ILI9341_BLACK, ILI9341_BLACK); 
	   }   
Attachments
162723347738960932147.jpg
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Пока придумал так на примере двух диапазонов:

Code: Select all

{
  
int bands;
int old_bands = bands; 	
   if (trx.state.VFO[trx.GetVFOIndex()] > 1810000 && trx.state.VFO[trx.GetVFOIndex()] < 2000000 )           
     bands = 160;
 else
	 bands = 0;
   if (trx.state.VFO[trx.GetVFOIndex()] > 3500000 && trx.state.VFO[trx.GetVFOIndex()] < 3800000 )           
     bands = 80; 
 else
	 bands = 0; 
{
	void loop ();		 
		if (bands != old_bands) 
			{	
			drawBtn(0, 35, 55, 33, "      ", ILI9341_BLACK, ILI9341_BLACK);	
			}
			else if (bands = 0) 	
			{	
			drawBtn(0, 35, 55, 33, "      ", ILI9341_BLACK, ILI9341_BLACK); 
			}
					else if (old_bands = 0) 
					{			
			drawBtn(0, 35, 55, 33, "      ", ILI9341_BLACK, ILI9341_BLACK); 
					}	  
		else	
		tft.setTextColor(ILI9341_WITE);
		tft.setFont(&Tahoma18);
		tft.setTextSize(1);
		tft.setCursor(0, 70);
		
		tft.print(bands);	
	
	old_bands = bands;
	}
}
Вечером проверю.
Last edited by SWL on 26 Jul 2021, 16:49, edited 3 times in total.
SWL
Posts: 94
Joined: 23 Feb 2021, 10:53
Позывной: SWL

Re: Универсальный синтезатор Si570/Si5351

Post by SWL »

Когда зацикливаю, ругается компилятор :
"a function-definition is not allowed here before '{' token"

Code: Select all

void loop () 	{	 
		if (bands != old_bands) 
Что не так делаю?
UR5FFR
Site Admin
Posts: 2195
Joined: 21 Apr 2012, 22:00
Позывной: UR5FFR
Location: Odessa

Re: Универсальный синтезатор Si570/Si5351

Post by UR5FFR »

давайте по порядку - я не могу сразу на все отвечать :)
При настройке вниз - в начало первого, независимо от текущего диапазона.
а вы куда вообще код вставляете проверки выхода за границы и переключения бендов?
Post Reply