Aim:
This section will show how to interface a DAC (digital-to-analog converter) to the Arduino. Then we demonstrate how to generate a sine wave on the scope using the DAC.
Description:
Digital-to-analog (DAC) converter
The digital-to-analog converter (DAC) is a device widely used to convert digital pulses to analog signals. In this section we discuss the basics of interfacing a DAC to the Arduino.
Recall from your digital electronics book the two methods of creating a DAC: binary weighted and R/2R ladder. The vast majority of integrated circuit DACs, including the MC1408 (DAC0808) used in this section, use the R/2R method since it can achieve a much higher degree of precision. The first criterion for judging a DAC is its resolution, which is a function of the number of binary inputs. The common ones are 8, 10, and 12 bits. The number of data bit inputs decides the resolution of the DAC since the number of analog output levels is equal to 2″, where n is the number of data bit inputs. Therefore, an 8-input DAC
such as the DAC0808 provides 256 discrete voltage (or current) levels of output.Similarly, the 12-bit DAC provides 4096 discrete voltage levels. There are also16-bit DACs, but they are more expensive.
MC1408 DAC (or DAC0808)
In the MC1408 (DAC0808), the digital inputs are converted to current (Iout), and by connecting a resistor to the Ioutpin, we convert the result to voltage.The total current provided by the Iout pin is a function of the binary numbers at the DO – D7 inputs of the DAC0808 and the reference current (Iref), and is as follows:
where DO is the LSB, D7 is the MSB for the inputs, and Iref is the input current that must be applied to pin 14. The Iref current is generally set to 2.0 mA. Figure 13-18 shows the generation of current reference (setting Iref = 2 mA) by using the standard 5-V power supply and IK and 1.5K-ohm standard resistors. Some DACs also use the zener diode (LM336), which overcomes any fluctuation associated
Figure 13-18. Arduino Connection to DAC808
Example 13-3
with the power supply voltage. Now assuming that Iref = 2 mA, if all the inputs to the DAC are high, the maximum output current is 1.99 mA (verify this for yourself).
Converting lout to voltage in DAC0808
Ideally we connect the output pin Iout to a resistor, convert this current to
voltage, and monitor the output on the scope. In real life, however, this can cause inaccuracy since the input resistance of the load where it is connected will also affect the output voltage. For this reason, the Iref current output is isolated by connecting it to an op-amp such as the 741 with Rf = 5K ohms for the feedback resistor. Assuming that R = 5K ohms, by changing the binary input, the output voltage changes
Block Diagram
Schematic
Code
Main File:
// ***********************************************************
// Project: Interfacing DAC0808 with Arduino
// Author: Hack Projects
// Module description: Operate single DAC0808
// ***********************************************************
unsigned char sine[50] = {52,57,62,66,70,74,77,80,82,84,85,86,86,86,85,83,81,78,75,72,69,65,61,56,52,48,44,39,35,31,28,25,22,19,17,15,14,14,14,15,16,18,20,23,26,30,34,38,43,48};
int a,b;
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
}
void loop()
{
for(int j=0;j<50;j++)
{
b=sine[j];
for(int i=9;i>=2;i--)
{
a=b%2;
b=b/2;
digitalWrite(i, a);
}
delay(5);
}
}
Downloads:
To download code and proteus simulation click here.
No comments:
Post a Comment