続いてPWMを動かしてみます。
LEDをGPIO 22に付けました。
ので 22ピンのPWMを動かしてみます。
ソースコードは下記のように周期的にPWM周期を変えてみました。
ハマった点は3か所
1)#include "hardware/pwm.h" をインクルードする。。。
2)uint slice_num = pwm_gpio_to_slice_num(22); ここはGPIO番号を入れれば良いらしい。
3)一番最初にBuildできなかったのが、CMakeLists.txtに記載が必要だった。
# Pull in our pico_stdlib which pulls in commonly used features
target_link_libraries(pwm pico_stdlib hardware_pwm)
これだから人気でないんだよな~
#include "pico/stdlib.h"
#include "hardware/pwm.h"
int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
const uint LED_PIN = 22;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
gpio_set_function(LED_PIN, GPIO_FUNC_PWM);
uint slice_num = pwm_gpio_to_slice_num(22); //pin 22 slice No = 22
/*例えばPWM周波数を1KHzに、PWMの分解能を8ビット(0~255)に設定したい場合、
sysclock = 125,000,000Hz、wrap = 255、f=1000Hz より
clkdiv = sysclock / ((wrap+1) ⋅ f )
分周比 clkdiv = 488.2812 となる。*/
pwm_set_clkdiv(slice_num, 488.2812);
pwm_set_wrap(slice_num, 255);
// チャンネルPWMのHigh期間を設定
pwm_set_chan_level(slice_num, 0, 5);
pwm_set_enabled(slice_num, true);
int i=0;
int flag=0;
while (true) {
if(flag==0){
i=i+1;
if(i==256) flag=1;
else ;
}
else {
i=i-1;
if(i==0) flag=0;
else ;
}
pwm_set_chan_level(slice_num, 0, i);
pwm_set_enabled(slice_num, true);
sleep_ms(10);
pwm_set_enabled(slice_num, false);
}
#endif
}
0 件のコメント:
コメントを投稿