Автор Тема: Опорник от Владимир_К  (Прочитано 77259 раз)

0 Пользователей и 6 Гостей просматривают эту тему.

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #450 : Январь 22, 2025, 08:17:23 pm »
Откройте файл 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 и, вроде все было корректно. Хотя, видимо некоторая моя безалаберность присутствует. В компе уже столько мусора, почистить бы. Но я уже точно знаю, что-то лежит годами и не нужно. Стоит выбросить, как через день оно понадобится.
« Последнее редактирование: Январь 22, 2025, 08:19:40 pm от Владимир_К »

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #451 : Январь 22, 2025, 08:44:19 pm »
Сделал,прошил,точки на месте 123123

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #452 : Январь 22, 2025, 09:07:01 pm »
точки на месте
А валкодер?

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #453 : Январь 22, 2025, 09:18:29 pm »

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #454 : Январь 22, 2025, 09:25:31 pm »
Может отрубить пока SI и проверить без нее?

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #455 : Январь 22, 2025, 09:34:44 pm »
Может отрубить пока 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, 09:44:13 pm от Владимир_К »

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #456 : Январь 22, 2025, 10:32:20 pm »
Замените так:

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;
« Последнее редактирование: Январь 22, 2025, 10:39:35 pm от Владимир_К »

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #457 : Январь 23, 2025, 01:13:09 pm »
if (N1!=0)
led=(Numbers[(int)N1]);
else
 led=0b11111111;
Попробую 1yep Последней строкой  нужно вписать send_l(led); ?

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #458 : Январь 23, 2025, 03:17:34 pm »
Последней строкой  нужно вписать 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 не равно нулю, то оно отображается на индикаторе, если ноль, то все сегменты гасятся.

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #459 : Январь 23, 2025, 03:35:53 pm »
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нет dontt44. Валкод сделал оптический,с формирователем на логике.Проверил в конструкции,в которой по умолчанию предусмотрен механический.Работает  123123 .То,что контроллер битый исключено.Жонглирую тремя штуками,перепрошивая.Два с алика и один оригинальный.В компиляторе пробовал ставить атмегу 328 и 328P,не дало результата.
« Последнее редактирование: Январь 23, 2025, 03:38:43 pm от ZTM »

Оффлайн Владимир_К

  • Hero Member
  • *****
  • Сообщений: 1228
Re: Опорник от Владимир_К
« Ответ #460 : Январь 23, 2025, 04:48:39 pm »
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нет
Давайте сделаем паузу. В одном недостроенном аппарате есть такой индикатор, соберу на макете синтезатор, проверю. Это пару дней.
Все же, непонятно с гашением первого знака. Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?

Оффлайн ZTM

  • Sr. Member
  • ****
  • Сообщений: 353
Re: Опорник от Владимир_К
« Ответ #461 : Январь 23, 2025, 05:08:26 pm »
Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?
Да,оба варианта.Перекинул все на ардуинку,то же самое.Ноль все еще горит,энкодер без реакции.
« Последнее редактирование: Январь 24, 2025, 04:00:24 pm от Игорь 2 »