cho thuê máy chủ server
Page 1 of 9 123 ... LastLast
Results 1 to 10 of 83
  1. #1
    Senior Member
    Join Date
    Dec 2009
    Location
    LUNGWHA UNIVERSITY OF SCIENCE AND TECHNOLOGY
    Posts
    409

    Default Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    Khối mạch của chúng ta gồm 3 phần:
    +''IN'':LM35-dùng để đo nhiệt độ và xuất ra giá trị điện áp tương ứng
    +"Xử Lư":PIC16F877A-dùng để chuyển đổi giá trị điện áp được xuất ra từ LM35 bằng cách dùng bộ ADC của PIC.
    +Hiển thị:LCD và LED 7 đoạn.
    Để đo nhiệt độ ta dùng bộ ADC trong PIC16F877A,ḿnh sẽ tŕnh bày cụ thể dưới đây:

    I.ADC trong CCS:

    Những sự lựa chọn này cho phép người sử dụng định h́nh thể và sử dụng bộ chuyển đổi từ tín hiệu tương tự sang tín hiệu số.Chúng chỉ có sẵn trên thiết bị với phần cứng ADC.Sự lựa chọn cho những chức năng và chỉ dẫn thay đổi phụ thuộc vào con chip và đă được liệt kê trong phần header file của thiết bị.Trên 1 vài thiết bị có 2 bộ ADC độc lập. đối với những chip này bộ ADC thứ 2 được định h́nh thể để sử dụng chức năng cài đặt ADC thứ cấp(Ví dụ setup_ADC2)
    Những chức năng có liên quan:
    Setup_adc(mode):Cài đặt chế độ ADC
    Cú pháp: setup_adc (mode);
    setup_adc2(mode);
    Thông số:mode-chế độ tín hiệu tương tự sang tín hiệu số.Sự lựa chọn hợp lư thay đổi phụ thuộc vào thiết bị.Xem những thiết bị có tập tin .h cho tất cả sự lựa chọn.Một vài sự lựa chọn tiêu biểu bao gồm:
    ADC_OFF
    ADC_CLOCK_INTERNAL
    ADC_CLOCK_DIV_32
    Trả về:Không được định nghĩa
    Chức năng: Định h́nh thể chuyển từ tín hiệu tương tự sang tín hiệu số
    Tiện lợi:Chỉ có trong những thiết bị có bộ chuyển đổi tín hiệu tương tự sang tín hiệu số
    Yêu cầu:Những hằng số đă được định nghĩa trong tập tin .h của thiết bị
    Ví dụ: setup_adc_ports( ALL_ANALOG );
    setup_adc(ADC_CLOCK_INTERNAL );
    set_adc_channel( 0 );
    value = read_adc();
    setup_adc( ADC_OFF );
    Ví dụ những tập tin: ex_admm.c
    Xem thêm: setup_adc_ports(), set_adc_channel(), read_adc(), #device, ADC overview,xem tập tin header của thiết bị đă được chọn
    setup_adc_ports(value):Thiết lập những chân ADC có sẵn để chuyển từ tín hiệu tương tự sang tín hiệu số
    Cú pháp: setup_adc_ports (value)
    Thông số: value -Một hằng số được định nghĩa trong tập tin .h của thiết bị
    Trả về:Không được định nghĩa
    Chức năng:Cài đặt những chân ADC là tín hiệu tương tự,tín hiệu số hoặc một sự kết hợp và điện áp tham chiếu để sử dụng khi tính tóan giá trị ADC.Sự kết hợp các chân tín hiệu tương tự đă được cho phép thay đổi phụ thuộc vào con chip và được định nghĩa bằng cách sử dụng từng bit OR để ghép những chân đă được chọn cùng với nhau.Kiểm tra thiết bị bao gồm tập tin các chân và điện áp tham chiếu đă được sắp đặt trong danh sách ḥan chỉnh.Hằng số ALL_ANALOG và NO_ANALOG là hợp lư cho tất cả con chip.Một vài ví dụ khác định nghĩa chân là :
    ANALOG_RA3_REF- Kích họat tất cả các chân tín hiệu tương tự và chân RA3 là điện áp tham chiếu
    RA0_RA1_RA3_ANALOG- Chỉ có chân RA0,RA1,RA3 là tín hiệu tương tự
    Tiện lợi:Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital
    Yêu cầu: Những hằng số đă được định nghĩa trong tập tin .h của thiết bị
    Ví dụ:

    //Tất cả các chân analog
    setup_adc_ports( ALL_ANALOG );
    Chân A0,A1,A3 là analog,và tất cả các chân c̣n lại là digital. Điện áp +5V được sử dụng như điện áp tham chiếu
    setup_adc_ports( RA0_RA1_RA3_ANALOG );
    //Chân A0,A1 là analog,chân A3 được sử dụng cho điện áp tham chiếu và tất cả các chân c̣n lại là digital
    setup_adc_ports( A0_RA1_ANALOGRA3_REF );
    Ví dụ những tập tin: ex_admm.c
    Xem them: setup_adc(), read_adc(), set_adc_channel(), ADC overview
    set_adc_channel(channel):Chỉ rơ những kênh dung để sử dụng cho việc gọi Analog/Digital
    Cú pháp: set_adc_channel (chan)
    Thông số:Chân là số kênh được chọn.Số chân bắt đầu tại 0 và đă được đặt nhăn trong datasheet AN0,AN1
    Trả về:Không được định nghĩa
    Chức năng:Chỉ rơ những kênh được sử dụng cho việc gọi lệnh READ_ADC().Hăy biết rằng bạn phải chờ 1 khỏang thờii gian ngắn sau khi thay đổi kênh trước khi bạn có thể nhận được giá trị đọc hợp lư.Thời gian thay đổi phụ thuộc vào trở kháng của nguồn đầu vào.Khỏang 10us nói chung là tốt cho hầu hết các ứng dụng.Bạn không cần thay đổi kênh trước mỗi lần đọc nếu kênh không thay đổi
    Tiện lợi:Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital
    Yêu cầu:Không cần thứ ǵ
    Ví dụ: set_adc_channel(2);
    delay_us(10);
    value = read_adc();
    Ví dụ những tập tin: ex_admm.c
    Xem thêm: read_adc(), setup_adc(), setup_adc_ports(), ADC overview
    read_adc(mode):Bắt đầu quá tŕnh chuyển đổi và đọc giá trị.Chế độ này có thể cũng điều khiển chức năng.
    Cú pháp: value = read_adc ([mode])
    Thông số: mode là một thông số không bắt buộc.Nếu được sử dụng giá trị có thể:
    ADC_START_AND_READ (Liên tục đọc,và đây là mặc định )
    ADC_START_ONLY (Bắt đầu quá tŕnh chuyển đổi và trả về giá trị)
    ADC_READ_ONLY (Đọc kết quả chuyển đổi cuối cùng )
    Trả về:8 bit hoặc 16 bit số nguyên phụ thuộc vào #DEVICE ADC= directive (directive:lời chỉ dẫn,8 hoặc 16).
    Chức năng:
    Đây là chức năng đọc giá trị số từ bộ chuyển đổi tín hiệu tương tự sang tín hiệu số.Gọi lệnh setup_adc(), setup_adc_ports() and set_adc_channel() nên được làm vài lần trước khi chức năng này được gọi.Dăy giá trị trả về phụ thuộc vào số lượng bit tbộ chuyển đổi Analog/Digital trong con chip và sự sắp đặt trong DEVICE ADC= directive như sau:
    #DEVICE 8 bit 10 bit 11 bit 12 bit 16 bit
    ADC=8 00-FF 00-FF 00-FF 00-FF 00-FF
    ADC=10 x 0-3FF X 0-3FF x
    ADC=11 x x 0-7FF x x
    ADC=16 0-FF00 0-FFC0 0-FFEO 0-FFF0 0-FFFF
    Lưu ư:X không được định nghĩa
    Tiện lợi:Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital
    Yêu cầu: Những chân cố định đă được định nghĩa trong tập tin .h của thiết bị
    Ví dụ: setup_adc( ADC_CLOCK_INTERNAL );
    setup_adc_ports( ALL_ANALOG );
    set_adc_channel(1);
    while ( input(PIN_B0)
    {
    delay_ms( 5000 );
    value = read_adc();
    printf("A/D value = %2x\n\r", value);
    }
    read_adc(ADC_START_ONLY);
    sleep();
    value=read_adc(ADC_READ_ONLY);
    Ví dụ tập tin: ex_admm.c, ex_14kad.c
    Xem thêm : setup_adc(), set_adc_channel(), setup_adc_ports(), #DEVICE, ADC overview
    ADC_done():Trả về 1 nếu bộ chuyển đổi đă ḥan thành việc chuyển đổi của nó
    Tiền xử lư có liên quan:
    #DEVICE ADC=xx : Định h́nh thể read_adc rồi trả về kính thước.Ví dụ, sử dụng 1 con PIC với 10 bit A/D bạn có thể sử dụng 8 hoặc 10 cho xx- 8 sẽ trả về bye có trọng số cao nhất,10 sẽ trả về ṭan bộ giá trị đọc A/D 10 bit
    Các ngắt có liên quan:
    INT_AD: Ngắt xảy ra khi quá tŕnh chuyển đổi đă ḥan tất
    INT_ADOF: Ngắt xảy ra khi quá tŕnh chuyển đổi trong thời gian chờ
    Các tập tin có liên quan:
    Không có,tất cả chức năng được cài đặt sẵn
    Các thông số getenv() có liên quan:
    ADC_CHANNELS : Số kênh Analog/Digital
    ADC_RESOLUTION : Số lượng bit trả về bởi lệnh read_adc
    II.LM35



    Đây là cảm biến nhiệt độ
    LM35 có 3 chân : 2 chân cấp nguồn và 1 chân xuất điện áp ra tùy theo nhiệt độ
    Nhiệt độ tăng 1C th́ điện áp xuất ra ở chân out của LM35 tăng 10mV

    III. LCD

    Đây là LCD 2 hàng, mỗi hang 16 kư tự
    Để sử dụng LCD , ta hăy đọc file “LCD.C” trong thư viện Driver của CCS. Ở đó CCS hướng dẫn cách ta đi dây cho các chân của LCD, đồng thời CCS viết sẵn cho ta các hàm thao tác cho LCD:

    Cách nối dây:
    // As defined in the following structure the pin connection is as follows:
    // D0 enable
    // D1 rs
    // D2 rw
    // D4 D4
    // D5 D5
    // D6 D6
    // D7 D7
    // LCD pins D0-D3 are not used and PIC D3 is not used.

    Các hàm thông dụng

    lcd_init() : là hàm phải có để báo rằng sẽ sử dụng LCD
    lcd_putc( char c) : hàm để xuất kư tự ra LCD
    lcd_gotoxy( BYTE x, BYTE y) : hàm cho phép con trỏ nhảy tới vị trí (x,y) trên LCD


    Mô phỏng ví dụ dùng LCD bằng Proteus:
    Code :

    #define <16f877a.h>
    #include "16F877A.h"
    #device *=16 adc=8
    //#device PIC16F877A *=16
    #use delay(clock=20000000)

    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
    #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7, bits=9)
    #include <LCD.C>

    void main ()
    {
    lcd_init();
    lcd_putc("Do an ky thuat");
    }
    Kết quả:

    IV.Mở rộng:Hiển thị tiếng Việt trên LCD

    Datasheet LCD viết bằng tiếng Việt
    Click here to download
    Tài liệu hướng dẫn viết tiếng Việt lên LCD
    Click here to download
    V.Sơ đồ nguyên lư:
    Đây là sơ đồ hiển thị nhiệt độ ra LCD:


    Đây là sơ đồ hiển thị nhiệt độ ra LED 7 đoạn:

    VI.Sơ đồ mạch in PCB:


    VII.Code đo nhiệt độ dùng LM35+PIC16F877A+hiển thị tiếng Việt trên LCD
    Code:
    #define<16f877a.h>
    #include"16f877A.h"
    #device adc=8
    #use delay(clock=12000000)
    #FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
    #include<lcd.c>
    int8 read;
    int8 ketqua[10];
    int8 dem[10];
    byte const CGRAM[24]={  0X0E,0X00,0X0E,0X11,0X1F,0X10,0X0E,0X04,
                            0X01,0X03,0X01,0X07,0X09,0X09,0X07,0X00,
                            0X0E,0X00,0X0E,0X11,0X11,0X11,0X0E,0x04,};                 
                      
    byte const LED[10]={    0b00000011,
                            0b10011111,
                            0b00100101,
                            0b00001101,
                            0b10011001,
                            0b01001001,
                            0b01000001,
                            0b00011111,
                            0b00000001,
                            0b00001001,
                      };
    
    
    void main()
    {
       int8 i,j,max,tam;
       int8 solan;
       set_tris_a(0xFF);
       set_tris_d(0x00);
       set_tris_b(0x00);
       set_tris_c(0x00);
       
       lcd_init(); 
       lcd_send_byte(0,0x2D);// viet cau lenh lcd 4 bit , 2 hang , 5*10dots
       lcd_send_byte(0,0x40); // viet cau lenh , ra lenh cho lcd chi toi cgram
       //lcd_send_byte(0,0x07);// Dich sang trai khi co hanh dong ghi vao CGRAM
     
      for(i=0;i<24;i++)
            lcd_send_byte(1,CGRAM[I]);// viet du lieu vao cgram co dia chi la 0x00 ++
       while(TRUE)
       {
          setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
          setup_adc(ADC_CLOCK_INTERNAL);
          set_adc_channel(0);
          
          for(i=0;i<10;i++)
          {
             if(adc_done())
             {
                ketqua[i]=read_adc();
                delay_us(20);
             }
          }
          setup_adc( ADC_OFF ); //Sau khi lay 10 gia tri xong thi tat ADC
          for(i=0;i<10;i++)
          {
             dem[i]=0;
             for(j=0;j<9;j++)
             {
                   if(ketqua[i]==ketqua[j])
                      dem[i]++;
             }
          }
          tam=dem[0];
          max=ketqua[0];
          for(i=0;i<9;i++)
          {
             if(tam<=dem[i+1])
             {
                tam=dem[i+1];
                max=ketqua[i+1];
             }
          }
             lcd_gotoxy(1,1);
             max=max/0.51;
             printf(lcd_putc,"Nhiet do max: %u",max);
             delay_us(20);
    //ting trung binh         
             tam=0;
             for(i=0;i<10;i++)
             {
                tam=tam+ketqua[i];
             }
             max=tam/10/0.51;         
             LCD_GOTOXY(3,0);
             LCD_SEND_BYTE(1,'N');
             LCD_SEND_BYTE(1,'h');
             LCD_SEND_BYTE(1,'i');
             LCD_SEND_BYTE(1,0x00);
             LCD_SEND_BYTE(1,'t');
             LCD_SEND_BYTE(1,' ');
             LCD_SEND_BYTE(1,0x01);
             LCD_SEND_BYTE(1,0x02);
             LCD_SEND_BYTE(1,' ');
             LCD_SEND_BYTE(1,'T');
             LCD_SEND_BYTE(1,'B');
             LCD_SEND_BYTE(1,':');
             printf(lcd_putc,"%u",max); 
             
             
             lcd_send_byte(0,0x1c);
             delay_ms(1000);
        }      
             
      }
    VIII.Code đo nhiệt độ dùng LM35+PIC16F877A+Hiển thị LED 7 đoạn

    Code:
    #define<16f877a.h>
    #include"16f877A.h"
    #device adc=8
    #use delay(clock=12000000)
    #FUSES NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
    int8 read;
    byte const LED[10]={    0b00001001,//0
                            0b00111111,//1
                            0b10010001,//2
                            0b00010011,//3
                            0b00100111,//4
                            0b01000011,//5
                            0b01000001,//6
                            0b00011111,//7
                            0b00000000,//8
                            0b00000010,//9
                      };
    
    
    void main()
    {
       int8 chuc,donvi;
       int1 done;
       int8 i;
       set_tris_a(0xFF);
       set_tris_d(0x00);
       set_tris_b(0x00);
       set_tris_c(0x00);
       setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
       setup_adc(ADC_CLOCK_INTERNAL);
       set_adc_channel(0);
       while(TRUE)
       {   
          setup_adc(ADC_START_ONLY);
          done=adc_done();
          while(!done)
          { 
             done=adc_done();
          }
          delay_ms(100);
          READ=READ_ADC();
         
          for(i=0;i=200;i++)
             {
             chuc=read/10;
             donvi=read%10;
             output_low(pin_c0);
             output_b(led[chuc]);
             delay_ms(10);
             output_high(pin_c0);
             output_low(pin_c1);
             output_b(led[donvi]);
             delay_ms(10);
             output_high(pin_c1);
             }
       }
    }

    IX.Thành quả thực tế:





    Đục lỗ câu dây (do nhầm lẫn chân linh kiện giữa datasheet trên mạng và linh kiện ngoài thực tế)



    THE END
    CHÚC CÁC BẠN HỌC TỐT
    Được sửa bởi trongtuan_1109; vào lúc 10:36 PM ngày 10-01-2011.

  2. #2

    Unhappy Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    anh cho em hỏi, e lấy code mà anh cho rồi dùng mplab build all để tạo file hex ma no báo lỗi.a thu lai roi chỉ giúp e với. tại e chưa biết viết code nên chưa biết đúng sai thế nào cả. Thanks!

  3. #3
    Senior Member
    Join Date
    Dec 2009
    Location
    LUNGWHA UNIVERSITY OF SCIENCE AND TECHNOLOGY
    Posts
    409

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    Quote Originally Posted by sweetloveqk View Post
    anh cho em hỏi, e lấy code mà anh cho rồi dùng mplab build all để tạo file hex ma no báo lỗi.a thu lai roi chỉ giúp e với. tại e chưa biết viết code nên chưa biết đúng sai thế nào cả. Thanks!
    MPLAB xài ngôn ngữ assembly mà em

  4. #4

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    MPLAB có hỗ trợ ngôn ngữ C a ah. cài chương tŕnh CCS xong là có tool hỗ trợ ngôn ngữ C trong MPLAB. ḿnh viết bằng ngôn ngữ C ở đây luôn.

  5. #5
    Senior Member
    Join Date
    Dec 2009
    Location
    LUNGWHA UNIVERSITY OF SCIENCE AND TECHNOLOGY
    Posts
    409

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    Quote Originally Posted by sweetloveqk View Post
    MPLAB có hỗ trợ ngôn ngữ C a ah. cài chương tŕnh CCS xong là có tool hỗ trợ ngôn ngữ C trong MPLAB. ḿnh viết bằng ngôn ngữ C ở đây luôn.
    Anh viết code này trong CCS mạch chạy ok,lần đầu a nghe MBLAB viết C được,vậy thôi để cao thủ khác giúp em vậy

  6. #6

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    anh có thể gửi h́nh sơ đồ kết nối khác qua cho em được không, h́nh đó em hong thấy ǵ hết á, địa chỉ email của em nè lephuthuan.dt@gmail.com thanks anh nhiều

  7. #7

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    anh gửi file mô phỏng của led 7 đoạn á, em nh́n h́nh hong thấy rỏ , mở mắt hết cở rùi đó

  8. #8

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    Quote Originally Posted by trongtuan_1109 View Post
    Anh viết code này trong CCS mạch chạy ok,lần đầu a nghe MBLAB viết C được,vậy thôi để cao thủ khác giúp em vậy
    Mplab viết C thật ra ccs nó dc nhúng vào mplab thui

  9. #9
    Junior Member
    Join Date
    May 2010
    Location
    Hoc vien ky thuat quan su
    Posts
    5

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    bạn ơi, cho ḿnh hỏi, khi ḿnh ném code bạn vô CCS để biên dịch, nó báo 2 lỗi: undefined indetifier "RA0_RA1_ANALOG_RA3_REF" ở ḍng lệnh setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
    và undefined indetifier: "adc_done"

    bạn có thể giải thích hộ ḿnh không? cảm ơn bạn

  10. #10
    Senior Member
    Join Date
    Dec 2009
    Location
    LUNGWHA UNIVERSITY OF SCIENCE AND TECHNOLOGY
    Posts
    409

    Default Re: Đo nhiệt độ dùng LM35 + PIC16F877A + Hiển thị tiếng Việt trên LCD và LED 7 đoạn

    Quote Originally Posted by hungvipdk5 View Post
    bạn ơi, cho ḿnh hỏi, khi ḿnh ném code bạn vô CCS để biên dịch, nó báo 2 lỗi: undefined indetifier "RA0_RA1_ANALOG_RA3_REF" ở ḍng lệnh setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
    và undefined indetifier: "adc_done"

    bạn có thể giải thích hộ ḿnh không? cảm ơn bạn
    Lạ vậy?Ḿnh build ra file hex ngon lành mà? ADC_DONE bạn có dấu "( )" này chưa?
    Bạn vào phần help của CCS gơ ADC sẽ thấy hàm adc_done( ) và setup_adc_ports ( ... );

 

 
Page 1 of 9 123 ... LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Chủ đề tương tự

  1. [Hướng dẫn] Đo nhiệt độ (PIC16F877A - DS18b20-quét led-Giao tiếp máy tính dùng VB2008 )
    By ict in forum Vi xử lư, vi điều khiển
    Replies: 14
    Last Post: 18-03-2013, 08:59 PM
  2. [Xin giúp] Giúp đỡ về đo Nhiệt độ hai kênh dùng LM35 và At89c51
    By minhkhanh131 in forum Vi xử lư, vi điều khiển
    Replies: 2
    Last Post: 12-04-2012, 12:50 AM
  3. [Thảo luận] Đo nhiệt độ dùng LM35
    By trongtuan_1109 in forum Cảm biến – Đo lường – Điều khiển
    Replies: 41
    Last Post: 17-03-2012, 09:51 AM
  4. [Thảo luận] Lịch vạn niên dùng PIC16F877A+DS1307
    By trongtuan_1109 in forum Vi xử lư, vi điều khiển
    Replies: 18
    Last Post: 08-06-2011, 11:15 PM
  5. [Xin giúp] Mạch đo nhiệt độ dùng 89C51 hiển thị trên led 7 đoạn
    By quyettv08 in forum Cảm biến – Đo lường – Điều khiển
    Replies: 1
    Last Post: 21-01-2011, 06:28 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Máy đo đường huyết | Máy đo huyết áp | Máy chủ ảo | Thuê server | Dịch vụ máy chủ | Mua hosting |