LED 蜡烛灯带定时器
带定时器的 LED 蜡烛灯
LEDTimedCandle
我研究了大量的电池供电LED蜡烛灯电路和代码,但未能找到具有时间控制功能的LED蜡烛灯。
由于我有一些ATTiny13芯片,我决定使用这个小芯片。 我希望LED能够模拟蜡烛光亮大约4小时,然后熄灭20小时,因此我需要一个定时器和一个计数器。 另一个定时器/PWM用于模拟蜡烛闪烁。 但ATTiny13只有一个定时器。 在ATTiny13上,你只能使用定时器或PWM。
// watchdog interrupt
ISR (WDT_vect)
{
sec8_counter++;
#ifdef USE_HEART_BEAT_LED
//flash heart beat LED
digitalWrite(LED2, HIGH);
delay(1);
digitalWrite(LED2, LOW);
#endif
if(sec8_counter>=HOUR_INTERVAL){
sec8_counter=0;
if(bLedIsOn==1){
on_hours++;
if(on_hours>=MAX_ON_HOURS){
bLedIsOn=0; //switch to OFF mode
off_hours=0;
}
}else{
off_hours++;
if(off_hours>=MAX_OFF_HOURS){
bLedIsOn=1; //switch to ON mode
on_hours=0;
}
}
}
wdt_reset();
} // end of WDT_vect
幸运的是,ATTiny还有一个看门狗定时器,可以用来调用中断函数。 看门狗定时器使用独立的128kHz时钟运行,与CPU时钟无关。 最长的超时时间为8秒。 因此,我需要计数450次才能获得一小时。
void loop ()
{
//sleep 20 hours and work 4 hours
noInterrupts();
if(bLedIsOn==1){
doCandle();
}else{
digitalWrite (LED, LOW); //ensure LED is OFF
goToSleep ();
}
interrupts();
} // end of loop
代码使ATTiny13休眠8秒或点亮LED。 点亮阶段为4小时,休眠阶段将延长至20小时。 序列从点亮阶段开始,当供电时。 在点亮阶段,我测量到大约3mA的电流,而在关断阶段,电路需要300µA的电流。
电路在Arduino代码文件中记录。 将ATTiny13的时钟频率降低到9.6MHz以下不会改变功耗。 但我切换到1.2MHz内部时钟并禁用了BOD(低功耗自动关机)以使用两节或三节AA电池获得更长的运行时间。
https://github.com/hjgode/LEDTimedCandle/tree/master
感谢所有分享知识的人,特别是