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.

[参考译文] CCS/MSP430F5438A:MSP430F5438A ADC12更多通道转换

Guru**** 2562550 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/602199/ccs-msp430f5438a-msp430f5438a-adc12-more-channel-conversion

器件型号:MSP430F5438A
主题中讨论的其他器件: MSP430WARE

工具/软件:Code Composer Studio

您好!

我在2个(或更多) ADC12通道和电位器的初始化方面遇到问题。 我成功地尝试了一个、但问题是在尝试更多频道时发生。 如果我想将通道14和通道15与 P1和 P2一起使用、我的初始化应该是怎样的?当程序运行用户输入的已用通道更改时。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Srdjan、
    查看 TI Resource Explorer 中的示例 ADC12_06和 ADC12_09。 您可以将 ADC12MCTLx 分配换成所需的通道。

    您能否详细说明所用通道如何随用户输入而变化?
    如果它类似于 GPIO、则可以使用中断根据需要重新配置 ADC。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复!

    在哪里可以找到此 TI Resource Explorer? 该 pdf 文件吗?

    我想从计算机终端号码发送。 例如数字1、2、3或4。 如果我发送1、则在第一个转换通道上开始转换。 转换结果应用于 PWM 切换第一个二极管。

    如果我从端子发送2、则启动第二个转换通道、结果用于 PWM 切换第二个二极管。

    提前感谢您

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 CCS 中、转到工具栏中的 View、然后单击 Resource Explorer。 然后依次展开 Software、MSP430Ware、Devices、MSP430F5XX_6XX 和 MSP430F5438A、 然后是外设示例。 然后是寄存器级别或驱动程序库。

    您似乎可以使用 USCI ISR 为用户输入实现开关情况!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢。 我找到了问题的解释。

    抱歉、我的英语不是很好。

    我还有一个问题。 我会在那里询问、但如果您认为我应该打开新的线程、我会这样做。

    转换完成后、我读取结果、并将值(0-4095)放入整数中、例如"int adcResult"。 这个值我想用于 PWM 切换 LED 二极管、通过这个结果我输入匹配的 CCR。

    但是、我在将该值转换为介于0-100之间的值时遇到了问题。 如果我执行 PWMvalue = adcResult/4095*100、则在 PWMvalue 中将为 false 值。 如果我执行 PWMvalue = adcResult*100/4095。

    我尝试更改 adcResult 和 PWMvalue 的类型、但在 PWMvalue 中再次出现 false 值。

    在 adcResult 中、当我读取转换结果时、结果为良好值、范围为0-4095。 但是、在转换到0-100范围内的值后、我得到的值是假的。 您能告诉我如何将其转换为0-100范围内的值吗?

    提前感谢您。

    此致、

    斯尔詹

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    以及 ADC 转换的一些附加功能。
    我无法更改 ADC 通道。
    如果我初始化
    ADC12MCTL0 = ADC12INCH_8;
    我收到了通道8的转换结果。 但是、我想更改通道
    ADC12MCTL0 = ADC12INCH_14;
    它继续从通道8接收值。

    此外、如果我使用通道14对其进行初始化、我会从通道14接收值、但当我将通道更改为、例如通道8时、寄存器会继续从通道14接收转换结果。
    我不知道为什么、是否应该设置一些标志?

    ADC12CTL0 = ADC12ON + ADC12SHT0_15;
    ADC12CTL1 = ADC12SHP;
    ADC12MCTL0 = ADC12INCH_8;
    ADC12IE |= ADC12IE0;
    ADC12CTL0 |= ADC12ENC;

    这是我对 ADC 转换的初始化。
    在函数中、我想更改通道

    void switchChannelAdc (int id){
    switch (id)

    案例1:
    ADC12MCTL0 = ADC12INCH_14;
    中断;
    案例2:
    ADC12MCTL0 = ADC12INCH_15;
    中断;
    案例3:
    ADC12MCTL0 = ADC12INCH_8;
    中断;
    案例4:
    ADC12MCTL0 = ADC12INCH_9;
    中断;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Srdjan、
    在第一个公式中,您执行 adcResult/4095*100,除非 adcValue 为4095,否则它将等于0*100。 在第二种情况下、我认为您使用的是 int、并使其溢出。 请尝试对其进行长时间更改、因为建议避免使用浮点数。

    关于更改通道、用户指南指出、ADC12MCTLx 只能在 ADC12ENC = 0时更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的帮助! 这解决了我的问题。

    此致、
    斯尔詹