80 DDRD = DDRD | B00111100;
96 uint8_t user_register;
98 if (Serial.available())
101 Serial.println(user_command);
104 switch (user_command)
112 Serial.print(F(
"\nAddress (in hex with '0x' prefix) of register to read: "));
115 Serial.println(user_register, HEX);
118 Serial.println(F(
" Invalid input."));
124 Serial.print(
"Register data: 0x");
125 Serial.println(data, HEX);
130 Serial.print(F(
"\nAddress (in hex with '0x' prefix) of register to write: "));
133 Serial.println(user_register, HEX);
136 Serial.println(F(
" Invalid input."));
139 Serial.print(F(
"Data (in hex with '0x' prefix) to write: "));
141 Serial.println(data, HEX);
146 Serial.print(data, HEX);
147 Serial.print(
" written to register 0x");
148 Serial.println(user_register, HEX);
153 Serial.print(F(
"\nAddress (in hex with '0x' prefix) of register: "));
156 Serial.println(user_register, HEX);
159 Serial.println(F(
" Invalid input."));
162 Serial.print(F(
"Bit position (0-7) to set: "));
164 if (data < 0 || data > 7)
166 Serial.println(F(
" Invalid input."));
169 Serial.println(data, DEC);
173 Serial.print(
"Bit set. Register data is now 0x");
175 Serial.println(data, HEX);
180 Serial.print(F(
"\nAddress (in hex with '0x' prefix) of register: "));
183 Serial.println(user_register, HEX);
186 Serial.println(F(
" Invalid input."));
189 Serial.print(F(
"Bit position (0-7) to clear: "));
191 if (data < 0 || data > 7)
193 Serial.println(F(
"Invalid input."));
196 Serial.println(data, DEC);
200 Serial.print(
"Bit cleared. Register data is now 0x");
202 Serial.println(data, HEX);
207 Serial.print(F(
"\nAddress (in hex with '0x' prefix) of register to write: "));
210 Serial.println(user_register, HEX);
213 Serial.println(F(
" Invalid input."));
216 Serial.print(F(
"Data (in hex with '0x' prefix) to write: "));
218 Serial.println(data, HEX);
223 Serial.print(data, HEX);
224 Serial.print(
" written to register 0x");
225 Serial.println(user_register, HEX);
249 Serial.print(F(
"Error: No Acknowledge. \n"));
260 Serial.println(F(
"\nWarning: Demo board not detected. Linduino will attempt to proceed."));
266 Serial.print(F(
"\n*****************************************************************\n"));
267 Serial.print(F(
"* LTM9100 Demonstration Program *\n"));
268 Serial.print(F(
"* *\n"));
269 Serial.print(F(
"* This program demonstrates sending and receiving data from *\n"));
270 Serial.print(F(
"* the LTM9100 via I2C. *\n"));
271 Serial.print(F(
"* *\n"));
272 Serial.print(F(
"* Set the baud rate to 115200 and select the newline terminator.*\n"));
273 Serial.print(F(
"* *\n"));
274 Serial.print(F(
"*****************************************************************\n"));
281 Serial.print(F(
"\nRead/Write Registers\n\n"));
282 Serial.print(F(
" 1-Read All Registers\n"));
283 Serial.print(F(
" 2-Read Single Register\n"));
284 Serial.print(F(
" 3-Write Single Register\n"));
285 Serial.print(F(
" 4-Set Bit\n"));
286 Serial.print(F(
" 5-Clear Bit\n"));
287 Serial.print(F(
" 6-Write Register to Mass Write Address\n"));
288 Serial.println(F(
" 7-Read Status"));
289 Serial.println(F(
" 8-Read/Write Faults"));
290 Serial.println(F(
" 9-Read/Write Alerts"));
291 Serial.println(F(
" 10-Read/Write Controls"));
292 Serial.println(F(
" 11-Read/Write ADC parameters"));
293 Serial.println(F(
" 12-Continuously Read Registers"));
294 Serial.print(F(
"\nEnter a command: "));
307 Serial.print(F(
"\nRead Status\n\n"));
308 Serial.print(F(
" 1-Gate Status\n"));
309 Serial.print(F(
" 2-PG Input Pin Status\n"));
310 Serial.print(F(
" 3-FET Status\n"));
311 Serial.print(F(
" 4-Overcurrent Condition\n"));
312 Serial.print(F(
" 5-Undervoltage Condition\n"));
313 Serial.print(F(
" 6-Overvoltage Condition\n"));
314 Serial.print(F(
" m-Main Menu\n"));
315 Serial.print(F(
"\nEnter a command: "));
318 if (user_command ==
'm')
319 Serial.print(F(
"m\n"));
321 Serial.println(user_command);
324 switch (user_command)
328 Serial.print(F(
"Gate State: "));
329 (
data)?Serial.println(F(
"On")):Serial.println(F(
"Off"));
333 Serial.print(F(
"PG Input State: "));
334 (
data)?Serial.println(F(
"High")):Serial.println(F(
"Low"));
338 Serial.print(F(
"FET State: "));
339 (
data)?Serial.println(F(
"Short")):Serial.println(F(
"No Short"));
343 Serial.print(F(
"Overcurrent: "));
344 (
data)?Serial.println(F(
"Yes")):Serial.println(F(
"No"));
348 Serial.print(F(
"Undervoltage: "));
349 (
data)?Serial.println(F(
"Yes")):Serial.println(F(
"No"));
353 Serial.print(F(
"Overvoltage: "));
354 (
data)?Serial.println(F(
"Yes")):Serial.println(F(
"No"));
357 if (user_command !=
'm')
358 Serial.println(
"Invalid Selection");
363 while ((user_command !=
'm') && (ack != 1));
371 Serial.println(F(
"0=Clear/Disable, 1=Set/Enable:"));
374 Serial.println(F(
" Invalid input."));
392 Serial.print(F(
"\nRead/Write Faults\n\n"));
393 Serial.print(F(
" 1-Read PGIO_HIGH\n"));
394 Serial.print(F(
" 2-Read FET_FAULT\n"));
395 Serial.print(F(
" 3-Read OC_FAULT\n"));
396 Serial.print(F(
" 4-Read UV_FAULT\n"));
397 Serial.print(F(
" 5-Read OV_FAULT\n"));
398 Serial.print(F(
" 6-Clear/Set PGIO_HIGH\n"));
399 Serial.print(F(
" 7-Clear/Set FET_FAULT\n"));
400 Serial.print(F(
" 8-Clear/Set OC_FAULT\n"));
401 Serial.print(F(
" 9-Clear/Set UV_FAULT\n"));
402 Serial.print(F(
" 10-Clear/Set OV_FAULT\n"));
406 Serial.print(F(
"\nRead/Write Alerts\n\n"));
407 Serial.print(F(
" 1-Read PGIO_OUT\n"));
408 Serial.print(F(
" 2-Read FET_ALERT\n"));
409 Serial.print(F(
" 3-Read OC_ALERT\n"));
410 Serial.print(F(
" 4-Read UV_ALERT\n"));
411 Serial.print(F(
" 5-Read OV_ALERT\n"));
412 Serial.print(F(
" 6-Disable/Enable PGIO_OUT\n"));
413 Serial.print(F(
" 7-Disable/Enable FET_ALERT\n"));
414 Serial.print(F(
" 8-Disable/Enable OC_ALERT\n"));
415 Serial.print(F(
" 9-Disable/Enable UV_ALERT\n"));
416 Serial.print(F(
" 10-Disable/Enable OV_ALERT\n"));
418 Serial.print(F(
" m-Main Menu\n"));
419 Serial.print(F(
"\nEnter a command: "));
422 if (user_command ==
'm')
423 Serial.print(F(
"m\n"));
425 Serial.println(user_command);
428 switch (user_command)
432 Serial.print(F(
"PGIO: "));
433 (
data)?Serial.println(F(
"Yes")):Serial.println(F(
"No"));
437 Serial.print(F(
"FET Short Detected: "));
438 (
data)?Serial.println(F(
"Fault")):Serial.println(F(
"No Fault"));
442 Serial.print(F(
"Overcurrent: "));
443 (
data)?Serial.println(F(
"Fault")):Serial.println(F(
"No Fault"));
447 Serial.print(F(
"Undervoltage: "));
448 (
data)?Serial.println(F(
"Fault")):Serial.println(F(
"No Fault"));
452 Serial.print(F(
"Overvoltage: "));
453 (
data)?Serial.println(F(
"Fault")):Serial.println(F(
"No Fault"));
471 if (user_command !=
'm')
472 Serial.println(
"Invalid Selection");
477 while ((user_command !=
'm') && (ack != 1));
492 Serial.print(F(
"\nRead/Write Controls\n\n"));
493 Serial.print(F(
" 1-Read PGIO_CONFIG\n"));
494 Serial.print(F(
" 2-Read ADC_WRITE\n"));
495 Serial.print(F(
" 3-Read GATE_CTRL\n"));
496 Serial.print(F(
" 4-Read OC_AUTO\n"));
497 Serial.print(F(
" 5-Read UV_AUTO\n"));
498 Serial.print(F(
" 6-Read OV_AUTO\n"));
499 Serial.print(F(
" 7-Disable/Enable PGIO_CONFIG\n"));
500 Serial.print(F(
" 8-Disable/Enable ADC_WRITE\n"));
501 Serial.print(F(
" 9-Disable/Enable GATE_CTRL\n"));
502 Serial.print(F(
" 10-Disable/Enable OC_AUTO\n"));
503 Serial.print(F(
" 11-Disable/Enable UV_AUTO\n"));
504 Serial.print(F(
" 12-Disable/Enable OV_AUTO\n"));
505 Serial.print(F(
" m-Main Menu\n"));
506 Serial.print(F(
"\nEnter a command: "));
509 if (user_command ==
'm')
510 Serial.print(F(
"m\n"));
512 Serial.println(user_command);
515 switch (user_command)
520 Serial.print(F(
"PGIO Config: "));
522 Serial.println(F(
"Power Good, Open Drain"));
523 else if (data & 0x80)
524 Serial.println(F(
"General Purpose Input"));
526 Serial.println(F(
"General Purpose Output"));
530 Serial.print(F(
"ADC write: "));
531 (
data)?Serial.println(F(
"Enabled")):Serial.println(F(
"Disabled"));
534 Serial.print(F(
"Gate State: "));
535 (
data)?Serial.println(F(
"Enabled")):Serial.println(F(
"Disabled"));
540 Serial.print(F(
"Overcurrent: "));
541 (
data)?Serial.println(F(
"Enabled")):Serial.println(F(
"Disabled"));
545 Serial.print(F(
"Undervoltage: "));
546 (
data)?Serial.println(F(
"Enabled")):Serial.println(F(
"Disabled"));
550 Serial.print(F(
"Overvoltage: "));
551 (
data)?Serial.println(F(
"Enabled")):Serial.println(F(
"Disabled"));
554 Serial.println(F(
"0,2=Power Good, 1=General Purpose Output, 3=General Purpose Input:"));
557 Serial.println(F(
" Invalid input."));
582 if (user_command !=
'm')
583 Serial.println(
"Invalid Selection");
588 while ((user_command !=
'm') && (ack != 1));
594 Serial.print(F(
"Current value: "));
595 Serial.println(*data, 4);
596 Serial.print(F(
"Enter new value: "));
610 Serial.print(F(
"\nRead/Write ADCs \n\n"));
611 Serial.print(F(
" 1-Read ADC Current Sense Voltage\n"));
612 Serial.print(F(
" 2-Read ADIN Voltage\n"));
613 Serial.print(F(
" 3-Read ADIN2 Voltage or Temperature\n"));
614 Serial.print(F(
" 4-Configure Current Sense Resistor(ohms)\n"));
615 Serial.print(F(
" 5-Configure ADIN Gain(defaults: 0.035[A], 0.006[B])\n"));
616 Serial.print(F(
" 6-Configure ADIN2 Gain(defaults: 0.035[A], 0.006[B], or 0.004V/Kelvin[A/B])\n"));
617 Serial.print(F(
" m-Main Menu\n"));
618 Serial.print(F(
"\nEnter a command: "));
621 if (user_command ==
'm')
622 Serial.print(F(
"m\n"));
625 Serial.println(user_command);
629 switch (user_command)
650 if (user_command !=
'm')
651 Serial.println(
"Invalid Selection");
656 while ((user_command !=
'm') && (ack != 1));
static uint8_t i2c_address
static float sense_resistor
#define LTM_9100_CTRL_D_REG
#define LTM_9100_FAULT_UV
#define LTM_9100_STATUS_A_REG
unsigned char user_command
static void print_prompt()
#define LTM_9100_FAULT_PGI
int8_t LTM9100_bit_clear(uint8_t i2c_address, uint8_t register_address, uint8_t bit_number)
Clears any bit inside the LTM9100 using the standard I2C repeated start format.
Header File for Linduino Libraries and Demo Code.
#define LTM_9100_CTRL_ADC_WRITE
#define LTM_9100_FAULT_B_REG
static void loop()
Repeats Linduino loop.
int8_t LTM9100_bit_set(uint8_t i2c_address, uint8_t register_address, uint8_t bit_number)
Sets any bit inside the LTM9100 using the standard I2C repeated start format.
static int8_t ask_clear_set_bit(uint8_t i2c_address, uint8_t register_address, uint8_t bit_number)
#define LTM_9100_STATUS_FET
int8_t LTM9100_bit_read(uint8_t i2c_address, uint8_t register_address, uint8_t bit_number, uint8_t *register_data)
Read the bit specified by bit_number from the LTM9100.
#define LTM_9100_SENSE_E_REG
void i2c_enable()
i2c_enable or quikeval_I2C_init must be called before using any of the other I2C routines.
int8_t LTM9100_register_read(uint8_t i2c_address, uint8_t register_address, uint8_t *register_data)
Reads an 8-bit register from the LTM9100 using the standard repeated start format.
union LT_union_int32_4bytes data
static int8_t menu_read_write_controls()
#define LTM_9100_CTRL_PGIO_CFG
static void set_adc_scaling_factor(float *data)
#define LTM_9100_FAULT_FET
uint8_t reg_read_list[10]
#define LTM_9100_STATUS_OC
#define LTM_9100_FAULT_OC
int8_t LTM9100_register_write(uint8_t i2c_address, uint8_t register_address, uint8_t register_data)
Writes to an 8-bit register inside the LTM9100 using the standard I2C repeated start format...
#define LTM_9100_STATUS_PGI
#define LTM_9100_STATUS_UV
boolean valid_register(uint8_t user_register, uint8_t register_array[], uint8_t array_length)
Check if user_register is a valid register for the LTM9100.
#define LTM_9100_CTRL_PGIO_CFG_MASK
LT_I2C: Routines to communicate with ATmega328P's hardware I2C port.
#define LTM_9100_STATUS_GATE
int8_t LTM9100_continuous_read_all_registers(uint8_t i2c_address)
Read all LTM9100 registers and output to the serial console every second until a key press is detecte...
static int8_t menu_read_status()
#define LTM_9100_ADIN_I_REG
uint8_t reg_write_list[9]
#define LTM_9100_ADIN2_G_REG
#define LTM_9100_CTRL_GATE_CTRL
#define LTM_9100_STATUS_OV
#define LTM_9100_FAULT_OV
int8_t LTM9100_print_all_registers(uint8_t i2c_address)
Read all LTM9100 registers and output to the serial console.
static int8_t menu_read_write_faults_alerts(bool alerts)
LTM9100: Anyside™ High Voltage Isolated Switch Controller with I²C Command and Telemetry.
#define LTM_9100_ALERT_C_REG
static void print_warning_prompt()
Prints a warning if the demo board is not detected.
int8_t LTM9100_adc_read(uint8_t i2c_address, uint8_t base_address, float *register_data)
Read the specified ADC value (SENSE, ADIN, ADIN2) and output in human readable format to the serial c...
static int8_t menu_read_write_adc_params()
static void setup()
Initialize Linduino.
static void print_title()
Prints the title block when program first starts.