Откройте файл ldc.c исходника синтезатора и файл ldc.h тестовой программы. Функция "Вывод частоты на индикатор".
Строки в файле ldc.c:
led=(Numbers[(int)N5]);
led=led|0B10000000;
send_l(led);
Перепишите так как в тестовой программе (файл ldc.h), т.е.
led=(Numbers[(int)N5]);
led=led & 0x7f;
send_l(led);
Также строки -
led=(Numbers[(int)N2]);
led=led|0B10000000;
send_l(led);
Скорректируйте таким образом:
led=(Numbers[(int)N2]);
led=led & 0x7f;
send_l(led);
Далее... Откройте файл encoder2.c из исходника синтезатора.
Строку:
New =((EncoderPinPort>>6) & 0b11);
Измените следующим образом:
New =((EncoderPinPort>>3) & 0b11);
То есть, сдвигаете прочитанное число из порта В вправо не 6 раз, а три.
Не знаю, откуда все это появляется. Я ведь в самом начале нашей с Вами совместной работы, взял исходник, который выложил в этой ветке для Core и, вроде все было корректно. Хотя, видимо некоторая моя безалаберность присутствует. В компе уже столько мусора, почистить бы. Но я уже точно знаю, что-то лежит годами и не нужно. Стоит выбросить, как через день оно понадобится.
Опорник от Владимир_К
415285 просмотров, 466 ответов — стр. 31 из 32
22 января 2025 г. в 08:17#451
22 января 2025 г. в 08:44#452
Сделал,прошил,точки на месте 

22 января 2025 г. в 09:07#453
точки на местеА валкодер?
22 января 2025 г. в 09:18#454
А валкодер?Молчит

22 января 2025 г. в 09:25#455
Может отрубить пока SI и проверить без нее?
22 января 2025 г. в 09:34#456
Может отрубить пока SIЕсли у Вас после включения высвечивается частота и только и не на какие действия (нажатие кнопок, переключение диапазонов и т.д.) программа не реагирует, тогда да, надо попробовать отключить (точнее заблокировать) Si5351A. Делаем это так:
Откройте файл Si5351a.c
Строки:
void si5351aSetFrequency(unsigned long z) // Функция управления частотой frequensy -параметр переданный в вызове функции из main.
{
uint32_t pllFreq; //Определение переменных: pllFreq, XTALFreq, l, f, mult, num, denom, divider
uint32_t xtalFreq = XTAL_FREQ;
Перепишите вот так:
void si5351aSetFrequency(unsigned long z) // Функция управления частотой frequensy -параметр переданный в вызове функции из main.
{
return;
uint32_t pllFreq; //Определение переменных: pllFreq, XTALFreq, l, f, mult, num, denom, divider
uint32_t xtalFreq = XTAL_FREQ;
Т.е. в функцию дописываем оператор return:
При этом, при обращении к этой функции, сразу будет возврат в исходную точку, из которой происходил вызов этой функции.
Что касается гашения незначащего нуля на индикаторе для частот меньше 10 мгц. Вот из 328 сообщения:
На диапазонах, где частота меньше 10 мгц, слева нуль незначащий. Его можно убрать.
В программе найдите строки:
send_l(led);
led=(Numbers[(int)N1]);
Замените так:
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b00000000;
Теперь, перед выводом левого знака, программа проверяет, равен ли он нулю. Если нет, то знак выводится. Если равен нулю, то все сегменты гасятся.
22 января 2025 г. в 10:32#457
Замените так:Кажется ошибся.. У Вас же индикатор другой..
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b00000000;
Вот так правильно:
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b11111111;
23 января 2025 г. в 01:13#458
if (N1!=0)Попробую
led=(Numbers[(int)N1]);
else
led=0b11111111;
Последней строкой нужно вписать send_l(led); ?23 января 2025 г. в 03:17#459
Последней строкой нужно вписать send_l(led); ?Вот так в исходнике, в котором нуль высвечивается:
led=(Numbers[(int)N2]);
led=led & 0x7f;
send_l(led);
led=(Numbers[(int)N1]);
send_l(led);
PORTB &=~(_BV(PB1)); //PORTB |=_BV(PB1);
}
Вот так надо изменить, чтобы первая слева цифра не высвечивалась.
led=(Numbers[(int)N2]);
led=led & 0x7f;
send_l(led);
led=(Numbers[(int)N1]);
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b11111111;
PORTB &=~(_BV(PB1)); //PORTB |=_BV(PB1); - было для индикатора с общим катодом
}
То есть, строка
send_l(led);
Заменена на несколько строк...
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b11111111;
То есть, если число N1 не равно нулю, то оно отображается на индикаторе, если ноль, то все сегменты гасятся.
23 января 2025 г. в 03:35#460
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нет
. Валкод сделал оптический,с формирователем на логике.Проверил в конструкции,в которой по умолчанию предусмотрен механический.Работает
.То,что контроллер битый исключено.Жонглирую тремя штуками,перепрошивая.Два с алика и один оригинальный.В компиляторе пробовал ставить атмегу 328 и 328P,не дало результата.
. Валкод сделал оптический,с формирователем на логике.Проверил в конструкции,в которой по умолчанию предусмотрен механический.Работает
.То,что контроллер битый исключено.Жонглирую тремя штуками,перепрошивая.Два с алика и один оригинальный.В компиляторе пробовал ставить атмегу 328 и 328P,не дало результата.23 января 2025 г. в 04:48#461
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нетДавайте сделаем паузу. В одном недостроенном аппарате есть такой индикатор, соберу на макете синтезатор, проверю. Это пару дней.
Все же, непонятно с гашением первого знака. Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?
23 января 2025 г. в 05:08#462
Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?Да,оба варианта.Перекинул все на ардуинку,то же самое.Ноль все еще горит,энкодер без реакции.
9 октября 2025 г. в 12:33#463
Вот еще вариант. Пред-финальный, тестовый cr123. Гетеродин всегда сверху.Позднее реализую переключение боковой на одном из выводов. Статическая индикация на 561ир2 работает превосходно.Приехали TCXO для опоры SI5351. Жду с али индикаторы на 74hc595,чтоб уменьшить габариты платы индикации.Код для Avr studio 4.19 , закомментирован.Можно ставить свою частоту ПЧ,частоту опоры SI, частоты\кол-во\границы диапазонов.
11 октября 2025 г. в 03:30#464
Версия с индикацией на Oled 1306 0.91"
13 октября 2025 г. в 12:55#465
Исправленная версия.Добавил s-метр от S0 до S9+40.Убрал несколько конфликтов.Код с комментариями.Краткое описание внутри архива.Вроде работает 
