Хочу написать программу обслуживания AD9834, у меня соит AVRstudio - 4.12, но не знаю как решить проблему расчета кода по формуле: Freg0 = (Fout / Fmclk) * 2^32.
Подскажите пожалуйста как написать код под это безобразие.
А можно посмотреть как выглядит все это на асме?akl писал(а):Здравствуйте. А почему нельзя требуемое значение Fout загрузить сразу со смещением на 4 байта, что эквивалентно умножению на 2^32. Затем сдвинуть вправо на 4 разряда. Получится Fout*2^28 ( для AD9834). Затем разделить на Fmclk и получить требуемое значение аккумулятора фазы.
http://radiokot.ru/circuit/digital/measure/22
На Си понятно, мне на асме не понятно.Neekeetos писал(а):Вот как я делал на Си тоже для ддски (думаю на асм несложно переложить):
unsigned long a;
unsigned long b;
unsigned long res;
a = 400000000;
b = 1234567;
res = 0;
for (int i=0; i <33> a) {b-=a; res++;}
res <<=1;b<<1>>=1;
Это я написал побитное деление в столбик, соотв б делится на а и умножается на 2^32. Последняя строка это округление 0,5 в остатке.
PS Пардон муа за форматирование, форум такой код почему то переделывает в невидимые тэги.
А еще говорят лень - двигатель прогресса, нифига ведь не такМурзилка писал(а):На Си понятно, мне на асме не понятно.
Судя по Вашему аватару, я понял, что лучше спросить нежели не зная лазить в потемках.Neekeetos писал(а):А еще говорят лень - двигатель прогресса, нифига ведь не такМурзилка писал(а):На Си понятно, мне на асме не понятно.
По аватару встречают по уму провожаютМурзилка писал(а):Судя по Вашему аватару, я понял, что лучше спросить нежели не зная лазить в потемках.
"По аватару встречают, по уму проважают" - 100% Ваша правда, я просто отнесся с юмором.Neekeetos писал(а):По аватару встречают по уму провожаютМурзилка писал(а):Судя по Вашему аватару, я понял, что лучше спросить нежели не зная лазить в потемках.. Я просто в вашей фразе про то что вам непонятно на ассемблере не уловил вопроса. Приведите код который у вас получился или хотя бы спросите что непонятно, я отвечу.
Спасибо за совет, учту. Завтра займусь макетной платой и начну все отрабатывать на практике, результаты сообщу.barby67 писал(а):Мурзилка, хочу дать попутный совет, не пытайтесь выжать из DDSки частоту более 1/3 клока. Ничего путного не получится, в диапазоне до 1/3 можете получить любую частоту, а выше только ровно 1/2 клока.
В принципе логично. Вопрос немного в стороне от программы. Если не секрет какой тактовый генератор будете использовать для питания ДДС, собираетесь ли компенсировать его температурную нестабильность (возможно программно)?Мурзилка писал(а):По поводу кода - у меня еще ничего не получилось, в данный момент начал заниматься ассемблером в плотную, скачал книги, прочитал, попробовал на простых примерах, понял чтобы идти дальше нужно взять проект за основу, и потихоньку, шаг за шагом его строить
Опорник - обычный генератор в СМД корпусе. Никаких дополнительных мер принимать не буду, меня его нестабильность вполне устраивает.Neekeetos писал(а):В принципе логично. Вопрос немного в стороне от программы. Если не секрет какой тактовый генератор будете использовать для питания ДДС, собираетесь ли компенсировать его температурную нестабильность (возможно программно)?Мурзилка писал(а):По поводу кода - у меня еще ничего не получилось, в данный момент начал заниматься ассемблером в плотную, скачал книги, прочитал, попробовал на простых примерах, понял чтобы идти дальше нужно взять проект за основу, и потихоньку, шаг за шагом его строить