Форум Радиолюбителей

Опорник от Владимир_К

415275 просмотров, 289 ответов

Владимир_К 6 мая 2021 г. в 01:09#1
Да вы на всякий случай уберите обращение к сишке.
Да там много мест, где придется убирать. Если программа с сишкой у Вас подвиснет, я тогда сделаю тестовую для проверки индикатора, так будет проще.
Возможно она у меня и есть. Тут много чего есть, проблема найти...
Владимир_К 6 мая 2021 г. в 03:53#2
Паяю индикатор
Тестовая прошивка для проверки индикатора.
Подключение:
Dat индикатора, цепляем на вывод процессора - PB2;
Blink - PB1;
Clk - PBO;

Все файлы прошивок, которые возможно придется Вам сбрасывать, будут иметь одно имя "main". Так что Вы их там у себя переименовывайте, например:
main_0, main_1 и т.д.
Владимир_К 6 мая 2021 г. в 04:04#3
На индикаторе нули, а потом начнет значение увеличиваться на единицу, через 100 мсек. И так бесконечно.
Хотя, наверное не правильно сделал.. Долго придется ждать, пока все комбинации на дисплее отразятся. Сделаю лучше так - все нули потом 1111111, 2222222 и т.д.
Но позже, пока паяйте.
Владимир_К 6 мая 2021 г. в 05:42#4
Диагностика. Видео работы программы диагностики и прошивка.
https://www.youtube.com/watch?v=JqKkpXOt4MY
Владимир_К 6 мая 2021 г. в 07:07#5
Через инвертор как в схеме не работает.
Что инвертор не нужен, я об этом писал:
http://analogtrx.com/SMF/index.php?topic=6.585
599 сообщение.
Ну коль сами разобрались, значит все нормально. Теперь пробуйте подключить Si5351A. И прошивайте всю программу. На выходе сишки получите сигнал на частоте вроде 3600 кгц+пч (толком уже не помню). Без всего остального программа будет работать. То есть, частота отобразится на индикаторе и будет выход на сишке.
Владимир_К 6 мая 2021 г. в 07:10#6
Кстати видео не работает. Автор ограничил доступ пишет.
Да я толком не знаю, где там ограничить, где разрешить... Сейчас гляну, я мало выкладывал.. потому хрен его знает, что там и как.
ra0ahc 6 мая 2021 г. в 07:12#7
Олдскульно ) успехов.
veso74 6 мая 2021 г. в 07:25#8
Нет.
ЦитироватьЧастен видеоклип
Влезте в профила си, ако имате достъп до този видеоклип

Това е частен видеоклип. Моля, влезте в профила си, за да удостоверите, че имате право да го гледате.
Владимир_К 6 мая 2021 г. в 07:33#9
Нет.
Да хрен с ним. Там нечего смотреть, ну меняются цифры, только и всего. Тем более у ТС все работает.
Не нашел я пока, что там поменять. Там куча настроек, больше мне нечем заняться...
Владимир_К 6 мая 2021 г. в 09:12#10
Немного подправил схемы. В основном файл "процессор" и "S-meter". Замените прежние на эти.
Владимир_К 6 мая 2021 г. в 10:09#11
Это реально сделать?
Это просто, если Ваши желания совпадают с тем, что мной уже реализовано в каких-то конструкциях. Короче, давайте тз, буду смотреть..
Но сперва, запустите то, что остается неизменным. Лишнее убрать проще некуда. Добавить - надо смотреть.
Я уже писал, у коллег появляются всякие идеи, я пишу, а они потом пропадают. Работа на корзину.
Владимир_К 6 мая 2021 г. в 11:24#12
Кстати я насколько знаю, есть правильные безспуровые коды для сишки, есть со спурами, у вас с этим все хорошо?
Совсем безспуровых нет. Спуры есть всегда. Но можно так накосячить, что спуры будут значительными. Я вроде таких косяков не допускал (т.е. применял рекомендуемый алгоритм программирования сишки). А как оно на самом деле получилось, это можно определить только сравнением. Положить рядом на столе два синтезатора и сравнить. Без этого, разговоры на эту тему бесполезны. Других, кем-то изготовленных синтезаторов у меня нет, так что сравнить не с чем. На сайте CQHam я выкладывал спектры синтезатора на Si5351A. Там можно посмотреть.
Кстати, вот недалеко, были результаты. Тут также спектр микросхемы SI5340A, которая в десятки раз дороже. Она конечно получше, но для реализации ее возможностей, нужен соответствующий опорник.
Владимир_К 6 мая 2021 г. в 12:46#13
Там ардуино нано версии 3. Как ее прошивать, ведь у вас код явно будет не в ардуино иде...
Компилятор у меня в составе программы AVR Studio 4.19. НЕХ-файл создан ейной. Его можно зашить в Ардуино. Программа для прошивки - XLoader. Найдите ее поиском. В архиве НЕХ-файл прошивки. Подключаете Ваш Ардуино USB шнурком к компьютеру, открываете Нех_файл, предварительно извлеките его из архива.
Но, к сожалению, я уже не помню. Возможно без Si5351A программа не будет работать. Там при инициализации программа запрашивает по шине I2C Si5351A. Если ее нет, никто не ответит и программа будет ждать до второго пришествия.
Если после прошивки возникнет такая ситуация, я уберу из программы обращение к Si5351A. Таким образом, Вы сможете протестировать индикатор.
И еще, вполне возможно, что при разводке плат я мог как мне заблагорассудится, менять выводы Ардуино, для удобства в разводке. Поэтому, желательно сравнить схемы в Сплане с печатками. К сожалению, тут я не очень аккуратен. Программу мог поменять, а схему не откорректировал.
Владимир_К 6 мая 2021 г. в 12:50#14
Будет ли схема его видеть?
Хоть я и не на сухарях, но такое покупать жаба давит .
Валкодер должен выдавать сдвинутые по времени импульсы. Если Ваш валкодер это делает, проблем не будет. Возможны проблемы с количеством импульсов. Я программу проверял с валкодером на 150 импульсов максимум. Но это потом. Если проблема такая возникнет, придется искать где проблема.
Я вот так делаю:
http://www.cqham.ru/forum/showthread.php?1786-%C2%E0%EB%EA%EE%E4%E5%F0-%F1%E2%EE%E8%EC%E8-%F0%F3%EA%E0%EC%E8/page68
677 сообщение. Или так, как на фото.
Владимир_К 7 мая 2021 г. в 01:39#15
Как понимаю, ещё нужен тулчейн к редактору. Лежит там же по ссылке.
Я уже не помню.. Давно ставил, поэтому, для уточнения вот тут почитайте:
http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-1.html
Права у Atmel сейчас вроде выкупила Microsoft, она и гонит свои тулчейны, также компиляторы и среды разработки. AVR Studio есть уже и 5,6 и 7 версии. А теперь уже и название вроде поменяли.
Владимир_К 7 мая 2021 г. в 01:42#16
Его я рекомендовал лишь потому, что с его помощью мои проекты открываются без проблем (хотя наверное и последними версиями также проблем не будет), кроме того, если возникнет необходимость, могу проконсультировать. Последние версии намного круче и обладают многими полезными функциями, но тратить время на изучение новых версий, мне лень.
Владимир_К 7 мая 2021 г. в 02:36#17
Вроде самое последнее вот здесь. Эта среда может работать не только с Атмел, но и с Пиками.
https://www.microchip.com/en-us/development-tools-tools-and-software/microchip-studio-for-avr-and-sam-devices
Владимир_К 7 мая 2021 г. в 07:40#18
По какому принципу подключать дешифратор диапазонов ?
У меня были проблемы с отсутствием свободных выводов портов. Поэтому, все управление у меня представляло три регистра каждый на 8 выводов, итого я мог управлять 24 точками. Один регистр задействован для управления светодиодами подсветки кнопок, они ведь не фиксированы (на фото трансивера видно), второй регистр управляет ДПФ и ФНЧ. 8 диапазонов. И третий регистр переключает все остальное RX/TX, АРУ, УВ��, аттенюатор и пр. Там еще свободные остались выводы. Управляется вся эта лабуда по трем проводам, Дата, Такт и Строб. Микросхемы соединены в цепочку. Единица или ноль, поступившая на вход первой микросхемы за 24 такта сдвигается на последний вывод, последней микросхемы. Таким образом вся комбинация 24 разрядного числа загоняется в регистры. По команде Строб, выдается на выходы.
Я Вас не ограничиваю, можете делать как угодно и на чем угодно. Кто-то ставит дешифратор 4 входа 16 выходов. Тогда надо задействовать 4 порта и получим 16 выходов, а мне этого не хватало, надо 24.
Каждый регистр монтируется прямо на плате (например ДПФ). Для управления реле, применяю ULN2803, 50v, 500 mA, каждый вывод). Таким образом, нет жгута проводов от контроллера к плате, а всего лишь три провода. Некоторым наличие красивого жгута, нравится. Я его вязать не умею, поэтому стараюсь обойтись без него .
Да забыл. Тут же еще ГУНы появились и делители, так что не забывайте.
Владимир_К 7 мая 2021 г. в 09:51#19
На выходе сишки получите сигнал на частоте вроде 3600 кгц+пч (толком уже не помню).
Неправильно. Частота, которую выдаст синтезатор при включении, зависит от положения переключателя диапазонов. Просмотрел сейчас код, для уточнения.
Владимир_К 7 мая 2021 г. в 11:02#20
По порядку..
1. По этому вопросу есть несколько решений. Во-первых, Вы можете поставить себе программу (она бесплатная) AVR Studio 4.19. Я Выкладываю исходник и Вы можете делать все что угодно, там просто изменить цифру. Где, место нахождения я укажу. Я так делаю. Второй вариант, могу установку частоты кварца внести в меню синтезатора. То-есть, Вы нажимаете какую-нибудь кнопку до включения синтезатора, не отпуская ее, включаете синтезатор. Попадаете в меню. Устанавливаете частоту кварца, промежуточную частоту и пр. Снова нажимаете кнопку и все будет записано в ЕЕПРОМ. Манипулировать частотой кварца все равно надо, так как кварц 27 мгц, он вовсе не 27. Подстраивать все равно надо.
2. Без проблем.
3. У меня валкодер интеллектуальный. Если вы крутите медленно, перестраивается также через шаг, если крутнуть быстро, за один оборот можно перестроиться на несколько кгц. Поэтому, необходимости в переключении шага я не вижу. Но, если Вам так больше нравится, не вопрос. Сделаю.
4. Хоть 100. У меня число диапазонов ограничено микросхемой в переключателе, она 8-ми разрядная. И мне нравится переключать галетником, а не тыкать в кнопки, которые не сразу и найдешь. Коль Вам так удобнее, "вверх-вниз" не вопрос.
5. Ну это и так есть. ДПФ же переключаются, от этого сигнала можно переключать и ГУНы. Делитель? Честно говоря, я не знаю зачем Игорь его ввел. Он ограничил перестройку опорника, кажется в пределах 10-20 Мгц. А ее можно взять любую. Впрочем, тут надо его консультация.
6. Это пока вопрос. Вполне возможно, что будет работать без проблем. А там видно будет.
7. Не вопрос, главное, чтобы были свободные порты контроллера. А так как Вы кое-что выбрасываете, они будут.
8. То потом, вместе адаптируем.
И еще. Мне некуда было ставить стрелочный прибор, поэтому стоит светодиодная линейка. Оно, конечно, не то. Думаю, это надо выкинуть, а поставить обычный стрелочник. А там, как хотите.
Есть у меня подпрограммы управления индикатором на МАХ7219 (готовая плата от китайцев), есть на жидкокристаллическом 4148 (индикатор такой как в Элекрафте К2, только побольше размером). Подумайте, может их лучше всунуть. На МАХ, конечно надо бы попробовать соорудить макет и поднести поближе к приемнику. Будут помехи, или нет, и принять решение.
И последнее. Мне не хочется сооружать макеты и проверять все эти переделки, поэтому это все будете испытывать сами на своем железе. Я вношу изменения в программу, Вы прошиваете, пробуете.
Поэтому все эти "хотелки" будут добавляться по одной и после каждого изменения, проверка в железе. Могу, конечно поставить Протеус. Но, он иногда глючит. Раньше стоял, потом я от него отказался.
Владимир_К 7 мая 2021 г. в 11:27#21
На майских займусь платой SI5351 и макетку сделаю. По портам бы лучше обозначить на схеме по новой прошивке.
Для Si5351A порты менять нельзя. Там жесткая привязка к аппаратной шине I2C(SDA и CKL).
Игорь 2 7 мая 2021 г. в 11:29#22
Игорь поясните про делитель в смесителе.

Так там всё ясно, как день - делитель смесителя работает в двух режимах - деление на два (на управление - лог. 0), и деление на 4 (на управление - лог. 1 - от 3 до 12 В).
Синтезатор выдаёт частоты от 40 до 80 МГц - частота в 4 раза выше опоры.
Вот садитесь с ручкой, и смотрите, где Вам нужно на 4 делить (естественно, это нижние диапазоны), а где - на два.
Если Вы галетником диапазоны переключаете, то можете это сами организовать, или же, Владимир пусть даёт с проца...

Гетеродин всегда ставьте выше частоты приёма - только в игрушечных аппаратах допустимо обратное.

НЕ ЗАБУДЬТЕ про переключение ГУНов - их 4 шт., диапазоны перестройки указаны на схеме. Управление - лог. единицей, от 3 В включительно.
Опять же, если работаете галетником, можете это самостоятельно организовать без напряга программы...
Владимир_К 7 мая 2021 г. в 11:34#23
S метр смело удаляйте из кода. Нужно лишь только что в пунктах.
Убрал. Лист со схемой можете выкинуть. Освободились три вывода порта.
Игорь 2 7 мая 2021 г. в 11:36#24
Монстр со статичными светодиодными матрицами - это круто, по-моему, такого ещё не было...
Игорь 2 7 мая 2021 г. в 11:39#25
настройку: диапазон частота приёма, номер ��УНа и вариант делителя на 2 или на 4.

А ещё про боковую забыли.
Не забудьте, для каждой боковой СВОЯ арифметика принимаемой частоты - ведь скаты фильтра используются разные...
Игорь 2 7 мая 2021 г. в 11:40#26
Да это круто будет

Куплю его у Вас. За три тыщи руб...
Ну Вы, надеюсь, поняли, про что я.
Владимир_К 7 мая 2021 г. в 11:43#27
Гетеродин всегда ставьте выше частоты приёма
Как раз это для программирования проще. Лишних пару строк удалить можно. Только прибавляем
Игорь 2 7 мая 2021 г. в 11:48#28
А опорник сделать на другой SI5351 со своим контроллером, на него засылать 1 или 0 и он будет генерировать опорные частоты для LSB и USB. С одной сишки пишут вредно брать сразу две частоты.

Вот-вот. У меня именно так и сделано, я Вам более того скажу - в монстре вообще три сишки стоят - одна - опора гетеродина, вторая - второй гетеродин, третья - третий.
Чисто по два провода на каждую. Опора сишек общая - 50 МГц.
И под этот вариант мне Андрей тоже программу написал, я с его платы вообще сишку снимаю, они все снаружи.
Игорь 2 7 мая 2021 г. в 11:50#29
за так вышлю комплект

Не, ну от такого эксклюзива грех отказываться...

Только прибавляем

Так естественно. Какой смысл убивать аппарат...
Владимир_К 7 мая 2021 г. в 11:50#30
Не забудьте, для каждой боковой СВОЯ арифметика принимаемой частоты
Давайте вопросы будем решать вместе, по мере поступления. А то мозги тормозить будут. Опорника в синтезаторе нет. Если надо опору двигать, в зависимости например от того, какой фильтр включен, SSB или CW, то да, наверное Si, а пока у меня два кварцевых генератора, каждый на свой скат.
Игорь 2 7 мая 2021 г. в 12:03#31
Положим, полоса ПЧ 5000.3...5002.7 кГц.
При частоте второго гетеродина 5000, детектируем по ТРАКТУ ПЧ верхнюю боковую, при частоте 5003 - нижнюю.
Так вот, если интересующая нас станция стоит на 10 МГц, то для приёма её по верхней боковой, мы должны по ПЧ включить НИЖНЮЮ боковую, а частоту гетеродина ставить на 5003 выше, соответственно, при приёме нижней боковой, в тракте ПЧ ставим режим приёма верхней, и частота гетеродина должна быть на 5000 кГц выше.
Т. е., обратите внимание, что при смене боковой, должна либо опора моего синтеза меняться без изменения показаний индикатора, либо же, наоборот...
rtty 7 мая 2021 г. в 12:09#32
И под этот вариант мне Андрей тоже программу написал, я с его платы вообще сишку снимаю, они все снаружи.

А как шины и2ц организованы для сишек, у них же вроде адрес у всех одинаковый?
Игорь 2 7 мая 2021 г. в 12:18#33
А как шины и2ц организованы для сишек

К каждой - отдельная. Одна только задублирована с индикатором.
Игорь 2 7 мая 2021 г. в 12:18#34
Тогда надо сделать добавку в ТЗ.

тумблер LSB/USB.

