Search

AVR Processor

Created
2021/02/26
Property
AVR Processor
Time Calculation
Pre-Scaler

1. 컴퓨터가 시간을 계산하는 원리

컴퓨터는 시간을 어떻게 계산하는 것일까? 시간을 계산한다는 것은 1초를 세는 것부터 시작이 되는데 이에 대해서 간단히 리뷰해보고자 한다.
우리가 사용하는 컴퓨터의 CPU는 연산을 수행하는 동안 클럭이라고 하여 주파수가 발생한다. 여기서 말하는 주파수라고 함은 초당 진동 횟수를 말하는데, 컴퓨터에서는 초당 신호 횟수로 보면 된다. 따라서 이 주파수 값에 역수를 취하게 되면 1회의 신호 당 시간을 계산할 수 있다.
신호를 셀 때마다 레지스터에 기록을 하여 그 횟수를 누적받게 되고 레지스터에 더 이상 값을 쓸 수 없는 상태에서 추가로 횟수를 누적하면 오버플로우가 발생하면서 Service Routine인터럽트를 일으켜 1초를 세게 된다.
이 때 사용되는 AVR Processor레지스터8비트 짜리 크기를 사용하는 것이 일반적이기 때문에 282^8256회 정도의 카운트를 셀 수 밖에 없게 된다.
위와 같은 레지스터를 이용하면서 8Mhz 클럭을 발생 시키는 하드웨어를 사용하고 있다고 가정한다면, 1회 신호당 0.000000125초이므로 오버플로우0.000000125×2560.000000125 \times 2560.000032초 만에 발생하게 된다.
따라서 8비트짜리 AVR Processor를 이용할 때 1회 오버플로우1초를 재기에 너무 짧은 순간이므로 추가적인 방법이 요구된다. 누적을 받을 카운팅 변수를 두고 오버플로우로 인해 인터럽트가 발생하면 11씩 증가 시키는 것이다. 일반적으로 타이머 카운터의 카운팅 변수5050이라는 값이 되었을 때 1초로 인식하게 된다.
이 때 의아한 부분이 느껴진다면 지극히 정상이다. 카운팅 변수 값이 5050이 되었을 때 1초로 인식한다고 했기 때문에, 카운팅 값 110.02초 (20ms)를 의미한다. 즉, 신호를 받을 때마다 11씩 증가시키면서 256256까지 셀 수 있는 레지스터가 꽉 차서 오버플로우가 날 때까지의 시간이 0.02초가 되어야 한다는 것이다. 하지만 위에서 1회 오버 플로우가 발생하는데 걸리는 시간은 8Mhz 하드웨어 기준 0.000000125초였기 때문에, 0.000000125초마다 발생하는 오버플로우 인터럽트0.02초까지 지연시켜야 한다는 것이다.
위와 같은 지연은 신호의 주기를 낮춤으로써 가능한데, 이는 분주 비율을 나타내는 분주 옵션을 적용하면 된다. (0.000000125초0.02초로 보정할 수 있게 된다.) 분주 옵션에 따른 분주 비율 값은 Pre-Scaler라고 하여 미리 정해져 있는 값이 있다.
신호 주기를 Pre-Scaler로 지연 시키고, 카운팅 변수를 두고, 레지스터에 값을 담으면서 발생하는 오버플로우에 따른 인터럽트를 이용하면 1초를 셀 수 있게 되는 것이다.

2. Reference