Задачка на ночь..

Здpавствуй, All!

Задача следущая. Есть мега88, она по SPI сцеплена с DDS AD9833. Приходят прерывания из вне и с таймера считывается значение. Надо генерить синус с такой же частотой. Но вот незадача, регистр частоты 28битный. Загружается он пачками по 16 бит, в которых два старших бита - адрес регистра частоты (для упрощения задачи возьмем 00).

Расчет значения регистра частоты такой: freq = (F_out/F_qartz)*2^28. Ну а требуемая частота с таймера это: F_out = FOSC/timer. Где: FOSC - частота кварца меги (в данном случае 8МГц), F_qartz = 8МГц (частота кварца ДДС), timer - 16bit значение таймера.

lsb - u08 msb - u08 timer-u16 freq -u32

Вот код, который должен терять 2 последних разряда в точности, переделывая

32битное слово (2 старших - нули) в два 14битных (с 2мя ведущими нулями у каждого).

/////////////////////here goes some black magic///////////////////////////// freq = (FOSC/8000000)*(268435456/timer); freq = (freq<<2); freq = freq&0x3FFFFFFC;

lsb = (u16)(freq); lsb = (lsb>>2); lsb = lsb & 0x3FFF;

msb = (u16)(freq>>16); /////////////////////here black magic stops/////////////////////////////////

Как на ваш взгляд, будет ли это работать? И как это можно оптимизировать? Особенно интересует момент с изменением FOSC. Если я поставлю кварц на 12 МГц, то на результате это не скажется, так? Как решить вопрос? Если сначала перемножить, а потом делить, то не будет ли сверху переполнения? Все же там большие цифры..

С уважением - Alexander ... Как мне избавиться от этой тоски по вам, солнечные дни?..

Reply to
Alexander Sashurin
Loading thread data ...

Привет, Alexander.

Вот что Alexander Sashurin wrote to All:

AS> Задача следущая. Есть мега88, она по SPI сцеплена с DDS AD9833. AS> Приходят прерывания из вне и с таймера считывается значение. Надо AS> генерить синус с такой же частотой. Но вот незадача, регистр частоты AS> 28битный. Загружается он пачками по 16 бит, в которых два старших бита AS> - адрес регистра частоты (для упрощения задачи возьмем 00).

AS> Расчет значения регистра частоты такой: freq = (F_out/F_qartz)*2^28. AS> Ну а требуемая частота с таймера это: F_out = FOSC/timer. Где: FOSC - AS> частота кварца меги (в данном случае 8МГц), F_qartz = 8МГц (частота AS> кварца ДДС), timer - 16bit значение таймера.

AS> lsb - u08 AS> msb - u08 AS> timer-u16 AS> freq -u32

AS> Вот код, который должен терять 2 последних разряда в точности, AS> переделывая 32битное слово (2 старших - нули) в два 14битных (с 2мя AS> ведущими нулями у каждого).

AS> /////////////////////here goes some black AS> magic///////////////////////////// AS> freq = (FOSC/8000000)*(268435456/timer); AS> freq = (freq<<2); AS> freq = freq&0x3FFFFFFC;

AS> lsb = (u16)(freq); AS> lsb = (lsb>>2); AS> lsb = lsb & 0x3FFF;

AS> msb = (u16)(freq>>16); AS> /////////////////////here black magic AS> stops/////////////////////////////////

AS> Как на ваш взгляд, будет ли это работать? И как это можно AS> оптимизировать? Особенно интересует момент с изменением FOSC. Если я AS> поставлю кварц на 12 МГц, то на результате это не скажется, так?

Я надеюсь, не прямо в ходе работы, а с перепрошиванием? :-)

AS> Как решить вопрос? Если сначала перемножить, а потом делить, то не AS> будет ли сверху переполнения? Все же там большие цифры..

Перемножения и деление констант происходят на уровне компиляции и выполняются компом, а не мегой, а комп - он железный. Деление только одно - на переменнцю timer. Два раза сдвиг влево есть умножение на четыре, оно может быть учтено в константах, в первой строчке. Зачем маска 0x3FFFFFFC, я так и не понял: ты же потом всё равно lsb сдвигаешь вправо, два младших разряда и так пропадут. Hа msb маска по старшим разрядам нужна. Hо msb - он короче, чем freq, это будет легче (то есть быстрее) сделать.

--Michael G. Belousoff-- Yekaterinburg city mickbell(dog)mail(dot)ru

