Автор Тема: si5340A  (Прочитано 88108 раз)

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

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

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #150 : Апрель 09, 2020, 12:30:54 pm »
Владимир, как Вы уменьшили количество регистров до 27 при инициализации?
Нужно смотреть при сбросе чипа, в какое значение сбрасываются регистры. Если положение после сброса Вас устраивает, то и менять их нет смысла. Я где-то, возможно здесь (скорее на CQHam), исходник выложил. Но там пока ничего, кроме того, что чип генерирует качающуюся частоту от 5 до 30 мгц. А как Вы решили проблему с разрядностью. Там некоторые числа 44 разряда, а в AVR Studio 4.19 только 32 разрядные. Может в IDE Ардуино есть 64 разрядные? Правда с IDE Ардуино я мало занимался, толком не знаю ее.

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #151 : Апрель 09, 2020, 12:40:49 pm »
Я нашел давно Ваш код. Спасибо, что поделились! Вероятно, как Вь подсказали, буду читать содержимое при запуске, чтобы попытаться оптимизировать инициализацию. Но pages: 9, regs 256 - доступно много данных, даже официально объявленных в pdf.

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

А сам чип оч. интересный.  Думаю, с прецизной кварцевым кристаллом (5..10 ppm) темп. х-ка удовлетворяет мне для КВ. Вчера например уход при вкл/через 30 мин бил ок. 17 Hz (на 10 000 000 Hz). Oставлю вероятно так. Мне нравится, что каждая возможная комбинация ввода/вывода отработана, необходимо или подключать что-то (хардуерно) или управлять (софтуерно).
« Последнее редактирование: Апрель 09, 2020, 01:08:27 pm от veso74 »

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #152 : Апрель 09, 2020, 01:03:51 pm »
Уже научились плавно частоту менять? У меня не получилось , точнее получилось , но для радио не пойдёт . Сброс после смены частоты не подходит.
Да да, я знаю, у меня ничего не получится )))

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #153 : Апрель 09, 2020, 01:09:14 pm »
Нужен reset, который делает помехи в радио?
« Последнее редактирование: Апрель 09, 2020, 01:19:37 pm от veso74 »

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #154 : Апрель 09, 2020, 01:26:07 pm »
Да, частота в момент сброса улетает на десятки мегагерц и потом восстанавливает на нужную.
Да да, я знаю, у меня ничего не получится )))

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

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #155 : Апрель 09, 2020, 04:29:04 pm »
Вероятно, как Вы подсказали, буду читать содержимое при запуске, чтобы попытаться оптимизировать инициализацию.
Нет, немного не так. Я имел ввиду другое.  Я просто посмотрел в документации. Там указано в каком состоянии находится каждый регистр при включении микросхемы, т.е. при старте. Во время
 инициализации Вы лишь настраиваете параметры, которые не нужно будет менять в дальнейшем.
Ну или посмотреть в файле, который выдает Clock Builder Pro. Если там в регистрах нули, то в эти регистры не надо ничего писать. Там же во время включения так и будут нули. Во-всяком случае, я не заметил, что там может быть какой либо мусор.
 
Я в начале - сгенерирован .h файл с софта и загружаю содержание в чип.
Я этого никогда не делал, да и не знаю как это делать. Я просто оттуда беру информацию, пример как нужно поступать.
но для радио не пойдёт .
Что-то этот момент я не понял. Если можно сделать генератор качающейся частоты, то в чем проблема для радио?

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #156 : Апрель 09, 2020, 04:48:09 pm »
Анализатором смотрители? Скачков не было? Может код покажите ? Мы вроде с вами обсуждали и у вас на тот момент не было качалки.
Да да, я знаю, у меня ничего не получится )))

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #157 : Апрель 09, 2020, 05:10:31 pm »
Я этого никогда не делал, да и не знаю как это делать.
"Строка за строкой" цикл берет данные из файла и отправляет по 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 показалось мне "особенным", и на этот момент я не читал их еще.
« Последнее редактирование: Апрель 09, 2020, 05:20:36 pm от veso74 »

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

  • Hero Member
  • *****
  • Сообщений: 1179
Re: si5340A
« Ответ #158 : Апрель 09, 2020, 07:23:25 pm »
Анализатором смотрители? Скачков не было? Может код покажите ?
"Качалку" я сделал только лишь для того, чтобы определить время перестройки чипа на другую частоту. Сейчас уже не помню, сколько получилось, а макет сейчас разобран. У меня, к сожалению, на то время не получилось с STM. Две платы и ни с одной не смог заставить работать I2C. Потом вроде разобрался, поупражнялся с м/с памяти. Писал в нее, читал, вроде нормально работает шина. Но с Si5340 так и не проверил.
Анализатора у меня нет. Смотрел лишь осциллографом. Вроде нормально... А может не заметил. Но у меня нигде Resetов нет. Исходник и прошивку прицепил. Прошивка (hex-файл) в папке проекта default. Малость я запамятовал, качалка от 30 до 40 мгц.

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #159 : Апрель 10, 2020, 12:20:32 pm »
Для буква "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 */
Недокументированные строки? ;) .
« Последнее редактирование: Апрель 10, 2020, 12:39:19 pm от veso74 »

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #160 : Апрель 10, 2020, 02:19:05 pm »
Странным для меня является расчет из софта:
Для 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.
« Последнее редактирование: Апрель 10, 2020, 02:41:06 pm от veso74 »

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #161 : Апрель 10, 2020, 08:19:01 pm »
Я запустил код к 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;
« Последнее редактирование: Апрель 10, 2020, 08:28:02 pm от veso74 »

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: si5340A
« Ответ #162 : Апрель 10, 2020, 08:22:58 pm »
Круто Веселин ! Дадите потом свой расклад и последовательность действий?
Да да, я знаю, у меня ничего не получится )))

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #163 : Апрель 10, 2020, 08:50:02 pm »
Нет проблема. Начин ничем не отличается от кода напр. Владимира или Вашей, и 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
}
« Последнее редактирование: Апрель 10, 2020, 09:07:19 pm от veso74 »

Оффлайн veso74

  • Hero Member
  • *****
  • Сообщений: 955
Re: si5340A
« Ответ #164 : Апрель 11, 2020, 12:13:03 am »
При FVCO = 14,2 GHz консумация тока также 260 mA при тот же OUT0 = 10 MHz. Ето хорошо. Но неиспользованные неисключенные делители в других каналах (reg 0x0A03, 0x0A04, 0x0A05) влияет прямо на консумация тока (до 320 mA достиг).