This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1251接收数据错误

Other Parts Discussed in Thread: ADS1251

在使用ADS1251和ATMEGA128单片机通信时初始化接收寄存器数值为00,接收到的数据一直保持01状态。无论输入端电平如何变化一直保持不变。哪位大神能帮忙分析下为什么会是这种情况。

  • 没太明白问题,时序对了吗?

  • 设计ADS1251电路的时候外接8MHz有源晶振和4.096V的参考电压,SCLK引脚接Atmega128的PA1,DOUT接PA0;然后通过串口接收数据。

    下面是我写的时序程序按照手册的同步时序写的:

    void AD_Init(void)
    {
    PORTA &= ~BIT(1); //sck=0;
    delay_nms(5); //延时1ms
    PORTA |= BIT(1); //sck=1
    delay_n100us(5);
    PORTA &= ~BIT(1); //sck=0;
    while(PINA & 0x01);
    }

    //---数据接收模式
    void AD_Conver(void)
    {
    uchar i;

    delay_1us();
    delay_1us();

    for(i=0;i<8;i++)
    {
    data_temp3 << 1;
    PORTA |= BIT(1); //sck=1
    data_temp3 |= (uchar) (PINA & 0x01); //DI
    PORTA &= ~BIT(1); //sck=1;
    }
    USART_Tran_bit(data_temp3);
    for(i=0;i<8;i++)
    {
    data_temp2 << 1;
    PORTA |= BIT(1); //sck=0
    data_temp2 |= (uchar) (PINA & 0x01); //DI
    PORTA &= ~BIT(1); //sck=1;
    }
    USART_Tran_bit(data_temp2);
    for(i=0;i<8;i++)
    {
    data_temp1 << 1;
    PORTA |= BIT(1); //sck=0
    data_temp1 |= (uchar) (PINA & 0x01); //DI
    PORTA &= ~BIT(1); //sck=1;
    }
    USART_Tran_bit(data_temp1);
    while(!(PINA & 0x01));
    delay_3us();
    }

    //----------------主函数---------------
    void main (void)
    {
    USART_Init(baud_set);//串口初始化
    DDRA |= 0x00000010;//PA0为输入和PA1为输出
    PORTA &= ~BIT(1); //sck=0
    AD_Init();
    USART_Tran_bit(data_temp1);
    USART_Tran_bit(data_temp2);
    USART_Tran_bit(data_temp3);
    USART_Tran_bit(0xff);
    while(1)
    {
    AD_Conver();
    }
    }

    然后得到了如下所示的串口程序。

    请您帮看看这是哪的问题啊。

  • 可以用示波器测一组波形看看吗? CLK,SCLK,DOUT?