Несомненно.
Владимир_К 8 мая 2021 г. в 08:21#35
Как затактировать SI5351 от внешнего опорного генератора?
На Ха подать сигнал от внешнего генератора, на 2 ногу.
Обратите внимание на схему - питание генератора 3,3 вольта. Как я понял, это видимо с термостатом... Документ от QRP_Lab. Попробуйте поискать в сети. Называется ocxosynth_assembly.
Вот нашел:
https://www.qrp-labs.com/images/ocxokit/ocxosynth_assembly.pdf
Владимир_К 8 мая 2021 г. в 08:39#36
Кнопки можно сделать на аналоговый вход для экономии портов чтобы они заворачивались делитель
Ну так же и сделано. Схему гляньте. Кнопки у меня на плате валкодера.
veso74 9 мая 2021 г. в 07:28#37
1. для енкодера лучше использовать выводи для внешнего прерывания: D2, D3;
2. поправьте вывод, к которому подключен pull-up резистор 1 kOhm к A6. Ни в коем случае он не на +Vin(+9..12V)!, а на напр. +5V;
3. перепутали выводи Arduino SDA и SCL. A4(SDA), A5(SCL);
4. обратите внимание, что A6 - только аналоговый вход. Не знаю код какой, но вход включен как цифровой. Т.е. с особенностями, такое включение тоже возможно;
5. если Arduino был в оригинал (с загрузчиком), по пин 13 при включение следуют несколько импульсов, не являющихся частью программы. Для управления я не стал бы использовать, для индикации: можно, по вашему преценку;
6. стабилизатор 78L05, а не 7805L .
Владимир_К 9 мая 2021 г. в 07:36#38
прошу посмотреть схему на наличие ошибок
Если синтезатор будет управлять только ДПФ и опорниками, то можно и так оставить. Только перенесите провод с 12 вольт на 5 вольт, тот который идет к А6 и кнопке через резистор 1 к, иначе порту не поздоровится. А как Вы кнопки будете различать, какая из них нажата? А где прием/передача? Ну прием/передача можно и тумблером, без синтезатора обойтись. А расстройка? К тому же, при переходе на передачу, расстройку надо убрать, поэтому контроллер, все же, должен знать, какой режим, прием, или передача. Кроме того, Вы уменьшили число кнопок, которое идет к аналоговому входу контроллера, поэтому пересчитайте резисторы делителя. Сделайте так, чтобы напряжение увеличивалось на какой-то один коэффициент. Например U1=0,5v, U2=U1*1,2, U3=U2*1,2 и т.д. Точность там особая не нужна, но все же, пульсации питания или еще какая хрень могут вызвать ненужное срабатывание. Максимальное напряжение должно быть около 4,5 вольт, ну и когда все кнопки отпущены - 5 вольт. Короче, равномерно распределите.
Ну и управление делителем в ГУНах, тоже выведите сигнал с какого -либо порта.
В общем, на мой взгляд, вроде все.
Владимир_К 9 мая 2021 г. в 07:41#39
для енкодера лучше использовать выводи для внешнего прерывания: D2, D3;
Валкодер у меня работает не по прерываниям, но, все же так будет лучше.
Также подпишите выводы контроллера нормально, например PORTB1. Не понимаю я в этом Ардуино, что такое А6 и пр. Или заглядывать все время надо, что такое А6?
zenit 9 мая 2021 г. в 07:42#40
Только дешифратор имеет инверсию выходов. Там постоянно лог 1, т.е. входной код надо инвертировать, программно наверное это просто, вместо единиц нули.
Программно это не возможно. Так устроен этот дешифратор. Логика работы дешифратора заложена в нём и она ни как не может быть изменена.
https://www.microshemca.ru/ID3/
veso74 9 мая 2021 г. в 07:51#41
Выходи К155ИД3 - с инверсии. С Вашего примера: выход 5 = HIGH (при все другие = LOW) нет в таблици состоянии
(и невозможнно сделать, представьте это как: при LLLL...HHHH по входом как "бегущий ноль" к выходам 0..15).
veso74 9 мая 2021 г. в 08:04#42
CMOS 4028 у Вас нет?
veso74 9 мая 2021 г. в 08:14#43
Я бы даже что-то подключю к I2C (expander, др.). Так освободим выводы о другом в будущем. Но схема: Ваша .
---
Сколько выходов необходими? 16?
Владимир_К 10 мая 2021 г. в 08:11#44
Это время. Владимир_К без сишки можно будет код редактировать?
Что спаяете, то и будем проверять. Код управления сишкой пока отключу. На этот модуль вроде подходят разъемы SMA. Я у себя на модулях поставил и заказал там же и кабель с ответным разъемом. Оно неплохо выглядит, легко снять модуль. Правда у меня модули все самодельные.
Игорь 2 10 мая 2021 г. в 08:23#45
Заказал такой модуль

А что там за дополнительная схема собрана на каких-то транзисторах?
Игорь 2 10 мая 2021 г. в 08:27#46
Согласование уровней

Каких?
Игорь 2 10 мая 2021 г. в 08:29#47
А, понял. Там, похоже, ещё и стабилизатор есть на 3.3 В, или мне показалось?
Игорь 2 10 мая 2021 г. в 08:36#48
Владимир_К 10 мая 2021 г. в 10:54#49
Как к этому отнесётся
А как я к этому отнесусь, если у меня именно так и сделано. Вы схемы мои смотрели?
Игорь 2 10 мая 2021 г. в 10:59#50
Да ну, их тут и так хватает. Основной есть .
Игорь 2 10 мая 2021 г. в 11:16#51
zenit 10 мая 2021 г. в 11:24#52
лог 1 5 вольт а схема конвертирует в 3.3
i2c реализовывается придавливанием к нолю порта. Единица делается путём подтяжки резисторами шины i2c к +3,3вольта. Те два транзистора не нужны. Масло масляное они делают.
Игорь 2 10 мая 2021 г. в 11:39#53
Ну да, у меня же в ряде конструкций SI управляется 5-вольтовыми процами, просто выход открытым коллектором программируют, и резисторы подтяжки...
rtty 10 мая 2021 г. в 11:50#54
По-моему нет смысла ноги МК занимать коммутацией ГУН, это можно организовать через диодные "или" на выходе дешифратора диапазонов.

Освободившиеся ноги лучше применить скажем на секвенсер, полезная вещь чтобы реле в передатчике не подгорали или всякие переходные щелчки в приемнике подавлять.
Владимир_К 10 мая 2021 г. в 12:06#55
Прошу проверить схему
Да схема то правильная, только зачем Вы выводы все время меняете. Вы же понимаете, если Вы поменяли вывод процессора, например - у меня data на выводе PD2, Вы ее зачем то переносите на PB3. Чтобы я программу корректировал? У меня так разведено в трансивере, и его я могу использовать как макет для проверки. Если я в программе поменяю вывод, тогда мне придется отсоединять этот вывод, а то и дорожку резать..
Смотрите мою схему и делайте максимум по ней. Можно конечно что-то изменить, но выводы то зачем менять, они ведь все равнозначные.
ra0ahc 10 мая 2021 г. в 12:25#56
Один стаб на генератор не нужен, трнанзюки на шине i2c тоже выкиньте и через 10к к 3.3 Вольта . Если конечно у вас ваша ардуинка 3 вольтовые выводы имеет , а если 5 вольтовые то транзюки нужны. В вообще почему не регистры сдвига то? Там вообще нет ограничений на их количество. Просто к шине spi их и все.
Владимир_К 10 мая 2021 г. в 12:28#57
Потому что выше сказали что валкодер лучше вешать на PD2, PD3
А тогда да . Валкодер у меня на других выводах, но я боюсь, что Ваш валкодер придется юзать на прерываниях. Все же 400 импульсов не 100.
Поэтому, делайте по Вашей схеме. Ошибок я вроде не вижу.
veso74 11 мая 2021 г. в 01:45#58
1. Для ATmega328 с питанием от 5V согласно документации читаем: минимальнoe напрежение по TWI для HIGH составляет 0,7 * Vcc или 0,7 * 5,0V = 3,5V.
Принимаете ли это во внимание или игнорируете (при Vdevice = 3,3V, при чтении регистра с устройства), зависит от конструктора. Я предпочитаю следовать документации микроконтроллера (связь 5V -> 3,3V устройство через Bi-Directional Logic Level Converter).
---
2. Ето тестовая конструкция, плата. Преставьте если предыдущая программа, загруженная в Arduino перед нашим тестом, использовала А4 и А5 как выходи, с неблагоприятной для нас статической логический уровень: HIGH (в случая: +5V). Подключаем Si5351 к Arduino I2C, мы забыли, что новую (для Si) программу не загрузили, загружаем. Что происходит с Si5351 (питание 3,3V) с напрежение на два входа 5V в течение напр. нескольких минут? Понятия не имею (толерантны ли входы к 5V или нет?, будет дефект или нет?), но не хочу догадываться и бессмысленно экспериментировать. И опять предпочитаю включить converter с 2 транзистора.

Есть и другие интерфейсы. Да:
5V to 3.3V logic level translation/conversion/shifting: how to interface a 5V output to a 3.3V input:
https://next-hack.com/index.php/2017/09/15/how-to-interface-a-5v-output-to-a-3-3v-input/

Но я предпочитаю этот с 2 транзистора (он Bi-Directional: читаю из Si регистри, не только пишу внутри). Даже до 800 kHz проблем с 30-сантиметровыми кабелями по I2C пока не заметил. Поэтому я предлагаю оставить патент Philips там, где он принадлежит: между 5V-микроконтроллером и 3,3V-устройством.
Владимир_К 11 мая 2021 г. в 07:38#59
жду указаний
Скачал Вашу схему, правлю порты... Полчаса, где-то с тестированием...
Схемы делайте в Splane, ибо эту нечем и распечатать, уже два раза уменьшал, а она один хрен не помещается...
Владимир_К 11 мая 2021 г. в 08:24#60
Не малость я погорячился. Полчаса не получается, а тут еще внук перед сном поиграться хочет .
Надо еще пересчитать напряжения в делителе кнопок, так как там тоже поменялось и всего лишь из-за того, что у меня семь кнопок, а у Вас пять.
Владимир_К 11 мая 2021 г. в 08:58#61
напряжения все написал
Контроллер не понимает, что такое 2 вольта. Ему нужно перевести из условия, что 5v=1024. И не только перевести, но и записать куда надо
Ну то ладно. Мне нужна таблица. № диапазона - № Гуна - Частота минимальная(то что отображается на дисплее) - Частота максимальная (то что отображается на дисплее) - частота на выходе Si максимальная (а лучше формулу соотношения между частотой приема и частотой SI, а то уже мозги не работают ), частота на выходе Si минимальная - делитель включен 1, выключен 0.
Это чтобы я не анализировал схему Игоря и не разбирался, какая частота делится, какая нет, а просто тупо записал в программу.
Владимир_К 11 мая 2021 г. в 09:12#62
А там сложно потом
Да не. Оно в одном месте будет, в таблице. Но дело в том, что просто поменять не получится, там надо иногда и в подпрограмме Si кое-что править. Может быть придется на некоторых диапазонах делитель в сишке задействовать. А это ведет к изменению шага, ну в общем, есть некоторые моменты. Конечно, можно вылизать программу так, что задал ей параметр, а она все сама сделает. Но это время. Надо сейчас оживить, а потом апгрейдить, по мере надобности.
Главное получить чистый сигнал... Остальное все приложится, со временем
Владимир_К 11 мая 2021 г. в 09:14#63
Так вот же
Ну вижу 9 диапазонов, а где остальные 7?
Владимир_К 11 мая 2021 г. в 10:05#64
остальные возьмите с начала.
veso74 11 мая 2021 г. в 10:54#65
... на чипе RDA5807. .. на прямую от А4, А5 подал без преобразователя уровней, всё чётко отрабатывает.

Если Вы ничего не меняли в Wire.h (SDA и SCL включени по умолчанию с pull-up к +U(5V)), вероятно, так и работало: +5V, input pull-up 20..50 kOhm) -> вход RDA5807 и ограничение внутр. диодов. А если бы в предыдущем скетче было как пример мой (2), не знаем, что бы произошло . (с RDA и я пытался в такой случай (2) за несколько секунд, чип останавливается -> входные токи вероятно протекали до ограничения тока по выхода MCU (40 mА?)).
Владимир_К 12 мая 2021 г. в 06:54#66
У меня кстати в данном виде с тестовой прошивкой когда гоняет 1111 222 и т. д. при всех восьмёрках потребление около 210 ма.
Это получается, около 4 мА на сегмент.
Тут, конечно индикатор не совсем правильно сделан, для современных индикаторов яркости с избытком. Идеальное решение, конечно, запитать сегменты через резисторы. Если бы это не была конструкция, по словам автора, неоднократно проверенная, я бы на такое решение не пошел. Кстати, в сети несколько раз видел печатки, в которых предусмотрены места для резисторов. Но размер индикаторов там побольше, 0,5 дюйма.
Сегодня времени на программу я уделить не смог.
Владимир_К 12 мая 2021 г. в 09:38#67
Дела неотложные.. Могилы родственников, которых к сожалению много...
По схеме вопрос. Контроль LSB/USB. Это что, кнопка или выход порта для управления чем-то?
zenit 12 мая 2021 г. в 10:05#68
Транзисторы стоят в китайских модулях значит так нужно
Они там стоят потому что китайцы тупо копируют модуль QRP LAB точно так же игнорируя нормальную подачу питания на сишку!
Давайте закроем эту тему.
Принято. Просто интересно что выйдет в итоге.

PS: на счёт индикации на МАХ7219. Ни каких проблем с ней нет при правильной подаче питания. Страх перед динамической индикацией преувеличен и тянется с тех времён когда светодиоды были тусклые и жрали неменяно токи. Современные матрицы 8 штук при потреблении 50мА МАХ7219 ядовито светят. И помехи она не излучает. Но не все могут сделать разводку питания так чтоб потребляемый индикацией ток не промодулировал весь трансивер.
Кстати МАХ7219 позволяет обновлять только нужный разряд + прямое управление сегментами и не загонять в регистры целиком все разряды если обновилась всего одна цифра из восьми. Передаётся 16 бит где 8 бит разряд и 8 бит данные для вывода.
ur5vft 12 мая 2021 г. в 10:16#69
потребление около 210ма
- а почему не уменьшите ток, яркости там с запасом..
zenit 12 мая 2021 г. в 10:39#70
Всё же статическая индикация лучше. Зачем лишний гемор с помехами да и UT2FW проверил этот индикатор в мелкой серии своих DN
Это было актуально лет 20 лет назад. Другого просто не было. Если бы у пана Тарасова тогда были бы МАХ7219 уверен он бы её использовал без проблем вместо кучи "ирок".
Тогда было такое время появились импортные АЛС засветить которые хватало тока с К561ИР2. Но они тут работают в режиме сколько сможет выдавить в нагрузку. У меня пару раз сдыхали и уж если делаете то берите их с запасом и с одной партии для замены в случае чего. Микросхемы с другой партии могут другой ток обеспечивать и это сразу же видно на АЛС. Бывает что даже между микросхемами с одной партии разхрос есть. В макеевской шкале как то пришлось все шесть микросхем менять так как одна цифра после замены CD4015 начала отделятся по яркости от других.
Тут, конечно индикатор не совсем правильно сделан, для современных индикаторов яркости с избытком. Идеальное решение, конечно, запитать сегменты через резисторы.
Если использовать АЛС с общим анодом то можно подавать регулируемое напряжение на аноды АЛС и менять яркость. Я такое же делал с 74НС595 и АЛС подавая 1,8 вольта через стабилизатор на общий анод АЛС.
ra0ahc 12 мая 2021 г. в 11:21#71
Будем откровенны, японцы дорогие догнали Игоря. Сейчас фазовые шумы в основных параметрах ТОР трансиверов. Ну и внутри нормальные синты, а не микрухи DDS стоят.
Игорь 2 12 мая 2021 г. в 11:28#72
Подкорректировал схему

А что за опора на SI стоит на 50 МГц? С фазовыми шумами у неё всё в порядке?
zenit 12 мая 2021 г. в 12:47#73
1. Для ATmega328 с питанием от 5V согласно документации читаем: минимальнoe напрежение по TWI для HIGH составляет 0,7 * Vcc или 0,7 * 5,0V = 3,5V.
Принимаете ли это во внимание или игнорируете (при Vdevice = 3,3V, при чтении регистра с устройства), зависит от конструктора. Я предпочитаю следовать документации микроконтроллера (связь 5V -> 3,3V устройство через Bi-Directional Logic Level Converter).
TWI работает но низкому уровню. И даже при подтяжке к +2,5V и питании меги 5 вольт проблем не было замечено! Структуру портов можно рассматривать но где в TWI вы видели чтоб высокий уровень устанавливался как Portc.4 = 1? Именно установкой в высокий уровень порта настроенного на выход? Тогда бы и резисторы для подтяжки в высокий уровень были бы не нужны! А без них ни как или используют встроенные в чип резисторы но на самой низкой скорости передачи. Потому что шина двунаправленная и если мега являясь ведущим устройством установит высокий уровень на порту а ведомое устройство при обмене данными прижмёт шины к земле то получится кто кого пересилит- ведущий или ведомый!
Шина i2c без подтягивающих резисторов всегда будет в не определённом состоянии.
i2c это не spi. Несколько иначе работает. Всегда смотрю на пропадание и появление низкого уровня на шине. Если нет низкого уровня то это значит что он высокий и ни как иначе. И ни каких пробле.
С SI5351 лучше все по уму сделать, чтобы потом не нарваться.
Да не нарвётесь ни на что. Скорее на чудесатые полевики можно нарваться в согласователе. Это всё от не знания. Да собственно вам оно по сути и не нужно так глубоко копать. Пока по крайней мере не надо.

PS: много раз доводилось прошивать контроллеры с питанием 3,3 вольта и питанием от программатора UABASP. При прошивке пять вольт вместо 3,3 шло на мегу + si5351 и такое она выдерживает без проблем. Живучая...
veso74 12 мая 2021 г. в 12:55#74
... но где в TWI вы видели чтоб высокий уровень устанавливался как Portc.4 = 1? Именно установкой в высокий уровень порта настроенного на выход? Тогда бы и резисторы для подтяжки в высокий уровень были бы не нужны!
в Arduino: здесь:
C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire\src\utility\twi.c
т.е. если twi.c/wire не модифицирована, при инициализация оригинальной Wire.h, внутренные pull-up всегда включаеться к +Vcc.

