本誌(エレキジャック誌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します。
■その音を止める/鳴らす先の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メモリは練習用テキスト・エリアとして不足しそうです。
後田 敏
