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

si5340A

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

Игорь 2
Сообщений: 21288
12 июня 2019 г. в 11:47#46
Цитата: vikr
А выход чфд на варикапы, можно не надо?


Конечно же надо, но у меня там внешний соединительный проводок длиной 2 см. при варианте с линейным расположением плат, и 5 мм. при бутерброде.
В обоих случаях никаких наводок нет, никакой экранировки провода не требуется...
ra0ahcra0ahc
Сообщений: 4868
13 июня 2019 г. в 07:03#47
Цитата: vikr
У меня вот так получилось. Плата 100х100мм.

Я посмотрел вашу плату внимательно. Вы ее уже заказали? Я нашел много важных нюансов.
Если не заказали, подождите мою, посмотрите отличия в подходе. Сделаете доработки и тогда....
ra0ahcra0ahc
Сообщений: 4868
13 июня 2019 г. в 07:05#48
вот например критическая ошибка.
Это сигнальная магистраль , же ? Тогда здесь серьезная ошибка.
Сами скажите или показать?

vikr
Сообщений: 25
13 июня 2019 г. в 10:23#49
Да, это выход синтеза . Вы через это уже прошли, мне ещё предстоит. Хотя я придерживался топологии Игоря.
ra0ahcra0ahc
Сообщений: 4868
13 июня 2019 г. в 12:27#50
Продолжаем...
решил сделать как автор
платы одна над другой (по необходимости)

Игорь 2
Сообщений: 21288
13 июня 2019 г. в 12:46#51
Цитата: ra0ahc
решил сделать как автор


Очень правильное решение. Потому, что топология уже проверена неоднократно.
Риск получить лажу при иной разводке при условии соблюдения элементарных правил, не сильно велик, но он есть...
ra0ahcra0ahc
Сообщений: 4868
13 июня 2019 г. в 08:04#52
Вот так я уже делал и сейчас сделал.
Можно догадаться, где магистраль

ra0ahcra0ahc
Сообщений: 4868
14 июня 2019 г. в 07:11#53
Вот так будет наверное...

Игорь 2
Сообщений: 21288
14 июня 2019 г. в 10:24#54
Нормально вроде...
ra0ahcra0ahc
Сообщений: 4868
8 июля 2019 г. в 11:27#55
буду пробовать....так
Процедуры записи частоты в si5340.
(без понимания - работать не будет)

