If all you are doing to get harmonics is to slam the signal to the clipping point, you can expect a harsh result. The gain is constant up to that point and then it immediately becomes zero. This puts a real sharp edge on the signal, making high order harmonics come out.

Soft clipping like you naturally get from vacuum tubes or well designed distortion pedals has a more gradual transition. In order to implement this in your DSPic, you'd need to implement some math function (I've read that hyperbolic tangent (tanh) is good for this). Or you could try piecewise linear, like:

Input = 0 to 0.5, gain = 1.5

Input = 0.5 to 0.75, gain = 1.2 (then you have to add 0.15, so that you don't get a jump at the point where the gain changes)

I.e. since 0.5 x 1.2 = 0.6, to get the level to 0.75 (0.5 x 1.5 in the first gain range) you need to add 0.15 to the level in the second gain range.

etc.

These are just ideas... many ways to do it. If you try to do math functions in real time you may be limited by the speed of your microcontroller and the efficiency of the supplied math library. Piecewise linear should be less load on the CPU but may not give you the sound you want.