Для для тест, даже для многих устройства внутреннйе pull-up резисторы часто достаточно (20..50 kOhm).
Цитироватьвыдерживает без проблем. Живучая...Да, нормально, но режим вне документации (при чтение). Как я уже писал, решает конструктор.
(по крайней мере, стараюсь избегать таких режимов, по крайней мере, еще при первоначальном анализе.
Ето интересно, а и 6 деталей не сильно меняют схему. А проще просто снизить напряжение питания до 3,3V).
Игорь 2 13 мая 2021 г. в 03:37#75
Обычный прямоугольник, генератор на 50мгц.

Имейте в виду, что шум хотя бы -130 дБ/Гц от него нужно получать, в противном случае, за общий фазовый шум я не ручаюсь.
Давал ранее схему удвоения кварца на 25 МГц - с ней всё гарантированно получится...
Игорь 2 13 мая 2021 г. в 05:32#76
Без проблем. По-моему, тоже выкладывал. Гиацинт не шумит.
Игорь 2 13 мая 2021 г. в 06:24#77
Лучше не найдёте. Только прогревать его долго.
Игорь 2 13 мая 2021 г. в 06:42#78
Как вы его калибруете ?

По РВМ. Калибрую раз в полгода тот, что вставлен в Р-160, добиваясь при частоте приёма 4996 кГц 1 колебание в 40 секунд - разбег 0.025 Гц. Частота гетеродина при этом порядка 44 МГц.
Вот и считайте точность от 44000000 Гц сдвиг 0.025 Гц.
Естественно, это точность кратковременная.
По нему все остальные выставляю...
Игорь 2 13 мая 2021 г. в 07:04#79
В Р-160 специально индикатор есть.
Игорь 2 13 мая 2021 г. в 07:19#80
А без р160 как измерить?

Да элементарно. Настраиваетесь на РВМ (4996, 9996), когда она несущую даёт, выставляете на выходе тон 1 кГц, и, подкручивая свой Гиацинт, который опора в синтезе, выставляете по любому частотомеру нужные 1 кГц на НЧ выходе. Точности частотомера 6 знаков хватит за глаза.
Для полного счастья, чтобы цифры не особо прыгали, включаете телеграфный фильтр - у меня он во многих слабосигналках есть.
И на его частоте меряете...
Игорь 2 13 мая 2021 г. в 07:49#81
На всякий случай сгенерите ей 1 кГц и частотомером гляньте, насколько она врёт...
rtty 13 мая 2021 г. в 08:23#82
Звуковую карту тоже желательно откалибровать, если это дешевка бортовая или какая-нибудь с-media.

Обычно это делал по программам sstv и rwm сигналу, потом уточненный семплрейт задаем в настройках и "вуаля".
Иногда попадались кривые карты с ошибкой до 300-600ppm.
Игорь 2 13 мая 2021 г. в 08:30#83
Иногда попадались кривые карты с ошибкой до 300-600ppm.

Вот и я про то же...
Игорь 2 13 мая 2021 г. в 09:39#84
Конечно можно, только вот точность у стрелочных приборов вряд ли выше 1% будет. Что к частоте гетеродина 14 МГц даст точность, 10 Гц, для Гиацинта это сильно грубо...
Владимир_К 13 мая 2021 г. в 09:58#85
Если ШАГ ВВЕРХ гонять быстро, то на дисплее кракобязины вылетают.
Ну вроде один косяк нашел. Я при отладке убрал задержки при выдаче импульса записи в индикаторы, так как при отладке слишком долго отрабатывает. И забыл их вернуть.
Насчет кнопок. Гляньте схему Ардуино. Какое напряжение там подается на вход AREF, это 17 нога. Или замерьте.
Новая прошивка, вернул задержки.
Если опять будут проблемы, я спаяю у себя макет. Или поставлю "Протеус". Иначе будем переписываться до "второго пришествия".
Владимир_К 13 мая 2021 г. в 10:06#86
Так кнопки вроде на PC0
Да, а AREF это опорное напряжение, с которым сравнивается входное на входах АЦП.
Игорь 2 13 мая 2021 г. в 10:13#87
Возьмите нормальный кварц, поделите его до 1 кГц, полайте на смеситель, на второй вход смесителя - сигнал НЧ с приёмника, с которого с эфира 1 кГц получаете, на выход смесителя - стрелочный прибор, который будет болтаться с разностной частотой.
Если Вам так хочется со стрелкой...
Владимир_К 13 мая 2021 г. в 10:22#88
Ладно, пока отложите. У меня индикатор подключен, кнопки на макете есть, только надо резисторы другие припаять, валкодер тоже есть, разъемы надо к нему припаять. Проверю, потом продолжим.
С наскоку не получилось. Но! Каждое уважающее себя устройство, не начинает работать сразу.
rtty 13 мая 2021 г. в 10:23#89
Да проще звуковую откалибровать любым приемником (точность частоты не важна) по sstv+rwm потом любым спектролабом смотреть-измерять, введя в него ppm или прямо скорректированное значение sample rate.

Можно еще с 5-долларового GPS-модуля NEO-7( NEO-8 ) взять любую частоту для сравнения, они генерируют на выбор, там внутри синтез синхронизируется по 1pps. Можно и прямо 5МГц задать и потом даже не калиброванной звуковой сравнивать биения с "геоцинта".

Игорь 2 13 мая 2021 г. в 11:16#90
Тогда гиацинт будет поточности как 1 кГц кварц

Тогда у гетеродина, тактируемого сишкой, которая, в свою очередь, тактируется Гиацинтом, на частоте РВМ+ПЧ (это больше 10 МГц) будет АБСОЛЮТНАЯ ошибка та же самая, что у кварца на 1 кГц. АБСОЛЮТНАЯ.
Т. е., если кварц с ошибкой 1 Гц (относительная ошибка 0.1% - такие кварцы сразу в помойку ), то с той же ошибкой 1 Гц будет и гетеродин, если его частота 10 МГц, это будет относительная ошибка 0.00001%
zenit 13 мая 2021 г. в 11:18#91
Третий сорт но что имею то имею
Третий сорт не брак так как четвёртый ещё не последний.
Владимир_К 13 мая 2021 г. в 12:17#92
Вот пробуйте, первый блин . Прошивка для синтеза опоры. Тут все согласно Вашему ТЗ, кроме программы управления Si5351A, она отключена.
Пока нет индикации шага валкодера. Пока тестируйте то что есть. На дисплей должна быть выведена минимальная частота первого диапазона 1800000 гц, при вращении валкодера она должна меняться. При достижении максимальной частоты данного диапазона, частота прыгает назад, на минимум. Нажатеи кнопок диапазон вверх вниз, соответственно должна меняться частота на дисплее, на выходах регистров должна появляться единица в соответствующем месте. Кнопки Step должны менять шаг, вверх-вниз. Соответственно и на дисплее частота должна меняться валкодером на значение установленного шага. При нажатии кнопки блокирования валкодера, должен зажечься светодиод на выходе порта D6 и должен блокироваться валкодер. Повторное нажатие кнопки отменяет предыдущее действие. Тумблер переключения боковой пока не задействован.
Пока даже не прогнал программу в пошаговом режиме,так что работоспособность под большим вопросом, но попытка не пытка. Ничего не сгорит .
Игорь 2 13 мая 2021 г. в 12:22#93
появились импортные АЛС засветить которые хватало тока с К561ИР2.

Я так никогда не делал, ибо это противоречит даташиту, и ставит микросхему раком.
В размерах, как я понимаю, ограничений нет, транзисторы буферами туда поставить, и дело с концом...
Владимир_К 14 мая 2021 г. в 01:23#94
Сегодня подключил валкодер. Отладил программу, раньше забыл в одном месте внести изменение, связанное с заменой выводов порта.
Если есть желание, можете проверить. Si5351A пока отключена.
Что-то не везет последнее время, надо на дачу ехать, а в тачке повороты не работают . Так что, у меня сегодня более интеллектуальные задачи были. Какой-то м...к до меня, напутал в схемах проводки, а я теперь долбаюсь (говорили мне, покупай новую ).
Хотел новую, но не хватило денег. Купил старую, остались деньги, можно прикупить еще козу, но коза мне не нужна.
Владимир_К 14 мая 2021 г. в 02:44#95
вы не покажите свой вариант интеллектуального изменения шага перестройки
Да не вопрос. Полный исходник в архиве. Но это синтезатор моего трансивера. Схему я выше выкладывал. Не знаю, кто как делает. У меня это так: таймер настроен на определенное время (уже не помню, несколько миллисекунд). Валкодер считает шаги в течение этого времени и число шагов сохраняется в буфере. Когда происходит прерывание по таймеру, смотрим, если в буфере не ноль (крутили валкодер), переходим к обработке. Частота, новая, равна прежней частоте плюс шаг, умноженный на квадрат содержания буфера валкодера. Таким образом, если за время заданное таймером вы накрутили валкодер на один шаг, частота увеличится также на один шаг, накрутили два шага, частота увеличится, или уменьшится на 4 шага. Таким образом, при шаге 10 герц и числе делений валкодера 60, я могу, крутнув валкодер (а он на подшипниках) перестроиться на несколько кгц.

Антидребезг, деления, реверс, интеллектуальный шаг - это все делают программисты.
Да, это так. Тем более, память контроллера заполнена меньше чем на четверть. Ну, еще добавится чуть чуть. Все равно места пустого много. Пока не знаю, как поделить импульсы валкодера. Скорее всего, опять же, будет какой-то буфер. В нем накапливается число, когда оно достигнет, скажем 4-х, в основной буфер добавляем единицу. По срабатыванию таймера, частота изменится на эту единицу, таким образом, число импульсов будет поделено на 4. Вроде все логично, но надо пробовать, может что неожиданное вылезет.
Игорь 2 14 мая 2021 г. в 03:01#96
На нижних диапазонах - 10 Гц, на верхних - 5...
Владимир_К 14 мая 2021 г. в 03:21#97
сколько сишка должна шагать чтобы обеспечить шаг
Да не шагает она никуда. Частота которую выдает сишка определяется так:
Делим число 900000000/частота. Получаем какое-то значение. Дробная часто отбрасывается. Например, частота 20012021 гц. 900000000/20012021=44. Если бы получилось нечетное число, то его уменьшаем на единицу, то есть число всегда четное, целое. Затем умножаем 20012021*44=880528924. Вот на этой частоте будет работать ГУН сишки. Дальше программа вычисляет делитель в цепи PLL, который представляет собой число а+в/с. Где с - знаменатель дроби мы задаем, обычно я беру максимальное значение, оно определяется разрядностью делителя и равно 1048575 (это FFFFF, в шестнадцатеричной системе).
То есть частота кварца, умноженная на (а+в/с), должна составлять 880528924. а - целое число. в - также целое число, максимальное значение его также FFFFF.
Таким образом, в принципе возможно получить точность генерируемой частоты в доли герца. Но для этого, надо бы менять и с, но этого мало никто не делает. Делает программа компьютерная, от производителя сишки, которая может управлять и платой, от их же, которая стоит сотни долларов. Вот та программа может выдать любую частоту с большой точностью.
Владимир_К 14 мая 2021 г. в 04:09#98
А у вас софт вычисляет С ?
Нет, я выше писал, я беру его максимальным. А вот насколько точно выдает сишка частоту, это может сказать тот у кого есть частотомер, с точностью, скажем 0,1 гц.
Но, погрешность в математике тут конечно присутствует. Наверное, ее можно свести к нулю (точнее к точности частоты опорного кварца), если опорный кварц будет выдавать точно 27000000 гц, без всяких запятых и пр. Но это может сказать тот, кто дружит с математикой и у него есть желание в этом ковыряться.
Игорь 2 14 мая 2021 г. в 05:00#99
правильно?

Да...
ra0ahc 14 мая 2021 г. в 05:18#100
Нет
На разных диапазонах разная ошибка будет. Поэтому надо в расчетах подстраивать частоту кварца до 1 гц , тогда математика будет работать везде.
Веселин определил , что максимально возможная частота кварца (опоры) не должника превышать 66 мгц. И с этим согласен!
Игорь 2 14 мая 2021 г. в 05:45#101
максимально возможная частота кварца (опоры) не должника превышать 66 мгц.

Странно. У меня до 95 МГц, насколько помню, одна из сишек ещё работала.
И на 75 МГц я даже ориентировался поначалу...
veso74 14 мая 2021 г. в 06:16#102
... Веселин определил , что максимально возможная частота кварца (опоры) не должника превышать 66 мгц. И с этим согласен!
Ето не так, а такой был мой макс. доступной кв. генератор, с которой Si работала.
---
3 лет назад перед написанием кода я сначала попробовал много вариантов вычисл. с помощью Excel.
В расчете в MCU погрешность выше (есть float в вычисл., а в avr-gcc float: 6-7 ч. после запетаи), но с uint64_t (и без float, в Arduino нет double), при необходимости можно братить внимание и на погрешность. А и так она достаточно мала.

Ниже: в случае алгоритм вычисл.: при с' = 0xFFFFF и частота: 23,201500 MHz.





Опорник от Владимир_К

(133.83 КБ, 676x598 - просмотрено 770 раз.)






« Последнее редактирование: Май 14, 2021, 06:41:28 pm от veso74 »



Записан







veso74 14 мая 2021 г. в 07:52#103
Цитировать... И нет готовых решений по кодам.1. Ничего сложного, 40 бит (с 8 "нулями" в конце) из одного расчета и все.
---
2. Все ето на мой взгляд это не нужно (+ AD9850), сделайте какая-то частота (обязательно OCXO?) в нужном диапазоне и все заработает. Даже с 5 MHz можно попробовать, я попробовал с 10,000 000 MHz TCXO (вне диапазона по документации). А и с возможными внутренними коэффициентами все можно рассчитать "на бумаге" до того, как попробовать "в железе".
veso74 14 мая 2021 г. в 08:02#104
певрое: о AD9850/51
второе: о вн. генератор к Si5351
---
A, я понял! (РУ->БГ). Вы хотите заменить Si5351 на AD9851. Код управления оч. прост. И ток над 100 mA/5V только для AD9851 чипа :/.
Игорь 2 14 мая 2021 г. в 08:37#105
Вопрос для Игорь2 реально ли гиацинт умножить до 125мгц чтобы затактировать ад9850?

Ставите куча катушек, чтобы мусор подавить, и нет проблем.
ra0ahc 14 мая 2021 г. в 08:44#106
Не выдумайте и не усложняйте . 5351 у меня работает в монстре. При хорошей экранировки ничего не свистит. В пч сишку я точно ставить не буду, потом блох гонять. У меня горячий опыт в трансивере Ильи с этими сишками . Их реально в кожух запаивать надо.
Я уже 3 синта Игоря собрал на сишках!!! Все работает как Часы.
Игорь 2 14 мая 2021 г. в 08:47#107
Тоже везде в опорах синтеза 5351. Никаких проблем - именно с ними и давал все параметры...

Хотя, вопросом насколько точно там синтезируется частота при идеально точном опорнике не занимался.
Вроде бы, производитель пишет про нулевую погрешность в этом случае, вот только будет ли она такой, при заливке, отличной от того, что производитель рекомендует...
Владимир_К 14 мая 2021 г. в 08:53#108
Шота я вижу, ребенок еще не родился, а его уже не любят .
ra0ahc 14 мая 2021 г. в 08:55#109
Опытом давим фактами
Без обид
Владимир_К 14 мая 2021 г. в 10:19#110
Вроде все работает, но при нажатии на кнопку лок не горит светодиод лок. Ещё не проверял дешифратор и управление гун и делителем.
У меня на макете кнопка lock работает, светодиод горит и валкодер блокируется. Проверьте монтаж и напряжения на входе АЦП, У меня напряжения такие:
0,93, 1,48, 1,99, 2,5, 2,98. Если не нажата ни одна кнопка, напряжение 5,03. Хотя, причина скорее не здесь, там интервал очень большой.
правда задом на перед
Если это напрягает, могу и переделать. Но позже, наверное к вечеру.
выбор ГУНов и упр. делителя не работают. И нет индикации ШАГа перестройки на табло.
Я еще не делал это.
Но он очень резкий получился.

Потому я такие и не применяю, 60 импульсов, да еще интеллектуальный, самое то. Три синтезатора в народ пошли, довольны. Один товарищ для Р-143 хотел с переключением шага. Я сделал, потом предложил ему попробовать прошивку с интеллектуальным валкодером, после чего, от переключения шага он отказался. А у него диапазоны сплошные, не только любительские.
а ни как нельзя сделать в прошивке чтобы предыдущая частота запоминалась?
Можно, не вопрос. Но, если делать запоминание при выключении, тогда надо доработать схему. Надо запитать контроллер по двум линиям. На вход АЦП надо подать напряжение питания, а по питанию контроллера надо поставить электролит. То есть, контроллер проверяет напряжение питания схемы, как только оно упадет до некоторого значения, контроллер прерывает работу, запом��нает частоту в ЕЕПРОМ. Все это время он получает питание от электролита, развязанного с остальной схемой диодом. Но, насколько хватит ЕЕПРОМ, не знаю. Гарантируют то производители много, кажется 100000 записей, но я один раз посадил память. Не знаю, что произошло.
Владимир_К 14 мая 2021 г. в 10:28#111

