智能车制作

标题: 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