AVR 프로그래밍 질문입니다. (Timer/Counter와 _delay_ms 함수 관계)
글쓴이: kyuho6942 / 작성시간: 화, 2019/02/12 - 1:02오후
안녕하세요 이번에 AVR mcu(Atmega328p)에 프로그래밍 하면서 신기한 현상을 발견해서 왜 이런현상이 일어나는지 궁금해서 질문드립니다.
현재 제 프로그램 상태는 Timer를 사용해서 타이머 오버플로 인터럽트로 시간을 측정하는 부분과
에 정의된 _delay_ms를 같이 사용하고 있습니다. 그런데 프로그램을 작동하게 되면 _delay_ms에 인자로 500을 주었으면 500ms 동안 딜레이가 발생하는데 500ms 보다 좀 더 길고 계속해서 _delay_ms 함수 부분을 반복하게 되면 주기가 점점 길어지는 현상이 발생하더군요.. 이때 타이머 설정을 분주비를 1로 주었고 이 분주비를 높혔는데 (1024) 위에 현상이 발생하지 않더군요 혹시 원인을 알 수 있을까요??
Forums:
AVR 매뉴얼을 보니 _delay_ms()는 단순한
AVR 매뉴얼을 보니 _delay_ms()는 단순한 busy waiting 방식입니다. 따라서 _delay_ms() 함수 실행 중 인터럽트가 발생하면 인터럽트 처리시간 만큼 딜레이가 늘어날 것으로 추측됩니다.
분주비가 1이면 인터럽트가 자주 발생할테니, 추가로 딜레이가 더 늘어나고, 분주비를 높이면 인터럽트가 덜 발생하니 오차가 줄어들테지요.
답변 감사합니다
답변 감사합니다
댓글 달기