void si5340aSetFrequency_1(uint32_t freq) {

uint64_t pllFreq;
uint32_t xtalFreq = 100000000;//100MHz
uint64_t l;
float f;
uint64_t mult;
uint64_t num;
uint32_t denom;
uint64_t divider;

divider = (uint64_t) (13200000000 / xtalFreq);
// PLL frequency: 900MHz
if ((divider & 1) != 0)
divider--; // Ensure an even integer division ratio

pllFreq = divider * xtalFreq; // Calculate the pllFrequency: the divider * desired output frequency

mult = pllFreq / freq; // Determine the multiplier to get to the required pllFrequency
l = pllFreq % freq; // It has three parts
f = l; // mult is an integer that must be in the range 15..90
f *= 4294967295; // num and denom are the fractional parts, the numerator and denominator
f /= freq; // each is 20 bits (range 0..1048575)
num = (uint64_t) f; // the actual multiplier is mult + num / denom
denom = 4294967295; // For simplicity we set the denominator to the maximum 1048575

setupPLL5340(divider, denom);//

setupMultisynth5340(N0_NUM, N0_DEN, mult, num, denom);

}
этот код не работает, оставлен для истории
ra0ahcra0ahc
Сообщений: 4868
8 июля 2019 г. в 11:28#56
void send5340(uint8_t page, uint8_t reg, uint8_t reg_1, uint64_t P1, uint32_t P2) {

uint8_t x[2];
uint8_t y[7];
x[0] = 0x01;
x[1] = page;

while (HAL_I2C_Master_Transmit(&hi2c3, 0b11101000, (uint8_t *) &x, 2, 500) != HAL_OK) {
BSP_LCD_DisplayHStringAt(0, 20, "err wr 5340 page", LEFT_MODE);
};

y[0] = reg;
y[1] = (uint8_t)((P1 & 0xFF0000000000) >> 40 );
y[2] = (uint8_t)((P1 & 0x00FF00000000) >> 32 );
y[3] = (uint8_t)((P1 & 0x0000FF000000) >> 24 );
y[4] = (uint8_t)((P1 & 0x000000FF0000) >> 16 );
y[5] = (uint8_t)((P1 & 0x00000000FF00) >> 8 );
y[6] = (uint8_t)(P1 & 0x0000000000FF );

while (HAL_I2C_Master_Transmit(&hi2c3, 0b11101000, (uint8_t *) &y, 7, 500) != HAL_OK) {
BSP_LCD_DisplayHStringAt(0, 20, "err wr 5340 filling", LEFT_MODE);
};

x[0] = 0x01;
x[1] = page;

while (HAL_I2C_Master_Transmit(&hi2c3, 0b11101000, (uint8_t *) &x, 2, 500) != HAL_OK) {
BSP_LCD_DisplayHStringAt(0, 20, "err wr 5340 page", LEFT_MODE);
};

y[0] = reg_1;
y[1] = (uint8_t)((P2 & 0x0000FF000000) >> 24 );
y[2] = (uint8_t)((P2 & 0x000000FF0000) >> 16 );
y[3] = (uint8_t)((P2 & 0x00000000FF00) >> 8 );
y[4] = (uint8_t)(P2 & 0x0000000000FF );

while (HAL_I2C_Master_Transmit(&hi2c3, 0b11101000, (uint8_t *) &y, 5, 500) != HAL_OK) {
BSP_LCD_DisplayHStringAt(0, 20, "err wr 5340 filling", LEFT_MODE);
};

}
этот код не работает, оставлен для истории
ra0ahcra0ahc
Сообщений: 4868
8 июля 2019 г. в 11:29#57
void setupMultisynth5340(uint8_t N_NUM, uint8_t N_DEN, uint64_t mult_2, uint64_t num_2, uint32_t denom_2) {
uint64_t P3; // Synth config register P1
uint32_t P4; // Synth config register P2

P3 = (mult_2 * denom_2 + num_2); //
P4 = denom_2;

// * 0x0302[43:0] N0_NUM 1181116006400 0x11300000000
// * 0x0308[31:0] N0_DEN 2147483648 0x80000000
send5340(0x03, N0_NUM, N0_DEN, P3, P4);

}

void setupPLL5340(uint64_t divider_1, uint32_t denom_1) {
uint64_t P1; // PLL config register P1
uint32_t P2; // PLL config register P2

P1 = (divider_1 * denom_1); //
P2 = denom_1;

//* 0x0235[43:0] M_NUM 354334801920 0x05280000000
// * 0x023B[31:0] M_DEN 2147483648 0x80000000
send5340(0x02, M_NUM, M_DEN, P1, P2);

}
этот код ПОЧТИ не работает, оставлен для истории
Relayer
Сообщений: 1006
8 июля 2019 г. в 01:50#58
Это чтож на каждую смену частоты PLL дергать и ресетить?
Владимир_К
Сообщений: 1245
8 июля 2019 г. в 01:55#59
Схема, печатная плата и тестовая прошивка для проверки работоспособности модуля. С кварцевым генератором 80 мгц, микросхема выдает на выходе OUT2 20 мгц. Печатная плата предусматривает возможность установки генератора (в прямоугольном корпусе) или кварца. Это то, что было под рукой. Но прошивка для генератора. Это все, конечно, пока только макет, для изучения микросхемы и отработки программы.


Владимир_К
Сообщений: 1245
8 июля 2019 г. в 02:04#60
Для проверки модуля написал небольшую программку. Программа пишет в регистры микросхемы, затем читает и выводит прочитанное на экран компьютера. Для вывода на экран используется терминальная программа Terminal 1.9. Проект можно открыть и изменить в программе AVR Studio 4.19 или старше. HEX файл прошивки в папке проекта "default". Это только для проверки правильности записи.. Больше ничего.
Кроме того, при первом включении? может оказаться полезной программа для Ардуино "ScanerI2C". Скетч программы можно найти в интернете. Запустить программу, в меню "Tools" - Serial Monitor. Микросхема должна ответить 74. Это ее адрес (при замкнутых на землю A0 и А1.