вівторок, 20 червня 2017 р.

AD9850 DDS Signal Generator Module + Arduino


Як запустити генератор сигналу AD9850 DDS на Arduino через Serial, код нижче.

 
Під'єднуємо так:
Arduino               Генератор
+5V VCC
GND GND
A1 W_CLK
A2 FU_UD
A3 DATA
A4 RESET

Сигнал знімаємо з генератору - піни QOUT1, QOUT2 (прямокутний), ZOUT1 и ZOUT2 (сінусоїда)

 
long freq = 10000; // Оглашение переменных -- Частота
long reading=0;
#define W_CLK 15 // Пин A1 Arduino - подключен к CLK
#define FQ_UD 16 // Пин A2 Arduino - подключен к FQ (FU)
#define DATA 17  // Пин A3 Arduino - подключен к DATA
#define RESET 18 // Пин A4 Arduino - подключен к RST
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
//---------------------------------------------------- 
void setup()
{
 Serial.begin(9600);
 pinMode(FQ_UD, OUTPUT);
 pinMode(W_CLK, OUTPUT);
 pinMode(DATA, OUTPUT);
 pinMode(RESET, OUTPUT);
 pulseHigh(RESET); // Отправка импульсов для запуска модуля генератора
 pulseHigh(W_CLK);
 pulseHigh(FQ_UD);
}
//-------------------------------------------------------
void tfr_byte(byte data){ // Функция побитной отправки байта
 for (int i=0; i<8; i++, data>>=1) { // данных в модуль генератора
  digitalWrite(DATA, data & 0x01);
  pulseHigh(W_CLK);}} // Подача импульса на CLK после каждого бита
//-------------------------------------------------------
void sendFrequency(double frequency) { // Преобразование и отправка
  int32_t freq = frequency * 4294967295/125000000;  // значения частоты
  for (int b=0; b<4; b++, freq>>=8) {tfr_byte(freq & 0xFF);}
  tfr_byte(0x000);   // Отправка завершательного контрольного байта
  pulseHigh(FQ_UD);}  // Обновление частоты генератора
//----------------------------------------------------

void loop()
{
 Serial.print("Freq: ");

 if (freq<1000){Serial.print(freq);
 Serial.println(" Hz");}

 if ((freq>=1000)&&(freq<1000000)){Serial.print(freq / 1000);
 Serial.println(" kHz");}

 if ((freq>=1000000)&&(freq<50000000)){Serial.print(freq / 1000000);
 Serial.println("MHz");}

 if (Serial.available()>0) {
  reading=Serial.parseInt();
  if (reading!=0) freq=reading;
 }
 
 if (freq<1) freq=1; // Ограничение значений частоты
 if (freq>40000000) freq=40000000;

 sendFrequency(freq);  // Вызов функции отправки частоты
 delay (200); // Пауза 200 мс
}

Немає коментарів:

Дописати коментар