Part Number:ADC3683
工程师您好!
我们现在使用ADC3683,发现FCLK的输出占空比不是50/50:(黄色为DCLK,蓝色为FCLK)
我们使用如下模式:
Real Decimation, 1-wire,Decimation by 4
寄存器配置如下:
write_reg(fd, 0x07, 0x6c);
// load e-fuse
write_reg(fd, 0x13, 0x01);
usleep(2000);
write_reg(fd, 0x13, 0x00);
usleep(2000);
// configure FCLK
write_reg(fd, 0x19, 0x00);
write_reg(fd, 0x1B, 0x00);
// REAL DECIMATION, 18-bit, 1-WIRE, 0xFF800
write_reg(fd, 0x20, 0x00);
write_reg(fd, 0x21, 0xF8);
write_reg(fd, 0x22, 0x0F);
// Enable the decimation filter
write_reg(fd, 0x24, 0x06);
// Configure the decimation filter
// Decimation by 4, Real decimation
// 0 010 1 00 0
write_reg(fd, 0x25, 0x28);
// real decimation
write_reg(fd, 0x27, 0x00);
write_reg(fd, 0x2E, 0x00);
// no gain added
write_reg(fd, 0x26, 0x22);
write_reg(fd, 0x26, 0x00);
请问是不是哪里配置有误?
感谢!
Kailyn Chen:
您好,我看您0x1B配置的18bit 的分辨率。根据0x21的描述,输出不同的分辨率FCLK的duty cycle不同,您将0x1B的输出配置为16bit的再看看是否duty cycle为50%。
,
la Ni:
感谢回复!
如果我们目标是18bit, 1-wire, bypass模式,
寄存器要如何配置呢?
,
Kailyn Chen:
la Ni 说:如果我们目标是18bit, 1-wire, bypass模式,
0x20~0x22 的寄存器配置是没问题的。
我看0x1B 您配置的是00,配置为输出是18bit的话,需要将bit7 MAPPER_EN这里配置为1。
所以需要0x1B改为0x80,您再验证下。
,
la Ni:
Hi,Kailyn,
我们参照你的建议,现在配置为Decimation Bypass, 1-wire, 16bit模式,配置如下
// 011 0 1 100 — 0x6c — 1-wire write_reg(fd, 0x07, 0x6c); printf("reg 0x%02x = 0x%02x\n", 0x07, read_reg(fd, 0x07));
// load e-fuse write_reg(fd, 0x13, 0x01); usleep(2000); write_reg(fd, 0x13, 0x00); usleep(2000);
// configure FCLK // Decimation Bypass // 0 00 0 000 0 write_reg(fd, 0x19, 0x00); printf("reg 0x%02x = 0x%02x\n", 0x19, read_reg(fd, 0x19)); // Decimation Bypass // 1 0 001 000 — 0x88, 16bit write_reg(fd, 0x1B, 0x88); printf("reg 0x%02x = 0x%02x\n", 0x1B, read_reg(fd, 0x1B)); // FCLK // 0x0FF000, 16bit write_reg(fd, 0x22, 0x0F); write_reg(fd, 0x21, 0xF0); write_reg(fd, 0x20, 0x00);
printf("reg 0x%02x%02x%02x = 0x%02x%02x%02x\n", 0x22, 0x21, 0x20, read_reg(fd, 0x22), read_reg(fd, 0x21), read_reg(fd, 0x20));
write_reg(fd, 0x24, 0x00); printf("reg 0x%02x = 0x%02x\n", 0x24, read_reg(fd, 0x24));
write_reg(fd, 0x25, 0x00); printf("reg 0x%02x = 0x%02x\n", 0x25, read_reg(fd, 0x25));
回读的值如下:
但看到的FCLK信号还是不正常,如下:
请帮忙看下寄存器值是否还是配置有误?
最好可以提供一组确认可以正常的寄存器配置(我们想要的模式是:Decimation Bypass, 1-wire, 16bit模式),以便排除其它的问题。
感谢!
,
Kailyn Chen:
la Ni 说:Decimation Bypass, 1-wire, 16bit模式
抱歉我看了下没有源程序可以参考。
但是FCLK的配置这里是没有问题的。
从FCLK的波形来看,信号幅值也不对。是使用示波器直接在FCLK的输出端测试的吗?
,
la Ni:
感谢回复!
是在ADC3683的引脚输出处测量的;
是不是硬件设计上有问题,相关原理图如下:
我们有点卡在这里了,请支支招,谢谢!
,
Kailyn Chen:
好的,我看下您的硬件,然后再去确认下这个问题。
,
Kailyn Chen:
您好,抱歉回复晚了,麻烦您验证下0x20~0x22的寄存器的值您这边使用默认值,不进行配置,看下FCLK的占空比是50%吗?
另外,您是使用的自己的板子还是EVM板?
,
la Ni:
Hi Kailyn:
试过用默认值,也是一样的占空比有误,我们是自己的板,不过基本上是参考EVM板来的。
有个疑点请教:
如果CLKP/M是输入20MHz,
Decimation Bypass, 1-wire, 16bit模式的话,DCLKINP/M要输入多少频率呢?
感谢!
,
Kailyn Chen:
la Ni 说:试过用默认值,也是一样的占空比有误,我们是自己的板,不过基本上是参考EVM板来的。
默认值占空比有误的话,我需要再去确认下。
la Ni 说:
如果CLKP/M是输入20MHz,
Decimation Bypass, 1-wire, 16bit模式的话,DCLKINP/M要输入多少频率呢?
可以参考Table8-6。Fs即为采样时钟CLK。
所以16bit ,1 wire模式的话,DCLK=8*Fs=160Mhz.
,
Kailyn Chen:
您好,使用您之前提供的寄存器配置,得到FCLK的占空比是50%,经复制现象是没问题的。
所以不是您这边的配置问题。
所以需要看下您使用的CLK和DCLK的频率。
,
la Ni:
感谢Kailyn!
确实是CLK和DCLK频率没有配对的问题。目前占空比正确了。
不过又有新的情况,FCLK的P和N不同步,我另起一帖吧。
谢谢!