Без ULL расчет работал 1 разред меньше (до 0x7FFF FFFF FFFF FFFF). С ULL - значение до UINT64_MAX.
Значит Arduiono нормально работает с 64-битовие переменные, как uint64_t, так и int64_t. (Лично успокоился
).Теперь к Si5340A масштабирование с максимальным знаменателем:
Код: [Выделить]void set_freq(uint32_t freq) {
uint32_t R_DIV = 2;
uint64_t num = (FVCO * 0xFFFFFFFFULL) / (R_DIV * freq);
uint8_t N_reg[11];
N_reg[0] = (uint8_t)num; // N0_NUM[7:0]
N_reg[1] = (uint8_t)(num >>; // N0_NUM[15:8]
N_reg[2] = (uint8_t)(num >> 16); // N0_NUM[23:16]
N_reg[3] = (uint8_t)(num >> 24); // N0_NUM[31:24]
N_reg[4] = (uint8_t)(num >> 32); // N0_NUM[39:32]
N_reg[5] = (uint8_t)(num >> 40); // N0_NUM[43:40]
N_reg[6] = 0xFF; // N0_DEN[7:0]
N_reg[7] = 0xFF; // N0_DEN[15:8]
N_reg[8] = 0xFF; // N0_DEN[23:16]
N_reg[9] = 0xFF; // N0_DEN[31:24]
N_reg[10] = 0x01; // N0_UPDATE
write_regs(0x0302, N_reg); // page, start reg, data array
}---
"Не трогаю" FVCO вчера (13,2 GHz), отправив частоту по серийному порту, получил с Si грубо 3..310 MHz. 99% моих требований к чипам удовлетворены. Я даже думаю о том, чтобы не пересчитывать М-divider, но R-divider можно добавить (2..8..32?)в расчете, напр. 500 kHz - "хорошая частота" напр. для теста с ЕМФ-ов
.

