The AD5781 is a single 18-bit, unbuffered voltage-output DAC that operates from a bipolar supply of up to 33 V. The AD5781 accepts a positive reference input in the range 5V to VDD – 2.5 V and a negative reference input in the range VSS + 2.5 V to 0 V. The AD5781 offers a relative accuracy specification of ±0.5 LSB max, and operation is guaranteed monotonic with a ±0.5 LSB DNL max specification.
The part uses a versatile 3-wire serial interface that operates at clock rates up to 35 MHz and that is compatible with standard SPI®, QSPI™, MICROWIRE™, and DSP interface standards. The part incorporates a power-on reset circuit that ensures the DAC output powers up to 0 V and in a known output impedance state and remains in this state until a valid write to the device takes place. The part provides an output clamp feature that places the output in a defined load state.
The goal of this project (Microcontroller No-OS) is to be able to provide reference projects for lower end processors, which can't run Linux, or aren't running a specific operating system, to help those customers using microcontrollers with ADI parts. Here you can find a generic driver which can be used as a base for any microcontroller platform and also specific drivers for different microcontroller platforms.
The driver contains two parts:
The Communication Driver has a standard interface, so the AD5781 driver can be used exactly as it is provided.
There are three functions which are called by the AD5781 driver:
SPI driver architecture
The following functions are implemented in this version of AD5781 driver:
|long AD5781_Init(void)||Initializes the communication with the device. Return 0 in case of success and negative error code otherwise.|
|long AD5781_SetRegisterValue(unsigned char registerAddress, unsigned long registerValue)||Writes data into a register. Receives as parameters the address of the register and the value of the register. Returns 0 in case of success or negative error code.|
|long AD5781_GetRegisterValue(unsigned char registerAddress)||Reads the value of a register. Receives as parameter the address of the register. Returns the value of the register or negative error code.|
|long AD5781_DacOuputState(unsigned char state)||Sets the DAC output in one of the three states(normal, clamped via 6KOhm to GND, tristate). Returns negative error code or 0 in case of success.|
|long AD5781_SetDacValue(unsigned long value)||Writes to the DAC register. Receives as parameter the value to be written to DAC. Returns negative error code or 0 in case of success.|
|long AD5781_SoftInstruction(unsigned char instructionBit)||Asserts RESET, CLR or LDAC in a software manner. Receives as parameter one of the software control bits(RESET, CLR or LDAC). Returns negative error code or 0 in case of success.|
|long AD5781_Setup(unsigned long setupWord)||Configures the output amplifier, DAC coding, SDO state and the linearity error compensation. Receives as parameter a 24-bit value that sets or clears the Control Register bits(RBUF, BIN/2sC, SDODIS, LINCOMP). Returns negative error code or 0 in case of success.|