点灯している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;
}
}
}
2009年1月30日金曜日
2009年1月26日月曜日
シールド
シールド線って、どう処理すればいいの?
GNDにつなぐ?
だったら別途GND線って要らないんじゃないの?
って事で調べてみた。
どうやらシールドをGNDとして使用すると当然電流が流れる
そうすると、グランドループの出来上がり!
で、シールドに流れた電流がノイズ元となり他の線に乗ってしまう。
なので、GND線はちゃんと必要みたいだ。
一方ノイズに対しては、片側だけを安定した側のGNDと繋げば
そちらの方でノイズを吸収してくれるし、グランドループの呪いも防げるようだ。
20091017 ちょっと判りにくかったので補足
シールドのケーブルは、両端をGNDに繋がなずに片側だけを繋ぐのがノイズに対しては、最強。
但し、その場合は別途GND線も必要となる。
しかし、現実にそんなにノイズを気にする回路は少ないのでシールドをGND線代わりにするのが一般的だし、それで事足りていることが多いようだ。
20091017 ちょっと判りにくかったので補足
シールドのケーブルは、両端をGNDに繋がなずに片側だけを繋ぐのがノイズに対しては、最強。
但し、その場合は別途GND線も必要となる。
しかし、現実にそんなにノイズを気にする回路は少ないのでシールドをGND線代わりにするのが一般的だし、それで事足りていることが多いようだ。
ラベル:
電気
2009年1月9日金曜日
MikroCのConfiguration
MicroCって#pragmaでConfigurationを書けないのかな?<調べてないんだけどね
取り敢えず、機能だけ記録しておく
MikroCでの名称 略称 名称
・INTRC_OSC_* FOSC: Oscillator Selection bits
RA6とRA7をioとして使うか、CLKとして使うかの設定
・WDT_* WDTE: Watchdog Timer Enable bit
ウォッチドッグタイマを使用するか否か。(動作に影響しなかった気がする)
・PWRTE_* PWRTE: Power-up Timer Enable bit
パワーオンリセット後にちょいと時間を空けてから動き出すらしい
リセット回路がちゃんとしていれば、どっちでも良いけどEnableにしといて損はない
・MCLRE_* MCLRE: RE3/MCLR pin function select bit
RE3をioとして使うか、MCLR(リセットの事)として使うかの設定
・CP_* CP: Code Protection bit
プログラム用Flashにプロテクト掛ける
・CPD_* CPD: Data Code Protection bit
データ用Flashにプロテクトを掛ける
・BOR_* BOREN<1:0>: Brown-out Reset Selection bits
ブラウンアウトリセット(電圧低下によるリセット)動作
2.1vまたは4.0vでリセットさせるか機能しないか
でもリセット中もioは保持されるっぽい
・IESO_* IESO: Internal External Switchover bit
内部、外部のクロックを
・FCMEN_* FCMEN: Fail-Safe Clock Monitor Enabled bit
・LVP_* LVP: Low Voltage Programming Enable bit
・ DEBUG: In-Circuit Debugger Mode bit
・WRT_* WRT<1:0>: Flash Program Memory Self Write Enable bits
取り敢えず、今回は以下のように設定した
INTRC_OSC_NOCLKOUT RA6をioとしてしようする
WDT_ON プログラムでウォッチドッグタイマを有効にしているので、なくてもいいけど入れとく
PWRTE_ON 電源投入直後のリセット期間を有効にする
MCLRE_ON RE3をMCLREとする(デフォ)
CP_OFF Code Protectionはしない(デフォ)
CPD_OFF Data Code Protectionはしない(デフォ)
BOR_ON Brown out Reset ON(デフォ)
IESO_ON Internal/External Switchover mode is enabled(デフォ)
FCMEN_ON 外部クロック使用しないので関係ない(デフォ)
LVP_OFF RB3をioとして使用
BOR4.0V Brown-out 4.0v(デフォ)
WRT_OFF Write protection off(デフォ)
以下は変えてもConfigrationに変化無し
INTOSCIO,INTOSC
EXTRCIO,EXTRC
登録:
投稿 (Atom)