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分だけ送り出すので、かなりプログラムエリアを必要としそうです。
なんせ、サブルーチンで飛ばしたいところですが時間的に間に合いません。
まあ、とりあえず動かしてみましょう!
まあ、どうつかうかかまた別に考えるとして、とりあえず各色で光が流れるプログラムを書いてみて
動作確認です。まずは問題なく動作しました。
とりあえず動かすことに成功しました。
さてさて、なにかいいアプリが思いついたら使ってみましょう!
(おしまい)