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이면, 대다수 대규모의 시간 간격이 되는 것에 주의해 주었으면 한다
Reference
이 문제에 관하여(Arduino의 Flextimer2 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/2cf037663aa95cd4e6aa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 타입의 경우, 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이면, 대다수 대규모의 시간 간격이 되는 것에 주의해 주었으면 한다
Reference
이 문제에 관하여(Arduino의 Flextimer2 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hiRina/items/2cf037663aa95cd4e6aa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
FlexiTimer2::set(times, resolution,#function)
Reference
이 문제에 관하여(Arduino의 Flextimer2 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hiRina/items/2cf037663aa95cd4e6aa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)