原创 DAC0832应用--推荐

2008-5-1 14:58 4312 5 6 分类: 模拟

1.芯片说明:


dac0832应用电路图:


DAC0832引脚功能说明:


DI0~DI7:数据输入线,TLL电平。



ILE:数据锁存允许控制信号输入线,高电平有效。



CS:片选信号输入线,低电平有效。



WR1:为输入寄存器的写选通信号。



XFER:数据传送控制信号输入线,低电平有效。



WR2:为DAC寄存器写选通输入线。



Iout1:电流输出线。当输入全为1时Iout1最大。



Iout2: 电流输出线。其值与Iout1之和为一常数。



Rfb:反馈信号输入线,芯片内部有反馈电阻.



Vcc:电源输入线  (+5v~+15v)



Vref:基准电压输入线  (-10v~+10v)



AGND:模拟地,摸拟信号和基准电源的参考地.



DGND:数字地,两种地线在基准电源处共地比较好.



采用ADC0809实现A/D转换。


(一) D/A转换器DAC0832
DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。如图4-82所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。运算放大器输出的模拟量V0为:


 


点击开大图


                             图4-82


391cbc5b-ff05-40a2-a344-992ba9f541b9.jpg

由上式可见,输出的模拟量 与输入的数字量( 3a4ec3bc-0cff-4f8d-8a0b-1a6debc523d1.jpg ) 成正比,这就实现了从数字量到模拟量的转换。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。图4-83是DAC0832的逻辑框图和引脚排列。

点击开大图


                            图4-83


D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
Rfb:是集成在片内的外接运放的反馈电阻。
Vref:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地 NGND:数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。实验线路如图4-84所示。

点击开大图

 


                            图4-85


IN0~IN7:8路模拟信号输入端。
A1、A2、A0 :地址输入端。ALE地址锁存允许输入信号,在此脚施加正脉冲,上升沿有效,此时锁存地址码,从而选通相应的模拟信号通道,以便进行A/D转换。
START:启动信号输入端,应在此脚施加正脉冲,当上升沿到达时,内部逐次逼近寄存器复位,在下降沿到达后,开始A/D转换过程。
EOC:转换结束输出信号(转换接受标志),高电平有效。
OE:输入允许信号,高电平有效。
CLOCK(CP):时钟信号输入端,外接时钟频率一般为640kHz。
Vcc:+5V单电源供电。 、
Vref(+),Vref(-):基准电压的正极、负极。一般Vref(+)接+5V电源,Vref(-)接地。
D7~D0:数字信号输出端。 由A2、A1、A0三地址输入端选通8路模拟信号中的任何一路进行A/D转换。


 


2.程序编写:


1).汇编源程序:


ORG  0000H
MAIN:MOV A,P1
    MOV R0,A                    ;设置高电平
    MOV R1,#00H                ;设置低电平
    LCALL BOXING
    SJMP MAIN

BOXING: JNB P1.0,SANJIAO        ;P1.0控制三角波的输出
        JNB P1.1,JUXING          ;P1.1控制矩形波的输出
        JNB P1.2,JUCHI          ;P1.2控制锯齿波的输出
        RET
;**********三角波********
SANJIAO:
    MOV DPTR,#7FFFH            ; 选中DA0832 
    MOV A,#00H
UP1: MOVX @DPTR,A                ; 向0832输出数据
    INC A
    JNZ UP1                    ; A=!0 跳转反之顺序执行
DOWN1:DEC A
    MOVX @DPTR,A
    JNZ DOWN1
    RET
;*********矩形波*********
JUXING:
    MOV DPTR,#7FFFH
  LP:MOV A,R0                  ;设置输出上限
    MOVX @DPTR,A
    LCALL DEL_H              ;调高电平延时程序
    MOV A,R1
    MOVX @DPTR,A
    LCALL DEL_L              ;调低电平延时程序
    RET
;*********锯齿波********
JUCHI:
    MOV DPTR,#7FFFH
    MOV A,#00H
LOOP:MOVX @DPTR,A
    INC A
    ;SJMP LOOP
    RET
;********延时程序*******
DEL_H:                                        ;高电平
    MOV R7,#250
  DE:MOV R6,#4
    DJNZ R6,$
    DJNZ R7,DE
    RET
DEL_L:                                        ;低电平
    MOV R7,#250
DEL:MOV R6,#4
    DJNZ R6,$
    DJNZ R7,DE
    RET
                    ;
  END

 

 

2).C语言程序:

