void show_Cap13(void) { uint8_t key_pressed; // lcd_clear(); #ifdef POWER_OFF uint8_t times; for (times=0;times<250;) #else while (1) /* wait endless without the POWER_OFF option */ #endif { init_parts(); // set all parts to nothing found // cap.v_loss = 0; // clear vloss for low capacity values (<25pF)! ReadCapacity(TP3, TP1); PartFound = PART_CAPACITOR; #ifdef SamplingADC if (cap.cpre==-12 && cap.cval<100) { // if below 100 pF, try the alternative measuring method for small capacitors cap.cval = sampling_cap(TP3,TP1,0); cap.cpre = sampling_cap_pre; } #endif if (cap.cpre > -15) { /* Capacity below the detection limit */ cap.cpre_max = cap.cpre; // show_cap will display the cap.cval_max value cap.cval_max = cap.cval; show_cap(1); // with [C] at the end of line } else { /* no cap detected */ lcd_line1(); lcd_MEM2_string(CAP_13_str); // 1-||-3 lcd_spaces(LCD_LINE_LENGTH - 3 - _lcd_column); lcd_MEM2_string(CMETER_13_str); // "[C]" at the end of line 1 lcd_line2(); lcd_data('?'); lcd_clear_line(); // clear to end of line 2 #if (LCD_LINES > 2) lcd_line3(); lcd_clear_line(); // clear old Vloss= message #endif } #if defined(POWER_OFF) && defined(BAT_CHECK) Bat_update(times); #endif key_pressed = wait_for_key_ms(SCREEN_TIME); #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 3)) break; #else if (key_pressed != 0) break; #endif #if defined(POWER_OFF) times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ lcd_clear(); // clear to end of line } /* end show_Cap13() */
void set_big_cap_corr(void) { uint8_t key_pressed; int8_t korr; // set the contrast value message_key_released(SetCapCorr_str); // display Capacity correction and wait for key released korr = eeprom_read_byte((uint8_t *)&big_cap_corr); #ifdef POWER_OFF uint8_t times; for (times=0;times<240;) #else while (1) /* wait endless without option POWER_OFF */ #endif { lcd_line2(); if (korr < 0) { lcd_data('-'); DisplayValue16(-korr,-1,'%',3); } else { DisplayValue16(korr,-1,'%',3); } lcd_clear_line(); // clear to end of line key_pressed = wait_for_key_ms(1600); #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 0)) times = 0; // reset counter, operator is active #else if (key_pressed != 0) times = 0; // reset counter, operator is active #endif #endif if(key_pressed >= 130) break; // more than 1.3 seconds #ifdef WITH_ROTARY_SWITCH if (rotary.incre > FAST_ROTATION) break; // fast rotation ends setting of korr korr += rotary.count; // increase or decrease the korr by rotary.count #endif if (key_pressed > 0) { if (key_pressed > 40) { korr++; // longer key press select higher korr value } else { korr--; // decrease the korr } } if (korr > MAX_KORR) korr -= (MAX_KORR - MIN_KORR + 1); if (korr < MIN_KORR) korr += (MAX_KORR - MIN_KORR + 1); #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ eeprom_write_byte((uint8_t *)(&big_cap_corr), (int8_t)korr); // save korr value }
void show_Resis13(void) { uint8_t key_pressed; message_key_released(RESIS_13_str); // "1-|=|-3 .." #ifndef RMETER_WITH_L lcd_set_cursor(0,6); lcd_MEM_string(RL_METER_str); // " [R]" or "[RL]" #endif #ifdef POWER_OFF uint8_t times; for (times=0;times<250;) #else while (1) /* wait endless without the POWER_OFF option */ #endif { init_parts(); // set all parts to nothing found GetResistance(TP3, TP1); GetResistance(TP1, TP3); lcd_line1(); // lcd_set_cursor(0,0); if (ResistorsFound != 0) { show_resis(TP1,TP3,1); } else { /* no resistor found */ #ifdef RMETER_WITH_L lcd_MEM_string(RESIS_13_str); lcd_MEM_string(RL_METER_str+4); // " [R]" or "[RL]" #endif lcd_line2(); lcd_data('?'); // too big #if LCD_LINES>2 lcd_next_line(0); #endif lcd_clear_line(); } #if defined(POWER_OFF) && defined(BAT_CHECK) Bat_update(times); #endif key_pressed = wait_for_key_ms(1000); #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 3)) break; #else if (key_pressed != 0) break; #endif #if defined(POWER_OFF) times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ lcd_clear(); } /* end show_Resis13() */
void set_contrast(void) { uint8_t key_pressed; uint8_t contrast; // set the contrast value message_key_released(CONTRAST_str); // display Contrast and wait for key released contrast = eeprom_read_byte(&EE_Volume_Value); #ifdef POWER_OFF uint8_t times; for (times=0;times<240;) #else while (1) /* wait endless without option POWER_OFF */ #endif { #if ((LCD_ST_TYPE == 7565) || (LCD_ST_TYPE == 1306)) lcd_command(CMD_SET_VOLUME_FIRST); // 0x81 set volume command lcd_command(contrast); // value from 1 to 63 (0x3f) */ #elif (LCD_ST_TYPE == 8812) /* PCF8812 controller */ lcd_command(CMD_SET_EXTENDED_INSTRUCTION); // set extended instruction mode lcd_command(ECMD_SET_CONTRAST | (contrast & 0x7f)); // set the contrast value lcd_command(CMD_SET_NORMAL_INSTRUCTION); // return to normal instruction mode #elif (LCD_ST_TYPE == 8814) /* PCF8814 controller */ lcd_command(CMD_SET_VOP_UPPER | ((contrast >> 5) & 0x07)); // set upper Vop lcd_command(CMD_SET_VOP_LOWER | (contrast & 0x1f)); // set lower Vop #else /* DOGM display */ lcd_command(CMD_SetIFOptions | MODE_8BIT | 0x09); // 2-line / IS=1 lcd_command(CMD1_PowerControl | ((contrast>>4)&0x07)); // booster on,off / set contrast C5:C4 lcd_command(CMD1_SetContrast | (contrast&0x0f)); // set contrast C3:0 lcd_command(CMD_SetIFOptions | MODE_8BIT | 0x08); // 2-line / IS=0 #endif lcd_line2(); DisplayValue16(contrast,0,' ',4); lcd_clear_line(); // clear to end of line key_pressed = wait_for_key_ms(1600); #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 0)) times = 0; // reset counter, operator is active #else if (key_pressed != 0) times = 0; // reset counter, operator is active #endif #endif if(key_pressed >= 130) break; // more than 1.3 seconds #ifdef WITH_ROTARY_SWITCH if (rotary.incre > FAST_ROTATION) break; // fast rotation ends setting of contrast if (rotary.count >= 0) { contrast += rotary.count; // increase the contrast by rotary.count } else { contrast += (MAX_CONTRAST + 1 + rotary.count); // decrease the contrast by rotary.count } #endif if (key_pressed > 0) { if (key_pressed > 40) { contrast++; // longer key press select higher contrast value } else { contrast += MAX_CONTRAST; // decrease the contrast } } contrast &= MAX_CONTRAST; #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ eeprom_write_byte((uint8_t *)(&EE_Volume_Value), (int8_t)contrast); // save contrast value }
/* *************************************************** */ void do_10bit_PWM() { uint8_t key_pressed; uint8_t percent; // requestet duty-cycle in % uint8_t old_perc; // old duty-cycle in % unsigned int pwm_flip; // value for counter to flip the state message_key_released(PWM_10bit_str); // display PWM-Generator and wait for key released // OC1B is connected with 680 Ohm resistor to TP2 (middle test pin) TCCR1A = (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (1<<WGM10); // fast PWM mode, mode 7: count to 10 bit TIMSK1 = 0; // no interrupt used OCR1B = 0xff; // toggle OC1B at this count TIFR1 = (1<<OCF1A) | (1<<OCF1A) | (1<<TOV1); // reset interrupt flags TCCR1C = 0; R_PORT = 0; // set all resistor port outputs to GND #if PROCESSOR_TYP == 644 R_DDR = (1<<PIN_RL1) | (1<<PIN_RL2) | (1<<PIN_RL3); // set TP1, DDD4(TP2) and TP3 to output #else R_DDR = (1<<PIN_RL1) | (1<<PIN_RL3); // set TP1 and TP3 to output #endif ADC_PORT = TXD_VAL; ADC_DDR = (1<<TP1) | TXD_MSK; //connect TP1 to GND #if PROCESSOR_TYP == 1280 DDRB |= (1<<DDB6); // set output enable for OC1B #else DDRB |= (1<<DDB2); // set output enable #endif #ifdef PWM_SERVO TCCR1B = (1<<WGM13) | (1<<WGM12) | SERVO_START; // mode 15, clock divide by 8 or 64 OCR1A = PWM_MAX_COUNT - 1; // clock tics for 20 ms #else OCR1A = 1; // highest frequency TCCR1B = (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); // mode 7, no clock divide #endif key_pressed = 0; old_perc = 0; percent = (SERVO_MAX + SERVO_MIN) / 2; // set to middle #ifdef POWER_OFF uint8_t times; // time limit for (times=0; times<240; ) #else while (1) /* wait endless without option POWER_OFF */ #endif { if (percent != old_perc) { // new duty cycle is requested if (percent >= SERVO_MAX) { percent -= (SERVO_MAX - SERVO_MIN); // reset near to mininum value } #ifdef PWM_SERVO pwm_flip = (((unsigned long)PWM_MAX_COUNT * percent) + 500) / 1000; #else pwm_flip = (((unsigned long)PWM_MAX_COUNT * percent) + 50) / 100; #endif OCR1B = pwm_flip; // new percentage lcd_line2(); // goto line 2 #ifdef PWM_SERVO DisplayValue(((unsigned long)pwm_flip * SERVO_DIV)/MHZ_CPU ,-6,'s',3); lcd_space(); lcd_data('/'); lcd_space(); DisplayValue16(((unsigned long)PWM_MAX_COUNT * SERVO_DIV)/MHZ_CPU, -6,'s',3); #else DisplayValue16((((unsigned long)pwm_flip * 1000) + (PWM_MAX_COUNT/2)) / PWM_MAX_COUNT,-1,'%',5); #endif lcd_clear_line(); old_perc = percent; // update the old duty cycle if (key_pressed > 40) { wait_about300ms(); // wait some time to release the button } } /* end if percent != old_perc */ key_pressed = wait_for_key_ms(1600); if(key_pressed > 130) break; // more than 1.3 seconds #ifdef WITH_ROTARY_SWITCH if (rotary.incre > FAST_ROTATION) break; // fast rotation ends voltage measurement if (rotary.count >= 0) { percent += rotary.count; // increase the duty cycle by rotary.count } else { percent += ((SERVO_MAX-SERVO_MIN) + rotary.count); // decrease the duty cycle by rotary.count } #endif if (key_pressed > 50) { percent += 10; // duty cycle will be increased with 10 } else { if (key_pressed > 0) percent += 1; // duty cycle will be increased with 1 } #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed > 0) || (rotary.incre > 0)) times = 0; // reset the loop counter, operator is active #else if (key_pressed > 0) times = 0; //reset the loop counter, operator is active #endif #endif #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ ADC_DDR = TXD_MSK; // disconnect TP1 TCCR1B = 0; // stop counter TCCR1A = 0; // stop counter R_DDR = 0; // switch resistor ports to Input #if PROCESSOR_TYP == 1280 DDRB &= ~(1<<DDB6); // disable output #else DDRB &= ~(1<<DDB2); // disable output #endif } /* end do_10bit_PWM */
/* *************************************************** */ void make_frequency() { #define MAX_FREQ_NR 19 uint8_t key_pressed; uint8_t freq_nr; uint8_t old_freq; message_key_released(F_GEN_str); // display f-Generator and wait for key released // OC1B is connected with 680 Ohm resistor to TP2 (middle test pin) TCCR1A = (0<<COM1B1) | (1<<COM1B0) | (0<<WGM11) | (0<<WGM10); // CTC mode, count to OCR1A TIMSK1 = 0; // no interrupt used OCR1A = 1; // highest frequency OCR1B = 0; // toggle OC1B at this count TIFR1 = (1<<OCF1A) | (1<<OCF1A) | (1<<TOV1); // reset interrupt flags TCCR1C = 0; TCCR1B = (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10); // set counter mode R_PORT = 0; // set all resistor port outputs to GND #if PROCESSOR_TYP == 644 R_DDR = (1<<PIN_RL1) | (1<<PIN_RL2) | (1<<PIN_RL3); // set TP1, DDD4(TP2) and TP3 to output #else R_DDR = (1<<PIN_RL1) | (1<<PIN_RL3); // set TP1 and TP3 to output #endif ADC_PORT = TXD_VAL; ADC_DDR = (1<<TP1) | TXD_MSK; //connect TP1 to GND #if PROCESSOR_TYP == 1280 DDRB |= (1<<DDB6); // set output enable for OC1B #else DDRB |= (1<<DDB2); // set output enable for OC1B #endif TCCR1B = (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); // no clock divide old_freq = 0; freq_nr = MAX_FREQ_NR - 1; // start with 1 MHz #ifdef POWER_OFF uint8_t new_points; // one point for every 30 seconds wait time uint8_t shown_points; // one point for every 30 seconds wait time uint8_t times; // total wait time shown_points = 0; for (times=0; times<240;) #else while (1) /* wait endless without option POWER_OFF */ #endif { #define KEYPRESS_LENGTH_10ms 0 #ifdef POWER_OFF new_points = (times+10) / 30; if (new_points != shown_points) { // count of points has changed, build LCD line1 new lcd_line1(); // position to line 1 lcd_MEM2_string(F_GEN_str); // display f-Generator shown_points = new_points; for (new_points=0; new_points<shown_points ;new_points++) { lcd_data('.'); // show elapsed time, one point is 30 seconds } lcd_clear_line(); // clear remainder of line1 } #undef KEYPRESS_LENGTH_10ms #define KEYPRESS_LENGTH_10ms 20 /* change frequency only with >200ms key press */ #endif if (old_freq != freq_nr) { // new frequency is selected if (freq_nr > MAX_FREQ_NR) freq_nr -= (MAX_FREQ_NR + 1); old_freq = freq_nr; // update the last active frequency number #if (LCD_LINES > 3) uint8_t f_nr; uint8_t mm; mm = 0; do { if (mm != MENU_MIDDLE) { lcd_set_cursor((mm+1)*PAGES_PER_LINE,0); lcd_space(); // add a space to row 1 of line2 f_nr = freq_nr + mm; if (f_nr > MAX_FREQ_NR) f_nr -= (MAX_FREQ_NR + 1); switch_frequency(f_nr); lcd_clear_line(); // clear remainder of line } } while (++mm < MENU_LINES); lcd_set_cursor((MENU_MIDDLE+1)*PAGES_PER_LINE,0); lcd_data('>'); switch_frequency(freq_nr + MENU_MIDDLE); lcd_clear_line(); // clear remainder of line #else lcd_line2(); // position to line 2 for next frequency switch_frequency(freq_nr); lcd_clear_line(); // clear remainder of line2 #endif } /* end if (old_freq != freq_nr) */ key_pressed = wait_for_key_ms(1000); #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 0)) times = 0; // reset counter, operator is active #else if (key_pressed != 0) times = 0; // reset counter, operator is active #endif #endif #ifdef WITH_ROTARY_SWITCH if (rotary.incre > FAST_ROTATION) break; // fast rotation ends voltage measurement if (rotary.count >= 0) { freq_nr += rotary.count; // increase the frequency number by rotary.count } else { freq_nr += (MAX_FREQ_NR + 1 + rotary.count); // decrease the frequency by rotary.count } #endif if (key_pressed > KEYPRESS_LENGTH_10ms) freq_nr++; // longer key press select next frequency if(key_pressed >= 80) break; // more than 0.8 seconds #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ TCCR1B = 0; // stop counter TCCR1A = 0; // stop counter ADC_DDR = TXD_MSK; // disconnect TP1 R_DDR = 0; // switch resistor ports to Input #if PROCESSOR_TYP == 1280 DDRB &= ~(1<<DDB6); // disable output #else DDRB &= ~(1<<DDB2); // disable output #endif } /* end make frequency */
/* *************************************************** */ void show_vext() { #ifdef WITH_VEXT uint8_t key_pressed; uint8_t key_long_pressed; unsigned int Vext; // show the external voltage message_key_released(VOLTAGE_str); key_long_pressed = 0; #ifdef POWER_OFF uint8_t times; for (times=0;times<240;) #else while (1) /* wait endless without option POWER_OFF */ #endif { #ifdef TPex2 lcd_clear_line1(); // 2 Vext measurements #else lcd_clear_line2(); // only one measurement use line 2 #endif /* TPex2 */ #ifdef WITH_UART uart_newline(); // start of new measurement uart_newline(); // start of new measurement #endif lcd_MEM_string(Vext_str); // Vext= Vext = W5msReadADC(TPext); // read external voltage // ADC_DDR = TXD_MSK; //activate Software-UART #if EXT_NUMERATOR <= (0xffff/U_VCC) Display_mV(Vext*EXT_NUMERATOR/EXT_DENOMINATOR,3); // Display 3 Digits of this mV units #else Display_mV((unsigned long)Vext*EXT_NUMERATOR/EXT_DENOMINATOR,3); // Display 3 Digits of this mV units #endif #ifdef TPex2 lcd_clear_line2(); #ifdef WITH_UART uart_newline(); // start of new measurement #endif lcd_MEM_string(Vext_str); // Vext= Vext = W5msReadADC(TPex2); // read external voltage 2 #if EXT_NUMERATOR <= (0xffff/U_VCC) Display_mV(Vext*EXT_NUMERATOR/EXT_DENOMINATOR,3); // Display 3 Digits of this mV units #else Display_mV((unsigned long)Vext*EXT_NUMERATOR/EXT_DENOMINATOR,3); // Display 3 Digits of this mV units #endif #endif /* TPex2 */ #if defined(POWER_OFF) && defined(BAT_CHECK) Bat_update(times); #endif key_pressed = wait_for_key_ms(1000); #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed > 0) || (rotary.incre > 0)) times = 0; // reset the loop counter, operator is active if (rotary.incre > 5) break; // fast rotation ends voltage measurement #else if (key_pressed > 0) times = 0; //reset the loop counter, operator is active #endif #endif if (key_pressed > ((1000/10)-6)) { key_long_pressed++; // count the long key press } if (key_pressed == 0) key_long_pressed = 0; //reset the key long pressed counter if (key_long_pressed > 4) break; // five seconds end the loop #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ #endif /* WITH_VEXT */ } /* end show_vext() */
/* ****************************************************************** */ void show_C_ESR() { uint8_t key_pressed; message_key_released(C_ESR_str); #ifdef POWER_OFF uint8_t times; for (times=0;times<250;) #else while (1) /* wait endless without the POWER_OFF option */ #endif { PartFound = PART_NONE; ReadBigCap(TP3,TP1); if (PartFound == PART_CAPACITOR) { #if LCD_LINES > 2 lcd_line2(); // set to line2 #else lcd_line1(); // set to line1 #endif lcd_data('C'); lcd_equal(); // lcd_data('='); DisplayValue(cap.cval_max,cap.cpre_max,'F',3); lcd_clear_line(); // clear to end of line 1 cap.esr = GetESR(cap.cb,cap.ca); #if LCD_LINES > 2 lcd_line3(); // use line 3 #else lcd_line2(); // use line 2 #endif lcd_MEM_string(&ESR_str[1]); if (cap.esr < 65530) { DisplayValue16(cap.esr,-2,LCD_CHAR_OMEGA,2); } else { lcd_data('?'); // too big } lcd_clear_line(); // clear to end of line } else { // no cap found #if LCD_LINES > 2 lcd_clear_line2(); // clear C value lcd_line3(); lcd_clear_line(); // clear old ESR value #else lcd_line1(); // lcd_MEM2_string(C_ESR_str); lcd_clear_line(); lcd_clear_line2(); // clear old ESR value #endif } #if defined(POWER_OFF) && defined(BAT_CHECK) Bat_update(times); #endif key_pressed = wait_for_key_ms(1000); #ifdef WITH_ROTARY_SWITCH if ((key_pressed != 0) || (rotary.incre > 3)) break; #else if (key_pressed != 0) break; #endif #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ } /* end show_C_ESR() */
/* *************************************************** */ void do_10bit_PWM() { uint8_t key_pressed; uint8_t percent; // requestet duty-cycle in % uint8_t old_perc; // old duty-cycle in % unsigned int pwm_flip; // value for counter to flip the state message_key_released(PWM_10bit_str); // display PWM-Generator and wait for key released // OC1B is connected with 680 Ohm resistor to TP2 (middle test pin) TCCR1A = (1<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (1<<WGM10); // fast PWM mode, count to 10 bit TIMSK1 = 0; // no interrupt used OCR1A = 1; // highest frequency OCR1B = 0xff; // toggle OC1B at this count TIFR1 = (1<<OCF1A) | (1<<OCF1A) | (1<<TOV1); // reset interrupt flags TCCR1C = 0; R_PORT = 0; // set all resistor port outputs to GND #if PROCESSOR_TYP == 644 R_DDR = (1<<PIN_RL1) | (1<<PIN_RL2) | (1<<PIN_RL3); // set TP1, DDD4(TP2) and TP3 to output #else R_DDR = (1<<PIN_RL1) | (1<<PIN_RL3); // set TP1 and TP3 to output #endif ADC_PORT = TXD_VAL; ADC_DDR = (1<<TP1) | TXD_MSK; //connect TP1 to GND #if PROCESSOR_TYP == 1280 DDRB |= (1<<DDB6); // set output enable for OC1B #else DDRB |= (1<<DDB2); // set output enable #endif TCCR1B = (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); // no clock divide key_pressed = 0; old_perc = 0; percent = 10; #ifdef POWER_OFF uint8_t times; // time limit for (times=0; times<240; ) #else while (1) /* wait endless without option POWER_OFF */ #endif { if (percent != old_perc) { // new duty cycle is requested if (percent >= 100) { percent -= 100; //reset to 0 percent or higher } pwm_flip = (((unsigned long)0x3ff * percent) + 50) / 100; OCR1B = pwm_flip; // new percentage lcd_line2(); // goto line 2 DisplayValue16((((unsigned long)pwm_flip * 1000) + 0x1ff) / 0x3ff,-1,'%',5); lcd_clear_line(); #if 0 lcd_space(); if (rotary.count >= 0) { // actual count for debugging lcd_data('+'); lcd_data('0'+rotary.count); } else { lcd_data('-'); lcd_data('0'-rotary.count); } lcd_line3(); uint8_t kk; kk = (rotary.ind + 1) & ROT_MSK; do { lcd_data('0'+rotary.state[kk]); // debugging output of rotary state kk = (kk + 1) & ROT_MSK; } while (kk != rotary.ind); #endif old_perc = percent; // update the old duty cycle if (key_pressed > 40) { wait_about300ms(); // wait some time to release the button } } /* end if percent != old_perc */ key_pressed = wait_for_key_ms(1600); if(key_pressed > 130) break; // more than 1.3 seconds #ifdef WITH_ROTARY_SWITCH if (rotary.incre > FAST_ROTATION) break; // fast rotation ends voltage measurement if (rotary.count >= 0) { percent += rotary.count; // increase the duty cycle by rotary.count } else { percent += (100 + rotary.count); // decrease the duty cycle by rotary.count } #endif if (key_pressed > 50) { percent += 10; // duty cycle will be increased with 10 } else { if (key_pressed > 0) percent += 1; // duty cycle will be increased with 1 } #ifdef POWER_OFF #ifdef WITH_ROTARY_SWITCH if ((key_pressed > 0) || (rotary.incre > 0)) times = 0; // reset the loop counter, operator is active #else if (key_pressed > 0) times = 0; //reset the loop counter, operator is active #endif #endif #ifdef POWER_OFF times = Pwr_mode_check(times); // no time limit with DC_Pwr_mode #endif } /* end for times */ ADC_DDR = TXD_MSK; // disconnect TP1 TCCR1B = 0; // stop counter TCCR1A = 0; // stop counter R_DDR = 0; // switch resistor ports to Input #if PROCESSOR_TYP == 1280 DDRB &= ~(1<<DDB6); // disable output #else DDRB &= ~(1<<DDB2); // disable output #endif } /* end do_10bit_PWM */