2015-07-01 20:41:57 q860896829q 阅读数 447
  • AD和DA转换-第1季第16部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第16个课程,主要讲解AD转换和DA转换。目标是理解模拟量和数字量的概念,并且学会使用AD转换来采集现实世界的模拟量。

    2570 人正在学习 去看看 朱有鹏
单片机 内部ad io口处于ad功能时,内部相当于串联一个电阻。阻止未定,所以在ad检测中,一定要从外部并联电阻,减小直接测量电压源导致引脚输入电流过大。导致微小电压的纹波
2019-10-23 15:21:20 Fei_Yang_YF 阅读数 23
  • AD和DA转换-第1季第16部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第16个课程,主要讲解AD转换和DA转换。目标是理解模拟量和数字量的概念,并且学会使用AD转换来采集现实世界的模拟量。

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

用lm339输出外部中断信号到单片机,没有lm339的信号正常运行,lm339工作后,单片机灯常亮/灭,不正常就测了一下电压,一测单片机就短路,奇怪

灯的亮灭放在定时器函数中,lm339的一路输入是单片机电压分过来的,另一路即接到339,也接到单片机ad引脚

 

初始化是先将外部中断关了,用到时再开,好像没问题了

 

2015-12-15 09:55:21 u013151320 阅读数 8072
  • AD和DA转换-第1季第16部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第16个课程,主要讲解AD转换和DA转换。目标是理解模拟量和数字量的概念,并且学会使用AD转换来采集现实世界的模拟量。

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

PCF8591是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。

AD转换即(模拟量)Analog 转换成 (数字量)Digital

1.引脚分析

这里写图片描述

PCF8591具有4个模拟输入(AIN0~AIN3)、1个模拟输出(AOUT)和1个串行I²C总线接口(SDA、SCL)。
PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件,而无需额外的硬件。在PCF8591器件上输入输出的地址、控制和数据信号都是通过双线双向I2C总线以串行的方式进行传输。
OSC:外部时钟输入端,内部时钟
EXT:内部、外部时钟选择线,使用内部时钟时 EXT 接地。
VDD、VSS:电源端。
AGND:模拟信号地。
VREF:基准电源端。

2.应用分析

AD转换部分电路图:

这里写图片描述

要求:使用LCD1602将电压值显示出来,调节变阻器改变电压值

说明:以下代码中用到了LCD1602驱动程序和I2C总线驱动程序,请参考博主51单片机栏目下的博客。

#define uint unsigned int
#define uchar unsigned char
/*查阅pcf8591的资料可知它的都写地址如下*/
#define  WRITEADDR 0x90    //写地址
#define  READADDR  0x91    //读地址
uchar dat[6];

void Pcf8591SendByte(uchar channel)
{   
    I2C_Start();    //关于I2C总线,请参照博主博文:51单片机I2C总线驱动程序
    I2C_SendByte(WRITEADDR);        //发送写器件地址
    I2C_SendByte(0x40|channel);     //发送控制寄存器
    I2C_Stop();
}

uchar Pcf8591ReadByte()
{
    uchar num;
    I2C_Start();
    I2C_SendByte(READADDR);      //发送读器件地址
    dat=I2C_ReadByte();          //读取数据
    I2C_Stop();                  //结束总线
    return num;
}

void main()
{
    uint adNum,i;
    float value;
    Lcd1602_init();   //关于lcd1602,请参照博主博文:51单片机LCD1602程序详解
    while(1)
    {
            Pcf8591SendByte(0);      //使用通道0
            /*adNum一定是0到255之间的一个数,因为pcf8591是8位的AD/DA芯片,所以输出的范围为00000000到11111111,即0到255*/
            adNum=Pcf8591ReadByte();   //读出数值
            /*将adNum转换成电压值,单片机的电压为5V,则电位器的电压为0到5V,用0到255表示0到5V,则每一个1代表5/255V,即0.01953V*/
            value=adNum*0.01953;  //转为电压值
            adNum=value*100;        //保留两位小数,以便显示出来

            dat[0]=adNum/1000+'0';      //加上'0'是表示数字转换成字符,1602只能显示字符
            dat[1]=adNum%1000/100+'0';
            dat[2]='.';
            dat[3]=adNum%100/10+'0';
            dat[4]=adNum%10+'0';
            dat[5]='V';
            Lcd1602_WriteCom(0x80);    
            for(i=0;i<6;i++)
            {
               Lcd1602_WriteData(dat[i]);
            }
    }
}
2014-03-10 17:34:38 denjackson 阅读数 7654
  • AD和DA转换-第1季第16部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第16个课程,主要讲解AD转换和DA转换。目标是理解模拟量和数字量的概念,并且学会使用AD转换来采集现实世界的模拟量。

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

传统测电阻的方法通常用恒流源,但恒流源器件多,而且精确度其实也不高,分压法测电阻值相对简单易行。

原理如图:


