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/MSP430G2231:ADC 读取不工作

Guru**** 2529560 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/674127/ccs-msp430g2231-adc-read-not-working

器件型号:MSP430G2231

工具/软件:Code Composer Studio

您好!

我开始为一个程序编写代码、该程序对来自端口0和1的2个模拟信号进行采样、 和控制频率和宽度因子、该程序构建、编译但不执行我想要的操作、引脚6具有固定的脉冲信号、引脚7具有连续信号。 我接近截止日期、而且我也没有太多时间从这开始(2天也要做其他事情)。 任何想法都将有所帮助。  

谢谢你。

低于我编写的代码

#include
//全局变量
unsigned int ADC[2]={0};//这将保持 FREQ 和 PWM 值
unsigned int FREQ;
unsigned int PWM;
unsigned int i;
unsigned int j;
unsigned int k;

//函数原型
void Setup_HW (void);//设置看门狗计时器、时钟、ADC 端口
void read_Acc (void);//此函数读取 ADC 并存储 FREQ 和 PWM 值
int main (空)

setup_HW ();
P1DIR |= BIT6;
P1DIR |= BIT7;
while (1)

Read_Acc ();//此函数读取 ADC 并存储 FREQ 和 PWM 值

for (k=0;k>100;k++);//交替脉冲之间的小延迟
P1OUT ^= 0x20;//引脚6输出设置为1
for (k=0;k>100;k++);//交替脉冲之间的小延迟
i=100*(FREQ-(PWM/1024)*FREQ);
for (;i=0;i--);//电位器生成的延迟
P1OUT ^= 0x20;//引脚6输出设置为0

for (k=0;k>100;k++);//交替脉冲之间的小延迟
P1OUT ^= 0x40;//引脚7输出设置为1
for (k=0;k>100;k++);//交替脉冲之间的小延迟
J=100*(FREQ-(FREQ-(PWM/1024)* FREQ));
for (;j=0;j-);//电位器生成的延迟
P1OUT ^= 0x40;//引脚7输出设置为0


// ADC10中断服务例程
#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void)

_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 CPUOFF 位

void Setup_HW (void)

WDTCTL = WDTPW + WDTHOLD;//停止 WDT
ADC10CTL1 = INCH_2 + CONSEQ_1;// A1/A0、单序列
ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x02;// 2次转换
ADC10AE0 |= 0x02;//在 P1.0和 P1.1上禁用数字 I/O

空 READ_Acc (空)

ADC10CTL0 &=~ENC;
while (ADC10CTL1 & BUSY);//如果 ADC10内核处于活动状态则等待
ADC10SA =(无符号整型) ADC;//将 ADC10SA 中的数据复制到无符号整型 ADC 数组
ADC10CTL0 |= ENC + ADC10SC;//采样和转换开始

FREQ = ADC[0];// ADC 数组0复制到变量 FREQ
PWM = ADC[1];// ADC 数组1复制到变量 PWM
_bis_SR_register (CPUOFF + GIE);// LPM0、ADC10_ISR 将强制退出

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

    >i=100*(FREQ-((PWM/1024)*FREQ);
    PWM/1024将始终为0。 您可能需要考虑此处的缩放算术、并且可能需要将中间结果扩展为"unsigned long"。
    我不太确定您要计算的是什么、但类似的东西可能会起作用:
    >i=100*(FREQ-(FREQ*(无符号长整型) PWM/1024));

    ADC10CTL1 = INCH_2 + CONSEQ_1;// A1/A0、单序列
    您可能需要这里的 INCH_1、因为这就是您要执行的操作。 (这可能会也可能不会导致明显的故障。)

    FREQ = ADC[0];// ADC 数组0复制到变量 FREQ
    PWM = ADC[1];// ADC 数组1复制到变量 PWM
    _bis_SR_register (CPUOFF + GIE);// LPM0、ADC10_ISR 将强制退出

    CPUOFF 旨在等待 ADC 完成、因此您应在之后而不是之前获取结果。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >您可能需要此处的 INCH_1、因为这就是您要执行的操作。 (这可能会也可能不会导致明显的故障。)
    我把它带回去--这几乎肯定会引起麻烦,因为你的结果数组包含 A2/A1,而不是 A1/A0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的快速回答、我用您的建议解决了问题。 很抱歉我迟到了。