Driver for the DACxx6xT series of Texas Instruments DACs Not all functions have been implemented yet. DAC7562T, DAC7563T, DAC8162T DAC8163T, DAC8562T, DAC8563T

Files at this revision

API Documentation at this revision

Comitter:
Ryan Vasquez
Date:
Tue Jan 29 13:03:54 2019 -0600
Parent:
0:af07575e0c04
Child:
2:6edde8a229f7
Commit message:
Added more documentation to the driver.

Changed in this revision

DACxx6xT.cpp Show annotated file Show diff for this revision Revisions of this file
DACxx6xT.h Show annotated file Show diff for this revision Revisions of this file
--- a/DACxx6xT.cpp	Mon Jan 21 18:31:29 2019 +0000
+++ b/DACxx6xT.cpp	Tue Jan 29 13:03:54 2019 -0600
@@ -6,10 +6,11 @@
 {
   DACC = A;
   numslaves = 0;
-  vref = Vref;
+  vref_A = Vref;
   vrefpin = Vref;
-  gain_DAC_A = 1;
-  gain_DAC_B = 1;
+  gain_DAC_A = 1.0;
+  gain_DAC_B = 1.0;
+  vref_B = Vref;
 }
 
 DACxx6xT::DACxx6xT(SPI *A, DigitalOut *device_CS, float Vref = 3.3)
@@ -17,10 +18,11 @@
   DACC = A;
   CS = device_CS;
   CS->write(1);
-  vref = Vref;
+  vref_A = Vref;
+  vref_B = Vref;
   vrefpin = Vref;
-  gain_DAC_A = 1;
-  gain_DAC_B = 1;
+  gain_DAC_A = 1.0;
+  gain_DAC_B = 1.0;
 }
 
 void DACxx6xT::init()
@@ -68,24 +70,36 @@
       DACC->write(DAC_B_G1_DAC_A_G1>>16);
       DACC->write(DAC_B_G1_DAC_A_G1>>8);
       DACC->write(DAC_B_G1_DAC_A_G1);
+      gain_DAC_A = 1;
+      gain_DAC_B = 1;
     }
     else if(gain_DAC_A == 2 && gain_DAC_B == 1)//Gain: DAC-B gain = 1, DAC-A gain = 2
     {
       DACC->write(DAC_B_G1_DAC_A_G2>>16);
       DACC->write(DAC_B_G1_DAC_A_G2>>8);
       DACC->write(DAC_B_G1_DAC_A_G2);
+      gain_DAC_A = 2;
+      //vref_A = 2.5;
+      gain_DAC_B = 1;
     }
     else if(gain_DAC_A == 1 && gain_DAC_B == 2)//Gain: DAC-B gain = 2, DAC-A gain = 1
     {
       DACC->write(DAC_B_G2_DAC_A_G1>>16);
       DACC->write(DAC_B_G2_DAC_A_G1>>8);
       DACC->write(DAC_B_G2_DAC_A_G1);
+      gain_DAC_A = 1;
+      gain_DAC_B = 2;
+      //vref_B = 2.5;
     }
-    else if(gain_DAC_A == 2 && gain_DAC_B == 2)//Gain: DAC-B gain = 2, DAC-A gain = 1
+    else if(gain_DAC_A == 2 && gain_DAC_B == 2)//Gain: DAC-B gain = 2, DAC-A gain = 2
     {
       DACC->write(DAC_B_G2_DAC_A_G2>>16);
       DACC->write(DAC_B_G2_DAC_A_G2>>8);
       DACC->write(DAC_B_G2_DAC_A_G2);
+      gain_DAC_A = 2;
+      //vref_A = 2.5;
+      gain_DAC_B = 2;
+      //vref_B = 2.5;
     }
     CS->write(1);
 }
@@ -96,7 +110,10 @@
   DACC->write(EN_INTREF_GAIN2_ALL>>16);
   DACC->write(EN_INTREF_GAIN2_ALL>>8);
   DACC->write(EN_INTREF_GAIN2_ALL);
-  vref = INTERNAL_VREF;
+  vref_A = INTERNAL_VREF;
+  vref_B = INTERNAL_VREF;
+  gain_DAC_B = 2;
+  gain_DAC_A = 2;
   CS->write(1);
 }
 
@@ -106,7 +123,8 @@
   DACC->write(DIS_INTREF_GAIN1_ALL>>16);
   DACC->write(DIS_INTREF_GAIN1_ALL>>8);
   DACC->write(DIS_INTREF_GAIN1_ALL);
-  vref = vrefpin;
+  vref_A = vrefpin;
+  vref_B = vrefpin;
   CS->write(1);
 }
 
@@ -126,10 +144,10 @@
 {
   if(dacnum == 1)
   {
-    write(static_cast<int>((value/(vref*gain_DAC_A*custom_gain_A))*65536.0), 1);
+    write(static_cast<int>((value/(vref_A*gain_DAC_A*custom_gain_A))*65535.0), 1);
   }
-  else if(dacnum == 2)
+ if(dacnum == 2)
   {
-    write(static_cast<int>((value/(vref*gain_DAC_B*custom_gain_B))*65536.0), 2);
+    write(static_cast<int>((value/(vref_B*gain_DAC_B*custom_gain_B))*65535.0), 2);
   }
 }
--- a/DACxx6xT.h	Mon Jan 21 18:31:29 2019 +0000
+++ b/DACxx6xT.h	Tue Jan 29 13:03:54 2019 -0600
@@ -15,7 +15,7 @@
 #define UPDATE_DAC_A 0x08 //Update DAC-A
 #define UPDATE_DAC_B 0x09 //Update DAC-B
 #define UPDATE_ALL_DACS 0x0F //Update all DACs
-#define DAC_B_G2_DAC_A_G2 0x20000 //0 Gain: DAC-B gain = 2, DAC-A gain = 2 (default with internal VREF)
+#define DAC_B_G2_DAC_A_G2 0x020000 //0 Gain: DAC-B gain = 2, DAC-A gain = 2 (default with internal VREF)
 #define DAC_B_G2_DAC_A_G1 0x020001 //Gain: DAC-B gain = 2, DAC-A gain = 1
 #define DAC_B_G1_DAC_A_G2 0x020002 //Gain: DAC-B gain = 1, DAC-A gain = 2
 #define DAC_B_G1_DAC_A_G1 0x020003 //Gain: DAC-B gain = 1, DAC-A gain = 1 (power-on default)
@@ -85,7 +85,8 @@
 private:
   int numslaves;
   DigitalOut *CS;
-  float vref;
+  float vref_A;
+  float vref_B;
   float vrefpin;
   float gain_DAC_A;
   float gain_DAC_B;