其中RL为待测电阻,下面为基准电阻。VREF接单片机的AD参考电压。AIN1和AIIN2接AD引脚,要求必须为差分输入。如C8051F单片都具有差分输入功能。

计算就相对简单了,假如单片机AD量程为1024,则。

待测R值=ad值/1023*基准电阻值

选择适当的基准电阻,即可测不同大小的电阻了。

2010-11-02 19:58:00 fzxy002763 阅读数 1265
  • AD和DA转换-第1季第16部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第16个课程,主要讲解AD转换和DA转换。目标是理解模拟量和数字量的概念,并且学会使用AD转换来采集现实世界的模拟量。

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

(8)ATD比较使能寄存器

  Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
读/写 CMPE15 CMPE14 CMPE13 CMPE12 CMPE11 CMPE10 CMPE9 CMPE8 CMPE7 CMPE6 CMPE5 CMPE4 CMPE3 CMPE2 CMPE1 CMPE0
复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

CMPE [ 15 : 0 ]:比较使能位。当CMPE [n]为1时,对一个转换序列中的第N次ATD转换的结果进行比较。当CMPE [ n ]为0时,不做比较。

(9)ATD状态寄存器2

  Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
CCF15 CCF14 CCF13 CCF12 CCF11 CCF10 CCF9 CCF8 CCF7 CCF6 CCF5 CCF4 CCF3 CCF2 CCF1 CCF0
复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

CCF [ 15 : 0 ]:转换或比较序列完成位。当CCF [ n ]为1时,如果比较功能被禁止(CMPE [ n ] = 0),表示转换序列中的第N次转换完成,结果放在第N个结果寄存器中;如果比较功能被使能(CMPE [ n ] = 1),表示对转换序列中的第N次转换结果进行比较的结果为真,由于结果寄存器存储的是比较阈值,ATD转换结果则丢失。当CCF [ n ]为0时,表示转换未完成或者比较不成功。

(10)ATD输入使能寄存器

  Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
IEN15 IEN14 IEN13 IEN12 IEN11 IEN10 IEN9 IEN8 IEN7 IEN6 IEN5 IEN4 IEN3 IEN2 IEN1 IEN0
复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

IEN [ 15 : 0 ]:ATD数字输入使能位。通用输入输出端口AD口与ATD模块的模拟输入引脚复用。如果要把某个模拟输入引脚作为通用输入引脚使用,必须置对应的IEN位。当IEN [ x ]为1时,使能ANx引脚上的数字输入缓冲器;当IEN [ x ]为0时,关闭ANx引脚上的数字输入缓冲器。

(11)ATD比较方式寄存器

  Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
CMPHT15 CMPHT14 CMPHT13 CMPHT12 CMPHT11 CMPHT10 CMPHT9 CMPHT8 CMPHT7 CMPHT6 CMPHT5 CMPHT4 CMPHT3 CMPHT2 CMPHT1 CMPHT0
复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

CMPHT [ 15 : 0 ]:ATD比较方式选择位。当CMPHT [ n ]被置1,且对应的比较使能位CMPE [ n ]被置1时,如果转换序列中的第N次转换结果大于ATDDRn中的比较阈值,CCF [ n ]被置位,表示比较结果为真。当CMPHT [ n ]被置0,且对应的比较使能位CMPE [ n ]被置1时,如果转换序列中的第N次转换结果小于或等于ATDDRn中的比较阈值,CCF [ n ]被置位,表示比较结果为真。

(12)ATD结果寄存器

  Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ATDxDR15 ATDxDR14 ATDxDR13 ATDxDR12 ATDxDR11 ATDxDR10 ATDxDR9 ATDxDR8 ATDxDR7 ATDxDR6 ATDxDR5 ATDxDR4 ATDxDR3 ATDxDR2 ATDxDR1 ATDxDR0
复位值 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

当关闭比较操作时,ATD结果会被写入结果寄存器中。ARD状态寄存器0中的CC3~CC0位转换计数,表示当前转换的结果将要写入的结果寄存器的编号。转换结果在结果寄存器中的放置方式与转换精度(8、10、12位)和结果对齐方式有关。

ATD转换精度 DJM 转换结果在ATDDRx中的放置方式
8位 0 Bit [ 15:8 ]=转换结果
8位 1 Bit [ 7:0 ]=转换结果
10位 0 Bit [ 15:6 ]=转换结果
10位 1 Bit [ 9:0 ]=转换结果
12位 0 Bit [ 15:4 ]=转换结果
12位 1 Bit [ 11:0 ]=转换结果

当使能比较功能时,ATD转换结果和比较阈值都总是12位的,与SRES [ 1:0 ]的值无关。当DJM=0时,比较阈值应写到ATDDRn寄存器的Bit [ 15:4 ]中;当DJM=1时,比较阈值应写到ATDDRn寄存器的Bit [ 11:0 ]中。此时,ATD转换结果不会放到结果寄存器,比较完成后则丢失。

 

 

51单片机的AD/DA转换

阅读数 13663

单片机产生随机数

阅读数 590

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