我买了块开发板,DSPIC6011A,引出了好些引脚,我焊了个电位器,把RB1(VREF-)接到地上。
运行例程,如下:
/******************************************
** 功能描述: ADC测试,将AN15的采样值通过串口发送**
******************************************/
#include "p30f6011A.h"
int failmemory[40];
unsigned long int i = 0;
void adcinitial() //ADC初始化
{
TRISBbits.TRISB15 = 1;
ADPCFG = 0x7fff; //端口配置,清0为模拟引脚
ADCHSbits.CH0SA = 0xf; //输入通道选择
ADCON3bits.ADCS = 0x28; //转换时钟配置
ADCON1 = 0x00; //转换触发配置,手动模式
ADCON2 = 0x00; //参考电压AVCC,序列禁止
ADCON1bits.ADON = 1; //启动ADC模块
return;
}
void sciinitial() //SCI初始化
{
U1MODE=0x8000; //使能UART,8,N,1
U1STA=0x0400; //发送使能
//U1BRG=0X40; //9600pds@10M*4Xpll
U1BRG=25;
return;
}
int main()
{
INTCON1=0x0000;
INTCON2=0x0000; //关闭所有中断
adcinitial();
sciinitial();
while(1)
{
for (i=0;i<200000;i++){}
ADCON1bits.SAMP = 1; //启动采样
for (i=0;i<10;i++){} //采样等待
ADCON1bits.SAMP = 0; //启动转换
while (ADCON1bits.DONE==0){}
i = ADCBUF0;
U1TXREG = i>>8;
while (U1STAbits.TRMT==0){}
U1TXREG = i;
while (U1STAbits.TRMT==0){}
}
}
把AD采样的数据发到PC机上,结果最大值只能显示700多。
我看数据手册上说DSPIC30F6011A的AD是12位的,理论上可以到4095.
为什么值这么小呢?请高手指教,谢谢!
|
|