avr atTiny13a 9:PWM+LOG+ADC+VR


 PWM+LOG+ADC 

[ Logの変換って ]
 PWMを使ってLEDを点灯させてきました。VRを動かすと一気に明るくなって後はあまり変化しません。これってなんかイメージ合いません。

 そこで「対数にすればゆっくり立ち上がるかも知れない」と思い、手元のVRでAタイプを探しましたが見つかりません。そういえばBタイプの物を使っていました。

 この辺をSoft処理すれば物になるのでは!と思い、ライブラリーの[Log関数]を動かそうと思ったのですが、とてもTiny13aではメモリースペースが無くコンパイルが止まって出来ませんでした。

[ テーブルを作る ]
 こまったー!で仕方なくテーブルを作って、それを参照しDATA変換をして見た目対数化させ、PWMにおくる事にしました。
 最近テーブルによるDATA変換はやってないのですっかり忘れています。だいたいLog関数も…。
 しばらくの間、何日かの沈黙の日が続いた。古い電卓Softを出してLogを計算させ、紙に書き出してそれらしいリストを作りました。
最初作ったのはかなり荒っぽい物でしたが(面倒なのでだいぶ簡略した)カクンカクンという感じでステップは荒いのですが、全体のイメージは予定通り動いている様です。
計算の手順
ABC
100
20.6931
41.3863
82.0996
162.77127
323.46159
644.15190
1284.85223
2565.54255

☆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 へ戻る]

 

inserted by FC2 system