打印
[技术求助]

发送start命令有时可以正常的启动转换,有时则不能?

[复制链接]
469|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyf部长|  楼主 | 2020-6-8 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
supernan| | 2020-6-8 21:30 | 只看该作者
时序问题

使用特权

评论回复
板凳
zyf部长|  楼主 | 2020-6-8 21:35 | 只看该作者
尝试将初始化值读出与写入值进行比较,貌似没问题

使用特权

评论回复
地板
morrisk| | 2020-6-8 21:39 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
5
zyf部长|  楼主 | 2020-6-8 21:42 | 只看该作者

#define COMM_RESET        0X06                        //????
#define COMM_START        0X08                        //??????
#define COMM_STOP         0X0A                        //??????
#define COMM_READ_DATA    0X12                        //?????
#define COMM_SFOCAL1          0X19                        //?????        
#define COMM_READ_REG     0X20                        //??????
#define COMM_WRITE_REG    0X40                        //??????

uchar bReady=0;
uchar read_reg_buffer[20];
signed long  ad_sample_dat;

void SPI_read_clock()
{
        ADS1262_SCLK=1;        
        delay_us(15);
        ADS1262_SCLK=0;        
        delay_us(15);
}

void SPI_write_clock()
{
        ADS1262_SCLK=0;        
        delay_us(15);
        ADS1262_SCLK=1;        
        delay_us(15);
}

/*===========================================================================================*/
//ADC????
uchar ad_read_byte()
{
        uchar i;
        uchar dat=0;
        ADS1262_DIN = 0;
        for(i=0; i<8; i++)
        {
                dat <<= 1;
                SPI_read_clock();              //???????????????,???????
                if(ADS1262_DOUT)
                        dat++;               
        }
        return dat;
}

/*===========================================================================================*/
//adc????
void ad_write_byte(uchar dat)
{
        uchar i;
        for(i=0; i<8; i++)
        {
                if(dat & 0x80)
                        ADS1262_DIN=1;
                else
                        ADS1262_DIN=0;
                dat <<= 1;
                SPI_write_clock();               
        }
}

/*===========================================================================================*/
//adc????
void ADS126x_Write_Register(uchar StartAddress, uchar NumRegs, uchar * pData)
{
        uchar i;
        ADS1262_CS = 0;
        //delay_us(1);        
        ad_write_byte(COMM_WRITE_REG + StartAddress);
        ad_write_byte(NumRegs-1);
        delay_ms(10);
        for(i=0; i< NumRegs; i++)
        {
                ad_write_byte(*pData++);
        }
        ADS1262_CS = 1;
}

/*===========================================================================================*/
/*??????????????*/
void ADS126x_Read_Register(uchar StartAddress,uchar NumRegs,uchar *tab)
{
        uchar i;
        ADS1262_CS = 0;
        //delay_us(1);
        ad_write_byte(COMM_READ_REG+StartAddress);        
        ad_write_byte(NumRegs-1);     /*?????????*/        
        delay_ms(10);
        for(i=0; i< NumRegs; i++)
        {
                tab = ad_read_byte();
        }
        ADS1262_CS = 1;
}


/*===========================================================================================*/
unsigned long  ADS126x_ReadAdData()
{
        uchar i;
        uchar byte[4];
        ulong return_val;

        ADS1262_CS = 0;                          /*????*/
        //delay_us(1);
        //ad_write_byte(COMM_READ_DATA);           /*???????*/
        for(i=0; i<4; i++)
        {
                byte = ad_read_byte();
        }
        return_val = 0;
        if(byte[0] & 0x80)
        {
                return_val = 0xff;
                return_val = (return_val << 8) | byte[0];
                return_val = (return_val << 8) | byte[1];
                return_val = (return_val << 8) | byte[2];
        }
        else
        {
                return_val = 0x00;
                return_val = (return_val << 8) | byte[0];
                return_val = (return_val << 8) | byte[1];
                return_val = (return_val << 8) | byte[2];

        }
        ADS1262_SCLK = 0;
        ADS1262_CS   = 1;
        ADS1262_DIN  = 0;
        ADS1262_DOUT = 0;

        return(return_val);
}

void ADS126x_SendResetCommand(void)
{
        ADS1262_CS = 0;
        ad_write_byte(COMM_RESET);
        ADS1262_CS = 1;
}

void ADS126x_SendStartCommand(void)
{
        ADS1262_CS = 0;
        ad_write_byte(COMM_START);
        ADS1262_CS = 1;
}

