2022年5月4日水曜日

Raspberry Pi Pico プログラミング事始め。PWM編

 続いて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 件のコメント:

コメントを投稿