Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AD8556.cpp
00001 /** 00002 * @brief AD8556: Digitally Programmable Sensor Signal Amplifier with EMI Filters 00003 * http://www.analog.com/en/specialty-amplifiers/instrumentation-amplifiers/ad8556/products/product.html 00004 * @date 05/09/2013 00005 * @author F.BLANC LAAS-CNRS 00006 * http://homepages.laas.fr/fblanc/ 00007 */ 00008 00009 #include "AD8556.h" 00010 00011 /** 00012 * @brief Constructor. 00013 * 00014 * @param dig 00015 00016 */ 00017 AD8556::AD8556(PinName dig) : _dig(dig) 00018 { 00019 } 00020 00021 /** 00022 * @brief Destructor. 00023 */ 00024 AD8556::~AD8556() 00025 { 00026 } 00027 00028 00029 00030 00031 00032 /** 00033 * @brief init 00034 * @param mode 00035 * @param First_Stage_Gain_Code 00036 * @param Second_Stage_Gain_Code 00037 * @param Vdac_Code 00038 */ 00039 int AD8556::init(unsigned char mode,unsigned char First_Stage_Gain_Code, unsigned char Second_Stage_Gain_Code,unsigned char Vdac_Code) 00040 { 00041 trame(ADC_Second_Stage_Gain_Code,mode,Second_Stage_Gain_Code); 00042 trame(ADC_First_Stage_Gain_Code,mode,First_Stage_Gain_Code); 00043 trame(ADC_Output_Offset_Code,mode,Vdac_Code); 00044 return 0; 00045 } 00046 00047 /** 00048 * @brief trame 00049 * @param parameter 00050 * @param mode 00051 * @param data 00052 */ 00053 void AD8556::trame(unsigned char parameter,unsigned char mode,unsigned char data) 00054 { 00055 //12-Bit Start of Packet 1000 0000 0001 00056 write_bit(1); 00057 for(unsigned char i=0; i<10; ++i) 00058 write_bit(0); 00059 write_bit(1); 00060 //2-Bit Function 00061 switch (mode) { 00062 case ADC_MODE_SENSE_CURENT : 00063 write_bit(0); 00064 write_bit(0); 00065 break; 00066 case ADC_MODE_SIMULATION : 00067 write_bit(0); 00068 write_bit(1); 00069 break; 00070 case ADC_MODE_FUSE : 00071 write_bit(1); 00072 write_bit(0); 00073 break; 00074 case ADC_MODE_READ : 00075 write_bit(1); 00076 write_bit(1); 00077 break; 00078 } 00079 //2-Bit Parameter 00080 switch (parameter) { 00081 case ADC_Second_Stage_Gain_Code : 00082 write_bit(0); 00083 write_bit(0); 00084 break; 00085 case ADC_First_Stage_Gain_Code : 00086 write_bit(0); 00087 write_bit(1); 00088 break; 00089 case ADC_Output_Offset_Code : 00090 write_bit(1); 00091 write_bit(0); 00092 break; 00093 case ADC_Other_Functions : 00094 write_bit(1); 00095 write_bit(1); 00096 break; 00097 } 00098 00099 00100 //2-Bit Dummy 10 00101 write_bit(1); 00102 write_bit(0); 00103 //8-Bit Value 00104 for(char i=0; i<8; ++i) { 00105 write_bit( data & (0x80>>i) ); 00106 } 00107 //12-Bit End of Packet 1000 0000 0001 00108 write_bit(0); 00109 for(unsigned char i=0; i<10; ++i) 00110 write_bit(1); 00111 write_bit(0); 00112 } 00113 00114 /** 00115 * @brief write_bit 00116 * 00117 * @param bit 1 or 0 00118 */ 00119 void AD8556::write_bit(unsigned char bit) 00120 { 00121 _dig = 0; 00122 _dig.output(); 00123 wait_us(10); 00124 _dig = 1; 00125 if ( bit ) 00126 wait_us(50); //1 00127 wait_us(5); 00128 _dig = 0; 00129 wait_us(10); 00130 } 00131 00132 /** 00133 * @brief vdac 00134 * @param vdac consigne (volt) 00135 * @param vdd positive voltage supply (volt) 00136 * @param vss nagative voltage supply (volt) 00137 * @param mode 00138 */ 00139 void AD8556::prog_vdac(float vdac,float vdd,float vss, unsigned char mode) 00140 { 00141 unsigned char Vdac_Code; 00142 Vdac_Code=256*(vdac-vss)/(vdd-vss)-0.5; 00143 trame(ADC_Output_Offset_Code,mode,Vdac_Code); 00144 00145 } 00146 /** 00147 * @brief prog_gain 00148 * @param gain 70 to 1280 00149 * @param mode 00150 */ 00151 void AD8556::prog_gain(float gain, unsigned char mode) 00152 { 00153 float Second_Stage_Gain; 00154 int First_Stage_Gain_Code; 00155 if (gain<70) { 00156 trame(ADC_Second_Stage_Gain_Code,mode,0); 00157 trame(ADC_First_Stage_Gain_Code,mode,0); 00158 } else if (gain<100) { 00159 trame(ADC_Second_Stage_Gain_Code,mode,0); 00160 Second_Stage_Gain=17.5; 00161 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00162 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00163 } else if (gain<140) { 00164 trame(ADC_Second_Stage_Gain_Code,mode,1); 00165 int First_Stage_Gain_Code=(int)gain/25; 00166 Second_Stage_Gain=25; 00167 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00168 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00169 } else if (gain<200) { 00170 trame(ADC_Second_Stage_Gain_Code,mode,2); 00171 Second_Stage_Gain=35; 00172 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00173 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00174 } else if (gain<280) { 00175 trame(ADC_Second_Stage_Gain_Code,mode,3); 00176 Second_Stage_Gain=50; 00177 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00178 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00179 } else if (gain<400) { 00180 trame(ADC_Second_Stage_Gain_Code,mode,4); 00181 Second_Stage_Gain=70; 00182 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00183 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00184 } else if (gain<560) { 00185 trame(ADC_Second_Stage_Gain_Code,mode,5); 00186 Second_Stage_Gain=100; 00187 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00188 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00189 } else if (gain<800) { 00190 trame(ADC_Second_Stage_Gain_Code,mode,6); 00191 Second_Stage_Gain=140; 00192 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00193 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00194 } else if (gain<1280) { 00195 trame(ADC_Second_Stage_Gain_Code,mode,7); 00196 Second_Stage_Gain=200; 00197 First_Stage_Gain_Code=(int)(((gain/Second_Stage_Gain)-4.0)*66.7); 00198 trame(ADC_First_Stage_Gain_Code, mode, First_Stage_Gain_Code); 00199 } else if (gain>=1280) { 00200 trame(ADC_Second_Stage_Gain_Code,mode,7); 00201 trame(ADC_First_Stage_Gain_Code, mode, 127); 00202 } 00203 00204 }
Generated on Mon Jul 18 2022 13:22:21 by
1.7.2
Analog Devices AD8556