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

Проблемы конфигурации AD9959 по SPI

Всем добрый день. У меня такая проблема не могу запустить AD99559. Питание в норме, тактую от внешнего генератора.

Проделываю следующие действия:

 

1. Включаю питание

2. Засылаю данные по SPI

 

Данные SPI

//Данные инструкции
spi (0x00); 
spi (0xF2); 

spi (0x01); 
spi (0xD0); 
spi (0x00);
spi (0x00);

spi (0x02);
spi (0xA0);
spi (0x00);

spi (0x03);
spi (0x00);
spi (0x03);
spi (0x04);

//Данные настройки частоты
spi (0x04); 
spi (0x02);
spi (0x8F);
spi (0x5C);
spi (0x29);

В ответ на каналах тишина.

Временная диаграмма записи в SPI показана на рисунке.

 

Что не так не пойму, может кто-то работал с данной микросхемой?

 

C пином RESET что делать?

Заранее благодарен

post-62613-1389578779_thumb.jpg

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


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

1) сбрасывать обязательно.

2) Читайте про FR2 внимательно.

IO_Update применяете?

 

   /* Write CSR */
  DDS_SendByte(0x00);
  DDS_SendByte(0xF2); // channel 0-3 enable; single-bit serial (3-wire mode)
  DDS_Update(); // Need for switch in 3-wire mode
  //---------------------
  /* Write FR1 */
#ifdef Generator125M_clk
  DDS_SendByte(0x01); // CMD
  DDS_SendByte(0x90); /* FR1 = 0x900000: VCO = High, PLL = 4 */
  DDS_SendByte(0x00);
  DDS_SendByte(0x00);
#endif //Generator125M_clk
  /* Write FR2 */
  DDS_SendByte(0x02); // CMD
  DDS_SendByte(0x00);
  DDS_SendByte(0x00);

  DDS_SendByte(0x00); // CMD
  DDS_SendByte(0x32); // channel 0,1 enable; single-bit serial (3-wire mode)

  /* Write CFR */
  DDS_SendByte(0x03); // CMD
  DDS_SendByte(0x40); //40 amplitude modulation!!
  DDS_SendByte(0x03);
  DDS_SendByte(0x20);

  /* Write Amplitude control register (ASR) */
  DDS_SendByte(0x06); // CMD
  DDS_SendByte(0x00);
  DDS_SendByte(0x00); // set amplitude 0
  DDS_SendByte(0x00);

  /* Profile registers */
  DDS_SendByte(0x0A); // CMD
  DDS_SendByte(0xFF); // set amplitude 1023
  DDS_SendByte(0xFF);
  DDS_SendByte(0x00);
  DDS_SendByte(0x00);
  
  DDS_Update();

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


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

IO_Update применяете?

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

IO_Update применяю. У меня есть вопросы.

1)Когда применять IO_Update? После загрузки данных если я правильно понимаю.

2)Reset когда применять?

 

Моя последовательность действий:

1)Включение питания.

2)Пином CS выбираю(подтягиваю к нулю) DDS AD9959.

3)Даю импульс RESET

4)Выставляю в регистр CSR необходимое значение (мой случай 0xF2).

5)Выставляю в регистр FR1 необходимое значение.

6)Выставляю в регистр FR2 необходимое значение.

7)Выставляю в регистр CFR необходимое значение.

8)Выставляю в регистр CFTW необходимое значение.

9)Даю импульс IO_Update.

10)CS подтягиваю к единице.

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


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

тактую от внешнего генератора.

 

Чему равна частота ? А то моежтся получится что попадаете в недопустимый диапазон 160-255 MHZ

 

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


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

Чему равна частота ? А то моежтся получится что попадаете в недопустимый диапазон 160-255 MHZ

25 МГц.

Profile Register нужно ли их обязательно использовать?

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


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

попробуйте прошивать только регистры FR1 и CFTW0. А остальные юзать по умолчанию

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


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

Profile Register нужны если вы собираетесь делать модуляцию.

Reset надо подавать после подачи опорной частоты, есстественно если есть питание :).

IO_Update можно применять после записи всех регистров.

 

Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию :smile3046:

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


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

Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию :smile3046:

Пока ничего не выходит. Может дело в железе. Если у вас есть точно работающая последовательность загрузки по SPI, не могли бы вы привести, чтобы увидеть хоть какой-то сигнал на выходе любого канала. Если не поможет проверю еще раз железо.

Благодарю за ответы.

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


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

Мой код, который выше, надо немного модифицировать. Замените блок:

  /* Write FR1 */
#ifdef Generator125M_clk
  DDS_SendByte(0x01); // CMD
  DDS_SendByte(0x90); /* FR1 = 0x900000: VCO = High, PLL = 4 */
  DDS_SendByte(0x00);
  DDS_SendByte(0x00);
#endif //Generator125M_clk

на

#ifdef Qartz25M_500clk
  DDS_SendByte(0x01); // CMD
  DDS_SendByte(0xD0); /* FR1 = 0xD00000: VCO = High, PLL = 20 */
  DDS_SendByte(0x00);
  DDS_SendByte(0x00);
#endif //Qartz25M_500clk

 

Добавьте где нибудь перед нижней строчкой DDS_Update() блок

  /* Write Frequency Tuning Word (CFTW0) */
  DDS_SendByte(0x04); // CMD
  DDS_SendByte(0х33); // 100MHz
  DDS_SendByte(0х33);
  DDS_SendByte(0х33);
  DDS_SendByte(0х33);

 

Учтите у меня амплитудная модуляция с помощью выводов P0-P3, чтобы увидеть 100МГц на выходе надо на эти выводы подать "1". Либо правьте регистры CFR, ACR.

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


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

Мой код, который выше, надо немного модифицировать.

Еще раз огромное спасибо. На работе попробую. Как будет результат напишу.

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


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

Всем привет. У меня следующая проблема- при заливке регистра cfr значением 0x80 C3 00 для включения режима linear sweep перестает работать spi в режиме single bit 3wire (полный дуплекс с выдачей данных по sdio_2), т.е перестают выдаваться данные по sdio_2, когда подаешь команду на чтение. Биты CSR[2:1] =01   RU/RD в регистре fr1[11:10] =00. Не могу понять в чем причина. При снятии режима linear sweep перезаписью регистра cfr значением 0x80 03 00  данные начинают выдаваться по sdio_2. Перерыл весь даташит несколько раз - ответа не нашел.  Также существует такая проблема: после конфигурации AD9959 начинаю формироваться частоты в нужных режимах, но через некоторое время проходит помеха скорее всего по питанию, например от релюхи кондиционера, включенного в ту же розетку, или по другим причинам сигнал на выходе пропадает - похоже самопроизвольно сбрасываются регистры синтезатора. Лечится только подачей ресет и заливкой регистров заново. Из-за этого и начал заморачиваться с чтением регистров.

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


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

Нашел виновника - ACR[12]=1 не давал жизни 3х проводному режиму spi в совокупе с linear sweep

Изменено пользователем 3amec

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


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

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

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

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

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

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

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

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

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

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