![見出し画像](https://assets.st-note.com/production/uploads/images/142866285/rectangle_large_type_2_48d760deb446a8c02fcc1affc5b7c34e.jpeg?width=1200)
使用可能なタイマ [Arduino UNO R4 MINIMA]
レジスタでPWMを使うプログラムを書きたいが、使ってはいけないタイマがある。
![](https://assets.st-note.com/img/1716753116112-u69pjE2mVT.png?width=1200)
![](https://assets.st-note.com/img/1716753034780-haI9KNuwIl.png?width=1200)
R4のマイコンにはGPT[0-7]とAGT[0,1]の10個のタイマがあるが、GPT[0-3,7]はPWMやパルス測定などで、AGTのうち一つは時間計測などに使われている。
残りのタイマは使ってもいいのか
使ってもいいタイマはFspTimerライブラリのget_available_timer()で獲得される。
#include "FspTimer.h"
#define NUM 10
FspTimer timer[NUM];
void setup() {
Serial.begin(9600);
while(!Serial);
uint8_t timer_type[NUM];
int8_t timer_ch;
for(int i=0; 1; i++){
timer_ch = timer[i].get_available_timer(timer_type[i]);
if(timer_ch < 0) break;
//use timer
timer[i].begin(TIMER_MODE_PWM, timer_type[i], timer_ch, 1000.0, 10.0);
Serial.print("timer:type_");
Serial.print(timer_type[i]);
Serial.print(", ch_");
Serial.println(timer_ch);
}
}
void loop() {
}
timer:type_0, ch_4
timer:type_0, ch_5
timer:type_0, ch_6
timer:type_1, ch_1
GPT→type_0, AGT→type_1 なので、GPT[4-6]、AGT[1]は使えるみたい。
ただ"analogWave.h"を使って波形を出したりすると、中で"FspTimer.h"を使っているので残りのタイマが減る。
#include "FspTimer.h"
#include "analogWave.h"
#define MAX_TIMER_NUM 10
FspTimer timer[MAX_TIMER_NUM];
analogWave wave(DAC);
void setup() {
Serial.begin(11520);
while(!Serial);
//sineWave from A0. use DAC,Timer,DTC,ICU
analogWriteResolution(12);
wave.sine(1000.0); //start
//check free timers
uint8_t timer_type[MAX_TIMER_NUM];
int8_t timer_ch;
for(int i=0; 1; i++){
timer_ch = timer[i].get_available_timer(timer_type[i]);
if(timer_ch < 0) break;
//use timer
timer[i].begin(TIMER_MODE_PWM, timer_type[i], timer_ch, 1000.0, 10.0);
Serial.print("timer:type_");
Serial.print(timer_type[i]);
Serial.print(", ch_");
Serial.println(timer_ch);
}
}
void loop() {
}
timer:type_0, ch_5
timer:type_0, ch_6
timer:type_1, ch_1
sine waveを出すためにGPT[4]が奪われた。
この記事が気に入ったらサポートをしてみませんか?