« 拡張PIC16実験 和文モールス受信練習機へ(1) | メイン | 拡張PIC16実験 和文モールス受信練習機へ(3) »

拡張PIC16実験 和文モールス受信練習機へ(2)


 本誌(エレキジャック誌No.20)に掲載されているモールス受信練習機キットでモールス音を出すための実験します。このキットは新仕様の8ピンEnhanced Midrange PIC、PIC12F1822マイコンが使われています。
 今回と次回のモールス実験は簡単なプログラムにて試してみます。 

機能条件
 欧文(英語)でも和文(日本語)でも、モールス受信練習機は最低でも次の機能が必要です。
・ある周波数で音を出す
・その音を鳴らす/止める
・音出ている/止まっている長さの基準を決める
・モールス符号のスピードを決める
・一時停止できるようにする
などです。

 これから2回に分け、モールス受信練習機の実験で使う簡単なプログラムpwmsine2.asmで試してみます。このプログラムは下記のZIP(ejrendoc1.zip)ファイルにあります。これでPIC12F1822マイコンの新仕様なども確認してみます。なお、ZIPファイルの中身は第1回で入れたものと同じです。

EJrendoc1.zip 暫定版ejrendoc1.zipファイル

ある周波数で音を出す
 まず定番の方法で、ある周波数音を出すにはその出力するポート(RA5)をONにして、命令語を「ある時間ループさせる」、そのあとポートをOFFにして「同じだけ命令語をループさせる」を繰り返えせばRA5に接続された圧電スピーカから音が出ます。命令語のループ時間が1msとすれば、音の周波数は1/(1ms+1ms)=500Hzとなります。このあたりは本誌(エレキジャック誌No.20)の記事を参照してください。
 単なる特定周波数の音を出すにはマイコンのPWM機能を使えば簡単に設定できます。PWM機能を使う場合の設定はレジスタPR2に周期となる値(PR2_val)をセット、その半分の値をCCPR1LレジスタにセットすればTimer2によりある周波数でDUTY=50%のON/OFFパルス波形サウンドを作れます。

  出力周波数=クロック周波数/(PR2にセットした値+1)

 実際、マイコンの発振周波数Foscを4MHzとしたとき、出力周波数は周期となる値を1バイト長PR2レジスタに入れても、約4kHzより小さくなりません。マイコンの発振周波数を下げずに、T2CONレジスタのプリスケーラを設定することで、計算式にあるクロック周波数を下げることができます。T2タイマーのプリスケーラは分周比1:1、4、16、64のどれかを指定選択できます。
 PIC12F1822の場合、PWMの出力はRA2かRA5のポートにできますので、CW基板No.1(エレキジャック誌No.20の圧電スピーカの基板)に合わせてAPFCONレジスタでRA5になるようしておきます。
 PWM出力周波数は次の式になります。

  出力周波数=マイコンの発振周波数Fosc/(4*(PR2にセットした値+1)*プリスケーラ)

 実験で使用しているコーディングは次のようになっています。

;CCP1の動作設定
	movlw	2	;prescal Postscal 0=1 1=X4 2=X16  
	movwf	T2CON		;Timer2 PreScal set
pr2_val equ	86	 	;T = 16*87*4/4MHz *prescale 
	movlw	pr2_val
	movwf 	PR2		;

	movlw 	0x0C 		; Set PWM mode, 2 LSbs of Duty cycle = 00
	banksel	CCP1CON		;bank 5
	movwf 	CCP1CON 	;
	movlw	pr2_val/2+3	;****DUTY
	movwf 	CCPR1L 		; Duty Cycle Value set
;
	movlb	0		;bank 0
	bsf 	T2CON,TMR2ON 	; Timer2 starts to increment


 ここの条件値はマイコンの発振周波数4MHz、PR2へ86、プリスケーラが1/16なのでPWM出力周波数fは、

  f=4000kHz/(4*(86+1)*16)=0.718kHz=718Hz

 RA5ピンからの出力波形は図のようになり、約1.4ms周期でON/OFFします。

awa205_pwm_test2.jpgその音を止める/鳴らす
 先のPWM機能で作ったそのパルス波形をRA5ポートから出したままでは、接続された圧電スピーカがピーとなっているだけです。モールス音のようにある程度鳴らして止めるを繰り返すためのプログラムは次のような方法があります。

 「音を鳴らすON」/「とめるOFF」には三つの方法があります。

 ・PWMで使用しているタイマ動作を開始、停止させる
 ・出力しているRA5ポートを出力モード/入力モードにする(TRISA)
 ・内部PWM出力をDSM(DATA SIGNAL MODULATOR)経由で出す


 最初の二つの方法は従来のPIC16マイコンにあった機能で、これでON/OFF制御が可能になります。このタイマを停止/開始やポートを入力/出力にして切り替える場合は、出力するPWM波形タイミングを考慮して行います。
 三つ目の方法はこのマイコンの新仕様で、DSM機能というものがあります。この機能を使うと出力はPWM波形と同期を取って音のON/OFF制御ができます。
 しかし、残念ながら使うときはPWM出力(MDOUT)がRA0ポートになってしまいます。そのためRA5ポートのこのキット基板では使用できません。
 もう少しピン数が多い18ピンEnhanced Midrange PIC、PIC16F1827マイコンならば、DSM機能の出力はPWM出力のRB3と同じポートなので、使ってもよさそうです。

 参考までにDSM機能についてはPIC12F1822のデータシートの「23.0 DATA SIGNAL MODULATOR」に記載されています。

 今回のケースでは周期の切れ目で、バンク切り替えをしながらTRIS-RA5を出力モード(=0)にして音を鳴らし、入力モード(=1)にして音を停止させています。この例に示すようにONになっている期間は短点時間サブルーチンwait_1dotで決めます。

	banksel	TRISA 
	bcf	TRISA,pwmout	;音のON
	movlb	0

	call	wait_1dot

	banksel	TRISA 
	bsf	TRISA,pwmout	;音のOFF
	movlb	0

短点の時間の最高速値は?
 最高速のモールス・スピードを対応する基準短点時間はどこにすればよいか? 法律では和文の標準速度として75文字/分となっています。しかし、高速なものはあるもので、この練習機がモールス電信総合の名人位の練習に使われるとは思われませんが180文字/分の速度、それも3分間です。
第1回目でもありますが、お試し版の和文モールス受信練習プログラム(CWREN_EJ1_B)の最高速度の値として35にしてあります。この短点の時間は約48msなので、欧文なら130文字/分程度です。
 今後は基準となる短点時間の最高速度は変更する必要がありそうです。また、文字数も256文字超えていますので、EEPROMメモリは練習用テキスト・エリアとして不足しそうです。


後田 敏

カテゴリ:

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/6412

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





カテゴリ

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

Powered by
Movable Type 4.1
/*yahoo remove*/