• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

关于A/D转换的方法!

在单片机程序中,经常要把探测到的电压和电流数值转化成程序能读得懂的数值,我在samsung的资料上找了个遍,就是找不到,可能是我眼睛太差了,我现在急着要用,希望哪位能人能将其方法传上来,不管是samsung 的还是51系列的,资料也可以!小弟在此谢谢了!
全部回复(18)
正序查看
倒序查看
2004-08-19 10:08
找一个带有A/D口的单片机,或外接,A/D转换器,最简单的,那就用一个LM324用电容的充放电来做A/D转换,
0
回复
2004-08-19 16:37
@一个好人
找一个带有A/D口的单片机,或外接,A/D转换器,最简单的,那就用一个LM324用电容的充放电来做A/D转换,
我的意思是怎么在程序内将模拟的量变成机器语言,比如说3.15v的电压怎么变为程序语言,是直接将它变成2进制数吗???然后整数存个地方,小数存个地方????
0
回复
2004-08-19 16:58
@chengkai422
我的意思是怎么在程序内将模拟的量变成机器语言,比如说3.15v的电压怎么变为程序语言,是直接将它变成2进制数吗???然后整数存个地方,小数存个地方????
A/D转换有个参考电压Vref
比如,8位的A/D转换器,那么就可以分成 Vref/256 分,如果Vref=5.0V,
那么 假设检测的电压是2.5V,那电压值就是 128(80H)

Vi=ADRES*5/265

ADRES: A/D结果寄存器!
0
回复
2004-08-20 11:56
@一个好人
A/D转换有个参考电压Vref比如,8位的A/D转换器,那么就可以分成Vref/256分,如果Vref=5.0V,那么假设检测的电压是2.5V,那电压值就是128(80H)Vi=ADRES*5/265ADRES:A/D结果寄存器!
ADRES就是求得的128(80h)放的位置吧???
0
回复
2004-08-20 11:57
@chengkai422
ADRES就是求得的128(80h)放的位置吧???
还是说ADRES就是求得的值????
0
回复
2004-08-20 12:31
@chengkai422
ADRES就是求得的128(80h)放的位置吧???
对啊,ADRES就是求得的128(80h)放的位置!它只是一个寄存器!!
0
回复
2004-09-22 10:36
@一个好人
找一个带有A/D口的单片机,或外接,A/D转换器,最简单的,那就用一个LM324用电容的充放电来做A/D转换,
greatskymei老兄,我现在急需LM324用电容的充放电来做A/D转换的资料,能不能给我提供点资料先,我得邮箱feng_ziyou@yahoo.com.cn,先谢过了!
0
回复
eagle
LV.2
9
2004-09-22 15:44
@一个好人
找一个带有A/D口的单片机,或外接,A/D转换器,最简单的,那就用一个LM324用电容的充放电来做A/D转换,
我最近也要写单片机 A/D
可是 要串行输入~


不知道串行输入 要注意些什么?
0
回复
gyzzg
LV.6
10
2004-09-23 08:08
@eagle
我最近也要写单片机A/D可是要串行输入~不知道串行输入要注意些什么?
首先要有一个A/D的片子,要是串行输出的.
0
回复
eagle
LV.2
11
2004-09-24 09:43
@gyzzg
首先要有一个A/D的片子,要是串行输出的.
那是当然的咯
已经有了

是不是穿行的A/D 一般都是靠一个busy来区分制数据 位的?
0
回复
gyzzg
LV.6
12
2004-09-25 08:09
@eagle
那是当然的咯已经有了是不是穿行的A/D一般都是靠一个busy来区分制数据位的?
A/D片子与主机怎么交流,各个情况不同,一般靠数据格式来区分,这不是一两句能说清的.
0
回复
2004-09-29 09:59
@gyzzg
A/D片子与主机怎么交流,各个情况不同,一般靠数据格式来区分,这不是一两句能说清的.
gyzzg兄,说得特别对!!!
0
回复
nelson
LV.3
14
2004-10-17 21:45
@一个好人
找一个带有A/D口的单片机,或外接,A/D转换器,最简单的,那就用一个LM324用电容的充放电来做A/D转换,
如何用LM324做A/D转换,能给个具体的电路吗?niesol@163.com
我以前用CD4046现将电压转换成频率,进行间接测量,好像很复杂!
0
回复
maychang
LV.6
15
2004-10-18 21:05
@nelson
如何用LM324做A/D转换,能给个具体的电路吗?niesol@163.com我以前用CD4046现将电压转换成频率,进行间接测量,好像很复杂!
用LM324这类普通运放做AD不是不可以,但并不准确,调整困难,不建议这样做.不如用片内有AD的单片机如AVR系列,价格并不高,使用非常方便.
0
回复
eagle
LV.2
16
2004-10-20 14:39
@gyzzg
首先要有一个A/D的片子,要是串行输出的.
...
说的好水啊~
0
回复
2005-07-08 11:42
@一个好人
A/D转换有个参考电压Vref比如,8位的A/D转换器,那么就可以分成Vref/256分,如果Vref=5.0V,那么假设检测的电压是2.5V,那电压值就是128(80H)Vi=ADRES*5/265ADRES:A/D结果寄存器!
greatskymei:
你好!请问A/D转换的结果用怎样的程序转换为LED显示????能贴个看看吗?????
0
回复
fenix
LV.5
18
2005-07-11 10:23
采用外接ADS7804转换芯片的程序,具体到你的应用中可以自己适当调整.电路接线参考芯片说明,还有晶振选用12M的
# include
# include
# define N 128 /*定采样长度,如128点*/
sbit BYTE=F1^0;
sbit RC=P1^1;
sbit BUSY=P1^2; /*定义特殊位*/
int XDATA array(N); /*在外部存储器内定义长度为N的有符号整数数组*/
int ADS7804(void)
{ uint ul,uh;int u;
RC=0; /*R/C低电平,进入转换模式*/
ul=XBYTE[0xffff]; /*产生读脉冲,启动A/D转换*/
while (BUSY= =0); /*等待转换完成*/
RC=1;BYTE=0; /*进入读模式,选择低字节*/
ul=XBYTE[0xffff]; /*读转换结果低8位*/
BYTE=1; /*选择高字节*/
uh=XBYTE[0xffff]&0x0f;/*读转换结果高4位*/
u=uh*256+ul; /*得到12位转换结果*/
if(u>=0x0800)
u=u 0xf000; /*如果为负值,则符号扩展*/
return(u); /*返回转换结果*/
}
uoid DAQ(uint interval)
{ uchar th,tl;
interval=interval-5;/*减去TF0清零和装载计数初值的时间5μs*/
th=255-(interval/256);
tl=255-(interval%256); /*计算计数初值*/
TMOD=0x01; /*定时器0,方式1 */
TH0=th; TL0=tl;/*装载计数初值*/
TR0=1;/*启动定时*/
for(I=0;i{ do{}whilt(!TF0);/*查询等待TF0复位*/
TF0=0; /*清溢出标志*/
TH0=th;TL0=tl; /*装载计数初值*/
Array[i]=ADS7804(); /*采样、存储*/
}
TR0=0; /*停止定时*/
}
0
回复
limingrui8
LV.1
19
2005-07-25 20:25
如何用LM324做A/D转换,能给个具体的电路吗?limingrui8@163.com
急急!!!
0
回复