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.

[参考译文] MSP430FG4618:ADC12 MSP430FG4618不稳定

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/565134/msp430fg4618-adc12-msp430fg4618-unstable

器件型号:MSP430FG4618

您好!

我在 MSP430FG4618的通道 ADC12的转换中遇到不稳定问题。

在每次读取和转换时、都会显示转换变化和值。

以下是供查看的代码片段:

P2OUT &=~ BIT0;// Habitabila o circuito de Alimentação Do Sensor de Pressão
P6SEL = 0x0F;//选择一个 AD0 como entada A/D
ADC12CTL0 = SHT0_15 + REF2_5V + REFON + ADC12ON;//采样保持时间、1024个周期、参考电压2、5V (ON)、ADC12打开
ADC12CTL1 = SHP + ADC12DIV_7;//采样计时器、交易所:ADC12SC、分频 POR 8
ADC12MCTL0 = SREF_1;// Canal 10、Vref+
ADC12IE = 0x01;//启用中断
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;//开始转换
pressao_manometrica=(((long) ADCresult -零)* 264.00)/4095;
for (unsigned long int i = 0;i < 500;i++);//循环参数 Temporização
P2OUT |= BIT0;//去电路去 Alimentação DO 传感器去 Pressão
ADC12CTL0 = 0;//可达性 o ADC12
ADC12CTL0 = 1;
ADC12CTL1 = 0;
ADC12CTL1 = 1;
ADC12CTL0 &=~ ENC;//不稳定性 A Interrupção DO 转换器 ADC12

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Tratamento da interrupção do Conversor AD 12位
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma vector=ADC12_vector
_interrupt void ADC12ISR (void)

ADCresult = ADC12MEM0;
_BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);//退出 LPM3

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

    ADC 比 CPU 慢得多。 开始转换后、您应等待结果。 您不是这样做的:

    ADC12CTL0 |= ADC12SC;//开始转换
    pressao_manometrica=(((long) ADCresult -零)* 264.00)/4095;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我在转换开始后设置一个延迟、可以解决什么问题?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    也可以

    while (!(ADC12IFG & 0x0001));



    _bis_SR_register (LPM0_bits | GIE);

    我甚至不知道您是如何进入 ADC12 ISR 的、因为全局中断从未被启用。

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

    // //
    // Rotina Principal DO 数据记录器 //
    // //
    void main (void)

    volatile unsigned int j;

    WDTCTL = WDTPW + WDTHOLD; //停止 WDT
    FLL_CTL0 |= XCAP14PF; //配置负载电容器

    操作

    IFG1 &=~OFIFG; //清除 OSCFault 标志
    对于(j = 0x47FF;j > 0;j-); //标志的设置时间

    while ((IFG1 & OFIFG)); // OSCFault 标志仍然置1?

    initPORTS(); //初始化操作系统端口
    initBT(); //初始化 o BT
    initrtc(); //初始化 o RTC
    initrs232(); //初始化 o RS232
    InitI2C (SlaveAddress); //初始化 o I2C
    InitLCD(); //初始化 o LCD
    //LCDACTL = 0;//Desabilit o LCD
    P5OUT &=~ 0x02; // Habitabila o cirito do LCD
    LCDPrintString ("Testando..."); // Escreve a String Testando (创建字符串测试)... 无液晶屏
    _DELAY_CYCLES (2000000);
    LCDSetPosition (1、0);
    LCDPrintString ("Display LCD16X2");// Escreve a String Display LCD16X2 no LCD
    _DELAY_CYCLES (2000000);
    LCDClear (); // Limpa o LCD
    P5OUT |= 0x02; //去稳定性 o 电路 de Alimentação do LCD
    P7OUT = 0; // Limpa o port de Dados do LCD evitando consumo de bateria

    RTCSEC = 0x00; // Carrega com Zero o Registrador do RTCSEC
    RTCMIN = 0x00; // Carrega com Zero o Registrador do RTCMIN
    RTCHOUR = 0x00; // Carrega com Zero o Registrador do RTCHOUR
    RTCDOW = 0x00; // Carrega a Semana
    RTCDAY = 0x01; // Carrega o 直径
    RTCMON = 0x01; // Carrega o Mes
    RTCYEAR = 0x2017; // Carrega o Ano

    RTCCTL &=~RTCHOLD; // Habitabila o RTC
    IE2 |= BTIE; // Habitabila o 基本计时器

    TACTL = 0; //Desabilit a o TimerA
    TBCTL = 0; //Desabilit a o TimerB

    Intervalo = 900; // Iniciza com Intervalo igual a 15 minutos
    VerIntervalo[0]='1';
    VerIntervalo[1]='5';
    VerIntervalo[2]='M';
    VerIntervalo[3]='I';
    VerIntervalo[4]='N';

    a_vazao = 0.001; // Fator de conversão de cala da vazão

    操作 // Rotina Principal

    _bis_SR_register (LPM3_bits + GIE);// Entra em LPM3 (Mdo de Baixo Consumo)
    _NO_OPERATION (); // Não FAZ nada

    同时(调整< 1); //对< Que 38进行量化调整,加法或 LPM3

    _bis_SR_register (LPM3_bits + GIE);// Entra em LPM3 (Mdo de Baixo Consumo)



    我需要从 ADC12收集数据并以1秒的间隔存储在存储器中、但不会根据需要产生结果。 ADC12不会在短时间内转换。

    I μ A´m XTAL1 32.768Hz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您正在使用尽可能最长的采样保持时间并将 ADC12时钟除以8、但通过 ADC12OSC 为 ADC12提供时钟将导致采样和转换时间略高于1.6ms。 您尚未阐明 LFXT1CLK 提供的时钟/外设。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很抱歉。

    我可以发布所有代码供您查看所有信息。

    如何操作? 如何发布所有代码?