C51单片机学习(四):ADC和DAC

来源:互联网 发布:mac os游戏 编辑:程序博客网 时间:2024/05/08 20:45

DAC

T型电阻网络D/A转换器实现原理

这里写图片描述
由上图可以知道,每过一个R,电压减少一半,电流减少一半
比如D7~D0 == 11000000,流过的电流为(1/2 + 1/4)I
具体看下图
这里写图片描述

我板子上的是DAC0832

832内部结构及引脚

这里写图片描述
关于引脚的说明
这里写图片描述

总共三种工作方式
1.单缓冲工作方式

这里写图片描述
此方式适用于只有一路模拟量输出,或有几路模拟量输出但并不要求同步的系统。

2.双缓冲工作方式
这里写图片描述
多路D/A转换输出,如果要求同步进行,就应该采用双缓冲器同步方式 。

3.直通工作方式(主要以这种为例)
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
就是只要价格csda和wr位置0,就可以将P0口的信号转换成模拟信号

具体代码

//使P0从0到0xff循环达到灯的渐亮渐灭#include<reg52.h>sbit csda=P3^2;sbit wr=P3^6;sbit wela=P2^7;int a = 0,flag = 0;void delay(unsigned int z){    unsigned int x,y;    for(x=z;x>0;x--)        for(y=110;y>0;y--);}void init(){    csda=0; //关键点1    wr=0;   //关键点2    a = 0;    wela = 1;  //注意关掉位选,不然数码管出现许多数字    P0 = 0xff;    wela = 0;}void main(){    init();    while(1){        if(flag == 0){              P0 = a ++;            delay(20);            if(a == 0x100){                flag = 1;                a --;            }        }else{            P0 = a --;            delay(20);            if(a == -1){                flag = 0;                a ++;            }               }    }}

ADC

逐次逼近式ADC的转换原理图
这里写图片描述
个人理解的原理:
1.VIN与10000000转换成相应的模拟电压比较,如果大,就在寄存器置1
2.如果上面成立,寄存器为10000000,接下来第二位置1 VIN比较11000000转换成模拟电压,成立就在寄存器置1,一直比较到最后一位
详细可以参考:ADC0804中文资料

板子上的图:
这里写图片描述
这里我们只需要控制RD WR和CSAD就可以了,输出的结果账号对应LED的亮灭。
CSAD我的板子中对于P0,只要是P0为全0就好了,WR初始化:由高变低,转换器被清除,低到高则是转换正式开始,RD为0则会在LED灯上显示。至于为什么可以看芯片的时序图,或者郭老师的视频。
这里写图片描述
这里写图片描述

具体代码

//通过改变电压通过ADC使得LED灯表现出不同#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit wr=P3^6;sbit rd=P3^7;void delay(uint z){    uint t1,y;    for(t1=z;t1>0;t1--)        for(y=110;y>0;y--);}void init();void start();void main(){    init();    while(1)    {        start();        delay(100);  //这里要延迟长点,因为转换时间的原因        rd=0;     //控制rd使得LED闪烁,置0输出        delay(50);        rd=1;         }   }void init(){        //CSAD置0    P0=0;}void start(){       //按照说明初始化wr    wr=1;    wr=0;    wr=1;   }
0 0
原创粉丝点击