Guri. A coisa não é fácil, não.
Vamos ver porquê.
Período de uma senóide de 2000Hz = 1 / 2000 = 500,000000us
Período de uma senóide de 1990Hz = 1 / 1990 = 502,512563us
Período de uma senóide de 1980Hz = 1 / 1980 = 505,050505us
.... E por aí vai...
Repare que ele pediu 256 pontos por senóide ou ciclo. Vamos desconsiderar, em princípio, a capacidade de você poder gerar os pontos entre 0º e 90º e usar esses valores para gerar o restante do ciclo.
Se você precisa de 256 valores para cada ciclo, e se essas amostras estiverem igualmente espaçadas, então você teria que atualizar o seu CDA a cada 1/256 do período de um ciclo.
No exemplo da frequência 1990Hz, você teria que atualizar a saída a cada 2us. Na verdade, caso houvesse uma memória externa, como comentado, você teria que endereçar a memória, receber o valor para o uC e exteriorizar para uma porta de 8 bits. Tudo isso em cerca de 2us. É muito difícil.
Ainda pior. É que para gerar a frequência certa, seu sistema teria que ter uma precisão, no tempo, da ordem de nanosegundos, caso contrário o período não representa a frequência desejada.
Acho que o seu professor deve estar querendo mostrar que fazer um projeto simples como esse não é fácil.
Uma possível solução... Lembrando que esse circuito é apenas básico, para mostrar que é possível. Talvez precise de um CDA de 10 bits.
A saída do PIC para R8 seria melhor com um CDA R-2R.
Se você ainda quizer uma explicação, estou às ordens.
Mostre ao seu professor.
MOR_AL
"Para o triunfo do mal só é preciso que os bons homens não façam nada." Edmund Burke.
"Nunca discutas com pessoas estúpidas. Elas irão te arrastar ao nível delas e vencê-lo por possuir mais experiência em ser ignorante". Mark Twain