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, committed 2019-01-29
- 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;