请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430G2553 工具/软件:Code Composer Studio
大家好,TI论坛,如果我提交此问题的方法不符合所有论坛规则,请原谅我,因为这是我在这里的第一篇帖子。 我的ADC引脚出现问题,无法从光敏电阻读取变化的电压(MSP430G2553)。
目前,我的代码允许我通过UART输出多个ADC值(来自WFP 1.3),在这里,我的PC可以使用一个名为CoolTerm的程序读取这些值。 现在我知道CoolTerm中的打印值不能准确地表示
与"强度"相关的任何内容,因为此代码的大部分来自从内部传感器感测温度的示例程序。 但我的主要问题是,光敏电阻器分别串联到Vcc和GND的电阻器,我无法读取
将这两个组件之间的电线馈入微处理器的WFP 1.3 ADC插针时,电压值的任何变化。 将ADC引脚直接插入Vcc显示打印值没有变化,这意味着ADC完全读取Vcc
时间,即使用光敏电阻和电阻器(10k Ω)制作分压器也是如此。 但将其插入GND会打印强度值0而不是102。 即使在未连接到任何设备的情况下触碰ADC线,也会通过UART显示更改。 所以
一切似乎都正常工作,但是,此代码中必须有一两行的ADC设置不正确,要么就是简单的光敏电阻电路不正确(Vcc --> 10k电阻-->线到ADC引脚-->光敏电阻--> GND)。
关于我的问题在哪里有什么想法? 感谢所有的帮助。
#include "msp430g2553.h"
#include <stdio.h>
未签名的短数据; //从ADC读取的数据
//全局变量
volatile unsigned int latest_adc_result;
volatile unsigned int timer_count =0;
char buffer[32];
void init_led ();
void init_UART ();
void init_timer();
void init_adc();
void start_conversion ();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止WDT
BCSCTL1 = CALC1_1MHz; //基本时钟系统的校准
DCOCTL = CALDCO_1MHz; //初
始化控制振荡器的校准//初始化外围设备
_ADC_LAD();INIT_ADC_INIT_TIMER
//启用中断并将CPU置于睡眠
_Bis_SR_register(GIE+LPM0_bits);
}//
帮助器功能
void init_LED()
{
P1DIR = 0x01 + 0x40;
}
void init_UART()
{
P1SEL = BIT1 + BIT2;// DROP 1.1 = RXD,DPOSTP1SEBL2 1.2 =
BIT2; // WFP 1.1 = RXD,WFP 1.2 = TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; //参见UCA0BR1以上的波特率分配器
=0;
UCA0MCTL = UCBRS0; //调制UCBRSx = 1
UCA0CTL1 &=~UCSWR1
;ST= UCA0MCTL初始化UCBRS0;UI** ST= UCA0ST/ ST0;UCA0 //启用USI_A0 TX中断
}
void init_timer()
{
TA0CTL |= TALCLR;// 重置计时器
TA0CTL = tassel_2 // SMCLK
+ ID_0 //输入分隔符=1
+ MC_2; //连续模式,中断禁用
TA0CCTL0 = OUTMOD_2 //比较模式
+ CCIE / IFG;中断启用
}
void init_ADC()
{
ADC10CTL1 = inch_3 //对ADC
的光敏电阻输入+ SHS_0 //使用ADC10SC位触发采样
+ ADC10DIV_3 //时钟分隔器=4
+ ADC10SSEL_3 //时钟源= SMCLK
+ CONSEQ_0; //单通道,单
个ADC10DTC1 = 1个传输/每个块
//ADC10AE0 = 0x08; //启用A4模拟输入
ADC10CTL0 = SREF_1 //参考电压为VSS和Vcc
+ ADC10SHT_3 // 64 ADC10采样和保持时间时钟(最慢)
+ REFON //参考发生器打开
+ ADC10ON //打开ADC10
+ ENC; //启用(但尚未启动)转换
}
void start_conversion ()
{
IF ((ADC10CTL1 & ADC10BUSY)==0){// 如果尚未转换
P1OUT ^= 0x40;//绿色LED
ADC10CTL0|= ADC10CTL0;
ADC10SA =(
矢量)&latest_ADC_result;
_
count // pragma {_TIME0_AVE_0 }_IMER0
如果(timer_count >1){//default为16表示1秒刷新raet
timer_count =0;
start_conversion ();
IE2 |= UCA0TXIE;}
#pragma vector = USCIAB0TX_vector
__interrupt void USCI0TX_ISR(void)
{
P1OUT |=0x01;//red \led /wed/int_intiteriment
=
0; int_int_intiment; f;/f: intiteriment p(int_int) //将文本输出到PC。包括stdio.h
while (buffer[i]!='\0'){
while (!(IFG2 & UCA0TXIFG)); // USI_A0 TX buffer ready?
UCA0TXBUF = BUFFER[I+];}
P1OUT &=~0x01;//红色LED
IE2 &=~UCA0TXIFG;
}