2017-06-04 11:02:00 weixin_30487701 阅读数 25
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

DAC

D/A(数/模)转换器输入的是数字量,经转换后输出的是模拟量。转换过程是先将D/A转换器的各位二进制数按其权值大小转换为相应的模拟分量,然后再以叠加方法把各模拟分量相加,其和就是D/A转换的结果。

D/A的结构原理图如下:

1017814-20170528143010125-770464708.png

D/A的工作方式分类

1.单缓冲工作方式

2.双缓冲工作方式

3.直通工作方式

单片机的工作的原理是,CS与WR1控制着第一缓冲区的输入,WR2与XFER控制着第二缓冲区的输入。
1017814-20170528145241141-2025957181.png

    MOV DPTR ,#0DFFFH
    MOV A,#data1
    MOVX @DPTR,A
    MOV DPTR ,#7FFFH
    MOVX @DPTR,A

上述代码是用于双缓冲工作方式的,其中DPTR的两次赋值别是控制不同的缓冲区(这里是以0有效所编写的代码),DPTR第一次赋值为#0DFFFH是为了启动第一个缓冲区,将数据保存起来,第二赋值是启动第二个缓冲区,将数据进行转换。




ADC的结构

ADC是一种8路模拟输入8路数字输出的逐次比较型A/D转换器。

1017814-20170528152530188-861328304.png
1017814-20170528153038078-1302269268.png

单片机如何控制ADC?

首先选择ADC一个模拟输入通道,然后产生一个启动信号给ADC的START脚,对选中通道进行转换。当转换结束后,ADC发出转换结束信号EOC,该信号可供查询,也可作为单片机发出的中断请求信号;EOC信号有效后,执行读操作:MOVX A,@DPTR,,单片机发出RD信号加到OE端,把转换完毕的数字量读到单片机中。

个人总结:

在进行A/D转换还是D/A转换的时候,首先需要找到相应的"地址"(所谓的地址就是使相应组件进行工作的控制信号),例如:如果需要将一个数字量转换为一个模拟量,首先需要啊使一级缓冲和二级缓冲分别有效(一级缓冲用到的有CS和WR1,二级缓冲用到的有XFER和WR2),这里还是以0有效为例,启动第一缓存的DPTR为0DFFFH,启动第二缓冲的DPTR为7FFFH。就是将相应的控制开打开将数据存入到缓冲中去。

转载于:https://www.cnblogs.com/gxcstyle/p/6915661.html

2013-05-22 16:12:25 yunwen3344 阅读数 671
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏

1.  在很多应用系统中,测控对象是模拟量,单片机只能处理数字量,因此必须进行数字量和模拟量之间的转换。这就需要A/D和D/A转换器件。

2.  假如某D/A可输入8位数字,最高输出5V电压,则输入x,输出电压值为x*(5/256)V。

3.  分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。即,最大输出模拟量/(2^位数)。

