Мужики, делаю вывод wav звука, бьюсь несколько часов, не могу найти баг в исходнике. Почему-то не работает ШИМ на ATmega48. Частота тактирования - внутр. осциллятор 8МГц. Может есть какая новая фича, до этого без проблем работал с ШИМ на 8й меге. Прерывание Таймер2 работает с частотой - 8кГц, - такова частота дискретизации WAV файла. ШИМ, за него отвечает таймер1, работает на частоте СК/1 - частота выходного шим сигнала - 31кГц. На выходе ножки OC1A стоит НЧ цепочка-фильтр. На ножке ничего нет - ни малейшего дрыганья. При симуляции в AVR Studio - есть сигнал на ножке PB1, а в реалии на железе нет, в чем дело?
Вот сам код на WinAVR:
CODE
...
ISR(TIMER2_OVF_vect){
OCR1A = music[num_byte];
num_byte++;
if (num_byte>959) num_byte=1; // stop timer1
TCNT2 = 224; // bitrate - 8 kHz
}
...
int main(void)
{
DDRD |=(1<<4)|(1<<3)|(1<<1)|(1<<6)|(1<<7); // LED OUT
PORTD |=(1<<6)|(1<<3); // LOW SEGMENT
DDRC = 0xFF; // all outputs
PORTC = 0xFF;
DDRB |=(1<<1); //OC1A - output
TCCR2B |=(0<<CS22)|(1<<CS21)|(1<<CS20); // CK/32 - 8kHz
TIMSK2 |=(1<<TOIE2); // interrrupt OVF 8kHz
TCNT2 = 224; // bitrate - 8 kHz
TCCR1A |=(1<<COM1A1)|(0<<COM1A0)|(1<<WGM10); //---___, 8 bit fast PWM
TCCR1B |=(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10); //CK/1 - PWM - 31kHz
OCR1A=0x66;
sei();
while(1);
}
Причина редактирования: Уменьшение видимого размера цитаты исходника.