Ey Sebastian, du bekommst gleich nen Watschen von mir!![]()
Wie schon gesagt kann die Multiplikation zweier Sinüsse durch Summe ersetzt werden (andere Frequenzen und Amplituden). Das Zauberwort ist "Additionstheorem".Code:while (!(TIFR & (1<<TOV2))); // () TIFR = 1<<TOV2; // sonst löschen wir alles (TOV2 ist eh gesetzt)
Zeit bei der Multiplikation spart man eigentlich nur dann, wenn der AVR keine MUL-Befehle hat. Zwei Sinüsse zu addieren, deren Frequenzen dicht beisammen sind, dürfte schwerer sein, als zu Multiplizieren, wenn sich die Frequqnzen teilen:
Code:{ uint8_t x1 = 0; uint8_t x2 = 0; uint8_t f = 0; const uint8_t fak = 7; // Teilungsverhältnis der Frequenzen. uint8_t wert1, wert2 = 0, wert; while (1) { wert1 = sinwerte[x1++]; if (0 == f) wert2 = sinwerte[x2++]; if (++f == fak) f = 0; wert = (uint16_t) (wert1 * wert2) >> 7; while (!(TIFR & (1 << TOV2))); OCR2 = wert; TIFR |= (1<<TOV2); if (x1 == sizeof(sinwerte) / sizeof(sinwerte[0])) x1 = 0; if (x2 == sizeof(sinwerte) / sizeof(sinwerte[0])) x2 = 0; } }







Zitieren

Lesezeichen