NAME

Device::Chip::AD9833 - chip driver for AD9833

SYNOPSIS

   use Device::Chip::AD9833;
   use Future::AsyncAwait;

   my $chip = Device::Chip::AD9833->new;
   await $chip->mount( Device::Chip::Adapter::...->new );

   await $chip->init;

   my $freq = 440; # in Hz
   await $chip->write_FREQ0( ( $freq << 28 ) / 25E6 ); # presuming 25MHz reference

DESCRIPTION

This Device::Chip subclass provides specific communication to an Analog Devices AD9833 attached to a computer via an SPI adapter.

The reader is presumed to be familiar with the general operation of this chip; the documentation here will not attempt to explain or define chip-specific concepts or features, only the use of this module to access them.

METHODS

The following methods documented in an await expression return Future instances.

init

   await $chip->init;

Resets the chip to a working configuration, including setting the B28 bit appropriately for the way this module writes the frequency registers.

This method must be called before setting the frequency using "write_FREQ0" or "write_FREQ1".

read_config

   $config = await $chip->read_config;

Returns a HASH reference containing the current chip configuration. Note that since the chip does not support querying the configuration, this is just an in-memory copy maintained by the object instance, updated by calls to "change_config".

The hash will contain the following named fields, all booleans.

   B28
   HLB
   FSELECT
   PSELECT
   SLEEP1
   SLEEP12
   OPBITEN
   DIV2
   MODE

In addition, a new value wave will be created combining the current settings of MODE, OPBITEN and DIV2 to explain the waveform generated

   wave => "sine" | "triangle" | "square" | "square/2"

change_config

   await $chip->change_config( %changes );

Writes updates to the chip configuration. Takes named arguments of the same form as returned by "read_config", including the synthesized wave setting.

write_FREQ0

write_FREQ1

   await $chip->write_FREQ0( $freq );
   await $chip->write_FREQ1( $freq );

Writes the FREQ0 or FREQ1 frequency control register. $freq should be a 28bit integer value.

write_PHASE0

write_PHASE1

   await $chip->write_PHASE0( $phase );
   await $chip->write_PHASE1( $phase );

Writes the PHASE0 or PHASE1 phase control register. $phase should be a 12bit integer value.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>