智能车制作
标题:
K60 AD初始化代码 并求解决方案
[打印本页]
作者:
而而非无人
时间:
2012-2-18 18:54
标题:
K60 AD初始化代码 并求解决方案
void ADC_cfg()
{
//SIM_SOPT7|=SIM_SOPT7_ADC1ALTTRGEN_MASK; //触发AD转换的触发方式由寄存器选择而不是PDB
//SIM_SOPT7|=SIM_SOPT7_ADC1PRETRGSEL_MASK; //前触发选择
//SIM_SOPT7|=SIM_SOPT7_ADC1TRGSEL(4); //触发源选择PIT
//SIM_SOPT7|=SIM_SOPT7_ADC0ALTTRGEN_MASK; //触发AD转换的触发方式由寄存器选择而不是PDB
//SIM_SOPT7|=SIM_SOPT7_ADC0PRETRGSEL_MASK; //前触发选择
//SIM_SOPT7|=SIM_SOPT7_ADC0TRGSEL(4); //触发源选择PIT
enable_irq(57);
enable_irq(58);
SIM_SCGC3|=SIM_SCGC3_ADC1_MASK; //开启模块时钟
SIM_SCGC6|=SIM_SCGC6_ADC0_MASK; //开启模块时钟
SIM_SCGC5|=SIM_SCGC5_PORTE_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTE_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTE_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTE_MASK;
SIM_SCGC5|=SIM_SCGC5_PORTE_MASK;
/*
PORTB_PCR(0)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC0_SEL8 /ADC1_SEL8
PORTB_PCR(1)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC0_SEL9 /ADC1_SEL9
PORTB_PCR(2)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC0_SEL12
PORTB_PCR(3)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC0_SEL13
PORTB_PCR(4)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL10
PORTB_PCR(5)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL11
PORTB_PCR(6)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL12
PORTB_PCR(7)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL13
PORTB_PCR(11)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL15
PORTC_PCR(0)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC0_SEL14
PORTC_PCR(8)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL4B
PORTC_PCR(9)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL5B
PORTC_PCR(10)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL6B
PORTC_PCR(11)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL7B
*/
ADC0_SC2=0;
ADC0_SC3=0;
ADC0_SC2&=~ADC_SC2_ADTRG_MASK; //软件激活转换
ADC0_SC2|= ADC_SC2_REFSEL(0); //电压参考选择
ADC1_SC2&=~ADC_SC2_ADTRG_MASK; //软件激活转换
ADC1_SC2|= ADC_SC2_REFSEL(0); //电压参考选择
ADC0_SC3|= ADC_SC3_ADCO_MASK; //持续转换
/*
ADC0_SC3|= ADC_SC3_AVGE_MASK; //启动硬件平均
ADC0_SC3|= ADC_SC3_AVGS(3); //取32个值平均
*/
ADC1_SC3|= ADC_SC3_ADCO_MASK; //持续转换
/*
ADC1_SC3|= ADC_SC3_AVGE_MASK; //启动硬件平均
ADC1_SC3|= ADC_SC3_AVGS(3); //取32个值平均
*/
ADC0_CFG1|= ADC_CFG1_ADIV(0); //外部时钟分频为8
ADC0_CFG1|= ADC_CFG1_MODE(3); //16位转换
ADC0_CFG1|= ADC_CFG1_ADICLK(0); //选择输入时钟源:外部总线时钟/2
ADC1_CFG1|= ADC_CFG1_ADIV(0); //外部时钟分频为8
ADC1_CFG1|= ADC_CFG1_MODE(3); //16位转换
ADC1_CFG1|= ADC_CFG1_ADICLK(0); //选择输入时钟源:外部总线时钟/2
ADC0_CFG2&=~ADC_CFG2_MUXSEL_MASK; //选择通道复用A或B:选择为A
// ADC0_CFG2|= ADC_CFG2_ADACKEN_MASK; //使能时钟输入,无论何时时钟都有效
ADC0_CFG2&=~ADC_CFG2_ADHSC_MASK; //选择常速转换
ADC1_CFG2&=~ADC_CFG2_MUXSEL_MASK; //选择通道复用A或B:选择为A
//ADC1_CFG2|= ADC_CFG2_ADACKEN_MASK; //使能时钟输入,无论何时时钟都有效
ADC1_CFG2&=~ADC_CFG2_ADHSC_MASK; //选择常速转换
ADC0_SC1A=0;
ADC0_SC1B=0;
ADC1_SC1A=0;
ADC1_SC1B=0;
ADC0_SC1A&=~ADC_SC1_DIFF_MASK; //选择为单工输入
ADC1_SC1A&=~ADC_SC1_DIFF_MASK; //选择为单工输入
//ADC0_SC1B&=~ADC_SC1_DIFF_MASK; //选择为单工输入
//ADC1_SC1B&=~ADC_SC1_DIFF_MASK; //选择为单工输入
//ADC0_SC1B&=~ADC_SC1_DIFF_MASK; //选择为单工输入
// ADC1_SC1B&=~ADC_SC1_DIFF_MASK; //选择为单工输入
ADC0_SC1A|= ADC_SC1_ADCH(4); //AD14为输入
ADC1_SC1A|= ADC_SC1_ADCH(4); //AD14为输入
PORTE_PCR(0)|=PORT_PCR_MUX(0); //引脚复用模块选为ADC1_SEL7B
/*
ADC0_SC1A|= ADC_SC1_ADCH(14); //AD14为输入
ADC1_SC1A|= ADC_SC1_ADCH(14); //AD14为输入
ADC0_SC1B|= ADC_SC1_ADCH(14); //AD14为输入
ADC1_SC1B|= ADC_SC1_ADCH(14); //AD14为输入
*/
}
void ADC_init()
{ ADC_cfg();
ADC_Cal(ADC0_BASE_PTR);
ADC_cfg();
ADC_Cal(ADC1_BASE_PTR);
ADC_cfg();
ADC0_SC1A|= ADC_SC1_AIEN_MASK; //转换完成中断禁止使能
ADC1_SC1A|= ADC_SC1_AIEN_MASK; //转换完成中断禁止使能
//ADC0_SC1B|= ADC_SC1_AIEN_MASK; //转换完成中断禁止使能
//ADC1_SC1B|= ADC_SC1_AIEN_MASK; //转换完成中断禁止使能
}
void ADC0_ISR()
{a=ADC0_RA;}
void ADC1_ISR()
{b=ADC1_RA;}
出现的现象是: 得到的AD值有两种情况: 第一种是引脚什么也不接结果乱浮动,当引脚接上电压时,无路电压多少,AD值均为0
求大神指点呀。
作者:
而而非无人
时间:
2012-2-18 18:57
还有一点是 AD参考电压有没有内部参考,没有的话外部电压怎么接 VREFH和VREFL是怎么接的呢
作者:
洋葱圈
时间:
2012-2-18 21:53
不接的话浮动是正常的,但是为什么接上为0了呢,楼主的输入信号是哪里来得,输出阻抗是多少?
作者:
而而非无人
时间:
2012-2-18 23:41
找到问题所在了 接地的参考是浮空的 PCB没有做好呀
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2