MSP430G2553 模数转换器 ADC10

一、ADC10组成

ADC10模块是MSP430 MCU内部的一个高性能、10位的模数转换器,包含了SAR(Successive-Approximation-Register) core、采样选择控制、基准源发生器和DTC(Data Transfer Controller)。DTC功能允许采样结果直接内部存储,而不需要CPU的干预。

ADC10的框图和主要寄存器的含义,如下图所示。虽然ADC10牵扯的寄存器配置很多,但实际使用起来并不复杂。

二、相关寄存器

主要寄存器及功能有:

ADC10AEx:模拟输入使能,用于使能某个管脚的模拟输入功能

ADC10MEM:保存AD转换的结果

ADC10CTL0:

- ADC10ON:开启/关闭ADC10

- ENC:Enable conversion。几乎所有的ADC10设置都要在ENC=0时进行。

- ADC10SC:Start conversion。开始转换后会自动清零。

- SREFx:选择正负基准源

- REFOUT、REFBURST、REF2_5V、REFON:选择内部基准源及其工作方式

- ADC10SHTx:选择采集和保持的时钟周期数目

- ADC10SR:选择reference buffer drive capability,影响最大采集速率

- ADC10IE、ADC10IFG:中断使能和中断标志位

- MSC:多次采集转换设置,只用于序列(sequence)或反复(repeated)模式采样。

ADC10CTL1:

- INCHx:输入通道选择,可选择外部管脚、基准源、内部温度传感器等。

- SHSx:选择采样信号由谁触发,默认是ADC10SC位,也可以是TimerA.OUTx。

- ADC10DF:转换数据格式,直接二进制或者二补码。

- ADC10SSELx、ADC10DIVx:选择ADC10的时钟,分频比。时钟默认采用ADC10内部的专门时钟ADC10OSC,频率约在5MHz左右。

- CONSEQx:选择模式,有单通道单次(默认)、多通道单次、单通道重复、多通道重复四种。

- ADC10BUSY:标志ADC10是否采样、转换完成。

如果使用到DTC的功能,还需要操作ADC10DTC0、ADC10DTC1、ADC10SA寄存器,具体可查看MSP430x2xx Family User‘s Guide。

三、代码示例

