打印
[AVR单片机]

ATTINY24A单位片机ADC采集的问题

[复制链接]
3832|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

自已DIY一个移动电源,单片机用的是ATTINY24A  锂电池供,为了检测USB端口上的电流,发现ADC采集信号非常不准,查了一天,慢慢发现问题的真相。如果,当ADC3测量电池电压,读数正常,程序又去采集ADC1通道的USB电流就非常不准。如果我不测量ADC3,只测量ADC1,ADC1又十分准确。我在想是不是ATTINY24A通道切换的时候比较长,在两次采样加了延时,一样不准,只要打开了ADC3,再测ADC1就没办法了。8M内部时钟,64分频,ADC时钟125K,完全在数据手册的范围内。我无助了。求指点。

unsigned int adc_bat()
{
   unsigned int a=0;
   DDRA&=~BIT(3);
   ADMUX=0X83;//选用内部1.1V参考源,3通道
   ADCSRA=0X86;//64分频
   ADCSRA|=BIT(6);
   while((ADCSRA&0X10)==0)
   {
    ;
   }
   a=ADC;
   ADMUX=0X00;
   ADCSRA=0X00;
   return(a);
}

unsigned int adc_usb1()// USB
{
   unsigned int a=0;
   DDRA&=~BIT(1);
   PORTA&=~BIT(1);
   ADMUX=0X81;//选用内部1.1V基准为参考源,1通道
   ADCSRA=0X86;//
   ADCSRA|=BIT(6);
   while((ADCSRA&0X10)==0)
   {
    ;
   }
   a=ADC;
   ADMUX=0X00;
   ADCSRA=0X00;
   return(a);
}



主程序内的一段程序

                     if(temp_ok==1)//电池有电
                          {
                              usb_en();
                                  usb_adc_temp1=adc_usb1();
                                               
                      if(usb_adc_temp1>7)        //80ma
                           {
                            led_r(0);
                                led_g(1);
                           }
                      else
                           {
                            led_r(1);
                                led_g(0);
                            }
                                  
                          }
                         else //电池没有电
                          {
                             usb_dis();//关USB
                        
                       //  led_r(1);
                       //  led_g(0);
                          }

我只要在主循环加一句
adcbat_temp=adc_bat();//adc转换采集 ADC3通道

然后 usb_adc_temp1=adc_usb1(); 读出来的数据就不准了,两个指示灯都会亮,说明ADC1读到值离散性比较大。只要把前ADC3通道取消,就正常州了。求指教



相关帖子

沙发
jazzyfox| | 2014-4-8 09:27 | 只看该作者
本帖最后由 jazzyfox 于 2014-4-8 09:28 编辑

俺在想,是不是基准原的问题啊,不是说1.1V出了名的不准吗?
对了,tiny13和tiny26有中文的数据表,楼主可以看一下,我用tiny13好像木有发现这个问题啊,2chad挺正常的

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
qin552011373 + 6
板凳
ayb_ice| | 2014-4-10 11:54 | 只看该作者
可以是采样保持的时间不够吧,或者切换通道后需要等待信号稳定

使用特权

评论回复
地板
伏尔加的鱼| | 2014-4-11 09:50 | 只看该作者
看看是不是管脚配置有什么问题吧,或者通道切换

使用特权

评论回复
5
zhanan| | 2014-4-16 10:36 | 只看该作者
CPU主频是8M还是1M的(注意不是晶振频率、RC频率,可以分频后供CPU),改1M的试试。

使用特权

评论回复
6
zhprotel| | 2014-4-17 17:04 | 只看该作者
不准,误差有多大?

使用特权

评论回复
7
zhprotel| | 2014-4-17 17:11 | 只看该作者
我也正在用AT24,用到三个ADC口,开始有一个口一直都很准,为什么另两个口不行呢,原来转换的时候只成功转换一个口,另外两个口是错误的。原因是初始化没设置 单次或者连续转换。另外在采样的时候间隔开就OK了。

使用特权

评论回复
8
jrh200310|  楼主 | 2014-4-20 08:11 | 只看该作者
真相出来,设置方面我都有设置好。不过发现,ATTINY24A在切换通道时给足够的延时,就准确了,发现这个延时挺长的。跟以前用的AVR单片机不一样。是不是因为没有外接的滤波电容造成的?这个单片机没有提供外1.1V的输出参考。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

25

主题

131

帖子

2

粉丝