PIC16LF1554を使用してI2Cを通じてBQ24259と通信しようとしています。デバイスの7番目のレジスタには、バッテリをオフにするためのビットがあります。 MplabのMCCを使用してI2C設定を構成しました。ヘッダーファイルのサンプルコードを使用して、私は同様の機能を書いた。MPLABのMCCを使用してI2CとADCを構成する
は、ここでは、コード
#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;
}
が、関連の抜粋であるその、何も起こらない、時々コントローラだけでフリーズする、主にそれが動作し続けて働いていません。私は未使用のIOピンにLEDを接続し、関数が1を返すたびにオンになるようにプログラムし、それがオンになりました。しかし、バッテリーはオンのままです。
同様に、私はバッテリー電圧をチェックするためにPICのADC 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()の両方のモジュールを初期化します。
adcが動作していますが、値が正しく計算されませんでした。私の悪い。 – aamir