利用ADC10,每2秒读取一次A6(P1.6)通道上的电压,通过串口打印显示。

  1 // voltage meter 2015.10.1
  2 // for MSPG2 launchpad, VCC = 3.6V; and if Vcc changes,
  3 // ref_vcc should be modified.
  4
  5 #include "io430.h"
  6
  7 #define A6 BIT6 // ADC input pin P1.6
  8 #define RXD BIT1 //P1.1
  9 #define TXD BIT2 //P1.2
 10
 11 #define IDLE 0
 12 #define BUSY 1
 13
 14 // function definitions
 15 void initADC10(void);
 16 void initTA0(void);
 17
 18 void sendByte(unsigned char);
 19 void printf(char *, ...);
 20 void initUART(void);
 21
 22 // global variables
 23 float volts = 0.0; // unit: mV
 24 float ref_vcc = 3600.0;
 25 char i = 0;
 26 char status = IDLE;
 27
 28 void main( void )
 29 {
 30   // Stop watchdog timer to prevent time out reset
 31   WDTCTL = WDTPW + WDTHOLD;
 32
 33   // DCO setup
 34   BCSCTL1 = CALBC1_1MHZ;
 35   DCOCTL = CALDCO_1MHZ;
 36
 37   // ADC10 setup
 38   initADC10();
 39
 40   // UART setup
 41   initUART();
 42
 43   // Timer0 setup
 44   initTA0();
 45
 46   __enable_interrupt();
 47
 48   LPM0;
 49
 50   while(1)
 51   {
 52       switch(status)
 53       {
 54       case IDLE:
 55           break;
 56       case BUSY:
 57           ADC10CTL0 |= ADC10SC;   // start a new conversion
 58           while ((ADC10CTL1 & ADC10BUSY) == 0x01);   // wait for conversion to end
 59           volts = ADC10MEM * ref_vcc /1023.0;
 60           printf("Voltage:  %i mV\r\n", (int)volts);
 61           status = IDLE;
 62           break;
 63       }
 64       LPM0;
 65
 66   }
 67 }
 68
 69 void initADC10(void)
 70 {
 71     // Use Vcc(3.6V)/GND for Refs, 16 x ADC10CLKs, reference buffer on, turn on ADC
 72     ADC10CTL0 = SREF_0 + ADC10SHT_2 + ADC10SR + ADC10ON;
 73
 74     // A6 input, use ADC10CLK div 1, single channel mode
 75     ADC10CTL1 =  INCH_6 + SHS_0 + ADC10SSEL_0 + ADC10DIV_0 + CONSEQ_0;
 76
 77     // ADC input on P1.6
 78     ADC10AE0 = A6;
 79
 80     // Enable conversions
 81     ADC10CTL0 |= ENC;
 82 }
 83
 84 void initTA0(void)
 85 {
 86     TA0CCR0 = 62550 - 1;
 87     TA0CCTL0 = CCIE; // enable compare interrupt
 88     TA0CTL = TASSEL_2 + ID_3 + MC_1 + TACLR;
 89     // input clock: SMCLK/8 -> 125kHz; Up to CCR0 mode
 90     // timer overflow freq: 125k/(TA0CCR0+1) -> 2Hz -> 500ms
 91     // clear and start the timer, up mode
 92 }
 93
 94 void initUART(void) {
 95     //config P1.1 RXD, P1.2 TXD
 96     P1SEL |= TXD + RXD;
 97     P1SEL2 |= TXD + RXD;
 98
 99     //reset UCA0, to be configured
100     UCA0CTL1 = UCSWRST;
101     //config
102     UCA0CTL1 |= UCSSEL_2; //SMCLK
103     UCA0BR0 = 104;
104     UCA0BR1 = 0;//1MHz baut rate = 9600
105     UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
106     //make UCA0 out of reset
107     UCA0CTL1 &= ~UCSWRST;
108 }
109
110 void sendByte(unsigned char byte )
111 {
112     while (!(IFG2&UCA0TXIFG));            // USCI_A0 TX buffer ready?
113     UCA0TXBUF = byte;                // TX -> RXed character
114 }
115
116 //interrupt service routines
117 #pragma vector = TIMER0_A0_VECTOR
118 __interrupt void CCR0_ISR(void)
119 {
120     if(++i == 4) // interval: 1/2 * 4 = 2s, freq: 0.5Hz
121     {
122         // automatic flag clearing
123         i = 0;
124         status = BUSY;
125         LPM0_EXIT;
126     }
127 }
时间: 2024-08-08 09:17:45

MSP430G2553 模数转换器 ADC10的相关文章

∑–△型模数转换器(ADC)简介

∑–△型模数转换器(ADC) 1.概述 近年来,随着超大规模集成电路制造水平的提高,Σ-Δ型模数转换器正以其分辨率高.线性度好.成本低等特点得到越来越广泛的应用.Σ-Δ型模数转换器方案早在20世纪60年代就已经有人提出,然而,直到不久前,在器件商品化生产方面,这种工艺还是行不通的.今天,随着1微米技术的成熟及更小的CMOS几何尺寸,Σ-Δ结构的模数转换器将会越来越多地出现在一些特定的应用领域中.特别是在混合信号集成电路(Mixed-signal ICs,指在单一芯片中集成有模数转换器.数模转换器

MSP430G2553电子时钟实验

用msp430g2553控制1602液晶显示时间,并可以通过按键设置时间,我做了正计时和倒计时两种模式 /********************************************************************* msp430g2553与1602引脚连接情况 * PIN1 --> 地 * PIN2 --> VCC(一定要接+5V) * PIN3 -->仿真时悬空,实际电路 2K电阻-->地 (电阻可以是500-2k的,改变电阻可以改变字符显示的亮度,

理解模数转换器的噪声、ENOB和有效分辨率

ADC的主要趋势之一是分辨率越来越高.这一趋势影响各种应用,包括工厂自动化.温度检测和数据采集.对更高分辨率的需求正促使设计者从传统的12位逐次逼近寄存器(SAR)ADC转至分辨率高达24位的Δ-ΣADC. 所有的ADC都会具有一定的噪声,这包括输入参考噪声(ADC固有噪声)和量化噪声(ADC转换时产生的噪声).诸如噪声.ENOB(有效位数).有效分辨率和无噪声分辨率等指标在很大程度上定义了ADC的实际精度.所以,理解与噪声相关的性能指标是从SAR过渡至Δ-ΣADC最困难的方面之一.由于当前对更

MSP430G2553 Launchpad 硬件I2C驱动

一.USCI I2C 驱动介绍 对于MSP430G2553,硬件I2C由外设USCI(Universal Serial Communication Interface)提供.USCI又分为USCI_A和USCI_B,其中USCI_A支持UART/IrDA/LIN/SPI通讯,USCI_B支持I2C/SPI通讯.MSP430G2553带有一个USCI_A和一个USCI_B,硬件I2C对应的管脚为P1.6(UCB0SCL)和P1.7(UCB0SDA). 由于Launchpad上P1.6连接到了LED

MSP430G2553之timerA产生PWM

#include <MSP430G2553.h> #define CPU_F ((double)12000000)//cpu frequency12000000 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) //功能:TA0.1输出PWM//说明:TA0.1由P1.2

msp430学习笔记-msp430g2553

C语言例程:http://wenku.baidu.com/link?url=49JzNSvt3m0fRuf8SWTEM8yEw1yzqr4lBR-QbX8FddcmjTVYnDhuR97wB60HNf07lJmmXbYH6Z1TtleYAE7b1LH9gfvjEGjX01oXZM7CgRO 电设工作小结之——MSP430G2553学习笔记——1 http://blog.sina.com.cn/s/blog_6cd2030b01017x71.html 电设工作小结之——MSP430G2553学习笔

SAR ADC : 逐次逼近寄存器型(SAR)模数转换器(ADC)

1.为实现二进制搜索算法,N位寄存器首先设置在中间刻度(即:100... .00,MSB设置为1).这样,DAC输出(VDAC)被设为VREF/2,VREF是提供给ADC的基准电压.然后,比较判断VIN是小于还是大于VDAC.如果VIN大于VDAC,则比较器输出逻辑高电平或1,N位寄存器的MSB保持为1.相反,如果VIN小于VDAC,则比较器输出逻辑低电平,N位寄存器的MSB清0.随后,SAR控制逻辑移至下一位,并将该位设置为高电平,进行下一次比较.这个过程一直持续到LSB.上述操作结束后,也就

Chapter7 模数转换器ADC12_A

1.概述 ADC12_A实现12路可单独设置的模拟量到数字量的转换,其分辨率为12位,转换速率可达200KSPS. 可选择转换时钟源,四种工作模式.拥有16个转换结果存储寄存器,能够发起多种中断.

ADC类型总结

1.SAR型 (逐次逼近型) 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨率ADC市场.SAR ADC的采样速率最高可达5Msps,分辨率为8位至18位.SAR架构允许高性能.低功耗ADC采用小尺寸封装,适合对尺寸要求严格的系统. 本文说明了SAR ADC的工作原理,采用二进制搜索算法,对输入信号进行转换.本文还给出了SAR ADC的核心架构,即电容式DAC和高速比较器.最后,对SAR架构与流水线.闪速型以及Σ-Δ ADC进行了对比. 引言 逐次逼近寄存器型(S