cqfeiyuxmj 发表于 2012-5-10 22:17:52

LGT的ADC有不有测试实例?

我用LGT8F08A的ADC测试内部1.25V和GND,转换的数据结果太差了,几十上百个字的跳变,官方有没有测试结果供参考呀?

LGT 发表于 2012-5-10 22:37:07

ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。
然后每次转化之间是12个转换周期。

官方的示例代码中有ADC的示例和驱动:http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar

明天再上传一个连续转换的例程上来供参考。

jianjun42 发表于 2012-5-11 09:19:36

LGT 发表于 2012-5-10 22:37 static/image/common/back.gif
ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。
然后每次转化之间是12个转换周期。



请问有LGT的SPI官方例程吗?

jianghu-00091 发表于 2012-5-11 09:31:08

jianjun42 发表于 2012-5-11 09:19 static/image/common/back.gif
请问有LGT的SPI官方例程吗?

有 在官网的例程里。和串口是同一个程序,采用不同的配置而已   

jianjun42 发表于 2012-5-11 10:36:03

反复试了N多次,试图用LGT的SPI驱动5110液晶屏都失败了,有没有成功的朋友给个例程?{:smile:}。

mowin 发表于 2012-5-11 10:52:13

jianjun42 发表于 2012-5-11 10:36 static/image/common/back.gif
反复试了N多次,试图用LGT的SPI驱动5110液晶屏都失败了,有没有成功的朋友给个例程?。 ...

改天有空我试试,手上正好有5110LCD。不用等我不保证什么时间弄。

jianghu-00091 发表于 2012-5-11 14:32:37

ADCEN后的第一次转化数据请丢弃!
你可以试试如下程序
u16 DrvADC_Convers(u8 vref,u8 channel)
{
        u16 retval;

        DIDR0 = 0xFF;                //disable digital port
        ADMUX = ((vref << 6) | channel);       
       
        ADCSRA |= (1 << ADEN) | (1 << ADPS1);                //enable ADC| (1 << ADPS0)
        /*dummy read*/
        ADCSRA |= (1 << ADSC) | (1 << ADPS1);                //enable conversion| (1 << ADPS0)
        while(!(ADCSRA & (1 << ADIF)));
        ADCSRA |= (1 << ADIF);                                                //clear ADC interrupt flag

        retval = ADCL;
        retval |= (ADCH << 8);
        /*available read*/
        ADCSRA |= (1 << ADSC) | (1 << ADPS1);                //enable conversion| (1 << ADPS0)
        while(!(ADCSRA & (1 << ADIF)));
        ADCSRA |= (1 << ADIF);                                                //clear ADC interrupt flag

        retval = ADCL;
        retval |= (ADCH << 8);
       
        ADCSRA = 0;                                                                        //disable ADC
        return retval;
}

chenerbox2 发表于 2012-5-16 11:11:20

结果怎么样了也不知道

难道没有消息就是好消息?

cqfeiyuxmj 发表于 2012-5-16 14:45:50

速度最慢时,有4个字的跳动,看来还得软件滤波.

jianghu-00091 发表于 2012-5-16 15:01:11

cqfeiyuxmj 发表于 2012-5-16 14:45 static/image/common/back.gif
速度最慢时,有4个字的跳动,看来还得软件滤波.

速度快时跳动比较大么?

chenerbox2 发表于 2012-5-16 15:03:46

好像 LGT 的文档没有关于AD性能的 数据,换avr的 看看 跳几个

jianjun42 发表于 2012-12-11 11:26:40

LGT 发表于 2012-5-10 22:37 static/image/common/back.gif
ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。
然后每次转化之间是12个转换周期。



请问ADC输入端有内部20K输入电阻吗?如果有是如何连接的?对于ADC的输出结果又和影响?如何消除?

n0831 发表于 2012-12-11 17:13:11

我的AD一会正常,一会跳的厉害。也不知道为什么。不是阻抗问题,前面有运放。

n0831 发表于 2012-12-11 17:14:22

同样的硬件,PIC和430 采集很稳定。

freeboyxd 发表于 2013-1-7 23:00:16

看来还是得等待继续完善啊!

rainbow 发表于 2013-1-8 18:08:02

实际测试,读64次取平均,基本上不跳了。
内部1.25基准。
测试发现0.025V以下测不到,基本上整体小5-6个字。

logicgreen 发表于 2013-1-8 22:53:38

本帖最后由 logicgreen 于 2013-1-8 23:03 编辑

rainbow 发表于 2013-1-8 18:08 static/image/common/back.gif
实际测试,读64次取平均,基本上不跳了。
内部1.25基准。
测试发现0.025V以下测不到,基本上整体小5-6个字 ...

估计是输入阻抗低的缘故。

请降低输出电压的阻抗试试。

rainbow 发表于 2013-1-8 22:55:56

本帖最后由 rainbow 于 2013-1-8 22:57 编辑

logicgreen 发表于 2013-1-8 22:53 static/image/common/back.gif
估计是输入阻抗低的缘故。

请增加输出阻抗试试。

