LGT的ADC有不有测试实例?
我用LGT8F08A的ADC测试内部1.25V和GND,转换的数据结果太差了,几十上百个字的跳变,官方有没有测试结果供参考呀? ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。然后每次转化之间是12个转换周期。
官方的示例代码中有ADC的示例和驱动:http://www.mcugreen.com/LGT8F0XA/tools/LGT8F0XABSP_v1.1.rar
明天再上传一个连续转换的例程上来供参考。 LGT 发表于 2012-5-10 22:37 static/image/common/back.gif
ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。
然后每次转化之间是12个转换周期。
请问有LGT的SPI官方例程吗? jianjun42 发表于 2012-5-11 09:19 static/image/common/back.gif
请问有LGT的SPI官方例程吗?
有 在官网的例程里。和串口是同一个程序,采用不同的配置而已 反复试了N多次,试图用LGT的SPI驱动5110液晶屏都失败了,有没有成功的朋友给个例程?{:smile:}。 jianjun42 发表于 2012-5-11 10:36 static/image/common/back.gif
反复试了N多次,试图用LGT的SPI驱动5110液晶屏都失败了,有没有成功的朋友给个例程?。 ...
改天有空我试试,手上正好有5110LCD。不用等我不保证什么时间弄。 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;
} 结果怎么样了也不知道
难道没有消息就是好消息? 速度最慢时,有4个字的跳动,看来还得软件滤波. cqfeiyuxmj 发表于 2012-5-16 14:45 static/image/common/back.gif
速度最慢时,有4个字的跳动,看来还得软件滤波.
速度快时跳动比较大么? 好像 LGT 的文档没有关于AD性能的 数据,换avr的 看看 跳几个 LGT 发表于 2012-5-10 22:37 static/image/common/back.gif
ADC使能后(ADCEN), 第一次转换前要等大约50个转化周期。
然后每次转化之间是12个转换周期。
请问ADC输入端有内部20K输入电阻吗?如果有是如何连接的?对于ADC的输出结果又和影响?如何消除? 我的AD一会正常,一会跳的厉害。也不知道为什么。不是阻抗问题,前面有运放。 同样的硬件,PIC和430 采集很稳定。 看来还是得等待继续完善啊! 实际测试,读64次取平均,基本上不跳了。
内部1.25基准。
测试发现0.025V以下测不到,基本上整体小5-6个字。 本帖最后由 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:57 编辑
logicgreen 发表于 2013-1-8 22:53 static/image/common/back.gif
估计是输入阻抗低的缘故。
请增加输出阻抗试试。
我用万用表量到输入脚上有0.025V的电压,转换结果仍然为0,再增加后才有结果,后面的线性还挺好。 rainbow 发表于 2013-1-8 22:55 static/image/common/back.gif
我用万用表量到输入脚上有0.025V的电压,转换结果仍然为0,再增加后才有结果,后面的线性还挺好。 ...
加运放了吗? jianjun42 发表于 2013-1-9 13:43 static/image/common/back.gif
加运放了吗?
IC引脚上的电压已经是0.025V了,和运算有关系吗? rainbow 发表于 2013-1-9 18:26 static/image/common/back.gif
IC引脚上的电压已经是0.025V了,和运算有关系吗?
理论分辨率是1.25除1024=0.00122V。
加大去耦电容试试,或者降低ADC的转换速率看看。 理论上是如此: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楼看看问题到底出在哪里? jianjun42 发表于 2013-1-10 08:54 static/image/common/back.gif
理论上是如此:1.25/1024=1.22mv,但是实际上根本测不到个位的mv电压,我实测的数据和20楼《rainbow》 朋友 ...
你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。 logicgreen 发表于 2013-1-11 22:38 static/image/common/back.gif
你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。
1/23 ?ADC输入阻抗23K。那也应该约是23/24啊。
logicgreen 发表于 2013-1-11 22:38 static/image/common/back.gif
你把1k电阻去掉试试,因为ADC的输入电阻约为23k,所以实际测试的是1\23。
去掉了也没什么改善,20mv以下根本测不到 jianjun42 发表于 2013-1-12 10:44 static/image/common/back.gif
去掉了也没什么改善,20mv以下根本测不到
这个低端采样问题解决没有? rqiang 发表于 2013-3-31 06:27 static/image/common/back.gif
这个低端采样问题解决没有?
无法解决,等高阻抗版本吧 jianjun42 发表于 2013-3-31 12:54 static/image/common/back.gif
无法解决,等高阻抗版本吧
不知道官方会不会出改进版本? rqiang 发表于 2013-3-31 22:07 static/image/common/back.gif
不知道官方会不会出改进版本?
官方明确表示过6月份后会出新版本,ADC改为高阻 jianjun42 发表于 2013-4-1 07:54 static/image/common/back.gif
官方明确表示过6月份后会出新版本,ADC改为高阻
多谢,准备项目看看效果
页:
[1]