[giúp] Đọc Adc Hiển thị nhiệt độ lên LCD

Thảo luận trong 'MSP430' bắt đầu bởi nguyen binh nhan, 31 Tháng mười 2014.

Users Viewing Thread (Users: 0, Guests: 0)

Lượt xem: 440

  1. nguyen binh nhan

    nguyen binh nhan New Member

    Chào anh chị, em có làm mạch temp hiễn lên LCD dùng LM35 với MSP430G2452.
    Em code phía dưới, nhưng sao khi test mạch thật thì thấy temp nó nhảy tới nhảy lui hoài không ổn định.
    em nghĩ do tần số hay nguyên nhân gì nữa đây!
    giúp em!

    Các file đính kèm:

    • temp.txt
      Kích thước:
      3.8 KB
      Đọc:
      1
  2. taingay123321

    taingay123321 Thành Viên Nổi bật

    phần đó bạn phải xử lý chứ mcu có tội tình gì đâu.
    nó làm đúng việc bạn giao mà.
    Đọc và hiển thị ok rồi.

    => Cách 1: cộng dồn nhiều giá trị sau đó chia trung bình rồi mới hiển thị giá trị trung bình ra LCD.
    => Cách 2: đơn giản hơn thì thêm hàm delay vào. ví dụ: delay_ms(500) trong hàm main.
    an.dxuan thích bài này.
  3. an.dxuan

    an.dxuan Admin

    Chuẩn nhất là bạn nên dùng cả 2 cách của bạn taingay123321 nhé :D .Vừa lấy trung bình ,vừa delay trong main .như thế thì sẽ ổn định hơn :D
    nguyen binh nhan thích bài này.
  4. nguyen binh nhan

    nguyen binh nhan New Member

    đây code của em đây, vửa cộng dồn vừa delay khoảng 1s lun, mà vẫn bị:
    Mã:
    #include "msp430G2452.h"
    #define    LCM_DIR              P1DIR
    #define    LCM_OUT              P1OUT
    #define    LCM_PIN_RS            BIT2          // P2.0
    #define    LCM_PIN_EN            BIT3          // P2.1
    #define    LCM_PIN_D7            BIT7          // P2.7
    #define    LCM_PIN_D6            BIT6          // P2.6
    #define    LCM_PIN_D5            BIT5          // P2.5
    #define    LCM_PIN_D4            BIT4          // P2.4
    
    
    #define    LCM_PIN_MASK  ((LCM_PIN_RS | LCM_PIN_EN | LCM_PIN_D7 | LCM_PIN_D6 | LCM_PIN_D5 | LCM_PIN_D4))
    
    #define    FALSE                0
    #define    TRUE                  1
    
    //ham tao do tre
    void waitlcd(volatile unsigned int x)
    {
    volatile unsigned int i;
    for (x ;x>1;x--)
    {
    for (int i=0;i<=110;i++);
    }
    }
    
    
    void PulseLcm()
    {
        LCM_OUT &= ~LCM_PIN_EN;
        __delay_cycles(200);
        LCM_OUT |= LCM_PIN_EN;
        __delay_cycles(200);
        LCM_OUT &= (~LCM_PIN_EN);
        __delay_cycles(200);
    }
    
    
    void SendByte(char ByteToSend, int IsData)
    {
        LCM_OUT &= (~LCM_PIN_MASK);
        LCM_OUT |= (ByteToSend & 0xF0);
    
        if (IsData == TRUE)
        {
            LCM_OUT |= LCM_PIN_RS;
        }
        else
        {
            LCM_OUT &= ~LCM_PIN_RS;
        }
    
        PulseLcm();
    
        LCM_OUT &= (~LCM_PIN_MASK);
        LCM_OUT |= ((ByteToSend & 0x0F) << 4);
    
        if (IsData == TRUE)
        {
            LCM_OUT |= LCM_PIN_RS;
        }
        else
        {
            LCM_OUT &= ~LCM_PIN_RS;
        }
    
        PulseLcm();
    }
    
    
    void LcmSetCursorPosition(char Row, char Col)
    {
        char address;
    
        if (Row == 0)
        {
            address = 0;
        }
        else
        {
            address = 0x40;
        }
    
        address |= Col;
    
        SendByte(0x80 | address, FALSE);
    }
    
    
    void ClearLcmScreen()
    {
            SendByte(0x01, FALSE);
        SendByte(0x02, FALSE);
    }
    
    
    void InitializeLcm(void)
    {
        LCM_DIR |= LCM_PIN_MASK;
        LCM_OUT &= ~(LCM_PIN_MASK);
        __delay_cycles(100000);
        LCM_OUT &= ~LCM_PIN_RS;
        LCM_OUT &= ~LCM_PIN_EN;
    
        LCM_OUT = 0x20;
        PulseLcm();
        SendByte(0x28, FALSE);
        SendByte(0x0E, FALSE);
        SendByte(0x06, FALSE);
        SendByte(0x0C, FALSE);
    }
    
    
    void PrintStr(char *Text)
    {
        char *c;
    
        c = Text;
    
        while ((c != 0) && (*c != 0))
        {
            SendByte(*c, TRUE);
            c++;
        }
    }
    
    void main(void)
    {
    int nguyen,le;
    char chuoi[6];
      WDTCTL = WDTPW + WDTHOLD;                // Stop WDT
      BCSCTL1 = CALBC1_1MHZ; // tao DCO 1MHz
      DCOCTL = CALDCO_1MHZ;      //dao dong noi;
       
      P1DIR &= ~BIT0;        //CHON KENH A0
      P1DIR |= BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7;
      InitializeLcm();
      ClearLcmScreen();
      //Config ADC10 - CHUYEN DOI ADC
      ADC10CTL0 |= SREF_1 + ADC10SHT_3 + REFON + REF2_5V + ADC10ON + ADC10IE ;   
      /*
      Config:
      - SREF_1: Chon he quy chieu: VR+ = VREF+ , VR- = VSS.
      - REFON: CHON NGUON QUY CHIEU NOI.
      - REF2_5V: CHON NGUON QUY CHIEU VR+ = 2,5V.
      - ADC10ON: BAT CHE DO ADC.
      - ADC10IE: CHO PHEP NGAT ADC10
      - ADC10SHT_1: Chon toc do lay mau 8 x ADC10CLKs.
      */
      ADC10CTL1 |= INCH_0 + ADC10DIV_0 ;
      ADC10AE0 |= BIT0;
     
      //Chuong trinh vong lap chinh chuyen doi ADC.
      for(;;){
       
        float s=0;
        for(int i=0;i<=9;i++){
         
          ADC10CTL0 |= ENC + ADC10SC;            // Sampling and conversion start
          float temp =((ADC10MEM*250)/1024);
          s += temp;
        }
        float value = s/10; 
        nguyen = (int)(value/1);          //lay ra so nguyen cua template
        le = (int)((value - nguyen)*100);
        chuoi[0] = nguyen/10 + 48;            //hang chuc
        chuoi[1] = nguyen%10 + 48;       
        chuoi[2] = 46;    //hien thi dau cham
        chuoi[3] = le/10 + 48;
        chuoi[4] = le%10 + 48;
        chuoi[5] = 67;
       
        LcmSetCursorPosition(0,0);
        PrintStr(chuoi);
        __delay_cycles(1000000);
    
     
      }//for
    } //main
     
     
    
  5. Le Thanh trieu thích bài này.
  6. songyenisei

    songyenisei New Member

    Win2888 là nhà cái lớn nhất ĐÔNG NAM Á là một trong những tập đoàn tổ chức cá cược tọa lạc tại SHANGHAI RESORT thuộc tỉnh SVAYRIENG, biên giới VIỆT NAM – CAMPUCHIA . thể thao , baccarat. Black Dragon Tiger, gà chọi xổ số , đánh lô đề , và trò chơi casino và trực tuyến khác.


    Hướng dẫn đăng ký tài khoản Win2888 online Win2888 đang phát triển mạnh mẽ trên các quốc gia như PHILIPPINES – THÁI LAN – INDONESIA – VIỆT NAM – CAMPUCHIA v.v. có măt tại VIỆT NAM từ năm 2008 sau thử nghiệm và phát triển win2888 đã chiếm lĩnh được thị trường giải trí online quốc gia này với vốn đầu tư hàng tỷ USD.



    Link Đăng Ký Win2888 >> Tại Đây



    [​IMG]



    http://win2888.betno1.net/2017/07/dang-ky-win2888.html
  7. songparana

    songparana New Member

Chia sẻ trang này

Lên trên