大连创客空间

 找回密码
 立即注册吧!

QQ登录

只需一步,快速开始

一键登录:

搜索
查看: 8437|回复: 44
收起左侧

【大赛原创经验贴】launchpad板子的ADC使用

  [复制链接]
发表于 2012-7-16 08:54:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多交流,硬件的世界向你敞开大门!

您需要 登录 才可以下载或查看,没有帐号?立即注册吧!

x
本帖最后由 mandide 于 2012-7-16 08:54 编辑

用了几天的launchpad的板子,参考文档写了ADC,实现的功能包括
1 通过IO端口采集外部电压
2 采集内置温度传感器的温度
个人的感觉就是配置寄存器还是得好好结合英文文档的寄存器描述和头文件的寄存器宏定义,这样比较好理解。
具体的ADC实现代码如下:
  1. /*********************************************************************
  2. * 编译器:IAR FOR MSP430 5.3
  3. * 创建人:XF
  4. * 硬件: MSP430G2553
  5. * 创建日期:2012-7-12
  6. * 功能: ADC的基本使用
  7. * 说明:
  8. *********************************************************************/
  9. #include"MSP430_adc.h"
  10. #include"lcd5110.h"
  11. #include"MSP430_ta.h"

  12. #define DTC_NUM_PER_BLOCK 8 //采样转换搬移的次数,结束后进入中断
  13. #define DTC_STARTR_ADDRESS 0x200

  14. #define ADC10_IO_SAMPLE //宏设置,温度采样

  15. unsigned int ADC10_RESL[8]={0};
  16. unsigned char ADC10_OVER_FLAG = 0;
  17. unsigned char ADC10_SAMPLE_FLAG = 0;
  18. /*********************************************************************
  19. *函数名:MSP430_ADC10_Init
  20. *函数功能:ADC10采样初始化设置
  21. *输入参数:
  22. *返回类型:
  23. *说明: 采样模式为单次重复采样,DTC将数据直接搬移至RAM中。定时器TA进行定时
  24. 置位采样标志位ADC10_SAMPLE_FLAG来定时采样
  25. *********************************************************************/
  26. void MSP430_ADC10_Init(void)
  27. {

  28. /* 配置为一般的通道采样*/
  29. #ifdef ADC10_IO_SAMPLE
  30. P1SEL |= BIT2;
  31. ADC10AE0 |=BIT2;
  32. ADC10CTL0 |= ADC10ON+MSC+ADC10SHT_1+ADC10IE;// 多次采样,参考电压2.5V
  33. ADC10CTL1 |= CONSEQ_2+ADC10SSEL_3+ADC10DIV_0+INCH_2;//重复的单通道采样,时钟源为SMCLK,输入通道为INCH_2
  34. #endif


  35. /*配置为内部温度采样*/
  36. #ifdef ADC10_TEMP_SAMPLE
  37. ADC10CTL0 = SREF_1 + ADC10SHT_1 + REFON + ADC10ON + ADC10IE+MSC;// 多次采样,参考电压2.5V
  38. ADC10CTL1 |= CONSEQ_2+ADC10DIV_3+INCH_10;//重复的单通道采样,时钟源为SMCLK,输入通道为INCH_10
  39. #endif


  40. ADC10DTC0 |= ADC10CT;
  41. ADC10DTC1 = DTC_NUM_PER_BLOCK;//采样搬运x 次才产生中断

  42. ADC10CTL0 |= ADC10SC|ENC;
  43. // while(ADC10CTL1 & ADC10BUSY); //重复模式下不需要,否则将卡死在此处
  44. ADC10SA = (unsigned int)ADC10_RESL;
  45. _EINT();
  46. }
  47. /*********************************************************************
  48. *函数名:MSP430_ADC10
  49. *函数功能:ADC10采样
  50. *输入参数:
  51. *返回类型:
  52. *说明: 定时器TA进行定时置位采样标志位ADC10_SAMPLE_FLAG来定时采样,
  53. 取平均值算出实际电压值,参考电压为3.54
  54. *********************************************************************/
  55. void MSP430_ADC10(void)
  56. {
  57. // _BIS_SR(LPM0_bits);
  58. unsigned char i = 0;
  59. float ADC10_RESLT_AVER = 0.0;
  60. if(ADC10_OVER_FLAG && ADC10_SAMPLE_FLAG)//当ADC采样结束,同时定时器的定时时间到,开始对ADC采样的数据处理
  61. {
  62. ADC10_OVER_FLAG = 0;
  63. ADC10_SAMPLE_FLAG = 0;
  64. for(i=0;i<8;i++)
  65. {
  66. ADC10_RESLT_AVER += ADC10_RESL[i];
  67. }
  68. ADC10_RESLT_AVER /= 8;

  69. #ifdef ADC10_IO_SAMPLE //用IO端口采样,采样电压端口为P1.2

  70. ADC10_RESLT_AVER = (ADC10_RESLT_AVER*0.003457);
  71. LCD_write_string(1,0,"VOL/V:");
  72. LCD_write_float(1,6,ADC10_RESLT_AVER);
  73. #endif

  74. #ifdef ADC10_TEMP_SAMPLE //温度采样,摄氏温度显示

  75. ADC10_RESLT_AVER = ((ADC10_RESLT_AVER - 673)* 423)/1024;
  76. LCD_write_string(1,0,"T/C:");
  77. LCD_write_float(1,4,ADC10_RESLT_AVER);

  78. #endif
  79. ADC10CTL0 |= ADC10SC+ENC;// 开启转换
  80. }
  81. }

  82. #pragma vector = ADC10_VECTOR
  83. __interrupt void ADC10_ISR(void)
  84. {
  85. ADC10CTL0 &= ~ADC10IFG;
  86. ADC10CTL0 &= ~ENC;//关闭ADC,读取数据
  87. ADC10_OVER_FLAG = 1;
  88. // __bic_SR_register_on_exit(CPUOFF);
  89. }
