スライド 1 - ESato`s Page

情報電子工学演習Ⅴ(ハードウェア実技演習)
PICマイコンによる光学式テルミンの製作
第4回 明るさ変化に応じた音の発生
■ スケジュール
第4回(7/3)
<内 容>
<集合場所>
明るさ変化に応じた音の発生
[S2-9]
・課題のチェック(回路図)
・説明
第5回(7/10) 自由製作 ①
・課題のチェック(フローチャート)
・プログラム作成&回路製作
[実験室]
2.明るさの検出
暗
抵抗値 [kΩ]
100
明
52.5
10
3
1.8
1
CdSセル
1
10
100
照度 [lux]
CdSセル(MI5527)の特性
1.6
1.44
1000
CdSを利用した明るさ検出
V
実験回路2
デジタルマルチメータ
を使いVDDの測定
CdSを利用した明るさ検出
V
実験回路2
デジタルマルチメータ
を使い、出力Vout
の測定
明るさ検出回路の動作確認結果
電源電圧 VDD= 3.0 [V]
No
1
2
3
4
測定条件
1回目
蛍光灯直下で手をかざさない
センサ受光面より10cmの高さ
センサ受光面より5cmの高さ
センサ受光面より1cmの高さ
Vout
課題2の解答例
Vout [V]
2回目
3回目
平均
第4回 明るさ変化に応じた音の発生
■ 説明内容
1)明るさ検出回路の出力電圧Voutが、PIC
マイコンのA/D変換器を通してどのような
値(A/D変換データ)になるか?
2)A/D変換データを3つの領域(ド/レ/ミ
音を鳴らす)に分けるための閾値設定
3)A/D変換器の設定とドレミ音を決定する
処理(ソースプログラム3の解説)
PICマイコンのA/D変換データ
Din = Vin / VDD×255
(A/D変換器の分解能:8bit)
電源電圧 VDD= 3.0 [V]
No
1
2
3
4
測定条件
蛍光灯直下で手をかざさない
センサ受光面より10cmの高さ
センサ受光面より5cmの高さ
センサ受光面より1cmの高さ
Vin [V]
(Vout)
1.445
2.076
2.271
2.742
Din
122(7A)
176(B0)
193(C1)
233(E9)
小数点以下を切り捨て, ()は16進数に変換
第4回 明るさ変化に応じた音の発生
■ 説明内容
1)明るさ検出回路の出力電圧Voutが、PIC
マイコンのA/D変換器を通してどのような
値(A/D変換データ)になるか?
2)A/D変換データを3つの領域(ド/レ/ミ
音を鳴らす)に分けるための閾値設定
3)A/D変換器の設定とドレミ音を決定する
処理(ソースプログラム3の解説)
A/D
変換値
FF
ド
閾値D1
レ
閾値D2
ミ
00
ドレミ音を決定する処理
第4回 明るさ変化に応じた音の発生
■ 説明内容
1)明るさ検出回路の出力電圧Voutが、PIC
マイコンのA/D変換器を通してどのような
値(A/D変換データ)になるか?
2)A/D変換データを3つの領域(ド/レ/ミ
音を鳴らす)に分けるための閾値設定
3)A/D変換器の設定とドレミ音を決定する
処理(ソースプログラム3の解説)
A/D変換で使用する特殊レジスタ
■ ADCON0レジスタ (Fig.10)
■ ADSELレジスタ (Fig.11)
A/D変換機能のプログラミング(2)
◇ 初期設定 (sample03.asm , p.11の省略部分)
START
BCF
MOVLW
MOVWF
BSF
MOVWF
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
NOP
INTCON,7
07H
CMCON
STATUS,RP0
B‘00000001’ ;変換クロック:Fosc/2, AN0を指定
ANSEL
B‘00000001’ ;GPO(ANO) データ方向を入力指定
TRISIO
080H
OPTION_REG
※P.8のソースプログラム2との
STATUS,RP0
違いはこの4行
A/D変換機能のプログラミング(2)
◇ A/D変換処理 (sample03.asm, A/D変換データを得るまで)
LOOP
MOVLW
MOVWF
CALL
BSF
ADCHECK
BTFSC
GOTO
MOVF
MOVWF
B'00000001'
ADCON0
WAIT1
ADCON0,1
AN0
ADCON0,1
ADCHECK
ADRESH,0
A
→ Aレジスタ
A/D変換機能のプログラミング(2)
◇ ドレミ音の決定 (sample03.asm)
MOVLW
D1
SUBWF
A,0
BTFSC
STATUS,0
GOTO
TMR1SET1
;-----------------------------MOVLW
D2
SUBWF
A,0
BTFSC
STATUS,0
GOTO
TMR1SET2
;==================
※1, 2行目における閾値D1, D2の定義
#DEFINE D1 XXH
#DEFINE D2 XXH
■ BTFSC STATUS,0
?
→ STATUSレジスタの0ビットをテストし(調べ)、
クリア(ゼロ)の場合は次の命令をスキップする。
1-ゼロ 0-ゼロではない
IRP RP1 RP0 TO RD Z
bit8
DC C
bit1
1-桁上り,桁下りあり
0-なし
StATUSレジスタの機能
※STATUSレジスタのCフラグやZフラグは、ADDLW(加算)命令や
SUBWF(減算)命令などによって変化する。
■ SUBWF(減算)命令と桁上がり(桁あふれ)
例題 「04H - 06H」, 「04H - 03H」
04H B’00000100’
( 06H B’00000110’ を反転して+1 )
-06H B’11111010’
04H-06H B’11111110’
-------------------------------------------------------------04H B’00000100’
( 03H B’00000011’ を反転して+1 )
-03H B’11111101’
04H-03H B’100000001’
STATUSレジスタのCフラグに格納される
A/D変換機能のプログラミング(2)
◇ タイマデータの指定 (sample03.asm)
TMR1SET3
MOVLW
MOVWF
MOVLW
MOVWF
GOTO
TMR1SET2
MOVLW
MOVWF
MOVLW
MOVWF
GOTO
TMR1SET1
(省略)
XX
T1H
XX
T1L
LOOP
XX
T1H
XX
T1L
LOOP
A/D変換機能のプログラミング(3)
◇ シュミットトリガの実現 ← 手ぶれ対策
FF
ド
D1
D1S
TMR1の変更なし
D2
D2S
TMR1の変更なし
00
レ
ミ
テキストp.12 のフローチャート → 課題3
◆ 来週の自由製作(課題チェック後)
1)sample3.asm をメモ帳で開き、
D1, D2, ドレミ各音のTMR1
データを書き替える。
2)アセンブル、PICマイコンへの
書込み
3)動作確認
4)課題3の実現、オリジナル作品
の製作
実験室にて
(発表時のアイディア点
+10までの評価)
プログラム作成
は計算機実習室
(+20までの評価)