Индикацию шага, в течение какого времени показывать, на 0,5 сек, или меньше?
Владимир_К 14 мая 2021 г. в 10:44#112
А сишка сможет точно шагать, там ведь чтобы перестроиться на 10гц вроде надо шаг сишки чуть ли не пол герца...
Да я как-то этим не особенно заморачивался. Когда подгонял частоту опорника с моим частотомером, вроде все совпадает до нескольких герц, но потом постепенно частоты уходят, или в синтезаторе кварц при нагреве уходит, или в частотомере. Он у меня также самодельный.
Поэтому, получить точную частоту до долей герца я не пытался. Это надо посмотреть математику Сишки, я уже не помню значение делителя в знаменателе. От него зависит минимальный шаг перестройки. Так что тут есть определенные сложности.
ra0ahc 14 мая 2021 г. в 12:54#113
Это всё дела программерские не стоит пладить корпуса микрух. Антидребезг, деления, реверс, интеллектуальный шаг - это все делают программисты.
ra0ahc 14 мая 2021 г. в 12:58#114
Кстати, сам не думал еще, Владимир вы не покажите свой вариант интеллектуального изменения шага перестройки
Я все больше склоняюсь, что это правильно.
Владимир_К 15 мая 2021 г. в 05:40#115
ад9850 попробуете прикрутить
Попробую, но чуть попозже, может и завтра. Но тут проблема нарисовалась, пока ее не решу, с временем напряг. Вечером изучаю проблему, днем пытаюсь решить, но пока без результата.
Программирование AD9850, как я мельком глянул, намного проще Si5351A. Но для SI все готово, а с AD надо еще смотреть, хоть оно и просто...
Владимир_К 15 мая 2021 г. в 11:10#116
Вчера ввел индикацию шага перестройки. В общем, вывод такой - функция совершенно бесполезная. Во-первых индикация, даже если ее сделать 1 сек. мало информативная, через какое-то время, уже и забыл, какой шаг.
Ну, в общем смотрите, как оно будет выглядеть. Пауза сейчас 1 сек. Ввел также переключение делителя. Осталось ввести управление номерами ГУНов и запоминание частоты при смене диапазона, вроде так... Управление ГУНами я бы сделал на регистрах. Сейчас у нас задействовано 16 выводов на 16 диапазонов. И на хрена они, 16? Выкинуть 4 диапазона, 12 оставить (с головой хватит) и на освободившиеся поцепить ГУНы. Освободятся 4 вывода портов.
Решайте...
реально прикрутить ад9850
Да реально, только надо код новый написать для нее, или в интернете можно найти. Но у меня микросхемы нет и проверить мне будет не на чем.
Владимир_К 15 мая 2021 г. в 11:26#117
Ввел запоминание частоты.
Владимир_К 15 мая 2021 г. в 11:31#118
Прошивку сейчас опробую отпишу.
Сейчас я выкину 4 диапазона и на регистры посажу переключение ГУНов. Исправьте схему регистров, там где выход регистра Band_13, будет ГУН1, Band_14, будет ГУН2, Band_15, будет ГУН3, Band_16, будет ГУН4,
Владимир_К 15 мая 2021 г. в 11:57#119
Выкинул 4 диапазона, на оставшиеся повесил управление ГУНами. Проверьте пока это, потом будем думать насчет светодиодов и еще одного регистра.
Индикацию шага можно сделать на дешифраторе, каком-нибудь. У нас есть выходы регистра, задействованные 10,11,12 диапазонами. Эти выводы можно кинуть на дешифратор и из трех получить 8 выходов. Один хрен корпус надо добавлять, или регистр или дешифратор.
в редакторе АРДУИНО ИДЕ
Достает меня этот редактор. Ни отладчика, ни хрена. И памяти занимает в три раза больше.
Владимир_К 16 мая 2021 г. в 01:33#120
я бы экспортировал множество макросов/функции, уже встроенных в Arduino IDE,
Я иногда это делаю, но, потом забываю, что у меня есть, а чего нет. Программированием я не часто занимаюсь, больше времени уделяю слесарным работам, да паяю..
zenit 16 мая 2021 г. в 01:54#121
У меня к Вам пара вопросов. В Вашей прошивке, последнее слово, которое Вы загружаете в AD9850 "0b00000000".
Это регистр фазы который по сути не используем и там же младший бит включение внутреннего умножителя такта. Если ноль то не умножать, если единица включено умножение на шесть для 9851. Зависит какой опорник на плате ддс 30 или 180МГц. Кстати АД9850 с алиэкспресса все работают с умножением на четыре если этот бит установить. А так же без проблем с внешним тактом до 200МГц. Естественно при питании 5 вольт. На 40МГц тактовый генератор умножается на четыре. Расчёт такта ведётся всегда с учётом множителя если он включен. Если генератор 30 то такт 180 и т.д. 9851 и 9850 самые простые в управлении ддс.
Владимир_К 16 мая 2021 г. в 02:06#122
Это регистр фазы который по сути не используем и там же младший бит включение внутреннего умножителя такта.
Не, меня немного смутил 5 бит последнего байта. Пример на Ардуино, там ноли, а в даташите - 1. Обозначен этот бит как Power Down. И как это понимать, выключение это когда, если 1 или наоборот?. И вообще, что это за отключение. Спящий режим?
veso74 16 мая 2021 г. в 02:09#123
Цитироватьа в даташите - 1.Дайте точного цитата из pdf (скрийн екрана), пожалуйста.
---
нашел Figure 13:
W32 = 0, W33 = 0, W34 = 1, W35..39 = x ето режим Serial Load Power-Down Sequence / Последовательность отключения. Точно, "спящий режим".

Нам нужна непрерывная работа AD (без программно выключения), фаза 0, без уножитель, поэтому все биты равны нулю.
Даже пробовал там телеграфная манипуляция (директно на основняя частота), рядом в приемника звучит неплохо.
Владимир_К 16 мая 2021 г. в 02:49#124
на выходе DDS ничего нет.
Ну вот, чего я и боялся. Если бы у меня была микросхема, мог бы попытать у себя. Если бы у меня не работала, тогда 100% надо ковыряться в программе. А что сейчас думать, не знаю. Хотя, остается небольшая надежда, прогоню в пошаговом режиме, может где "косяк" допустил..
Покажите схему подключения. Обратите внимание, для переключения в последовательный режим записи, надо ногу 2 на землю, ноги 3 и 4 на + питания. Проверьте генерацию опорника.
Владимир_К 16 мая 2021 г. в 03:03#125
Модуль у меня вот такой.
А кто подскажет.. RESET - надо туда что-то подавать?
Схему, что Вы выложили, там же ни хрена не видно.. Вот сравните с этой схемой.
Владимир_К 16 мая 2021 г. в 03:17#126
Там кстати D7 ещё на ардуину идёт.

Я не знаю, что такое D7. Я выше писал:
PC1 - подключаем к 25 выводу микросхемы (Data);
PC2 - подключаем к 7 ноге микросхемы (WCLK);
PB4 - подключаем к 8 выводу микросхемы (FQ_UD;
Но это выводы не модуля, а микросхемы. Так что сравнивайте со своим модулем. Ну или по схеме, что я выше выложил.
А понял, D7 это седьмой бит, при параллельной загрузке и он же используется как вывод ДАТА, при последовательной загрузке, как у нас. На микросхеме это 25 нога. На модуле, это вроде четвертый вывод?
Владимир_К 16 мая 2021 г. в 03:23#127
как на вашей схеме ддс
Это не моя схема. Когда-то паял ее, там программа была не моя.
Еще раз, по порядку.
1 вывод модуля - питание:
2 вывод модуля - WCLK:
3 вывод модуля - FQ_UD:
4 вывод модуля - Data:
5 вывод модуля - Земля:
6 вывод модуля - Земля:
10- вывод модуля - Выход сигнала:




Владимир_К 16 мая 2021 г. в 03:55#128
Нет выхода
Не мучайте. Есть косяк в программе.
Пробуйте с этой прошивкой.
Владимир_К 16 мая 2021 г. в 04:20#129
Нет выхода..и светодиод лок горит постоянно.
Блин.. Забыл вернуть задержки. В пошаговом режиме я их убираю, иначе "шагать" будет до второго пришествия... А вернуть взад забыл.
Но это, могло повлиять на светодиод, он теперь горит, на самом деле не постоянно, но с большой частотой, так что создается впечатление, что горит он постоянно. А вот ДДС-ка вроде работать должна бы.
Я сейчас сделал чтобы ДДС-ка загружалась постоянно. Попробуйте увидеть импульсы на выходах управления. Дата - там сигнал не периодический. Clk - периодический с большой частотой. И сигнал FQ_UD - периодический, но с большой скважностью, вряд ли Вы его увидите.
zenit 16 мая 2021 г. в 04:57#130
Пример на Ардуино, там ноли, а в даташите - 1. Обозначен этот бит как Power Down
Если единица то выход выключен. С генератором 125 ноли отправить.
Есть там всего два нюанса.
Раз - после включения сперва нужно перевести ддс в режим последовательной загрузки
Clk = 0 ;clk
Fq = 0 ;Fq
RCALL us_1 ;пауза 1us
Clk = 1 ;clk
RCALL us_1
Clk = 0 ;clk
RCALL us_1
Fq = 1 ;Fq
RCALL us_1
Fq = 0 ;Fq

Два
Расчёт константы требуется один раз
Fdd_sclk = CLKIN * 2^32 ;Const 4 байта с плавающей точкой для расчёта где CLKIN тактовая частота генератора умножить на 2 в 32 степени

Расчёт регистров 4 байта
Reg_dds = Chastota * Fdd_sclk ;Reg_dds 4 байта без плавающей точки

Загрузка в регистры 5 байт 4+1
Fq = 0 ;порт в ноль- разрешить загрузку в буфер ддс
передать 4 байта рассчитанного значения Reg_dds где младший бит идет первым а Clk активный уровень высокий.
передать пятый байт ноль если умножение такта не используется или 1 если нужно опору умножать на 6
Fq = 1 ;порт в единицу - защёлкнуть данные.

Проще не бывает и не надо ни каких либ и прочего ардуиновского замороченного кода с кучей строк.





zenit 16 мая 2021 г. в 05:07#131
Подключил согласно этой схеме. Нет выхода
12 пин случайно не заземлили? В модуле он дублируется с 4 выводом. И ножка ресет 5 вывод должна быть на земле.
Владимир_К 16 мая 2021 г. в 05:37#132
Раз - после включения сперва нужно перевести ддс в режим последовательной загрузки
Во, вот так постепенно узнаем все тонкости (читать даташит на англицком лень). Спасибо!
Fq, это что такое? То, что в даташите обозвали как FQ_UD?
veso74 16 мая 2021 г. в 05:55#133
Core, попробуйте. AD9850, 10 000 000 Hz чтобы узнать, работает ли хардуерная часть.
Не пробовал код, такой тип модуля AD9850 у меня нет.
Не гарантирую, что загрузчика не будете удалить .
880/9 байта
Владимир_К 16 мая 2021 г. в 07:13#134
и длинный сигнал на РB4
Откуда он там? В программе он не задействован!
Ну да, в программе он, действительно не задействован, а в 260 сообщении, я написал, что на него цепляется;
PB4 - подключаем к 8 выводу микросхемы (FQ_UD); Но, сигнала там не должно быть! Должен быть сигнал на PB2.

А надо на PB2. Могли бы и сами догадаться .
Так что переставьте.. Но программу по последней рекомендации от zenit я пока не успел доработать..
Владимир_К 16 мая 2021 г. в 07:36#135
Прошивка с учетом последних рекомендаций.
Пробуйте, если еще не надоело .
Владимир_К 16 мая 2021 г. в 09:40#136
Но PB2 занят в схеме. а нём табло висит вроде.
Это все невнимательность. Видать склероз уже начинается . Смотрел на схему, какие порты свободны, решил использовать PB4 и даже написал, что на него цеплять надо. А запрограммировал на PB2. Исправленную тестовую прошивку я Вам сбрасываю. Проверьте, а то чем черт не шутит, может и при замене 4-х цифр ошибусь. Итак, PB2 меняем на PB4.
Владимир_К 16 мая 2021 г. в 10:20#137
Ок! Завтра состыкую.
Владимир_К 16 мая 2021 г. в 10:24#138
кстати 26.000 вы специально размножили
А что такое 26.000?
Владимир_К 16 мая 2021 г. в 10:39#139
Из-за этой хреновины (16 диапазонов) я полдня потратил на поиски ошибки, которой в общем и не было. Тут такая ситуация возникла:
- в определенном месте программа проверяет номер диапазона и, если он больше 4-х, то программа выдает сигнал на включение делителя (согласно таблице от Игоря). Начинаю тестировать. Светодиод, который я повесил на выход для наглядности, включается, при включении диапазона 20 метров, так как этот диапазон 5-й, в списке. Потом дохожу до диапазона 26.000, светодиод горит, потом на табло появляется 1,8, 3,5 и т.д., а светодиод не гаснет. дохожу до 26.000, появляется 1,8 светодиод гаснет . И вот тут переклинило. Какого хрена? Лишь потом вспомнил, что у нас то 16 диапазонов, 9 нормальных, а дальше опять появляется 1,8 мгц. Но он не 1-й, а 10-й, соответственно диод продолжает гореть как и положено. Поэтому я и внес в программу 9 нормальных диапазонов, а остальные, вплоть до 16-го, повторил 26.000. Потом часть убрал, чтобы освободить выводы регистра. Но все равно, в конце несколько осталось повторяющихся. Так что, то никакой не глюк. И лечится он просто.
В качестве условия, можно было бы поставить частоту. Но она занимает 4 байта, а номер диапазона - всего байт. Так что с ним, оперировать проще. Хотя, разницы особой нет.
Владимир_К 16 мая 2021 г. в 10:50#140
Вы только скажите какие порты задействуем
Написал тестовый код управления AD9850.
Подключение:
PC1 - подключаем к 25 выводу микросхемы (Data);
PC2 - подключаем к 7 ноге микросхемы (WCLK);
PB4 - подключаем к 8 выводу микросхемы (FQ_UD;
С опорником 125 мгц, микросхема должна выдать сигнал частотой 10 мгц.
Это тестовая прошивка, никакие функции синтезатора работать не будут, только ДДС и должен моргать светодиод, подключенный на вывод PD4 (Lock).
Файл назван AD9832, не обращайте внимание, он для AD9850.
Если будет работать, прицеплю ее к синтезатору.
Владимир_К 16 мая 2021 г. в 11:18#141
1. Ничего сложного, 40 бит (с 8 "нулями" в конце) из одного расчета и все.
Добрый день!
У меня к Вам пара вопросов. В Вашей прошивке, последнее слово, которое Вы загружаете в AD9850 "0b00000000".

shiftOut(DATA, W_CLK, LSBFIRST, 0b00000000);

В даташите "0b001xxxxx" где d6 это Power-Down. Уточните пож. что туда ставить?
И еще, например частота 500 гц, в двоичном коде это 111110100. Как надо загружать в микросхему, в каком порядке?
Я понял что - сначала младший бит, т.е. 0, потом 0, 1,0 и так далее, или наоборот? LSBFIRST- это значит с младшего бита?
veso74 16 мая 2021 г. в 11:58#142
Все из pdf-а (9850.jpg). LSB first = "младший значащий бит первым". LSBFIRST, MSBFIRST находятся во встроенной функции shiftOut(dataPin, clockPin, bitOrder, value) в Arduino IDE.
Просто нужно вызвать функцию, она готова.

shiftOut():
https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout\
и
http://arduino.ru/Reference/ShiftOut

a если нужно ее сам сделать:
(C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\wiring_shift.c)
Код: [Выделить]void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) {
uint8_t i;

for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST) {
digitalWrite(dataPin, val & 1);
val >>= 1;
}
else {
digitalWrite(dataPin, (val & 128) != 0);
val <<= 1;
}
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}---
A ето "младший бит" .
(lsb.jpg)
Владимир_К 16 мая 2021 г. в 12:05#143
val >>= 1;
Спасибо. Вот это мне и нужно было, куда двигать?
Так val >>= 1, или наоборот val <<= 1.
если нужно ее сам сделать:
Да я так обычно и делаю, только было сомнение, куда двигать.
veso74 16 мая 2021 г. в 12:26#144
Если используемом IDE или у Вас нет своего, я бы экспортировал множество макросов/функции, уже встроенных в Arduino IDE, в вн. файл, библиотека. Они экономят время для писания кода и строки давно проверены (bitRead, bitSet, lowByte(w) ... max(a, b) ... abs(x), map(...), constrain(amt, low, high)). Часто обращаюсь к Arduino сроки, которые даже за CCS для PIC я недавно переписал, уже строко на полстраницы . Кто как привык.
Владимир_К 17 мая 2021 г. в 01:29#145
если можно сразу пропишите пч 10,7 чтобы гетеродин был сверху.
Если предыдущая будет нормально работать, тогда пропишу. Если в предыдущей есть ошибки, зачем плодить прошивки с ошибками?
RK4CI 17 мая 2021 г. в 06:37#146
есть конечного пиликалки (спуры) если антенну вытащить,
Это только те спуры, которые пролезли в тракт ПЧ напрямую. А есть ещё спуры, на которых будет идти преобразование. И наличие которых вы заметите только подав достаточно мощный сигнал на вход трансивера. То есть, если с нормальным ГПД подав на вход какой то сигнал, то вы его услышите только на одной частоте. При наличии спур, кроме основного сигнала, при перестройке вы найдёте с десяток сигналов, у уровнями на 50-60-80 дБ ниже основного тона. И использование ключевых смесителей, усугубляет проблему спуров в разы. Ведь преобразование идёт не только на основной частоте ГПД, но и на 3-5-7 гармониках, и даже на чётных, только там подавление побочных каналов будет повыше. Так что проверка поражёнок при отключенной антенне, это способ обмана. В данном случае, похоже что самого себя.
Игорь 2 17 мая 2021 г. в 06:59#147
Так что проверка поражёнок при отключенной антенне, это способ обмана.

Да, это т. н. свистелки, а название "ложные каналы приёма" говорит само за себя - помимо основного канала, приёмник принимает и кучу других.
У меня под смесители на FST аналогичные по параметрам Скидану, написана матмодель (вон, чуть выше скрины как для гетеродина сверху, так и снизу), которая с довольно высокой точностью ни только частоты вычисляет, но и уровни подавления этих каналов смесителем.
Написано, повторю, под Скидана, но и с двумя трансами вполне себе всё повторяется.
RK4CI 17 мая 2021 г. в 07:08#148
которая с довольно высокой точностью ни только частоты вычисляет, но и уровни подавления этих каналов смесителем.
Это только для основного тона. Ещё бы найти программку которая и наличие спур учитывало, и их уровень. А это похоже, только на реальном железе возможно измерить.
Игорь 2 17 мая 2021 г. в 07:21#149
Ещё бы найти программку которая и наличие спур учитывало, и их уровень.

