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/MSP430FG4618:从3轴加速计 adxl335读取 ADC。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/889170/ccs-msp430fg4618-adc-reading-from-3-axis-accelerometer-adxl335

器件型号:MSP430FG4618

工具/软件:Code Composer Studio

尊敬的: 

我在使用 ADC 从3轴加速计 adxl335读取数据时遇到问题。 我只能同时正确读取 x-y 或 x-y。 我无法同时正确读取 x-y-z。 是否有人会检查我的 ADC 配置是否正确? 谢谢!

void adc_setup (void){ int i =0; P6DIR &=~(BIT3 | BIT4 | BIT4); //将 P6.3、P6.4和 P6.7配置为输入引脚 P6SEL |= BIT3 | BIT4 | BIT7; //将 P6.3、P6.4和 P6.7配置为模拟引脚 /****** ADCCore 配置***** * /*复位 REFMSTR 以使能 ADC12对基准电压的控制*/ ADC12CTL0 &=~ENC; /* *初始化控制寄存器 ADC12CTL0 * ADC12ON = 1 =>打开 ADC12 * STH0x = 9 =>采样保持时间需要384个时钟周期 * MSC = 1 => ADC12多采样转换 * ADC12CTL0 = ADC12ON | SHT0_9 | MSC; //配置 ADC 转换器 /* *初始化控制寄存器 ADC12CTL1 * SHP = 1 =>采样/保持脉冲模式 * CONSEQx = 1 =>转换序列模式:通道序列 * ADC12CTL1 = SHP | CONSEQ_1; //使用采样计时器、单序列 /****** 通道配置***** * ADC12MCTL0 = INCH_3; // ADC A3引脚-粘上 X 轴 ADC12MCTL1 = INCH_4; // ADC A4引脚-粘着 Y 轴 ADC12MCTL2 = INCH_7 | EOS; // ADC A7引脚-粘接 Z 轴 // EOS - ADC12MCTL2上的序列结束 ADC12IE |= 0x04; //在 BIT2 (EOS ADC 通道)上启用 ADC12IFG.1 对于(I = 0;I < 0x3600;I++); //基准启动延迟 ADC12CTL0 |= ENC; //启用转换 } void main (void){ WDTCTL = WDTPW +WDTHOLD; //停止 WDT TimerA_setup(); //设置发送 ADC 数据的计时器 adc_setup(); //设置 ADC UART_Utilize(); //为 RS-232设置 UART _EINT(); while (1){ _bis_SR_register (LPM0_Bits + GIE);//输入 LPM0 } } #pragma vector = ADC12_vector __interrupt void ADC12ISR (void){ ADCXval = ADC12MEM0; //移动结果,IFG 被清除 ADCYval = ADC12MEM1; ADCZval = ADC12MEM2; _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 } #pragma vector = TIMERRA0_VECTOR __INTERRUPT void timerA_ISR (){ ADC12CTL0 |= ADC12SC; //每0.25秒开始转换 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//退出 LPM0 }

最棒的

Tony

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

    您如何知道您仅对部分通道进行采样? 您是在 main 中还是在其中一个 ISR 中断点? 您是否有一些已知的值需要查找? (平放在桌子上通常是一个好的开始。)

    我 建议您不要在 timerA_ISR 中执行唤醒。 这将在 ADC 实际完成之前唤醒 main、main 实际上对该事件没有兴趣。

    TimerA 是如何设置的? 如果周期少于大约230us、它将在运行时尝试重新启动 ADC。

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

    您好、Tony、

    我们强烈建议此论坛的用户不要在第一时间发布他们的代码。 更有效的方法是使用伪代码或一些说明来说明这一点。

    不确定您是否可以在此处更详细地描述您的应用流程。

    非常感谢。

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

    250us 计时器大约足以满足标称 ADC10OSC 频率、但这不是晶体振荡器、可以慢得多。 对于这三个转换、最坏的情况是大约320us。

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

    > 我们强烈建议此论坛的用户不要先发布他们的代码。  

    我不知道这条规则。 这是新产品吗?

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

    您好、Bruce、

    我不会说这是一条"规则"、而是说、在最初发布代码时、如果没有对整个申请流程的详细描述、这不是一种建议方法。

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

    您好、邱

    感谢您的告知。 抱歉。 我是新的!  

    最棒的

    Tony

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

    您好、Bruce、

    感谢您的信息! 我现在一切都很好!

    最棒的

    Tony

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

    您好、Tony、

    无需道歉。 欢迎来到该论坛、并享受 E2E 论坛、MSP430和其他产品的旅程。

    此致、

    哈里

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

    我很高兴它成功了。 这是什么?

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

    我谨不同意关于不发布代码以及症状的建议。 我认为原始帖子的陈述正确(即使代码格式器对描述进行了阐释)。

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

    您好、Bruce、

    原始代码实际上可以正常工作。 我认为问题来自硬件和连接! 不过、您的信息非常有用! 谢谢!

    最棒的

    Tony