티스토리 뷰

이번 글에서는 디지털 시계 만들기 프로젝트의 핵심이라고 할 수 있는 타이머 설정에 대해서 설명하도록 하겠다.

ATtiny85의 Timer/Counter0을 이용하여 일정한 시간 간격으로 타이머를 동작 시키도록 할 것이다.

입문 과정에서 설명하였던 타이머/카운터 - PWM(CTC Mode)을 참고하여 원하는 시간에 인터럽트가 발생되도록 설정해준다.  하드웨어 타이머를 사용하면 CPU 동작과 무관하게 일정한 시간 간격으로 이벤트를 제공하므로 비교적 정확한 시계로 동작될 수 있게된다.

ATtiny85는 공장에서 제조될 때 기본적으로 1MHz로 동작되도록 설정된다.  MCU 내부에 RC oscillator를 이용하여 8MHz 클럭을 만들고, 이를 8분주하여 1MHz 클럭을 CPU로 공급하게 된다.  이 클럭은 타이머로도 공급되므로 타이머의 동작 클럭은 1MHz가 된다.

27번 줄을 보면 타이머로 들어오는 클럭을 다시 64분주 하도록 설정해 주었다.

1,000,000 / 64 = 15,625가 된다.  즉, TCNT값이 초당 15,625 증가한다는 의미가 된다.

25번 줄에 OCR0A 값을 125로 설정하였는데, TCNT값이 125가 될 때 타이머 인터럽트를 발생시키고 TCNT값은 0으로 초기화 된다.  

이 얘기는 15,625 / 125 = 125, 초당 125회의 타이머 인터럽트가 발생하게 된다는 것이다.

타이머 ISR 안에 인터럽트가 발생할 때마다 timer_count가 증가하도록 하였고, 이 값이 125보다 크게 되면 다시 0으로 초기화 한다음 1초의 시간이 경과 되었음을 알려주기 위하여 timer_update를 true로 만들어 준다.

loop() 함수에서 timer_update 플래그가 설정되었는지 polling 하고 있다가 이 값이 true가 되면 test_count값을 출력시켜 주게 된다.  즉, 1초마다 증가되는 숫자를 보여주게 되는 것이다.

계측기나 정확한 초시계를 이용하여 시간 간격을 측정해 보면 정확하게 1초마다 증가되지는 않을 것이다.  RC oscillator의 한계로 인하여 타이머로 공급되는 클럭이 정확히 1MHz가 아니기 때문인데 이를 보정하기 위하여 OCR 값이나 timer_count값을 조정하여 최대한 1초에 가깝게 동작되도록 수작업을 해 주어야 한다.



main.c


'프로젝트 > Tiny Clock' 카테고리의 다른 글

Tiny Clock - 기능 통합  (0) 2018.05.21
Tiny Clock - 푸쉬버튼  (0) 2018.05.21
Tiny Clock - Cds 측정  (0) 2018.05.18
Tiny Clock - TM1637 동작  (0) 2018.05.17
Tiny Clock - 회로 구성  (0) 2018.05.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함