PIC32MX220F032Bでpwmをやってみた。
サンプルないのかなーと思ったが、pwmに使う機能が
Outcompareというものらしく、よく見るとサンプルがあった。
やってる内容を簡単にまとめると下記みたいな感じ。
すごく簡単だった。
・まずpwmを行うピンを設定。
特にピンが決まっておらず、PPSという機能でピンを決める必要があるため。
デフォルトはどこかよくわからない。(0だったら必ず設定する必要があるかも)
設定の仕方はプログラムとデータシートをOC1で検索してもらえれば
すぐわかると思う。
(あってるかは知らないが動いたので…)
あとで調べたらplibにPPSOutputというマクロもあった。
確かに他のプログラムで見たことがある。
変なマクロだなと思っていたがようやく意味がわかった。
・plibを使って簡単にPWMを設定。
|c|
void __delay_us(WORD us)
{
DWORD start = _CP0_GET_COUNT();
DWORD end = start + SYS_FREQ / 10000000 / 2 * us;
// DWORD end = start + SYS_FREQ / 1000000 / 2 * us;
if (end > start) while (_CP0_GET_COUNT() < end);
else while (_CP0_GET_COUNT() > start || _CP0_GET_COUNT() < end);
}
void __delay_ms(unsigned int msec) //1msec遅延関数
{
unsigned int i;
for(i=0; i<msec; i++) {
__delay_us(1000);
}
}
int main(void)
{
char s[17];
int i;
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
mJTAGPortEnable(DEBUG_JTAGPORT_OFF);
RPB15R = 0b0101;
OpenTimer2(T2_ON, 0x550);
/* Enable OC | 32 bit Mode | Timer2 is selected | Continuous O/P | OC Pin High , S Compare value, Compare value*/
OpenOC1( OC_ON | OC_TIMER_MODE32 | OC_TIMER2_SRC | OC_CONTINUE_PULSE | OC_LOW_HIGH , 0x550, 0x500 );
while(1)
{
for (i = 0; i < 4; i++) {
__delay_ms(1000);
SetDCOC1PWM((0x550 - 1) * i / 4);
}
}
}
||
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント