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.

[参考译文] MSP430G2553:MSP430 ADC

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/603902/msp430g2553-msp430-adc

器件型号:MSP430G2553
主题中讨论的其他器件:MSP430G2253MSP430WARE

您好!

   我的项目有两个模拟输出。 我使用 MSP430G2253微控制器来执行两个 ADC 转换。 我没有得到正确的 ADC 转换值。 请帮帮我。

代码:

void main()

xxxxxxxxxx

XXXXXXXX

xxxxxxxxx

while (1)

adc_temp();

CALC_TEMP_();

_DELAY_CYCLES (50000);

adc_signal ();

CALC_VALUE ();

_DELAY_CYCLES (50000);

void adc_temp ()

ADC10CTL0 &=~ENC;
ADC10CTL0 = ADC10ON + ADC10SR + ADC10SHT_0 + SREF_0;
ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_0 + SHS_0 + INCH_4;
ADC10CTL0 |= ENC;

void adc_signal ()

ADC10CTL0 &=~ENC;
ADC10CTL0 = ADC10ON + ADC10SR + ADC10SHT_0 + SREF_0;
ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_0 + SHS_0 + INCH_5;
ADC10CTL0 |= ENC;

Calc 温度()

ADC10CTL0 |= ENC + ADC10SC;
TEMP_VALUE = ADC10MEM;
_delay_cycles (5000);

xxxxxxxxx;

xxxxxxxxx

xxxxxxxxx

CAL_VALUE ()

ADC10CTL0 |= ENC + ADC10SC;
signal_value = ADC10MEM;
_delay_cycles (5000);

xxxxxxxxx;

xxxxxxxxx

xxxxxxxxx

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

    您可能必须增加采样保持时间才能获得正确的结果。 我们确实提供了有关如何使用 ADC 对内部温度传感器进行采样的示例代码。 导航至 TI Resource Explorer -> Software -> MSP430Ware -> Devices -> MSP430G2xx -> MSP430G2553 -> Peripheral Examples -> Register Level -> msp430g2x33_ADC10_temp.c。 TI Resource Explorer 可在 CCS 中找到,也可在 dev.ti.com 上找到。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jace、

           感谢您的回复。 我想使用两个外部 ADC (将来可能是三个 ADC)。

     

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

    感谢您的回复。

    用于 UART 通信的 P1.1和 P1.2

    用于 ADC 转换的 P1.3、P1.4和 P1.5。


    请告诉我代码中的错误。

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

    在您的函数中、

    您正在启动 ADC 转换、但即使在采样和转换完成之前也会读取采样值。

    要获得有效的采样和转换、您必须使用忙等待循环或使用 ADC10中断(ADC10IE)。

    CALC_TEMP_()和 CALC_VALUE (),

    如下所示、

    忙等待循环:

    CALC_TEMP(){
    
    ADC10CTL0 |= ENC + ADC10SC;
    
    while (ADC10CTL1 & ADC10BUSY);
    
    temp_value = ADC10MEM;
    
    __DELAY_CYCLLES (5000);//除非您将其用于 ADC 用途
    
    以外的其他用途,否则不需要此操作} 

    中断:

    init(){;;
    
    
    
    
    
    ADC10CTL1 |= ;
    
    ADC10AE0 |= 
    
    ;
    
    
    
    }calc_temp
    
    (){
    
    ADC10CTL0 |= ADC10IE;//启用 ADC 中断
    
    ADC10CTL0 |= ENC + ADC10SC;
    
    
    
    }
    
    _interrupt void ADC10_ISR (void)
    
    {
    
    temp_value = ADC10MEM;
    
    
    
    } 

    关于您的评论"P1.1和 P1.2用于 UART 通信"、

    您可以通过 PxSEL 和 PxSEL2寄存器重新配置这些通道。

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

    感谢您的回复和提供的信息。 我今天将尝试这种方法。 谢谢你。

    谢谢、此致、
    穆罕默德·穆罕默德