Перейти к содержанию
    

проблемы с микроосхемой AD9833

Есть проблемы с микросхемой 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МГц меандр уже разглядеть сложно. Собирал несколько различных схем, менял микросхемы, менял генераторы ничего не помогло - результат такой же.

Подскажите, кто работал с этой микросхемой, как сделать правильный меандр?

Может я код неверный подаю или эта такая особененость микросхемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть проблемы с микросхемой AD9833.

Микросхему подключил к контроллеру, связь наладил (слова загружаются), в качестве основного генератора использовал генератор на 25МГц ...изменение длительности высокого уровня сигнала составляло порядка 40нс

по-моему задача в данном случае не решаема:

25Мгц=>скорость выборки dds из пзу,т.е 40нс - которые вы видите, и от этой погрешности никуда не уйти!

(поставите генератор по-больше -"погрешность" просто уменьшится, но никуда не уйдет. надо другой dds)

 

http://www.analog.com.ru/pub_wireless.htm

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ,

тогда может быть кто-нибудь подскажет dds с хорошими фазавыми характеристиками, т.е. для меня важно чтобы импульсы формируемого меандра были стабильными, максимальная частота 2МГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

важно чтобы импульсы формируемого меандра были стабильными, максимальная частота 2МГц.

посмотрите если:

поставите генератор например на 20МГц(я у себя ставил и на 40, но это превышение datasheet),

то скорее всего получите красивые меандры, но только с частотами f=20MГц/(2*n). где n= 1,2,3...,

в том чисте получите 2МГц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А причем тут сигнал на выходе микросхемы? Там будет рваный ступенчатый сигнал. После DDS надо ставить аналоговый ФНЧ с частотой среза чуть меньше половины тактовой. На выходе ФНЧ получим синус с нужной частотой. Потом ставим аналоговый компаратор и уже на его выходе получаем требуемый меандр. Смотрите аппноты на старшие DDS AD59хх- там это подробно разжевано и компаратор быстрый в сруктуру микросхемы DDS встроен.

А в режиме MSB на выходе оно и будет дергаться плюс-минус период клока, в даташите же написано - "This is useful as a coarse clock source." Это переносимо на килогерцах, а на мегагерцах-ну незнаю.. такой огромный джиттер....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работаю с 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);                 
        }       
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

странно не имел с ней проблем, использовал синус.

 

вот код, асм, но понять можно, далее из массива, куда адресуется 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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...