あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

フルカラーLED時計 (2013.05.26)

概要

フルカラーLED1個で数字1桁(抵抗のカラーコード)を表示、HHMMDDの6個で時刻を表示します。 フルカラーLED時計 このアイデアは東京光音電波株式会社ツイッター公式アカウントのツイートから頂きました。
東京光音電波公式 『どうも抵抗勢力です』 (tkd_web)さんはTwitterを使っています

回路

PWM制御

マイコン内蔵DMACにCPUクロック、LPC1768なので最高速度の100MHzを入れてプリスケーラでの転送間隔を39μsにします。 39μs/パターン×255パターン/周期=1ms/周期で表示される訳です。 GPIOのポート0からLEDへ接続するようにしてポート0の32ビットのうちの18ビットをオン/オフするパターンをプログラムが生成して制御します。 DMACはプログラムから独立した転送タイミングでパターンを格納したバッファから読み出してLEDへ出力します。 プログラムは1秒毎にアプリケーションに制御が戻るようRTCドライバを工夫してあるので、秒の変化のタイミングでパターンを変更できます。 RTCからLEDまで

LEDの光度調整

PWM制御で点灯時間を増減させて光度調整します。 1周期は1ms、256ステップの調整で、0=消灯、255=フル点灯という訳です。 フルカラーLEDが6個という事は、(RGB)×6→R×6+G×6+B×6という事ですから合計18個のLEDを光度調整します。 第一段階は、Rの6個について光度を揃えます。 え、「同じ電圧を加えると同じ明るさじゃないのか?」って?甘い甘い甘い(笑)。 上記回路図をよ~くご覧下さい。 GPIO直結で制限電流は、究極奥義「出力段のFET頼み」、しかも出力電圧が順方向電圧よりも低いと来たもんだ。 LEDの電流-電圧特性のグラフで言うところのカーブで点灯させる都合上、個体差がモロに出てきます。 光度を肉眼で比較しても微小差になると「どっちも同じ」に見えてしまうため、どこのご家庭にもあるCdS(地球に優しくないカドミウムセル)を使ってきちんと比較、調整しました。 6個をフル点灯させて最小光度のLEDを基準にして他のLEDの光度を下げて揃えます。 第二段階は、Rと同様にGとBもそれぞれ揃えます。 第三段階は、10色のRGB値を決めます。 RGBとも100%にしてもRGB間の光度がバラバラなので各色100%点灯では白色になりませんから強い色の光度を下げて白色にします。 これを9色(黒は全消灯確定)で行います。 第4段階は、10色の区別が付くように、例えば「この色は4かな?5かな?」と迷うのを防ぐ調整をします。 フルカラーLEDの調整

実際の点灯

プロジェクトファイル

私のソース(ファイル冒頭に署名入り)は改造・再配布自由です。
その他のソースはコメント、添付ファイルの指示に従ってください。
led_clock_20130526.zip (330,041 バイトをVPSから 00:05 で)

今回の鉄ゲタは…

「今回は」ありません。 過去にRTCについて激重な鉄ゲタがありましたので、RTCを使う方は一読していただければ幸いです。
LPCXpressoのRTCバックアップは要改造
仕様と違うRTC_OSCF