Loading…

atmega128 타이머 입력캡쳐 예제소스

타이머는 업 카운터로 실현됩니다. 다음은 기본 타이머 하드웨어다이어그램입니다. 당황하지 말고 아래 레지스터를 설명하겠습니다. 중요 참고: 모든 16비트 레지스터는 한 번에 하나의 바이트에만 액세스할 수 있습니다. 정확한 타이밍을 보장하기 위해 타이머 레지스터에 액세스할 때 16비트 임시 레지스터가 사용됩니다. CTC1: 경기 비교시 클리어 타이머/카운터 1; 설정하면 비교 일치시 TCNT1 레지스터가 지워집니다. 이 비트를 사용하여 특정 시간 이후에 반복인터럽트를 만들수 있습니다(예: 단추 디바운싱 또는 기타 자주 발생하는 이벤트를 처리합니다). 타이머 1은 정상 모드에서도 사용되며, 설정된 경우 비교 일치 모드를 떠날 때 이 비트를 지워야 합니다. 그렇지 않으면 타이머가 넘지 않으며 타이밍이 손상됩니다. 16비트 타이머의 펄스 폭 변조기(PWM) 모드는 사용 가능한 타이머 모드 중 가장 복잡한 모드입니다. 그것이 바로 여기에 있는 이유입니다. 반전된 PWM은 물론 반대입니다: 출력 비교 핀은 업 카운트 일치에 설정되고 다운-라우팅 타이머가 OCR1 값과 일치하면 지워집니다. 다음은 다음과 같은 모양을 보여주는 두 개의 다이어그램입니다: PWM은 8, 9 또는 10 비트의 해상도를 갖도록 설정할 수 있습니다.

이 해상도는 PWM 주파수(두 PWM 사이클 사이의 시간)에 직접적인 영향을 미치며 TCCR1A의 PWM11 및 PWM10 비트를 통해 선택됩니다. 다음은 해상도 선택 비트가 어떻게 작용하는지 보여 주어도 표입니다. 지금 TOP 값은 당신을 방해 할 수 있지만 당신은 그것이 무엇을 위해 거기에 있는지 볼 수 있습니다. PWM 주파수는 시스템 클럭이 아닌 타이머 클럭(미리 배율 조정)과 관련하여 PWM 주파수를 표시합니다. CPU 사이클이 가장 적은 어셈블리 코드 ISR을 작성하는 경우 데이터 시트 인터럽트 응답 시간 섹션을 읽으면 최대 ICP 캡처 응답 속도를 확인할 수 있습니다. 그런 다음 ICP 결과를 표시, 저장 또는 사용하는 데 걸리는 CPU 주기 수를 추가하면 최대 ICP 주파수 응답이 있습니다. CS12. 10: 시계 선택 비트; 이 세 비트는 타이머/카운터 1의 프리스케일러와 핀 T1의 외부 클럭에 대한 연결을 제어합니다. 일반 모드에서 TCNT1은 0xFFFF에서 0x0000으로 롤오버할 때 타이머/카운터 1 오버플로우 인터럽트를 계산하고 트리거합니다.

종종 초보자는 원하는 수의 클럭 틱을 TCNT1에 로드하고 인터럽트를 기다릴 수 있다고 가정합니다(즉, 제가 한 일입니다…). 타이머가 아래쪽으로 계산되지만 위쪽으로 계산되면 0x00000 – (타이머 값)을 TCNT1에 로드해야 합니다. 8MHz의 시스템 클럭과 1초의 원하는 타이머를 가정하면 8백만 개의 시스템 클럭 사이클이 필요합니다. 타이머의 16비트 범위에 대해 너무 크므로 프리스케일러를 1024(256)로 설정합니다. 입력 캡처 핀(ICPn)과 아날로그 비교자 출력(ACO) 입력은 Tn 핀과 동일한 기술을 사용하여 샘플링됩니다(143페이지의 그림 59). 에지 검출기도 동일합니다. 타이머는 기본적으로 클럭 주기만 계산합니다. 타이머 클럭은 시스템 클럭(크리스탈 또는 사용 되는 클럭 킹 옵션)과 같을 수 있으며 먼저 프리 스케일러에 의해 느려질 수 있습니다. 프리 스케일러를 사용하면 더 큰 타이머 값을 얻을 수 있으며 정밀도는 떨어집니다. OC1(출력 비교 1) 핀을 사용할 경우 TCCR1A에서 모드를 지정합니다. 핀을 설정, 지우기 또는 전환할 수 있습니다.

당신이 그것을 전환하려는 경우, 두 번 타이밍에 대해 생각 : 당신은 모든 10ms 발생 정상 펄스를 원하는 경우, 타이머 주기는 5ms이어야합니다 : 5ms -> -> 5ms -> 토글 오프. 위의 10ms 예제와 OC1을 토글하도록 설정하면 펄스는 20ms의 사이클 시간을 갖게 됩니다. TIFR은 타이머를 제어하고 사용하는 데 실제로 필요하지 않습니다.