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.

[参考译文] MSP-EXP430G2:使用 MSP-EXP430G2ET LaunchPad 记录来自 ADC 16位(Adafruit)的数据

Guru**** 2538950 points
Other Parts Discussed in Thread: ENERGIA, MSP-EXP430G2ET, ADS1115

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/865738/msp-exp430g2-record-data-from-adc-16bit-adafruit-with-msp-exp430g2et-launchpad

器件型号:MSP-EXP430G2
主题中讨论的其他器件:EnergiaADS1115ADS1015

大家好!

我希望您能帮我:我正在使用 MSP-EXP430G2ET LaunchPad 从 ADS1115 16位 ADC 读取数据。 由于此组件的库、我已将采样频率设置为860SPS (最大可能值)、并且可以在 Energia 串行绘图仪上绘制数据。  

但是、当我将数据从串行发送到 Python 或 Matlab 时、只能在 POR 秒后获得50个样本。 我尝试通过串行方式发送 一个 int (X)、每当发送 ADC 采集的数据时、该 int (X)都会增加;通过这种方式、在 Python (在 PC 上)中、我看到订购了 int X (因此我不会丢失样本)、并且在大约7秒内仅收到350个样本。  

明天、我将尝试采集数据5秒钟、并将其存储在包含4300个元素的数组中(使 ADC 采样频率为860SPS x 5秒= 4300个样本)、以确保 ADC 采样正确。

我的 MCU 有问题吗? 串行写入速度可能不够? 如果这应该是问题、我可以解决将数据存储在阵列中和 SD 中的问题。

感谢您的关注!

此致、

Giuseppe Missale

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

    串行链路的速度是多少? 此外、您使用的格式是什么(原始二进制与 ASCII)?

    例如9600bps、每秒只能获得860个8位二进制样本。 但您可以以比这快得多的速度运行 UART。

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

    感谢您的回复!

    我正在使用 Serial.wirte func 来发送 int (这是来自 ADC 的值)、波特率设置为115200。

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

    我没有您的设置、因此我猜是这样。

    我的第一个想法是主机速度很慢、但这会导致样本丢失、因为 MCU 不知道这一点。

    在这种情况下的区别似乎是 write(),其中(我猜是?) 您在图形示例中使用 print()。 Energia 引用显示 write()为 int 发送一个字节,但无论如何这不是您想要的。

    这是一个可能不明显的建议,但这是一个快速的实验:尝试使用 print()。 在115200时、每个样本可支持115200/10/860=14字节、16位样本可发送为(5+1)字节(digits+newline)。  

    如果你的代码不是太大,发布它可能会很有用--也许有人会在这里发现一些东西。

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

    这是我的代码、非常简单。

    #include

    #include

    AdafruIT_ADS1115 ADS (0x48);  

    void setup (void)(空)

     Wire.setClock(400000);

     Serial.begin(115200);

     ads.setGain(GAIN_FOUR);   // 4x 增益 +/- 1.024V    

                                   //分辨率 为0.03125mV

     ads.begin();  

     }

    int ADC0、ADC1、ADC2、ADC3、z=0;    

    void loop (void)(空)

    ADC0 = ADS.readADC_SingleEnd (0);

     //Serial.print (z++);

     serial.println (ADC0);

     }

    我还尝试了:在没有串行 println 的情况下,使用 while 循环(我从 ADC 读取值)和 millis ()来花费时间并增加每个循环的变量(X),在循环结束时,我获得 X = 75 (1秒)。 因此、从 ADC 读取数据的速度太慢。

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

    (哦,好的--我没有看 ADC 方面,因为你的第一篇文章说你正在实现860sps。)

    我在这里看不到任何可以为860sps 在配置寄存器中设置 DR 的内容。 如果未完成此操作、您将获得128sps [参考数据表(SBAS444D)表8]。 也许有一种方法专门用于设置寄存器和/或 DR?

    此外、配置寄存器模式默认为单次触发(=1)、其中代码看起来是连续的(=0)[另请参阅表8]。 我怀疑为每个样本启动 ADC 需要一些(时间)成本。 同样、也可以使用一种方法来实现这一目的。