안녕하세요.
AVR128 교육용 보드에 달려있는 부저로 멜로디 음를 내려고 합니다.
PFC PWM 타이머를 이용해서 음을 만들려고 시험삼아 먼저 피아노로 라 음에 해당하는
소리가 지속적으로 나오게 하려고 하는데 안돼네요.
제가 가지고 있는 보드는 클럭이 14.7456MHz이고 부저는 PORTG.4에 연결되어있습니다.
제가 짠 소스는 이렇습니다.
#include <mega128.h>
long Play_Key = 0;
bit flag = 0;
void init(void)
{
DDRB = 0xFF;
PORTB = 0xFF; // PORTB 출력 LOW ,핀의 출력 설정
TCCR3A = 0x41; //16비트, PFC PWM 모드, 비교일치에서 OCnA 출력을 토글
TCCR3B = 0x12; //분주비 8
TCCR3C = 0x00;
TIMSK = 0x10;
ETIMSK = 0x10;
OCR3AH = (Play_Key & 0xff00) >> 8;
OCR3AL = (Play_Key & 0x00ff);
}
interrupt [TIM3_COMPA] void int_timer3_comp(void)
{
flag = ~(flag);
}
void main(void)
{
sei(); // SREG |= 0x80;
init();
Play_Key = 2095; // PFC PWM 공식에 라음 주파수를 대입해 계산한 OCR값입니다.
while(1)
{
if(flag == 1)
{
PORTG = 0x10;
PORTB = 0x00;
}
else
{
PORTG = 0x00;
PORTB = 0xff;
}
}
}
타이머가 제대로 작동하는지 볼려고 PORTB에 해당하는 LED를 넣었는데 불이 들어오는걸 봐서는..
타이머 문제는 아닌것 같고.. 어떤 부분이 잘못됐는지.. 처음 접근부터가 잘못됐는지 모르겠습니다..
C언어를 처음 접한게 3개월 전 입니다.;;;; 전공이 기계공이라 전자회로쪽으로도 문외한이구요..
소스 문제일 가능성이 거의 100%인데..ㅋ;; 아무리 책이나 인터넷 뒤져봐도 모르겠습니다...ㅜㅜ..
부저음 내는 소스 저렇게 하면 안돼나요? 도와주세요~~
토글하는 주파수가 "라"음에 해당한다면 계속해서 나올것입니다.