DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。如图所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。运算放大器输出的模拟量V0为:
由上式可见,输出的模拟量 与输入的数字量 成正比,这就实现了从数字量到模拟量的转换。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。下面的图是DAC0832的逻辑框图和引脚排列。
CS:片选信号,低电平有效,与ILE相配合,可以对写信号WR1是否有效起到控制作用
D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
Rfb:是集成在片内的外接运放的反馈电阻。
Vref:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地 NGND:数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
试验原理图:
在这里,CS接P3.2,WR1接P3.6, WR2接地,XREF接地,ILE接+5V,使用OUT1输出电流,点亮发光二极
看起来好像挺复杂似的,其实只要看时序图就会发现非常的简单,下面就是时序图,按照时序图来编程序即可
以上是DAC0832的时序图,接下来我们就可以编程序了,让发光二极管显示两种亮度
#include #include sbit ADCS=P3^2; sbit ADWR=P3^6; void delay(unsigned int limit); void AD0832(unsigned char outByte); void main() { while(1) { AD0832(0x00); delay(100); AD0832(0x80); delay(100); AD0832(0xFF); delay(100); AD0832(0x80); delay(100); } } void AD0832(unsigned char outByte) { ADCS = 0; //ILE=1; P0 = outByte; ADWR = 0; _nop_(); ADWR = 1; _nop_(); ADCS = 1; //ILE=0; } void delay(unsigned int limit) { unsigned int j,k; for(k=0; k<limit; k++)
for(j=0; j<1000; j++);
}