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

Revision:
1:c033f984277b
Parent:
0:af07575e0c04
Child:
2:6edde8a229f7
--- 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);
   }
 }