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.

请教下MSP430G2332单片机ADC采集间隔的时间限制是多少

Other Parts Discussed in Thread: MSP430G2332

因为感觉MSP430G2332的ADC稳定性不好,然后就编了程序单独对ADC进行检测

每次ADC采完,用了2个16位变量去计数,其中一个等于65535时,另外一个加1

当我测到第二个变量差不多等于11000时,ADC不再动作,中断等都无法触发,差不多8亿左右的次数

按常理来时是不应该的,所以请问下,这个两次ADC采集之间的间隔有限制吗?如果有限制的话,那应该是多少?

  • #include <msp430.h>
    unsigned int A,AA,B;
    int main(void)
    {
    WDTCTL = WDTPW + WDTHOLD;                                     // Stop WDT
    ADC10CTL1 = INCH_3 + CONSEQ_1;                             // A3/A2/A1, single sequence
    ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
    ADC10DTC1 = 0x03;                                                            // 3 conversions
    ADC10AE0 |= 0x0E;                                                            // P1.3,2,1 ADC10 option select
    P1DIR |= 0x01;                                                                      // Set P1.0 output

    for (;;)
    {
    B=1;
    ADC10CTL0 &= ~ENC;
    while (ADC10CTL1 & ADC10BUSY);                                                               // Wait if ADC10 core is active
    ADC10SA = 0x200;                                                                                              // Data buffer start
    P1OUT |= 0x01;                                                                                                     // P1.0 = 1
    ADC10CTL0 |= ENC + ADC10SC;                                                                    // Sampling and conversion start
    while(B);
    A++;
    if(A==65535)
    {
    AA++;
    }
    if(AA==65535)
    {
    __no_operation();
    __no_operation();
    }
    }
    }

    // ADC10 interrupt service routine
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=ADC10_VECTOR
    __interrupt void ADC10_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
    // __bic_SR_register_on_exit(CPUOFF);                                                            // Clear CPUOFF bit from 0(SR)
    B=0;
    }

    编辑官方的例程,采用非睡眠模式,出现同样结果,能提点下是什么原因吗?

  • 测试了,随眠模式也一样,所以应该是采集时间限定的问题,在相关说明书上没找到相应答案

  • 官方的例程就一两千次就死了,变量就动不来了

  • 正在测试中,有一定的概率是软件跟仿真器跟芯片之间协调不好,导致运行一段时间后数据直接丢失断开,从而导致的死机,正在测试是否这个问题导致

  • 高达200ksps的转换速率

    这是官方给出的数据

  • 因为感觉MSP430G2332的ADC稳定性不好,然后就编了程序单独对ADC进行检测

    是否ADC输入引脚的电压受到了干扰。

  • 这个ADC稳定性不好,说的是驱动的稳定性不好,而不是结果的稳定性不好.

    ADC用了好多影子寄存器,再加上省电的原因,经常驱动出问题,包括说最简单的官方例程也没敢做ADC连续序列模式+DTC连续模式,只敢中间做完然后停下,取消ENC去同步下ADC,我做就会发生结果移位的现象,至少来说ADC跟DTC没硬件同步

    同样的驱动,给定时器调用跟给while(标志位)这样调用,能得到完全不一样的结果,定时就能运行,等待标志位的方式就不能运行.经常性能调用1次采集,进行不了第二次采集.等等一系列问题,所以我才要对他做测试

  • 一模一样的语句,就因为我换了个工程而不工作,这个工程还是两个一样的工程,就是一个是我复制出来修改的,修改完成在正式里面改掉,在复制出来的就能工作,而正式版的就不能工作,你说,我能对这个芯片放心吗?也不知道是你们的CCS编译器问题还是芯片问题,反正我要疯了,这应该是我用TI的主控芯片的最后一款产品,除非再次需要极致的省电模式,否则我不会再考虑TI的主控芯片,烦躁死我了

  • 其他功能都没这个问题,就ADC这个功能,真他妈的是乱七八糟的

  • 其他功能都没问题,就ADC这个功能,真是乱七八糟的让人发疯

  • 跑一段时间死的问题,经过测试应该跟编译软件Code Composer Studio 7.0.0有关,作为TI自己的官方工具,发生这种事情,真是要被鄙视到死,在更换IAR后,仿真跟实际运行结果一致,包括一模一样语句不运行问题被解决,但是ADC影子寄存器的复位问题应该是真实存在的,毕竟两个软件都一样的问题.

  • 编译软件Code Composer Studio 7.0.0有问题,在升级成编译软件Code Composer Studio 7.2.0后这个相同语句不运行的故障消失