/*-------------------------------------------------*/ /* In-circuit checker (C)ChaN, 2008 */ /*-------------------------------------------------*/ // // 導通チェッカー Update by inoshita.jp // // ATMEL ATTINY13 / ARDUINO // // +-\/-+ // ADC0 (D 5) PB5 1| |8 Vcc // ADC3 (D 3) PB3 2| |7 PB2 (D 2) ADC1 // ADC2 (D 4) PB4 3| |6 PB1 (D 1) PWM1 // GND 4| |5 PB0 (D 0) PWM0 // +----+ // 1: Reset // 2: BIAS // 3: ADC // 4: GND // 5: LED // 6: BUZZER(PWM) // 7: none // 8: Vcc(3.0V) // // SYSTEM CLOCK : 1.2MHz used Reset-pin version // #include #include #include //ピンアサイン #define PIN_LED PB0 #define PIN_BZR PB1 #define PIN_PSW PB5 #define PIN_BIAS PB3 #define PIN_ADC PB4 #define PCLOCK 1 //9.6MHz -> 1.2MHz static const uint8_t toneCount[] = { PCLOCK * 8, //1.6kHz PCLOCK * 9, //1.4kHz PCLOCK * 10, //1.2Hz PCLOCK * 12, //1.0Hz PCLOCK * 16 //800Hz }; void beep(uint8_t t) { if(t) { TCCR0A = _BV(COM0B1)|_BV(WGM01)|_BV(WGM00); //PWMの動作を指定(PB1出力,8ビット高速PWM動作) TCCR0B = _BV(WGM02)|0b011; //WGM02|WGM01|WGM00で高速PWM動作 //CS2|CS1|CS0 = 0b011 clkI/O/64 (64分周) OCR0A = t; //全体カウント量 OCR0B = t / 2; } else { TCCR0B = 0; //停止 } } void setup(void) { //入出力ピン指定(OUT:LED/BUZZER/BIAS) DDRB = _BV(PIN_LED)|_BV(PIN_BZR)|_BV(PIN_BIAS); ACSR |= _BV(ACD); //コンパレータ無効 set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); //電源OFFまでのタイマー初期化 uint16_t sdt = 0; uint8_t lvd; //起動時の電源電圧チェック PORTB |= _BV(PIN_BIAS); //Enable bias circuit ADMUX |= _BV(REFS0)|0b10; //ADC Ch=2, Vref=1.1V delay(500); //電圧安定待ち ADCSRA = _BV(ADEN)|_BV(ADSC)|(0b100); loop_until_bit_is_set(ADCSRA, ADIF); uint16_t ad = ADC; if(ad >= 432) { //2.7V以下,もしくはプローブが接触 if(ad < 528) lvd = 1; //3.3V以下,警告(blink LED) else lvd = 0; PORTB |= _BV(PIN_LED); //LED ON beep(toneCount[0]); //開始音 delay(100); beep(0); //導通チェック do { ADCSRA |= _BV(ADEN)|_BV(ADSC)|(0b100); loop_until_bit_is_set(ADCSRA, ADIF); ad = ADC; delay(10); if(ad < 5) { beep(toneCount[ad]); //導通 sdt = 0; //電源OFFまでのタイマー初期化 } else { beep(0); //非導通 } if(lvd && ++lvd > 20) { //LED lvd = 1; PORTB &= ~_BV(PIN_LED); //OFF } } while(++sdt < 6000); //2分未使用による自動電源OFF beep(toneCount[0]); delay(500); beep(0); } //Power-Down mode //LED OFF/BUZZR OFF/BIAS Disable PORTB &= ~(_BV(PIN_LED)|_BV(PIN_BZR)|_BV(PIN_BIAS)); DDRB = 0; //出力ピン OFF ADCSRA = 0; //Stop ADC sleep_mode(); delay(1000); } void loop(void) {}