使用的MSP430G2553,为AD10,正常有8路输出,P1.0-P1.7为A0-A7

有七个寄存器,

参考电压可以是VCC或者内部参考电压1.5V或者2.5V

参考时钟可以是内部ADC10OSC

最高转换速率达200ksps

转换方式四种:单通道单次,序列通道单次,单通道多次,序列通道多次。多次转换时候会用到DTC功能防止数据还没被取出就被覆盖

单通道的实例程序,开启的为通道5,也就是P1.5

  1. void AD_Channel5_Config(void)
  2. {
  3. /* Configure ADC Channel */
  4. ADC10CTL1 = INCH_5 + ADC10DIV_0 ; // Channel 5, ADC10CLK
  5.  
  6. ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE + REF2_5V;
  7. //SREF_1+REFON +REF2_5V 表示使用内部参考电压 2.5v
  8. ADC10AE0 |= BIT5; //P1.5 ADC option
  9.  
  10. }

单通道单次

每次开始转换需要给寄存器置位,写了个小函数

  1. void AD_Start(void)
  2. {
  3. ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion
  4. }

开始转换

转换后的数据处理

  1. #pragma vector=ADC10_VECTOR
  2. __interrupt void ADC10_ISR (void)
  3. {
  4. int data ;
  5. float shuju,c;
  6. char a[];
  7. data = ADC10MEM;
  8. shuju = ((double)data/)*2.5;
  9. c =shuju;
  10. a[]= ((int)c%+0x30);
  11. a[]= 0x2e;
  12. a[]= ((int)(c*)%+0x30);
  13. a[]= ((int)(c*)%+0x30);
  14.  
  15. uart_send_str(a);
  16. __delay_cycles();
  17. uart_send_huiche();
  18. // uart_send_ch((char)(ADC10MEM*25/1024));
  19. }

中断处理数据

多通道的也调通了,几点说明

首先要在ADC10CTL0中开始MSC位

然后 ADC10CTL1 = CONSEQ_3 + INCH_7;     CONSEQ选择转换方式此时为多通道多次,后面的INCH位最高通道位,因为我使用4-7四个通道所以最高INCH_7

数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止。这里不做操作即可

ADC10DTC1 = 0x04;设置转换次数,这里我只转换一遍即停止,因为四个通道所以为4,转换次数=通道数*每个通道转换次数

ADC10AE0 |= BIT7+BIT6+BIT5+BIT4; 使能这四个通道

ADC10SA =(unsigned int) adc_result;   //数据传送开始地址寄存器  设置DTC的开始地址  Data buffer start

这里值得注意需要传入数组首地址。之前写的ADC10SA adc_result;编译不通过,加了前面的(unsigned int)就OK了,不明白这里。

因为我的定义unsigned int adc_result[];

总之这里改好后程序就OK了。

下面给出代码

  1. void AD_MultiChannel_4_Config(unsigned int adc_result[])
  2. {
  3. ADC10CTL1 = CONSEQ_3 + INCH_7; // 多通道多次转换, 最大转换通道为A1
  4.  
  5. ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE + REF2_5V+ REFON + SREF_1; // ADC10ON, interrupt enabl
  6.  
  7. //采样保持时间为16 x ADC10CLKs,ADC内核开,中断使能 MSC多次转换选择开
  8.  
  9. //如果MSC置位,则第一次开始转换时需要触发源触发一次,以后的转换会自动进行 中断使能
  10.  
  11. //使用DTC时,当一个块传送结束,产生中断
  12.  
  13. //数据传送控制寄存器0 ADC10DTC0设置为默认模式:单传送块模式,单块传送完停止
  14.  
  15. ADC10DTC1 = 0x04; //数据传送控制寄存器1 4 conversions 定义在每块的传送数目 一共采样4次所以单块传送4次
  16.  
  17. //以后就停止了传送 因为是两通道的,所以是每个通道采样数据传送2次
  18.  
  19. ADC10AE0 |= BIT7+BIT6+BIT5+BIT4; // P1.0 P1.1 ADC option select 使能模拟输入脚A0 A1
  20.  
  21. //不知道为什么,当P10 P11都悬空时,采样值不同,用电压表测得悬空电压不同,但是当都接上采样源的时候,
  22.  
  23. //采样是相同的
  24.  
  25. while (ADC10CTL1 & BUSY);
  26. ADC10SA =(unsigned int) adc_result; //数据传送开始地址寄存器 设置DTC的开始地址 Data buffer start
  27.  
  28. //设置数据开始传送的地址为数组adc_sample[]的首地址,因为寄存器ADC10SA和转换结果都是16位的,所以要把
  29.  
  30. //地址强制转换为16位的int或unsigned int
  31.  
  32. //应该也可以用指针直接访问DTC的存储区,还没试过
  33.  
  34. }

多通道设置

