atmega128 16비트 타이머 예제

다음 가능한 PWM 설정을 이해하려면 PWM 모드의 작동 방식을 설명해야 합니다. PWM은 향상된 출력 비교 모드입니다. 이 모드에서는 업 카운트 타이머만 사용하는 다른 모드와 달리 타이머도 카운트다운할 수 있습니다. PWM 모드에서는 타이머가 TOP 값에 도달할 때까지 계산됩니다(이는 타이머의 해상도이며 주파수에 영향을 미칩니다). PWM은 8비트, 9비트 또는 10비트의 해상도를 갖도록 설정할 수 있습니다. 이 해상도는 PWM 주파수(두 PWM 사이클 사이의 시간)에 직접적인 영향을 미치며 TCCR1A의 PWM11 및 PWM10 비트를 통해 선택됩니다. 다음은 해상도 선택 비트가 어떻게 작용하는지 보여 주어도 표입니다. 지금 TOP 값은 당신을 방해 할 수 있지만 당신은 그것이 무엇을 위해 거기에 있는지 볼 수 있습니다. PWM 주파수는 시스템 클럭이 아닌 타이머 클럭(미리 배율 조정)과 관련하여 PWM 주파수를 표시합니다. 다시 한번, TIMSK처럼, TIFR은 또한 모든 타이머에 공통레지스터입니다.

회색으로 된 비트는 다른 타이머에 해당합니다. 비트 5:2만 TIMER1과 관련이 있습니다. 이 중, 우리는 비트에 관심이 2 – TOV1 – 타이머 / 카운터1 오버 플로우 플래그. 이 비트는 타이머가 오버플로될 때마다 `1`로 설정됩니다. 해당 ISR(인터럽트 서비스 루틴)이 실행되는 즉시 자동으로 지워집니다(0). 또는 실행할 ISR이 없는 경우 `1`을 작성하여 지울 수 있습니다. 일반 모드에서 TCNT1은 0xFFFF에서 0x0000으로 롤오버할 때 타이머/카운터 1 오버플로우 인터럽트를 계산하고 트리거합니다. 종종 초보자는 원하는 수의 클럭 틱을 TCNT1에 로드하고 인터럽트를 기다릴 수 있다고 가정합니다(즉, 제가 한 일입니다…). 타이머가 아래쪽으로 계산되지만 위쪽으로 계산되면 0x00000 – (타이머 값)을 TCNT1에 로드해야 합니다. 8MHz의 시스템 클럭과 1초의 원하는 타이머를 가정하면 8백만 개의 시스템 클럭 사이클이 필요합니다. 타이머의 16비트 범위에 대해 너무 크므로 프리스케일러를 1024(256)로 설정합니다. 이 경우 8로 충분합니다.

정확도를 낮추는 것처럼 더 많이 사용하지 마십시오. 8의 프리 스케일러를 사용하면 TCNT1값이 OCR1에 영구적으로 비교되고 TCNT1값이 최대 계산되기 때문에 OCR에 작성해야 하는 값은 0x0000-10,000이 아니라 정상 모드에서 타이머를 사용할 때와 같이 OCR에 작성해야 하는 값은 10,000이 아닙니다. TCNT0에서 개수 값을 로드하고 특정 개수에서 타이머를 시작할 수 있습니다. 또 다른 흥미로운 기능은 OCR0(출력 비교 레지스터)에서 값을 설정할 수 있으며 TCNT0이 해당 값에 도달할 때마다 출력 비교 플래그(OCF0) 플래그가 설정된다는 것입니다. CS12. 10: 시계 선택 비트; 이 세 비트는 타이머/카운터 1의 프리스케일러와 핀 T1의 외부 클럭에 대한 연결을 제어합니다. http://maxembedded.com/2011/06/24/avr-timers-timer0-2/ 링크는 타이머 0에 대해 작동하지 않습니다 나는 모든 타이머가 가지고있는 “간단한”타이머 모드를 설명합니다. 일부 A벌은 여기에 설명 된 것보다 더 많은 모드를 지원하는 특별한 타이머를 가지고 있지만, 그들은 또한 처리하기가 조금 더 어렵다, 이것은 초보자의 사이트이기 때문에, 나는 여기에 그들을 설명하지 않습니다.

Atmega32에는 각각 3개의 타이머 단위, 타이머 0, 타이머 1 및 타이머 2가 있습니다. 타이머 0으로 탐색을 시작합시다. 나는 atmega328p의 16 비트 타이머를 사용하려고합니다. 나는이 타이머의 CTC 모드가 필요합니다. 그래서 데이터 시트를 살펴보고 구성하는 방법을 알아보았습니다. 중요 참고: 모든 16비트 레지스터는 한 번에 하나의 바이트에만 액세스할 수 있습니다. 정확한 타이밍을 보장하기 위해 타이머 레지스터에 액세스할 때 16비트 임시 레지스터가 사용됩니다. 반전된 PWM은 물론 반대입니다: 출력 비교 핀은 업 카운트 일치에 설정되고 다운-라우팅 타이머가 OCR1 값과 일치하면 지워집니다.

타이머는 기본적으로 클럭 주기만 계산합니다. 타이머 클럭은 시스템 클럭(크리스탈 또는 사용 되는 클럭 킹 옵션)과 같을 수 있으며 먼저 프리 스케일러에 의해 느려질 수 있습니다. 프리 스케일러를 사용하면 더 큰 타이머 값을 얻을 수 있으며 정밀도는 떨어집니다.