Denaruga 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба Есть проблемы с микросхемой AD9833. Микросхему подключил к контроллеру, связь наладил (слова загружаются), в качестве основного генератора использовал генератор на 25МГц (сигнал в принципе хороший, на осцилографе смотрел). Хочу получить меандр на выходе. Для этого загружаю слова: 2128 6E14 451E 8000 8000 C000 E000 2028 чтобы получить 2МГц или 2128 570A 428F 8000 8000 C000 E000 2028 чтобы получить 1МГц, так же пробовал и другие частоты. Коды брал с сайта http://www.analog.com/Analog_Root/static/t...334/ad9833.html. В итоге на осциллографе вижу что получается меандр, но у этого меандра не стабильное время высокого уровня сигнала, т.е. оно постоянно, то увеличивается, то уменьшается. На частоте 1МГц изменение длительности высокого уровня сигнала составляло порядка 40нс, через каждую секунду, но период при этом оставался одним и тем же. С увеличением частоты выходного сигнала, все становиться еще хуже - фронты уже становиться не фронтами, а ступеньками. На частоте 10МГц меандр уже разглядеть сложно. Собирал несколько различных схем, менял микросхемы, менял генераторы ничего не помогло - результат такой же. Подскажите, кто работал с этой микросхемой, как сделать правильный меандр? Может я код неверный подаю или эта такая особененость микросхемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yura-w 0 9 октября, 2007 Опубликовано 9 октября, 2007 · Жалоба Есть проблемы с микросхемой AD9833. Микросхему подключил к контроллеру, связь наладил (слова загружаются), в качестве основного генератора использовал генератор на 25МГц ...изменение длительности высокого уровня сигнала составляло порядка 40нс по-моему задача в данном случае не решаема: 25Мгц=>скорость выборки dds из пзу,т.е 40нс - которые вы видите, и от этой погрешности никуда не уйти! (поставите генератор по-больше -"погрешность" просто уменьшится, но никуда не уйдет. надо другой dds) http://www.analog.com.ru/pub_wireless.htm Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Denaruga 0 10 октября, 2007 Опубликовано 10 октября, 2007 · Жалоба Спасибо за ответ, тогда может быть кто-нибудь подскажет dds с хорошими фазавыми характеристиками, т.е. для меня важно чтобы импульсы формируемого меандра были стабильными, максимальная частота 2МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yura-w 0 10 октября, 2007 Опубликовано 10 октября, 2007 · Жалоба важно чтобы импульсы формируемого меандра были стабильными, максимальная частота 2МГц. посмотрите если: поставите генератор например на 20МГц(я у себя ставил и на 40, но это превышение datasheet), то скорее всего получите красивые меандры, но только с частотами f=20MГц/(2*n). где n= 1,2,3..., в том чисте получите 2МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 23 10 октября, 2007 Опубликовано 10 октября, 2007 · Жалоба А причем тут сигнал на выходе микросхемы? Там будет рваный ступенчатый сигнал. После DDS надо ставить аналоговый ФНЧ с частотой среза чуть меньше половины тактовой. На выходе ФНЧ получим синус с нужной частотой. Потом ставим аналоговый компаратор и уже на его выходе получаем требуемый меандр. Смотрите аппноты на старшие DDS AD59хх- там это подробно разжевано и компаратор быстрый в сруктуру микросхемы DDS встроен. А в режиме MSB на выходе оно и будет дергаться плюс-минус период клока, в даташите же написано - "This is useful as a coarse clock source." Это переносимо на килогерцах, а на мегагерцах-ну незнаю.. такой огромный джиттер.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Denaruga 0 11 октября, 2007 Опубликовано 11 октября, 2007 · Жалоба Спасибо за ответы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 2 декабря, 2010 Опубликовано 2 декабря, 2010 · Жалоба Работаю с ad9833. Подключил к atmega 8535, по SPI отправляю настроечные слова. К ad9833 подключен генератор 16 Mhz. Данные, тики и уровни идут правильно - согласно datasheet. Генерирует sin и меандр. Треугольник так и не получилось настроить - в теории все работает при задании control_bit[1] = 1 Откопал чудо application note - взял из него пример, поигрался с частотами, но работает все через раз и максимально возможной частоты не показывает, все в пределе 1-10 кГц. Кто сталкивался с данной микросхемой, какие могут быть идеи насчет правильной настройки? привожу настроечное слово и код отправки по SPI // // app note Write16SPI(0x2100); Write16SPI(0x50C7); Write16SPI(0x40F0); Write16SPI(0xC000); Write16SPI(0x2000); // синус Write16SPI(0x2128); Write16SPI(0x6E14); Write16SPI(0x451E); Write16SPI(0x8000); Write16SPI(0x8000); Write16SPI(0xC000); Write16SPI(0xE000); Write16SPI(0x0002); #define CLOCK PORTB.1 // защелка #define FSYNC PORTB.2 // данные #define DATA_OUT PORTB.0 //------------------функция записи по SPI------------------- void Write16SPI(unsigned int data){ // счетчик цикла int K=16; int J=0; // unsigned char low_part; unsigned char hi_part; bit pin_data; // сохраняем младшую часть low_part = (unsigned char)(data & 0x00FF); // сохраняем старшую часть hi_part = (unsigned char)(data >> 8); // начало передачи данных FSYNC = 0; // выставляем данные Write8Bit(hi_part); // если старшие 8 бит - Write8Bit(low_part); // окончание передачи данных FSYNC = 1; } //------------------функция записи по SPI------------------- void Write8Bit(unsigned char data){ // счетчик цикла int K=8; int J=0; bit pin_data; K = 8; J = 0; // передаем 16 бит по одному while (K){ pin_data = (data & 128); DATA_OUT = pin_data; data <<= 1; // sprintf(buf, "%x", pin_data); // lcd_gotoxy(J,1); // lcd_puts(buf); // delay_ms(100); // // активный уровень clock CLOCK = 1; delay_us(10); //delay_ms(1); // декремент счетчика K--; J++; CLOCK = 0; delay_us(10); } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shf_05 0 14 декабря, 2010 Опубликовано 14 декабря, 2010 · Жалоба странно не имел с ней проблем, использовал синус. вот код, асм, но понять можно, далее из массива, куда адресуется dm(i0+=1)= ar; 16 разр. слова уходят в SPI. //2//write reg-s //Fout= fMCLK /2^28 * FREQREG= 16.384MHz/2^28*FREQREG //d15= 0 d14=1 - freq0 //d15= 1 d14=0 - freq1 //d12= 1 - MSB //2----Writing to a Frequency Registers ar= dm(AD9833Cntrl); ar= setbit 13 of ar;//set LSB,MSB byte, dm(i0+=1)= ar; //3 --------FREQ0 REG Write ar= dm(FreqRegDDS+1);// LSB first if LSB+MSB ar= setbit 14 of ar; //select freq0 register dm(i0+=1)= ar; // For LSB //CONTROL REGISTER "WRITE" // //4-----------------FREQ0 REG Write ar= dm(FreqRegDDS+0); //MSB second if send LSB+MSB ar= setbit 14 of ar; //freq0 dm(i0+=1)= ar; //-----Writing to a Phase Register //d15 d14 d13 d12 ...................... //1 1 0 X MSB 12 PHASE0 Bits LSB //1 1 1 X MSB 12 PHASE1 Bits LSB //------ //5---------------- enable AD9833 ar= dm(AD9833Cntrl); ar= 0;//clrbit 8 of ar; // clear reset; dm(AD9833Cntrl)= ar; dm(i0+=1)= ar; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться