11 return_val = (return_val & 0xFEFE) | 0x0012;
14 else if (gpio_number == 1)
17 return_val = (return_val & 0xFEFB) | 0x0028;
34 return_val = (return_val & 0xFEEE) | 0x0002;
37 else if (gpio_number == 1)
40 return_val = (return_val & 0xFEDB) | 0x0008;
58 Serial.print(F(
"\nDISCONNECT CHANNEL 0 : "));
60 idac_reg = 0xFCFF & return_val;
63 else if (dac_number == 1)
65 Serial.print(F(
"\nDISCONNECT CHANNEL 1 : "));
67 idac_reg = 0xFCFF & return_val;
72 Serial.print(F(
"\nERROR CANNOT DISCONNECT NON-EXISTENT CHANNEL"));
75 Serial.print(F(
"\n\n"));
87 dac_value = (uint16_t)dac_value_8;
91 Serial.print(F(
"\nHARD CONNECT CHANNEL 0 : "));
94 idac_reg = (0xFC00 & return_val) | (0x00FF & dac_value) | idac_ctrl ;
97 else if (dac_number == 1)
99 Serial.print(F(
"\nHARD CONNECT CHANNEL 1 : "));
102 idac_reg = (0xFC00 & return_val) | (0x00FF & dac_value) | idac_ctrl ;
107 Serial.print(F(
"\nERROR CANNOT HARD CONNECT NON-EXISTENT CHANNEL"));
121 int soft_connect_delay = 1000;
127 if ((return_val & 0x001B) == 0x0000)
131 if ((return_val & 0x0300) == 0x0000)
136 Serial.print(F(
"\nSOFT CONNECT CHANNEL 0 : "));
139 idac_reg = (0xFC00 & return_val) | (0x00FF & idac_value) | idac_ctrl ;
141 delay(soft_connect_delay);
143 if ((return_val & 0x0300) == 0x0000)
145 Serial.print(F(
"\nCHANNEL 0 FAILED TO CONNECT"));
146 Serial.print(F(
"\n FAULT REGISTER: "));
148 Serial.print(F(
"0x"));
149 Serial.println(return_val, HEX);
153 Serial.print(F(
"\nCHANNEL 0 SOFT CONNECT SUCCESS"));
160 Serial.print(F(
"\nCHANNEL 0 ALREADY CONNECTED"));
165 Serial.print(F(
"\nERROR: CANNOT SOFT-CONNECT WITH FAULTS ON CHANNEL 0: "));
166 Serial.println(return_val, HEX);
169 else if (dac_number == 1)
174 if ((return_val & 0x0360) == 0x0000)
178 if ((return_val & 0x0300) == 0x0000)
183 Serial.print(F(
"\nSOFT CONNECT CHANNEL 1 : "));
186 idac_reg = (0xFC00 & return_val) | (0x00FF & idac_value) | idac_ctrl ;
188 delay(soft_connect_delay);
190 if ((return_val & 0x0300) == 0x0000)
192 Serial.print(F(
"\nCHANNEL 1 FAILED TO CONNECT"));
193 Serial.print(F(
"\n FAULT REGISTER: "));
195 Serial.print(F(
"0x"));
196 Serial.println(return_val, HEX);
200 Serial.print(F(
"\nCHANNEL 1 SOFT CONNECT SUCCESS"));
207 Serial.print(F(
"\nCHANNEL 1 ALREADY CONNECTED"));
212 Serial.print(F(
"\nERROR: CANNOT SOFT-CONNECT WITH FAULTS ON CHANNEL 1: "));
213 Serial.println(return_val, HEX);
218 Serial.print(F(
"\nERROR: CANNOT SOFT CONNECT NON-EXISTENT CHANNEL"));
221 Serial.print(F(
"\n\n"));
237 code_in = (code & 0x7FFF);
242 code_in = (code_in + 0x8000);
244 if (channel_number == 0)
246 Serial.print(F(
"\nSERVO CHANNEL 0."));
250 else if (channel_number == 1)
252 Serial.print(F(
"\nSERVO CHANNEL 1."));
257 Serial.print(F(
"\nERROR CANNOT SERVO NON-EXISTENT CHANNEL"));
260 Serial.print(F(
"\n\n"));
267 static float temp_scale = 4;
268 static float temp_offset = 1093;
275 return_val = return_val & 0x7FFF;
277 temperature = ((float(return_val) - temp_offset) / temp_scale);
279 Serial.print(F(
"\n LTC_2970 DIE TEMP: "));
280 Serial.println(temperature, DEC);
281 Serial.print(F(
" HEX VALUE : 0x"));
282 Serial.println(return_val, HEX);
283 Serial.print(F(
"\n\n"));
295 Serial.print(F(
"\n LTC2970_FAULT: "));
296 Serial.print(F(
"0x"));
297 Serial.println(return_val, HEX);
300 Serial.print(F(
"\n LTC2970_FAULT_LA (CLEARED ON READ): "));
301 Serial.print(F(
"0x"));
302 Serial.println(return_val, HEX);
305 Serial.print(F(
"\n LTC2970_FAULT_LA_INDEX: "));
306 Serial.print(F(
"0x"));
307 Serial.println(return_val, HEX);
#define LTC2970_CH1_A_SERVO
#define LTC2970_CH0_A_SERVO
void ltc2970_print_die_temp(LT_SMBus *smbus, uint8_t ltc2970_i2c_address)
Prints die temperature on the LTC2970.
#define LTC2970_FAULT_LA_INDEX
void ltc2970_read_faults(LT_SMBus *smbus, uint8_t ltc2970_i2c_address)
Read FAULT, FAULT_LA, and FAULT_LA_INDEX registers print the results.
virtual void writeWord(uint8_t address, uint8_t command, uint16_t data)=0
SMBus write word command.
static uint8_t ltc2970_i2c_address
void ltc2970_dac_disconnect(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int dac_number)
Disconnect a DAC from its channel.
void ltc2970_servo_to_adc_val(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int channel_number, uint16_t code)
Servo once to a given ADC value.
#define LTC2970_CH0_A_IDAC
Header for LTC2970: Dual I2C Power Supply Monitor and Margining Controller.
int ltc2970_soft_connect_dac(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int dac_number)
soft-connect DACn to its controlled node
void ltc2970_hard_connect_dac(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int dac_number, uint8_t dac_value_8)
Unceremoniously connect DAC0 to the control node set DAC to a hard value no attempt to equalize volta...
#define LTC2970_CH1_A_IDAC
virtual uint16_t readWord(uint8_t address, uint8_t command)=0
SMBus read word command.
void ltc2970_gpio_up(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int gpio_number)
Set GPIO_n high.
void ltc2970_gpio_down(LT_SMBus *smbus, uint8_t ltc2970_i2c_address, int gpio_number)
Set GPIO_n low.