PWM+LOG+ADC
[ Logの変換って ]PWMを使ってLEDを点灯させてきました。VRを動かすと一気に明るくなって後はあまり変化しません。これってなんかイメージ合いません。
そこで「対数にすればゆっくり立ち上がるかも知れない」と思い、手元のVRでAタイプを探しましたが見つかりません。そういえばBタイプの物を使っていました。
この辺をSoft処理すれば物になるのでは!と思い、ライブラリーの[Log関数]を動かそうと思ったのですが、とてもTiny13aではメモリースペースが無くコンパイルが止まって出来ませんでした。[ テーブルを作る ]こまったー!で仕方なくテーブルを作って、それを参照しDATA変換をして見た目対数化させ、PWMにおくる事にしました。
最近テーブルによるDATA変換はやってないのですっかり忘れています。だいたいLog関数も…。しばらくの間、何日かの沈黙の日が続いた。古い電卓Softを出してLogを計算させ、紙に書き出してそれらしいリストを作りました。最初作ったのはかなり荒っぽい物でしたが(面倒なのでだいぶ簡略した)カクンカクンという感じでステップは荒いのですが、全体のイメージは予定通り動いている様です。
計算の手順 A B C 1 0 0 2 0.69 31 4 1.38 63 8 2.09 96 16 2.77 127 32 3.46 159 64 4.15 190 128 4.85 223 256 5.54 255 ☆A.が基準 : B.はAのLog値 : C.はBを46倍にしたもの、(255に合わせる)
☆Aの値を10Stepsにして計算をする。Cの値をテーブルにする。
☆具体的な流れ
1] VRの値をADCで求める(8bit)。
2] それをテーブルで対数値(Log)に変換。チエックの為逆数の[Exp]関数を利用すると便利
3] 読み出した数をPWMに転送
4] 今回はPWMをLEDに接続し目で見える様にした。[ 基板を少し変更 ]回路関連はあまり動きません、というか完全にSoft変換なので基板の変更はしません。
但し、最終的に「ノーマル」と「対数」動作をさせられるようにSWを[PB2]に付け、どちらでも動かせるようにしました。これの変更はわずかです。ICのhex DATAです。プログラムはこれです。
:1000000029C0FECFFDCFFCCFFBCFFACFF9CFF8CF81 :04001000F7CFF6CF61 :10005400BFE9BDBFB0E0BEBF0E947800CDB7DEB738 :100064002197CDBFDEBF21962F92B3E0B7BBB4E09A :10007400B8BBB8E1B4BBB1E8BFBDB2E0B3BFB3E64F :10008400B6BFB6B1B068B6B906B1036006B9B0E29E :10009400B7B9B2E02B2ECDDF0883B6B3B2FF0DC0E3 :1000A4004AE00881BADF088310E620E0E02FF0E0A0 :1000B400E10FF21F008106BF02C0088106BF1EE4E3 :1000C4000BEE0A95F1F71A95E1F700000000E1CF75 :0200D400FFCF5C :1000360007B1022907B9B6B1BF7EB6B9B6B1B06489 :0E004600B6B9B6B1B4FD01C0FCCF05B1089546 :0A00140005900D920197E1F70895A1 :10001E00992779E004C0991F941708F0941B001FCC :08002E007A95C9F700950895C9 :1000F000A0E6B0E0E6EDF0E08AE190E00E940A00C0 :02010000089560 :1000D600000101020203040507090B0D1014192083 :0A00E60028323E4B607794B7E4FF28 :00000001FF
[ 動作させて! ]VRを回すと明るさが変化します、今度は自然の感じがします。VRを回すとどんどん明るさが増して行くので、体感的には感じはしっくりします。
今回はLOG関係のDATA作りで手間取りました。求め方を入れましたので利用して下さい。10ステップ(0-25)は人間的ですが、MCUにしてみれば8ステップ(32)の方が余計な処理が無くなるので、早くなります。
製作 2013/12/1
[MAIN MENU へ戻る]