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.

[参考译文] ADS8556EVM:转换后、所有数字输出位都是"sagging&quot

Guru**** 2533880 points
Other Parts Discussed in Thread: ADS8556

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/868869/ads8556evm-all-digital-output-bits-are-sagging-after-a-conversion

器件型号:ADS8556EVM

电源电压:

AVDD 为+5V、   HVSS 和-VIN 为+5V

AVdd 为+5V

针对 BVdd 的+3.3V (数字电源)

我当前对 ADS8556EVM 套件的所有6个通道施加了相同的测试电压(+2V)(设置为 HW +并行数据模式)。  这有助于确保转换读取后所有数据位(DB0至 DB15)保持相同(或接近相同)值。

在我执行 一个转换命令后、我等待忙中断。  然后、我通过以下方式读取全部6个通道:

1.将!CS 引脚驱动为低电平

2.将!RD 引脚切换为低电平、然后切换为高电平、6次(每个通道读取一次)。

3.将!CS 引脚驱动回高电平

我截取了此屏幕截图(黄色轨迹线显示正在生成的忙中断脉冲、蓝色轨迹线直接位于 ADS8556的引脚64上、即 DB15、MSB 输出):

我的测试电压意味着蓝色走线(MSB 位)应该是高电平、但它显然是"标记"的。  我检查了几个数字输出位、它们看起来都像这条指数衰减布线。  

