与MSP430接口的外部传感器

与MSP430接口的外部传感器,msp430,zigbee,Msp430,Zigbee,@大师,我已经将湿度传感器与引脚P2_2(套件CC2530 ZNP)上的MSP430F2274连接,并使用以下代码读取传感器的输出电压。但它似乎不起作用。我每次都会得到一个不同的值,它偏离了传感器的实际输出。我有一个单独的模块,负责时钟和计时器。该套件配备了车载灯光和温度传感器,似乎工作正常。你能看一下吗 getHumidity() { int result, volt; ADC10CTL0 &= ~ENC; ADC10CTL0 &= ~ADC10ON; // P2.2 -&

@大师,我已经将湿度传感器与引脚P2_2(套件CC2530 ZNP)上的MSP430F2274连接,并使用以下代码读取传感器的输出电压。但它似乎不起作用。我每次都会得到一个不同的值,它偏离了传感器的实际输出。我有一个单独的模块,负责时钟和计时器。该套件配备了车载灯光和温度传感器,似乎工作正常。你能看一下吗

getHumidity()
{
int result, volt;

ADC10CTL0 &= ~ENC;
ADC10CTL0 &= ~ADC10ON;

// P2.2 -> Humidity Sensor - A2

P2DIR &= ~0x04; 
P2SEL &= ~0x04; 
ADC10AE0 |= 0x04; // ADC Low Bit (A2)
ADC10AE1 = 0x00; 
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + REF2_5V;
ADC10CTL1 = INCH_2 + ADC10DIV_3; // Input Selct and Clock Div
ADC10CTL0 |= ENC + ADC10SC; // Start to sample

// __bis_SR_register(CPUOFF + GIE); // LPM0 w/ int

while(ADC10CTL1 & ADC10BUSY); 
result = ADC10MEM; // Store Result
if (result < 0) result = 0; // Correct for potential Weirdness
volt=(int)((result*2500.00)/1023.00);
ADC10AE0 = 0; // Reset Selection Bits
ADC10AE1 = 0;

ADC10CTL0 &= ~ENC;

ADC10CTL0 &= ~(REFON + ADC10ON);

return volt; // Return Result

}
get湿度()
{
int结果,伏特;
ADC10CTL0&=~ENC;
ADC10CTL0&=~ADC10ON;
//P2.2->湿度传感器-A2
P2DIR&=~0x04;
P2SEL&=~0x04;
ADC10AE0 |=0x04;//ADC低位(A2)
ADC10AE1=0x00;
ADC10CTL0=SREF_1+ADC10SHT_3+REFON+ADC10ON+ADC10IE+REF2_5V;
ADC10CTL1=INCH_2+ADC10DIV_3;//输入选择和时钟Div
ADC10CTL0 |=ENC+ADC10SC;//开始采样
//_uubis_SR_寄存器(CPUOFF+GIE);//LPM0 w/int
同时(ADC10CTL1和ADC10BUSY);
结果=ADC10MEM;//存储结果
if(result<0)result=0;//纠正潜在的奇怪之处
电压=(整数)(结果*2500.00)/1023.00);
ADC10AE0=0;//重置选择位
ADC10AE1=0;
ADC10CTL0&=~ENC;
ADC10CTL0&=~(REFN+ADC10ON);
return volt;//返回结果
}
非常感谢,


Megha

这里是MSP430G2553的一个例子,我想我应该是一样的

BCSCTL1 = CALBC1_16MHZ; // Set range
DCOCTL = CALDCO_16MHZ;
BCSCTL2 &= ~(DIVS_3); // SMCLK = DCO = 16MHz

ADC10CTL1 = INCH2 + ADC10DIV_0 + CONSEQ_0 + SHS_0; 
ADC10CTL0 = SREF_0 + ADC10SHT_2 + ADC10ON + ADC10IE;
ADC10AE0 |= BIT2;

P2SEL |= BIT2; //ADC Input pin P2.2

ADC10CTL0 &= ~ENC;
while (ADC10CTL1 & BUSY);
ADC10SA = ADC10MEM;
ADC10CTL0 |= ENC + ADC10SC; // ENC = enable conversion, ADC10SC = Sampling and conversion start

@大师,我仍然不明白为什么它不起作用。任何帮助都将不胜感激。谢谢