MSP430G2553多路ADC问题

2019-03-24 12:05发布

想用MSP430G2553做一个多路ADC,至少8个不同的ADC同时工作,不知道直接接可以实现吗?还是要用多路开关?具体实现思路应该怎样?希望大大们说得详细点,谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
wstt
2019-03-25 22:25
采样频率
  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. }
复制代码

一周热门 更多>

相关问题

    相关文章