Path:AVR-EN => Applications => AVR-D/A-Converter => RC filter
DAC8 Tutorial for learning the AVR assembly language of
AVR single chip controllers AT90S, ATtiny, ATmega and ATxmega
of ATMEL usind practical examples.

A simple 8-bit-Digital-to-Analog-Converter with a R/2R network
RC filter for the R/2R network

RC filter properties

Click here to download a zipped version of this page (5.11 MB)
R/2R networks generate steep rectangle flanks when used in dynamic applications, e.g. to generate a sine wave. Those are even more relevant if a 4- or 5-bit converter is used, so a clean sine wave looks different. That is how a 4-bit sine wave looks like:

4-bit-DAC sine

Only from the very far that looks like a sine. It consists of a splendid mixture of 1.000 Hz, 3.000 Hz, 5.000 Hz, 7.000 Hz and many, many more. Only those who love large varieties find this useful, all others do something against that mess and filter this a little bit.

Filter for DACs

Single stage RC filter

The high frequencies, well above the sine wave to be generated, need a cleanup. The simplest way to achieve that is an RC filter. There are other methods as well, but not for the price of 20 cents and with two small components. That is how the RC filter looks like (note that I prefer using the latin letter U for voltages to not confuse it with the dimension of voltages):

1-stage RC filter It works as follows. At the frequency f the capacitor C has an impedance XC of
XC = 1 / (2 * Π * f * C)

As an example, at f = 1000 Hz a capacitor of 10 nF has a X of
XC = 1 / (2 * 3,141592654 * 1000 * 0,00000001) = 15916 Ω

Increasing frequency and higher capacity decrease the impedance. At 3 kHz the impedance is down to 5305 Ω, at 5 kHz 3183 Ω, etc.

The resistor R and the impedance of C are a voltage divider. On the output of the divider the voltage is
UOut = UIn * XC / (R + XC).

At f = 1000 Hz, C = 10 nF und R = 10 kΩ the voltage divider produces
P1kHz = 15916 / (10000 + 15916) = 0.614

This results in a decrease of the input voltage down to the 0.614 fold. At 3 kHz that is
P3kHz = 5305 / (10000 + 5305) = 0.347

approximately half of the voltage at 1 kHz. At 5 kHz it is the 0.241 fold, a decrease by a factor of roughly three.

The amplitude at higher frequencies is not going down to zero, but can be very, very small if R, C and f increase to the 10, 100 or 1,000 fold.

Two stage RC filter

2 stage RC filter If filtered twice, the resulting response curve is even steeper, approximately the 0.641 * 0.641 = 0.411 fold at 1 kHz. But at 3 kHz it is the 0.120 fold and at 5 kHz the 0.058 fold. Additional RC stages increase the effect, that we will see later on.

Filter curves RC This is the attenuation effect that one, two and three stage RC filters have. Between 10 and 100 Hz nearly no attenuation takes place, the frequencies pass the filter nearly unaltered. At 1,000 Hz the one stage filter has an attenuation of roughly half, the three stage filter is at 0.2. A further decade higher, at 10,000 Hz, roughly 0.1 for the one stage filter, 0.001 for the two stage filter and the three stage filter attenuates by 40,000 fold. A promising method to get rid of the higher frequency mess of a DAC.

Filter effect for DAC signals

To demonstrate the effect, here is a 100 Hz signal generated with a 5 bit DAC, filtered with R=10k and C=10n. The stairs of the DAC are nearly removed already in the first RC stage, the second (fuchsia) and the third stage (red) are clean sine that show no sign of the way they have been generated from.

5 bit DAC with RC filters

The green curve is nearly a sine, but still follows the rectangle a bit in the upper and lower sections. The fuchsia and red curves, after two resp. three RC, only show some unevenness if a very close look is taken. Nearly an ideal sine wave has been reached.

With the same DAC resolution, R and C, but at the 10 fold frequency:

3 stage Filter at 1000 Hz

This is a bit too much RC, and the base frequency is already attenuated to roughly half. In exchange for that, already after the first stage a well-situated sine wave has been reached. The further filter stages are more than fluous, superfluous. Note that their attenuation is not that dramatic any more.

The difference between two and three stage filter is demonstrated here, with only two stages active:

2 stage Filter at 1000 Hz

Here, the amplitude in both stages is less attenuated. In the three stage version the RC stages not only work as voltage dividers: they cause back currents from C3 to C2, and therefore also from C2 to C1, which attenuates further. So better do not more filtering by adding RC stages than necessary.

At eight bit resolution of the DAC a single RC stage is sufficient to cleanup the signal.

8 bit DAC with RC-Filter

For those who believe they would be better of with a 10 bit DAC: be aware that the maximum frequency that can be generated is smaller by a factor of four then. One has to overclock an AVR with 256 MHz to generate a usual 20 kHz audio signal. But it is rather simpler to invest into two resistors and capacitors and to program a 5 bit DAC than to change to another controller family from AMD or Intel. More cleverness instead of higher clock frequencies!

Software for the filter simulation

No, you don't have to buy new software packages to play around with Rs, Cs, frequencies and DAC resolutions. It is for free, either as Lazarus Pascal source code to compile it for your operating system or already compiled for Win64. The source code is here, a compiled version for 64-Bit-Win is here.

The program is so simple to use that you do not need an instruction manual.

Filter software

Simply change the properties in the left part. Editor fields check correct ranges and get red if somethings is wrong. Please do not change entries manually in the dropdown fields, just use the given selections. The button "Store image" saves the current image as PNG or BMP.

Praise, dispraise, error reports, criticaster, scolding and unqualified spam please via the comments page to me.

To the top of that page

©2017 by http://www.avr-asm-tutorial.net