toilet

Chia sẻ - Đọc ADC nhiều kênh dùng MSP430G2553

Thảo luận trong 'Họ MSP430'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. Đăng 24/5/14 #1

    Tran luong Trần Đình Lượng, Đt: 0989285187-HCM

    Số bài viết: 463
    Đã được thích: 360
    Yahoo Messenger
    Facebook Profile
    Thiết nghĩ các bạn có nhiều người đang cần cái này, do đó hôm nay tôi viết bài :
    "Chia sẻ - Đọc ADC nhiều kênh dùng MSP430G2553",

    mong rằng nó sẽ giúp ích được cho các bạn đang tìm hiểu nó. Rất mong nhận đơợc phản hồi từ phía các bạn. Chân thành cám ơn!

    Sau đây là code viết trênIAR do chính tay tôi code; Đã có chú thích trong code các bạn theo dõi từ từ nhé. Cái nào không hiểu thì replay lên đây mình trả lời.

    Mình có đính kèm Project bên dưới, bạn nào muốn chạy luôn thì tải về khỏi mất time tạo Project nhé
    Lưu ý: IAR bản mới nhất mới mở được nhé các bạn! Các bạn Đao loát từ trang :
    IAR Systems - Product Download

    Chúc TC!
    Mã:
       #include  "msp430g2553.h"
        int l=0;
        int  vr[4]; //Store adc values in this array
        void main()
        {
          WDTCTL = WDTPW + WDTHOLD;
          BCSCTL1 = CALBC1_1MHZ;
          DCOCTL = CALDCO_1MHZ;
     
          P1DIR|=0xF0;
     
          P2DIR=0XFF;
          P2SEL=0X00;
     
     
          ADC10CTL1 = INCH_3 + CONSEQ_3;            // A1/A0, repeat multi channel
          ADC10CTL0 = ADC10SHT_2 + MSC  + ADC10ON;
          ADC10AE0 = 0x0F;                          // P1.0,1 ADC option select
          ADC10DTC1 = 0x20;                         // 16 conversions
     
          TACTL|=TAIE;
          CCTL0 |= CCIE;                     // CCR0 interrupt enabled
          CCR0 = 50000;
          TACTL = TASSEL_2 + MC_1;        // SMCLK, upmode
       
          _BIS_SR( GIE);                 // Enter interrupt
          __delay_cycles(1000);
          while (1)
          {
               // Gia tri ADC doc theo ngat timer A1
             // Gia tri ADC cua 4 kenh tu P1.0 den P1.3 luu trong mang vr[]
            //P1.0 la vr[3]; P1.1 la vr[2]; P1.2 la vr[1]; ; P1.3 la vr[0];
            // Cac ban xu ly cac gia tri ADC o day toi vi du thoi nhe
            if(vr[2] > 255 ) // Neu gia tri ADC doc tu chan P1.1 < 255 <=> 255*3.3/1024 =  0.82177734375 V
              P1OUT |= BIT4;  // thi bat Led P1.4
            else            // Nguoc lai thi tat no di
               P1OUT &=~ BIT4;
         
          }
        }
        // Timer_A3 Interrupt Vector (TA0IV) handler
        #pragma vector=TIMER0_A1_VECTOR
        __interrupt void Timer0_A1(void)
        {
         switch( TA0IV )
         {
           case  2: break;                          // CCR1 not used
           case  4: break;                          // CCR2 not used
           case 10:
                    l++;
                    if(l==10)
                    {
                    l=0;
               
                    ADC10CTL0 &= ~ENC;
                    while (ADC10CTL1 & BUSY);      // Wait if ADC10 core is active
                    ADC10SA = (unsigned int)vr;      // Data buffer start
                    ADC10CTL0 |= ENC + ADC10SC;  // Sampling and conversion ready
                    _NOP();                         // space for debugger
                    _NOP();                         // space for debugger
                    }
                    break;
         }
        }

    Các file đính kèm:

    22mario9x, nvh_1901, camxuc8314 others thích bài này.
    #1
  2. Đăng 12/10/14 #2

    chitrungns Học sinh phổ thông

    Số bài viết: 8
    Đã được thích: 0
    anh có thể viết code đọc adc nhiều kênh với pic được không ạ? em đang rất cần mà trên mạng toàn có 1 kênh thôi anh ah!
    #2
  3. Đăng 12/10/14 #3

    Ngô Thiện Đức Kỹ sư

    Số bài viết: 124
    Đã được thích: 95
    ví dụ 3 kênh hi:
    Nhiều hơn bạn làm tương tự như thế.
    Chúc vui :D
    #3
  4. Đăng 5/4/15 #4

    DoanhDoanh Học sinh trung cấp

    Số bài viết: 60
    Đã được thích: 15
    Anh có thể giải thích rỏ cho em cái đoạn code phần Timer A3 được không vậy?
    Cho em hỏi là em sau khi chuyển đổi ADC xong là lưu được vào trong mảng. Em so sánh cái giá trị đó với cái ngưỡng mà mình thiết lập, nếu nó lớn hơn ngưỡng của thì truyền dử liệu đó ra module CC1101 nhưng em không biết là mình có thể gởi được dử liệu trong mãng ra trực tiếp module được không?
    Em cảm ơn!
    #4

Chia sẻ trang này