请问各位,AD值在打开锁项环时为什么不稳定?偶尔会相差很大,用的是10位精度。不使用锁项环倍频时,AD值就比较稳定。
#include <hidef.h> /* common defines and macros */
#include <mc9s12xdt256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xdt256"
unsigned int j;
void PLL_Init(void)//锁相环初始化
{
SYNR=3;
REFDV=1;
while(!(CRGFLG_LOCK)){
}//等待时钟频率稳定
CLKSEL=0x80; //PLL使能
}
//晶振频率=4MHZ
//锁相环频率PLL_CLOCK=2*晶振频率*(SYNR+1)/(REFDV+1)=16MHZ
//该处就等于4倍晶振频率
//总线频率 Busclock=PLL_CLOCK/2=8MHz
void AD_Init(void) //初始化
{
ATD0CTL2=0xC0; // AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
ATD0CTL3=0x08; //转换序列长度为1, FIFO=0, Freeze模式下继续转换
ATD0CTL4=0x63; // 10位精度, 16个ATD时钟, ATDClock=[BusClock*0.5]/[PRS+1]=1MHZ ; PRS=3,divide=8
ATD0CTL5=0xa1; //右对齐无符号,连续转换,单通道采样,通道1
ATD0DIEN=0x00; // 禁止数字输入
}
void main(void) {
PLL_Init();
AD_Init();
while(1)
{
while(!(ATD0STAT1_CCF0)) {
}//等待转换完成
j=ATD0DR0; //取值
}
}
AD的频率是1MHZ啊。我算了。我的晶振是4MHZ。
设置SYNR=3;
REFDV=1;得到BUS_CLOCK是8MHZ,
设置ATD0CTL4=0x63; divide=8后,ATD_CLOCK是1MHZ,没有超过2M啊.并且改变SMP1、SMP2也没效果。但只要关闭锁相环就稳定了。
板子是自己布的。用的是mc9s12xdt256。程序有问题吗?老大请指教,谢谢!
如果CRGFLG_LOCK=1,PLL应该就已经稳定了。不过我还没有检查总线频率是否为8M。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |