2022年5月5日木曜日

Raspberry Pi Pico プログラミング事始め。GPIO 入力。

キー入力の割り込みを身に着けようと思ったら、まだ通常の割り込み入力も行っていなかった。

慌てて、下記プログラムを記載。

はまった点

・Serial標準出力を使うときには、stdio_init_all();を入れないとダメだった。

 全然GPIO入力と関係ない所ではまりました。

 その他はすなおに作れました。。。

ボタンを押した回数のカウントです。


#include "pico/stdlib.h"
#include <stdio.h>

int main() {
    stdio_init_all();
    int i=0;
    const uint input_PIN = 20;
    gpio_init(input_PIN);
    gpio_set_dir(input_PIN, GPIO_IN);
    while (true) {
     if(gpio_get(input_PIN) == 0)
     {
         i++;
         sleep_ms(500);
         printf("%d",i);
         printf("kaime\n");
     }
     else ;
    }
}


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) {
       
    }

    }

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
}



2022年5月3日火曜日

Raspberry Pi Pico プログラミング事始め。UART編 出力PINを変える。

 UART0は色々なPINから出力できるようだ。

今回は16,17ピンからFT232Cに出力させたい。

こんな感じでできました。

GPIOの番号で出力ピンを設定するのね。。。


/**
 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <stdio.h>
#include "pico/stdlib.h"

int main() {
    stdio_init_all();
    int i;
    i=0;

    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    uart_init(uart0, 115200);
    gpio_set_function(12, GPIO_FUNC_UART);
    gpio_set_function(13, GPIO_FUNC_UART);
    uart_set_translate_crlf(uart0, true);

    while (true) {
        //printf("%d",i);
       
        sleep_ms(1000);
        if(i==0) {
            uart_puts(uart0, "Hello world!\n");
            gpio_put(LED_PIN, 1);
            i=i+1;
        }
        else {
            i=0;
            uart_puts(uart0, "GPIO Change!\n");
            gpio_put(LED_PIN, 0);
        }
       
    }
    return 0;
}


2022年4月30日土曜日

Raspberry Pi Pico HWについて

 USBケーブルの抜き差しが面倒臭い。

リセットボタンを追加してリセットしながらBOOTボタンを押して、リセットを話してからBOOTボタンを離せば。

USBケーブルを抜き差ししないでも、書き込めれるらしい。



2022年4月29日金曜日

RPI Pico テストプログラムを作る。

 無事ビルドできたので、サンプルプログラムを実行してみた。

こちらも開発環境を参考したページから

https://shinog.jp/computer/raspberry-pi/pico-windowsvisual-studio-code%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e8%a8%ad%e5%ae%9ac-c%e8%a8%80%e8%aa%9e%e3%81%9d%e3%81%ae%ef%bc%92/

同じように実施。

Makefileを作らないとならないのね~

めんどうくせ~

ベースのMakefileを一括でファイル名を置換して使い回すんだね。。。

あと良くわからないけど、pico_sdk_import.cmakeもサンプルからとってきて使い回すとの事、

なんだかな~

これだと、人気でないな~ と思いながらも、できた。

Picoに書き込むときに一悩み。。。

Picoのプッシュボタンを押しながらUSBを刺すと。

エクスプローラーで見えた。

そしたら事項ファイル XXX.uf2 ファイルをドラッグアンドドロップで書き込み終了!


Raspi pico 事始め Windows10で環境立ち上げ。

 色々マイコンを見ていたら、昨今の半導体不足でなかなか安い良いマイコンが無い。

ふと、見るとRPI picoが600円で在庫も結構ある。

この先の供給もよさそうなので、こちらをメインのマイコンにしようと環境立ち上げを始めた。

基本的にはWindows環境でプログラミングをする。

基本的にはこのページ通りに立ち上げた。

https://shinog.jp/computer/raspberry-pi/pico-windowsvisual-studio-code%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9Ac-c%E8%A8%80%E8%AA%9E%E3%81%9D%E3%81%AE%EF%BC%91/

その通りに実施したが、しっかりハマった。

Visual Studio codeを普通に今までのPython開発環境のショートカットから立ち上げたら、うまくBuildできない。

picoの開発環境を入れた所にできるショートカットから立ち上げないとエラーになる。

数時間悩みました。。。