以前質問させてもらった者ですが、再び質問させていただきます。PWMを出力するプログラムを書いたのですが
#include<3048f.h>
void initial(){
ITU.TMDR.BIT.PWM0=1;
ITU0.TCR.BYTE=0xC3;
ITU0.GRA=0x5000;
ITU0.GRB=0xffff;
ITU.TSTR.BIT.STR0=0;
PA.DDR=0xff;
}
void main(){
initial();
ITU.TSTR.BIT.STR0=1;
}
いざオシロスコープに出そうとしたら、PWM波が出力されません。オシロスコープをマイコンにつなぐのは、GNDであるCN4−2やCN2−1と出力であ
るPAのCN1−8から15につなげばいいのではないんですか?
後、もう一つ質問なんですが、PWM信号は以下のようなプログラムでも出力できるのでしょうか?
#include <3048f.h>
/* 待ち時間発生初期化 ************************************/
void timer_init(void){
ITU0.TCR.BYTE = 0x23; /* GRAコンペアマッチ clock 1/8 */
ITU0.GRA = 0x0002; /* GRAを2(0.001msec)に設定 */
ITU.TSTR.BIT.STR0 = 0; /* カウント停止状態 */
return;
}
/* 待ち時間発生 引数に、必要なミリ秒を指定する***********/
void wait(int msec){
int j = 0;
ITU.TSTR.BIT.STR0 = 1; /* ITU0 TCNTカウント開始 */
for(j=0;j<msec*2/5;j++){
do{ /* TCNT = GRAになるまで待つ(0.001mS) */
}while(ITU0.TSR.BIT.IMFA == 0);
ITU0.TSR.BIT.IMFA = 0; /* 検知フラグを戻して再開 */
}
ITU.TSTR.BIT.STR0 = 0; /* ITU0 TCNTカウント終了 */
return;
}
void main(int ch1,int ch2,int ch3,int ch4,int ch5,int ch6,int gnd){
while(1){
int ch1=560;
int ch2=440;
int ch3=330;
int ch4=222;
int ch5=333;
int ch6=444;
int gnd=0;
P5.DDR = 0xff; /*ポート5を出力に*/
P5.PCR.BYTE = 0x00; /*ポート5プルアップoff*/
P5.DR.BYTE = 0x00; /*ポート5全てoff*/
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch1);
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch2);
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch3);
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch4);
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch5);
P5.DR.BYTE = 0x02;
wait(gnd);
P5.DR.BYTE = 0x01;
wait(ch6);
}
}
ある知り合いのプログラムを見ていたら、このようなプログラムでラジコンを操作するgndと5vを交互に出力するPWM信号のようなPPM信号という信号
を出力しているようですが。(値は変えましたが)これもオシロスコープで出力のP5を見たのですがいまいち分からなくて。長くなってすみませんが、ぜひ教
えてください。よろしくお願いします。