Thông báo

Collapse
No announcement yet.

Biến đổi ADC 2 kênh dùng MSP430

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Biến đổi ADC 2 kênh dùng MSP430

    Em đang làm đồ án vi xử lý msp430 ạ. Em đang cần biến đổi ADC10 cùng lúc cho nhiệt độ và độ ẩm hiển thị lên LCD. Mà thầy bận quá nên chỉ kịp dạy biến đổi 1 kênh thôi(1 kênh cũng dễ) . Tuy trong sách có viết nhưng đọc ko hiệu ạ. Nhờ các cao nhân trợ giúp với, em cảm ơn. Dưới là đoạn code của em. Viết nó vẫn chạy nhưng độ ẩm mà thay đổi là nhiệt độ cũng đôi theo luôn. em đã mò suốt 3 ngày rồi mà ko ra
    Starts
    13-11-2019
    Ends
    21-11-2019

  • #2

    #include "msp430g2553.h"
    #include "LCDP1.h"
    void adcnhiet(void) ///bien doi adc kenh 6 luu vao bien 'nhiet' hien thi lcd
    { float nhiet1;int nhiet;
    ADC10CTL0 &=~ ENC;
    while(ADC10CTL1 & BUSY);
    ADC10CTL1 = INCH_6 + CONSEQ_2;//kenh A6
    ADC10AE0 |= 0x40;//P1.6
    ADC10CTL0 |= ENC + ADC10SC;//bat dau chuyen doi adc
    __bis_SR_register(CPUOFF + GIE);
    nhiet1 = (float)((ADC10MEM*3.3*100)/1023);
    nhiet = (int)nhiet1/1;
    if(nhiet<30)
    P2OUT |= BIT0;
    else
    P2OUT &=~ BIT0;
    lcd_gotoxy(10,0);
    lcd_3n(nhiet);
    }
    void adcam(void) ///bien doi adc kenh 7 luu vao bien 'doam' hien thi lcd
    { float doam1; int doam;
    ADC10CTL0 &=~ ENC;
    while(ADC10CTL1 & BUSY);
    ADC10CTL1 = INCH_7 + CONSEQ_2;//kenh A7
    ADC10AE0 |= 0x80;//P1.7
    ADC10CTL0 |= ENC + ADC10SC;//bat dau chuyen doi adc
    __bis_SR_register(CPUOFF + GIE);

    lcd_gotoxy(7,1);
    doam1 = (float)(100-(ADC10MEM-400)/6);
    doam = (int)doam1/1;
    if(doam>100) doam=100;
    lcd_3n(doam);
    }
    //////////////////////////////////////
    void main( void )
    {
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    BCSCTL1 = CALBC1_1MHZ;
    DCOCTL = CALDCO_1MHZ;
    P1DIR |= BIT2 + BIT3 + BIT4 + BIT5 + BIT0 + BIT1 ;//port 1 ngo ra
    P2DIR |= BIT0;
    lcd_init();//khoi tao lcd
    lcd_clear();//xoa man hinh lcd
    lcd_gotoxy(0,0); lcd_puts("Nhiet do: ");
    lcd_gotoxy(13,0); lcd_puts("'C");
    lcd_gotoxy(0,1); lcd_puts("Do am: ");
    lcd_gotoxy(10,1); lcd_puts("%");
    //khoi tao adc10 voi thoi gian lay mau va giu mau la 16*ADC10clock, chon dien the tham chieu noi avcc=3.3V, bat ADC10, cho phep ngat ADC10
    ADC10CTL0 = ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
    __delay_cycles(30);

    while(1)
    {
    adcnhiet();
    adcam();
    __delay_cycles(1000000);
    }
    }
    //chuong trinh con phuc vu ngat
    #pragma vector=ADC10_VECTOR
    __interrupt void ADC10_ISR(void)
    {__bic_SR_register_on_exit(CPUOFF);}

    Comment


    • #3
      lcd_init là khởi tạo lcd
      lcd_clear là xóa màn hình
      lcd_gotoxy là chọn vị trí con trỏ tại (cột,hàng)
      lcd_3n là xuất ra số nguyen 3 chữ số

      Comment


      • #4
        em dùng msp430g2553, cảm biến LM35, cảm biến độ ẩm đất(chữ trung quốc)

        Comment

        Về tác giả

        Collapse

        lalauta Khó bỏ cuộc Tìm hiểu thêm về lalauta

        Bài viết mới nhất

        Collapse

        Đang tải...
        X