小寺さん、こんにちは、廣田です。 私も使ったことがないので思いつきで書きます点をご容赦。 KODERA Masaru wrote: > さて本題ですが、現在H8 Tinyシリーズの3687Fを使用してUPS > (無停電電源装置)の開発を行っています。 > サイン波形(50/60Hz)20KHzのPWMを出す必要があり16ビットタイマVを > PWMモードにて使用していますが、タイマVのGR(ジェネラルレジスタ)の 確認ですが、この質問で「サイン波形(50/60Hz)」と言うところは 関係ない事ですね? 問題は20kのPWMの波形の乱れだけ? ご質問に 主題と関係ない語句が出てくると混乱してしまいます。 タイマVと有りますが、タイマZの間違いと思います。 > コンペアマッチとGRの書き込みが競合してPWM波形の一部が禁止され > (1サイクルあたり1〜2回)PWM波形が歪み正常に出力されません。 ML(2243)にアップされた小寺さんのリストを見ると以下の様に使っている と想像されますが、いかがでしょうか? 周期設定にGRAを使い、この周期は50us(20KHz)固定。 パルスワイズを変えるのに使っているレジスタはGRB,GRC。 実際にGRB,GRCの書き換えタイミングは、書き換えている所のリストが 出ていませんが、GRAのコンペアマッチが割り込みとして許可されている ので、GRAコンペアマッチ時にGRB,GRCを書き換えるものと想像されますが いかがでしょうか? (ML-2243)で「コンペアマッチ時に書き換える方法が うまくいかない。」と有りますが、コンペアマッチ時しか書き換えることが できないはずです。 なぜならば、コンペアマッチ時の割り込みから書き換えまでのソフト実行に よる遅延時間が有るから、このタイミングで書き換えれば、コンペアマッチと レジスタ書き換えの競合が起きることはないからです。 「割り込みが発生してから、最大35usの遅延で書き換えられる」と「50% 位のところでの発生が一番多い」と有りますが、50usの半分25usと35usの 遅延と言うのが近いので疑わしいですね。 「バッファ機能が働かない」と有りますが、バッファからGRへ書き換える まさにそのタイミングでバッファそのものをソフトが書き換えようとすると バッファが働いていないように見えるのではないでしょうか? また、書き換えタイミングをGRC,GRBのコンペアマッチの必ず後にしたい ならこれらの割り込みも許可して、各々の割り込みタイミングで書き換える ようにすれば、コンペアマッチと書き換えの競合は発生しないはずです。 20MHzのクロックのCPUを使っているのですからGRAのコンペアマッチ割り込み から数マイクロ秒以内に次のGRC,GRBの値を書き込むことができるのでは? と思います。 割り込み処理の優先度を見直す必要もあるかもしれません。 可能なら、処理シーケンスを見直し、 割り込み->データ入力->だらだら演算処理->演算処理結果書き込み。 ではなく、 割り込み->以前の演算処理結果を書き込み->データ入力->だらだら演算処理-> ->演算処理結果を記憶。 とするのも一手です。 では。 -- /****************************************************************************** My mail is reproduced precisely by making a setup of a lapel of your mail software more than 80 characters. Name: 廣田 正孝 "Masataka Hirota" E-mail address: mhirota@xxxxxxxxxxxxx GCD03040@xxxxxxxxxxx ******************************************************************************/