伝助音声ボードのPWM制御の実験を行いました。 PWMの測定は、今回はC8051のPCAを使うことにしました。 PWMの立上がり/立下りエッジで割り込みをかけ、立上がりでカウンターをクリアー、立下りでカウンターをキャプチャーします。 カウンター生データ−は、1msで07E1h, 2msで0FB2hでした。 これを、1ms=0, 2ms=7Fに変換します。 これをQに積み、同じデータ−が8個連続で来たら、メッセージの再生をスタートします。 これは、PWMのジッタなどによるゴミ取りにも役立ちます。 メッセージ再生のディレーは全く感じません。 再生したメッセージは、そのメッセージの最後まで行くと自動的に停まります。 新しいメッセージの再生は、新しいPWMに変更するとスタートします。
今回の制御方法の長所は、 1: 今使っているモーションエディターで、そのまま制御、プログラムできる。 2: 接続は、サーボモーターと同じ、グランド/電源/PWMの3本の線でOK。 3: PWMの範囲は1ms〜2msで約100のメッセージを制御可能。 4: メッセージは、最大8分までOK。 欠点としては、 1: 同じメッセ−ジの連続再生は、一度ダミーの無音声を経由。 2: メッセージの再現性を確保するため、録音/再生に同じサーボコントローラを使う必要がある。
PWM制御によるメッセージ再生の動画
<私的メモ> ■PCAレジスター ;INIT PCA MOV PCA0CN, #01000000B ;bit6=1 PCA Counter/Timer enable MOV PCA0CPM0, #00110001B ;bit0=1 enable CCF INT これ重要、割り込み用
■バグ ;================================= ; 16bit 左シフト ; LSBに0、MSBのはみ出たのは切り捨て ;================================= ; RL16 ; XHXL = XH,XLをYL回左シフト
RL16: MOV A, XL CLR C RLC A MOV XL,A MOV A,XH RLC A ;<--ここバグっていた(RRC A)おいおい MOV XH, A DJNZ YL,RL16 RET
■クロスバーの使い方。 任意のポートへのアサインは、使用していないポートをスキップして、目的のポートのプライオリティーを上げる。
|
|
|