alexe1ka 0 12 августа, 2014 Опубликовано 12 августа, 2014 · Жалоба Добрый день. Люди,которые работали с генератором ADF4351 - прошу у вас помощи, т.к. сам что то не могу разобраться. Нужно сделать перестройку частоты генератора с шагом 5 МГц от 100 МГц до 2555 МГц. В сети примеров что то не особо нашел,но один все же надыбал - его и использую: https://github.com/analogdevicesinc/no-OS/t...mcomms1/ADF4351 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 12 августа, 2014 Опубликовано 12 августа, 2014 · Жалоба А какая помощь-то требуется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexe1ka 0 13 августа, 2014 Опубликовано 13 августа, 2014 · Жалоба А какая помощь-то требуется? нужно помочь написать функцию перестройки!я просто сначала хотел тупо записывать в регистр значения которые выдает программа Adf435x,но т.к. частотный диапазон большой то слишком много бы получилось записей.просто может кто его программировал и знает как сделать попроще.просто я пока только учусь,поэтому желательна помощь людей работавших с данной железиной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 14 августа, 2014 Опубликовано 14 августа, 2014 (изменено) · Жалоба По простому,если надо менять ТОЛЬКО вых. частоту, можно сделать так: собственно сама функция, вх частота в МГц. (с шагом 5 МГц от 100 МГц до 2555 МГц) bool setFreq(int outputFreq) { int freqStep = 5; // шаг выходной частоты, в МГц int pfdFreq = 32000; // частота опоры, в кГц, ставим своё! int vcoDivider, INT, MOD, FRAC, temp; char syntReg[24]; // заполняем массив регистров, которые будут грузиться в синтезатор. // начинаем с 5 регистра, т.к. грузить будем с него. // Значения должны быть взяты из программы Adf435x. // В той программе рассчитываем регистры на // одну частоту (напр 150МГц), проверяем что всё работает, // копируем их сюда. В этой функции в этих насчитанных регистрах // будут меняться только те данные, которые отвечают за смену частоты. // Те значения что приведены тут в качестве примера, скорее всего не рабочие! // Reg5 syntReg[0] = 0x00; syntReg[1] = 0x40; syntReg[2] = 0x00; syntReg[3] = 0x05; // Reg4 syntReg[4] = 0x00; syntReg[5] = 0xac; syntReg[6] = 0x00; syntReg[7] = 0x3c; // Reg3 syntReg[8] = 0x00; syntReg[9] = 0x00; syntReg[10] = 0x04; syntReg[11] = 0xb3; // Reg2 syntReg[12] = 0x18; syntReg[13] = 0x00; syntReg[14] = 0xde; syntReg[15] = 0xc2; // Reg1 syntReg[16] = 0x08; syntReg[17] = 0x00; syntReg[18] = 0x99; syntReg[19] = 0x01; // Reg0 syntReg[20] = 0x00; syntReg[21] = 0x36; syntReg[22] = 0x13; syntReg[23] = 0x78; // Проверяем, что частота попадает в шаг if ((outputFreq%freqStep)!=0) return false; // В зависимости от частоты выбираем значение выходного делителя частоты VCO, // Заодно проверим, что частоты из нужного диапазона. if ((outputFreq<=2555)&&(outputFreq>2200)) vcoDivider = 1; else if ((outputFreq<=2200)&&(outputFreq>1100)) vcoDivider = 2; else if ((outputFreq<=1100)&&(outputFreq>550)) vcoDivider = 4; else if ((outputFreq<=550)&&(outputFreq>255)) vcoDivider = 8; else if ((outputFreq<=255)&&(outputFreq>=130)) vcoDivider = 16; else if ((outputFreq<=130)&&(outputFreq>=100)) vcoDivider = 32; else return false; // Частота рассчитывается по формуле (см в pdf раздел RF SYNTHESIZER—A WORKED EXAMPLE): // outputFreq = (INT + (FRAC/MOD)) * (pfdFreq/vcoDivider) // Из неё рассчитываем INT, MOD, FRAC. MOD= (pfdFreq/(vcoDivider*freqStep)); INT= vcoDivider*outputFreq/pfdFreq; // Вычисляем нужные для установки частоты переменные temp=(10*vcoDivider*MOD)/pfdFreq; // промежуточное вычисление из-за размерности в кГц FRAC= ((outputFreq*temp)/10) - (INT*MOD); // Формируем нужные регистры // R4 syntReg[5] = (syntReg[5] & 0x8F) | (vcoDivider << 4); // меняем vcoDivider // R1 syntReg[18] = (syntReg[18] & 0x80) | (MOD >> 5); // меняем MOD syntReg[19] = (syntReg[19] & 0x07) | (MOD << 3); // R0 syntReg[20] = 0x00 | (INT >>9); // меняем INT syntReg[21] = 0x00 | (INT >>1); syntReg[22] = 0x00 | (INT <<7)|(FRAC >>5); // меняем FRAC syntReg[23] = 0x00 | (FRAC <<3); // Вызываем функцию загрузки регистров return loadSyntReg(syntReg); // загрузили в порядке R5 R4 R3 R2 R1 R0 } Изменено 14 августа, 2014 пользователем arhiv6 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться