GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
WAVPを使うとモーター用PWMの周期がかわってしまうようです。
パルス幅は変わりませんが、周期が2ms程度から700us台になってしまいました。
void loop() { analogWrite(6,50); wavp.play("organ.wav"); wavp.play("okoto.wav"); wavp.play("jingle2.wav");}
もしかして,P1.5が入力(Hi-Z)のときにP1.1をビット操作したのではありませんか? そうだとすると,ビット操作によってP1.5の出力ラッチが書き換わっている可能性が考えられます。P1.5をTO02に設定して,出力に設定する直前にP1.5をビット操作でクリアしてみてください。
【修正】
そうか,SO1はSAU1の出力のレジスタでしたね,P1.5とは関係ない信号だったので勘違いしていました。
SO1レジスタは16ビットレジスタなので,リード・モディファイ・ライトでbit1をクリアしていると思いますが,そのときにbit8(CKO10:SCK20に相当)が変に書き換わっているのかもしれません。CKO10が0になれば,P1.5の値によらず,TO02は出せるかもしれません(P1.5を0にするのが正規の方法ですが)。
エイジさん、本件アドバイスをいただきましてありがとうございました。
まず、私にひとつ勘違いがありました。問題の発端としては①WAV再生(PWM)→②TONEでビープで②が動作しないというものなのですが、②はPWMでなく、タイマーによるポートパタパタで実現されていました。とはいえ、原因としては兼用機能の出力ラッチによる影響でした。
問題は2つあり、一つ目はエイジさんにアドバイスいただいたSO1レジスタで、16ビット操作専用にもかかわらずプログラムがビット操作になっており、該当ビットだけを0にするはずが、すべてのチャネル用のビットが0になってしまっており、P1.5の出力にも影響を与えていました。
二つ目は①WAV再生後にタイマー機能の出力TO0のビット2がクリアされておりませんでした。このため出力ラッチがORで入っているため、P1.5出力が固定され、正常に動作しませんでした。
>Maenoさんへ、
一応修正したwav_libを添付いたしますので、時間が経ってしまい恐縮ですが、試してみていただけるとありがたいです。
maenoさん、ありがとうございます。添付ファイルを見落としていました、すみません。原因はmaenoさんがおっしゃる通りでポートの構成上、出力ラッチをLOWにしておかないと、PWMが正しく出力されませんでした。
RL78では、ポートと兼用機能を切り替えるプログラムはなかなか難しいと感じますね。。
念のため修正ファイルしたファイルを添付いたします。