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

si5340A

348831 просмотров, 196 ответов — стр. 11 из 14

Владимир_К
Сообщений: 1245
9 апреля 2020 г. в 12:30#151
Цитата: veso74
Владимир, как Вы уменьшили количество регистров до 27 при инициализации?

Нужно смотреть при сбросе чипа, в какое значение сбрасываются регистры. Если положение после сброса Вас устраивает, то и менять их нет смысла. Я где-то, возможно здесь (скорее на CQHam), исходник выложил. Но там пока ничего, кроме того, что чип генерирует качающуюся частоту от 5 до 30 мгц. А как Вы решили проблему с разрядностью. Там некоторые числа 44 разряда, а в AVR Studio 4.19 только 32 разрядные. Может в IDE Ардуино есть 64 разрядные? Правда с IDE Ардуино я мало занимался, толком не знаю ее.
veso74
Сообщений: 969
9 апреля 2020 г. в 12:40#152
Я нашел давно Ваш код. Спасибо, что поделились! Вероятно, как Вь подсказали, буду читать содержимое при запуске, чтобы попытаться оптимизировать инициализацию. Но pages: 9, regs 256 - доступно много данных, даже официально объявленных в pdf.

Я в начале - сгенерирован .h файл с софта и загружаю содержание в чип. Проблема с Arduino нет, с uint/int64_t нормално работает (без обработки в некоторых функциях, напр Serial.print()). А и иначе числа можно побитово частично обрабатывать.

А сам чип оч. интересный. Думаю, с прецизной кварцевым кристаллом (5..10 ppm) темп. х-ка удовлетворяет мне для КВ. Вчера например уход при вкл/через 30 мин бил ок. 17 Hz (на 10 000 000 Hz). Oставлю вероятно так. Мне нравится, что каждая возможная комбинация ввода/вывода отработана, необходимо или подключать что-то (хардуерно) или управлять (софтуерно).
ra0ahcra0ahc
Сообщений: 4868
9 апреля 2020 г. в 01:03#153
Уже научились плавно частоту менять? У меня не получилось , точнее получилось , но для радио не пойдёт . Сброс после смены частоты не подходит.
veso74
Сообщений: 969
9 апреля 2020 г. в 01:09#154
Нужен reset, который делает помехи в радио?
ra0ahcra0ahc
Сообщений: 4868
9 апреля 2020 г. в 01:26#155
Да, частота в момент сброса улетает на десятки мегагерц и потом восстанавливает на нужную.
Владимир_К
Сообщений: 1245
9 апреля 2020 г. в 04:29#156
Цитата: veso74
Вероятно, как Вы подсказали, буду читать содержимое при запуске, чтобы попытаться оптимизировать инициализацию.

Нет, немного не так. Я имел ввиду другое. Я просто посмотрел в документации. Там указано в каком состоянии находится каждый регистр при включении микросхемы, т.е. при старте. Во время
инициализации Вы лишь настраиваете параметры, которые не нужно будет менять в дальнейшем.
Ну или посмотреть в файле, который выдает Clock Builder Pro. Если там в регистрах нули, то в эти регистры не надо ничего писать. Там же во время включения так и будут нули. Во-всяком случае, я не заметил, что там может быть какой либо мусор.
Цитата: veso74
Я в начале - сгенерирован .h файл с софта и загружаю содержание в чип.

Я этого никогда не делал, да и не знаю как это делать. Я просто оттуда беру информацию, пример как нужно поступать.
Цитата: ra0ahc
но для радио не пойдёт .