Так у меня же и считает уровень ложных каналов приёма прямо со входа смесителя. Модель под Скидана, но и под два транса, практически, то же самое и видел. Если откинуть искажения входного транса, о которых написал выше.
А свистульки я не считаю - при нормальном монтаже их просто не будет.

Под иные смесители написаны другие пресеты, к примеру, есть под ADE-1H, там всё по-другому, есть под один ключ, там тоже своё, так что, универсальную программу Вам никто не напишет...
Игорь 2 17 мая 2021 г. в 07:53#150
Владимир_К 17 мая 2021 г. в 09:09#151
Но не работает валкодер.
Какие же Вы капризные, все что-то не работает
А ежели так:
Владимир_К 17 мая 2021 г. в 09:24#152
Работает валкодер, но валкодер не реагирует на кнопку лок.
Конечно не реагирует, ибо я эту функцию убрал.. Просматривал программу, смотрю строка какая-то. Думаю, на хрена она? Убрал. Оказывается это была блокировка валкодера. Я не могу в голове держать кучу программ, к сожалению старый я уже .
Владимир_К 17 мая 2021 г. в 09:32#153
Только ПЧ 9мгц.
Держите 10700. Гетеродин всегда сверху.
Владимир_К 17 мая 2021 г. в 09:37#154
Не понял... Еще раз сбрасываю. Такая ситуация была как-то на сайте CQHam. У sgk был какой-то глюк с XLoader. Попробуйте перезапустить его, потом снова укажите на нужный файл.
Владимир_К 17 мая 2021 г. в 09:38#155
версию синтеза с ад9850 как основной первый гетеродин.
AD9850, более менее сносный сигнал выдает до частоты 30 мгц. Для трансивера с гетеродином "всегда сверху", да еще если гетеродин должен выдавать удвоенную частоту, она никак не проходит. Поэтому, надо Si5351A.
Ну и таких синтезаторов, с прямым синтезом, у меня, а тем более в интернете, десятки вариантов. И именно такой я и выложил здесь:
http://analogtrx.com/SMF/index.php?topic=6.585
Начиная с 591 сообщения.
Владимир_К 17 мая 2021 г. в 09:42#156
Держите исходник. Можете править его по-своему усмотрению. Я к нему больше не возвращаюсь. Разве что, по большой нужде
Только сохраните мой вариант, для потомков , или если надо будет откатиться назад.
Игорь 2 17 мая 2021 г. в 10:00#157
Да, снизу гетеродин ставить не стоит - выигрыш по фазовым шумам, понятное дело, будет, но кучу появившихся прямо в ближней зоне ложных каналов, подавить будет проблематично.
К примеру, на скрине слева ложные каналы при приёме на 14 МГц, ПЧ=9 МГц и гетеродине сверху, справа - снизу.
Ложный канал приёма на 16 МГц справа подавлен смесителем лишь на 14 дБ.
Стрелкой показан основной канал приёма...
Владимир_К 17 мая 2021 г. в 10:07#158
У меня в планах сделать с ПЧ 500кгц аппаратик с вашим синтезом.
Делайте, как только появится что-то в железе, через пару дней будет и прошивка.
Игорь 2 17 мая 2021 г. в 10:13#159
Так я Вам более того скажу - при такой низкой ПЧ, радикального выигрыша гетеродина сверху нет, скорее даже, наоборот - зеркалку легче удавить при гетеродине снизу.
См. ниже картинки - слева - гетеродин выше, справа - ниже.
Два диапазона - 3.5 и 7 МГц. Основной канал приёма обозначен стрелками...
Владимир_К 17 мая 2021 г. в 11:09#160
В папке проекта, что я Вам сбросил, есть Ваша схема. Но она не исправлена.
Надо особенно с регистрами уточнить, выбор ГУНов и пр. Внесите пожалуйста исправления, чтобы схема соответствовала функциям заложенным в программе. Надо привести в порядок материалы... Время пройдет, забудется, что к чему. Придется потом искать, почему не работает.
Владимир_К 17 мая 2021 г. в 11:38#161
И АД9850 впаяна и вы запустили кодом на 10мгц.
Проверяйте. Прошивка к Вашему макету. Cинтезатор прямого синтеза на Ad9850 cо стандартным расположением гетеродина. ПЧ - 9000000.
Игорь 2 18 мая 2021 г. в 09:37#162
Чистый эфир...
Владимир_К 18 мая 2021 г. в 10:44#163
можно задавать состояния регистров?
Да. Только делать это надо открыв проект. Запустите AVR Studio 4.19. В меню нажмите Progekt - Open Progekt. Укажите путь к папке. Жмите на файл с расширением .aps. Он со значком божьей коровки . Откроется проект. Слева в окошке увидите перечень файлов проекта - Source Files, Header Files и пр. Нажмите на крестик, откроются файлы соответствующие. Нажмите на имя файла, он откроется в главном окне.
После внесения изменений надо проект компилировать. В меню Build - Clean - Rebuild All. После компилирования внизу появится сообщение, если с красной точкой Error, значит что-то сделали не так. Также могут появиться предупреждения, это не ошибка, но желательно без них.
После компилирования в папке проекта Default найдете обновленный НЕХ-файл. Главный файл проекта main.c. В нем находится главная функция int main (void).
Таблица, которую Вы показали, содержит содержание регистров. При работе программы в регистры выводится строка соответствующая диапазону (во, пока писал, нашел ошибку) в таблице. Попробуйте сами ее увидеть . Подскажу немного. Внизу, последние 4 строчки - там кроме включения соответствующего ДПФ, также включаются ГУНы. А в предыдущих строчках их нет. Цифра, стоящая справа (то есть младший бит байта) идет первой, то есть она загоняется в конец регистра.
После компиляции нажмите Save Progect. При запуске Studio в следующий раз проект откроется. Но для этого надо зайти в настройки и указать там, чтобы при запуске студии открывался последний проект. В общем, думаю, разберетесь.
Владимир_К 18 мая 2021 г. в 10:58#164
раскрытый до мелочей
Это можно подробно тут прочитать: http://easyelectronics.ru/avr-uchebnyj-kurs-programmirovanie-na-si-chast-1.html
Судя по картинке, что Вы выложили (подсвеченный шрифт) Вы проект уже и сами открыли и мои пространные опусы, лишние .
ra0ahc 18 мая 2021 г. в 11:08#165
Прикольно. А без антенны как? Свистулек много ?
Владимир_К 18 мая 2021 г. в 11:19#166
/************ Частотный план трансивера *******************/

unsigned long freq_max[13]={2000000, 3800000, 7200000, 10150000, 14350000, 18168000, 21450000, 24990000, 30000000, 30000000, 30000000, 30000000};
unsigned long freq_min[13]={1810000, 3500000, 7000000, 10100000, 14000000, 18068000, 21000000, 24890000, 26000000, 26000000, 26000000, 26000000};
unsigned long frequency_1[13]={1810000, 3500000, 7000000, 10100000, 14000000, 18068000, 21000000, 24890000, 26000000, 26000000, 26000000, 26000000};

Найдите эту таблицу. Вот я подсветил числа, относящиеся в диапазону 0. Удалив эти цифры, Вы исключите этот диапазон. Но, теперь нулевой диапазон уже будет не 160 метров, а 80 метров.
Число в квадратных скобках должно быть на 1 больше, чем диапазонов в таблице.
В программе надо найти еще места, где надо внести изменения. Во-первых убрать строки из таблицы, которую Вы выложили.
Во-вторых, вот здесь:
if (l==7)
{
_band=_band+1;
if (_band>11)
_band=0;
}

