Hallo zusammen.
Ich bekomme grad was nicht in meinen Kopp, vielleicht könnt Ihr mir 
helfen.
Folgendes "Problem":
Angenommen ich hätte einen ATMega32, mit dem ich Wellenformen aus einer 
Wavetable ausgebe, wie z.B. in diesem Thread hier: 
Beitrag "Probleme mit R2R Wandler an ATMega32"
Nun habe ich folgenden Code:
1  | void preloadTimer(void) {
 | 
2  |     TCNT1 = 0xFFFF;
  | 
3  | }
  | 
4  | 
  | 
5  | 
  | 
6  | ISR(TIMER1_OVF_vect) {
 | 
7  | 
  | 
8  |   preloadTimer();
  | 
9  | 
  | 
10  |   if (waveform == SINE) {
 | 
11  |     PORTA = pgm_read_byte(&sine_table[t]);
  | 
12  |   }
  | 
13  |   else if (waveform == SAW) {
 | 
14  |     PORTA = pgm_read_byte(&saw_table[t]);
  | 
15  |   }
  | 
16  |   else if (waveform == TRIANGLE) {
 | 
17  |     PORTA = pgm_read_byte(&triangle_table[t]);
  | 
18  |   }
  | 
19  |   else if (waveform == PULSE) {
 | 
20  |     PORTA = pgm_read_byte(&pulse_table[t]);
  | 
21  |   }
  | 
22  |   else if (waveform == RANDOM) {
 | 
23  |     PORTA = pgm_read_byte(&random_table[t]);
  | 
24  |   }
  | 
25  | 
  | 
26  |   t+=interval;
  | 
27  | 
  | 
28  | }
  | 
Der Timer1 ist eingeschaltet und läuft also jeden Takt über, da die 
preloadTimer() Funktion ja mit jdem Takt aufgerufen wird(?).
Sollte ich nicht, wenn ich einen 16MHz Quarz angeschlossen habe, am 
Ausgang des R2R Wandlers eine Frequenz von etwa 62,5 kHz messen?
Meiner Rechnung nach also:
16MHz/256 = 62500Hz
da es ja 256 Takte dauert, bis die diskreten Werte der Wellenform einmal 
durchlaufen sind.
Was tatsächlich rauskommt ist etwa nur der 64. Teil, nämlich 976 Hz.
Die Timerkonfiguration sieht so aus:
1  |     TCCR1A=0x00;
  | 
2  |     // No prescale, we need full accuracy
  | 
3  |     TCCR1B=0x01;
  | 
4  |     preloadTimer();
  | 
5  |     OCR1AH=0x00;
  | 
6  |     OCR1AL=0x00;
  | 
7  |     OCR1BH=0x00;
  | 
8  |     OCR1BL=0x00;
  | 
9  |     // Start timer
  | 
10  |     TIMSK |= (1<<TOIE1);
  | 
Ich vermute das der Preload etwas mehr Zeit in Anspruch nimmt als 
gedacht, oder wo liegt hier der Hase im Pfeffer?
Bitte um Aufklärung.
Gruß
Matthias