SSブログ

Arduino UNO R4でLチカ、、タイマーで。 [Arduino]

Arduino UNO R4でタイマーを使ったLチカをやってみた。
blink_r4.png
まだよくわかっていないものの、とりあえず動いたという感じです。
以下のスケッチが正しいかは怪しい。

ちょっと調べてみると、、
・AVRのようにレジスタを直接いじるのはちょっと難しそう
・FspTimerというのを使うといいっぽい
・FSPとは Flexible Software Package のことらしい
・2種類のタイマー GPT (General PWM Timer)、AGT(Asynchronous General Purpose Timer)がある
・AGTタイマーは2つだけで、1つ(channel 0)は millis()、microseconds()に使用済
・get_available_timer で使用可能なタイマーのタイプとチャンネルを取得(GPTから先に探している)

FspTimerについて詳しく調べられた方のページ:
Arduino UNO R4のFspTimerライブラリの使い方 - Qiita
https://qiita.com/yasuhiro-k/items/93efb640aa12f3db9086

これをもとに作ってみた。
2.0Hz(=500msec毎)でLEDのON/OFFを切り替えます。
周波数の指定はfloat型だけど1Hz未満では動作しなかった。
タイマーはGPTから先に空きを調べていくのでGPTを使用していると思われる。
#include <FspTimer.h>
static FspTimer fsp_timer;

void blinkLED(timer_callback_args_t __attribute((unused)) *p_args) {
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  uint8_t timer_type;
  int8_t  timer_ch = FspTimer::get_available_timer(timer_type);
  if (timer_ch < 0) return;
  fsp_timer.begin( TIMER_MODE_PERIODIC, timer_type, timer_ch, 2.0f, 0.0f, blinkLED, nullptr );
  fsp_timer.setup_overflow_irq();
  fsp_timer.open();
  fsp_timer.start();
}

void loop() {
}

つづいてもう一つ。

AGTをライブラリに仕上げられた方のページ:
GitHub - washiyamagiken/AGTimer_R4_Library
https://github.com/washiyamagiken/AGTimer_R4_Library

これをもとにライブラリをLチカ専用に展開。AGTのチャンネル1を使用。
TIMER_SOURCE_DIV_64 のとき、period countsが 32768 だと1Hz、16384だと2Hz (500msec毎)。
#include <FspTimer.h>
static FspTimer fsp_timer;

void blinkLED(timer_callback_args_t __attribute((unused)) *p_args) {
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  fsp_timer.begin( TIMER_MODE_PERIODIC, AGT_TIMER, 1, 16384, 0, TIMER_SOURCE_DIV_64, blinkLED, nullptr );
  IRQManager::getInstance().addPeripheral( IRQ_AGT, (void*)fsp_timer.get_cfg() );
  fsp_timer.open();
  fsp_timer.start();
}

void loop() {
}


<FSPタイマー関連プログラムの在処>
%localAppdata%\Arduino15\packages\arduino\hardware\renesas_uno\1.0.2\cores\arduino\FspTimer.h
%localAppdata%\Arduino15\packages\arduino\hardware\renesas_uno\1.0.2\cores\arduino\FspTimer.cpp

nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。