Прошерстив библиотеки обнаружил, что частота устанавливается через переменную формата float, то-есть имеем ограничение на 6-7 значащих цифр (с мантиссой) при этом девайс имеет возможность при тактовой 25Mhz установку частоты с точностью 0.1Hz.
Есть ли у кого опыт обхода ограничения переменной float для вводы частоты с точность долей Герца?
Так может в обход библиотеки записывать напрямую? Или библиотеку подправить. В своё время руки не дошли до этой волшебной микрухи.
Давно это было… сейчас посмотрел свои наброски и нигде float не встретил.
А вообще вот тут всё написано (читай про бит B28):
скинь кодом, а то набирать с картинки некомильфо
@BOOM , не забудь истребовать авторские отчисления)))
я ему с барского плеча микросхему TDA-7056 подгоню, для катушки Мишина
Я всё это писал пользуясь статьёй (ссылку выше приложил).
Там автор всё разжевал и приготовил на ложке. )))
7056 это которая в каждом телевизоре 90х/начала 2000х стояла?
Не надо )))
не знаю, я отбирал по максимальному току, а откуда китайцы их дербанили мне неведомо
Зачем тебе точность 0.1Гц?
Опять что-то к катушке приделываешь?))
модуляцию! ты скинешь код али нет
вот тут ты что делаешь?
pulseLow(DDS_SCLK);
#define DDS_SDATA PIN_PD3 // | Вывод SDATA AD9833
#define DDS_SCLK PIN_PD1 // | Вывод SCLK AD9833
#define DDS_FSYNC PIN_PD0 // | Вывод FSYNC AD9833
#define pulseHigh(pin) { digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
#define pulseLow(pin) { digitalWrite(pin, LOW); digitalWrite(pin, HIGH); }
/* Функция физического трансфера байт в AD9833 */
void tfr_word(int16_t data) {
digitalWrite(DDS_FSYNC, LOW);
for (int i = 0; i < 16; i++) {
digitalWrite(DDS_SDATA, (bool)(data & 0x8000));
data <<= 1;
data &= 0xFFFF;
pulseLow(DDS_SCLK);
}
digitalWrite(DDS_FSYNC, HIGH);
}
/* функция установки частоты (непосредственно засылка в AD9833) */
void send_frequency(uint32_t frequency) {
uint32_t freq;
uint16_t MSB;
uint16_t LSB;
uint16_t phase = 0xC000; // Phase (0)
freq = frequency * 268435 / 25000;
MSB = (int)((freq & 0xFFFC000) >> 14);
LSB = (int)(freq & 0x3FFF);
//Установка DB15 и DB14
LSB |= 0x4000;
MSB |= 0x4000;
//tfr_word(0x2100); // Reset + DB28
tfr_word(LSB);
tfr_word(MSB);
tfr_word(phase);
//tfr_word(0x2000); // Exit Reset
}
Таки пришлось задницу с дивана поднимать…
а частота точно в десятых долях герца???
Нет, тут точность до герца.
Мне и не нужно было точности 0.1 Гц (ни тогда, ни сейчас).
Почитай статью по ссылке то…
я мастер простых решений жеж, а ты по чи тай да по чи тай
Видимо просто поправить расчётную формулу для частоты с десятыми долями герца:
freq = frequency * 268435 / 250000;
Попробуй.
Я давно 9833 в руках не держал.
Или еще попробуй «тюнить» LSB / MSB напрямую…
а что ты на них делал?
Я делал то, на что они рассчитаны - генераторы.
А что ты с точностью 0.1Гц собрался делать - страшно представить
Катушку разогнать решил?