智能车制作
标题:
AD转换
[打印本页]
作者:
wuxingcfchen
时间:
2011-4-27 21:16
标题:
AD转换
#include <hidef.h>
#include "derivative.h"
#include <mc9s12dg128.h>
#pragma LINK_INFO DERIVATIVE "mc9s12dg128"
unsigned int ad_value[4]={0}; //ad采样值
void PLL_Init(){
CLKSEL=0x00; //选择时钟源为外部晶振OSCLK
PLLCTL=0x81; //禁止锁相环PLL
REFDV=0x01; //PLLCLK=2*OSCLK*(SYNR+1)/(REFDV+1)
SYNR=0x02; //锁相环时钟=2*16*(2+1)/(1+1)=48MHz,总线时钟=PLLCLK/2=24MHz
PLLCTL=0xc6; //打开PLL电路,允许时钟监控,实时中断允许,允许看门狗
_asm(nop);
_asm(nop); //等待一段时间
while(!CRGFLG_LOCK);
CLKSEL=0xc0; //选定锁相环时钟,伪停止模式
}
void ATD_Init(){
ATD0CTL2=0xc0; //关闭模块电源,自动清除相应CCF标志位,A/D转换继续,下降沿捕捉,中断禁止
ATD0CTL3=0x20; //转换序列长度4,非先进先出,继续转换
ATD0CTL4=0x81; //8位,2个转换时钟周期,PRS=3,diveder=8,ATD=0.5*BUSCLK/(PRS+1)
ATD0CTL5=0xb0; //右对齐,无符号数,连续转换序列,多道采集,AN0开始
ATD0DIEN=0x00; //禁止数字输入缓冲
}
void AD_Getvalue(unsigned int *ad_value){
ATD0CTL5=0xb0;
while(!ATD0STAT1_CCF0);
ad_value[0]=ATD0DR0;
while(!ATD0STAT1_CCF1);
ad_value[1]=ATD0DR1;
while(!ATD0STAT1_CCF2);
ad_value[2]=ATD0DR2;
while(!ATD0STAT1_CCF3);
ad_value[3]=ATD0DR3;
}
void main(){
ATD_Init();
PLL_Init();
DDRB=0xff;
PORTB=0x00;
for(;;){
AD_Getvalue(ad_value);
}
}
这样的程序,为何采不到样?就算把线贴到传感器上了,在CW里看,寄存器的值始终都是0??
求解释
作者:
梦境梧桐
时间:
2011-5-9 11:11
寄存器配置错了 你看的资料是旧的吧
作者:
xlfd1
时间:
2011-8-16 10:49
问题应该在AD时钟配置上面
你这一句有问题:ATD0CTL4=0x81; //8位,2个转换时钟周期,PRS=3,diveder=8,ATD=0.5*BUSCLK/(PRS+1)。配置的AD时钟为3MHz,查数据手册是不大于2MHz。这个必须改过来。
作者:
NNG95
时间:
2011-11-29 09:02
这个问题解决了吗?我也想知道为什么
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2