気になったので、タイマー0、タイマー1、タイマー2
の各タイマーについて、フェーズコレクトPWMモードだと
どんな動作になるのか、AVRstudioの
シミュレーターで確認してみました。
まずはタイマー0をモード5(フェーズコレクトPWM)で
使用してみました。
さすがにタイマー0は思ったとおりに動作してくれます。
問題なし。
次にタイマー1をモード11で使用してみました。
相変わらず、モード3と同じ動作になってしまいます。
(モード11は0b1011なので、やはり上位2ビットが
無視されて0b0011=3として処理されているような
気がします)
そしてタイマー2をモード5で使用してみました。
こちらは、TOP値にOCR2Aがきちんと適用
されています。ただ、カウンタ値=OCR2Bに
なっても思ったように反転しません。
詳説すると、カウンタが上昇中のときは出力がずっと1。
下降の途中(OCR2Bとマッチ)の時に0に
なり、カウンタ=BOTTOMの時に1出力に
戻るという風に見えます。
結構ラフにテストしたので、タイマー2のほうは
もしかしたらちょっと手違いがあるかもしれませんが、
でもやっぱりタイマー2もだめですねぇ。シミュレーター
が仕様どおりに動いていないようです。
シミュレーターだけのバグなのか、それともerattaに
載ってないバグの発覚を恐れ、シミュレーター自体
の仕様を実際のチップにあわせてあるのか…
(考えすぎ?)
どちらにしても、私の脳みそ及び実験器具では手に
負えそうにありません。
シミュレーターの結果が仕様書どおりでなければ、
(信用できなければ)それはひとまず使用できない機能と
判断すべきでしょう。
そもそもMEGA48だけNGなのか、それとも
全チップともダメなのか… うーん、困ったものです。
ひとまずcbi、sbiを使って、1サンプリング
あたり8クロック(2.5MHz)での実現を先行し、
あとで追加仕様として3.33MHz対応なり、
4MHz対応なりを考えるのが良さそうな気がします。
当初、AVRのMEGA48でサクッと完成させ、
その次にdsPICを使って同じ機能のもの(もう少し速いもの)
を造り、さらには今後CPLDを使ってもっともっと
速いものを造ろうと思っているので、ここで立ち止まる
よりは先に進んでからあとで考える方が賢い気がします。
(補足)
この書き込み、及び1つ前の書き込みのテストで使用したAVRstudioのバージョンですが、12/18公開の
SP2を適用済みの最新版を使用しました。
|