AVR에서 Timer0을 사용하지 않는 이유는 무엇입니까?


10

기본 질문 ... arduino / avr / ATMega328의 경우 Timer1 (전체 라이브러리가 있음)을 사용하는 많은 예제를 찾았지만 Timer0 (또는 Timer2)을 사용하는 경우는 거의 없습니다.

이제 이러한 타이머 중 하나를 사용하여 ISR 방법을 제어하면 관련 핀에서 PWM 사용이 비활성화되지만 사람들이 Timer0에서 멀리 떨어져있는 것처럼 보이는 특별한 이유가 있습니까? 내부적으로 엉망이되어서는 안되는 다른 용도로 사용됩니까?

현재 응용 프로그램은 Timer1을 사용하는 것이 좋습니다.이 자주 무시되는 다른 타이머에 대해 뭔가를 놓친 경우 궁금합니다.

답변:


16

문제가 AVR 마이크로 컨트롤러에 관한 것이 아니라면 타이머 사용에 대한 제약은 없습니다 .

  • 아두 이노를 들어, 타이머 0은 가장 피해야되면, 등 millis(), delay()그리고 아두 이노 라이브러리의 모든 내부 타임 키핑이 타이머를 사용합니다. 시간 상수를 변경하면 이러한 작업에 영향을 미칩니다.
  • 타이머 1은 , 질문 상태와 같이 인기가 첫 번째 선택 등으로 라이브러리를 통해 모든 타이머 / 카운터 작업, TimerOne 라이브러리 뿐만 아니라 직접 조작. 16 비트 타이머이므로 8 비트 타이머보다 해상도가 더 좋습니다.
  • Timer2 는 tone () 라이브러리에 의해 사용되지만 그것이 보편적으로 사용되지 않기 때문에 많은 사람들이 TimerOne과 같이 매우 유용한 msTimer2 라이브러리 도 있습니다 . Timer2를 직접 조작해도 좋습니다.
  • Arduino Mega 보드 를 사용하는 경우 Mega, Timer3 , Timer4Timer5 (각각 16 비트 타이머) 의 추가 타이머를 사용할 수 있습니다 .

9

관련된 PWM을 비활성화하는 것 외에도 다른 이유는 다음과 같습니다.

  • TIMER0은 8 비트 타이머이고 TIMER1은 16 비트 타이머입니다.

  • Arduino 세계에서 TIMER0은 delay () 및 millis ()와 같은 타이머 함수에 사용됩니다. 내가 본 다른 많은 코드는 8 비트 해상도가 일반적으로 충분하기 때문에 동일한 방식으로 사용합니다.

  • TIMER2도 8 비트이므로 8 비트 만 필요한 경우 특별히 피해야 할 이유를 생각할 수 없습니다. 그러나 Arduino tone () 함수에서 사용됩니다.

따라서 TIMER1을 상당히 일반적인 선택으로 남겨두고 16 비트 타이머가 필요할 때 더 작은 AVR에서 유일한 선택이라고 생각합니다. AVR Mega 장치에는 16 비트 TIMER3-TIMER5도 포함되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.