eeee.... ale to wciaz jest mocno bezsensowne. przeciez nie wygenerujesz trojkata o czestotliwosci 500MHz tak czy siak, bo porty tyle nie wyrabiaja.
tak naprawde to prosciej wygenerowac jeden okres sygnalu do RAMu, a w przerwaniu po prostu wyrzucac kolejne probki. przerwanie wtedy po prostu realizuje 3 operacje:
1. wystawienie i-tej probki z tablicy na przetwornik
2. zwiekszenie indexu i
3. sprawdzenie czy i jest wieksze niz okres, jesli tak, to i=0;
zas co do dynamicznych zmian parametrow sygnalu (czestotliwosci glownie), to poczytaj o DDS (Direct Digital Synthesis) - dzieki tej technice jestes w stanie z wygenerowanego wczesniej jednego okresu sygnalu o jakiejstam czestotliwosci (dosyc niskiej) wygenerowac sygnaly o czestotliwosciach wiekszych. realizujesz to poprzez zwiekszanie owego 'i' o wiecej niz 1. dodatkowo mozna zalozyc, ze twoj wygenerowany okres ma np 65536 probek, ale w rzeczywistosci istnieje tylko 4096 (rozlozonych oczywiscie rownomiernie) - brakujace probki realizowane sa poprzez interpolacje liniowa dwoch sasiednich, ktore istnieja rzeczywiscie. dla przykladu podanych przezemnie wartosci - wyzsze 12bitow indexu (16-bitwego) indexuje rzeczywiste probki w tablicy, a 4 najmlodsze bity uzywane sa do interpolacji liniowej na zasadzie ((a-b)/2^4)*4LSB, gdzie a i b to najblizsze istniejace probki.
ta metoda idealnie nadaje sie do sygnalow zmieniajacych sie plynnie, czyli sinusa i pochodnych, nada sie tez do trojkata, ale moze mu lekko przytepic wierzcholki. to samo przy trapezie.
na pewno metoda ta nie ma sensu przy prostokacie <:
4\/3!!