Ghép nối dsPic30f4011 với cảm biến nhiệt độ LM35

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • Soi Dien
    Nhập môn đệ tử
    • Nov 2014
    • 3

    #1

    Ghép nối dsPic30f4011 với cảm biến nhiệt độ LM35

    Chào các bạn, mình đang làm 1 đề tài ghép nối dsPic30f4011 với cảm biến LM35, chuyển đổi ADC và hiển thị giá trị nhiệt độ lên LCD. Mình đã viết 1 chương trình nhưng kết quả hiển thị lên LCD bị sai,nó hiển thị 'Nhiet Do: 500", mọi người cho mình ý kiến, mình nghĩ có lẽ do chương trình chuyển đổi ADC mình viết sai.
    Đầu ra của cảm biến mình nối vào chân AN0(RB0)

    #include<p30f4011.h>

    _FOSC(CSW_FSCM_OFF & HS); // Set up for Crystal
    _FWDT(WDT_OFF); // Turn off the Watch-Dog Timer
    _FBORPOR(MCLR_EN & PWRT_OFF); // Enable MCLR reset pin and turn off the power-up timers

    #define port_lcd4 LATBbits.LATB5
    #define port_lcd5 LATBbits.LATB6
    #define port_lcd6 LATBbits.LATB7
    #define port_lcd7 LATBbits.LATB8
    #define rs LATBbits.LATB1
    #define rw LATBbits.LATB3
    #define e LATBbits.LATB4


    unsigned int adc_data,adc_data1;
    unsigned char adc_tram,adc_chuc,adc_donvi,adc_thapphan;

    void delay_ms(int delay)
    {
    int i,j;
    for(i=0;i<delay;i++)
    for(j=0;j<250;j++)
    {;}
    }

    void lcd_send4bits(unsigned char byte)
    {

    port_lcd4=(byte>>4)&1;
    port_lcd5=(byte>>5)&1;
    port_lcd6=(byte>>6)&1;
    port_lcd7=(byte>>7)&1;
    e=1;
    delay_ms(100);
    e=0;


    port_lcd4=byte&1;
    port_lcd5=(byte>>1)&1;
    port_lcd6=(byte>>2)&1;
    port_lcd7=(byte>>3)&1;
    e=1;
    delay_ms(100);
    e=0;


    }

    void lcd_init()
    {
    rs=0;
    rw=0;
    lcd_send4bits(0x28);
    lcd_send4bits(0x06);
    lcd_send4bits(0x0c);
    lcd_send4bits(0x01);
    lcd_send4bits(0x02);


    }

    void lcd_cmd(unsigned char cmd)
    {
    rs=0;
    rw=0;
    e=1;
    lcd_send4bits(cmd);


    }

    void lcd_data(unsigned char data)
    {
    rs=1;
    rw=0;
    lcd_send4bits(data);
    delay_ms(1000);
    }

    void khoitao_adc()
    {
    ADPCFG=0xFFFF;
    ADPCFGbits.PCFG0=0;//tao chan RB0 lam cong vao
    ADCON3bits.ADCS=63;//////////////T =22Tcy
    ADCON1bits.SSRC=0;// Clearing SAMP bit ends sampling and starts conversion
    ADCON1bits.ASAM = 0;//no auto-lau mau
    ADCHSbits.CH0SA=2;
    ADCON2bits.ALTS=0;
    ADCON2bits.VCFG=3;
    ADCON1bits.FORM=0;
    ADCHS = 0x0000; //ADCHS Register
    //Set up A/D Channel Select Register to convert AN0 on Mux A
    //input of CH0 and CH1 S/H amplifiers

    ADCSSL = 0x0000;//Channel Scanning is disabled. All bits left to their default state
    ADCON1bits.ADON=1;//start


    }
    void start_adc()
    {
    ADCON1bits.SAMP=1;
    delay_ms(10);
    ADCON1bits.SAMP = 0; // start Converting
    while(!ADCON1bits.DONE);
    { adc_data1=ADCBUF0;
    adc_data=adc_data1/2.046;





    adc_tram=adc_data/100;
    adc_data=adc_data-adc_tram*100;
    adc_chuc=adc_data/10;
    adc_data=adc_data-adc_chuc*10;
    adc_donvi=adc_data;
    }

    }
    void main()
    {
    TRISBbits.TRISB0=1;
    TRISBbits.TRISB1=0;
    TRISBbits.TRISB3=0;
    TRISBbits.TRISB4=0;
    TRISBbits.TRISB5=0;
    TRISBbits.TRISB6=0;
    TRISBbits.TRISB7=0;
    TRISBbits.TRISB8=0;


    lcd_init();
    khoitao_adc();
    start_adc();

    lcd_data('N');
    lcd_data('h');
    lcd_data('i');
    lcd_data('e');
    lcd_data('t');
    lcd_data(' ');
    lcd_data('D');
    lcd_data('o');
    lcd_data(':');
    lcd_data(adc_tram+'0');
    lcd_data(adc_chuc+'0');
    lcd_data(adc_donvi+'0');
    }
  • ttai
    Đệ tử 1 túi
    • Dec 2005
    • 12

    #2
    Hình như cái main thiếu vòng lặp while hoặc vòng lặp tương tự để vđk loop.
    Bạn xem lại coi đúng không?
    Chỗ hiển thị nhiệt độ, bạn để trăm+"0" là sao nhỉ?

    Comment

    • ttai
      Đệ tử 1 túi
      • Dec 2005
      • 12

      #3
      Hình như cái main thiếu vòng lặp while hoặc vòng lặp tương tự để vđk loop.
      Bạn xem lại coi đúng không?
      Chỗ hiển thị nhiệt độ, bạn để trăm+"0" là sao nhỉ?
      Thêm: chỗ này dấu ";" là sai rồi thì phải
      while(!ADCON1bits.DONE);

      Comment

      • ttai
        Đệ tử 1 túi
        • Dec 2005
        • 12

        #4
        Giờ mới coi lại, chủ đề từ năm ngoái tới giờ không ai thèm trả lời. Tội chủ thớt quá không biết đã fix được chưa hay bỏ cuộc.
        Diễn đàn picvietnam thành cái chùa bà Đanh rồi à hehe.
        Thôi em lượn.

        Comment

        Working...