找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4305|回复: 5
打印 上一主题 下一主题
收起左侧

求助关于stc8g单片机检测adc电压的问题

[复制链接]
跳转到指定楼层
楼主
ID:771427 发表于 2021-4-21 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20黑币
本帖最后由 柠檬肥宅 于 2021-4-21 21:51 编辑

比较简单的电阻分压 然后给adc检测的然后现在出现了两种情况 没太明白  希望能有大佬解惑下
第一种我用的正常可调电源给到 3,3v 0.05a的电压 ADC可以正常检测到  数据读取也都正确  

第二种情况 就是还是3.3v电压 具体电流暂时无法确定 程序在第一个返回的电压值的地方返回式正确的 在第二个返回 电压值得地方就变0了

这个是什么原因导致的   是否是因为电流过小导致的

程序如下:
while(1)
        {        
                k=dianya(1);    //读取的电压值赋予k
        
                if(a==5)                                                   
                {
                        SBUF=0XE1;
                        while(!TI);
                        TI=0;               //指令正确返回
                        
                        d1=1;
                        Delay1000ms();
                        d1=0;
                        Delay1000ms();      //短按1秒
                        
                        d1=1;
                        Delay1000ms();
                        Delay1000ms();
                        Delay1000ms();
                        Delay1000ms();
                        Delay1000ms();      // 长按5秒
                        d1=0;
                        
                        SBUF=k;
                        while(!TI);
                        TI=0;             //串口返回k的值 电压值 第一次
                        
                        while(q)
                        {
                            SBUF=k;
                            while(!TI);
                            TI=0;        //串口返回k的值 电压值 第二次
                                
                                
                                if((k>70)&&(k<150))  // 检测电压在1.1v左右 返回数据
                                {
                                        SBUF=0XF1;
                                        while(!TI);
                                        TI=0;
                                        a=0;
                                        q=0;
                                }
                        }
                        q=1;
                  
                }
                        
        }        
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:894154 发表于 2021-4-22 09:20 | 只看该作者
Delay1000ms(); 是短按
Delay1000ms();*5 是长按吗?
回复

使用道具 举报

板凳
ID:170318 发表于 2021-4-22 09:33 | 只看该作者
ADC检测电压的程序没有提供,程序不完整,不好判断,估计是ADC的程序有问题,用ADC检测电压,电流不需要0.05A
回复

使用道具 举报

地板
ID:499770 发表于 2021-4-22 09:39 | 只看该作者
正常待测电源,除电阻分压会产生很小的电流,测电压与电流没啥关系
回复

使用道具 举报

5#
ID:771427 发表于 2021-4-22 10:04 | 只看该作者
ANT1987 发表于 2021-4-22 09:20
Delay1000ms(); 是短按
Delay1000ms();*5 是长按吗?

对的
回复

使用道具 举报

6#
ID:771427 发表于 2021-4-22 10:05 | 只看该作者
jhczy 发表于 2021-4-22 09:33
ADC检测电压的程序没有提供,程序不完整,不好判断,估计是ADC的程序有问题,用ADC检测电压,电流不需要0.0 ...

/*adc读取函数*/
int ADC(uchar ch)      
{  
   //ch数值0-7 p1口选择
   ADC_CONTR = 0xc0| ch ;                        
   _nop_();                 
   _nop_();                                     
   while (!(ADC_CONTR & 0x20));              
   ADC_CONTR &= ~0x20;                    //Close ADC 将标志位清零等待下次硬件置1   
   ADC_RESL=ADC_RESL&0XC0;                      //读取10位的低字节2位
         return ((ADC_RES << 2)|ADC_RESL>>6);   
}

/*一百次稳定值 并转化为电压值  单精度小数型*/
float dianya(uchar q)
{
        int a;
        float d=0;
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        for(a=0;a<100;a++)
        d=d+ADC(q);
       
        d=d/100;
        d=3.3/1024*d;     //3.3v电压 10位adc转化
        return d*100;     //返回电压值*100便于计算
}
这个是adc的转换程序
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表