2022年5月5日木曜日

Raspberry Pi Pico プログラミング事始め。タイマー割り込み

今日はタイマー割り込みをしてみた。

結構APIがしっかりしていて、下記のようにPWMのプログラムをタイマー割り込みVerに変更してみた。

参考は下記サイト

https://qiita.com/keyyum/items/3ce448c098c546dced20

#include "pico/stdlib.h"
#include "hardware/pwm.h"

const uint LED_PIN = 22;  
uint slice_num;
int i=0;
int flag=0;

bool timer_callback( repeating_timer_t *rt )
{

    pwm_set_enabled(slice_num, false);

    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);
    return ( true );

}

void init(void)
{
 
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    gpio_set_function(LED_PIN, GPIO_FUNC_PWM);
    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, 0);
    pwm_set_enabled(slice_num, true);

}


int main() {

    init();
   static repeating_timer_t timer;
   
    add_repeating_timer_ms( -10, &timer_callback, NULL, &timer );


    while (true) {
       
    }

    }

0 件のコメント:

コメントを投稿