文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>pre-charge

pre-charge

时间:2010-09-19  来源:xxha000721

Precharge

手机上电池,预充电处理,如果发现电池电压过低 低于3.5V ,则检查是否有充电器或USB ,如果有则充电,如果没有就poweroff。   

void PrechargeCheck()
{
        int avg_voltage = 0;
        int counts = 0;
    int i, j;
        UINT8_T val;
        printf(NULL, "N80 prcharge enable.");

        avg_voltage = Get_Voltage();

        if ( avg_voltage > 3550 )  //判断电池电压
                return;
        else{
                if ( Detect_charging() ){
                        printf (NULL, "Charger is inserted !");
                        precharge_init();   //开始充电
                }
                else{
                        AddMessage((UINT8_T*) ("voltage is less than 3.5 and do not has charger .\0"));
                        do_powerdown();   //关机
                }
        }

        do{                              //一直充电,知道VBAT>3.5V
                avg_voltage = Get_Voltage();

                if ( Detect_charging() == 0 ){
                        do_powerdown();
                }

        printf(NULL, "voltage = %d. ", avg_voltage );
        for(i = 0; i < 5 ; i++){
            for(j = 0; j < 1000; j++){
                Delay(1000);
            }
        }

    }while( avg_voltage < 3550 );

    precharge_off();  //充电结束

}


 测电压代码:

int Get_Voltage(void)
{
    UINT8 val_meas_1 = 0;
    UINT8 val_meas_2 = 0;
        int i = 0, n = 0;
        int total_meas_1 = 0;
        int total_meas_2 = 0;
        int avg_meas_1 = 0;
        int avg_meas_2 = 0;
        int get_val = 0;
        u16 vbat = 0;

    /* 1 << 0 VBAT is measured */
        sanremo_set_bit(0x50, 0);

    for (i = 0 ; i < 5 ; i++ ){
                Delay_us(50);
                sanremo_read(0x6D, &val_meas_1); //MEAS_1 4-11

                sanremo_read(0x6E, &val_meas_2); //MEAS_2 0-3

                if(val_meas_1 == 0){
                        ++n;
                        continue;
                }
        total_meas_1 += val_meas_1;
                total_meas_2 += val_meas_2;
        }
        avg_meas_1 = total_meas_1 / (i - n );
        avg_meas_2 = total_meas_2 / (i - n );
        get_val = ( avg_meas_1 << 4 ) | ( avg_meas_2 & 0xF );
        vbat = (u16) (((u32) get_val * 3 * 18 * 1000) >> 12) / 10;
        printf (NULL, "vbat = %d. ", vbat );
        return vbat;
}


探测有没有充电器连上  

int Detect_charging()
{
    UINT8 val;
    sanremo_read(0x02, &val); //Status Register

    if(val & ( 1 << 2 ) ){
        return 1;
        }
        else{
                printf (NULL, "Charger is not inserted or removed !");
                return 0;
        }
}

precharge-off: 

static void precharge_off()
{
        UINT8_T val;
        AddMessage((UINT8_T*) ("Turn off Fast-Charge .\0"));
        sanremo_read(0x48, &val);
        val &= ~( 3 << 0 );
        sanremo_write( 0x48, val );
        printf(NULL, "0x48 val = 0x%x.", val);
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载