Что-то этот момент я не понял. Если можно сделать генератор качающейся частоты, то в чем проблема для радио?
ra0ahcra0ahc
Сообщений: 4868
9 апреля 2020 г. в 04:48#157
Анализатором смотрители? Скачков не было? Может код покажите ? Мы вроде с вами обсуждали и у вас на тот момент не было качалки.
veso74
Сообщений: 969
9 апреля 2020 г. в 05:10#158
Я этого никогда не делал, да и не знаю как это делать.
"Строка за строкой" цикл берет данные из файла и отправляет по I2C в ИС.
(заменитье ардуиновские функции I2C с те в AVR и готово).
Код: [Выделить]#include "Si5340-RevD-Registers.h"
...
void setup {
for (uint16_t i = 0; i < 329; i++)
write_reg(si5340_revd_registers[i].address, si5340_revd_registers[i].value);
}
...
void write_reg(uint16_t addr, uint8_t data) {
Wire.beginTransmission(0x74);
Wire.write(0x01);
Wire.write(0xFF & addr >> 8 ;
Wire.endTransmission();

Wire.beginTransmission(0x74);
Wire.write(0xFF & addr);
Wire.write(data);
Wire.endTransmission();
}---
ЦитироватьТам указано в каком состоянии находится каждый регистр при включении микросхемы, т.е. при старте.Спасибо, посмотрю, нравится идея. Просто чтение/запись регистров с этими pages и 0x01: Set Page Address показалось мне "особенным", и на этот момент я не читал их еще.
Владимир_К
Сообщений: 1245
9 апреля 2020 г. в 07:23#159
Анализатором смотрители? Скачков не было? Может код покажите ?
"Качалку" я сделал только лишь для того, чтобы определить время перестройки чипа на другую частоту. Сейчас уже не помню, сколько получилось, а макет сейчас разобран. У меня, к сожалению, на то время не получилось с STM. Две платы и ни с одной не смог заставить работать I2C. Потом вроде разобрался, поупражнялся с м/с памяти. Писал в нее, читал, вроде нормально работает шина. Но с Si5340 так и не проверил.
Анализатора у меня нет. Смотрел лишь осциллографом. Вроде нормально... А может не заметил. Но у меня нигде Resetов нет. Исходник и прошивку прицепил. Прошивка (hex-файл) в папке проекта default. Малость я запамятовал, качалка от 30 до 40 мгц.


veso74
Сообщений: 969
10 апреля 2020 г. в 12:20#160
Для буква "D" в типа в .h есть что непонятные команды, но пока без них чип не сработал.

/* Start configuration preamble */
{ 0x0B24, 0xC0 },
{ 0x0B25, 0x00 },
/* Rev D stuck divider fix */
{ 0x0502, 0x01 },
{ 0x0505, 0x03 },
{ 0x0957, 0x17 },
{ 0x0B4E, 0x1A },
/* End configuration preamble
/* Delay 300 msec */
/* Delay is worst case time for device to complete any calibration */
/* that is running due to device state change previous to this script */
/* being processed. */ */

Необходимо и задержка напр. 300 ms.

Как и в конце:

/* Start configuration postamble */
{ 0x001C, 0x01 }, - Ето SOFT_RST
{ 0x0B24, 0xC3 },
{ 0x0B25, 0x02 },
/* End configuration postamble */

Недокументированные строки? .
veso74
Сообщений: 969
10 апреля 2020 г. в 02:19#161
Странным для меня является расчет из софта:
Для OUT1 = 10 MHz при XTAL = 25 MHz

M = 528, FVCO = 13.2 GHz, N0 = 660, R0 = 2 -> 13 200 000 000 / (660 * 2) = 10 000 000, все ОК

Но N0 = N0_NUM / N0_DEN -> 660 = 1 417 339 207 680 / 2 147 483 648
зачем не сократили дробь на 660 = 660 / 1 с N0_NUM = 660 и N0_DEN = 1?

То же самое относится к M = M_NUM / M_DEN -> 528 = 1 133 871 366 144 / 2 147 483 648
---
К код управления для ADF4351 и Si5351 у меня были те же вопросы. Я просто применил сокращение дроби (reduce the fraction to lowest terms) (когда это возможно, если нет - то масштабирования), вместо использования только максимального значения (или близко к макс. значения) в знаменателя и масштабирования.
--
P.S. С 660 и 1 попробовал к N0_NUM и N0_DEN. Работает, OUT0 = 10 MHz.
veso74
Сообщений: 969
10 апреля 2020 г. в 08:19#162
Я запустил код к Si5430A с очень простым расчетом регистров для OUT0.
FVCO const = 13,2 MHz, при расчет только на N0_NUM и N0_DEN, без SOFT_RST(только один раз при инициализации, где и M_NUM и M_DEN установлены).
расчет N0_NUM и N0_DEN: без дополнительных действии по оптимизации, N0_DEN = 0x1FFFFFFF (при 0xFFFFFFFF, 0x7FFFFFFF - переполнение), с uint64_t, без fliat/double, с N0 divider update bit после загрузки данных.

Я не слышал ничего смущающего при изменении частоты ни как передатчик, ни как первой VFO на 80m и на 20m (IF = 9 MHz, UP).

Пытался видеть по крайнем мере пики, трещины при freq sweep. Картина на того, что я имею в качестве приемника, ниже. Частота 14..15 MHz, шаг 100 Hz, время переключения после изменении шага: 10 ms.

Для моих требований чип работает пока хорошо. Продолжаю писать.

Код: [Выделить]uint32_t f = 14000000;
...
set_freq(f);
delay(10);
f += 100;
if (f > 15000000)
f = 14000000;


ra0ahcra0ahc
Сообщений: 4868
10 апреля 2020 г. в 08:22#163
Круто Веселин ! Дадите потом свой расклад и последовательность действий?
veso74
Сообщений: 969
10 апреля 2020 г. в 08:50#164
Нет проблема. Начин ничем не отличается от кода напр. Владимира или Вашей, и QRP-labs для Si5351. Только что загрузил некоторые регистры из .h файла из софта в инициализации. Есть много о чем подумать, напр. сейчас R неизменяемый и = 2 (не будет только с 2 работать на НЧ), FVCO должен выяснить для себя нужно ли перечислять и когда (FVCO = 13500..14256 MHz, но без четкой границы). Напр. ClockBuilder предлагал FVCO = 13,2 GHz, вне диапазона, и я написал так. Наверное поэтому потребление ниже? (260 mA)).