#include<reg52.h>
#include<absacc.h>
#define uint unsigned int
#define uchar unsigned char
#define adc_adress XBTYE[2fff]
#define dac_adress XBTYE[7fff]
uchar ad_data da_data;
sbit clock="P1"^0;   //500khz
sbit EOC="P3"^2;   //EOC为高电平转换结束
sbit enable="P3"^1; //高电平时才能取走转换完的数据
sbit start="P3"^0;

uint read_ad()
{
start=0;start=1;start=0;
}

void main()
{
TMOD=0x01;     //T0模式0 定时
TH0=0xff;TL0=0xff;//1us
TR0=1;
EA=1;ET0=1;EX0=1;IT0=1;
  start="0"; enable="0";EOC=0;
read_ad();
while(1);
}

void pulse(void) interrupt 1/*产生clock时序。其实不必用定时来做。直接在一个无限循环中对 clock取反即可,反正是一个机器周期*/
{
TR0=0;TH0=0xff;TL0=0xff;
clock=!clock;
}

void ad_end(void) interrupt 0 // 读取AD数据
{
INT0=1;
enable=1;             //高电平允许取走转换完的数据
ad_data=P0;
adc_adress=ad_data;
enable=0;
dac_adress=adc_adress;
EOC=0;
}

 

 

3)VHDL编程:



--功能:产生频率为762.9Hz的锯齿波。


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;


entity DAC0832 is
port(clk:in std_logic;
rst:in std_logic;
ile:out std_logic;
cont:out std_logic;
data_out:out std_logic_vector(7 downto 0));
end DAC0832;


architecture behav of DAC0832 is
signal q:integer range 0 to 63;
signal data:std_logic_vector(7 downto 0);
begin
process(clk)
begin
if rst='1' then q&lt;=0;
elsif clk'event and clk='1' then
if q="63" then q&lt;=0;
if data="11111111" then data&lt;="00000000";
else data&lt;=data+1;
end if;
else q*lt;=q+1;
end if;
end if;
end process;
ile&lt;='1';cont&lt;='0';data_out&lt;=data;
end behav;

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户145694 2008-5-11 10:22

0832很常用,比较老的芯片了,不过在很多场合还是有所应用,博主的程序也不错,各种语言的都有,都下载收藏了.谢谢
相关推荐阅读
用户131105 2008-07-05 23:57
全新RIGOL VS5000系列虚拟示波器推动MSO混合测试实践应用
日前,北京普源精电科技有限公司(RIGOL)宣布,全新的VS5000系列虚拟数字示波器进入市场后,受到用户的普遍关注。RIGOL VS5000系列虚拟数字示波实时采样率高达400 MSa/s, 等 效...
用户131105 2008-07-05 23:55
虚拟数字示波器的设计与实现
虚拟数字示波器的设计与实现2008-3-20摘 要: 结合一个虚拟数字示波器的设计开发,介绍了虚拟仪器的基本组成,并重点介绍了基于图形化编程语言LabVIEW的虚拟仪器编程方法与实现技术。    关键...
用户131105 2008-07-05 23:53
使用TDS3000系列数字荧光示波器观察波形的频率成分 (2)
这时一篇PDF的文档,用泰克的TDS3000系列数字荧光示波器在分析时就可以用FFT图来观察波形的频率成分,希望对大家能有帮助,喜欢的可以下载看看 转自:www.kingcable.com.cn ...
用户131105 2008-06-28 13:10
labview中的串口通信协议示例与分析
变频器与个人电脑使用RS-232/RS-485 串行总线连接,如下所示:         在通讯操作中,通过个人电脑以命令方式控制仪器。    通讯数据格式:    l  起始位: 1 位    l ...
用户131105 2008-06-28 13:07
用示波器的第三维发现信号异常
用示波器的第三维发现信号异常引言  示波器的显示质量极大影响能否有效进行设计查错。如果您的示波器只有低质量的显示,您就不可能看到关键的信号异常。能示出信号亮度等级的示波器也能展示重要的波形细节,包括揭...
用户131105 2008-06-28 13:05
当今仪器仪表的特点与设计方法
1 当今仪器仪表的特点     1.1 硬件功能软件化  随着微电子技术的发展,微处理器的速度越来越快,价格越来越低,已被广泛应用于仪器仪表中,使得一些实时性要求很高,原本由硬件完成的功能,可以通过软...
EE直播间
更多
我要评论
1
5
关闭 站长推荐上一条 /3 下一条