atmega128 타이머 카운터 예제

일반 모드에서 TCNT1은 0xFFFF에서 0×0000으로 롤오버할 때 타이머/카운터 1 오버플로우 인터럽트를 계산하고 트리거합니다. 종종 초보자는 원하는 수의 클럭 틱을 TCNT1에 로드하고 인터럽트를 기다릴 수 있다고 가정합니다(즉, 제가 한 일입니다…). 타이머가 아래쪽으로 계산되지만 위쪽으로 계산되면 0×00000 – (타이머 값)을 TCNT1에 로드해야 합니다. 8MHz의 시스템 클럭과 1초의 원하는 타이머를 가정하면 8백만 개의 시스템 클럭 사이클이 필요합니다. 타이머의 16비트 범위에 대해 너무 크므로 프리스케일러를 1024(256)로 설정합니다. 타이머 1로 지연되는 100ms 지연에서 PD4에 연결된 LED를 깜박이는 것과 같은 예를 반복해 보겠습니다. 우리는 AVR 인터럽트의 기초를 다루었습니다, 당신은 먼저 그것을 통해 갈 수 있습니다. 글쎄, 나는 모든 6 ms에서 깜박이는 LED가 항상 우리의 눈으로 볼 수 있다는 것을 알고 있지만, 프리 스케일러를 포함하지 않는 간단한 예를 찾을 수 없습니다. 이것을 데모로 간주하십시오.

OC1(출력 비교 1) 핀을 사용할 경우 TCCR1A에서 모드를 지정합니다. 핀을 설정, 지우기 또는 전환할 수 있습니다. 당신이 그것을 전환하려는 경우, 두 번 타이밍에 대해 생각 : 당신은 모든 10ms 발생 정상 펄스를 원하는 경우, 타이머 주기는 5ms이어야합니다 : 5ms -> -> 5ms -> 토글 오프. 위의 10ms 예제와 OC1을 토글하도록 설정하면 펄스는 20ms의 사이클 시간을 갖게 됩니다. 이 튜토리얼에서는 TIMER0을 사용하는 방법을 배웁니다. 타이머는 주변 장치이므로 일부 레지스터에서 일부 비트를 설정하여 활성화할 수 있습니다. 한 번에 모든 레지스터를 논의하는 대신, 우리는 필요에 따라 그들을 논의 할 것입니다. `등록`이라는 용어를 새로 접하는 분들은 이 페이지에서 이 에 대해 읽을 수 있습니다. AVR 주변 기기에 대한 아이디어를 얻으려면 이 페이지를 봅니다(아래로 스크롤해야 합니다).

타이머의 uint 8비트 카운터가 있는 위치입니다. 카운터의 값은 여기에 저장되고 자동으로 증가/감소됩니다. 데이터는 이 레지스터에서 모두 읽되고 기록될 수 있습니다. 반전된 PWM은 물론 반대입니다: 출력 비교 핀은 업 카운트 일치에 설정되고 다운-라우팅 타이머가 OCR1 값과 일치하면 지워집니다. 다음은 이 모양을 보여주는 두 개의 다이어그램입니다: AVR ATMEGA328 마이크로 컨트롤러의 타이머1은 훨씬 더 다양 하 고 복잡 한 다음 8 비트 TIMER0 16 비트 타이머/카운터. Timer1에는 16비트 입력 캡처 레지스터 1개와 16비트 출력 비교 레지스터 가 포함되어 있습니다. 입력 캡처 레지스터는 펄스 폭을 측정하거나 캡처 시간을 측정하는 데 사용되며 출력 비교 레지스터는 타이머/카운터에서 마이크로 컨트롤러의 출력 핀에 이르는 주파수 또는 펄스를 생성하는 데 사용됩니다. TIMER0은 일반적으로 시작, 중지 및 재설정되지만 TIMER1은 일반적으로 실행 중인 상태로 남아 있습니다. $$Ftimer = CPU 주파수/프레스칼라 $$ $$Ftimer = 16MHz/1024 = 15.625KHz $$Ttick = 1/15.625K = 64mu$$$$Ttotal = 64mu s X 255 = 16ms$$ 개념은 하드웨어가 타이머가 오버플로될 때마다 인터럽트를 생성한다는 것입니다.

필요한 지연이 가능한 최대 지연보다 크므로 분명히 타이머가 오버플로됩니다. 그리고 타이머가 넘을 때마다 인터럽트가 발생합니다. 이제 문제는 인터럽트를 몇 번이나 발생시켜야 하는가하는 것입니다. 타이머는 CPU의 독립 단위입니다. 따라서 인터럽트와 타이머를 사용하면 CPU가 매번 플래그를 폴링하지 못하게 할 수 있습니다. 이것은 그들이 정상적으로 사용되는 방법입니다. 우리가 그 모든 것을 다룰 AVR 타이머 인터럽트 자습서를 확인합니다.