1. Xin chào Khách ! Ban quản trị sẽ tiến hành nâng cấp diễn đàn từ ngày 11/8/2017 Mọi truy cập có thể bị dán đoạn, mong bạn thông cảm!
    Dismiss Notice

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. Tran luong

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

    Tham gia ngày:
    11/10/12
    Bài viết:
    481
    Đã được thích:
    368
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Nghề nghiệp:
    Electronic Engineer
    Nơi ở:
    AA14A, Thất Sơn, Khu Bắc Hải, Quận 10, TPHCM
    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:

    Last edited by a moderator: 24/5/14
    22mario9x, nvh_1901, camxuc8314 others thích bài này.
  2. chitrungns

    chitrungns Học sinh phổ thông

    Tham gia ngày:
    22/2/13
    Bài viết:
    8
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    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!
     
  3. Ngô Thiện Đức

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

    Tham gia ngày:
    30/4/13
    Bài viết:
    124
    Đã được thích:
    97
    Điểm thành tích:
    28
    Giới tính:
    Nam
    Nghề nghiệp:
    Sinh viên
    ví dụ 3 kênh hi:
    Nhiều hơn bạn làm tương tự như thế.
    Chúc vui :D
     
  4. DoanhDoanh

    DoanhDoanh Học sinh trung cấp

    Tham gia ngày:
    10/1/14
    Bài viết:
    60
    Đã được thích:
    15
    Điểm thành tích:
    8
    Giới tính:
    Nam
    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!
     
  5. huunho

    huunho Thạc sỹ

    Tham gia ngày:
    16/1/14
    Bài viết:
    3,166
    Đã được thích:
    1,412
    Điểm thành tích:
    113
    Giới tính:
    Nam
    code cua bạn có vấn đề ở chỗ số lần đọc ADC rất nhiều ADC10DTC1 = 0x20; trong khi mảng của bạn chỉ có 4 phần tử
     
    yeuthichdientu thích bài này.

Chia sẻ trang này