Page 27 of 39
Re: Универсальный синтезатор Si570/Si5351
Posted: 21 Jul 2021, 16:47
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 - это массив кодов выдаваемых на дешифратор диапазонов. Его длина должа быть равна количеству диапазонов
Re: Универсальный синтезатор Si570/Si5351
Posted: 21 Jul 2021, 17:42
by SWL
Я так понимаю в примере 10 диапазонов ,и на каждом указан код выводимый при включении соответствующего бэнда.
Просто, нет слов
А я тут кнопку цепляю
Спасибо!
Re: Универсальный синтезатор Si570/Si5351
Posted: 23 Jul 2021, 08:58
by SWL
Все работает, но есть небольшое но
Сдуру запилил аж 47 дапазонов

с удобной для меня раскладкой-
ругается на нехватку динамической памяти

.
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 ;
Я подправил перестройку по кольцу с конца в начало (и наоборот) текущего диапазона.
Re: Универсальный синтезатор Si570/Si5351
Posted: 23 Jul 2021, 09:07
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 ; // становимся в начало
}
Re: Универсальный синтезатор Si570/Si5351
Posted: 23 Jul 2021, 09:17
by SWL
Ок, спасибо, попробую.
Re: Универсальный синтезатор Si570/Si5351
Posted: 25 Jul 2021, 20:01
by SWL
Здравствуйте , Андрей!
Попробовал - при настройке вверх -сразу становится в начало текущего диапазона.
При настройке вниз - в начало первого, независимо от текущего диапазона.
Re: Универсальный синтезатор Si570/Si5351
Posted: 25 Jul 2021, 20:19
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);
}
Re: Универсальный синтезатор Si570/Si5351
Posted: 26 Jul 2021, 16:10
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;
}
}
Вечером проверю.
Re: Универсальный синтезатор Si570/Si5351
Posted: 26 Jul 2021, 16:22
by SWL
Когда зацикливаю, ругается компилятор :
"a function-definition is not allowed here before '{' token"
Code: Select all
void loop () {
if (bands != old_bands)
Что не так делаю?
Re: Универсальный синтезатор Si570/Si5351
Posted: 26 Jul 2021, 17:31
by UR5FFR
давайте по порядку - я не могу сразу на все отвечать
При настройке вниз - в начало первого, независимо от текущего диапазона.
а вы куда вообще код вставляете проверки выхода за границы и переключения бендов?