... ==== Проблему надо решать до того, как она появится. ====

Reply to
Michael Belousoff

Здpавствуй, Michael!

Вторник 17 Августа 2010 08:45, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5020/ snipped-for-privacy@fidonet.org+4c6a4e99:

AS>> Как на ваш взгляд, будет ли это работать? И как это можно AS>> оптимизировать? Особенно интересует момент с изменением FOSC. AS>> Если я поставлю кварц на 12 МГц, то на результате это не AS>> скажется, так? MB> Я надеюсь, не прямо в ходе работы, а с перепрошиванием? :-)

:)

AS>> Как решить вопрос? Если сначала перемножить, а потом делить, то AS>> не будет ли сверху переполнения? Все же там большие цифры..

MB> Перемножения и деление констант происходят на уровне компиляции и MB> выполняются компом, а не мегой, а комп - он железный. Деление только MB> одно - на переменнцю timer. Два раза сдвиг влево есть умножение на MB> четыре, оно может быть учтено в константах, в первой строчке. Зачем MB> маска 0x3FFFFFFC, я так и не понял: ты же потом всё равно lsb MB> сдвигаешь вправо, два младших разряда и так пропадут. Hа msb маска по MB> старшим разрядам нужна. Hо msb - он короче, чем freq, это будет легче MB> (то есть быстрее) сделать.

Ага, спасибо за рекомендации. Будем работать:) Вобщем-то все получилось, синус генерится нормальный. Попробуем теперь разогнать это дело до 16МГц, быстрее считать и писать в SPI будет. А то основная запарка по времени - это конечно SPI. Отлично все вышло в общем то. Даже учитывая ~100мкс "не синуса" в каждом периоде (а девайс расчитан на частоты до 1кГц, это не страшно) соотношение сигнал шум вышло порядка 43дБ, по мощности. Что не может не радовать:)

С уважением - Alexander ... Больной вел себя плохой, за что и был прооперирован второй раз.

Reply to
Alexander Sashurin

Привет, Alexander.

Вот что Alexander Sashurin wrote to Michael Belousoff:

AS>>> Как на ваш взгляд, будет ли это работать? И как это можно AS>>> оптимизировать? Особенно интересует момент с изменением FOSC. AS>>> Если я поставлю кварц на 12 МГц, то на результате это не AS>>> скажется, так? MB>> Я надеюсь, не прямо в ходе работы, а с перепрошиванием? :-)

AS> :)

Hу на свете всякое бывает... Скажем, в какой-то местности доступны кварцы номиналами: 8, 10, 12, 16 МГц, причём в разное время - что-то одно из четырёх. А девайс выпускать надо. Hе мучиться же с вариантами прошивки... Указываешь парой джамперов его частоту - и вперёд. :-)))

AS>>> Как решить вопрос? Если сначала перемножить, а потом делить, то AS>>> не будет ли сверху переполнения? Все же там большие цифры..

MB>> Перемножения и деление констант происходят на уровне компиляции MB>> и выполняются компом, а не мегой, а комп - он железный. Деление MB>> только одно - на переменнцю timer. Два раза сдвиг влево есть MB>> умножение на четыре, оно может быть учтено в константах, в первой MB>> строчке. Зачем маска 0x3FFFFFFC, я так и не понял: ты же потом всё MB>> равно lsb сдвигаешь вправо, два младших разряда и так пропадут. Hа MB>> msb маска по старшим разрядам нужна. Hо msb - он короче, чем freq, MB>> это будет легче (то есть быстрее) сделать.

AS> Ага, спасибо за рекомендации. Будем работать:) Вобщем-то все AS> получилось, синус генерится нормальный. Попробуем теперь разогнать это AS> дело до 16МГц, быстрее считать и писать в SPI будет. А то основная AS> запарка по времени - это конечно SPI. Отлично все вышло в общем то. AS> Даже учитывая ~100мкс "не синуса" в каждом периоде (а девайс расчитан AS> на частоты до 1кГц, это не страшно) соотношение сигнал шум вышло AS> порядка 43дБ, по мощности.

И, что характерно, ровно столько же, 43 дБ, по амплитуде.

AS> Что не может не радовать:)

Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц генеришь? Hе из пушки ли по воробьям? Там вполне уместен "ковокс" - матрица резисторов. Hу или ЦАП. Я думаю, хватит даже и 10-разрядного.

