See:
George from Romania says:
{Ed: Although they are more often used in A2D converters, Sigma-Delta or } Delta-Sigma is much better then PWM, in both the duty cycle accuracy and the number of instructions.
- sum[n] is an accumulator, similar with the PWM counter
- req[n] is the duty cycle, equivalent of the PWM compare register
- max[n] is the overflow value for the accumulator
- n is the channel number, in this demo there are NO_CH independent "PWM like" channels
for (n = NO_CH - 1; n >= 0; --n) { // For each Delta-Sigma modulator outBits <<= 1; // Shift previously calculated bits // Sigma delta modulation algorithm using "synthetic division" sum[n] += req[n]; // Update integrator value if (sum[n] < max[n]) // Until overflow outBits++; // LSB = 1 else // Default is LSB = 0 sum[n] -= max[n]; // Adjust integrator } }https://hackaday.io/project/6356-delta-sigma-versus-pwm
https://github.com/RoGeorge/Delta-Sigma_versus_PWM/blob/master/main.c
Don Hyde says:
An R-2R ladder can be used to turn a group of [digital] output pins into a DAC for a few cents. Below is a 3-bit DAC. Using 3 [digital] output pins (beware of the odball open drain pins, they're no good for this), this circuit will provide 0 - Vcc*(7/8) volts out, with a 2R source impedence.It can be extended to more bits by replicating the MSB R-2R end of the ladder.
Up to 4 bits can be achieved with 5% resistors.
Up to 6 bits can be achieved with 1% resistors.
...
In many applications, it would be advisable to buffer the output with an op-amp.
A circuit like this can achieve waaay higher output frequencies than PWM, and can be easier to filter, at the expense of using up a bunch of pins.
OUT o--+-/\/\/\/\----o MSB | 2R \ / \ R / | +-/\/\/\/\----o Middle bit | 2R \ / R \ / +-/\/\/\/\----o LSB | 2R \ / \ 2R / | --- ///
PICList Thread '[EE]: high res DA challenge'
Also:
See also:
Interested: