LEDピコピコ(2313) −−LED順次点灯、PWM制御点灯、チャタリング防止SW −−
「極めて簡単な応用例」にLEDとスイッチを追加して、スイッチで点滅の順序を変えること、PWM制御でLEDを点灯すること、
スイッチのチャタリングを防止することを実験しました。
C言語(winAVR)で作りました。リストをここに置きます。
点灯モードの変更はスイッチを押すごとに変数をインクリメントして、その値に応じたモードの点灯をすることにしています。
従って、スイッチにチャタリングがあれば順序が飛んでしまいますから防止せねばなりません。チャタリング防止はタイマーでおよそ
10msごとに割り込みをかけて、swを読みに行きます。タクトスイッチのチャタリングは数ミリ秒以内に収まるようですから、チャタリング
を拾うことはありません。
スイッチの状態は前回の読み込みを記録していて、前回がoffで今回がonの時のみ「押された」と判断してスイッチカウンタをインクリメント
しています。onだけを拾っていたら1/100秒以上の長押しでどんどん変わってしまいます。今回のスイッチは4接点としましたから、スイッチ
カウンタが4になれば0に戻しています。点灯モードはスイッチカウンタ(変数)の値に応じたサブルーチンを実行するだけです。
90S2313はPWM(Pulse Width Modulator)の機能を持っています。矩形波のon、0ff時間の割合を変えるもので、on時間が短くなれば平均の
点灯時間が短くなりますから暗く見えます。パルス幅を連続的に変えるとLEDの明るさが連続的に変わります。
LEDは通常ONかOFFの状態が多いので連続的な変化は新鮮な感じがします。このLEDの代わりにFETのドライバを入れて、4.8Vの豆球を点滅させると
迫力がありました。ポートBのB3ピンがPWM端子と切り替えになっています。この実験では、PWM動作以外ではこの端子をポートB3に切り替えて
います。
PWMについてはデータシートに詳しく書かれています。(読むのに苦労しましたが....。)