情報電子工学演習 V( ハードウェア実技演習 )
PIC マイコンによる光学式テルミンの製作
レフ・セルゲイヴィッチ・テルミン
「テルミン」に関する情報「テルミン」に関する情報
■ 大人の科学マガジン vol.17 (学研)
■ エレキジャック No.4 (CQ 出版)
■ 映画 「テルミン」 (1993 年アメリカ製作)
PIC12F675
Cds セル圧電スピーカー
抵抗器
光学式テルミンの製作にあたって、考えたこと光学式テルミンの製作にあたって、考えたこと……
1) 複数の音が出せる(音階が変わる) ⇒ 発振器の周波数を変える 2) 空中で手を動かして音を制御 ⇒ 手の位置 / 周囲環境の変化をとらえる
→ タイマモジュールを利用したパルス発生
→ Cds セル& A/D 変換モジュール「明るさ」
■ スケジュール <内 容> <集合場所>第1回 (6/12) PIC マイコンとタイマモジュールの活用 [S2-9]第2回 (6/19) パルスの発生とオシロスコープによる観察 [ 実験室 ]第3回 (6/26) CdS セルを利用した明るさの検出 [S2-9]第4回 (7/3)*1 明るさ変化に応じた音の発生 [S2-9]第5回 (7/10) 自由製作1 [ 実験室 ]第6回 (7/17) 自由製作2 [ 実験室 ]第7回 (7/24) 発 表 [S2-9] *1 第4回は助言ルーム終了後, 11:00 から開始します。
課 題ドレミ音の発生
(6/26)回 路 図(7/3)
フローチャート(7/10)
評 価
■ 課題チェック
各回の出席 [5]×7 + 課題 [10]×3 + 発表 [ 35 ] ※遅刻は減点 (45 分まで欠席 0.5, 45 分以降は欠席 1 扱い)
■ 評 価
1.1. PICPIC マイコマイコンン
PIC12F675 の DIP パッケージ< 端子名 > < 機 能 >GP0~ GP5:汎用ディジタル入出力AN0~ AN3: A/D変換入力 VDD : 電源+ VSS : 電源-( GND) MCLR : 外部リセット入力
機能の概要
タイマ1の内部構成
T1CON レジスタ
● 割込み処理ルーチンの所在は、割込みベクタ (04H)で記しておく。● 割込み処理終了後には、 RETFIE命令を実行してメインへ戻る。● 割込み後にメインに戻り、以前の割り込まれた処理を継続できる ようにするためには、演算レジスタ( W レジスタ, STATUSレジスタ , PCHLレジスタ)の内容を割込みに入った時点で保存しておく必要がある。
タイマ1割込みによるインターバルタイマ実現の例
1-3. ソースプログラム1 「インターバルタイマ」 sample01.asm;----- コンフィグレーションビットの設定と汎用レジスタ ( ユーザメモリ ) の割付 ) --
LIST P=PIC12F675INCLUDE "P12F675.INC"__CONFIG H’11FF’&_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF
& _CPD_OFF & _CP_OFF ; 内部クロック使用, MCLR 未使用など#DEFINE W_TMP 20H ;W レジスタ割込み時待機用#DEFINE ST_TMP 21H ;STATUS レジスタ割込み時待機用 #DEFINE T1H 33H ; タイマ 1 上位 8 ビット設定データ保存用#DEFINE T1L 34H ; タイマ 1 下位 8 ビット設定データ保存用#DEFINE DOUT 35H ;GPIO 出力データ保存用;----- リセット& 割込みベクタ ----------------------------------------
ORG 0 ; リセットベクタGOTO STARTORG 4 ; 割込みベクタGOTO INTR
;-------------------------------------------------------------------------
STARTBCF INTCON,7 ; 割込み不許可BSF STATUS,RP0 ; バンク 1 に切り替えCALL 3FFH ; 内部オシレータのキャリブレーションMOVWF OSCCALMOVLW B‘00010000’ ;GPIO (汎用ディジタル入出力ポート)の
入出力設定MOVWF TRISIO ; 0: 出力 1 :入力MOVLW 080H ;OPTION レジスタの設定MOVWF OPTION_REGBSF PIE1,TMR1IE ; タイマ 1 の割込み許可NOPBCF STATUS,RP0 ; バンク 0 に切り替えNOPMOVLW B'00000100' ;GPIO の初期出力MOVWF DOUT ;GP2 に 1 出力( High )
MOVLW 0FCH ; タイマ 1 上位 8 ビット設定データMOVWFT1H ; 設定データを保存MOVWF TMR1H ; カウンタにセットMOVLW 00H ; タイマ 1 下位 8 ビット設定データMOVWF T1L ; 設定データを保存MOVWF TMR1L ; カウンタにセットMOVLW B'00000101' ; タイマ1コントロールレジスタ設定データMOVWF T1CON ; (プリスケーラ 1:1 )設定BSF INTCON,PEIE ; 周辺モジュールの割込みを許可BSF INTCON,GIE ; 割込み許可
MAINNOPGOTO MAIN
INTRMOVWF W_TMP ; 現在の W レジスタの値を退避SWAPF STATUS,0 ; 現在の STATUS レジスタの値を退避MOVWF ST_TMPBCF PIR1,TMR1IF ; タイマ1割込み検出フラグをクリアMOVF T1H,0 ; 上位 8 ビット設定データを読み出しMOVWF TMR1H ; カウンタに設定MOVF T1L,0 ; 下位 8 ビット設定データを読み出しMOVWF TMR1L ; カウンタに設定MOVF DOUT,0 ;GPIO 出力データを読み出しXORLW B'00000100' ;GP2 の出力値を反転MOVWF DOUT ;GPIO 出力データを保存MOVWF GPIO ;GPIO 出力SWAPF ST_TMP,0 ; 割込み前の STATUS レジスタの値を復帰MOVWF STATUSSWAPF W_TMP,1; 割込み前の W レジスタの値を復帰SWAPF W_TMP,0RETFIEEND
1-4.パルスの発生とオシロスコープによる観察<手 順> 1)ソースプログラム1をアセンブルして HEX 形式の機械語データを作る。 2) PIC ライターを使用して PIC12F675 へ機械語データを書き込む。 3)ブレッドボードに実験回路 1 を作成し、オシロスコープでパルス波形
の周期を測定する。 4) S1-GND 間に圧電スピーカを接続し、音階を確認する。
5)ソースプログラム1のタイマ1設定データを変更し、再び1)~4)の作業を繰り返す。
実験回路1 パルス波形
周期
<課題1 - ドレミ音の発生> TMR1 を FC00H(10 進で 64512) に設定した場合、下記の計算によりパルス波
形の周期を求めることができる。「ド」「レ」「ミ」の音を発生させるためTMR1 の設定値を予測せよ。
< クロック Fosc=4MHz ,タイマ 1 のプリスケーラ 1:n=1:1 , TMR1=64512(10 進 ) とした場合
> T’= (Fosc/4)×n×(65536-TMR1)×2 = 10-6×1×(65536-64512)×2 = 2048μsec = 2.048msec
音名 周波数[Hz]
音名 周波数[Hz]
ド 523.251 ソ 783.991レ 587.330 ラ 880.000ミ 659.255 シ 987.767ファ 698.456 ド 1046.502
表2 音階の周波数
No
TMR1設定値 カウント数 Cnt
(65536-TM1)
観測周期 T [sec]
周波数 f [Hz](f=1/T)16進 10進
(TM1)
12
表1 パルス波形観察時の記録例