взята тема тут:
http://chipenable.ru/index.php/programm ... evays.htmlделаю это на атмеге 64 - в итоге тупо скрип и все.
частота 8 МГц. внутренняя.
самые главные в программе строчки это:
настройка таймера:
Спойлер
Код:
void SOUND_Init(void)
{
//настройка вывода мк на выход
PORT_SOUND &= ~(1<<PINX_SOUND);
DDR_SOUND |= (1<<PINX_SOUND);
//настройка таймера T2
TIMSK |= (1<<TOIE2);
TCCR2 = (0<<WGM01)|(0<<WGM00)|(0<<CS02)|(0<<CS01)|(1<<CS00); //режим - нормал, прескалер -
TCNT2 = 0;
OCR2 = 0;
//инициализация переменных
pSong = Empty;
state = SOUND_STOP;
durationNote = 0;
toneNote = 0;
repeat = 0;
indexNote = 0;
statReg = 0;
#ifndef SOUND_BPM
bpm = 0;
#endif
}
установка переменных - коэффициентов частоты:
Код:
#define SOUND_F_CPU 16U //тактовая частота мк
#define SOUND_TIM_PRE 1U //зачение предделителя таймера
ну и вычисление:
Код:
#define f(x) (SOUND_F_CPU*1000000UL/(x*2*SOUND_TIM_PRE))
#define fn(x) ((x*SOUND_F_CPU)/SOUND_TIM_PRE)
#define dn(x) ((24U*SOUND_F_CPU*1000000UL)/(x*SOUND_TIM_PRE*256UL*32UL)/COEF)
#define ms(x) (((x)*SOUND_F_CPU*1000UL)/(SOUND_TIM_PRE*256UL*32UL))
я так понимаю, что в примере юзают атмегу8 на частоте 16 МГц.
у меня стоит атмега64 на частоте 8МГц.
в Codevision тупо поменял:
1. на #include <mega64.h>
2. #define SOUND_F_CPU на 8U
3. в проекте указал что камушек - атмега64
скомпилил - длинный монотонный хрип.
стал играться с коэффициентами - эффекта ноль.
Подскажите, плииииииз - что не то.
вроде и таймер так же все настроен и частоты правильно указываю. но не пашет зараза такая.