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

 
 
> Проблемы конфигурации AD9959 по SPI, Не могу запустить микросхему AD9959
ks007
сообщение Jan 13 2014, 02:07
Сообщение #1


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

Группа: Участник
Сообщений: 76
Регистрация: 1-02-11
Из: Томск
Пользователь №: 62 613



Всем добрый день. У меня такая проблема не могу запустить 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 что делать?
Заранее благодарен
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
Ant_m
сообщение Jan 13 2014, 05:40
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 765



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();
Go to the top of the page
 
+Quote Post
ks007
сообщение Jan 16 2014, 10:00
Сообщение #3


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

Группа: Участник
Сообщений: 76
Регистрация: 1-02-11
Из: Томск
Пользователь №: 62 613



Цитата(Ant_m @ Jan 13 2014, 08:40) *
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 подтягиваю к единице.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 16 2014, 10:18
Сообщение #4


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(ks007 @ Jan 13 2014, 06:07) *
тактую от внешнего генератора.


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


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
ks007
сообщение Jan 16 2014, 10:43
Сообщение #5


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

Группа: Участник
Сообщений: 76
Регистрация: 1-02-11
Из: Томск
Пользователь №: 62 613



Цитата(megajohn @ Jan 16 2014, 13:18) *
Чему равна частота ? А то моежтся получится что попадаете в недопустимый диапазон 160-255 MHZ

25 МГц.
Profile Register нужно ли их обязательно использовать?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Jan 16 2014, 11:02
Сообщение #6


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



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


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Ant_m
сообщение Jan 16 2014, 11:14
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 765



Profile Register нужны если вы собираетесь делать модуляцию.
Reset надо подавать после подачи опорной частоты, есстественно если есть питание sm.gif.
IO_Update можно применять после записи всех регистров.

Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию smile3046.gif
Go to the top of the page
 
+Quote Post
ks007
сообщение Jan 16 2014, 12:07
Сообщение #8


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

Группа: Участник
Сообщений: 76
Регистрация: 1-02-11
Из: Томск
Пользователь №: 62 613



Цитата(Ant_m @ Jan 16 2014, 14:14) *
Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию smile3046.gif

Пока ничего не выходит. Может дело в железе. Если у вас есть точно работающая последовательность загрузки по SPI, не могли бы вы привести, чтобы увидеть хоть какой-то сигнал на выходе любого канала. Если не поможет проверю еще раз железо.
Благодарю за ответы.
Go to the top of the page
 
+Quote Post
Ant_m
сообщение Jan 17 2014, 08:37
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 756
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 765



Мой код, который выше, надо немного модифицировать. Замените блок:
Код
  /* 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.
Go to the top of the page
 
+Quote Post
ks007
сообщение Jan 20 2014, 08:24
Сообщение #10


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

Группа: Участник
Сообщений: 76
Регистрация: 1-02-11
Из: Томск
Пользователь №: 62 613



Цитата(Ant_m @ Jan 17 2014, 11:37) *
Мой код, который выше, надо немного модифицировать.

Еще раз огромное спасибо. На работе попробую. Как будет результат напишу.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:54
Рейтинг@Mail.ru


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