KS007 0 13 января, 2014 Опубликовано 13 января, 2014 · Жалоба Всем добрый день. У меня такая проблема не могу запустить 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 что делать? Заранее благодарен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ant_m 0 13 января, 2014 Опубликовано 13 января, 2014 · Жалоба 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(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KS007 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба 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 подтягиваю к единице. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба тактую от внешнего генератора. Чему равна частота ? А то моежтся получится что попадаете в недопустимый диапазон 160-255 MHZ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KS007 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Чему равна частота ? А то моежтся получится что попадаете в недопустимый диапазон 160-255 MHZ 25 МГц. Profile Register нужно ли их обязательно использовать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба попробуйте прошивать только регистры FR1 и CFTW0. А остальные юзать по умолчанию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ant_m 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Profile Register нужны если вы собираетесь делать модуляцию. Reset надо подавать после подачи опорной частоты, есстественно если есть питание :). IO_Update можно применять после записи всех регистров. Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию :smile3046: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KS007 0 16 января, 2014 Опубликовано 16 января, 2014 · Жалоба Я убил кучу времени из-за Default Value CFR[7:0] = 0x02, пытаясь записать туда значение по умолчанию :smile3046: Пока ничего не выходит. Может дело в железе. Если у вас есть точно работающая последовательность загрузки по SPI, не могли бы вы привести, чтобы увидеть хоть какой-то сигнал на выходе любого канала. Если не поможет проверю еще раз железо. Благодарю за ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ant_m 0 17 января, 2014 Опубликовано 17 января, 2014 · Жалоба Мой код, который выше, надо немного модифицировать. Замените блок: /* 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KS007 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба Мой код, который выше, надо немного модифицировать. Еще раз огромное спасибо. На работе попробую. Как будет результат напишу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Seldom 0 13 августа, 2021 Опубликовано 13 августа, 2021 · Жалоба Всем привет. У меня следующая проблема- при заливке регистра 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 начинаю формироваться частоты в нужных режимах, но через некоторое время проходит помеха скорее всего по питанию, например от релюхи кондиционера, включенного в ту же розетку, или по другим причинам сигнал на выходе пропадает - похоже самопроизвольно сбрасываются регистры синтезатора. Лечится только подачей ресет и заливкой регистров заново. Из-за этого и начал заморачиваться с чтением регистров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Seldom 0 13 августа, 2021 Опубликовано 13 августа, 2021 (изменено) · Жалоба Нашел виновника - ACR[12]=1 не давал жизни 3х проводному режиму spi в совокупе с linear sweep Изменено 13 августа, 2021 пользователем 3amec Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться