AD9833 Function Generator with Arduino Leave a comment

The AD9833 is a programmable waveform generator IC (integrated circuit) developed by Analog Devices. It’s commonly used to generate sine, triangle, and square waveforms with frequency and phase control. Here’s a brief overview of its functionality:

  1. Waveform Generation: The AD9833 can generate three types of waveforms: sine, triangle, and square waves.
  2. Frequency Control: It allows precise control over the frequency of the generated waveform. The frequency can be programmed via a serial interface, typically SPI (Serial Peripheral Interface) or I2C (Inter-Integrated Circuit).
  3. Phase Control: The phase of the waveform can also be adjusted programmatically, allowing for phase modulation.
  4. Frequency Resolution: The frequency resolution of the AD9833 is determined by its internal 28-bit phase accumulator, providing high-resolution frequency tuning.
  5. Power Supply: It typically operates with a single power supply voltage, making it suitable for a wide range of applications.
  6. Interface: It communicates with external microcontrollers or other digital devices through a serial interface, usually SPI or I2C.
  7. Applications: The AD9833 finds applications in various fields such as function generators, signal generators, frequency synthesizers, and DDS (Direct Digital Synthesis) systems.

To use the AD9833 as a function generator, you would typically interface it with a microcontroller or a digital signal processor (DSP) to control its settings and generate the desired waveform with the desired frequency and phase characteristics. The microcontroller or DSP sends commands to the AD9833 via SPI or I2C to set the frequency, waveform type, and phase offset.

When utilizing the AD9833, you would typically:

  • Configure the desired waveform type (sine, triangle, square).
  • Set the frequency of the waveform.
  • Optionally, adjust the phase offset if phase modulation is needed.
  • Control power-down modes or sleep modes for power management.

Overall, the AD9833 provides a versatile and flexible solution for generating accurate waveforms in various electronic applications.



* Company Name:LK Tronics
* Author: Research & Development Department
* Date: 2024/ 03/25
* All rights reserved, No part of this code may be reproduced, distributed,
* or transmitted in any form or by any means, including photocopying, recording,
* or other electronic or mechanical methods, without the prior written permission
* of LK Tronics, except in the case of brief quotations embodied in
* critical reviews and certain other noncommercial uses permitted by copyright law.

#include <AD9833.h>     // Include the library

#define FNC_PIN 10       // Can be any digital IO pin
#define Frequency 1    // if set value 1 = 1Hz Frequency

AD9833 gen(FNC_PIN);       // Defaults to 25MHz internal reference frequency

void setup() {


  // Apply a 1000 Hz sine wave using REG0 (register set 0). There are two register sets: REG0 and REG1.
  // Each one can be programmed for:
  //   Frequency - 0 to 12.5 MHz
  //   Phase - 0 to 360 degress (this is only useful if it is 'relative' to some other signal
  //           such as the phase difference between REG0 and REG1).
  // In ApplySignal, if Phase is not given, it defaults to 0.

  gen.ApplySignal(SINE_WAVE, REG0, Frequency);
  gen.EnableOutput(true);   // Turn ON the output - it defaults to OFF
  // There should be a 1 Hz square wave on the output of the AD9833

void loop() {

Leave a Reply