2014-06-20 4 views
4

나는 atmega 328p에 시간 카운터를 구현하고있다. 나는 arduino millis 함수의 구현을 살펴 보았고, 왜 혼동 스럽습니까? 왜 그들이 1.024ms (freg = 16MHz, 64 prescaling)마다 실행되는 Timer Overflow Interrupt를 사용하는지, 출력 Compare Match Interrupt를 사용할 수 있는지 정확히 1ms마다 트리거합니다 (OCR0A = 249). Timer Overflow Interupt를 사용하고 정확히 1ms마다 실행되는 Output Compare Match 인터럽트에 대해 계산 된 몇 가지 수정을 수행하면 어떤 이점이 있습니까? 또는 왜 그들이 그것을 사용하고 있습니까?Arduino가 millis 함수에서 1.024ms마다 인터럽트를 사용하는 이유는 무엇입니까?

답변

1

카운터 값 TCNT는 인터럽트를 초 단위로 마이크로 초 계산에 사용됩니다. TOP 값을 정의하기 위해 비교 일치를 사용하면 정확한 인터럽트를 발생 시키지만 TCNT가 리셋 될 때 더 미세한 계산을 복잡하게 만듭니다. 비 TOP 값 (PWM 생성 용)에 대한 비교 일치를 사용하면주기적인 1ms 인터럽트가 발생하지 않습니다.

저는 개인적으로 OCRxA 레지스터에 정의 된 TOP 값을 샘플링하는 두 번째 타이머로 사용하고 있습니다.

관련 문제