最近ルネサスのマイコンを触り始めた初心者です。
ぜひ皆様のお力をおかしください。
現在 RX220 シリーズを使い、パルス出力を行おうと考えています。
出力されるパルスの周波数はリアルタイムで変化させていきたいのですが、変化させたい周波数の範囲が広く、16bit カウンタでは足りません。
そこで、カスケード接続を使い、32bit カウンタでパルス出力を行おうと思うのですが、如何せん仕様書を見てもよく理解できていません。
・コンベアマッチにて出力ピンをトグルしたい
・16bit のカウンタでは可変可能な周波数の範囲が狭い
・上記理由から 32bit タイマを使いたいと思い、MTU1・2 をカスケード接続する方法を試したい
・MTU2 のオーバーフローをトリガに MTU1 をカウントアップさせるが、MTU1 でコンベアマッチを設定すると上位ビットのみでの出力制御になってしまうのでは?
例えば、32bit でコンベアマッチできるとして、33FF00h でトグルするよう設定したい場合、MTU1 で 33h、MTU2 で FF00h と設定しても希望する動作にならないと思います。
この場合、MTU1 のカウンタが 33h に到達した時点で MTU1 で指定できるピンがトグルし、MTU2 のカウンタが FF00h に到達した時点で MTU2 で指定できるピンがトグルするという別々の動作が発生するだけだと思われます。
ある出力ピンを 32bit の値でコンベアマッチさせトグル出力するには、どういう方法が適切でしょうか?
教えていただければ幸いです。
よろしくお願いいたします。
sun-tkさん こんにちは、NAKAといいます。勘違いでしたらすみません
0.1Hz~1000Hzくらいであれば、ふつうのI/O portを使って、MTUで1msのインターバル割り込みを作っておいて、割り込みの中で unsigned short c_count; extern unsigned short SET; void MTU0_INT(void) { c_count++; if(c_count >= SET) { c_count = 0; Port = ~Port; } } とかして、SETを変更していけばどうでしょうか? c_countやSETをunsigned long とかにすれば 0.01Hzどころかとんでもなくゆっくりのパルスも出力できそうですよ!
SET=1 1000Hz
SET=10000 0.1Hz
SET=100000 0.01Hz