--Michael G. Belousoff-- Yekaterinburg city mickbell(dog)mail(dot)ru

... Hо сейчас всё решает чёрная метка.

Reply to
Michael Belousoff

Здpавствуй, Michael!

Четверг 19 Августа 2010 18:15, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5020/ snipped-for-privacy@fidonet.org+4c6d7632:

AS>>>> Как на ваш взгляд, будет ли это работать? И как это можно AS>>>> оптимизировать? Особенно интересует момент с изменением FOSC. AS>>>> Если я поставлю кварц на 12 МГц, то на результате это не AS>>>> скажется, так? MB>>> Я надеюсь, не прямо в ходе работы, а с перепрошиванием? :-) AS>> :) MB> Hу на свете всякое бывает... Скажем, в какой-то местности доступны MB> кварцы номиналами: 8, 10, 12, 16 МГц, причём в разное время - что-то MB> одно из четырёх. А девайс выпускать надо. Hе мучиться же с вариантами MB> прошивки... Указываешь парой джамперов его частоту - и вперёд. :-)))

А как фьюзбиты менять? Это ж по ходу дела, при сборке девайса не поменяешь особо.

AS>> Что не может не радовать:) MB> Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц MB> генеришь? Hе из пушки ли по воробьям? Там вполне уместен "ковокс" - MB> матрица резисторов. Hу или ЦАП. Я думаю, хватит даже и 10-разрядного.

Да думал я над этим. R-2R лестницу или внешний ЦАП поставаить. Проще/дешевле/интереснее мне показалось сделать вот такой генератор. По сути это тот же ЦАП, только он сам все делает (хватает из таблицы значения косинуса и т.п. Да и в общем то планы выйти дальше на МГц, чтобы использовать несколько другой лазер, ну да не суть. Хотелось попробовать, вот и все:)

С уважением - Alexander ... Раз уж солнцу вставать не лень, И для нас, значит, ерунда.

Reply to
Alexander Sashurin

Привет, Alexander.

Вот что Alexander Sashurin wrote to Michael Belousoff:

AS>>>>> Как на ваш взгляд, будет ли это работать? И как это можно AS>>>>> оптимизировать? Особенно интересует момент с изменением FOSC. AS>>>>> Если я поставлю кварц на 12 МГц, то на результате это не AS>>>>> скажется, так? MB>>>> Я надеюсь, не прямо в ходе работы, а с перепрошиванием? :-) AS>>> :) MB>> Hу на свете всякое бывает... Скажем, в какой-то местности доступны MB>> кварцы номиналами: 8, 10, 12, 16 МГц, причём в разное время - что-то MB>> одно из четырёх. А девайс выпускать надо. Hе мучиться же с MB>> вариантами прошивки... Указываешь парой джамперов его частоту - и MB>> вперёд. :-)))

AS> А как фьюзбиты менять? Это ж по ходу дела, при сборке девайса не AS> поменяешь особо.

Я думаю, фьюзы менять в этом случае не придётся.

AS>>> Что не может не радовать:) MB>> Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц MB>> генеришь? Hе из пушки ли по воробьям? Там вполне уместен "ковокс" MB>> - матрица резисторов. Hу или ЦАП. Я думаю, хватит даже и MB>> 10-разрядного.

AS> Да думал я над этим. R-2R лестницу или внешний ЦАП поставаить. AS> Проще/дешевле/интереснее мне показалось сделать вот такой генератор. AS> По сути это тот же ЦАП, только он сам все делает (хватает из таблицы AS> значения косинуса и т.п. Да и в общем то планы выйти дальше на МГц,

А... причина вполне весомая.

AS> чтобы использовать несколько другой лазер, ну да не суть. Хотелось AS> попробовать, вот и все:)

Ага, это я понимаю. Сам в своё время облизывался по AD9850, но цена... А сейчас интересы переместились в более высокие частоты, где оная животинка уже не актуальна.

--Michael G. Belousoff-- Yekaterinburg city mickbell(dog)mail(dot)ru

... ==== Проблему надо решать до того, как она появится. ====

Reply to
Michael Belousoff

Здpавствуй, Michael!

Пятница 20 Августа 2010 10:01, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5020/ snipped-for-privacy@fidonet.org+4c6e53b1:

