Driver for the DACxx6xT series of Texas Instruments DACs Not all functions have been implemented yet. DAC7562T, DAC7563T, DAC8162T DAC8163T, DAC8562T, DAC8563T
Diff: DACxx6xT.cpp
- 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); } }