《分析ADDA转换电路设计报告.ppt》由会员分享,可在线阅读,更多相关《分析ADDA转换电路设计报告.ppt(18页珍藏版)》请在启牛文库网上搜索。
1、A/D、D/A的的选择选择及应用及应用摘要本放大器由ADC0832和DAC0832组成,由单片机控制,对数据进行采集显示电压值。其过程是先A/D进行数模转换,经过单片机,再D/A数模转换的滤波输出。关键词:DAC ADC 单片机二、硬件设计2.1概述AD的选择,首先看其分辨率量化误差、线性度、转换速率等;其输入方式是差分还是单端输入的,输入范围是多少,这些都是选AD需要考虑的。DA的选择,主要是精度、分辨率、线性度及建立时间,与单片机的连接方式有式有单单缓冲工作方式缓冲工作方式、双缓冲工作方式双缓冲工作方式、直通工作方直通工作方式式(我们选择的是直通工作方式)。(我们选择的是直通工作方式)。D
2、AC0832DAC0832以电流形式输出,当需要转换为电压输出时,以电流形式输出,当需要转换为电压输出时,可外接运算放大器。可外接运算放大器。软件设计四、系统测试采用示波器测量输采用示波器测量输出的电压值,然后出的电压值,然后记录信号发生器显记录信号发生器显示的输入,生成表示的输入,生成表4.4.1 14.2 指标测试和测试结果结论使用单片机实现对数据先进行A/D数模转换,再进行D/A数模转化的滤波输出,最终完成了直流电压的数据采集。示波器显示附件/本程序功能:用ADC0832测量电压并显示,并通过DAC0832输出相同的电压#include #include #defineSEG_DP P0
3、#define SEG_WP P2#define DA_DP P3sbit ADCS = P10;sbit ADCLK = P11;sbit ADDI = P12;sbit ADDO = P12;sbit DAILE = P24;sbit DAWR2 = P25;sbit DAXFER = P26;sbit DAWR1 = P27;unsigned char code Tab=0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;void Delay1mS(unsigned int tt)unsigned char i;whil
4、e(tt-) for(i=113;i0;i-);void Display(unsigned int dat) /显示的数值为毫伏unsigned char ge,shi,bai,qian;qian = dat/1000%10;bai = dat/100%10;shi = dat/10%10;ge = dat%10;SEG_WP = SEG_WP&0 xf0|0 x07;SEG_DP = Tabqian|0 x80; /最高位加小数点Delay1mS(10);SEG_WP = SEG_WP&0 xf0|0 x0b;SEG_DP = Tabbai; Delay1mS(10);SEG_WP = SE
5、G_WP&0 xf0|0 x0d;SEG_DP = Tabshi;Delay1mS(10);SEG_WP = SEG_WP&0 xf0|0 x0e;SEG_DP = Tabge;Delay1mS(10);unsigned char ADC0832(bit mode,bit channel) /AD转换,返回结果unsigned char i;unsigned char dat,ndat; ADCS = 0;/拉低CS端_nop_(); _nop_(); ADDI = 1;/第1个下降沿为高电平ADCLK = 1;/拉高CLK端_nop_();_nop_();ADCLK = 0;/拉低CLK端,
6、形成下降沿1_nop_();_nop_(); ADDI = mode;/低电平为差分模式,高电平为单通道模式。ADCLK = 1;/拉高CLK端_nop_();_nop_();ADCLK = 0;/拉低CLK端,形成下降沿2_nop_();_nop_(); ADDI = channel; /低电平为CH0,高电平为CH1ADCLK = 1;/拉高CLK端_nop_();_nop_();ADCLK = 0;/拉低CLK端,形成下降沿3 adc = adc*19.607843; /转换为实际电压便于显示Display(adc);ADDI = 1;/控制命令结束(经试验必需)dat = 0;/下面开
7、始读取转换后的数据,从最高位开始依次输出(D7D0)for(i = 0;i 8;i+)dat = 1;ADCLK=1;/拉高时钟端_nop_();_nop_();ADCLK=0;/拉低时钟端形成一次时钟脉冲_nop_();_nop_();dat |= ADDO;ndat = 0; /记录D0if(ADDO = 1)ndat |= 0 x80;/下面开始继续读取反序的数据(从D1到D7) for(i = 0;i = 1;ADCLK = 1;/拉高时钟端_nop_();_nop_();ADCLK = 0;/拉低时钟端形成一次时钟脉冲_nop_();_nop_();if(ADDO = 1)ndat |= 0 x80; ADCS = 1;/拉高CS端,结束转换ADCLK = 0;/拉低CLK端ADDI = 1;/拉高数据端,回到初始状态if(dat = ndat)return(dat);elsereturn 0; void DAC0832(unsigned char dat)DAILE = 1;DAWR1 = 0;DAXFER = 0;DAWR2 = 0;DA_DP = dat;main()unsigned int adc;while(1)adc = ADC0832(0,0); /差分模式,CH0-CH1DAC0832(adc);