Arduino Due Ad9959 Interfacing

Hi,

I am trying to control the evaluation board AD9959 using Arduino Due. I am not observing any output on the oscilloscope and am not sure how to proceed ahead. Following are my pin connections:
Arduino Due -> DDS (U2 row):
Pin 10 -> CSB (my slave select pin)
Pin 9 -> Reset
Pin 4 -> IO_UPDATE
SPI MOSI -> SDIO_0
SPI SCLK -> SCLK
Pin 6 -> P2
Pin 7 -> P3
Digital Pin GND: IO_UPDATE + RESET + P3 + P2
Analog Pin GND: CSB
SPI GND: SDIO_0 + SCLK

This is following the post mentioned here, wherein the person successfully managed to interface Arduino Due and AD9959 Evaluation board. (link )

Following is the code snippet that I am using to write onto the DDS. The code is also taken from the same link:

#include <SPI.h>
#include "DDS.h"

float out=0;


const int slaveSelectPin = 10;
const int IO_UpdatePin = 3;
const int Reset = 9;
const int P0 = 11 ;
const int P1 = 12;
const int P2 = 6; //Profile Pin 2 for DDS
const int P3 = 7; //Profile Pin 3 for DDS
DDS controlDDS(slaveSelectPin,IO_UpdatePin,Reset,P0,P1,P2,P3);

void setup() {
  
 
  //while (!Serial) ;

  //  Start SPI
  //  In initialize(), set the External REF frequency in Hz.
 controlDDS.resetDDS();
  controlDDS.initializeDDS();
 // SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE0));

 //digitalWrite(P3,LOW);
 //digitalWrite(P2,LOW);
}

void loop() {



//CSR Channel Select Register 
  byte instruction = B00000000;
  byte writeCSR = B00010000;
//10000000 (C3 enable) 01000000 (C2 enable) 00100000 (C1 enable) 00010000 (C0 enable)

  SPI.transfer(slaveSelectPin, instruction, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCSR, SPI_LAST);
  controlDDS.updateIO();



//FR1 Function Register 1
  byte instruction3 = B00000001;
  byte writeFR1_1 = B11010000;
  byte writeFR1_2 = B00000000;
  byte writeFR1_3 = B00000000;
//	SPI.beginTransaction(SPISettings(20000000, MSBFIRST, SPI_MODE0));
//  digitalWrite(_CS, LOW);
  SPI.transfer(slaveSelectPin, instruction3, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeFR1_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeFR1_2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeFR1_3, SPI_LAST);
  //controlDDS.updateIO();


//FR2 Function Register 2
  byte instruction4 = B00000010;
  byte writeFR2_1 = B00000000;
  byte writeFR2_2 = B00000000;

  SPI.transfer(slaveSelectPin, instruction4, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeFR2_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeFR2_2, SPI_LAST);
  //controlDDS.updateIO();

  
//CFR Channel Function Register (Single Tone, AM, FM, etc)
  byte instruction5 = B00000011;
  byte writeCFR_1 = B10000000;
  byte writeCFR_2 = B01000011;
  byte writeCFR_3 = B00000000;

  SPI.transfer(slaveSelectPin, instruction5, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFR_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFR_2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFR_3, SPI_LAST);
  controlDDS.updateIO();



//CTW0 Channel Frequency Tuning Word 0 (Frequency Selection)
  byte instruction2 = B00000100;
  byte writeCFTW0_1 = B00001010;
  byte writeCFTW0_2 = B00111101;
  byte writeCFTW0_3 = B01110000;
  byte writeCFTW0_4 = B10100100;
   
  SPI.transfer(slaveSelectPin, instruction2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW0_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW0_2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW0_3, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW0_4, SPI_LAST);
  controlDDS.updateIO();





//LSR Linear Sweep Ramp (Rising Step Interval)
  byte instruction7 = B00000111;
  byte writeLSR_1 = B00000000;
  byte writeLSR_2 = B00000110;
   
  SPI.transfer(slaveSelectPin, instruction7, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeLSR_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeLSR_2, SPI_LAST);
  //controlDDS.updateIO();


//RDW Rising Delta Word (Rising Step Size)
  byte instruction8 = B00001000;
  byte writeRDW_1 = B00000000;
  byte writeRDW_2 = B00000000;
  byte writeRDW_3 = B00000001;
  byte writeRDW_4 = B10101101;
   
  SPI.transfer(slaveSelectPin, instruction8, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeRDW_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeRDW_2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeRDW_3, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeRDW_4, SPI_LAST);
  controlDDS.updateIO();

  



//CTW1 Channel Frequency Tuning Word 1 (Frequency 2)
  byte instruction6 = B00001010;
  byte writeCFTW1_1 = B00101110;
  byte writeCFTW1_2 = B00010100;
  byte writeCFTW1_3 = B01111010;
  byte writeCFTW1_4 = B11100001;
   
  SPI.transfer(slaveSelectPin, instruction6, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW1_1, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW1_2, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW1_3, SPI_CONTINUE);
  SPI.transfer(slaveSelectPin, writeCFTW1_4, SPI_LAST);
  controlDDS.updateIO();


//Profile Pin -> High to carry out sweep
 digitalWrite(P3,HIGH);
 digitalWrite(P2,HIGH);
 digitalWrite(P1,HIGH);
 digitalWrite(P0,HIGH);

 controlDDS.updateIO();

delay(1000);
}

I have checked the following things:

  1. Code compiles correctly without any error.
  2. Checked the individual working of Arduino Due and AD9959 Evaluation board. Both work accurately.
  3. Checked the CS pin, it is being enabled and disabled when required.
  4. Checked the basic SPI using a temperature sensor. That is working accurately.

I do not know how to debug ahead from this. Any suggestions on this is helpful.

Regards
Prerna

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.