2019년 마이크로프로세서 실험 및 설계
5주차 실험보고서
실습7 : Timer and counter 응용코드 설명 < 결과 보고서>
1. 실습 내용
ATmega128 마이크로컨트롤러의 타이머/카운터 기능을 이용하여 여러 가지 동작을 구현하는 방법을 알아보며 이의 발생 원리 이해하고 제어 방법을 습득한다.
2. 실습7 이론 설명 요약
클럭과 타이머
2의 8승까지 셀 수 있는데 256주기 만큼 세서 그 값을 기억할 수 있다는 의미이다. 타이머에서 시계처럼 일정 주기 마다 업되거나 다운되는 형식의 카운터를 타이머라 한다. 내부 클럭이 어떠한 주파수를 갖는데, 이 주파수에 의해서 어느 주기마다 하나씩 타이머를 증가할 것이다. 그것에 대해서는 내부 클럭에 대해 동기적으로 작동을 시킨다. ( 내부 주파수에 맞춰서 진행에 된다. ) 간단하게 서비스 루틴을 만들어서 이용하는게 타이머라고 생각하면 된다. 출력 비교 인터럽트는 어느 순간의 값 출력 비교 인터럽트 레지스터 값을 20 이라 했으면 0~ 255 사이에 20과 같은 지점에서 인터럽트가 발생하는 것이라고 보면 된다.
보통 밀리세크 이상인데 100 밀리 세크 하는데 천 가까이 곱해줘야하는데 이런 작업을 하는 것 대신에 프리스케일러를 사용하는데 주기는 프리스케일러에 곱해지고 주파수는 반대로 나눠진다. 주기는 1024 만큼 늘릴 수 있고 1024만큼 낮출수 있다. 병목현상을 최소화 시키기 위해서 이런식으로 분주비를 곱해준다.
7372800 이 너무 커서 1초 하는데 너무 큼(0.01) 그래서 1024로 나눠줘서 7200 으로 나눠줘서 72 헤르츠 만으로 원하는 시간(0.01)을 얻을 수 있게됨
마스크가 하는 역할이 무엇이냐 내가 어디가에 빛을 쬐여주고 싶다고 하면 어느 구간에 빛을 통과를 하고 나머지구간에는 빛을 통과하지 못하게 하는 것이고 구멍을 뚫는 것이 마스크가 하는 일이며, sei()처럼 동작을 한다. 구멍을 뚫어주어 마스크에 1을 넣어주는것과 같다
72 만큼 빼면 0.01 초가 된다. TCNT의 시작점을 바꿔주는 것 루프 첫 번째 반복문전에 미리 정의를 해두고 시그널 오버플로우에서 또다시 정의를 하고 있다. 이것은 내가 오버플로우를 발생시켰을 때 다시 0으로 간다고 했는데 0부터 256까지 세기 시작하는 거다. 이때는 내가원하는 초를 얻을 수 없기 때문에 오버플로우가 일어날때마다 초기값을 바꿔주는 작업이라고 보면된다.
TIMSK |= 1

분야