atmega128 카운터 예제

atmega128 카운터 예제

이 레지스터를 초기화하지 않으면 모든 비트가 0으로 유지되고 타이머/카운터가 중지된 상태로 유지됩니다. 기본 모드에서 카운터는 순차 적 수를 계속 계산하는 것 이상을 하지 않습니다. 물론 그 가치는 언제든지 프로그램에서 읽고 변경할 수 있습니다. 기본 모드에서 유일한 추가 함수는 역오버플로에 인터럽트를 일으키는 것입니다. 기본 모드는 일반적으로 특정 간격으로 프로그램의 섹션을 실행하는 데 사용됩니다. 카운터는 타이밍 작업을 허용하므로 보다 복잡한 AVR 마이크로 컨트롤러는 하드웨어 수준에서 특정 이벤트를 시간 화할 수 있는 옵션이 있습니다. 카운터의 이 부분을 입력 캡처 장치라고 합니다. 특수 입력 핀 값의 논리적 변화 또는 아날로그 비교기 결과 값의 논리적 변화 : 두 이벤트 중에서 선택할 수 있습니다. 선택한 이벤트가 발생하면 카운터의 값은 언제든지 읽을 수 있는 특수 레지스터에 기록됩니다. 이벤트가 카운터의 오버플로 시간보다 길면 프로그램은 오버플로우도 계산하고 최종 결과를 계산할 때 이를 고려해야 합니다. 카운터의 값에서 상위 3개의 프리스케일러가 8비트 카운터의 최대 제한(255)을 초과하므로 쉽게 배제할 수 있습니다.

따라서 우리는 1024의 프리 스케일러를 사용합니다. 이제 TCCR0 레지스터에 표시된 대로 클럭 선택 비트에 대한 설명을 참조하십시오. 회색으로 강조 표시된 선택 영역을 살펴보십시오. 이것은 1024의 프리 스케일러를 구현합니다. 나머지는 동일하게 유지됩니다. 코딩 부분으로 이동하면 초기화 함수와 비교 값을 변경하기만 하면 됩니다. 나머지는 동일하게 유지됩니다. 이제 다음 공식에 따라 32 kHz 및 8 비트 카운터의 클럭 주파수와 함께 가능한 최대 지연은 8 ms. 이것은 매우 낮습니다 (MCU는 아닙니다).

따라서 6 ms의 지연을 위해, 우리는 191의 타이머 수가 필요합니다. 이것은 쉽게 8 비트 카운터 (MAX = 255)로 달성 할 수있다. 타이머/카운터 인터럽트 플래그 레지스터(TIFR)에는 TOV및 OVF가 필요한 두 가지 기본 플래그가 있습니다. 다른 비트는 타이머 인터럽트에 해당하며, 다른 자습서에서 살펴볼 것입니다. 작업: 8MHz ATmega128을 사용하여 외부 122Hz – 100kHz 논리 정사각형 신호의 주파수를 측정합니다. 측정은 1Hz 정밀도여야 합니다. 이 프로그램은 1개의 입력 캡처 유닛이 있는 16비트 카운터를 사용합니다. 100ms마다 PD4를 전환하는 타이머 0의 예를 반복해 보겠습니다. 이번에는 16 비트 타이머이므로 1024의 사전 스칼라로 생성하는 최대 지연이 무엇인지 살펴보겠습니다. 아래 프로그램 예제에서는 입력 캡처 모드의 사용을 보여 줍니다. 이 하드웨어 및 소프트웨어의 목표는 마이크로 컨트롤러의 입력 캡처 핀(ICP)에 적용된 정사각형 파의 주기를 측정하고 PORTD에 연결된 LCD 디스플레이에서 밀리초 단위로 결과를 출력하는 것입니다.

이 프로젝트의 경우 ATMEGA328 보드가 LCD 디스플레이에 연결되어 사용됩니다. 펄스 폭 변조(PWM)는 주파수와 기간(일반적으로)이 모두 일정하지만 반기의 길이가 변하는 신호 유형입니다. PWM 신호는 전기 기계, 광학 및 기타 장치를 제어하는 데 사용됩니다. 예를 들어, 모델링에서 알려진 서보 모터는 50Hz의 PWM 신호를 사용하고 1~2ms의 높은 반기간을 가지며 더 복잡한 카운터는 하나의 길이를 타이밍하는 것 외에도 신호를 생성할 수 있습니다. 이를 위해 카운터에는 출력 비교 장치와 비교 일치 출력 단위가 있습니다. 출력 비교 단위에는 카운터와 동일한 비트 너비의 레지스터가 있으며 이러한 레지스터의 값은 실행 중인 카운터의 값과 비교됩니다. 인터럽트를 생성할 수 있으며 카운터값이 비교 단위 레지스터의 값과 같을 때마다 특수 핀의 값을 변경할 수 있습니다. 이 시점에서 핀은 높음, 낮음 또는 반비례하도록 설정할 수 있습니다.

신호는 출력 핀 값의 변경에 의해 생성됩니다.