2023年10月15日日曜日

Arduino UNO R4 Minimaでタイマー割り込み

 Arduino UNO R4 Minimaでタイマー割り込みってどうやるのかを調べてみる。

正確にタイミングを制御したいときって、delayとかdelayMicrosecondsとかじゃだめだよね。Arduino UNO R3まではATMEGA328Pのタイマーを使ったり(レジスタ直叩き)、TimerOneとかMsTimer2とかライブラリを使ってた。でUNO R4ではどうなん?

で調べてみると、FspTimerってのが最初っからあるらしい。

参考サイト
Arduino UNO R4のFspTimerライブラリの使い方

study1.ino
  1. #include <FspTimer.h>
  2.  
  3. static FspTimer fsp_timer;
  4. static PinStatus led_state;
  5.  
  6. void timer_interrupt_callback(timer_callback_args_t* arg){
  7. if(led_state==LOW){
  8. led_state=HIGH;
  9. }else{
  10. led_state=LOW;
  11. }
  12. digitalWrite(LED_BUILTIN,led_state);
  13. }
  14.  
  15. void setup(void){
  16. led_state=HIGH;
  17. pinMode(LED_BUILTIN, OUTPUT);
  18. digitalWrite(LED_BUILTIN,led_state);
  19. uint8_t timer_type = 0;
  20. int8_t channel = FspTimer::get_available_timer(timer_type);
  21. fsp_timer.begin(TIMER_MODE_PERIODIC, timer_type, channel,10.0f, 0.0f, timer_interrupt_callback, nullptr);
  22. fsp_timer.setup_overflow_irq();
  23. fsp_timer.open();
  24. fsp_timer.start();
  25. }
  26.  
  27. void loop(void){
  28.  
  29. }

これで、10Hzでシンボルが入れ替わるのでパルスとしては5Hzになる。

はいなー。できたよー。
ところで、begin関数の引数のDutyはTIMER_MODE_PERIODICでは無視されるらしい。まぁ当然か。

0 件のコメント:

コメントを投稿