AS>>>> Что не может не радовать:) MB>>> Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц MB>>> генеришь? Hе из пушки ли по воробьям? Там вполне уместен MB>>> "ковокс" - матрица резисторов. Hу или ЦАП. Я думаю, хватит даже MB>>> и 10-разрядного. AS>> Да думал я над этим. R-2R лестницу или внешний ЦАП поставаить. AS>> Проще/дешевле/интереснее мне показалось сделать вот такой AS>> генератор. По сути это тот же ЦАП, только он сам все делает AS>> (хватает из таблицы значения косинуса и т.п. Да и в общем то AS>> планы выйти дальше на МГц, MB> А... причина вполне весомая.

Это сарказм?:)

AS>> чтобы использовать несколько другой лазер, ну да не суть. AS>> Хотелось попробовать, вот и все:) MB> Ага, это я понимаю. Сам в своё время облизывался по AD9850, но MB> цена... А сейчас интересы переместились в более высокие частоты, где MB> оная животинка уже не актуальна.

А вот у нас то как раз вариант 1-10 МГц стоит. Так что надо где нить в этом районе работать.. Хотя есть конечно варианты 70-80МГц, но там лазер послабее будет..

С уважением - Alexander ... Закрой за мной дверь. Я ухожу.

Reply to
Alexander Sashurin

Привет, Alexander.

Вот что Alexander Sashurin wrote to Michael Belousoff:

AS>>>>> Что не может не радовать:) MB>>>> Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц MB>>>> генеришь? Hе из пушки ли по воробьям? Там вполне уместен MB>>>> "ковокс" - матрица резисторов. Hу или ЦАП. Я думаю, хватит даже MB>>>> и 10-разрядного. AS>>> Да думал я над этим. R-2R лестницу или внешний ЦАП поставаить. AS>>> Проще/дешевле/интереснее мне показалось сделать вот такой AS>>> генератор. По сути это тот же ЦАП, только он сам все делает AS>>> (хватает из таблицы значения косинуса и т.п. Да и в общем то AS>>> планы выйти дальше на МГц, MB>> А... причина вполне весомая.

AS> Это сарказм?:)

Вовсе нет. Я бы, наверно, и сам сделал так же, предоставься мне возможность "за казённый счёт" пощупать DDS.

AS>>> чтобы использовать несколько другой лазер, ну да не суть. AS>>> Хотелось попробовать, вот и все:) MB>> Ага, это я понимаю. Сам в своё время облизывался по AD9850, но MB>> цена... А сейчас интересы переместились в более высокие частоты, MB>> где оная животинка уже не актуальна.

AS> А вот у нас то как раз вариант 1-10 МГц стоит. Так что надо где нить в AS> этом районе работать.. Хотя есть конечно варианты 70-80МГц, но там AS> лазер послабее будет..

Кстати, зачем лазеру регулируемая частота?

--Michael G. Belousoff-- Yekaterinburg city mickbell(dog)mail(dot)ru

... Hо сейчас всё решает чёрная метка.

Reply to
Michael Belousoff

Здpавствуй, Michael!

Пятница 20 Августа 2010 21:23, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5020/ snipped-for-privacy@fidonet.org+4c6ef3d0:

AS>>>>>> Что не может не радовать:) MB>>>>> Я, видать, чего-то не понял... Ты что, DDS-ом один килогерц MB>>>>> генеришь? Hе из пушки ли по воробьям? Там вполне уместен MB>>>>> "ковокс" - матрица резисторов. Hу или ЦАП. Я думаю, хватит MB>>>>> даже и 10-разрядного. AS>>>> Да думал я над этим. R-2R лестницу или внешний ЦАП поставаить. AS>>>> Проще/дешевле/интереснее мне показалось сделать вот такой AS>>>> генератор. По сути это тот же ЦАП, только он сам все делает AS>>>> (хватает из таблицы значения косинуса и т.п. Да и в общем то AS>>>> планы выйти дальше на МГц, MB>>> А... причина вполне весомая. AS>> Это сарказм?:) MB> Вовсе нет. Я бы, наверно, и сам сделал так же, предоставься мне MB> возможность "за казённый счёт" пощупать DDS.

Меня вот недвно один персонаж упрекал в том что я за "казенный счет развлекаюсь". Мол, он не хочет платить свои налоги на зарплаты таких бездельников как я и компания:)

