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>