Попробуйте не трогать FVCO, без SOFT_RST и только вычислять N0_NUM и N0_DEN в узком частотном диапазоне, например один диапазон.
Меня почти не волнует, что PLL работает с fractional коефициентов. Разница в выходние х-ки, показанни в PDF, очень мала, и в очень далекой области, несколько dB. А такие примерно и в Si570, а знаем какой у его сигнал.

Код: [Выделить]void set_freq(uint32_t freq) {
uint32_t R_DIV = 2;
uint64_t FVCO = 13200000000;
uint64_t num = (FVCO * 0x1FFFFFFF) / (R_DIV * freq);

write_reg(0x0302, num);
write_reg(0x0303, num >> 8); // N0 numerator N0_NUM[7:0]
write_reg(0x0304, num >> 16); // N0 numerator N0_NUM[15:8]
write_reg(0x0305, num >> 24); // N0 numerator N0_NUM[23:16]
write_reg(0x0306, num >> 32); // N0 numerator N0_NUM[39:32]
write_reg(0x0307, num >> 40); // N0 numerator N0_NUM[43:40]

write_reg(0x0308, 0xFF); // N0 denominator N0_DEN[7:0]
write_reg(0x0309, 0xFF); // N0 denominator N0_DEN[15:8]
write_reg(0x030A, 0xFF); // N0 denominator N0_DEN[23:16]
write_reg(0x030B, 0x1F); // N0 denominator N0_DEN[31:24]

write_reg(0x030C, 0x01); // N0 divider update bit
}
veso74
Сообщений: 969
11 апреля 2020 г. в 12:13#165
При FVCO = 14,2 GHz консумация тока также 260 mA при тот же OUT0 = 10 MHz. Ето хорошо. Но неиспользованные неисключенные делители в других каналах (reg 0x0A03, 0x0A04, 0x0A05) влияет прямо на консумация тока (до 320 mA достиг).