実験の目的
PICにより発生した周期パルスで圧電ブザーを駆動することにより、音を発生させることができる。ここでは、実際に圧電ブザーを駆動させて音の発生を確認する。
実験回路の結線
ここではCPUボードとI/Oボードを用いる。これらを表6のように接続する。また接続の様子を図6-1に示す。
CPUボード | +5V | GND | RB0 |
---|---|---|---|
I/Oボード | +5V | GND | BUZZER |
図6-1 実験6の結線
プログラム
以下のプログラムよりHEXファイルを作成し、PICにプログラムせよ。
;
; 実験6 圧電ブザーテストプログラム
;
; CONFIG1
__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CCPMX_RB0 & _CP_OFF
; CONFIG2
__CONFIG _CONFIG2, _FCMEN_ON & _IESO_ON
list p=16F87
#include <p16F87.inc>
ORG 0x000 ; リセットベクタを 0番地に指定
BSF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 1)
CLRF TRISB ; Bポートを全て出力に設定
BCF STATUS,RP0 ; STATUSのビットPR0をセット(BANK 0)
COUNT1 EQU 0x20
COUNT2 EQU 0x21
MOVLW 0x0 ; Wレジスタに0を転送
MOVWF PORTB ; Wレジスタの値をBポートに転送
LOOP0
INCF PORTB,1 ; ポートBの内容を1増加
CALL WAIT
GOTO LOOP0 ; ラベルLOOP0へジャンプ
; 無駄時間待ち処理 WAIT
WAIT MOVLW 0x7F ; Wレジスタに0x7Fを転送(周波数調整)
MOVWF COUNT1 ; COUNT1にWレジスタの内容を転送
LOOP1 CALL WAIT1 ; WAIT1をサブルーチンコール
DECFSZ COUNT1,F ; COUNT1を減算してCOUNT1に格納
GOTO LOOP1 ; COUNT1が0でなければ繰り返す
RETURN ; COUNT1が0になったら戻る。
WAIT1 MOVLW 0x02 ; Wレジスタに0x02を転送(周波数調整)
MOVWF COUNT2 ; COUNT2にWレジスタの内容を転送
LOOP2 NOP ; 1命令サイクル消費
DECFSZ COUNT2,F ; COUNT2を減算してCOUNT2に格納
GOTO LOOP2 ; COUNT2が0でなければ繰り返す
RETURN ; COUNT2が0になったら戻る。
END
List.4 圧電ブザーテストプログラム
出力周波数の測定
音の発生が確認できたら、オシロスコープで音の周波数を測定せよ。
応用
- I/OボードのBUZZER端子を、CPUボードのRB0からRB1、RB2・・・RB7にそれぞれ接続しなおしてみよ。RB0に対して音の高さがそれぞれ1/2、1/4・・・1/256になっている筈である。
- 無駄時間待ち処理の時間を種々変更して、音の高さがどのように変化するか確認せよ。このとき、プログラムの各設定値と、それに対する周波数の測定結果を記録しておくこと。