3726|9

23

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430G2553多路ADC问题 [复制链接]

想用MSP430G2553做一个多路ADC,至少8个不同的ADC同时工作,不知道直接接可以实现吗?还是要用多路开关?具体实现思路应该怎样?希望大大们说得详细点,谢谢!

最新回复

采样频率//****************************************************************************** //  MSP430G2x33/G2x53 Demo - ADC10, Sample A1, 1.5V, TA1 Trig, Set P1.0 if > 0.5V // //  Description: A1 is sampled 16/second (ACLK/2048) with reference to 1.5V. //  Timer_A is run in upmode and TA1 is used to automatically trigger //  ADC10 conversion, TA0 defines the period. Internal oscillator times sample //  (16x) and conversion (13x). Inside ADC10_ISR if A1 > 0.5Vcc, P1.0 is set, //  else reset. Normal mode is LPM3. //  //* An external watch crystal on XIN XOUT is required for ACLK *// // //               MSP430G2x33/G2x53 //            ----------------- //        /|\|              XIN|- //         | |                 | 32kHz //         --|RST          XOUT|- //           |                 | //       >---|P1.1/A1     P1.0 |--> LED // //  D. Dang //  Texas Instruments Inc. //  December 2010 //   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10 //****************************************************************************** #include  "msp430g2553.h" void main(void) {   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT   ADC10CTL1 = SHS_1 + CONSEQ_2 + INCH_1;    // TA1 trigger sample start   ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;   __enable_interrupt();                     // Enable interrupts.   TACCR0 = 30;                              // Delay to allow Ref to settle   TACCTL0 |= CCIE;                          // Compare-mode interrupt.   TACTL = TASSEL_2 + MC_1;                  // TACLK = SMCLK, Up mode.   LPM0;                                     // Wait for delay.   TACCTL0 &= ~CCIE;                         // Disable timer Interrupt   __disable_interrupt();   ADC10CTL0 |= ENC;                         // ADC10 Enable   ADC10AE0 |= 0x02;                         // P1.1 ADC10 option select   P1DIR |= 0x01;                            // Set P1.0 output   TACCR0 = 2048-1;                          // PWM Period   TACCTL1 = OUTMOD_3;                       // TACCR1 set/reset   TACCR1 = 2047;                            // TACCR1 PWM Duty Cycle   TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode   __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3 w/ interrupts } // ADC10 interrupt service routine #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR(void) {   if (ADC10MEM < 0x155)                     // ADC10MEM = A1 > 0.5V?     P1OUT &= ~0x01;                         // Clear P1.0 LED off   else     P1OUT |= 0x01;                          // Set P1.0 LED on } #pragma vector=TIMER0_A0_VECTOR __interrupt void ta0_isr(void) {   TACTL = 0;   LPM0_EXIT;                                // Exit LPM0 on return } 复制代码  详情 回复 发表于 2013-11-8 12:26

点评

多路开关也不是同时的  详情 回复 发表于 2013-11-7 09:30
 
点赞 关注

回复
举报

5015

帖子

12

TA的资源

裸片初长成(初级)

沙发
 
1、2553有8个通道的ADC10
2、内部只有1个ADC10的内核,所以8个通道可以顺序采样的方式,8个通道有先后之分,不是绝对的同时
3、采样率要求多少?要求不高8个通道可以看做是“同时”

点评

1秒内分别采样一次就行,看DATASHEET没看懂怎么实现,能说下具体怎么设置吗,工作过程什么的,谢谢!  详情 回复 发表于 2013-11-7 21:07
 
个人签名《MCU工程师炼成记》作者之一
 

回复

4008

帖子

0

TA的资源

版主

板凳
 

回复 楼主华叶春秋 的帖子

多路开关也不是同时的

点评

好吧,我需要的是类似动态扫描的伪同时:)  详情 回复 发表于 2013-11-7 21:09
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发wstt 的帖子

1秒内分别采样一次就行,看DATASHEET没看懂怎么实现,能说下具体怎么设置吗,工作过程什么的,谢谢!
 
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 板凳huo_hu 的帖子

好吧,我需要的是类似动态扫描的伪同时

点评

【整合】MSP430全系列官方示例代码汇总 https://bbs.eeworld.com.cn/thread-331550-1-1.html  详情 回复 发表于 2013-11-8 12:20
那绝对够用了  详情 回复 发表于 2013-11-8 12:20
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

6
 

回复 5楼华叶春秋 的帖子

那绝对够用了
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

7
 

回复 5楼华叶春秋 的帖子

【整合】MSP430全系列官方示例代码汇总
https://bbs.eeworld.com.cn/thread-331550-1-1.html

点评

谢谢!  详情 回复 发表于 2013-11-9 10:57
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

