请问一下,我用的430F2012,我想用A1和A3分别对两路模拟信号进行采样转换,然后根据所转换的对应的数据进行相关操作,有没有分时采样的简单例子? 谢谢!
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.
请问一下,我用的430F2012,我想用A1和A3分别对两路模拟信号进行采样转换,然后根据所转换的对应的数据进行相关操作,有没有分时采样的简单例子? 谢谢!
wen Zhang1,
msp430x20x2_adc10_10.c ADC10, ADC10, DTC Sample A3/A2/A1, AVcc, Single Sequence, DCO
如附件所示。
wen Zhang1,
例程中使用了ADC10的DTC功能,‘ DTC transfers conversion code to RAM 200h - 206h.’ 将数据依次存到了RAM中。
wen Zhang1,我个人觉得是可以的,就是禁止A2通道就行了。你试试吧。
ADC10AE0 |= 0x0E; // P1.3,2,1 ADC10 option select
更改这句为:
ADC10AE0 |= 0x0A; // P1.3,1 ADC10 option select
#include <msp430.h>
typedef unsigned int uint;
uint adc_sample[2]={0}; //存储ADC序列采样结果
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL1 = INCH_3 + CONSEQ_3; // A3/A1, single sequence
ADC10CTL0 = ADC10SHT_3 + MSC + ADC10ON + ADC10IE;
ADC10DTC1 = 0x02; // 2 conversions
ADC10AE0 |= BIT1 +BIT3; // P1.3,1 ADC10 option select
P1DIR |= BIT4 + BIT2; // Set P1.0 output
for(;;)
{
ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY); // Wait if ADC10 core is active
ADC10SA = (uint)adc_sample; // Data buffer start
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE); // LPM0, ADC10_ISR will force exit
}
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
if(adc_sample[0]<0x250)
P1OUT |= BIT2;
else
P1OUT &= ~BIT2;
if(adc_sample[1]<0x300)
P1OUT |= BIT4;
else
P1OUT &= ~BIT4;
}
帮我看一下呢
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
__bic_SR_register_on_exit(CPUOFF); // Clear CPUOFF bit from 0(SR)
if(adc_sample[1]<0x250)
P1OUT |= BIT2;
else
P1OUT &= ~BIT2;
if(adc_sample[0]<0x300)
P1OUT |= BIT4;
else
P1OUT &= ~BIT4;
}
刚才的不对,A1通道的数据是放在adc_sample[1]里的,是这个,也不对
它的例子中就是禁止了A0通道吧。请问数据不对时怎么个不对法?是A3,A1全不对了,还是怎么不对了?
另外
ADC10DTC1 = 0x03; // 3 conversions
改成
ADC10DTC1 = 0x02; //2 conversions
wen Zhang1,
建议你直接将A3,A1先连接Vcc或GND,看看结果对不对,或者连接一个固定的电压,看看结果对不对。如果还不对,建议试试若是将两个通道挨在一起,例如A3,A2或者A2,A1又是什么情况?如果你方便做这些实验的话,麻烦你做做,并麻烦你将结果描述一下。
我试着找了找相关的解释或参考,没找到。一般大家用sequence of channels mode,都是连着采多个通道的。
wen Zhang1,根据user guide, Sequence-of-channels 模式下,总是从INCHx开始,逐步减到A0。 故从Ax~A0依次采样应该都不会出错的。但是没有地方提到,如果通道不连续,会怎么样。还是建议按照标准用法,从Ax~A0连续采样吧,肯定不会出错。O(∩_∩)O~