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.

[参考译文] MSP430FR6047:MSP430FR6043上的模拟引脚

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1305561/msp430fr6047-analog-pins-on-msp430fr6043

器件型号:MSP430FR6047

你(们)好。  

这是我第一次使用 TI 电路板、需要一些关于测试 EVM MSP430-FR6047的帮助。 我有一个电位器、我想使用 EVM 中提供的模拟引脚(而不是传感器)获取受控电位器值。
我的接线原理图如下所示:

电位器          EVM

GND  ------------------------------------------------------- >接地
VCC ----------------------   > 3.3V
数据-------------------------------------------------------   > P1.6 (A4)/ P1.7 (A5)

当我在电路板上调试时没有错误、但是模拟读数在0~4095之间是随机的。 输出值不受电位器控制。  
如何修复此问题、以便 EVM 可以正确读取电位器值?

下面是我的代码:

#include <msp430.h>
#include <stdio.h>

void adcInit() {
// Configure P1.6 as analog input
P1SEL1 |= BIT6;
P1SEL0 |= BIT6;

// Configure ADC12
ADC12CTL0 = ADC12SHT0_2 + ADC12ON; // Sampling time, ADC12 on
ADC12CTL1 = ADC12SHP; // Use sampling timer
ADC12CTL2 |= ADC12RES_2; // 12-bit resolution

// Configure ADC channel for P1.6 (A4)
ADC12MCTL0 = ADC12VRSEL_0 + ADC12INCH_4;
}

int readAdc() {
ADC12CTL0 |= ADC12ENC | ADC12SC; // Start ADC conversion
while (ADC12CTL1 & ADC12BUSY); // Wait for conversion to complete
return ADC12MEM0; // Return the ADC result
}

void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop the Watchdog Timer

// Initialize UART
UCA0CTLW0 = UCSWRST; // Put eUSCI in reset
UCA0CTLW0 |= UCSSEL__SMCLK; // CLK = SMCLK
UCA0BRW = 6; // 9600 baud rate
UCA0MCTLW |= UCOS16 | UCBRF_8 | 0x55; // Modulation UCBRSx = 5
UCA0CTLW0 &= ~UCSWRST; // Release eUSCI from reset

adcInit(); // Initialize ADC

while (1) {
// Read the analog value from P1.6
int adcValue = readAdc();

// Transmit the ADC value via UART
printf("ADC Value: %d\n", adcValue);

// Add a delay for visibility or other processing
__delay_cycles(1000000);
}
}

谢谢!

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

    您好!

    在您配置 P1SELx 后、您尚未调用该函数。 尝试在项目中添加以下代码。 您还可以参考此示例代码 https://dev.ti.com/tirex/explore/node?node=A__AOEiiC7rae6t7Pow3PLQVg__msp430ware__IOGqZri__LATEST&placeholder=true

    //禁用 GPIO 上电默认高阻抗模式以激活
    //先前配置的端口设置
    PM5CTL0 &=~μ A LOCKLPM5;

    此致、

    现金豪

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

    现金、您好!  

    感谢您的帮助。 我看了看你提供的链接,我修改了我的代码基于它. 但不知何故、该值仍然没有改变。 该值在0 ~ 4095之间仍然是随机的。 我最初以为可能只是电位器的问题、但我更换了它、仍然无法获得正确的值。 这是我更新后的代码。  

    代码:  

    #include <msp430.h>
    #include <stdio.h>

    void main(void)
    {
    WDTCTL = WDTPW | WDTHOLD; // Stop the Watchdog Timer

    // Configure P1.6 as analog input
    P1SEL1 |= BIT6;
    P1SEL0 |= BIT6;

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    // Configure ADC12
    ADC12CTL0 = ADC12SHT0_2 + ADC12ON; // Sampling time, ADC12 on
    ADC12CTL1 = ADC12SHP; // Use sampling timer
    ADC12CTL2 |= ADC12RES_2; // 12-bit resolution
    ADC12IER0 |= ADC12IE0; // Enable ADC conv complete interrupt
    ADC12MCTL0 = ADC12VRSEL_0 + ADC12INCH_4; // Configure ADC channel for P1.6 (A4)

    while (1)
    {
    ADC12CTL0 |= ADC12ENC | ADC12SC; // Start ADC conversion
    printf("%d\n", ADC12MEM0);

    // Add a delay for visibility or other processing
    __delay_cycles(100000);
    }
    }

    有什么事情我仍然做错了吗?  

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

    您好!

    我已经测试了您的代码、它可以在我的电路板上正常显示。 我在 P1.6引脚上施加0.5V 的电压。 ADC 结果符合预期。  

    此致、

    现金豪

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

    您好!  

    我能不能说、您在 P1.6引脚上施加0.5V 电压的意思是什么。 原因到目前为止,我只这样做了:

    电位器          EVM

    GND ------------------------------------------------------- >接地
    VCC ---------------------- > 3.3V
    数据------------------------------------------------------- > P1.6 (A4)  

    您能否详细说明、当  您说在 P1.6引脚上施加了0.5V 电压时?  

    谢谢你。  

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

    您好!

    我一侧没有电位器。 因此、我使用我身边的电压发生器来测试 ADC 性能。 我在 P1.6上施加了0.5V 的电压。 我得到的 ADC 结果大约为625。 (625/4096)* 3.3V = 0.5V、因此我说 ADC 结果符合预期。  

    此致、

    现金豪

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

    您好!  

    它现在起作用了。 我还将电位器与电压发生器相连、它可以正常工作。  

    问题是不相关的、但我不知道 EVM 的3.3V 电压为什么不起作用。 我用万用表测量它、结果什么都没有。 我是否还需要激活电路板的输出电压?  

    谢谢、现金!  

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

    您好!

    您是说 J2上的3V3不起作用吗? 这可能与 eZ-FET 器件上的 LDC 损坏有关。  

    您可以使用外部电源通过 J33引脚为电路板供电。  

    此致、

    现金豪

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

    您好!  

    抱歉、我是说 J5上的3.3V 无法正常工作。 我也测试了 电源板通过 J33引脚,但我也没有得到任何测量...  

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

    您好!

    我表示 J5上的3.3V 无法正常工作。

    您是否检查了 J30上是否有跳线? 否则、您需要在其上添加跳线。  

    我也 通过 J33引脚测试了电路板的电源,但我也没有获得任何测量...

    使用外部电源供电时、是否已将 POW_SEL 开关转到"外部"?

    此致、

    现金豪

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

    您好!  

    哇、它现在都在工作了。 我真的是一个新手,哈哈,你真的帮了我很多。 非常感谢! 祝您度过美好的假期!  

    此致、
    切斯卡