カタツムリ2010年02月14日

D/A変換、正弦波を出力

みなさん、おはようございます。
休日出勤のみなさん、お勤めご苦労さまです。

昨日紹介した回路は、D/A変換機能があり、
プログラミングによって、自由な波形を出力できます。

回路の仕組みは、
デジタル出力(RB0~RB7)の計8本のビット信号を、
ラダー回路でアナログ電圧に置き換えます。

つまり、8ビット0~255の値を、
アナログ電圧の0V~5Vで出力します。

では、実際に出力した波形を、
オシロスコープで測定してみました。
DSC00049.JPG

写真では縦の線が薄くて見えませんが、
波形が階段のようになっていますね~

正弦波(サイン波)になんとか見える程度まで、
分かりやすくデーターを荒くしてみたのですが、

逆に精度上げて細かくしても、
拡大してみればD/A変換では、
このように階段状になります。

次にプログラムを紹介しますが、
波形出力のポイントだけ説明します。

こちらはアセンブラですが、
頑張って読んでみてくださいね~(^^;;

● get32 のサブルーチン関数で、
サイン派の値を、テーブルから取り出してリターンするだけです。

メインに戻ったところで、
その値を、★PORTB に出力するだけです。

;------------------------------------
;サイン波形の出力
;------------------------------------
DIV32
    CLRF    ix
LP32
    BSF     ix,4
LP32_1
    MOVF    ix,W
    CALL    get32	;●
    MOVWF   PORTB	;★
    MOVF    cnt_ini,W
    MOVWF   cnt
LP32_2
    DECFSZ  cnt,F
    GOTO    LP32_2
    DECFSZ  ix,F
    GOTO    LP32_1
    GOTO    LP32
;------------------------------------
;サイン波の出力する値を、返り値とする。
;------------------------------------
get32
    ADDWF    PCL,f
    RETLW    d'0'    ;DUMMY
    RETLW    d'128'  ;0
    RETLW    d'177'  ;1
    RETLW    d'218'  ;2
    RETLW    d'245'  ;3
    RETLW    d'255'  ;4
    RETLW    d'245'  ;5
    RETLW    d'218'  ;6
    RETLW    d'177'  ;7
    RETLW    d'128'  ;8
    RETLW    d'79'   ;9
    RETLW    d'38'   ;10
    RETLW    d'11'   ;11
    RETLW    d'1'    ;12
    RETLW    d'11'   ;13
    RETLW    d'38'   ;14
    RETLW    d'79'   ;15

こちらのテーブルの値と、実際の画像を見比べると、
一致しているのが、分かりますね~

d'128'からはじまって、d'177'と増えていきます。
d'255'で頂点になって、そこから下がって行きます。

C言語でも書けますが、プログラムメモリーが、
1024 バイトしかないので、注意が必要です。
math 関数を組み込むだけで、オーバーしてしまいます。(^^;;

まあ~、1個250円のマイコンチップですから、
そんなものですよね~
PICマイコン PIC16F84A-20/P

次は、こちらをご覧ください。
DSC00047.JPG
先ほどと同じプログラムですが、
値を補間して、線がこんなに滑らかになっていますね~

とても不思議なのですが、
2個のコンデンサーを追加しただけなんです。
DSC00060.jpg
※赤枠、0.022uF、青枠、47uFの電解コンデンサー
※回路の名前は積分回路です。

このようにゲームや組み込み系では、
プログラムとハードが密接に関係しています。

今日も「いいスマイル」で行きましょう!


ツイッターはじめました~フォロー待ってま~す!!
↓↓↓下記の3つのバナーをクリックして下さい。ランキングUPにご協力をお願いします。↓↓↓

にほんブログ村 経営ブログへランキングUP!

ランキングUP!

banner2.gif 人気blogランキング!

投稿者 shiozumi : 01:01