부저 볼륨을 8비트 타이머로 조절할 수 없는 이유

2019. 6. 17. 20:24임베디드/ATmega128

부저 볼륨을 조절하기 위해서는 PWM을 해야만 한다. 그리고 음계 주파수는 일반적인 PWM 제어와 달리 정해진 주파수 안에서 조절되어야만 한다. 

 

만일 8비트로만 조절하게 된다면 TOP은 0xFF로 고정되어 있다. 오버플로우 인터럽트 때는 매번 ISR로 jump를 하기 때문에 TCNT를 조절할 수 있었다. 하지만 PWM 모드에서는 TCNT를 매번 제어할 수 있는 구간이 없고, TOP은 항상 고정되어있기 때문에 문제가 된다. 따라서 TOP을 내려야하는데 이때는 반드시 TOP이 ICR 혹은 OCRnA가 되는 파형 생성 모드를 사용해야 한다. 따라서 16비트 타이머를 꼭 사용해야 한다

'임베디드 > ATmega128' 카테고리의 다른 글

RS232, TTL 그리고 UART  (0) 2019.06.18
PORTB = 0xff 해석  (0) 2019.06.18
PWM 주파수 설정  (0) 2019.06.15
레지스터 배열을 만들고 싶을 때  (0) 2019.06.15
비트마스킹을 통한 RGB LED 색 모두 봐보기  (0) 2019.06.15