Das ist wenig plausibel, weil ich bei 30kHz die besseren Resultate hatte.
Habe mal fix den relevanten code extrahiert,
dabei sind jetzt nun nicht die nötigen variablen Deklarationen
rübergekommen, aber die timerprogrammierung sollte deutlich werden:
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
ISR(TIMER2_OVF_vect){ // pwm audio & range finder irq 1x/32us
OCR2A = pgm_read_byte(&SineWave[WaveLUTIndex8]); // output pwm audio @ 1x/32us sampling rate
}
void InitWave(void) {
WavePortCtl |= (1 << WavePortBit); // pwm-wave output
OCR2A = 0x80; // (O)utput ©ompare ®eg
TCCR2A = (1 << COM2A1) | (1 << WGM20); // 2-slope pwm,non-inv:1sample/32us
TCCR2B = (0 << WGM22) | (1 << CS20); // TOP=0xff, fixed samplerate=fclk/2*256samples
TIMSK2 = (1 << TOIE2); // enable counter ovl int
}
}
int main(void) { // init i/o regs
sei(); // enable global interrupts
for (;
{ // eternal loop
} // main