㈠ 带12位AD转换的51单片机
TLC2543是TI的一片12位AD芯片,11通道AD转换,数据传输符合SPI串行方式,是常用的高精度AD芯片,价格有点贵了35一片,不过物有所值,在实验中读书还是很稳定的。TLC2543的操作也很简单,命令格式:通道+精度+数据顺序,不过值得注意的:是本次读取的值是上次转换的AD值,也就是说本次发送的命令是启动下一次转换同时读取上次转换的值。
㈡ 基于单片机数字频率计设计汇编语言程序的设计思路
大学实验课吧?但是图呢?图呢????发图啊~
㈢ 利用STC89C52单片机以及PCF8591的AD转换设计一个数字电压表,求大神给个程序例子,在线等!!!急!!!
这是吴鉴鹰单片机开发板配套的例程。
/*-----------------------------------------------
名称:IIC协议PCF8591AD/DA转换
内容:使用4路AD中的4路检测外部模拟量输入使用液晶显示
------------------------------------------------*/
#include<reg52.h>
#include"i2c.h"
#include"delay.h"
#include"1602.h"
#include<stdio.h>
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
externbitack;
unsignedcharReadADC(unsignedcharChl);
bitWriteDAC(unsignedchardat);
/*------------------------------------------------
主程序
------------------------------------------------*/
main()
{
unsignedcharnum=0,i;
unsignedchartemp[7];//定义显示区域临时存储数组
floatVoltage;//定义浮点变量
LCD_Init();//初始化液晶
DelayMs(20);//延时有助于稳定
LCD_Clear();//清屏
while(1)//主循环
{
for(i=0;i<5;i++)//连续读5次,取最后一次,以便读取稳定值
num=ReadADC(0);//读取第1路电压值,范围是0-255
Voltage=(float)num*5/256;//根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型
sprintf(temp,"V0%3.2f",Voltage);//格式输出电压值,%3.2f表示浮点输出,共3位数,小数点后2位
LCD_Write_String(0,0,temp);
for(i=0;i<5;i++)
num=ReadADC(1);
Voltage=(float)num*5/256;
sprintf(temp,"V1%3.2f",Voltage);
LCD_Write_String(8,0,temp);
for(i=0;i<5;i++)
num=ReadADC(2);
Voltage=(float)num*5/256;
sprintf(temp,"V2%3.2f",Voltage);
LCD_Write_String(0,1,temp);
for(i=0;i<5;i++)
num=ReadADC(3);
Voltage=(float)num*5/256;
sprintf(temp,"V3%3.2f",Voltage);
LCD_Write_String(8,1,temp);
//主循环中添加其他需要一直工作的程序
DelayMs(200);
}
}
/*------------------------------------------------
读AD转值程序
输入参数Chl表示需要转换的通道,范围从0-3
返回值范围0-255
操作分四步:
(1)、发送地址字节,选择该器件。
(2)、发送控制字节,选择相应通道。
(3)、重新发送地址字节,选择该器件的读写。
(4)、接收目标通道的数据。
------------------------------------------------*/
unsignedcharReadADC(unsignedcharChl)
{
unsignedcharVal;
Start_I2c();//启动总线
SendByte(AddWr);//发送器件地址
if(ack==0)return(0);
SendByte(0x40|Chl);//发送器件子地址
if(ack==0)return(0);
Start_I2c();
SendByte(AddWr+1);//10010001是读命令
if(ack==0)return(0);
Val=RcvByte();
NoAck_I2c();//发送非应位
Stop_I2c();//结束总线
return(Val);
}
㈣ 关于AD590温度传感器
AD590是一种电流输出型温度传感器,其电流输出与绝对温度成线性关系。工作电压范围为4V至30V,温度检测范围为-55℃至+150℃。AD590的温度-电流关系如下表所示:
温度(℃) 电流(μA)
-55 0
0 1
100 101
150 151
AD590的引脚图见下图。实验任务是利用AD590温度传感器测量温度,并将模拟量转换结果送入ADC0809进行A/D转换,再将结果显示在数码管上。
电路原理图如图4.30所示。硬件连线步骤如下:
(1) 将“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
(2) 将“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1-S2-S3-S4-S5-S6-S7-S8端口用8芯排线连接。
(3) 将“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线连接。
(4) 将“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线连接。
(5) 将“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线连接。
(6) 将“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线连接。
(7) 将“模数转换模块”区域中的A2-A1-A0端子用导线连接到“电源模块”区域中的GND端子。
(8) 将“模数转换模块”区域中的IN0端子用导线连接到自制的AD590电路。
(9) 将“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的IN0端子。
以上步骤完成后,即可实现AD590温度传感器的温度测量和显示功能。
㈤ 共地情况下,单片机AD采样如何减少干扰
从理论上来说,2cm的隔离距离完全够用了,至于还是出现干扰需要找到干扰源及干扰频率后才能进一步定位。给你一个建议,如果有可能的话,将输入20V转5V采用DC/DC隔离电源模块来实现,或许效果会好点。另外,适当多增加一些滤波电容,组合起来进行滤波。如果有条件,可以做一些EMC实验,可以准确定位干扰源及其频率点。