Я пытаюсь связаться с BQ24259 через I2C, используя PIC16LF1554. В 7-м регистре устройства есть бит, которым можно отключить батарею. Я использовал Mplab MCC для настройки параметров I2C. Используя пример кода в заголовочных файлах, я написал аналогичную функцию.
вот соответствующий фрагмент кода
#define RETRY_MAX 100
#define ON 0x4B //register 7 toggle 5th bit to turn ON/OFF
#define OFF 0x6B
I2C_MESSAGE_STATUS status;
uint16_t timeOut;
uint8_t writeBuffer[1]; // writeBuffer[0] = 07, writeBuffer[1] = data 01001011b(on) 01101011b(off)
uint8_t stat;
uint16_t address = (0x6B/2) ; //Bit shifting to the write, and having '0' for write opertaoin, at MSB
uint8_t bat_fet(uint8_t val){
writeBuffer[0] = 7; //slave's seventh register
writeBuffer[1] = val;
timeOut=0;
while(status != I2C_MESSAGE_FAIL){
I2C_MasterWrite( writeBuffer, // address of data to be sent
2, // number of data bytes
address, // address of the peripheral
&status); // address of status register
while(status == I2C_MESSAGE_PENDING);
if(status == I2C_MESSAGE_COMPLETE){
return 1;
break;
}
if(timeOut == RETRY_MAX){
return 0;
break;
}
else
timeOut++;
}
if(status == I2C_MESSAGE_FAIL)
return 0;
}
но он не работает, ничего не происходит, иногда контроллер просто зависает, в основном продолжает работать. Я подключил светодиод к неиспользуемому выводу ввода-вывода и запрограммировал его на включение всякий раз, когда функция возвращает 1, и он включается. Но батарея тоже остается включенной.
Точно так же я пытаюсь использовать АЦП 1 на рис., чтобы проверить напряжение батареи,
вот код,
uint16_t check_bat_voltage(){
uint16_t bat_v;
ADC1_StartConversion(01011); //i am using Channel AN11, but no matter what variation of channel and AN11 i passed, it just wouldn't recognize. so i just pass the 5 bit values of the ADCON1 register.
while(ADC1_IsConversionDone());
bat_v = ADC1_GetConversionResult();
//digital value = [analog voltage / (vref+ - vref-)] * 1024
//analog value minimum = 2.5/2, voltage divider network
//vref+ 5
//vref- 0
// 1.25/5 * 1024 = 256
return bat_v;
}
но опять ничего не происходит. Может ли кто-нибудь просмотреть его? Я просто застрял. Спасибо.
Скриншоты MCC тоже могу приложить, может я не правильно настроил периферию.
P.S. я инициализирую оба модуля в main().