智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4239|回复: 3
打印 上一主题 下一主题

K60 AD初始化代码 并求解决方案

[复制链接]

21

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
QQ
威望
1049
贡献
432
兑换币
242
注册时间
2011-3-16
在线时间
208 小时
跳转到指定楼层
1#
发表于 2012-2-18 18:54:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
求大神指点呀。

21

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
QQ
威望
1049
贡献
432
兑换币
242
注册时间
2011-3-16
在线时间
208 小时
2#
 楼主| 发表于 2012-2-18 18:57:36 | 只看该作者
还有一点是 AD参考电压有没有内部参考,没有的话外部电压怎么接 VREFH和VREFL是怎么接的呢
回复 支持 反对

使用道具 举报

59

主题

1029

帖子

0

精华

版主

有什么需帮助的?

Rank: 9Rank: 9Rank: 9

积分
15139

热心会员奖章论坛元老奖章优秀会员奖章在线王奖章

威望
11068
贡献
1411
兑换币
1728
注册时间
2011-12-18
在线时间
1330 小时
3#
发表于 2012-2-18 21:53:21 | 只看该作者
不接的话浮动是正常的,但是为什么接上为0了呢,楼主的输入信号是哪里来得,输出阻抗是多少?
回复 支持 反对

使用道具 举报

21

主题

69

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1897
QQ
威望
1049
贡献
432
兑换币
242
注册时间
2011-3-16
在线时间
208 小时
4#
 楼主| 发表于 2012-2-18 23:41:50 | 只看该作者
找到问题所在了  接地的参考是浮空的 PCB没有做好呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-21 17:25 , Processed in 0.049593 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表