启动AD代码与前面一样

  1. #pragma vector=ADC10_VECTOR
  2. __interrupt void ADC10_ISR (void)
  3. {
  4. int data ;
  5. float shuju,c;
  6. char a[];
  7. /* data = ADC10MEM;
  8. shuju = ((double)data/1024)*2.5;
  9. c =shuju;
  10. a[0]= ((int)c%10+0x30);
  11. a[1]= 0x2e;
  12. a[2]= ((int)(c*10)%10+0x30);
  13. a[3]= ((int)(c*100)%10+0x30);
  14.  
  15. uart_send_str(a);
  16. __delay_cycles(5);
  17. uart_send_huiche();
  18. */
  19. for(data=;data<;data++)
  20. {
  21.  
  22. shuju = ((double)adc_result[data]/)*2.5;
  23. c =shuju;
  24. a[]= ((int)c%+0x30);
  25. a[]= 0x2e;
  26. a[]= ((int)(c*)%+0x30);
  27. a[]= ((int)(c*)%+0x30);
  28.  
  29. uart_send_ch((char)data+0x30);
  30. uart_send_ch(' ');
  31. uart_send_str(a);
  32. __delay_cycles();
  33. uart_send_huiche();
  34. __delay_cycles();
  35.  
  36. }

中断数据处理

这里 unsigned int adc_result[8];

测试基本OK,还需要多做一些测试,目前手头资源有限

MSP430:AD10的更多相关文章

  1. MSP430 IO 使用

    MSP430内部上拉下拉使用注意——IO口测高低电平     MSP430单片机IO口用来检测高低电平时,是不需要外部上拉下拉的,因为其内部有上拉和下拉.在用作高低电平检测时,需要开启上拉或下拉.   ...

  2. MSP430单片机的两种SPI总线实现方式

    MSP430单片机上的SPI总线的实现方式分为两种:硬件实现和软件实现. 二者的抽象层次不同,硬件实现方式下程序员只需要完成总线协议的寄存器层,即一字节(char,8位二进制)数据,而软件实现方式下程 ...

  3. MSP430单片机的位操作

    MSP430单片机属于RISC(Reduced Instruction Set Computer)型处理器.与普通的51单片机的复杂指令集相区别.普通51单片机执行一条指令最少需要12个时钟周期,而R ...

  4. zju(11)在IAR中移植ucos到msp430

    准备材料 1.在TI官网上下载430的固件库,我用的是msp430f5528的板子,下载的是F5xx_F6xx_Core_Lib 地址http://www.ti.com/tool/msp-exp430 ...

  5. MSP430精准配置高速串口波特率的方法

    引言     在实际项目大批量生产调试设备时,笔者发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常.通过示波器对多个设备的串口波特率及系统时钟频率测试, ...

  6. 【转载】芯片级拆解51、AVR、MSP430、凌阳61、PIC,5种单片机,多张显微照片

    先秀一张解剖照,放大裁剪,小米1S微距拍摄,800万像素摄像头很给力!今天等待被拆的是5个单片机芯片:(1)凌阳16位单片机SPCE061A ,这是我接触的第一个单片机,最高主频49MHz,32KB的 ...

  7. (原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)

    1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比 ...

  8. 对MSP430单片机__delay_cycles精确延时的说明及改正

    在这里, 我来讨论一下关于MSP430单片机使用__delay_cycles延时的问题. IAR for MSP430编译器提供了一个编译器内联的精确延时函数(并非真正的函数)以提供用户精确延时使用, ...

  9. msp430 问题及解决记录

    ----------------------------- 2015.4.28 问题:开发板串口显示的内容为乱码 解决:使用的是原先产品主板的15200的波特率设置,但看来或者是开发板不支持11520 ...

随机推荐

  1. PHP 加密:Password Hashing API

    PHP 5.5 之后引入 Password hashing API 用于创建和校验哈希密码,它属于内核自带,无需进行任何扩展安装和配置.它主要提供了四个函数以供使用: password_hash(): ...

  2. 【转载】Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  3. 如何在MONO 3D寻找最短路路径

    前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ...

  4. spring源码下载链接

    http://www.blogjava.net/zhyiwww/archive/2014/10/17/418809.html

  5. 类与类之间的关系UML模型图

    关联.依赖.聚合.组合.泛化.实现 类之间可能存在以下几种关系:关联(association).依赖(dependency).聚合(Aggregation,也有的称聚集).组合(Composition ...

  6. Shock wave

    ** shock wave thickness of shock wave is order of 1e-7 m why governed by Euler Equation? P334 shock ...

  7. react----父子组件之间的参数传递

    1.父组件向子组件传递参数 //父组件 import React from 'react'; import './header.css' import ComponentChild from './h ...

  8. BZOJ 2274 [Usaco2011 Feb]Generic Cow Protests

    [题解] 很容易可以写出朴素DP方程f[i]=sigma f[j] (sum[i]>=sum[j],1<=j<=i).  于是我们用权值树状数组优化即可. #include<c ...

  9. [转] angular2+highcharts+chart.js

    这里是在ionic2下使用highchairs和chart.js的简单示例chartjs部分参考http://www.jianshu.com/p/bc18132da812 1.安装hightchart ...

  10. 2.1 shuffle sort(洗牌)

    1.目的:将数组以随机的顺序重新排序,类似洗牌的过程 2.用途用于快速排序或者任何以划分为基础的排序中,目的是减少最坏可能性发生的概率. 3.想法1:给数组的每一个元素产生一个随机的数字作为键,然后使 ...