我的问题: 为什么要标记迹线?  不应该保持高电平?  这会导致我的微控制器读取不稳定的输出值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Richard、

    您在控制器中获得的代码是什么? 您是否使用蓝色导线将控制器连接到 ADS8556EVM? 您在何处将数据总线连接到(ADC 的 D0~D15或 ADS8556EVM 板上的 J5连接器)?

    此致、

    戴尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dale!

    我还提供了另一张屏幕截图、以进行澄清。  黄色轨迹线是 ADC (J4、引脚19)上的 BUSY 脉冲、蓝色轨迹线是 DB15引脚(U4的引脚64直接)、当我向 ADC 的所有通道施加-2V 信号时(因此、这可以保证 MSB、DB15应该始终为"1")。  如果我监控 J5的引脚31、它会显示相同的问题、因此我将直接监控 U4以缩小问题的根源。  

    除了两个示波器探头(再次尝试缩小我的问题源)外、在没有连接到 J5的情况下进行这些捕获。

    我的电线颜色很多-有些是蓝色的、有些是红色的、有些是灰色的。

    以下是我的代码(我使用的是 Arduino):

    #define ADC_CONV_FREQ 10000 //以 Hz 为单位的 ADC 转换频率
    
    /** ADC 引脚定义如下:**/
    #define CONV_START 4
    #define ADC_IS_BUSY 5
    #define ADC_CS 6
    #define ADC_Read 9
    //////////////////////////////////////////////////////////////
    #define ADC_BIT0 2
    #define ADC_BIT1 3
    #define ADC_BIT2 14
    #define ADC_BIT3 15
    #define ADC_BIT4 16
    #define ADC_BIT4 17
    #define ADC_BIT6 18
    #define ADC_BIT2 19
    #define ADC_BIT8 20
    #define ADC_BIT4 21 #define ADC_BIT4 17 17 #define ADC_BIT4 18 18 #define ADC_BIT4 18 #define ADC_BITE#define ADC_BITXT_23
    
    #define ADC_BITEN 23 #define ADC_BITED_BITEN 23 #define ADC_BITEN 23 #define ADC_BITED_BITEN
    
    
    
    
    
    //
    全局变量:
    volatile int adc_result_bits;
    volatile int interrupt_counter;
    
    volatile float adc_Channel_A0;
    volatile float adc_Channel_A1;
    volatile float adc_Channel_B0;
    易失性浮点 ADC_Channel_B1;
    易失性浮点 ADC_Channel_C0;
    易失性浮点 ADC_Channel_C1;
    
    /********* //
    函数原型:
    void adc_ready_inpt (void);
    float adc_read (void);
    
    void setup ()
    {
    Serial.begin(9600);
    pinMode (conv_start、output);
    analogWriteFrequency (conv_start、adc_conv_FREQ);//设置 ADC 转换频率
    
    pinMode (ADC_IS_BUSY、输入);
    
    pinMode (ADC_CS、输出);
    pinMode (ADC_READ、 输出);
    digitalWrite (ADC_CS、高电平);
    digitalWrite (ADC_Read、高电平);
    
    attachInterrupt (digitalPinToInterrupt (ADC_is_BUSY)、ADC_READY_INIpt、下降);
    
    /********* /
    pinMode (ADC_BIT0、输入);
    pinMode (ADC_BIT1、输入);
    pinMode (ADC_BIT2、 输入);
    pinMode (ADC_BIT3、输入);
    pinMode (ADC_BIT4、输入);
    PinMode (ADC_BIT5、输入);
    pinMode (ADC_BIT6、输入);
    pinMode (ADC_BIT7、 输入);
    pinMode (ADC_BIT8、输入);
    pinMode (ADC_BIT9、输入);
    PinMode (ADC_BIT10、输入);
    pinMode (ADC_BIT11、输入);
    pinMode (ADC_BIT12、 输入);
    pinMode (ADC_BIT13、输入);
    pinMode (ADC_BIT14、输入);
    PinMode (ADC_BIT15、输入);
    ******* /
    analogWrite (CONV_START、100);
    delay (1000);
    }
    
    void loop()
    {
    for (volatile long i = 0;i < 100000000;i++)
    {//"do inhere" for loop
    }
    serial.print ("接口计数器:");
    serial.println (interrupt_counter);
    serial.print ("C0:");
    serial.println (adc_Channel_A0);
    serial.print ("c1:");
    serial.println (adc_Channel_A1);
    }
    
    
    
    float adc_read (void)
    {
    adc_result_bits = digitalReadFast (adc_BIT0)|
    (digitalReadFast (ADC_BIT1)<< 1)|
    (digitalReadFast (ADC_BIT2)<< 2)|
    (digitalReadFast (ADC_BIT3)<< 3)|
    (digitalReadFast (ADC_BIT4)<< 4)|
    (digitalReadFast (ADC_BIT5)<< 5)|
    (digitalReadFast (ADC_BIT6)<< 6)|
    (digitalReadFast (ADC_BIT7)<< 7)|
    (digitalReadFast (ADC_BIT8)<< 8)|
    (digitalReadFast (ADC_BIT9)<< 9)|
    (digitalReadFast (ADC_BIT10)<< 10)|
    (digitalReadFast (ADC_BIT11)<< 11)|
    (digitalReadFast (ADC_BIT12)<< 12)|
    (digitalReadFast (ADC_BIT13)<< 13)|
    (digitalReadFast (ADC_BIT14)<< 14)|
    (digitalReadFast (ADC_BIT15)<< 15);
    
    返回(float) ADC_Result 位;
    }
    
    void ADC_READY_INIpt (void)
    {
    noInterrupts ();//禁用中断
    interrupt_counter++;
    
    digitalWrite (ADC_CS、low);//保持整个数据读取过程(所有通道)的芯片选择为低电平
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_A0 = ADC_Read ();
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_A1 = ADC_Read ();
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_B0 = ADC_Read ();
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_B1 = ADC_Read ();
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_C0 = ADC_Read ();
    
    digitalWrite (ADC_Read、low);
    digitalWrite (ADC_Read、HIGH);
    ADC_Channel_C1 = ADC_Read ();
    
    
    digitalWrite (ADC_CS、HIGH);//现在再次驱动芯片选择 HIGH
    Interrupts();//Enable interrupts
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Richard、

    我建议您使用低电容探针、探针应与 EVM 板具有良好的接地连接。 如果可能、出于测试目的、断开 DB15信号与 U7的布线。  

    我没有从您那里获得有关我的问题"您在控制器中获得了什么代码?"的答案。

    此致、

    戴尔