Beispiel #1
0
//! calibrates sensors. This function takes 3-4 minutes.
void reconos_calibrate_temperature_sensors(void){
    int i, f1, f2;
    sensor_array_int m1,m2;
    float diode1, diode2;

    // init
    for (i=0;i<NUM_SENSORS;i++){
         gradients[i] = 0;
         offsets[i]   = 0;
         m1[i]        = 0;
         m2[i]        = 0;
    }

    // measurement m1
    stop_heating();
    wait_for_stable_temperature(0.3, 20);
    diode1 = sysmon_temp_reg() * TEMPERATURE_FACTOR;
    diode1 -= 273.15;
#ifdef UPBDBG_RECONOS_DEBUG
    diag_printf("\nmake 1st calibration measurement...");
#endif
    sensor_measure();
#ifdef UPBDBG_RECONOS_DEBUG
    diag_printf("done\r\n");
#endif
    for(i = 0; i < NUM_SENSORS; i++){
        m1[i] = sensor[i];
    }

    // measurement m2
    start_heating();
    wait_for_stable_temperature(0.3, 20);
    diode2 = sysmon_temp_reg() * TEMPERATURE_FACTOR;
    diode2 -= 273.15;
#ifdef UPBDBG_RECONOS_DEBUG
    diag_printf("\nmake 2nd calibration measurement...");
#endif
    sensor_measure();
#ifdef UPBDBG_RECONOS_DEBUG
    diag_printf("done\n");
#endif
    for(i = 0; i < NUM_SENSORS; i++){
        m2[i] = sensor[i];
    }
    stop_heating();

#ifdef UPBDBG_RECONOS_DEBUG
    diag_printf("\nsensor calibration (T1=%d.%03d, T2=%d.%03d)\n", (int)diode1, ((int)(diode1*1000))%1000, (int)diode2, ((int)(diode2*1000))%1000);
#endif

    // self-calibration
    for(i = 0; i < NUM_SENSORS; i++){
        f1 = (int) m1[i];
        f2 = (int) m2[i];
        gradients[i]  = (diode2-diode1);
        gradients[i] /= (f2-f1);
        offsets[i]  = diode1;
        offsets[i] -= (gradients[i]*m1[i]);
    }
}
Beispiel #2
0
void manual_heating(){
	while (!autoMode){
		if (SWITCH_ON){
		   start_heating();
		   SWITCH_LED_HIGH;
		}
		else{
		   stop_heating();
		   SWITCH_LED_LOW();
		}
		_delay_ms(100);
	}
}
Beispiel #3
0
void startHeating (uint8_t level){

	uint8_t i;
	uint8_t working=0, stopping=0;

	setSpeed (level, &working, &stopping);

	if (autoMode){
		for (i=0; i < working ; i ++){
			start_heating();
			_delay_ms(800);
		}
	}

	if(autoMode){
		for (i=0; i < stopping ; i ++){
			stop_heating();
			_delay_ms(800);
		}
	}
}