if (l==6)
{
_band=_band-1;
if (_band==0xFFFF)
_band=11;
При каждом нажатии кнопки переключения диапазона, номер диапазона увеличивается на 1. Тут есть условие if (_band>11) _band=0. То есть, при достижении максимального номера, идет перескок в начало.
А ниже строки, если достигли нулевого диапазона, переходим на последний.
Дальше, вот тут:
//if (_band<4) y_1=y_1+pch;
// else y_1 = y_1-pch;
y_1 = y_1+pch;
В зависимости от номера диапазона, ПЧ прибавляется или наоборот вычитается. Здесь условие закомментировано двумя //, то есть эти строки компилятор игнорирует (чаще делайте так, не убирайте строку, а просто закомментируйте ее, потом легче вернуть), и здесь ПЧ всегда прибавляется (последняя строка).
Обращайте внимание на всякие скобки, запятые и пр. Тут их никак нельзя игнорировать. Каждая запятая или скобка несет определенный смысл.
ur5vft 19 мая 2021 г. в 03:13#167
Четверть монстр
- схема на полевых или биполярных?
ra0ahc 19 мая 2021 г. в 04:24#168
Я в Сочи вообще эфир потерял , все станции ка dx звучат.
3000 м горы Кавказа закрыли Россию
rtty 19 мая 2021 г. в 06:48#169
Посмотрел кино от Коре, а почему афтор не гасит нули МГц?
Обычно это считалось должным сервисом синтезаторов, после всяких старых ЦШ без гашения...
Игорь 2 19 мая 2021 г. в 07:35#170
Я в Сочи вообще эфир потерял , все станции ка dx звучат.

Летом семёрка рулит по ночам на Москву .
Я-то знаю...
Ut1lw 19 мая 2021 г. в 08:59#171
А мне так нравится когда все индикаторы горят.
Аналогично!
Владимир_К 19 мая 2021 г. в 09:24#172
а почему афтор не гасит нули МГц?

Афтор вот так пишет:
На диапазонах, где частота меньше 10 мгц, слева нуль незначащий. Его можно убрать.
В программе найдите строки:
send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b00000000;
Припозднились Вы что-то, читайте 328 сообщение.
Владимир_К 19 мая 2021 г. в 10:51#173
Свистулек много
Собирайте ГУНы. Программу доработаю. Также в планах под индикатор на МАХ7221. И варианты на AD9850 и Si5351A.
Владимир_К 19 мая 2021 г. в 12:41#174
На диапазонах, где частота меньше 10 мгц, слева нуль незначащий. Его можно убрать.
В программе найдите строки:
send_l(led);
led=(Numbers[(int)N1]);

Замените так:

send_l(led);
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b00000000;
Alex42 19 мая 2021 г. в 12:56#175
к приемнику.
А какой у Вас приемник, эфир 80ка очень чистый и какие условия приема?
Игорь 2 8 июня 2021 г. в 04:38#176
и квадратный опорный генератор на 50МГц

И какие у него фазовые шумы?
Игорь 2 8 июня 2021 г. в 04:53#177
Игорь 2 18 июня 2021 г. в 03:04#178
Да был меньше часа назад...
Владимир_К 18 июня 2021 г. в 06:54#179
был меньше часа назад...
Вы же так зашифровались, что с другого компа так и не смог зайти, а был я не дома . Набираю логин, пароль, хренушки.. Выдает - нет такого члена . 16 вернулся. Да и сейчас, с телефона не могу. Ну телефон, то хрен с ним..
Игорь 2 18 июня 2021 г. в 07:37#180
Не знаю, что там за шифровка, у меня десяток компов с любого вхожу без проблем, как и с любого провайдера...
Игорь 2 18 июня 2021 г. в 08:09#181
Буквально пару часов назад форум упал.

Он раньше упал. Исправлено...
Владимир_К 18 июня 2021 г. в 08:19#182
у меня десяток компов с любого вхожу без проблем
На одну буковку ошибся (причем маленькую), при вводе пароля, и уже не пускаете. Капризные шото стали
Игорь 2 18 июня 2021 г. в 08:41#183
Капризные шото стали

Valery Gusarov 18 июня 2021 г. в 09:03#184
при вводе пароля
Ну вот... А я свой не помню уже.
Слетит (как личные кабинеты регулярно в налоговой и прочих госуслугах) и усё.
Игорь 2 18 июня 2021 г. в 10:58#185
Слетит (как личные кабинеты регулярно в налоговой и прочих госуслугах) и усё.

Нельзя так к паролям относиться.
К примеру, у меня есть ZIP архив, куда все они собраны, который, в свою очередь, заперт на длиннющий пароль, который не забудется. И ничего никогда не теряется.
Файл хранится на рабочей машине, не связанной с Интернетом.
Все документы задублированы не менее чем трёхкратно.
Так что я с форума не потеряюсь.
Ut1lw 19 июня 2021 г. в 05:50#186
длиннющий пароль, который не забудется.
В сантиметрах?
Игорь 2 19 июня 2021 г. в 06:15#187
В сантиметрах?

Берите больше...
ur5vft 19 июня 2021 г. в 07:14#188
А я свой не помню уже
-пишите везде в пароле имя и день рождения тещи ,гарантирую , будите помнить всегда..
Владимир_К 29 июня 2021 г. в 12:36#189
Шо та заглохла тема. Чтобы расшевелить, прошивка для синтезатора Core на Si5351a. Это пока прямой синтез. Не проверено, ибо не на чем проверить.
На выходах регистров:
- первые 12 выходов - управление переключением ДПФ и ФНЧ;
- последние 4 выхода - управление ГУНами. Эта функция уже работает, но это на потом, когда эти самые ГУНы будут присутствовать. Такая же ситуация и с управлением делителем.
Все остальное, вроде соответствует пожеланиям, высказанным в этой теме. Если что-то не упустил. Частоты выдаваемые на выходе Si5351A соответствуют прямому синтезу.
ZTM 14 сентября 2024 г. в 02:08#190
Появился некоторый интерес к синтезатору
Спасибо,что оживили тему!
Владимир_К 14 сентября 2024 г. в 11:30#191
Появился некоторый интерес к синтезатору, поэтому выкладываю исходник программы и схему. Схему надо рассматривать творчески. Она делалась для себя и очень давно, поэтому неточностей там может быть достаточно. Схема самого трансивера вообще полностью переделана и на нее не надо обращать внимания. Все в одной папке и мне не хотелось что-то из нее выбрасывать и плодить еще папки. Тем более, что все это на CD.
Кратко об особенностях синтезатора:
- синтезатор прямого синтеза на Si5351A;
- индикатор частоты светодиодный со статической индикацией, схема индикатора от Тарасова UT2FW;
- SW-метр в виде линейки светодиодов (8 шт);
- Переключатель диапазонов галетный, принцип примерно такой-же как у Тарасова, но выполнен на регистре.
- Кнопки нефиксируемые, поэтому для индикации, какая кнопка была нажата, возле каждой кнопки расположен светодиод, индицирующий что функция включена. повторное нажатие выключает функцию;
Файл main.zip - НЕХ-файл прошивки. Проект на Си, среда AVR Studio 4.19.
Владимир_К 14 сентября 2024 г. в 12:57#192
Небольшое дополнение. Программа не будет работать без подключения Si5351A, так как по шине I2C направляется запрос к Сишке. Если ее нет, нет и ответа от микросхемы. Для тестирования без Si5351A в программе в функции управления сишкой, надо вставить возврат из функции (return:), тогда после перехода в функцию, будет осуществлен возврат в основное тело программы.
В файле Si5351A.c изменить строки, вот так:

void si5351aSetFrequency(unsigned long z) // Функция управления частотой frequensy -параметр переданный в вызове функции из main
{
return;
uint32_t pllFreq; // Определение переменных: pllFreq, XTALFreq, l, f, mult, num, denom, divider
uint32_t xtalFreq = XTAL_FREQ;
uint32_t l;
float f;
uint8_t mult;
uint32_t num;
uint32_t denom;
uint32_t divider;
if (z<11000000)
ZTM 16 сентября 2024 г. в 02:03#193
Понял,благодарю!Если что-то меняю,делаю для себя пометки о том,когда и что поменял и сохраняю в разные папки,чтоб не запутаться.Сделаю как Вы сказали
Владимир_К 16 сентября 2024 г. в 02:23#194
Если что-то меняю,делаю для себя пометки о том,когда и что поменял
Эти пометки Вы можете делать в тексте программы, для этого, в строке программного кода, ставите две косые черты // и дальше пишете свой комментарий, компилятор на него внимание не обращает. Но, комментарий должен быть в одной строке, если он переносится на другую строку, он также должен начинаться с двух косых черт.
Также все что находится между /* какой-то текст */ косая черта и знак умножения (звездочка) и заканчивается */ будет проигнорировано. Кроме того, редактор текста, все что игнорируется компилятором, выделяет зеленым цветом.
Строки текста программы желательно не удалять, а выделять знаком комментарий, т.е. двумя чертами, тогда легко будет восстановить, убрав комментарий.
Смотрите на мой текст программы, как оно все выглядит. Если что не понятно, спрашивайте. По образцу легче понять логику...
ZTM 16 сентября 2024 г. в 02:25#195
Эти пометки Вы можете делать в тексте программы, для этого, в строке программного кода, ставите две косые черты // и дальше пишете свой комментарий, компилятор на него внимание не обращает. Но, комментарий должен быть в одной строке, если он переносится на другую строку, он также должен начинаться с двух косых черт.
Также все что находится между /* какой-то текст */ косая черта и знак умножения (звездочка) и заканчивается */ будет проигнорировано. Кроме того, редактор текста, все что игнорируется компилятором, выделяет зеленым цветом.
Строки текста программы желательно не удалять, а выделять знаком комментарий, т.е. двумя чертами, тогда легко будет восстановить, убрав комментарий.
Да-да,все так и делаю!
ZTM 16 сентября 2024 г. в 02:30#196
Владимир,а такой вариант управления индикаторами не рассматривали?
Владимир_К 16 сентября 2024 г. в 03:22#197
Нет. Но это не сложно, практически то же самое. Если спаяете такой индикатор, программу подкорректирую. Просто у меня была пара готовых от Тарасова, их и применял. Надо бы попробовать индикатор на базе MAX7921, но никак руки не доходят. Его надо проверить на наличие помех. Он поменьше раэмером, и плата проще. То есть, я бы с ним пробовал.
ZTM 16 сентября 2024 г. в 07:59#198
Дальше, вот тут:
//if (_band<4) y_1=y_1+pch;
// else y_1 = y_1-pch;
y_1 = y_1+pch;
В зависимости от номера диапазона, ПЧ прибавляется или наоборот вычитается.
Владимир,в выложенном Вами исходнике не нашел этих строк,но там есть следующее:

/******************** Вычисление частоты **************/

void sub_freg()


{
frequency =frequency_t;
if (rit_1==0)

{
//frequency =frequency_t;
frequency=frequency+chagi*bufEnc*abs(bufEnc);

if (frequency > (freq_max[(int)_band])) frequency=(freq_min[(int)_band]);
if (frequency < (freq_min[(int)_band])) frequency=(freq_max[(int)_band]);
frequency_t=frequency;
}
else
{
rit=rit+chagi*bufEnc;
frequency=frequency+rit;
}
}
Я правильно понимаю,что править нужно здесь,чтоб частота на выходе SI5351 была Fприема+Fпч?
Владимир_К 16 сентября 2024 г. в 11:41#199
Я правильно понимаю,что править нужно здесь,чтоб частота на выходе SI5351 была Fприема+Fпч?
Нет, не здесь. Что-то я не нахожу строк, которые Вы здесь выложили. У Вас, подозреваю, не тот исходник. Вот те строки, которые в Вашем сообщении выделены как цитата, откуда они? Их нет в исходнике, который я выложил в 361 сообщении. Разархивируйте исходник, откройте AVR Studio 4.19. Зайдите в меню, закройте проект, который сейчас открыт - Project - Close Progect. Затем откройте тот, что сбросил в 361. В проекте откройте файл si5351a.c.
В функции
void si5351aSetFrequency(unsigned long z)
найдите строки:
if (z<11000000)
z=z+pch;
else z=z-pch;
z=z;

Вот здесь условие, если z<11000000 (if (z<11000000)), то есть переданный в функцию аргумент (frequency), в самой функции ему присвоено обозначение z, проверяется его значение и если оно меньше 11000000, то частота ПЧ прибавляется, иначе (else) вычитается. Для того, чтобы частота всегда прибавлялась, сделайте вот так в этих строках:
//if (z<11000000)
z=z+pch;
//else z=z-pch;
z=z;
То есть, перед строками, которые надо убрать, ставится двойное //. Это называется "закомментировать" строку. Компилятор эти строки проигнорирует. Таким образом останется строка
z=z+pch; то есть, всегда ПЧ будет прибавлятся к z, а z, как я выше писал, есть не что иное как frequency, аргумент, переданный в функцию при ее вызове.
Ну и я бы не рекомендовал сейчас что-то править. Соберите схему, хотя бы макет, запустите в таком виде. Затем можно вносить правку и сразу проверять в "железе". Вообще желательно, делать правку хотя бы одной строки, компилировать (при компиляции, если будут ошибки в синтаксисе, компилятор об этом сообщит). Затем прошиваете и проверяете работу. Если что-то пойдет не так, сразу можно вернуться. Если сделать сразу много правок, потом трудно разобраться, где допущена ошибка. Синтаксис компилятор проверит, но он не проверит, если ошибка будет в алгоритме программы.
Кроме того, этот синтезатор выдает частоты, соответствующие частотам гетеродина, а у Вас по схеме Игоря, там есть и деление и пр. Поэтому пока ничего не правьте, запускайте пока так, все равно потом много чего надо изменять.
И еще, в 361 сообщении также выложен НЕХ-файл (main.zip) прошивки. Его Вы сразу можете программатором зашить в контроллер и проверить работоспособнось. Предварительно извлеките из архива.
Если Вы делаете правку, потом компилируете, компилятор создает новый НЕХ-файл. Он находится в папке default проекта - main.hex.
Еще заметил - строка z=z: совершенно лишняя. Просто удалите ее. Не понял зачем я ее воткнул..

ZTM 1 ноября 2024 г. в 03:27#200
Владимир,добрый день!Собрал индикатор и почти собрал макетку управления.Появились вопросы по кнопкам.Нашел RIT дважды.Могли бы Вы написать инструкцию по назначению кнопок?Может быть какие-то из них имеют двойной функционал или функции,не подписанные на схеме?
ZTM 1 ноября 2024 г. в 03:50#201
И еще вопрос.Нужно ли где-то в исходниках прописывать частоту опоры SI5351?
Владимир_К 1 ноября 2024 г. в 06:14#202
Появились вопросы по кнопкам.Нашел RIT дважды.Могли бы Вы написать инструкцию по назначению кнопок?
Добрый день! Там все просто. Каждая кнопка выполняет только одну функцию. Кнопки подключены к делителю, таким образом, нажатие кнопки выдает определенное напряжение, которое подается на вход аналого-цифрового преобразователя процессора. Через определенные промежутки времени (уже не помню, через сколько точно, примерно 4-5 миллисекунд) процессор проверяет, нажата ли какая-нибудь кнопка. Если ни одна кнопка не нажата, напряжение на входе ADC процессора равно напряжению питания, т.е. около 5 вольт. Тут одно надо понимать, ADC преобразовывает напряжение на входе в цифру. Напряжению 5 вольт соответствует 1024.
Проверка нажатия вот строки (файл Radio_76.c)
if (AdcBuf>950) // Кнопка не нажата - выходим
{
n=1;

}

}
т.е. если после преобразования переменная AdcBuf меньше 950 (950 взято для запаса, вдруг напряжение по какой-то причине просядет и будет не 1024, а меньше), то программа начнет отрабатывать алгоритм нажатия кнопки и, какая именно нажата. Если не нажата, программа возвращается в основной цикл.
Вот строки, где определяется какая кнопка нажата:
if (Adc_1 < 250) l=0; //AGC, т.е. если Adc меньше 250, то l=0 и т.д.
else if (Adc_1 < 500) l=1; //RIT
else if (Adc_1 < 800) l=2; //Att

else l=3;

Таким образом, в программе, фактически задействованы только три кнопки - AGC (кнопка переключения АРУ - ручная регулировка или авт.), RIT- кнопка включения расстройки. При этом частота приема будет указана на экране, частота передачи будет той, которая была до нажатия кнопки RIT. И последняя кнопка - кнопка включения аттенюатора.
Все эти кнопки без фиксации. При нажатии кнопки функция включается, при повторном - отключается.
Напряжения, при котором включается та или иная фуннкция (но переведенные в цифру) должны соответствовать напряжениям, которые выдает Ваш делитель. То есть, тут надо учитывать точность резисторов. Ну например, при нажатии какой либо кнопки у Вас напряжение на входе ADC равно 2,5 вольта, это 1024*2,5/5,0, т.е. 512. Условие пишем так:
if (Adc_1 < 530) l=0; //AGC
почему именно 530, а не 512. Это вроде запаса, о котором я выше упомянул. Количество кнопок можно добавить, наример в одном варианте их было 12 штук. Но там надо тщательнее измерять. Обычно напряжение выбираются из ряда U1=0,5 вольта, U2=0,5*1,5, U3=0,5*1,5^2 и т.д. Т.е геометрическая прогрессия, где 1,5 коэффициент, который надо выбрать таким образом, чтобы напряжение от первой кнопки было 0,5 вольта, от последней - 4,0 примерно. Т.е. в зависимости от количества, больше кнопок - меньше коэффициент. Можно и проще, каждая кнопка дает напряжение, например на 0,5 вольта больше предыдущей.
На схеме нарисованы 7 кнопок, в программе задействовано кажется 6 (это я имею ввиду собранный и работающий вариант трансивера. Программу мог перепутать. Пока не будем искать соответствие, оно не важно, уточним потом.
Нужно ли где-то в исходниках прописывать частоту опоры SI5351?
Да, конечно. Она прописана в файле Radio_76.c, вот строка:
#define xtal 26691697 // Частота кварца платы приемника
При вызове функции, которая управляет сишкой, этот параметр передается, вот так:
si5351aSetFrequency(frequency+pch_1, xtal);
где указана рабочая частота - frequency, к ней прибавляется частота ПЧ - pch_1 и передается частота кварца - xtal. Частоту кварца, в принципе, можно указать где угодно. Компилятор найдет.. Но все же, надо придерживаться какого -то порядка. Если, генерируемая частота будет отличаться от нужной, значит кварц генерит другую частоту и цифру в программе надо скорректировать. После прогрева, измеряете. Например если частота, которую выдает сишка, больше на 10 процентов, чем нужно, значит кварц выдает другую частоту, чем прописано в программе и, вот эту частоту теперь и надо записать в программе, т.е. увеличить именно на 10 процентов.
Я примеры взял из первой попавшейся программы, может у Вас другой исходник (уже не помню какой). Короче поищите в своем исходнике, потом, ежели что, уточним.

Владимир_К 1 ноября 2024 г. в 06:21#203
Да, еще. Выше в этой теме, есть диагностическая программа для проверки индикатора. Коль Вы его собрали, можете проверить работу..
Владимир_К 1 ноября 2024 г. в 06:29#204
Я примеры взял из первой попавшейся программы, может у Вас другой исходник (уже не помню какой).
Да, все же не тот исходник я открыл. Поэтому у Вас будет файл не Radio_76.c, а main.c и частота кварца прописана в файле Si5351A.h:
#define XTAL_FREQ 32004212 // Crystal frequency
Давно это уже было, понемногу забывается. Да и сейчас в основном использую STM-32, а не Atmega328. Пока они дешевле...
ZTM 1 ноября 2024 г. в 11:35#205
частота кварца прописана в файле Si5351A.h
Да,нашел.Благодарю!
ZTM 31 декабря 2024 г. в 04:54#206
Здравствуйте,Владимир.Посмотрите пожалуйста,верно понял распиновку с контроллера на индикатор?Смутила надпись SK на разъеме контроллера.И правильно ли я понимаю,что тестовая прошивка может работать с контроллером и индикатором без клавиатуры и прочего обвеса?
Владимир_К 1 января 2025 г. в 04:31#207
.Посмотрите пожалуйста,верно понял распиновку с контроллера на индикатор?Смутила надпись SK на разъеме контроллера
Добрый день! Схема индикатора от А.Тарасова UT2FW. Такой индикатор был применен в одном из его трансиверов. Поэтому обозначение другое. То есть SK на моей схеме это Clk у Тарасова. Тестовая прошивка будет работать без всех примочек, только проц. и индикатор. Единственное на что надо обратить внимание, так это на инвертор DD15C. В начале темы я об этом писал, почитайте там. Я с телефона пишу, неудобно, и не помню, вроде инвертор не нужен. Но я уточнить не могу, это надо открыть исходник тестовой программы и там посмотреть полярность сигнала Strobe на выводе порта PB1.
Кроме того, это зависит от того какие матрицы светодиодные применены. На схеме они с общим катодом, можно применить и с общим анодом при соответствующей коммутации питания, также надо проинвертировать все биты знакогенератора.
Если индикаторы у Вас с общим катодом, то надо только определиться с необходимостью инвертора.
ZTM 2 января 2025 г. в 11:41#208
На схеме они с общим катодом, можно применить и с общим анодом при соответствующей коммутации питания, также надо проинвертировать все биты знакогенератора.
Добрый день,Владиимр!На мою беду китайцы прислали индикаторы с общим анодом .Долго искал косяки,пока коллега,а потом и даташит,не ткнули носом.Перекинул плюс питания на эмиттер транзистора,соответственно сменив транзистор с npn на pnp.Дисплей ожил,тестовая прошивка замерцала индикаторами.Только цифр нет,почти все разряды залиты сплошняком,включая точки...Можно как-то исправить это дело в прошивке,не меняя разводки платы индикации?
Владимир_К 3 января 2025 г. в 01:22#209
Сначала попробуйте выбросить инвертор, как выше коллега советовал.
Нет, в Вашем случае инвертор нужен. В программе для включения индикатора, на выход порта PB1 выдается единица, которая открывает транзистор (в этом случае инвертор не нужен), у Вас для включения индикации на базу надо подавать ноль. Поэтому инвертор оставьте. Если его у Вас изначально нет, тогда и не надо, я просто в программе поменяю сигнал Strobe на инверсный.
Владимир_К 3 января 2025 г. в 03:18#210
Владимир,еще такой момент.Вы ранее писали,что заливаете прошивку через программу Xloader.
С помощью его я заливаю прошивку в Ардуино. Т.е. если есть файл .hex сгенерированный какой-либо программой (не Arduino IDE) и его надо залить в Ардуино, т.е. плату на Atmega в которой есть загрузчик. Если в "голую" Atmega, то или avrdude или Sinaprog. Обычно ейною, больше к ней привык.
Теперь, что касается тестовой программы.
Внизу исходник тестовой программы. Это та, которую сделал для проверки индикатора для коллеги с ником Core. У него индикаторы с общим катодом. Инвертор не нужен.
Чтобы адаптировать программу для индикаторов с общим анодом надо сделать следующее. Программой AvrStudio 4.19 (насколько я понял она у Вас установлена) открываете проект, предварительно открыв архив. Открываете файл ldc.h, находите в нем строку
char Numbers[10] = {0x88,0xeb,0xc4,0xc1,0xa3,0x91,0x90,0xcb,0x80,0x81};
Это знакогенератор. То что в фигурных скобках это указание, какие сегменты надо включить чтобы зажечь какую либо цифру. Например на первом месте стоит 0х88, "0х" указывает, что цифра шестнадцатиричная. В двоичном коде это 10001000. Вот для Вашего индикатора все нули надо поменять на единицы и наоборот. Т.е. должно быть 01110111 или, в шестнадцатиричном это будет 0х77. Вторая цифра 0хeb. Это 11101011. Меняем цифры. 00010100 Или, в шестнадцатиричном это будет 0х14. И так надо изменить все цифры. После преобразований строки будет выглядеть так. Т.е. исходную строку "комментируете" двумя косыми, а ниже вставляете исправленную.
//char Numbers[10] = {0x88,0xeb,0xc4,0xc1,0xa3,0x91,0x90,0xcb,0x80,0x81};
char Numbers[10] = {0x77,0x14,0x3b,0x38,0x5c,0x6e,0x6f,0x34,0x7f,0x7e};
Далее. В этом же файле находите строки:
PORTB &=~(_BV(PB1)); // эта команда выдает на вывод порта PB1 нуль.
PORTB |=_BV(PB1); // а эта - единицу.
Если у Вас индикатор без инвертора, то строки надо поменять местами. Если инвертор есть, ничего делать не надо.
После всех манипуляций компилируете проект. НЕХ-файл (main.hex) находится в папке default.
Если это сделать сложно, тогда я исправлю проект, скомпилирую и НЕХ-файл сброшу, только уточните, есть ли у Вас инвертор?
ZTM 3 января 2025 г. в 04:09#211
сли это сделать сложно, тогда я исправлю проект, скомпилирую и НЕХ-файл сброшу, только уточните, есть ли у Вас инвертор?
Не сложно поправить и скомпилировать,Владимир.Инвертор имеется.Благо,пока все в относительно *черновом* варианте.Да,самое главное забыл - не уточнил у Вас ,какую печатку из архива выше использовать для индикатора Сейчас ловлю блох в разводке,ищу ошибки на предмет не правильной разводки и т.п.
Владимир_К 3 января 2025 г. в 04:32#212
какую печатку из архива выше использовать для индикатора
В архиве файл печатки. Посмотрите, может возможно упростить. Делал давно. Металлизации отверстий нет, поэтому при распайке придется некоторые пятачки(у меня это третий2 и восьмой выводы индикатора), которые находятся на разных сторонах платы, соединить отрезками проволоки, примерно 0,25 мм диаметром. Это для распайки индикатора. Так как при установке индикатора на плату, некоторые пятачки находятся под индикатором и к ним доступа нет. Поэтому я делал так - в отверстие пятачка, который окажется под индикатором, вставлял проволочку и припаивал ее к пятачку, но так, чтобы отверстие было открытым. Затем вставляется индикатор и его выводы паяются к пятачкам, вместе с проволочками. Короче, тут творчески подходите. К тому же, возможно и распиновка Ваших индикаторов другая (хотя, скорее она стандартная). Некоторые выводы микросхем также паяются с обоих сторон. Но там доступ есть, поэтому проще. Индикаторы у меня вроде 0,36 дюйма.
Да, еще. Индикаторы и микросхемы распаиваются на пртивоположных сторонах платы.
Видео проверки с тестовой прошивкой здесь:
https://www.youtube.com/watch?v=JqKkpXOt4MY

Владимир_К 3 января 2025 г. в 06:05#213
Как-то сразу не вспомнил.. В общем, ситуация такая - этот индикатор имеет некоторый "косяк". И заключается этот косяк в том, что здесь отсутствуют токоограничительные резисторы. Индикаторы, изготовленные по этой схеме применялись во многих конструкциях Тарасова, я их применял неоднократно и, никаких проблем не видел. Но, везде индикаторы были с общим катодом. Микросхема 4015 для зажигания сегмента выдает на выход ток. И он, в этой микросхеме и подобных, видимо как-то ограничен, скорее всего исходя из способа управления ключом. Тут работает верхний транезистор. Он стоком подключен к источнику питания, напряжение на затворе транзистора, когда он открыт, равно напряжению источника, даже, скорее всего, меньше. Так как светодиод подключен к истоку ключа, напряжение на истоке повышается, соответственно разность напряжения затвор-исток уменьшается.
В Вашем случае, при зажигании сегмента, ток от источника через светодиод будет втекать в микросхему через нижний ключ. И вот тут может быть неприятность. Поэтому, я бы сначала попробовал с одним светодиодом. Возьмите любую МОП- микросхему и подключите к ней светодиод в двух режимах, когда м/с выдает единицу и светодиод анодом подключен к выходу микросхемы и, когда на выходе ноль, а светодиод анодом к источнику питания, а катодом к выходу. Вроде когда-то такой эксперимент я делал, но уже не помню. Что-то меня ситуация со светодиодными индикаторами с общим анодом, малость напрягает...
А паять еще и десятки резисторов, как-то не вдохновляет. Хотя место для них вполне можно найти.
ZTM 3 января 2025 г. в 07:13#214
Владимир,сильно благодарен за информацию! Буду копать дальше,глядишь дожму проект.
ZTM 3 января 2025 г. в 11:05#215
Владимир,еще такой момент.Вы ранее писали,что заливаете прошивку через программу Xloader.В моем случае чистый контроллер atmega328 с кварцем 16МГц, без загрузчика.Заливаю через avrdude.Без инвертора индикаторы не горят.UPD.Залил тестовую прошивку с первой страницы,с ней наоборот,без инвертора светит,с ним нет.
Владимир_К 3 января 2025 г. в 12:59#216
Только цифр нет,почти все разряды залиты сплошняком,включая точки...
Сначала попробуйте выбросить инвертор, как выше коллега советовал. Если в плате нет ошибок, то цифры должны высвечиваться, но инверсно. Если же засвечиваются все сегменты, то тогда где-то косяк.
Тестовая прошивка работает так - на индикаторе все нули, затем все единицы, меняется примерно через полсекунды и т.д. до девяток, затем снова.. У Вас, когда должны высвечиваться единицы, будут светиться все сегменты, кроме сегментов b и с. Если это так, то плата у Вас работает правильно, только надо в знакогенераторе все единицы заменить нулями и наоборот. Это я сделаю завтра.
Также попробуйте подпаять резистор примерно 1 ком между эмиттером и базой транзистора.
Владимир_К 5 января 2025 г. в 05:11#217
Если у кого есть желание попробовать, могу в рассматриваемом здесь синтезаторе заменить индикатор на китайский на микросхеме MAX7221 (МАХ7219). Создает ли он помехи, не знаю, не проверял. Индикатор намного проще, меньше, не надо заморачиваться с пайкой нескольких микросхем. С белым свечением особенно нравится..
Скорее всего, проблему помех от индикатора можно решить и, не думаю, что это сложно.
BL68 5 января 2025 г. в 06:13#218
Я извиняюсь, немного со своей "колокольни"....
Может заменить индикатор на что-то типа SSD1309? Задействованы ноги РС0 и РС1 (I2C). Библиотек в инете полно, шума от индикатора нет.
ZTM 5 января 2025 г. в 09:53#219
Увы мне,увы.Не взлетело.Итак,имеющееся железо:индикаторы с али с общим анодом(как выяснилось позднее) 3912AG,управляемые 561ИР2,контроллер Atmega-328P PU с кварцем 16МГц,программаторы SI-Prog и USB-asp, Avrdude.Печатку проверил несколько раз,выявил небольшие огрехи,исправил,теперь все верно.МК прошивал и тестировал в управлении другим синтезом от Андрея UR3ILF,программа работала.С последней тестовой прошивкой переключение сегментов раз в несколько секунд.Менял местами строки,как советовал Владимир.Пока не могу понять,что делаю не так.Прошивка для теста скомпилилась без ошибок.
Владимир_К 5 января 2025 г. в 10:12#220
С последней тестовой прошивкой переключение сегментов раз в несколько секунд.
Если у Вас применена микросхема Atmega328, Вы должны помнить, что фьюзы в микросхеме на заводе прошиты таким образом, что тактирование процессора осуществляется от внутреннего RC-генератора работающего на частоте 1 мгц. В моей программе переключение индикатора происходит через 0,5 сек. Это при частоте тактового генератора 8 мгц. Я обычно кварц на ставлю, а тактирую от RC-генератора частотой 8 мгц. То есть, если Вы не переустанавливали фьюзы, то у Вас переключение будет происходить через 4 сек.
Прочитайте программатором какие у Вас установлены фьюзы. Потом надо будет установить нужные.
Это что касается частоты перенключения. А то, что на индикаторе отсутствуют нужные цифры, с этим разберемся потом.
Владимир_К 5 января 2025 г. в 10:18#221
контроллер Atmega-328P PU с кварцем 16МГц
Чтобы микросхема тактировалась от кварца, для этого надо прописать фьюзы должным образом. Иначе кварц, даже если он запаян, не работает, а может и работает, но тактирование от него не происходит.
ZTM 5 января 2025 г. в 10:19#222
Прочитайте программатором какие у Вас установлены фьюзы.
Вот так сейчас
ZTM 5 января 2025 г. в 10:42#223
Перепрошил Сейчас обновляется как на Вашем видео.Но цифры не отображаются,а лишь сегменты,видимо все же залетел с индикаторами Придется копать даташит и кроить печатку....
Владимир_К 5 января 2025 г. в 10:45#224
Ну вроде все так, как я выше писал. У Вас такт от RC-генератора и включен делитель на 8. Поэтому такт от 1 мгц. Сначала оставьте все как есть, но CKDIV8 измените на противоположное. У Вас он включен (птичка установлена), эта долбаная PonyProg пытается запутать народ. Вообще правильно считается - фьюз установлен, когда в нем записан ноль. И обычно так все и считают. Но тут Понипрог подсуетилась...
Вот ссылка на калькулятор фьюзов.
https://radioaktiv.ru/avr_fuses_calculator.html?part=ATmega328P
Владимир_К 5 января 2025 г. в 10:53#225
Сейчас обновляется как на Вашем видео.Но цифры не отображаются,а лишь сегменты,видимо все же залетел с индикаторами
Да ничего страшного. Это все правится в программе. Ничего с печаткой делать не надо. Напишите что у Вас отображается на индикаторе, по порядку, потом будем кумекать и править программу.
Вам надо главное разобраться с индикаторами. То есть к каким выводам подключены сегменты. Сегменты расположены так - верхний -а, справа вверху - в, справа внизу - с, нижний - d, ну и так далее. Сравните со схемой индикатора у Тарасова. Но я не думаю, что там что-то напхимичили китайцы. Обычно, чтобы удобно выводить сегменты на выводы, применяют стандартное расположение. Но, еще раз - ничего с платой делать не надо. Это все просто сделать в программе.
Владимир_К 5 января 2025 г. в 11:02#226
Кроме того, надо посмотреть на какие ноги 561ИР2 выводятся биты. Например число 10100110. Оно заталкивается начиная справа (а может слева, не помню, это сейчас не важно). То есть, в конце цикла, когда все биты будут записаны в регистр, после сигнала Strobe все эти биты будут выведены на ножки ИР2. То есть, сегиент, подключенный к выводу, на которм будет единица в Вашем индикаторе будет светиться. Таким образом, меняя цифры в знакогенераторе программы мы можем вывести любые цифры, а то и другие знаки, которые можно получить комбинируя зажженные зегменты.
ZTM 5 января 2025 г. в 11:21#227
Ничего с печаткой делать не надо
Нашел даташит.Если паять по схеме на эту же печатку,то получается,что индикаторы должны быть со стороны микросхем.Если ИР держать к себе,то индикаторы с их стороны,над ними и точками вверх
Владимир_К 5 января 2025 г. в 11:39#228
то получается,что индикаторы должны быть со стороны микросхем
Не надо обращать внимание на схему. Главное правильно подать нитание на микросхемы и нндикаторы. Если цифры выводятся не те, что надо, это правится в программе.
Давайте сделаем следующее:
Откройте проект, зайдите в файл lcd.h. Найдите строку:
char Numbers[10] = {0x88,0xeb,0xc4,0xc1,0xa3,0x91,0x90,0xcb,0x80,0x81};
Измените ее вот так:
char Numbers[10] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x30,0x80,0x80};
С такими знакогенератором на индикатор будет каждый раз выводиться (подсвечиваться) только один сегмент. А в самом начале вообще ни одного не должно светиться. Таким образом, программа выдаст нам какой сегмент соответствует установленному в программе. И тогда абсолютно станет ясно, какое число надо записать в знакогенератор, чтобы высветить например двойку.
Паять микросхемы со стороны индикаторов нехорошо, так как микросхемы будут упираться в переднюю панель, а у меня там, под индикаторами, между платой индикаторов и передней панелью, еще плата со светодиодами, которые показывают уровень сигнала.


ZTM 5 января 2025 г. в 11:57#229
Не надо обращать внимание на схему.
Эх,поторопился....Перенес индикаторы на сторону микрух....И да,безрезультатно.Но начали моргать точки,до этого они просто светились Сейчас все починю обратно,ибо точки наверху не комильфо.
UA0OAG 5 января 2025 г. в 12:18#230
Избавит от возни с кучей регистров.
Он с динамической индикацией, много помех вырабатывает.
Владимир_К 6 января 2025 г. в 01:12#231
Вот так оно выглядит с измененной строкой
Ну так все хорошо. Я просто сгоряча, написал так, как должно быть в моем индикаторе. У Вас же наоборот, там где единица в знакогенераторе, там сегмент не горит. Вот еще раз взгляните на знакогенератор. Первое число сейчас 0х00. То есть, на выходе микросхемы все нули. Так как у Вас к выходам микросхемы подключены катоды индикаторов, то светятся все сегменты. Второе число в строке 0х01, или в двомчном коде - 00000001. То есть на одном выводе микросхемы будет единица и семент не светится.
Поменяйте в строке нули на единицы, т.е. там где 0х00, у Вас будет 0хff, где 0х01, надо записать 0хfe (это будет 11111110). В общем, думаю понятно.. Тогда при включении, сначала не будет ни одного сегмента, потом светится один, у Вас это сегмент a ну и так далее. Короче все работает, надо только поправить числа.
Владимир_К 6 января 2025 г. в 01:43#232
Все же есть неверное отображение у Вас. Первые семь комбинаций верно. Где-то косяк? Гляньте в программе в строке. Скорее там ошиблись? Вполне мог я ошибиться, проверьте следующее: например число 0x20. x - должна быть английская буква, я же набирал не помню как, возможно втулил русские буквы. И если Вы скопировали строку из моего сообщения, то будет явная ошибка. Хотя, тогда бы вообще не понятно что отображалось бы...
ZTM 6 января 2025 г. в 02:30#233
Владимир,разобрался!Спасибо огромное за подсказки Строка должна выглядеть вот так : char Numbers[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; Фух....Выдохнул.Все работает и отображается корректно.То есть получается,можно использовать индикаторы с общим анодом.Нужно лишь поменять транзистор на pnp ,завести + в эмиттер и прописать вышеупомянутую строку в файл дисплея.
ZTM 6 января 2025 г. в 02:39#234
Владимир,еще вопрос.Где и что попра��ить,чтоб завести S-метр на вход ADC5? В Вашем варианте задействован ADC7.И,как я понял,Si у Вас выдает два сигнала.Где и как поправить,чтоб она давала только один сигнал на CLK0?
Владимир_К 6 января 2025 г. в 03:18#235
Строка должна выглядеть вот так : char Numbers[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
Ну нормально.. Хотя, есть и более изящный вариант. Чтобы не править всю строку знакогенератора, можно было бы поменять местами две строчки, вот здесь:
tmp=led;

for (t=0; t<8; t++)

{ if (tmp & 0x80)

PORTB |=_BV(PB2);

else PORTB &=~(_BV(PB2));

tmp <<= 1;

_delay_us(2);

PORTB &=~(_BV(PB0));
_delay_us(2);

PORTB |=_BV(PB0);

Это фрагмент кода из файла lcd.h. Что здесь происходит? Мы берем очередное двоичное число частоты (после преобразования частоты из десятичного значения в двоичный код), этому числу присвоено имя (переменная) led. Мы его значение присваиваем переменной tmp(над tmp мы будем кое-что делать, а led не должно изменяться). И выполняем цикл, восемь раз. Умножаем число на 10000000 (0x80), то есть выполняется логическое "и". Если левая цифра 1, то при умножении получаем единицу, то есть это будет "истина" и, если мы получили истину, то
PORTB |=_BV(PB2);, то есть на выход порта PB2 выводится единица. Если левая цифра была ноль, то при умножении получим ноль, т.е. "ложь" и, тогда:
else PORTB &=~(_BV(PB2));
т.е. на выходе порта будет выдан ноль.
Затем число сдвигается влево на один шаг:
tmp <<= 1;
Умножаем на 10000000 и т.д. все повторяем, 8 раз.
Это для моего индикатора. В Вашем случае, надо бы эти строки поменять местами, т.е. если левая цифра ноль, то на выход порта надо выдать единицу и наоборот.
Но это так, мысля вчера пришла перед сном. А коль все работает, то пусть так и остается. Теперь Вы должны в файле lcd.h полной программы синтезатора заменить строки так, как это сделано в тестовой программе.
Где и что поправить,чтоб завести S-метр на вход ADC5?
Сбросьте сюда архив исходника, который Вы используете, чтобы не было путаницы.. Потом я подскажу, где исправить..
Или укажите, из какого сообщения Вы используете исходник?
ZTM 6 января 2025 г. в 03:28#236
Сбросьте сюда архив исходника, который Вы используете, чтобы не было путаницы.. Потом я подскажу, где исправить..
Вот
Владимир_К 6 января 2025 г. в 03:47#237
Где и что поправить,чтоб завести S-метр на вход ADC5?
Это сделать нельзя. PC4 и PC5 эти выводы задействованы как выходы аппаратного модуля I2C, им управляется Si5351A. Если бы шина I2C не использовалась, тогда эти выводы можно было бы использовать как входы ADC. Кроме того, вход ADC7 у меня используется для измерения уровня сигнала, вырабатываемого схемой АРУ. И потом выводится на линейку из 8 светодиодов. Это было сделано из-за отсутствия места на передней панели для ствелочного индикатора. Надо ли Вам это? Оно не очень красиво.. Хотя кому как.
Что касается выходов Si.
В файле main.c уберите или заккоментируйте строку:
si5351aSetFreq_op(0); //устанавливаем опорную частоту
Вот так:
// si5351aSetFreq_op(0); //устанавливаем опорную частоту
Также в файле si5351a.c уберите (закоментируйте) строку:
i2cSendRegister(SI_CLK1_CONTROL, 0x4F | SI_CLK_SRC_PLL_B);
вот так:
//i2cSendRegister(SI_CLK1_CONTROL, 0x4F | SI_CLK_SRC_PLL_B);
ZTM 6 января 2025 г. в 03:51#238
Это сделать нельзя. PC4 и PC5 эти выводы задействованы как выходы аппаратного модуля I2C, им управляется Si5351A.
Точно,посмотрел назначение выводов....Не беда,внешний S-метр сделаю
Владимир_К 6 января 2025 г. в 04:07#239
Не беда,внешний S-метр сделаю
Именно это я и имел ввиду (стрелочный индикатор). Но если надо, почему именно ADC5. Есть же еще свободный вывод ADC6.. В одном трансивере я столкнулся с такой проблемой - АРУ выдает крайне нелинейный сигнал и поэтому отметка на шкале S9 находится далеко от центра справа, почти в конце шкалы и там они все слились почти. S9+10 ... S9+60. А если программно, то можно преобразовать точнее.
И кстати, я вижу, что в этом варианте программы светодиодный S-метра как раз и нет. Скорее всего, я его выбросил, когда адаптировал программу для Core. Хотя, уже не помню... Бардак с программами , точне с их хранением и обозначением. В файле main.c в самом начале иногда пишу, что это за программа, какие ее отличия, когда изменена и т.д. Но часто забываю поправить.
Владимир_К 6 января 2025 г. в 04:27#240
можно задействовать порты D0 и D1.
Этого я стараюсь избегать. Это порты RXD и TXD. То есть приемник и передатчик аппаратного модуля USART. В некоторых синтезаторах я применял САТ.
ZTM 6 января 2025 г. в 09:42#241
Чтобы не править всю строку знакогенератора, можно было бы поменять местами две строчки
А я так и сделал,кстати.Причем менять их пришлось именно в секции кода ниже комментария *вывод частоты на индикатор*,иначе дисплей кратковременно моргал после включения и больше не подавал признаков жизни.Строку знакогенератора также пришлось менять,потому что точки были на местах,а символы с вариантом строки оригинала отображались не корректно. К слову,без fusebit doctor-a в моем случае было бы совсем тоскливо.После прошивки фьюзов атмега перестала определяться,пришлось обнулять полностью.Не силен в программировании,увы .В прикреплении архив с полной программой для ПЧ 45МГц(в теме обсуждался способ изменения ПЧ) и исправленным конфигом для индикаторов с общим анодом(3912AG в моем случае).Такие индикаторы найти проще,чем индикаторы с общим катодом,как оказалось.
ZTM 6 января 2025 г. в 09:57#242
Тут «прикол» в индикаторах как у микроволновки..
Именно!Олдскульно и *лампово* Не то что эти ваши 1602,SSD1306 и TFT бездушные Плюс самый важный для меня фактор - морозоустойчивость индикатора.
BL68 6 января 2025 г. в 10:48#243
Мы берем очередное двоичное число частоты (после преобразования частоты из десятичного значения в двоичный код), этому числу присвоено имя (переменная) led. Мы его значение присваиваем переменной tmp(над tmp мы будем кое-что делать, а led не должно изменяться). И выполняем цикл, восемь раз.
А не проще объявить массив из 10 констант и брать константу согласно числа. "0" с нулевым адресом, "1" с первым адресом и т.д. Это будет гораздо быстрее чем перемножение в цикле 8 раз.
const __code char digit[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}
ZTM 6 января 2025 г. в 12:40#244
Вот так оно выглядит с измененной строкой https://cloud.mail.ru/public/Dhzg/gmSsfuhst
Владимир_К 7 января 2025 г. в 01:15#245
const __code char digit[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}
Чем Ваш массив отличается от фрагмента исходника. выложенного коллегой выше, вот оно:
char Numbers[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
BL68 7 января 2025 г. в 02:06#246
Да, можно и так, но тогда мы занимает оперативную память переменной, а то что я написал - статический массив во флешь, оперативка не используется. Разницы нет, просто у меня привычка еще с 80-го семейчтва экономить оперативку
BL68 7 января 2025 г. в 03:43#247
Мы друг друга не совсем поняли Просто ваша запись предполагает расположение переменной типа char в оперативной памяти и, похоже, переменная объявлена глобально , а моя как раз во флешь, которой в избытке, там-же где и код самой программы.
Я обычно последовательный вывод чисел на индикаторы делаю через sprint. Для примера вашего случая (7 знакомест) sprintf(c, "%7d", indikator); Переменная с объявляется прямо в процедуре вывода (char c[7]; ) и по выходу из процедуры оперативка освобождается. А потом в цикле j=0; j<7; j++) берется значение для индикатора из массива по значению в с[j] (digit[с[j]]) и выводится побитно (сдвигом) в порт. Просто в этом случае не нужно трогать саму программу при смене типа индикатора, а править только массив значений индикатора const __code char digit[].
Владимир_К 7 января 2025 г. в 06:31#248
Просто ваша запись предполагает расположение переменной типа char в оперативной памяти и, похоже, переменная объявлена глобально , а моя как раз во флешь, которой в избытке, там-же где и код самой программы.
Если честно, то я толком и не разбирался, где и какая . EEPROM знаю, а остальное как-то не отложилось.. К тому же, программирование для меня это не самоцель и тонкости этого процесса я постигаю, если есть необходимость.
В свое время были проблемы только с индикаторами 1602 из-за их медлительности. Тогда пришлось изощряться, так как не корректно отрабатывал валкодер. Можно было бы еще позаниматься библиотекой Si5351A. Когда-то анализировал, сколько времени уходит на подсчет и загрузку регистров микросхемы. Вышло где-то около 3 миллисек, хотя некоторые товарищи затрачивают на это дело около 0,5 миллисек. Правда пишут на ассемблере. Но, сейчас вроде особой необходимости не вижу..
ZTM 7 января 2025 г. в 06:51#249
Владимир ,подскажите пожалуйста,какую функцию выполняет кнопка *Menu*? не нашел входа/кнопки PTT...Или menu и есть сигнал управления PTT,судя по одноименному выходу с ULN2003 на управление RX\TX?
BL68 7 января 2025 г. в 07:00#250
Если честно, то я толком и не разбирался, где и какая . EEPROM знаю, а остальное как-то не отложилось.. К тому же, программирование для меня это не самоцель и тонкости этого процесса я постигаю, если есть необходимость.
Ну работает программа и ладно Просто когда начинаются блуждающие глюки типа переполнения стека, вот тогда и начинаешь разбираться и экономить оперативку. Просто для информации... Flash память - это куда записывается код программы. И туда-же желательно писать константы типа знакогенератора. Завтра захочется выводить еще десяток символов и оп-па вылезают непонятные глюки с зависанием.
Владимир_К 7 января 2025 г. в 09:24#251
Владимир ,подскажите пожалуйста,какую функцию выполняет кнопка *Menu*?
Это резервная кнопка, на случай, если что-то еще понадобиться на нее повесить. Но, применение я ей так и не нашел.
Или menu и есть сигнал управления PTT,судя по одноименному выходу с ULN2003 на управление RX\TX?
Что-то не помню уже.. Трансивера того давно нет, а судя по программе, управление RX/TX производится кнопкой подключенной к порту PD6.
Вот строка:
if (bit_is_clear(PIND, 6)) tx();
Но, этот порт подключен к разънму, который идет на плату переключения диапазонов.. В общем, я затрудняюсь что-то внятно объяснить. Поэтому, лучше повесить эту кнопку на свободные выводы порта PC1, PC2 или PC3(если индикатор стрелочный). Соответственно перепишите строку, которую я выше указал:
if (bit_is_clear(PINС, 1)) tx(); То есть в данном случае используется порт PC1.
Правда надо будет еще сконфигурировать этот порт на вход. Сейчас они все сконфигурированы как выход. Потом сделаю, когда определитесь к какому выводу будет подключена кнопка. Кнопка подключается между выходом порта и землей. Но, пока не подключайте, вывод порта сконфигурирован на выход и замкнув его на землю, можно сжечь.
Владимир_К 7 января 2025 г. в 11:58#252
Это будет гораздо быстрее чем перемножение в цикле 8 раз.
Экономить здесь особенно не надо. Весь синтезатор занимает меньше 8 кб. Можно применить даже Atmega8. Меня больше заинтересовало Ваше сообщение насчет перемножения. Как без него, вот это интересно..
ZTM 8 января 2025 г. в 01:41#253
Это резервная кнопка, на случай, если что-то еще понадобиться на нее повесить. Но, применение я ей так и не нашел.
Так может ее и задействовать под PTT?А выход PTT вывести на PC1 ,например
Владимир_К 8 января 2025 г. в 06:40#254
Так может ее и задействовать под PTT
Кнопки здесь работают от делителя напряжения. В зависимости от того, какая кнопка нажата, напряжение поступающее на вход аналого-цифрового преобразователя разное, таким образом контроллер определяет какая кнопка нажата. Кнопку отпускаем, но режим остается. Для отключения этого режима, кнопку надо нажать повторно. То есть, если использовать кнопку menu для включения передачи, то для перехода на прием ее надо отпустить и нажать еще раз. Я думаю, это неудобно. Поэтому переключение RX/TX надо делать другой кнопкой, которая работает без ADC.
Также ее (кнопку) можно подключить к выводу ADC. Он же у Вас также свободен. Просто его надо сконфигурировать как порт, на вход..
ZTM 8 января 2025 г. в 08:53#255
Просто его надо сконфигурировать как порт, на вход..
Давайте попробуем
Владимир_К 8 января 2025 г. в 11:17#256
попробуем
Открыл исходник и обнаружил там ошибки и, откуда они взялись, ума не приложу. Вот что имеем:
// ++++ функция инициализации МК ++++
void initialization(void)

{
PORTB=0xE7;
DDRB=0x00;
PORTC=0x3E;
DDRC=0x00;
PORTD=0x7C;
DDRD=0x80;
Ну это чепуха... Теперь по порядку. DDRB=0x00; //или в двоичном виде 00000000, что означает, что все порты настроены как вход. Если на каком-то месте записана 1, значит это выход. У нас все линии порта В должны работать как выходы, кроме 3 и 4 пина, к которым подключен валкодер. Поэтому должно быть 11100111.Окончательно строка будет выглядеть так (превращаем число в шестнадцатиричное):
DDRB=0xe7;
Строка:
PORTB=0xE7; // определяет на какие пины порта подается напряжение от плюча питания через внутренний резистор, так называемая подтяжка.
Для пинов порта В она не нужна, так как только 3 и 4 пины являются входами, а они подключены к схеме валкодера на выходе которого триггеры.
Поэтому, тут должно быть:
PORTB=0x00;
Глядя на строки настройки порта В, видим, что они перепутаны местами.
Аналогично, проверьте все остальные порт D и порт C. Загляните в исходник тестовой программы, у Вас же индикатор работает, следовательно там по порту В вопросов быть не должно.
Попробуйте откорректировать все сами, потом я проверю, сейчас есть некоторые проблемы, которые надо решить..

BL68 8 января 2025 г. в 12:13#257
Можно было бы еще позаниматься библиотекой Si5351A. Когда-то анализировал, сколько времени уходит на подсчет и загрузку регистров микросхемы. Вышло где-то около 3 миллисек, хотя некоторые товарищи затрачивают на это дело около 0,5 миллисек. Правда пишут на ассемблере. Но, сейчас вроде особой необходимости не вижу..
Чего-то долго. И почему вы не используете аппаратный I2C Atmega32? Если интересно, сброшу кусок кода для работы с встроенным I2C (ноги PC0 PC1).
Владимир_К 10 января 2025 г. в 01:14#258
Итак, файл main.c
Найдите строки:
// ++++ функция инициализации МК ++++
void initialization(void)

{
PORTB=0xE7;
DDRB=0x00;
PORTC=0x3E;
DDRC=0x00;
PORTD=0x7C;
DDRD=0x80;

Исправьте следующим образом:
PORTB=0x00;
DDRB=0xE7;
PORTC=0x80;
DDRC=0x0E;
PORTD=0x00;
DDRD=0x7C;
Как видно из текста строки DDR и PORT перепутаны местами. Кто это так пошутил, не знаю...
Сейчас вывод порта PORTC7 включен на вход. То есть к нему подключаете кнопку, второй ее конец на землю. И на этот же вывод подаете плюс питания через резистор 10 ком. Этот порт подтянут к питанию внутренним резистором процессора, для этого PORTC=0x80, то есть седьмой бит установлен в единицу. Но внутренней подтяжки иногда не хватает (а может китайцы там начудили, если процессор от них). Все кнопки без фиксации.
Для переключения RX/TX кнопку надо нажать и удерживать, после отпускания, включается прием.
В этом же файле найдите строку (почти в самом низу):
if (bit_is_clear(PIND, 6)) tx(); //Измените ее вот так:
if (bit_is_clear(PINC, 7)) tx();

Не забудьте перенести в этот исходник откорректированную строку знакогенератора из файла ldc.c исходника тестовой программы. Откомпилируйте. Ну как обычно...
ZTM 10 января 2025 г. в 03:35#259
Сейчас вывод порта PORTC7 включен на вход. То есть к нему подключаете кнопку, второй ее конец на землю.
Это который PC6 или PC0? И,соответственно,при включенном RIT при замыкании ноги на землю,RIT должен отключиться?
Владимир_К 10 января 2025 г. в 04:09#260
А где ADC7?. Подозреваю, что у Вас процессор не с 32 выводами, т.е. в другом корпусе.
Надо уточнить, атмега бывает в трёх разл. корпусах. Например в ДИП корпусе 28 выводов, и портов PORTC6 и 7 у нее нет.
Если на приеме включен режим RIT, то частоту можно установить любую, даже за пределами диапазона. При переходе на передачу, установится частота, которая была до включения режима RIT.
Так пожелал товарищ, которому отдал трансивер. Порядок управления в этих режимах, можно сделать любым. За
ZTM 10 января 2025 г. в 04:26#261
А где ADC7?. Подозреваю, что у Вас процессор не с 32 выводами, т.е. в другом корпусе.
Все верно,у меня атмега 328 в DIP28.Вы говорили,что S-метр выкинули из программы.То есть освобождаются выводы PC1 PC2 PC3.Может быть на какой-то из них повесить PTT?
ZTM 10 января 2025 г. в 04:28#262
Если на приеме включен режим RIT, то частоту можно установить любую, даже за пределами диапазона. При переходе на передачу, установится частота, которая была до включения режима RIT.
Отлично
ZTM 10 января 2025 г. в 04:54#263
Для переключения RX/TX кнопку надо нажать и удерживать, после отпускания, включается прием.
В этом же файле найдите строку (почти в самом низу):
if (bit_is_clear(PIND, 6)) tx(); //Измените ее вот так:
if (bit_is_clear(PINC, 7)) tx();
Это нужно сделать в ****** Основная программа ********* или в ********* Передача ********* ?
Владимир_К 10 января 2025 г. в 05:47#264
Все верно,у меня атмега 328 в DIP28
Понятно.
То есть освобождаются выводы PC1 PC2 PC3.
Можете использовать любой на свой выбор.
Вот эта строка, которая управляет кнопкой:
if (bit_is_clear(PINC, 7)) tx();

Здесь кнопка на выводе порта С, седьмой вывод. Смотря как удобнее на плате, можете вместо семерки написать 1,2 или 3. Кстати, тут я ошибся, судя по даташиту вывод ADC7 не является портом. Зная, что ADC1 и прочие до ADC5 могут быть как входами преобразователя, так и портами, я это применил и к ADC6, 7, а это не так.

Это нужно сделать в ****** Основная программа ********* или в ********* Передача ********* ?
Это нужно сделать везде. И в основной программе и в функции передача.
if (bit_is_clear(PINС, 7)) tx(); Это строка в основном модуле программы. Переписываете ее так:
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.

Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
ZTM 10 января 2025 г. в 06:21#265
Это нужно сделать везде. И в основной программе и в функции передача.
if (bit_is_clear(PINС, 7)) tx(); Это строка в основном модуле программы. Переписываете ее так:
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.

Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
Понял.Благодарю Вас,Владимир! Отпишусь позднее о результатах,как впаяю кнопку и скомпилирую hex
Владимир_К 10 января 2025 г. в 06:56#266
Отладку я делаю последовательно. Сначала я бы подключил индикатор, затем валкодер. При этом, валкодером должна изменяться частота. Потом переключатель диапазонов. И так далее. Правда есть одна проблема, без Si5351A программа, скорее всего, работать не будет. При обращении к Si5351A, процессор ждет ответа от чипа и, если ответа нет, программа "виснет". Если такое происходит (если у Вас пока не подключена Si), то надо блокировать обращение к чипу.
ZTM 10 января 2025 г. в 07:47#267
Попробуйте откорректировать все сами, потом я проверю
Такое я не осилю,по всей вероятности.Не знаком с программированием.
Владимир_К 10 января 2025 г. в 12:12#268
Сегодня откорректирую, сейчас не дома..
Владимир_К 14 января 2025 г. в 11:58#269
if (bit_is_clear(PINС, 1)) tx(); //Как выше написал, вместо единицы можно также 2 или 3.
Строку из функции передача, надо откорректировать вот так:
while (bit_is_clear(PINС, 1)); // Кнопка нажата - продолжаем передачу
После внесения предложенных мной изменений, проект не компилируется. Причина - в этих строках буква C - русская (написана в русской раскладке клавиатуры). Исправьте, переключив клавиатуру на английский.
Сегодня писал для одного проекта, взял этот фрагмент и обнаружил ошибку..
ZTM 15 января 2025 г. в 05:47#270
После внесения предложенных мной изменений, проект не компилируется. Причина - в этих строках буква C - русская
А я сразу все проверил .У меня все нормально собралось .В выходной плотно посижу с этим проектом.
ZTM 21 января 2025 г. в 11:17#271
После внесения правок имеется следующая картина включения контроллера с валкодером и SI.Нет разделительных точек на индикаторе(в тестовой программе индикатора они есть и на своих местах),нет реакции на валкод(на другом синтезаторе откликается).Проект собрался без ошибок.
Владимир_К 22 января 2025 г. в 04:41#272
Нет разделительных точек на индикаторе(в тестовой программе индикатора они есть и на своих местах)
Сбросьте исходник тестовой программы, сравню где расхождение.. Сначала разберемся с точками, потом с валкодером. Файл схемы я открыть не могу, он у Вас как видно по расширению, -Сплан-8. У меня седьмая версия и новую не хотелось бы ставить, я ими (в т.ч. Layout) давно не пользуюсь. В основном Диптрейс. Или сбросьте схему в седьмом или экспортируйте в другой формат.
ZTM 22 января 2025 г. в 07:41#273
Сбросьте исходник тестовой программы, сравню где расхождение..
Вот Схема тут же,в архиве
Владимир_К 22 января 2025 г. в 08:17#274
Откройте файл 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 и, вроде все было корректно. Хотя, видимо некоторая моя безалаберность присутствует. В компе уже столько мусора, почистить бы. Но я уже точно знаю, что-то лежит годами и не нужно. Стоит выбросить, как через день оно понадобится.
ZTM 22 января 2025 г. в 08:44#275
Сделал,прошил,точки на месте
Владимир_К 22 января 2025 г. в 09:07#276
точки на месте
А валкодер?
ZTM 22 января 2025 г. в 09:18#277
А валкодер?
Молчит
ZTM 22 января 2025 г. в 09:25#278
Может отрубить пока SI и проверить без нее?
Владимир_К 22 января 2025 г. в 09:34#279
Может отрубить пока 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#280
Замените так:

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;
ZTM 23 января 2025 г. в 01:13#281
if (N1!=0)
led=(Numbers[(int)N1]);
else
led=0b11111111;
Попробую Последней строкой нужно вписать send_l(led); ?
Владимир_К 23 января 2025 г. в 03:17#282
Последней строкой нужно вписать 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 23 января 2025 г. в 03:35#283
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нет . Валкод сделал оптический,с формирователем на логике.Проверил в конструкции,в которой по умолчанию предусмотрен механический.Работает .То,что контроллер битый исключено.Жонглирую тремя штуками,перепрошивая.Два с алика и один оригинальный.В компиляторе пробовал ставить атмегу 328 и 328P,не дало результата.
Владимир_К 23 января 2025 г. в 04:48#284
Переписал.Ноль впереди все равно светит,точки на месте ,реакции на валкод нет
Давайте сделаем паузу. В одном недостроенном аппарате есть такой индикатор, соберу на макете синтезатор, проверю. Это пару дней.
Все же, непонятно с гашением первого знака. Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?
ZTM 23 января 2025 г. в 05:08#285
Вы пробовали оба варианта, т.е. когда led=0b11111111; и если led=0b00000000;?
Да,оба варианта.Перекинул все на ардуинку,то же самое.Ноль все еще горит,энкодер без реакции.
ZTM 9 октября 2025 г. в 12:33#286
Вот еще вариант. Пред-финальный, тестовый . Гетеродин всегда сверху.Позднее реализую переключение боковой на одном из выводов. Статическая индикация на 561ир2 работает превосходно.Приехали TCXO для опоры SI5351. Жду с али индикаторы на 74hc595,чтоб уменьшить габариты платы индикации.Код для Avr studio 4.19 , закомментирован.Можно ставить свою частоту ПЧ,частоту опоры SI, частоты\кол-во\границы диапазонов.
ZTM 11 октября 2025 г. в 03:30#287
Версия с индикацией на Oled 1306 0.91"
ZTM 13 октября 2025 г. в 12:55#288
Исправленная версия.Добавил s-метр от S0 до S9+40.Убрал несколько конфликтов.Код с комментариями.Краткое описание внутри архива.Вроде работает
ZTM 25 октября 2025 г. в 08:13#289
Исправление для синтеза с OLED1306 128x32 постом выше. Устранены косяки с пинами подключения ГУН-ов,убран большой косяк с библиотекой SI5351.Сейчас работает как надо.