Проблема с DDS AD9850
- Войдите на сайт для отправки комментариев
Пнд, 11/11/2013 - 06:34
Добрый день!
Проблема с DDS на AD9850 (синяя плата HC-RS08, только что приехала с Китая).
Не могу добиться работы DDS. На выходе ZOUT1 (да и на других) ничего нет. Проверял включением осциллографа между ZOUT1 и GND.
Брак в плате, в руках или программе?
#include <LiquidCrystal.h> #define DDS_CLOCK 125000000 #define CLOCK 3 //pin connections for DDS #define LOAD 2 #define DATA 1 #define RESET 0 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); void AD9850_init() { digitalWrite(RESET, LOW); digitalWrite(CLOCK, LOW); digitalWrite(LOAD, LOW); digitalWrite(DATA, LOW); } void AD9850_reset() { //reset sequence is: // CLOCK & LOAD = LOW // Pulse RESET high for a few uS (use 5 uS here) // Pulse CLOCK high for a few uS (use 5 uS here) // Set DATA to ZERO and pulse LOAD for a few uS (use 5 uS here) // data sheet diagrams show only RESET and CLOCK being used to reset the device, but I see no output unless I also // toggle the LOAD line here. digitalWrite(CLOCK, LOW); digitalWrite(LOAD, LOW); digitalWrite(RESET, LOW); delay(5); digitalWrite(RESET, HIGH); //pulse RESET delay(5); digitalWrite(RESET, LOW); delay(5); digitalWrite(CLOCK, LOW); delay(5); digitalWrite(CLOCK, HIGH); //pulse CLOCK delay(5); digitalWrite(CLOCK, LOW); delay(5); digitalWrite(DATA, LOW); //make sure DATA pin is LOW digitalWrite(LOAD, LOW); delay(5); digitalWrite(LOAD, HIGH); //pulse LOAD delay(5); digitalWrite(LOAD, LOW); // Chip is RESET now } void SetFrequency(unsigned long frequency) { unsigned long tuning_word = (frequency * 4294967296LL) / DDS_CLOCK; digitalWrite (LOAD, LOW); shiftOut(DATA, CLOCK, LSBFIRST, tuning_word); shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 8); shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 16); shiftOut(DATA, CLOCK, LSBFIRST, tuning_word >> 24); shiftOut(DATA, CLOCK, LSBFIRST, 0x0); digitalWrite (LOAD, HIGH); } void setup() { lcd.begin(16, 2); // start the library lcd.setCursor(1,0); lcd.print("**DDS AD9850**"); } void loop() { AD9850_init; AD9850_reset; SetFrequency(1000); lcd.setCursor(0,1); lcd.print("Freq=1kHz"); while(1); }
Разобрался. Тему можно закрыть.
А поделиться информацией? Возможно кому то это тоже может помочь.
kisoft +1, мне любопытно. Хочу на нём собрать гетеродинный приёмник для пассивного считавания EM4100 RFId меток.
Ошибка в том, что я снимал сигнал с выхода QOUT1, а не ZOUT1
QOUT1 всегда 0, QOUT2 всегда 1. Потенциометр не крутил. По идее это выходы не для синуса, а для меандра.
У этой платы обнаружил особенность - чем выше частота (заметнее на частотах > 5Мгц), тем меньше амплитуда сигнала.
Причем, Vmax сигнала остаётся в районе 1В (1.04в, если быть точным), а Vmin с увеличением частоты тоже увеличивается.
Вечером накидаю график зависимости, может будет кому-то полезным.
Записал видео, как меняется амплитуда сигнала в зависимости от генерируемой частоты.
На видео видна форма сигнала, максимальное и минимальное напряжение.
Диапазон частот - 20КГц÷20Мгц с шагом 20КГц
Трафик! 2 мин - 130 Мбайт.
https://dl.dropboxusercontent.com/u/72215607/VID_20131113_191651.3gp
Кому будет интересно, составил график зависимости амплитуды от генерируемой частоты
http://s019.radikal.ru/i637/1311/bc/d4b0a5262872.png
А можно фото проекта?
Здравствуйте!
Делаю синтезатор на ардуино и платке с AD9850. Нашел код запустил работает, теперь мне нужно изменить код для введения одной функции. А именно, сейчас синтезатор выдает частоту от 1мгц до 30 мгц а нужно разбить на небольшие отрезки, переключаемые кнопкой, подключенной ну например к выводу A1
Например разбить на 9 кусочков
1. от 1мгц до 2мгц
2. от 2мгц до 3мгц
.....
9 от 9мгц до 10 мгц
И что бы диапазоны переключались цикличиски. Вот что имею. Помогите с кодом пожалуйста
Кто-нибудь вообще в курсе, как правильно подключить и закодить зелёную плату с AD 9850?
Я гуглил, нашёл три скетча, ни один из них ни хрена не работает.
Что надо: скетч, в котором задал частоту и осциллок, подключённый к выводу SinA показывает синусоиду указанной частоты.
Помогите, пожалуйста, может, кто-то уже кодил сей генератор?
Может кому пригодится.
DDS генератор синусоидальных и прямоугольных сигналов в диапазононе частот 0 - 40МГц на базе
Arduino Uno + AD9850 DDS
Для сборки надо:
Arduino Uno R3
шилд DFRobot LCD Keypad Shield
модуль HC-RS08 AD9850 DDS
8 проводов для соединения модулей
Сборка:
1.Подключаем к компьютеру плату Arduino Uno и загружаем в нее Sketch:
2.Получаем сообщение "Done uploading." = значит все сделано правильно и приступаем к соединению модулей.
На ножки Arduino Uno втыкаем в DFRobot LCD Keypad Shield.
Затем HC-RS08 AD9850 DDS подключить с помощью проводников по следующей схеме:
Выводы Arduino Uno соединяем с штырьками HC-RS08 AD9850 DDS
+5V → VCC
GND → GND
A1 → W_CLK
A2 → FU_UD
A3 → DATA
A4 → RESET
Выходной сигнал снимаем с pin модуля HC-RS08 AD9850 DDS:
QOUT1, QOUT2 =прямоугольный сигнал
ZOUT1 и ZOUT2 =синусоидальный
2. Подаем питание. Через несколько секунд появляется значение частоты по умолчанию- 10 кГц. Его можно изменить нажатиями кнопок вверх/вниз и вправо/влево.
Все пользуем.
Добрый вечер всем. Может кому пригодится. Частота задается через COM порт.
Для получения квадратных импульсов с выводов QOUT1 и 2 плату нужно настроить !!! На плате есть переменный резистор R13 (большая синяя фигня на плате с пазами под крестовую отвертку). Подключаем плату к Ардуино, выставляем любую частоту, подключаем QOUT1 и GRN к осцилографу и крутим резистор до появления сигнала. Пришло из Китая 10 плат, ни одна не настоена ! С начала думал брак...
Для получения квадратных импульсов с выводов QOUT1 и 2 плату нужно настроить !!! На плате есть переменный резистор R13 (большая синяя фигня на плате с пазами под крестовую отвертку). Подключаем плату к Ардуино, выставляем любую частоту, подключаем QOUT1 и GRN к осцилографу и крутим резистор до появления сигнала. Пришло из Китая 10 плат, ни одна не настоена ! С начала думал брак...
Фиг его знает, я его уже во все стороны как только не крутил... меандра так и не добился.
Синус нормальный.
Может кто помочь ?
встроил в код генератора вольтметр.
делаю измерения пока постоянного напряжения по входа А1 от 0-5в
почему то показания вольтметра скачат, при том. если я выбираю диапазон от 0-100кгц они пляшут , если от 100кгц до 10мгц они стоят ровно.
такое ощущение что работу ацп кто то сбивает, и оно не успевает считать.
как победить эту проблему не могу.