реклама на сайте
подробности

 
 
> проблемы с микроосхемой AD9833
Denaruga
сообщение Oct 9 2007, 12:08
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 9-10-07
Пользователь №: 31 193



Есть проблемы с микросхемой 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МГц меандр уже разглядеть сложно. Собирал несколько различных схем, менял микросхемы, менял генераторы ничего не помогло - результат такой же.
Подскажите, кто работал с этой микросхемой, как сделать правильный меандр?
Может я код неверный подаю или эта такая особененость микросхемы?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Denaruga
сообщение Oct 11 2007, 03:27
Сообщение #2





Группа: Новичок
Сообщений: 5
Регистрация: 9-10-07
Пользователь №: 31 193



Спасибо за ответы
Go to the top of the page
 
+Quote Post
dim99
сообщение Dec 2 2010, 09:18
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 8-02-09
Из: Мытищи
Пользователь №: 44 580



Работаю с 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);                
        }      
}
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 14 2010, 07:55
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



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

вот код, асм, но понять можно, далее из массива, куда адресуется 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;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016