复制代码
实际效果如下:

ADC显示

ADC显示
回复

使用道具 举报

发表于 2012-7-16 10:01:34 | 显示全部楼层
这个照片,很惨
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 10:38:07 | 显示全部楼层
没办法,手机拍的,找不到拍照的设备,将就用吧
回复 支持 反对

使用道具 举报

发表于 2012-7-16 10:44:36 | 显示全部楼层
怎么显示出来的??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 10:46:48 | 显示全部楼层
液晶用的是5110
回复 支持 反对

使用道具 举报

发表于 2012-7-16 11:56:22 | 显示全部楼层
很好,受益匪浅啊……
回复 支持 反对

使用道具 举报

发表于 2012-7-17 21:03:19 | 显示全部楼层
很好
回复 支持 反对

使用道具 举报

发表于 2012-7-18 10:17:57 | 显示全部楼层
膜拜
之   
回复 支持 反对

使用道具 举报

发表于 2012-7-18 22:12:46 | 显示全部楼层
看起来有点困难
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-19 07:32:48 | 显示全部楼层
部分不懂的可以提出,我会尽力解释,一起学习。。。
回复 支持 反对

使用道具 举报

发表于 2012-7-19 08:19:31 | 显示全部楼层
本帖最后由 honghu 于 2015-4-5 09:17 编辑 <br /><br />我也在做这个 ~~·正好用上了

回复 支持 反对

使用道具 举报

发表于 2012-7-19 12:46:29 | 显示全部楼层
给力啊,不过寄存器配置还不太熟悉,有些地方看不懂。
回复 支持 反对

使用道具 举报

发表于 2012-7-19 20:13:44 | 显示全部楼层
没头文件肿么办
回复 支持 反对

使用道具 举报

发表于 2012-7-19 21:06:45 | 显示全部楼层
明白了不少。。。
回复 支持 反对

使用道具 举报

发表于 2012-7-19 21:09:15 | 显示全部楼层
这个板子IO不够,用AD扫描按键很好用
回复 支持 反对

使用道具 举报

发表于 2012-7-20 21:23:30 | 显示全部楼层
头文件哪去了?!
回复 支持 反对

使用道具 举报

发表于 2012-7-20 23:36:56 | 显示全部楼层
不错,嘻嘻,学习了
回复 支持 反对

使用道具 举报

发表于 2012-7-21 17:11:29 | 显示全部楼层
学习之...
回复 支持 反对

使用道具 举报

发表于 2012-7-21 20:21:11 | 显示全部楼层
好帖子!
回复 支持 反对

使用道具 举报

发表于 2012-7-22 13:21:43 | 显示全部楼层
求教!!我弄的一个程序可以采集内部温度,通过IO端口采集外部电压。。咋不行呢??我都没有外接电压,,显示上就自己在跑。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册吧!

本版积分规则

单片机开发者1群:235808606;会员QQ 6群:254085994; 1群:12835691(满); 2群:121061287(满); 3群:237320668(满);4群:249652919(满);5群:253578883(满);大赛1群:187926790(满),2群:231577758(满),3群:249652919(满)。 TI杯4群:58129202(满)。
载入中

QQ|手机版|小黑屋|Archiver|大连创客空间 ( 辽ICP备15004617号-2  

GMT+8, 2017-3-1 00:45 , Processed in 0.229185 second(s), 29 queries .

地址:辽宁省大连市高新园区火炬路7号17层 QQ:2401085253

Copyright © 2010-2015 创客空间(大连)科技有限公司 All Rights Reserved.

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