4.  线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。常以相对于满量程(即最大输出模拟量)的百分数表示。(假设DAC位8位,满量程为5V,则理想直线为连接(0,0V)和(255,5V)之间的直线。

5.  建立时间:完成一次数字量和模拟量的转换所用的时间。电流输出型DAC的建立时间短。电压输出型DAC的建立时间主要决定于运算放大器的响应时间。根据建立时间的长短,可将DAC分为超高速(<1us)、高速(10~1us)、中速(100~10us)、低速(>=100us)几档。

2009-04-02 20:59:45 yunchow 阅读数 93
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏
整了几天也没整明白单片机的A/D,D/A,以后用的着,再来整吧
贴两个程序以后再来调
程序一:DA

/** DA Test **/
#include<reg52.h>

sbit csda = P3^3;
sbit wr = P3^6;

void main()
{
csda = 0;
wr = 0;
P0 = 0xff;
while(1);
}

程序二:AD

/** DA Test **/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit wr = P3^6;
sbit rd = P3^7;

void delay(uchar s);
void init();

void main()
{
init();
while(1)
{
start();
delay(10);
rd = 0;
delay(10);
rd = 1;
delay(10);
}
}

void start()
{
wr = 1;
wr = 0;
wr = 1;
}

2017-12-10 22:10:36 suibianba554 阅读数 7780
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏
ORG     0000H 
DATAR0  EQU     50H         ;定义保存采集现场数据单元 
        LJMP    MAIN 
        ORG     000BH       ;定义定时/计数器 T0 中断入口地址 
        LJMP    T0P 
        ORG     0100H 
MAIN :  MOV     SP , #60H    ;设置中断指针 
        MOV     TMOD,#01H   ;设置定时/计数器 T0 为工作方式 1、定时 
        MOV     TL0 ,#0D0H  ;设置定时常数 
        MOV     TH0 ,#80H 
        SETB    TR0         ;开启定时/计数器 T0 
        SETB    ET0         ;打开定时/计数器 T0 中断允许开关 
        SETB    EA          ;打开总开关 
        MOV     DPTR,#3000H  ;设置第三通道地址                   
        MOVX    @DPTR,A     ;启动第三通道转换       
LOOP:   LCALL   DATA1 
        LCALL   DISPLAY 
        SJMP    LOOP 
T0P:    MOV    TL0,#0D0H    ;重新设置定时常数 
        MOV    TH0,#80H 
        MOV    DPTR,#3000H  ;将第三通道地址送 DPTR 
        MOVX   A,@DPTR      ;读取转换值 
        MOV    DATAR0,A     ;保留转换值 
        MOVX   @DPTR,A      ;重启第三通道转换 
        RETI 
        DATA1:              ;显示格式转换子程序 
        MOV     79H,#03H 
        MOV     7AH,#11H 
        MOV     A,DATAR0 
        ANL     A,#0F0H 
        SWAP    A 
        MOV     7BH,A 
        MOV     A,DATAR0 
        ANL     A,#0FH 
        MOV     7CH,A             
        RET        
DISPLAY:                  
      MOV    R0,#79H       ;显示缓冲区首地址送 R0 
      MOV    R3,#01H       ;字位码送 R3 保存 
      MOV    A,R3 
LD0:  MOV    P2,A          ;字位码送位码端口 P2,点亮该位 
      MOV    A,@R0         ;取出一位要显示的数据 
      MOV    DPTR,#TAB1    ;表首地址送 DPTR 
      MOVC   A,@A+DPTR     ;查表获取该数据的字型码            
DIR1: MOV    P0,A          ;字型码送段码端口 P0 
      ACALL  DL11          ;调用延时子程序 
      INC    R0            ;缓冲区地址+1 
      MOV    A,R3          ;取出位码 
      JB     ACC.5,LD1     ;判断 6 位数码管显示完吗?显示完转 LD1 
      RL     A             ;未完,左移一位 
      MOV    R3,A          ;保存位码 
      AJMP   LD0 
LD1:  RET                  ;子程序返回 
TAB1: DB     0C0H,0F9H,0A4H,0B0H,99H,92H 
      DB     82H,0F8H,80H,90H,88H,83H,0C6H,0A1H            
      DB     86H,8EH,0BFH,0FFH,0FFH 
DL11: MOV    R7,#02H 
DL:   MOV    R6,#0FFH 
DL6:  DJNZ   R6,DL6 
      DJNZ   R7,DL 
      RET 
      END 

这里写图片描述

ORG 0000H
LJMP MAIN
ORG 000BH
AJMP LOOP
ORG 001BH
AJMP LOOP1
ORG 0030H
MAIN:MOV SP,#60H
     MOV DPTR,#7FFFH
     MOV TMOD,#11H
     MOV TH0,#3CH
     MOV TL0,#0B0H
     MOV TH1,#3CH
     MOV TL1,#0B0H
     SETB EA
     SETB ET0
     SETB ET1
     SETB TR0
     SJMP $
LOOP:MOV A,#0F2H
     MOVX @DPTR,A
     CLR TR0
     MOV TH0,#3CH
     MOV TL0,#0B0H
     SETB TR1
     RETI
LOOP1:MOV A,#01H
     MOVX @DPTR,A
     CLR TR1
     MOV TH1,#3CH
     MOV TL1,#0B0H
     SETB TR0
     RETI
     END

这里写图片描述

这里写图片描述

2018-01-17 09:08:22 goodstudylinux 阅读数 7776
  • 51单片机综合小项目-第2季第4部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第2季第4个课程,也是51单片机学完之后的一个综合小项目,该项目运用了开发板上大多数外设设备,并将之结合起来实现了一个时间、温度显示以及报警功能、时间调整功能等单片机控制常见的功能,有一定代码量,需要一定调试技巧和编程能力来完成,对大家是个很好的总结和锻炼,并且能拓展项目经验。

    3410 人正在学习 去看看 朱有鹏
    1.(概念)A/D 是模拟量到数字量的转换,依靠的是模数转换器(Analog to Digital Converter),简称ADC。D/A 是数字量到模拟量的转换,依靠的是数模转换器(Digital to Analog Converter),简

称 DAC。

    2.ADC 的位数:一个 n 位的 ADC 表示这个 ADC 共有 2 的 n 次方个刻度。8 位的 ADC,输出的是从 0~255 一共 256 个数字量,也就是 2 的 8 次方个数据刻度。

基准源:基准源,也叫基准电压,假如我们的基准源应该是 5V,但是实际上提供的却是 4.5V,这样误把 4.5V 当成了 5V 来处理的话,偏差也会比较大。

分辨率:分辨率是数字量变化一个最小刻度时,模拟信号的变化量,定义为满刻度量程与 2 n -1 的比值。假定 5V 的电压系统,使用 8 位的 ADC 进行测量,那么相当于 0~255 一共 256 个刻度把 5V 平均分成了 255 份,那么分辨率就是 5/255 = 0.0196V。

INL(积分非线性度)和 DNL(差分非线性度):INL 指的是 ADC 器件在所有的数值上对应的模拟值,和真实值之间误差最大的那一个点的误差值,是 ADC 最重要的一个精度指标,单位是 LSB。LSB(Least Significant Bit)是最低有效位的意思, 那么它实际上对应的就是 ADC的分辨率。 一个基准为5V的8位ADC,它的分辨率就是 0.0196V,用它去测量一个电压信号,得到的结果是 100,就表示它测到的电压值是 100*0.0196V=1.96V,假定它的 INL 是 1LSB,就表示这个电压信号真实的准确值是在1.9V~2.0V 之间的,按理想情况对应得到的数字应该是 99~101,测量误差是一个最低有效位,即 1LSB。DNL 表示的是 ADC 相邻两个刻度之间最大的差异,单位也是 LSB。

转换速率:转换速率, 是指 ADC 每秒能进行采样转换的最大次数, 单位是 sps (或 s/s、 sa/s, 即 samples
per second) ,它与 ADC 完成一次从模拟到数字的转换所需要的时间互为倒数关系。

    3 .PCF8591 的硬件接口:PCF8591 是一个单电源低功耗的 8 位 CMOS 数据采集器件,具有 4 路模拟输入,1 路模拟输出和一个串行 I 2 C 总线接口用来与单片机通信。3 个地址引脚 A0、A1、A2 用于编程硬件地址,允许最多 8 个器件连接到 I 2 C 总线而不需要额外的片选电路。


其中引脚 1、2、3、4 是 4 路模拟输入,引脚 5、6、7 是 I 2 C 总线的硬件地址,8 脚是数字地 GND,9 脚和 10 脚是 I 2 C 总线的 SDA 和 SCL。12 脚是时钟选择引脚,如果接高电平表示用外部时钟输入,接低电平则用内部时钟,这套电路用的是内部时钟,因此 12 脚直接接 GND,同时 11 脚悬空。13 脚是模拟地 AGND。

没有更多推荐了,返回首页