Convertidor digital a analógico AD5693

Estoy usando un AD5693 como convertidor de digital a analógico con un Arduino Uno. He conectado los pines SDA y SCL del AD5693 a los pines I2C del Arduino Uno. He conectado el LDAC active low a gnd. El pin de reinicio está conectado a VDD.

Obtuve el código de ejemplo de GitHub.

El siguiente código funciona correctamente:

#include<Wire.h>

// AD5693 I2C address is 0x4C(76)

#define Addr 0x4C

void setup()
{

  // Initialise I2C communication as Master

  Wire.begin();

  // Initialise serial communication, set baud rate = 9600

  Serial.begin(9600);

  delay(300);

}

void loop()

{
  
unsigned int data[2] = {0x80, 0x00};

  // Start I2C transmission
  
Wire.beginTransmission(Addr);
  
// Select DAC and input register
  
Wire.write(0x30);
  
// Write data = 0x8000(32768)
 
 // data msb = 0x80
 
 Wire.write(data[0]);
  
// data lsb = 0x00
 
 Wire.write(data[1]);
 
 // Stop I2C transmission
 
 Wire.endTransmission();

  // Convert the data, Vref = 5 V
 
 float voltage = (((data[0] * 256) + (data[1])) / 65536.0) * 5.0;

  
// Output data to serial monitor
  
Serial.print("Voltage : ");
  
Serial.print(voltage);
 
 Serial.println(" V");
 
 delay(500);

}

Quiero tomar una entrada del usuario que es un valor de voltaje analógico y el mismo valor debería ser la salida del DAC IC.

¿Necesito convertir el valor de voltaje analógico del usuario a hexadecimal? Hay alguna otra manera.

¿El número que necesita no es solo datos[1]?
básicamente, si doy la entrada del usuario como 2.1, quiero obtener el mismo voltaje en la salida del AD5693. Entonces, ¿cómo convertiré el 2.1 en un valor hexadecimal proporcional para almacenarlo en la matriz de datos? @ScottSeidman

Respuestas (2)

Hexadecimal o no, no importa, pero debe convertir el número de voltios a unidades DAC. Esto se debe a que el DAC no tiene idea de voltajes absolutos, todo es proporcional a su voltaje de referencia (¿aquí 5V? Pero esto depende de su circuito. Una versión de este chip tiene una referencia interna de 2.5V, la otra tiene un pin para tomar un tensión externa).

La hoja de datos le da la fórmula en la página 19, pero es al revés:

V = V r mi F × GRAMO a i norte × C o d mi 65536

Así que el primer paso es invertir esto:

C o d mi = 65536 × V V r mi F × GRAMO a i norte

Y asegúrese de que el valor sea de tipo entero, no superior a 65535 (¡no 65536!) y no inferior a 0.

Ahora viene el segundo truco: codees un número de 16 bits, y el DAC lo espera en dos "palabras" de 8 bits cada una:

  • primero los 8 bits superiores:msb = (code >> 8) & 0xFF
  • luego los 8 bits inferiores:lsb = code & 0xFF

Entonces debes escribir estos dos valores en sucesión.

Suponga que la ganancia es 1 de forma predeterminada, pero esto se puede cambiar en la configuración del DAC.

Un número es un número. Puede representar cualquier número de diferentes maneras, seguirá siendo el mismo número en cualquier representación, ya sea en binario, hexadecimal, octal o decimal.

Entonces no, no necesita ser convertido en nada. Si puede leer un número que el usuario ingresa de alguna manera en una variable, no necesita conversión.