标题: 求助关于stc8g单片机检测adc电压的问题 [打印本页]

作者: 柠檬肥宅    时间: 2021-4-21 21:08
标题: 求助关于stc8g单片机检测adc电压的问题
本帖最后由 柠檬肥宅 于 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;
                  
                }
                        
        }        
}

作者: ANT1987    时间: 2021-4-22 09:20
Delay1000ms(); 是短按
Delay1000ms();*5 是长按吗?
作者: jhczy    时间: 2021-4-22 09:33
ADC检测电压的程序没有提供,程序不完整,不好判断,估计是ADC的程序有问题,用ADC检测电压,电流不需要0.05A
作者: liuwang2051    时间: 2021-4-22 09:39
正常待测电源,除电阻分压会产生很小的电流,测电压与电流没啥关系
作者: 柠檬肥宅    时间: 2021-4-22 10:04
ANT1987 发表于 2021-4-22 09:20
Delay1000ms(); 是短按
Delay1000ms();*5 是长按吗?

对的

作者: 柠檬肥宅    时间: 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的转换程序




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1