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:ADC10多引脚读取问题

Guru**** 2524550 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/786133/msp430g2553-adc10-multiple-pin-read-problm

器件型号:MSP430G2553

我有一个从 2引脚重复读取的程序、并将其保存到数组中。 但它仅从一个引脚读取。 help..plssss

#include "msp430G2553.h"

#define TPWM 1000      // PWM 周期

void mppt_compute (void);
void ADC10_ISR (void);

unsigned int samples[2]、loop = 0;//用于保存转换结果
long int p_0 = 0、p_1 = 0;
void main (void){
   WDTCTL = WDTPW + WDTHOLD;                //停止 WDT
   //配置计时器 CPU
   BCSCTL1 = CALBC1_16MHz;
   DCOCTL = CALDCO_16MHz;

   //配置 PWM
   //Freq PWM =频率时钟/(* x * TACCR0)//如果向上/向下,x = 2,否则 x = 1
   TA0CTL  = tassel_2 + MC_3 + ID_0 ;// SMCLK、上行-下行模式、定时器 A 输入分频器/1
   TACCR0 = TPWM;                   // PWM 周期

   TA0CCTL1 = OUTMOD_2;             // Timer_A.OUT1 PWM 切换/复位
   TACCR1 = 500;                 // PWM 占空比

   TACCR2 = 1000-1;                // Timer_A.OUT2的周期来触发 ADC
   TA0CCTL2 |= OUTMOD_6;             // Timer_A.OUT2切换/复位

   P1DIR  |= BIT2 + BIT6;             // P1.2和 P1.6 ->输出
   P1SEL  |= BIT2;                // P1.2 = TA1输出
   P1SEL &=~BIT6;                   // P1.6 -> I/O

   //配置 ADC
   ADC10CTL0 &=~ENC;                   //禁用 ADC
   ADC10CTL1 = INCH_1 + CONSEQ_3 + SHS_3 + ADC10DIV_0 + ADC10SSEL_3;
   // A4 A3 - A1 A0 ->多通道
   //重复通道序列
   // Timer_A。输出2触发 ADC
   ADC10CTL0 = SREF_1 + ADC10SHT_2 + MSC+ REFON + ADC10IE;
   // VR+= VREF+和 VR-= VSS
   // 16 x ADC10CLK,启用多通道

   ADC10AE0 = BIT0 + BIT1;                // P1.0 -> A0 (采样[1]-> IPV)、P1.1 -> A1 (采样[0]-> Vpv)
   ADC10DTC1 = 0x02;                   // 2次转换
   ADC10SA =(int)个样本;                //缓冲区
   ADC10CTL0 |= ENC+ADC10SC;             //采样和转换准备就绪

   _enable_interrupt ();

   对于(;;)    {
         //其他代码

   }



void mppt_compute (void){
   P_1 = samples[0]* samples[1];      //计算新的功耗
   if (p_1 > p_0)
      TACCR1 =(TACCR1 >=(TPWM -1))? TACCR1:+(TACCR1+1);   //递增饱和 PWM 的占空比
   否则、如果(p_1 < p_0)
      TACCR1 =( TACCR1 <= 1)? TACCR1:TA0CCR1 -1;         //具有低饱和的 PWM 的减量占空比
   P_0 = p_1;                                           //存储新电源
   返回;




#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void){
   LOC++;
   if (loop >= 3906){
      mppt_compute ();
      LOOP = 0;
   }
   ADC10CTL0 &=~ENC;             //禁用 ADC
   while (ADC10CTL1和 ADC10BUSY);      //等待 ADC10内核处于活动状态
   ADC10SA =(int)样本;         //数据缓冲区启动
   ADC10CTL0 |= ENC+ADC10SC;      //启用和启动 ADC
   ADC10CTL0 &=~ADC10IFG;         //清除中断

   返回;



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shuhaib、您好!
    您是否曾尝试在 Code Composer Studio 内的 TI Resource Explorer 中查看过我们的代码示例?
    有一个名为 msp430g2x33_ADC10_14.c 的 ADC 代码示例、其中演示了两个通道上的一系列采样。

    此致
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢你的帮助。 但我的问题是引脚1.1不读取任何值。 我编写的程序只能从 p1.1读取。 但它也不起作用。 仅为常量值1
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shuhaib、您好!
    但您发布的代码不适用于一个 ADC 输入、而适用于多个 ADC 输入。 因此、如果您尝试运行仅使用 P1.1作为输入的代码、请查看我们 CCS 中 TI Resource Explorer 中的"msp430g2x33_ADC10_01.c"代码示例。 这正是使用 P1.1作为 ADC 输入的示例。

    此致
    Peter
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在我的 msp430g2553中、p1.1是 RXD 引脚。我使用名为 msp430g2x33_ADC10_14.c 的示例代码从 p1.0和 p1.1读取。 p1.0正确读取模拟信号。 但 p1.1仅显示值1。 我的硬件是否有故障??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shuhaib、

    我自己测试了代码示例、它在我的硬件中工作正常。

    我不确定您面临的是什么问题、因为您的描述不够充分。 在理解代码示例方面、还必须小心谨慎。 此代码示例使用一个 ADC10SC 16两个输入转换的触发器来执行、并使用 DTC 将结果写入 RAM、从200h 开始。

    在将一个输入连接到 Vcc 后、在代码的断点处的建议位置停止代码执行后、我对 CCS 进行了一个屏幕截图、Vcc 当然会使 ADC (03FFh)饱和、而另一个输入到 GND 饱和、结果为0000h。 请参阅下面的屏幕截图。

    此致

    Peter

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

     这就是我得到的 当我将 VCC 连接到 p1.0和 p1.1时... 只有1个引脚的读数。 0x200也有相同的结果。。

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

    您好!

    很抱歉、但我认为您还不了解代码示例、包括在 RAM 中存储 ADC 值。

    在您的案例中、RAM/内存窗口还按 预期正确显示了来自 A1和 A0的16x2样本。 请参阅下面屏幕截图的分析。

    此致

    Peter