This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
The TIDA-010042 reference design shows Load Current is measured on PJ.0 but the MSP430F512 data sheet does not show access to the internal ADC as an option for that pin. Per my data sheet, access to ADC channels is provided via P1.0 - P1.5, and P3.5 - P3.7. Perhaps a typo in one of these docs or I am misinterpreting something. Would one of you kind folks provide guidance here?
Hi Bob,
Thanks for posting your question on E2E. I downloaded the code for TIDA-01-0042, and I found in 'main.c' that it uses the comparator functionality of this pin, CB6. This approach is probably easier and more efficient than using the ADC since it's comparing the signal to a certain threshold.
/* *************************************************************************************** * * Call this function to initialize the comparator for load current (L_I) monitoring * * Since over-discharge of the battery can shorten the expected battery life and lead to * * severe damage, the load needs to be disabled if overcurrent occurs * * *************************************************************************************** */ void Init_Comparator(void) { CBCTL0 |= CBIPEN + CBIPSEL_6; // Enable V+, input channel CB6 CBCTL1 |= CBPWRMD_1; // Normal power mode switch(Load_I_Limit & 0x03) // Load current limit = .103125 * (CBREF + 1) / (Amp_Gain * Shunt_Resistance) { case 0x00: // 5A -- actual 4.13A CBCTL2 = CBRS_1 + CBRSEL + CBREF1_3 + CBREF0_3; break; case 0x01: // 10A -- actual 9.28A CBCTL2 = CBRS_1 + CBRSEL + CBREF1_8 + CBREF0_8; break; case 0x02: // 15A -- actual 14.44A CBCTL2 = CBRS_1 + CBRSEL + CBREF1_13 + CBREF0_13; break; case 0x03: // 20A -- actual 19.59A CBCTL2 = CBRS_1 + CBRSEL + CBREF1_18 + CBREF0_18; break; default: break; } // end switch CBCTL3 |= BIT6; // Input buffer disable at PJ.0/CB6 __delay_cycles(7500); // Delay for the reference to settle CBINT &= ~(CBIFG + CBIIFG); // Clear any errant interrupts CBINT |= CBIE; // Enable comparator B interrupt on rising edge of CBIFG CBCTL1 |= CBON; // Enable comparator B } // end Init_Comparator
Regards,
James