Як запустити генератор сигналу 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 мс
}

Немає коментарів:
Дописати коментар