It sounds as though you're using a method that will have lookup tables consisting of partial sine waves. First and last values may be far apart.
This will result in sudden transitions at the speaker. You'll get harsh sounding sine waves.
You only need one lookup table. You stated your memory has room for 44 x 256 steps. It must contain one entire sine wave.
Then you will generate different frequencies by skipping so many steps down the lookup table. Skip many steps to make a high frequency. Skip few steps to make low freq.
Read the value, send voltage to output. Again skip same number of steps, read the value, send to output, etc.