부저 음계주파수 계산

2019. 6. 11. 01:57임베디드/ATmega128

수동 부저는 일정 DC 펄스에 반응한다

따라서 DC 펄스 주파수에 맞춰서 소리를 낼 수 있어 사용자는 원하는 주파수를 마음대로 설정해서 출력으로 낼 수 있다. 보통 이미 정해져있는 음계주파수를 사용하며, 예시를 6옥타브 기준으로 계산해보려고 한다

 

개발환경: ATmega128 16MHz 8비트 타이머 0, 32분주, 오버플로우 인터럽트, 1:1 on/off 방식

 

 

6옥타브 도는 1046Hz다. 우리는 1:1 on/off 방식을 사용할 것이기 때문에 1046Hz의 2배인 2092Hz에서 상태 변환을 해야할 것이다. 따라서 TCNT 값을 계산해보면,

TCNT = 256 - ((1/2092) / (1/16000000) * 32)) = 17

 

https://github.com/surinoel/avr/blob/master/timer/pwm/pwm/src/timer/timer.c