AS>>>> чтобы использовать несколько другой лазер, ну да не суть. AS>>>> Хотелось попробовать, вот и все:) MB>>> Ага, это я понимаю. Сам в своё время облизывался по AD9850, но MB>>> цена... А сейчас интересы переместились в более высокие частоты, MB>>> где оная животинка уже не актуальна. AS>> А вот у нас то как раз вариант 1-10 МГц стоит. Так что надо где AS>> нить в этом районе работать.. Хотя есть конечно варианты AS>> 70-80МГц, но там лазер послабее будет.. MB> Кстати, зачем лазеру регулируемая частота?

В том то и дело, что она не регулируемая, а зависит от оптической длины резонатора. Но от температуры, погоды, левой пятки она имет свойство таки плавать. Не сильно, обычно где то -5 -6 порядок, но все же. Интегральная ошибка будет набегать. Так что надо подстраиваться. А в конкретно нашем случае такая частота (1кГц) делается специально. На том, что все мпульсы практически идентичны (а значит идентичны получаемые ТГц импульсы) построена вся Time Domain спектроскопия. Т.е. мы смотрим разные точки на разных по времени, но по качеству идентичных импульсах. Криво объяснил, но думаю понятно. А частота изменяемая.. Ну эта система в разных экспериментах используется, удобно просто. Интерферометрию удобнее проводить на малой частоте (камера не сделает 10-100MSps), а так иногда вообще с одиночными импульсами работают.

С уважением - Alexander ... Закрой за мной дверь. Я ухожу.

Reply to
Alexander Sashurin

Привет, Alexander !

21 Aug 10 , 02:42 Alexander Sashurin писал к Michael Belousoff:

AS> В том то и дело, что она не регулируемая, а зависит от AS> оптической длины резонатора. Hо от температуры, погоды, левой пятки AS> она имет свойство таки плавать. Hе сильно, обычно где то -5 -6 AS> порядок, но все же. Интегральная ошибка будет набегать. Так что надо AS> подстраиваться. AS> А в конкретно нашем случае такая частота (1кГц) делается AS> специально. Hа том, что все мпульсы практически идентичны (а значит AS> идентичны получаемые ТГц импульсы) построена вся Time Domain AS> спектроскопия. Т.е. мы смотрим разные точки на разных по времени, но AS> по качеству идентичных импульсах. Криво объяснил, но думаю понятно. А AS> частота изменяемая.. Hу эта система в разных экспериментах AS> используется, удобно просто. Интерферометрию удобнее проводить на AS> малой частоте (камера не сделает 10-100MSps), а так иногда вообще с AS> одиночными импульсами работают.

А где и что можно почитать про эту спектроскопию? Что измеряют, в какой фазе, с какой точностью, какие "прикладные" результаты, ну и т.п.

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... Вазелин, заряженый Кашпировским

Reply to
Nickita A Startcev

Здpавствуй, Nickita!

Суббота 21 Августа 2010 12:55, ты писал(а) мне, в сообщении по ссылке area://ru.embedded?msgid=2:5030/777.319+4c6f94e8:

AS>> В том то и дело, что она не регулируемая, а зависит от AS>> оптической длины резонатора. Hо от температуры, погоды, левой AS>> пятки она имет свойство таки плавать. Hе сильно, обычно где то -5 AS>> -6 порядок, но все же. Интегральная ошибка будет набегать. Так что AS>> надо подстраиваться. AS>> А в конкретно нашем случае такая частота (1кГц) делается AS>> специально. Hа том, что все мпульсы практически идентичны (а AS>> значит идентичны получаемые ТГц импульсы) построена вся Time AS>> Domain спектроскопия. Т.е. мы смотрим разные точки на разных по AS>> времени, но по качеству идентичных импульсах. Криво объяснил, но AS>> думаю понятно. А частота изменяемая.. Hу эта система в разных AS>> экспериментах используется, удобно просто. Интерферометрию удобнее AS>> проводить на малой частоте (камера не сделает 10-100MSps), а так AS>> иногда вообще с одиночными импульсами работают. NS> А где и что можно почитать про эту спектроскопию? NS> Что измеряют, в какой фазе, с какой точностью, какие "прикладные" NS> результаты, ну и т.п.

Почитать - поищи в гугле по словам THz Time domain spectrometry. Мы измеряем спектр поглощения волн суб-миллиметрового диапазона в веществе. Принцип такой: сначала отрисоввывается эталонный испульс без образца. Затем - с образцом. Ну и далее Фурье и делим одно на другое. Вся вишка - отрисовать импульс.

С уважением - Alexander ... Те, кому нечего ждать, отправляются в путь.

Reply to
Alexander Sashurin

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.