2009年1月30日金曜日

LEDのオートディマー

 点灯しているLEDに光が当たると、LEDの点灯が見えにくくなる。
って事でLEDを発光兼光センサとして暗い時には、暗く。明るい時には、明るく点灯させよう。
今回はPIC16F884を使用
点滅の機能とかオートディマー以外の機能も入っているけど面倒だから、殆どそのまま載せとく。

////////////////////////////////////////////
// 割込み処理
void interrupt(
void)
////////////////////////////////////////////
{
unsigned char tm;
int nn;

//タイマ1msec割り込み?
if (PIR1.TMR2IF) {
gTimer++; //フリーランニングカウント
TMR2 = DEF_TMRCUNT; //カウント値再設定
PIR1.TMR2IF = 0; //割込みフラグクリア

// LED点灯、点滅制御
tm = gTimer & led.dimmer;
if( tm == 0 ) {
//オートディマー処理
//▼ヒステリシスを追加する予定
nn = ADC_read(4); // ADC値の読み込み(AN4:10bits)
if( nn > 0x40 ) {
led.dimmer = 0xf; //デューティ15:1
}
else if( nn > 0x30 ) {
led.dimmer = 0x7; //デューティ7:1
}
else if( nn > 0x20 ) {
led.dimmer = 0x3; //デューティ3:1
}
else {
led.dimmer = 0x1; //デューティ1:1
}
//LEDフラッシュ
if( gTimer & 0x20 ) {
PORTA |= led.flash; //LED点滅の為に消す
}
//LED点灯
else {
PORTA = ~led.on; //点滅用LEDの点灯
}
PORTB = ~led.on >> 4; //常時点灯LEDの点灯
}
//LED受光量AD変換の為に一旦消す
else if( tm == led.dimmer ){
PORTA = 0x0f;
PORTB = 0x0f;
}
}
}

0 件のコメント: