2024年6月8日土曜日

RX621を使ってみる (3)

2024/06/08

秋月電子で販売されている RX621マイコンボード を使ってみる(その3)
ラジコンのサーボをPWMを使って動かす

周期を20msecで、High:0.8msec、Low:19.2msec と High:2.25msec、Low:17.75msec を切り替えて サーボモータを動かす。
(可変範囲はいろいろあるが今回はこの値にする)

PB0とPB1のポートを使って2つのサーボモータを制御する

#include "iodefine.h"

void MTU2_initialize(void)
{
    /* MTU9 = PWM Mode 1 */
    MSTP(MTU9) = 0;              /* Wake up MTU9 */

    /* タイマプリスケーラ選択ビット */
    /* 内部クロック:PCLK / 16 でカウント */
    MTU9.TCR.BIT.TPSC = 2;

    /* クロックエッジ選択ビット */
    /* 立ち下がりエッジでカウント */
    MTU9.TCR.BIT.CKEG = 1;
                             

    /* カウンタクリア要因選択ビット */
    /* TGRAのコンペアマッチ/インプットキャプチャでTCNTクリア */
    MTU9.TCR.BIT.CCLR = 1;

    /* モード選択ビット */
    /* PWMモード1 */
    MTU9.TMDR.BIT.MD = 2;

    /* バッファ動作Aビット */
    /* TGRAとTGRCレジスタは通常動作 */
    MTU9.TMDR.BIT.BFA = 0;

    /* バッファ動作Bビット */
    /* TGRBとTGRDレジスタは通常動作 */
    MTU9.TMDR.BIT.BFB = 0;

    /* I/OコントロールAビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORH.BIT.IOA = 2;

    /* I/OコントロールBビット */
    /* 初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORH.BIT.IOB = 1;

    /* タイマジェネラルレジスタA */
    /* (1/48000000)*16*60000=20msec(50Hz) */
    MTU9.TGRA = 60000;

    /* タイマジェネラルレジスタB */
    /* (1/48000000)*16*4500=1.5msec */
    MTU9.TGRB = 4500;            

    /* I/OコントロールCビット */
    /* 初期出力はLow出力,コンペアマッチでHigh出力 */
    MTU9.TIORL.BIT.IOC = 2;

    /* I/OコントロールDビット */
       /*  初期出力はLow出力,コンペアマッチでLow出力 */
    MTU9.TIORL.BIT.IOD = 1;

    /* タイマジェネラルレジスタC */
       /* (1/48000000)*16*60000=20 msec(50Hz) */
    MTU9.TGRC = 60000;

    /* タイマジェネラルレジスタD */
       /* (1/48000000)*16*4500=1.5 msec */
    MTU9.TGRD = 4500;

    /* タイマカウンタ(TCNT) */
    MTU9.TCNT = 0;

    /* MTU9.TCNTはカウント動作 */
    MTUB.TSTR.BIT.CST3 = 1;
}

void main(void)
{
    long int i;

    /* コアクロック96MHz */
    SYSTEM.SCKCR.BIT.ICK = 0;

    /* 周辺機器クロック PCLK=48MHz */
    SYSTEM.SCKCR.BIT.PCK = 1;

    MTU2_initialize();

    while(1) {
        /* タイマジェネラルレジスタB    */
        /* (1/48000000)*16*2400=0.8msec */
        MTU9.TGRB = 2400;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 2400 + (i / 5000);
        }

        /* タイマジェネラルレジスタB     */
        /* (1/48000000)*16*6600=2.25msec */
        MTU9.TGRB = 6600;
        for (i = 0 ; i <= 21000000 ; i++) {
            /* タイマジェネラルレジスタD */
            MTU9.TGRD = 6600 - (i / 5000);
        }
    }
}






2024年6月5日水曜日

Raspberry Pi Pico で Lチカ (C言語)

Raspberry Pi Pico 開発環境

こちらを参考にインストールする https://www.raspberrypi.com/news/raspberry-pi-pico-windows-installer/

下記からダウンロードする

https://github.com/raspberrypi/pico-setup-windows?tab=readme-ov-file

ダウンロードしたファイル pico-setup-windows-x64-standalone.exe でインストールする

左下にある Build をクリックすると Build できるが、初めは「Pico ARM GCC」を選択する

※初めはすべてコンパイルするみたいで時間がかかる

C:\Users\[ユーザー名]\Documents\Pico-v1.5.1\pico-examples\build\blink に blink.uf2 が出来る

Raspberry Pi Pico をスイッチを押しながらUSBで接続する。RPI-RP2のドライブが現れるので、blink.uf2 をコピペすると、ドライブが無くなってLEDが点滅を始める

プログラミングはしていないが、Lチカ出来た!


マニュアル

https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-c-sdk.pdf

https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf

2024年5月12日日曜日

RX621を使ってみる (2)

 2024/05/12
秋月電子で販売されている RX621マイコンボード を使ってみる(その2)

RX621を使ってみる (1) の LED_Blink.c を変更する

P20 を PWM で明暗を切り替える
P21 を をポート出力で ON/OFF する
周期は2.5ms(400Hz)

#include "iodefine.h"

void MTU1_initialize(void)
{
    /* MTU1 = PWM Mode 1 */
    MSTP(MTU1) = 0;
    MTU1.TCR.BIT.TPSC = 1;
    MTU1.TCR.BIT.CKEG = 1;
    MTU1.TCR.BIT.CCLR = 1;
    MTU1.TMDR.BIT.MD = 2;
    MTU1.TIOR.BIT.IOA = 2;
    MTU1.TIOR.BIT.IOB = 1;
    MTU1.TGRA = 30000;
    MTU1.TGRB = 9000;
    MTU1.TCNT = 0;
    MTUA.TSTR.BIT.CST1 = 1;
}

void main(void)
{
    long int i;

    SYSTEM.SCKCR.BIT.ICK = 0;
    SYSTEM.SCKCR.BIT.PCK = 1;

    MTU1_initialize();

    PORT2.DR.BIT.B1 = 0;
    PORT2.DDR.BIT.B1 = 1;

    while(1) {
        PORT2.DR.BIT.B1 = 1;
        MTU1.TGRB = 9000;
        for (i = 0 ; i < 10000000 ; i++);
        PORT2.DR.BIT.B1 = 0;
        MTU1.TGRB = 25000;
        for (i = 0 ; i < 5000000 ; i++);
    }
}

周期は、(1/48MHz(PCLK) × 4(TPSC) × 30000(TIGA) = 2.5msec となる

2024年5月5日日曜日

RX621を使ってみる (1)

2024/05/05
秋月電子で販売されている RX621マイコンボード を使ってみる
RX621マイコン開発セット(マザーボード・液晶) は、在庫限りになってしまいました

ルネサスの統合開発環境 CS+ を使う
統合開発環境 CS+ | Renesas こちらからダウンロード、ダウンロード時のバージョンは、V8.11.00

CSPlus_CC_Package_V81100-doc-j.zip を解凍し、インストールする
 ※ディスプレイの解像度低いとインストールできない
  追加ディスプレイでHDMIサイズがあればインストールできる
[ツール] - [オプション]
 [全般] - [表示] タブの桁数を 4 に変更
[ファイル] - [新規作成] - [新しいプロジェクトを作成]
マイクロコントローラ : RX を選択
RX621 を展開し、下の方の R5F56218BxFP(100pin) を選択
プロジェクト名に適当な名前を設定(今回は、LED_Blinkを使用)
[作成]

LED_Blink.c を変更する

インクルード文を追加
#include "iodefine.h"

main にコードを追加

    long int i;             /* カウンター変数 */
    PORT2.DR.BYTE = 0x00;   /* PORT2クリア */
    PORT2.DDR.BYTE = 0xff;  /* PORT2の全端子を出力に設定 */
    while(1) {
        PORT2.DR.BYTE = ~PORT2.DR.BYTE;  /* ポート反転 */
        for(i = 0 ; i < 1000000 ; i++);  /* Wait */
    }

[ビルド] - [ビルド・プロジェクト]

出力ウィンドウに下記が表示されれば OK
= 終了しました(成功:1プロジェクト, 失敗:0プロジェクト)

ドキュメント\LED_Blink\DefaultBuild に、LED_Blink.mot が出来ている

motファイルの転送

Renesas Flash Programmer (Programming GUI) | Renesas をダウンロード
Renesas_Flash_Programmer_Package_V31500-doc.zip を解凍してインストール

[ファイル] - [新しいプロジェクトの作成]
 マイクロコントローラ : RX62x
 プロジェクト名 : 適当な名前を入力(今回はRX621を使用)
 ツール : USB Direct

マイコンボードの CN4 のディップスイッチを ON-ON-OFF-OFF に変更しUSB接続
ツール詳細をクリックすると、接続されたマイコンボードが表示される

[接続] をクリック、メインクロックには 12MHz を入力

[ファイルの追加と削除] をクリック、[ファイルを追加] をクリック
LED_Blink.mot を選択する

[スタート] で書き込みが失敗する、USB を抜き差し後に、再度[スタート] で成功する

USB を抜き、CN4 を OFF-ON-OFF-OFF に変更する
USB を接続USBからの電源で起動(ACアダプタでもOK)、マザーボードのLEDが点滅!

2024/06/08更新
Windows 11 では、「hmseusb.sys」のエラーで書き込みができない
[スタート] - [プライバシーとセキュリティ] - [Windows セキュリティ] - [Windows セキュリティを開く]
[デバイス セキュリティ] - [コア分離]
 「メモリ整合性」 : オフ
 「Microsoft の貧弱なドライバーのブロックリスト」 : オフ
 ※これで書き込みできるようになった

ソースをgithub置きました、個人の責任で
https://github.com/tombow-src/RX621