|
发表于 2024-1-5 21:15:14
|
显示全部楼层
本帖最后由 超级夜猫子 于 2024-1-5 21:31 编辑
发一段我前一阵做5351的代码,谈不上优化,实测步进误差在100Hz以内,看看你能不能借鉴。
//短波1
//波段及调谐频率数据(3-7.5MHz),10.7MHz一中频,5KHz步进
if (band == 3) {
if (tuning > 901) {
tuning = 901;
}
if (tuning < 1) {
tuning = 1;
}
tuning_X = 3 + (tuning - 1) * 0.005;
dtostrf(tuning_X, 3, 3, tuning_0); //浮点数转换为字符串
//发送给显示屏
OLED_ShowChinese(2, 3, 6, 16); //短
OLED_ShowChinese(18, 3, 7, 16); //波
OLED_ShowString(34, 3, "1 3-7.5MHz", 16);
OLED_ShowString(30, 6, tuning_0, 16);
OLED_ShowString(85, 6, "MHz", 16);
//发送给SI5351
if (tuning <= 122) {
tuning_F = 24;
tuning_F0 = 25852 + 327 * (tuning - 1) + tuning / 2 + tuning / 15 + tuning / 30;
} else if (tuning <= 322) {
tuning_F = 25;
tuning_F0 = 285 + 327 * (tuning - 123) + (tuning - 122) / 2 + (tuning - 122) / 15 + (tuning - 122) / 30;
} else if (tuning <= 522) {
tuning_F = 26;
tuning_F0 = 270 + 327 * (tuning - 323) + (tuning - 323) / 2 + (tuning - 323) / 15 + (tuning - 323) / 30;
} else if (tuning <= 722) {
tuning_F = 27;
tuning_F0 = 253 + 327 * (tuning - 523) + (tuning - 523) / 2 + (tuning - 523) / 15 + (tuning - 523) / 30;
} else {
tuning_F = 28;
tuning_F0 = 238 + 327 * (tuning - 723) + (tuning - 723) / 2 + (tuning - 723) / 15 + (tuning - 723) / 30;
}
si5351.init(SI5351_CRYSTAL_LOAD_6PF, 0, 0);
clockgen.setupPLL(SI5351_PLL_A, tuning_F, tuning_F0, 65535);
clockgen.setupMultisynth(0, SI5351_PLL_A, 25, 0, 65535);
clockgen.setupPLL(SI5351_PLL_B, 24, 495020, 1048575);
clockgen.setupMultisynth(1, SI5351_PLL_B, 28, 0, 65535);
clockgen.enableOutputs(true);
Serial.println(tuning);
Serial.println(tuning_F);
Serial.println(tuning_F0);
//打开相应波段控制脚
digitalWrite(K0, LOW);
digitalWrite(K1, LOW);
digitalWrite(K2, LOW);
} |
|