_delay_ms 함수의 부정확성
atmel studio의 _delay_ms는 소프트웨어적으로 F_CPU값 기반 하에 libc에서 함수를 만들어서 제공한다. 그래서 사용자는 해당 라이브러리 함수를 사용하면서 쉽게 delay를 이끌어 낼 수 있다. 하지만 어느정도 정밀을 요구하는 프로그램에서는 _delay_ms 함수에 주의를 기울여야 한다. 그 이유는 인터럽트에 있다. 인터럽트 조건이 만족되면 제어권은 잠시 ISR로 넘어가며, main과는 다른 영역으로 main에서 실행되는 _delay_ms 함수는 흘러가지 않는다. 따라서 ISR이 실행되는 시간만큼 지연이 되기 마련이다. 해답은 클럭 카운트를 셀 수 있는 타이머카운터 기능을 이용하는 것이다. 다만 누적오차가 발생하지 않으려면 CTC 비교매치 및 PWM 등 자동으로 타이머 카운터가 갱신되는..
2019. 5. 24. 02:48