コード例 #1
0
void light_dh_pwm_adj_proc(void *Targ) {
	uint8 i;
	for (i = 0; i < PWM_CHANNEL; i++) {
		duty_now[i] = (duty_now[i] * 15 + current_duty[i]) >> 4;
		if ( ABS_MINUS(duty_now[i],current_duty[i]) < 20)
			duty_now[i] = current_duty[i];
		user_light_set_duty(duty_now[i], i);
	}

	//os_printf("duty:%u,%u,%u\r\n", pwm.duty[0],pwm.duty[1],pwm.duty[2] );
	pwm_start();

	if (check_pwm_current_duty_diff()) {
		change_finish = 0;
		os_timer_disarm(&timer_pwm_adj);
		os_timer_setfn(&timer_pwm_adj,
				(os_timer_func_t *) light_dh_pwm_adj_proc, NULL);
		os_timer_arm(&timer_pwm_adj, min_ms, 0);
	} else {
		os_printf("finish\n");
		change_finish = 1;
		//light_save_target_duty();
		os_timer_disarm(&timer_pwm_adj);
		light_pwm_smooth_adj_proc();
	}

}
コード例 #2
0
void light_pwm_dh_adj_proc(void *Targ)
{
    uint8 i;
    for(i=0;i<PWM_CHANNEL;i++){ 
        
        duty_now[i] = (duty_now[i]*7 + current_duty[i])>>3;
        
        if( ABS_MINUS(duty_now[i],current_duty[i])<20 ){
            duty_now[i] = current_duty[i];
        }
        user_light_set_duty(duty_now[i],i);
    }
    //printf("duty:%u,%u,%u\r\n", duty_now[0],duty_now[1],duty_now[2] );
//    pwm_init(light_param.pwm_period, light_param.pwm_duty,PWM_CHANNEL,pwmio_info); //lujian
    
    pwm_start();	
    if(check_pwm_current_duty_diff()){
        change_finish = 0;
        os_timer_disarm(&timer_pwm_adj);
        os_timer_setfn(&timer_pwm_adj, (os_timer_func_t *)light_pwm_dh_adj_proc, NULL);
        os_timer_arm(&timer_pwm_adj, min_ms, 0);
    }
    else{
        //printf("finish\n");
        change_finish = 1;  
        //light_save_target_duty();
        os_timer_disarm(&timer_pwm_adj);
        light_pwm_smooth_adj_proc();
    }

}