8
 
  1. //******************************************************************************
  2. //  MSP430G2x33/G2x53 Demo - ADC10, DTC Sample A2-0, AVcc, Single Sequence, DCO
  3. //
  4. //  Description: Sample A3/A2/A1 as single sequence with reference to AVcc.
  5. //  Software sets ADC10SC to trigger sample sequence. In Mainloop MSP430 waits
  6. //  in LPM0 to save power until ADC10 conversion complete, ADC10_ISR(DTC) will
  7. //  force exit from any LPMx in Mainloop on reti. ADC10_ISR will force any LPMx
  8. //  exit. ADC10 internal oscillator times sample period (16x) and conversion
  9. //  (13x). DTC transfers conversion code to RAM 200h - 206h. P1.0 set at start
  10. //  of conversion burst, reset on completion.
  11. //
  12. //               MSP430G2x33/G2x53
  13. //            -----------------
  14. //        /|\|              XIN|-
  15. //         | |                 |
  16. //         --|RST          XOUT|-
  17. //           |                 |
  18. //       >---|P1.3/A3      P1.0|-->LED
  19. //       >---|P1.2/A2          |
  20. //       >---|P1.1/A1          |
  21. //
  22. //  D. Dang
  23. //  Texas Instruments Inc.
  24. //  December 2010
  25. //   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
  26. //******************************************************************************
  27. #include  "msp430g2553.h"

  28. void main(void)
  29. {
  30.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  31.   ADC10CTL1 = INCH_3 + CONSEQ_1;            // A3/A2/A1, single sequence
  32.   ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;
  33.   ADC10DTC1 = 0x03;                         // 3 conversions
  34.   ADC10AE0 |= 0x0E;                         // P1.3,2,1 ADC10 option select
  35.   P1DIR |= 0x01;                            // Set P1.0 output

  36.   for (;;)
  37.   {
  38.     ADC10CTL0 &= ~ENC;
  39.     while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
  40.     ADC10SA = 0x200;                        // Data buffer start
  41.     P1OUT |= 0x01;                          // P1.0 = 1
  42.     ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
  43.     __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
  44.     P1OUT &= ~0x01;                         // P1.0 = 0
  45.   }
  46. }

  47. // ADC10 interrupt service routine
  48. #pragma vector=ADC10_VECTOR
  49. __interrupt void ADC10_ISR(void)
  50. {
  51.   __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
  52. }
复制代码
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

9
 
采样频率
  1. //******************************************************************************
  2. //  MSP430G2x33/G2x53 Demo - ADC10, Sample A1, 1.5V, TA1 Trig, Set P1.0 if > 0.5V
  3. //
  4. //  Description: A1 is sampled 16/second (ACLK/2048) with reference to 1.5V.
  5. //  Timer_A is run in upmode and TA1 is used to automatically trigger
  6. //  ADC10 conversion, TA0 defines the period. Internal oscillator times sample
  7. //  (16x) and conversion (13x). Inside ADC10_ISR if A1 > 0.5Vcc, P1.0 is set,
  8. //  else reset. Normal mode is LPM3.
  9. //  //* An external watch crystal on XIN XOUT is required for ACLK *//
  10. //
  11. //               MSP430G2x33/G2x53
  12. //            -----------------
  13. //        /|\|              XIN|-
  14. //         | |                 | 32kHz
  15. //         --|RST          XOUT|-
  16. //           |                 |
  17. //       >---|P1.1/A1     P1.0 |--> LED
  18. //
  19. //  D. Dang
  20. //  Texas Instruments Inc.
  21. //  December 2010
  22. //   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
  23. //******************************************************************************
  24. #include  "msp430g2553.h"

  25. void main(void)
  26. {
  27.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  28.   ADC10CTL1 = SHS_1 + CONSEQ_2 + INCH_1;    // TA1 trigger sample start
  29.   ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
  30.   __enable_interrupt();                     // Enable interrupts.
  31.   TACCR0 = 30;                              // Delay to allow Ref to settle
  32.   TACCTL0 |= CCIE;                          // Compare-mode interrupt.
  33.   TACTL = TASSEL_2 + MC_1;                  // TACLK = SMCLK, Up mode.
  34.   LPM0;                                     // Wait for delay.
  35.   TACCTL0 &= ~CCIE;                         // Disable timer Interrupt
  36.   __disable_interrupt();
  37.   ADC10CTL0 |= ENC;                         // ADC10 Enable
  38.   ADC10AE0 |= 0x02;                         // P1.1 ADC10 option select
  39.   P1DIR |= 0x01;                            // Set P1.0 output
  40.   TACCR0 = 2048-1;                          // PWM Period
  41.   TACCTL1 = OUTMOD_3;                       // TACCR1 set/reset
  42.   TACCR1 = 2047;                            // TACCR1 PWM Duty Cycle
  43.   TACTL = TASSEL_1 + MC_1;                  // ACLK, up mode

  44.   __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3 w/ interrupts
  45. }

  46. // ADC10 interrupt service routine
  47. #pragma vector=ADC10_VECTOR
  48. __interrupt void ADC10_ISR(void)
  49. {
  50.   if (ADC10MEM < 0x155)                     // ADC10MEM = A1 > 0.5V?
  51.     P1OUT &= ~0x01;                         // Clear P1.0 LED off
  52.   else
  53.     P1OUT |= 0x01;                          // Set P1.0 LED on
  54. }

  55. #pragma vector=TIMER0_A0_VECTOR
  56. __interrupt void ta0_isr(void)
  57. {
  58.   TACTL = 0;
  59.   LPM0_EXIT;                                // Exit LPM0 on return
  60. }
复制代码
 
个人签名《MCU工程师炼成记》作者之一
 
 

回复

23

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 7楼wstt 的帖子

谢谢!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表