I'm still fiddling around with the R-2R ladder as a DAC on an Arduino. This time some hardware.


This isn't a project to be built, instead I'm experimenting with analogue stuff; you're looking over

my shoulder as I get some things right and quite a lot of things wrong. What I've ended up with is

messy and not really the way to do it, but if I blog about it at least you'll be forewarned and in a

position to do it better.


I decided that I wanted to be able to control both the frequency and the amplitude of the generated

waveform via SCPI messages. Control of the frequency will be done in the software but there's a limit

to how far I can go with doing the amplitude in software (because the waveform is being generated to

only 8 bits of resolution). So I've come up with a circuit to adjust it in hardware under digital

control. I decided continuous adjustment was too complicated, so I've ended up with a circuit that

uses analogue switches to change the gain of an amplifier. The second bit of hardware I needed was a

filter - this will be a low pass filter that will pass audio frequencies but cut higher frequencies

and have a reasonable level of attenuation by the time we get to the output sample rate (which I'm

provisionally thinking will be something like a few hundred ksps, though the Arduino may not be able

to keep up with that).


Here's the circuit as I have it at the moment (the voltage generator on the left is the output of the DAC):



The first bad decision I made was to keep it as simple as possible and use the Arduino +5V for the

supply and to use a very cheap op-amp, the LM324 for the circuit. There's nothing essentially wrong

with the LM324, but the inputs and outputs don't operate up to the rail so that immediately stops me

from buffering the output of the R-2R DAC with a follower. So, instead, the buffer became an inverting

amplifier with fractional gain. That compromises the input resistance a bit, but it's still high

enough that it doesn't load the DAC and affect the resolution. Originally, I was going to have the

variable attenuation after the filter, but realised that I could change the gain of this amplifier

instead and came up with the circuit above where gain resistors are selectively shorted by analogue

switches (the switches on the circuit diagram are really CD4066 analogue switches controlled by A0 to

A3 used as digital outputs).


The righthand side is a low-pass filter with the cut-off point somewhere around 20kHz. It's a third-

order low-pass Butterworth filter. The response looks like this in the simulator.



Here's how the circuit board looks at the moment - the chips are underneath and the passives on top. A

bit unconventional but it's quite easy to work with, changing and adding bits. (The R-2R DAC is the neat array

at bottom left, the analogue switches are top left, and the op-amps are bottom right).



Unfortunately, when I came to test it, I discovered that the first op-amp was more than happy to

oscillate. I think the reasons for that are twofold - firstly that it was impossible to get the

feedback path compact because of it straggling all around the analogue switch chip and secondly

because the analogue switches add parasitic capacitance (which I'm obviously not modelling in the

simulation). I managed to quieten it down by adding the 22p; that adds to the internal compensation,

but it's still a bit on edge.


Here's an accumulated scope trace that shows the sixteen different gain levels. This is with the

scope's 20MHz filter on (there's quite a lot of high-frequency noise that the output filter doesn't

stop). It works, but if you look just after the point where the traces come together, there's evidence

that the op-amp is on edge and only just holding it.



Anyway, that's where I'm at with the hardware. It's far from perfect - it isn't even something that I

could reasonably present as a project to build - but it will do for the moment and I'm going to go back

to the software and see if I can get the frequency adjustment working under SCPI control. Whilst I'm

doing that I'll consider whether to have another go at the hardware or to call it a day and move on to

something else.


Part one: Arduino: R-2R Experiment

Part two: Arduino: R-2R: Sine On You Crazy Diamond

Part three: Arduino: R-2R: Buffer, Attenuate, and Filter

Part four: Arduino: R-2R: "We Interrupt This Programme..."

Part five: Arduino: R-2R: "Resistance is..."?

Part six: Arduino: R-2R: Setting the Output Frequency

Part seven: Arduino: R-2R; "A Sweep is as Lucky, as Lucky Can Be..."

Part eight: Arduino: R-2R: Setting the Signal Amplitude