我用万用表量到输入脚上有0.025V的电压,转换结果仍然为0,再增加后才有结果,后面的线性还挺好。

jianjun42 发表于 2013-1-9 13:43:35

rainbow 发表于 2013-1-8 22:55 static/image/common/back.gif
我用万用表量到输入脚上有0.025V的电压,转换结果仍然为0,再增加后才有结果,后面的线性还挺好。 ...

加运放了吗?

rainbow 发表于 2013-1-9 18:26:03

jianjun42 发表于 2013-1-9 13:43 static/image/common/back.gif
加运放了吗?

IC引脚上的电压已经是0.025V了,和运算有关系吗?

logicgreen 发表于 2013-1-9 23:45:29

rainbow 发表于 2013-1-9 18:26 static/image/common/back.gif
IC引脚上的电压已经是0.025V了,和运算有关系吗?

理论分辨率是1.25除1024=0.00122V。

加大去耦电容试试,或者降低ADC的转换速率看看。

jianjun42 发表于 2013-1-10 08:54:31

理论上是如此:1.25/1024=1.22mv,但是实际上根本测不到个位的mv电压,我实测的数据和20楼《rainbow》 朋友差不多,分别测试了LGT8的4片SOP28封装和3片SSOP24封装芯片的ADC转换,发现测量下限基本上都是只能测到20mv左右,只有一只SSOP24封装的芯片可以测到15mv,我都是采用同样的电路和算法,待测电压通过一只1K电阻和0.1uf的去耦电容送进ADC输入端,ADC连续采样24次,检测采用中位值平均滤波法,代码如下:

/*
ADC检测
端口PA0-PA2
检测电源输出电压和两个USB输出电流
*/
//------------------------------------------------------------------------------

uint filter_adc(void) //ADC+中位值平均滤波法
{
uint value_buf,temp;
uchar count,i,j;
unsigned long sum=0;
ADCSRA =0X87;   

for (count=0;count<N;count++)
{
    ADCSRA |=BIT(ADSC); //启动AD转换
    while(!(ADCSRA &(BIT(ADIF)))); //判断AD转换是否结束
    value_buf=ADC;         
}
for(j=0;j<N-1;j++)   
    for(i=0;i<N-j;i++)   
      if(value_buf>value_buf)    //+1
      {
      temp=value_buf;
      value_buf=value_buf;//+1
      value_buf=temp;
      }
for(count=1;count<N-1;count++) //连续采样N个数据,去掉一个最大值和一个最小值
   sum += value_buf;
return sum/(N-2);//然后计算N-2个数据的算术平均值            
}

void adc_conversion() //读各通道转换值
{
static uchar ch=0;
for(ch=0;ch<3;ch ++)
{
    ADMUX=0x80+ch;//通道选择0-2,参考电压内部基准1.25V,结果右对齐

    switch(ch)
    {
      case 0:
          adc0=filter_adc();   //USB2输出电流检测
                                       
                break;
      case 1:
          adc1=filter_adc();   //USB1输出电流检测
               
      break;
      case 2:
          adc2=filter_adc();   //输出电压检测
      break;
      
    }
}
}
望21楼看看问题到底出在哪里?

logicgreen 发表于 2013-1-11 22:38:22

jianjun42 发表于 2013-1-10 08:54 static/image/common/back.gif
理论上是如此:1.25/1024=1.22mv,但是实际上根本测不到个位的mv电压,我实测的数据和20楼《rainbow》 朋友 ...

你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。

n0831 发表于 2013-1-12 08:36:02

logicgreen 发表于 2013-1-11 22:38 static/image/common/back.gif
你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。

1/23 ?ADC输入阻抗23K。那也应该约是23/24啊。

jianjun42 发表于 2013-1-12 10:44:09

logicgreen 发表于 2013-1-11 22:38 static/image/common/back.gif
你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。

去掉了也没什么改善,20mv以下根本测不到

rqiang 发表于 2013-3-31 06:27:45

jianjun42 发表于 2013-1-12 10:44 static/image/common/back.gif
去掉了也没什么改善,20mv以下根本测不到

这个低端采样问题解决没有?

jianjun42 发表于 2013-3-31 12:54:56

rqiang 发表于 2013-3-31 06:27 static/image/common/back.gif
这个低端采样问题解决没有?

无法解决,等高阻抗版本吧

rqiang 发表于 2013-3-31 22:07:33

jianjun42 发表于 2013-3-31 12:54 static/image/common/back.gif
无法解决,等高阻抗版本吧

不知道官方会不会出改进版本?

jianjun42 发表于 2013-4-1 07:54:45

rqiang 发表于 2013-3-31 22:07 static/image/common/back.gif
不知道官方会不会出改进版本?

官方明确表示过6月份后会出新版本,ADC改为高阻

rqiang 发表于 2013-4-1 09:13:29

jianjun42 发表于 2013-4-1 07:54 static/image/common/back.gif
官方明确表示过6月份后会出新版本,ADC改为高阻

多谢,准备项目看看效果
页: [1]
查看完整版本: LGT的ADC有不有测试实例?