LEDでちょっと遊んでみる! 2014.11.9

秋月の新製品コーナをかなり頻繁にチェックしていて、おもしろそうなアイテムを見つけました。
マイコン内蔵のカラーLEDです。マイコン内蔵なので、シリアルデータを送出してやれば色とりどりで発色してくれそうなので、
たとえばパワーメータなどにつかえれば面白そうなので買ってみました。

秋月の新製品コーナにでていた気になる製品です。

とりあえず10個ほど購入してみました。

こんな感じで包装されています。

動かしてみよう!

動かすためのマイコンはPICを使用しました。
ただし、高速動作が必要なので20MHzの水晶をクロック源としています。
これが最高速度での動作になります。

8個のLEDを使用して組み立ててみました。

駆動方法は24ビットのシリアルデータを送出することでRGBの明るさをそれぞれ帰ることができます。
LEDもカスケード接続ができるので、マイコンも1ポートあれば何個でもLEDを制御できます。

こんな感じで制御します。

ちょっと難しいのが
このLEDの送出データの0あるいは1コードの送出は、送出するデータの時間で制御します。
ただ、この時間がかなり短いんですよね〜。
たとえば0のコードを送るには400nSのHレベル、800nSのLレベルを続けて送出する必要があります。



 データを構成するパルスが短いので高速な処理が必要です。

どのくらいで信号が遅れるかな?

PICを20MHzで動かしたときに、どの程度のパルス間隔で送れるか確認してみました。
たしかPICは4サイクルが1命令だったと記憶しています、

OUTPUT_LOW(LED)
OUTPUT_HIGH(LED)
OUTPUT_LOW(LED)
OUTPUT_HIGH(LED)
OUTPUT_LOW(LED)
OUTPUT_HIGH(LED)
・・
のデータの流れで動かしてみると、1パルスあたり200nSかかります。


1パルス(命令)は200nSです。

ちょうど20MHz(50nS)ですから4サイクルが1命令のようですね。

ということは0のコードを送るとなると
OUTPUT_LOW(LED)
OUTPUT_LOW(LED)
OUTPUT_HIGH(LED)
OUTPUT_HIGH(LED)
OUTPUT_HIGH(LED)
OUTPUT_HIGH(LED)

という感じでIO命令を並べればいいことになります。
しかし1つのLEDを駆動するのに24ビット(24コード)のデータが必要で、
さらに必要LED分だけ送り出すので、かなりプログラムエリアを必要としそうです。
なんせ、サブルーチンで飛ばしたいところですが時間的に間に合いません。

まあ、とりあえず動かしてみましょう!

まあ、どうつかうかかまた別に考えるとして、とりあえず各色で光が流れるプログラムを書いてみて
動作確認です。まずは問題なく動作しました。

とりあえず動かすことに成功しました。

さてさて、なにかいいアプリが思いついたら使ってみましょう!

(おしまい)