先在附件中添加这一文件,以下是几点问题:
1.整段程序中没有读到ADC12CLK选的是哪个时钟源?是怎么看出来的?通过示波器读出来的值差不多是33KHz
2.这样未设定参考电压的程序中,他有满格电压吗?我测试的时候添加了如下代码:
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned char index = 0;
switch(__even_in_range(ADC12IV,34))
{
case 0: break; // Vector 0: No interrupt
case 2: break; // Vector 2: ADC overflow
case 4: break; // Vector 4: ADC timing overflow
case 6: // Vector 6: ADC12IFG0
results[index] = ADC12MEM0;
index++;
if(results[index] > 0x7ff)
P1OUT |= BIT1;
else
P1OUT &= ~BIT1;
if (index == 8)
{
index = 0;
}
……
}
结果测试灯忽明忽暗,他是怎么判断的呢?
Thanks
Ling Zhu2:
你好,建议看一下 User's Guide ,每个寄存器都有上电默认值,如果不设置的话就会用默认值。
Triton Zhang:
1. 你这段代码有逻辑问题,
results[index] = ADC12MEM0; index++; if(results[index] > 0x7ff) P1OUT |= BIT1; else P1OUT &= ~BIT1; if (index == 8) { index = 0; }
红色标注部分,你的原意是想把ADC的值顺序放在results里, 然后判断其大小来设置P1.1。而代码中index++之后,指向的是未赋值的部分,直到8次循环之后,才能把数组填满。
2. 原例程中的注释已经说的很清楚了,
// Description:This example shows how to perform repeated conversions on a// single channel using "repeat-single-channel" mode. AVcc is used for the// reference and repeated conversions are performed on Channel A0. Each// conversion result is moved to an 8-element array called results[].
Haiqi Bian:
回复 Triton Zhang:
对!你说的有道理!就是第二点,AVcc的值是在哪里查的呢?
Triton Zhang:
回复 Haiqi Bian:
AVCC的电压是MCU的AVCC管脚的电压.
Haiqi Bian:
回复 Triton Zhang:
有没有一个确定的值?
Hardy Hu:
回复 Haiqi Bian:
你好!
你的板子上接的多少伏AVCC就是多少。
Haiqi Bian:
回复 Hardy Hu:
不好意思哦,我还不知道怎么看,接的USB,是3V吗?
Triton Zhang:
回复 Haiqi Bian:
你看你电路上MSP430的AVCC管脚接到什么的啊,一般是接到VCC上的,就和你系统的电源一样,你系统的电压是多少就是多少。
Haiqi Bian:
回复 Triton Zhang:
所有的VCC引脚都没有接,DVCC接了eZ430-EMULATION,eZ430-EMULATION连接的是USB