Кто-нибудь пробовал нулевой делитель (который в описании регистров "P3"), при нулевом делимом (который "P2")?
Кто-нибудь пробовал нулевой делитель (который в описании регистров "P3"), при нулевом делимом (который "P2")?
Работает. [напр. reg_42 = 0, reg_43 = 0].
ClockBuilder ставит в reg_43 = 0x01.
Для используемого кода некорректно делить на 0, поэтому написал с 1 (хотя не проверял при 0, не исправил ли оптимизатор).
Последний раз редактировалось veso74; 03.03.2023 в 22:05.
Спасибо от ozforester
И в 47 вероятно тоже.
Таблица готовится в sram и оттуда циклом пересылается в сишку. При инициализации таблицы можно пройтись нулями по области этих регистров и больше их не трогать, вместо того, чтобы тратить ещё четыре или более байт программной памяти под операции занесения единички. Клоки с ресетом все таки программную память отжирают, их приходится из констант пересылать.
P.S. Делитель мультисинка четный: целочисленное Fim/Fout=P1, затем P1 & 0x3FFFE, и в sram по своим ячейкам. Поднятие разрядности до 48 бит дает отклонение меньше Герца, но attiny13 от такого деления точно "ослепнет" (места и так не могу наскрести для дисплея)
Совершенно случайно посчитал регистры клокбилдером и перепроверил.
На выходе далековато от 3,456,789Это файл сгенерированный клокбилдером (несущественная информация вырезана):
3,120,176.1719
Для этой же частоты регистры таблицей посчитаны:
Чисто академический интерес.
Клокбилдер старый или где-то у меня ошибка?
Добавлено через 15 минут(ы):
P.S.
Похоже, я в таблице a,b,c и P1,P2,P3 перепутал. Была мысль вывести на дисплей библиотечные регистры и сравнить, но не успел. (:
Последний раз редактировалось ozforester; 13.03.2023 в 20:52.
В большинстве общедоступных кодов для Si5351 a + b/c сводится к с = 1 048 575 (масштабирование, аппроксимация) до максимальной с = 2^20 - 1 (даже если в этом нет необходимости), в некоторых: к c = 1000000ULL. Кто-нибудь исследовал зависимость знаменателя, напр. на ФШ или на паразитные пики сигнала (spurs)?
Если Si5351A используется в качестве опорника, т.е. выдает одну частоту, тогда есть смысл исследовать. Можно коэффициенты посчитать клокбилдером, или даже калькулятором и загрузить в регистры. Кроме того, если проанализировать коэффициенты, рассчитанные клокбилдером, то видно, что он не стремится к получению целочисленных коэффициентов хотя бы в одном делителе (а это уже не раз проверялось, как делители влияют на спуры). Скорее он преследует цель получить точную частоту.
Если частота меняется, как например в случае когда Si используется как гетеродин, то не думаю, что проблема уменьшения спуров может быть как-то решена выбором коэффициента с (или как он в даташите - denom).
Я привожу конкретный пример. Как влияет знаменатель? (нет подходящего измерительного оборудования)
Частота в обоих расчетах точная, Fclk = 10 001 000 Hz. Но во втором случае знаменатель другой (сокращение дробей).
А в 90% общедоступных кодов Si вычисляют по первому способу (c = max возможное, c = 2 ^ 20 - 1 = 0xFFFFF).
Числитель, после деления на кварц, привожу к фиксированному знаменателю 0xbebc2 (у мня это 25k >> 5), то есть и остаток двигаю пять раз вправо. Это значительно сокращает код и время вычисления, сохраняя приемлемую точность. Но в тини13 одновременно с энокдером и оледом такой код всё равно не умещается. Исследовать влияние знаменателя дроби на форму выходного меандра не пробовал, но предполагаю, что величина знаменателя дроби влияет лишь на дрожание фазы, сиречь на "дрожание спур".
При отладке включал программирование сишки с каждым циклом редактирования частоты. Телеграф. Слышны биения bfo. Была здравая мысль, что это частота пропадает и появляется в момент программирования, но все таки проверил и олед. Так вот, его отключение от шины от щелчков не избавило, зато однократное программирование сишки новой частототой лишь после выхода из режима редактирования исключило эти щелчки. Непериодический, он просто растворяется на фоне эфира. Понятно, что в приемнике при вращении валкодера vfo не выключишь, так как он оглохнет. В данном же случае это просто макет генератора для настройки самопального частотомера, главное, чтобы на нём можно было частоту менять по разрядам быстро, а момент переключения роли не играет. И, да, валкодер (точнее мех. энкодер) тоже не слышно. Это лишь как пример того, что звучит именно рестарт фапч, а дисплей на одной с ним шине и котакты "птк" - нет. (= На всякий случай и лабу здесь оставлю, как никак это еще один вариант звучания синтезатора.
Какую частоту слышим на радио? 28 MHz или 93 kHz? Есть Si reset (reg_177)? Аппаратный или программный I2c? На какой скорости I2c?
Без напр. фрагмента кода, отвечающего за это, никто, кроме вас, не сможет проанализировать, что произошло.
---
пробная установка (если правильно понимал): сигнал не пропадает
А и часто есть в пр. коде: запоминает старые коэффициенты/регистры, если изменений нет (if (x != x_old) ...) , то не перезаписываем.Код:... int main(void) { si5351.set_freq(1414000000, SI5351_CLK0); _delay_ms(500); }
---
(да, ответил сам себе o I2c: ATtiny45: PB4, PB3 -> программный)
Последний раз редактировалось veso74; 21.05.2023 в 09:58.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)