void ADS126x_SendStopCommand(void)
{
        ADS1262_CS = 0;
        ad_write_byte(COMM_STOP);
        ADS1262_CS = 1;
}

void ADS126x_Init(void)
{
        uchar tmp;

        
        tmp = 0x10;                                                                                                        //复位,偏置关闭,内部参考关闭                                                                                                
        ADS126x_Write_Register(0x01,1,&tmp);        

        tmp = 0x00;                                                                                                        //关闭串口超时,关闭状态字节,关闭校验                                                                                                
        ADS126x_Write_Register(0x02,1,&tmp);

        tmp = 0x10;                                                                                                        //正常的参考电压极性,连续转换模式,斩波使能,转换0延时                                                                                                        
        ADS126x_Write_Register(0x03,1,&tmp);
        
        tmp = 0x60;                                                                                                        //sinC4模式
        ADS126x_Write_Register(0x04,1,&tmp);

        tmp = 0x52;                                                                                                        //PGA=32,10SPS
        
        ADS126x_Write_Register(0x05,1,&tmp);           

        
        tmp = 0x45;                                                                                                        //AIN4输入+AIN5输入-
        
        ADS126x_Write_Register(0x06,1,&tmp);           
        
        tmp = 0x09;                                                                                                        //外部基准接AIN0,AIN1
        ADS126x_Write_Register(0x0F,1,&tmp);   
        
        
        
}

void ADS126x_Reset(void)
{
        ADS126x_SendResetCommand();
        ADS126x_Init();
}

void ad_init(void)
{
        
        ADS126x_Reset();
        ADS126x_SendStartCommand();
        
}

使用特权

评论回复
6
zyf部长|  楼主 | 2020-6-8 21:45 | 只看该作者
虽然搞这行时间不短了,之前这类驱动都是直接拿网上的代码down下来直接用,但这次这个片子用的人貌似很少,对于这种问题仍然是摸不着头脑,麻烦各位达人各抒己见说下自己遇到这种问题通常是如何应对,先谢谢各位了

使用特权

评论回复
7
llia| | 2020-6-8 21:50 | 只看该作者

比较复杂,手册就有几十页。

一般先上示波器,程序频繁发读命令或者写命令,

使用特权

评论回复
8
wangzsa| | 2020-6-8 21:53 | 只看该作者
观察几个信号的相对关系和时序。

使用特权

评论回复
9
tian111| | 2020-6-8 21:56 | 只看该作者
没有用过,是不是时序不对。

使用特权

评论回复
10
chuxh| | 2020-6-8 21:59 | 只看该作者
寄存器的配置再检查一遍。

使用特权

评论回复
11
dingy| | 2020-6-8 22:03 | 只看该作者
复位和初始化部分,增加延时,软件模拟说实话,主要就是时序的问题。

使用特权

评论回复
12
houcs| | 2020-6-8 22:08 | 只看该作者

http://www.ti.com.cn/tool/cn/ads1262evm-pdk
官方是有这么一个评估板的,例程也有,可是下载链接失效了。你可以去联系TI的代理找找。

使用特权

评论回复
13
zyf部长|  楼主 | 2020-6-8 22:11 | 只看该作者
看看你的供电是不是正常的。

使用特权

评论回复
14
guoyt| | 2020-6-8 22:14 | 只看该作者
ADS1262的配置对不对呢

使用特权

评论回复
15
zhuww| | 2020-6-8 22:17 | 只看该作者
tlc5510程序和这个类似吗?

使用特权

评论回复
16
huwr| | 2020-6-8 22:22 | 只看该作者

在发命令之前, 是否考虑先检查一下状态, 看看能否接收命令

使用特权

评论回复
17
zhuhuis| | 2020-6-8 22:26 | 只看该作者
你的代码调试通过了吗?

使用特权

评论回复
18
chuxh| | 2020-6-8 22:30 | 只看该作者
最近在调ADS1263,遇到了内部PGA无法正常放大(不管放大多少倍,都只有一点几倍)的问题。请问内部PGA除了那4位寄存器和那个4.7NF电容之外。 还要注意什么地方吗?

使用特权

评论回复
19
zyf部长|  楼主 | 2020-6-8 22:35 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
20
airwill| | 2020-6-29 23:09 | 只看该作者
不知道有什么新进展了吗?   感觉时序的时延设置是比较大的可能性

使用特权

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

本版积分规则

694

主题

7102

帖子

8

粉丝