avr atTiny13a 8:PWM+ADC


 PWM+ADC 

 PWM動作をさせて来ました。今度はVRを付けて抵抗値の変化をPWMに移して動かす実験です。
 方法は簡単、VRの値をADCで読み出し、PWMのスパンに転送するだけです。
1.「C_コンパイラー」のライブラリーを使って動作せる。
2.PWMは動作しています、これに電源の5Vを基準にしてVRの位置をADCで読み出して、それをスパンのDATAに変換しているだけです。
 ADCは[ADC_Read(channel);]で読み出し、10bitになっているDATAを8bitに削って、PWMのDATA[OCR0A]に転送させる。

 これだと、あっさりし過ぎるので、ADCの部分を作って見ることにしました。
 作るといっても、それほど複雑ではありません。


[ ADCの変換 ]

 予めI/O端子を入力にしておく。レジスターADCSRAのADENを[1]にして電源の供給をする。

1.レジスターADMUXを指定します。どの端子を使うかchの指定、読み出しは10bit/8bitの指定が出来るので、もっとも簡単な8bitを一度で読み込める方法にしました。
2.レジスターADCSRAのADIFを[0]にクリヤーし、準備をする。
3.ADCSRAのADSCを[1]にしてADCをスタートさせる。
4.ADCSRAのADIFの値を監視し[0から1になる]まで待つ。
5.変換が終了したのでDATAを[ADCH]から読み出せば終了です。

 出てきた数字を、前に実験したPWMに数字を受け渡せばPWMとしてパルス変換出来ます。
 今回もLEDに接続して、動作の確認(明るさの変化)をしました。

 プログラムはこれです。Hexのdataは次です。
 コピーして拡張子を[c]や[hex]にすれば作動します。

:1000000018C0FECFFDCFFCCFFBCFFACFF9CFF8CF92
:04001000F7CFF6CF61
:10003200BFE9BDBFB0E0BEBF2F92B3E0B7BBB0E037
:10004200B8BBB8E1B4BBB1E8BFBDB2E0B3BFB3E681
:10005200B6BFB6B1B068B6B906B1036006B9B0E2D0
:10006200B7B9B2E02B2ED5DF06BF1EE40BEE0A9520
:0E007200F1F71A95E1F700000000F3CFFFCF81
:1000140007B1022907B9B6B1BF7EB6B9B6B1B064AB
:0E002400B6B9B6B1B4FD01C0FCCF05B1089568
:00000001FF

[ 動作させて! ]

 VRを回すと明るさが変化しました、成功です!簡単過ぎるのかあまり動いても、感動は少なかったです。
 この時期部屋が寒くなって、実験が滞り気味でしたが何とかそれなりに動きました。

[ その他 ]

 今回あまりすっきりしなかったのは、ライブラリーでも動くのをSoftで作っただけですので…。
 まあそれなりに手間は掛かっているのですが、遠回りをしただけの感じもします。
 但し、それなりに知識は増えていますので役にだったと思っています。

製作 2013/11/27 


 [MAIN MENU へ戻る]

inserted by FC2 system