Arduino의 Flextimer2 정보

5473 단어 Arduino

개요



Flextimer2의 인터럽트 간격에 대해 의문이 발생했기 때문에 실험했습니다.

FlexiTimer2::set(times, resolution,#function)



이 타입의 경우, 1second에 100회라고 하는 것이 공식 문서인 것 같습니다만.

FlexiTimer2::set(unsigned long units, double resolution, void (*f)())
this function sets a time on units time the resolution for the overflow. Each overflow, "f"will be called. "f"has to be declared void with no parameters. E.g. units=1, resolution = 1.0/3000 will call f 3000 times per second, whereas it would be called only 1500 times per second when units=2.
#include <FlexiTimer2.h>

volatile boolean flag = true;

void control() {

  digitalWrite(A0,flag);
  flag = !flag;

}
void setup() {
  pinMode(A0,OUTPUT);
  FlexiTimer2::set(1, 1.0 / 100, control);
  FlexiTimer2::start();

}

void loop() {
  // put your main code here, to run repeatedly:

}

이제 100회마다 ON, OFF시켜 보면

Arduino_Nano라면

에서 0.784ms마다 된다.
역시, 목적대로 되어 있지 않다.

그건 그렇고
FlexiTimer2::set(unsigned long ms, void (*f)())
와의 차이는 지정 시간의 정밀도에 따라 구분한다. 구체적으로 말하면 ms 지정의 분은 0.1ms 간격등의 지정은 할 수 없다, 라고 하는 것보다 자동적으로 1ms에 올릴 수 있다(반올림일지도). 이런 제도의 차이이다.
#include <FlexiTimer2.h>

volatile boolean flag = true;

void control() {

  digitalWrite(A0,flag);
  flag = !flag;

}
void setup() {
  pinMode(A0,OUTPUT);
  FlexiTimer2::set(10, 1.0 / 1000, control); 
  FlexiTimer2::start();

}

void loop() {
  // put your main code here, to run repeatedly:

}


  FlexiTimer2::set(10, 1.0 / 1000, control); 

변경하면,

10ms 간격으로 개선되었습니다.

결론


FlexiTimer2::set(times, resolution,#function)

이 지정을 사용하는 경우는, resolution을 세세하게, times를 크게 하는 쪽이 올바른 인터럽트가 되어, times가 1이면, 대다수 대규모의 시간 간격이 되는 것에 주의해 주었으면 한다

좋은 웹페이지 즐겨찾기