5763|10

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STC内置ad转换问题 [复制链接]

我的STC 内置的AD里面,ADC_FLAG是置1了,但是我用串口发送出去的数据总是FF,不知道为什么,哪怕我的电压只有2V,困惑不解啊.

最新回复

不知道楼主没有相关STC数字滤波的资料?可否分享下的,我的邮箱:786961163@qq.com 我的AD采样通过串口调试也同样会出现偶尔的几个数字跳动,可是当通过LCd显示有相对稳定 可一旦加入求平均值又会出现错误的跳动?不知道楼主有没有相关解决资料的?发些过来的,谢啦  详情 回复 发表于 2010-8-25 22:11
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
FF 说明你的AD采集是满量程的,2V也满量程显然是你的ADC设置正确。ADC_FLAG 置1 说明ADC中断有效,但不见得就是正确的值了。
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
看看你的IO配置成什么状态了?

感觉像是ADC的配置不完全
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(中级)

4
 
应该调试一下,看AD采集那出问题了,还是串口发送出问题了
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 
先好好核实下程序,
是否拟对应IO配置成ADC  有问题,

或者你处理ADC转换后的数值有问题,
当然也可能是硬件有问题,

建议先在网上下载一个实验程序,测试下你的单板等硬件,
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
我也在用STC的ADC,大家交流一下.
ADC_CONTR=0xe0;         //打开ADC,设最快的速度
AUXR |= 0x10;                //设置EADCI位为1,允许ADC中断
EADC_SPI=1;                //允许ADC与SPI中断
EA=1;                        //开所有中断
请确定这些中断有打开.
ADC_CONTR |= 0x08;        //启动ADC
读值时也要看8个channel有没有设对
void ADCInt(void) interrupt 5
{
    ADC_CONTR &= 0xef;                //清中断标志位
     a_u2ADCRxBuf[0] = ((ADC_DATA<<2)+ADC_LOW2);  //这样读入ADC值
}
我就是这样,可以读到ADC值的了.10位的,我用的是STC12LE5412AD
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 
#include

#define uchar unsigned char
#define uint  unsigned int

//sfr P1M0 = 0X91;
//sfr P1M1 = 0X92;

//sfr ADC_CONTR = 0XC5;
//sfr ADC_DATA  = 0XC6;

delay(uint t);

//---------------------------------------------------------------------
void init_RS232 (void)          // 串口初始化
{
    ES = 0;                         // 禁止串口中断
    TMOD = 0x20;                    // 设置 T1 为波特率发生器
    SCON = 0x50;                    // 0101,0000 8位数据位, 无奇偶校验
    TH1 = 0xFD;                     // 18.432MHz 晶振, 波特率 = 9600
    TL1 = 0xFD;
    RI = 0;
    TR1 = 1;
    ES = 1;                         // 允许串口中断
}
//---------------------------------------------------------------------

void Send_Byte(unsigned char one_byte)      // 发送一个字节
{
    TI = 0;                         // 清零串口发送中断标志
    SBUF = one_byte;
    while (!TI);
    TI = 0;   
}

main()
{
     unsigned char AD_finished=0;
         init_RS232();
P1M0 = 0X01;
P1M1 = 0X00;
//P1=0X00;
while(1)
{
  ADC_CONTR=ADC_CONTR|0X80;                //打开AD电源,设置转换速度最快
  ADC_CONTR=ADC_CONTR|0X08;                //设置转换标志为1,开始转换
  delay(2000);                        //延时

      while(!AD_finished)

      AD_finished=(ADC_CONTR&0x10);

                Send_Byte(ADC_DATA);
               
                ADC_CONTR                &=                0XF7;
                ADC_DATA=0X00;

}

}

delay(uint t)
{
while(t--);
}

贴出程序,这个程序我调试的时候,在串口里面发现发送的数据很乱,也不像实际传送的电压值.希望达人能指点一二
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 finder_zhang 的回复:

我也在用STC的ADC,大家交流一下.
ADC_CONTR=0xe0;         //打开ADC,设最快的速度
AUXR |= 0x10;                //设置EADCI位为1,允许ADC中断
EADC_SPI=1;                //允许ADC与SPI中断
EA=1;                        //开所有中断
请确定这些中断有打开.
ADC_CONTR |= 0x08;        //启动ADC
读值时也要看8个channel……


你的硬件输入是怎样的,我得到的数据现在跳动很大.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
我的跳动也是很大的,误差有十几左右.而且我的CPU与发模拟信号的IC间距做得非常地小.
有资料建议我在ADC输入处接上104的电容,但我试过,效果不明显,我是在内部把数据类加32次后求平均值,才会显出效果来,而效果很好.
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 
  楼上说的不错,数据跳动就是滤波问题,除了电容之外,可以在程序内部通过数字滤波实现。即求最大可能值。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

11
 

STC内部AD中断

不知道楼主没有相关STC数字滤波的资料?可否分享下的,我的邮箱:786961163@qq.com

我的AD采样通过串口调试也同样会出现偶尔的几个数字跳动,可是当通过LCd显示有相对稳定
可一旦加入求平均值又会出现错误的跳动?不知道楼主有没有相关解决资料的?发些过来的,谢啦
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表