1. THÔNG BÁO TUYỂN ADMIN DIỄN ĐÀN 2013
    Tìm kiếm nhà trọ - Ở ghép
    THÔNG BÁO BÁN ÁO SPKT.NET CHO THÀNH VIÊN DIỄN ĐÀN


    HÃY TÌM KIẾM Ở ĐÂY TRƯỚC KHI ĐẶT CÂU HỎI
    {xen:phrase loading}

cảm biến nhiệt độ lm35

Thảo luận trong 'Đo lường-Cảm biến' bắt đầu bởi lanol, 10 Tháng ba 2012.

  1. lanol New Member

    Số bài viết: 22
    Đã được thích: 0
    Điểm thành tích: 1
    có ai đã từng làm cảm biến nhiệt với lm35 + adc +eprom chưa! cho e hỏi 1 tí...
    e đang làm đồ án KTS..
    Rong rủi trên mạng chỉ thấy dung vxl thôi
  2. hoantien Member

    Số bài viết: 359
    Đã được thích: 1
    Điểm thành tích: 18
    chắc là bạn chuyển đổi nhiệt độ sang số rồi dùng eprom hiển thị ra led 7 đoạn phải không. bạn có gì thì cứ hỏi, kêu hỏi tí biết đâu mà lần!!!
  3. lanol New Member

    Số bài viết: 22
    Đã được thích: 0
    Điểm thành tích: 1
    thế này...mình thấy trong sách tt kts có 1 mạch cbn thế này. LM35->ADC0808 --> EPROM 2764->LED..nhưng mình k rõ chức năng của eprom trong mạch này để làm gì?
    Có phải để lưu giá trị ở ngõ ra adc k? nếu phải thì làm sao để truy xuất nội dung lưu trong eprom để đưa ra led
    hồi còn học KTS..mình k để ý đến eprom. nên bây h khổ quá
  4. lydainghiep Moderator

    Số bài viết: 149
    Đã được thích: 0
    Điểm thành tích: 16
    Eprom 2764 đã quá "cổ" rồi và rất khó lập trình, trong một số máy của TQ sử dụng do nó rẻ tiền, tốt hơn nên xài e-eproom AT28C64
    Bạn cứ nghĩ đơn giản thế này: eeprom là một con IC nhớ có 8 ngõ ra (ngõ ra 8bit) bạn sẽ lập trình các giá trị cho ngõ ra này theo ý muốn, nhưng để gọi được các giá trị ngõ ra này bạn phải đặt tên cho nó (gọi là định địa chỉ) dựa và các ngõ địa chỉ A0..A12, để lập trình cho con eeprom này bạn có thể lập trình bằng tay (xem trang 4 datasheet) hoặc mua mạch nạp cho nó.
  5. kimvothan New Member

    Số bài viết: 11
    Đã được thích: 0
    Điểm thành tích: 0
    có ai giúp mình đoạn code để xuất giá trị biến đo được của cảm biến ra lcd không? mình chỉ xuất được ký tự không hà, còn giá trị biến thì chưa ra! giúp mình với!
  6. lydainghiep Moderator

    Số bài viết: 149
    Đã được thích: 0
    Điểm thành tích: 16
    Ý bạn là dùng vđk phải ko? và bạn dùng vđk nào? trình biên dịch nào? LCD loại nào và bạn dùng thư viện nào cho LCD? Hỏi rõ ràng thì mới có người giúp, nếu bạn muốn người khác giúp nhanh thì tốt nhất là up cả cái code nữa để ng giúp gõ ngay vào cái code luôn, mang về từ từ nghiệm sau.Bạn lưu ý: có 1 kết quả nhưng sẽ có hàng ngàn cách đến được đó, cụ thể, trên đời ko phải có duy nhất 1 loại vđk và càng ko phải chỉ có duy nhất 1 trình biên dịch nhé.
  7. kimvothan New Member

    Số bài viết: 11
    Đã được thích: 0
    Điểm thành tích: 0
    cảm ơn bạn đã nhắc nhở. mình đan dùng con pic 16f877a xuất ra lcd 16x2 kiểu 4bit. đoạn code của mình đây:
    Mã:
    #include <16F877A.h>
    #include <math.h>
    // Dinh nghia cac thong so.
    // Cau hinh su dung dao dong noi 4MHz
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=4000000)
    // Khai bao ham.
    void lcd_init(void);             // Ham dung de khoi dong C.LCD.
    byte lcd_read_byte(void);         // Ham xu ly doc thong tin (dang 8 bit) tu thong tin dang 4 bit tu C.LCD.
    byte lcd_read_nibble(void);         // Ham doc thong tin (dang 4 bit / nibble) tu C.LCD.
    void lcd_send_byte(byte address, byte n);   // Ham gui thong tin (byte) toi C.LCD tai dia chi (address).
    void lcd_send_nibble(byte n);      // Ham gui thong tin (dang 4 bit / nibble) sang C.LCD.
    void lcd_gotoxy(byte x, byte y);   // Ham thiet lap vi tri ghi tren C.LCD.
    char lcd_getc(byte x, byte y);      // Ham tra ve ky tu tai vi tri (x,y) tren C.LCD.
    void lcd_putc(char c);            // Ham se hien thi ky tu c tai vi tri ke tiep tren C.LCD.
    void convert_bcd(int8 v);
    // Khai bao bien.
    // Khai bao du lieu hien thi.
    // Khai bao du lieu hien thi.
    CONST char dat_line1[] = "KHOANG CACH DO :";   // Noi dung can hien thi - Hang 1.
    //CONST char dat_line2[] = "Designed by: PQT";   // Noi dung can hien thi - Hang 2.
    // Chuong trinh chinh.
    void main (void) 
    {
    // Khai bao bien.
    int8 x,v,s;
    int16 t;
    unsigned int8 i;
    // Chuong trinh.
    lcd_init();      // Khoi dong C.LCD 2x16.
    for(i=1;i<=16;i++)
       {
       lcd_gotoxy(i,1);         // Xac dinh toa do hien thi cho hang 1.
       lcd_putc(dat_line1[i-1]);   // Lay ky tu hien thi tu chuoi 1 dua len C.LCD.
      // lcd_gotoxy(i,2);         // Xac dinh toa do hien thi cho hang 2.
       //lcd_putc(dat_line2[i-1]);   // Lay ky tu hien thi tu chuoi 2 dua len C.LCD.
       }
    //convert_bcd(v);
    //-- khai bao timer-capture ----
    setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
    setup_ccp1(CCP_CAPTURE_RE);  
    enable_interrupts(INT_CCP1); 
    // Setup interrupt on falling edgeenable_interrupts(GLOBAL);
    set_tris_b(0);
    set_tris_c(0);
    while(true)
    { 
    //---- 10uS cho trgger ----  
    output_high(pin_c1);
    delay_us(10);
    output_low(pin_c1);
    //-- Wait for senser output to go high ----
    }
    if(input(pin_c2)==0)
    {
    t = 0;
    set_timer1(0); 
    lcd_gotoxy(2,7);
    lcd_putc("KHONG");
    }
    else
    {
    t = CCP_1; 
    //doc thoi gian khi co xung cao
    v = t/58;
    convert_bcd(v);
    //time = get_timer1();
    lcd_gotoxy(2,8);
    lcd_putc("CO"); 
    //time = time/CONVERT_TO_MICROSECONDS; 
    //chuyen doi ra mcrogiay
    } 
    ///// hien thi len gia tri LCD//////
    lcd_gotoxy(2,7);
    lcd_getc(nghin);
    lcd_gotoxy(2,8);
    lcd_getc(tram);
    lcd_gotoxy(2,9);
    lcd_getc(chuc);  
    lcd_gotoxy(2,10);
    lcd_getc(donvi);
    }
    // Dinh nghia cac thong so.
    typedef struct  
          {               // Cau truc nay duoc ap dung len cho mot cong I/O de ho tro viec
           boolean rs;        // truy xuat den cac chan cua C.LCD.
           boolean rw;         // 
           boolean enable;     // Cac bit nay duoc xac dinh vi tri tu thap den cao.
           boolean unused;     // RS se dong vai tro la chan LSB cua cong I/O do.
           int     data:4;     // 
          } LCD_PIN_MAP;      // Cong I/O duoc su dung o day se la LCD_DATA_PORT.
    #define LCD_DATA_PORT getenv("SFR:PORTD")   // Port D duoc su dung de giao tiep C.LCD.
    //#define LCD_DATA_PORT         0x08
    #define set_tris_lcd(x)      set_tris_D(x)   // Lenh dieu khien trang thai port giao tiep.
    #define lcd_output_enable(x) lcdlat.enable=x   // Lenh dieu khien chan LCD_ENABLE_PIN.
    #define lcd_enable_tris()   lcdtris.enable=0
       
    #define lcd_output_rs(x)    lcdlat.rs=x      // Lenh dieu khien chan LCD_RS_PIN.
    #define lcd_rs_tris()      lcdtris.rs=0
    #define lcd_output_rw(x)    lcdlat.rw=x      // Lenh dieu khien chan LCD_RW_PIN
    #define lcd_rw_tris()      lcdtris.rw=0
    #define lcd_line_one   0x00    // Dia chi RAM C.LCD cho hang thu 1.
    #define lcd_line_two   0x40    // Dia chi RAM C.LCD cho hang thu 2.
    #define LCD_TYPE 0x02           // Thong tin cau hinh C.LCD: 0x00=5x7, 0x01=5x10, 0x02=2 lines
    // Dinh nghia cac hang so.
    byte const LCD_INIT_STRING[4] = {0x20 | (LCD_TYPE << 2), 0x0C, 0x01, 0x06};
            // Cac byte nay can thiet de gui toi C.LCD, dung de khoi dong cau hinh hoat dong cho C.LCD.
          // Byte 1: 0x20 | (LCD_TYPE << 2) - So bit du lieu giao tiep (DL), so dong hien thi (N), kieu ky tu (F).
          //         0 0 1 DL N F x x (DL: Data Length, N: Number Line, F: Font).
             // Truong hop 1: 0x20 - 4 bit / 1 dong / 5 x 7.
             // Truong hop 2: 0x24 - 4 bit / 1 dong / 5 x 10.
             // Truong hop 3: 0x28 - 4 bit / 2 dong / 5 x 7.
          // Byte 2: 0x0C - Dieu khien hien thi (Bat hien thi, tat con tro, tat nhap nhay con tro).
          //         0 0 0 0 1 D C B (D: Display, C: Cursor, B: Blink).
          // Byte 3: 0x01 - Xoa hien thi va tra con tro ve dau dong.
          // Byte 4: 0x06 - Dat che do dau vao (Che do tang dia chi, tat dich chuyen hien thi).
          //         0 0 0 0 0 1 I/D S (I/D: Increment/Decrement, S: Shift).
          // Byte 5: .... - Doi con tro / hien thi.
          //         0 0 0 1 S/C R/L x x (S/C: Screen/Cursor, R/L: Right/Left).
    LCD_PIN_MAP lcd, lcdlat;
    #byte lcd = LCD_DATA_PORT
    #byte lcdlat = LCD_DATA_PORT
                            //   RS, RW,   EN,   UNUSED,  DATA.
    const LCD_PIN_MAP LCD_OUTPUT_MAP =  {0,  0,    0,    0,       0};
    const LCD_PIN_MAP LCD_INPUT_MAP =   {0,  0,    0,    0,       0xF};
                // Cac dinh nghia nay chi can de dieu chinh cho cac dong PIC PCB (baseline PICs).
                   // tat ca cac dong PIC khac su dung LCD_PIN_MAP hoac cac dinh nghia chan LCD_xxx rieng biet.
    // ***************************************************
    void lcd_init(void)    // Ham dung de khoi dong C.LCD.
    {
    // Khai bao bien.
    byte i;
    // Dinh nghia ham.
    set_tris_lcd(LCD_OUTPUT_MAP);   // Thiet lap chan port (Data) o che do ngo ra.
                            // Thiet lap chan port (Control: EN, RS, RW) o che do ngo ra.
    lcd_output_rs(0);         // RS = 0 - Databus = Bus lenh.
    lcd_output_rw(0);         // RW = 0 - Ghi thong tin vao C.LCD.
    lcd_output_enable(0);      // EN = 0 - Cam truy xuat C.LCD.
    delay_ms(15);   // Tao thoi gian tre 15ms (Thoi gian de LCD tu reset khi moi duoc cap nguon).
    for(i=1;i<=3;i++)         // Doan lenh khoi dong C.LCD o che do 8 bit duoc thuc hien 3 lan lien tiep
       {                  // tai thoi diem ban dau (de dam bao cho C.LCD hoat dong on dinh trong 
       lcd_send_nibble(0x03);    // truong hop khi cung cap nguon cho C.LCD ma dien ap nguon tang len cham).
       delay_ms(5);         // RS = 0, RW = 0, D7 - D4 = 0011 (0x03) -> DL = 1 (8 bit).
       }                  // Do co BF (Busy Flag) chua kiem tra duoc trong thoi diem nay, nen phai 
                         // thuc hien 3 lan (xem luu do khoi dong C.LCD cua nha san xuat).
    lcd_send_nibble(0x02);      // Doan lenh khoi dong C.LCD o che do 4 bit. Tu luc nay thi 4 bit cao duoc ghi
                         // ra truoc tien, sau do la 4 bit thap.
                         // RS = 0, RW = 0, D7 - D4 = 0010 (0x02) -> DL = 0 (4 bit).
                         // Co BF (Busy Flag) co the bat dau kiem tra duoc tu luc nay.
    for(i=0;i<=3;i++)
       lcd_send_byte(0,LCD_INIT_STRING[i]);   // Goi ham truyen thong tin (lenh) sang C.LCD.
    }                                 // Lenh: Thiet lap cau hinh hoat dong cho C.LCD.
    // ***************************************************
    byte lcd_read_byte(void)   // Ham xu ly doc thong tin (dang 8 bit) tu thong tin dang 4 bit tu C.LCD.
    {
    // Khai bao bien.
    byte low,high;
    // Dinh nghia ham.
    set_tris_lcd(LCD_INPUT_MAP);   // Thiet lap chan port o che do ngo vao.
    lcd_output_rw(1);         // RW = 1 - Doc thong tin tu C.LCD.
                      // Tien hanh doc 4 bit cao cua thong tin tu C.LCD.
    delay_cycles(1);         // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    lcd_output_enable(1);      // EN = 1 - Cho phep truy xuat C.LCD.
    delay_cycles(1);         // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    high = lcd_read_nibble();   // Cat tam 4 bit du lieu (4 bit cao).
    lcd_output_enable(0);      // EN = 0 - Cam truy xuat C.LCD.
                      // Tien hanh doc 4 bit thap cua thong tin tu C.LCD.
    delay_cycles(1);         // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    lcd_output_enable(1);      // EN = 1 - Cho phep truy xuat C.LCD.
    delay_cycles(1);         // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    low = lcd_read_nibble();   // Cat tam 4 bit du lieu (4 bit thap).
    lcd_output_enable(0);      // EN = 0 - Cam truy xuat C.LCD.
    set_tris_lcd(LCD_OUTPUT_MAP);;   // Thiet lap chan port o che do ngo ra.
    return((high<<4) | low);   // Tra ve ket qua du lieu (dang 8 bit).
    }
    // ***************************************************
    byte lcd_read_nibble(void)   // Ham doc thong tin (dang 4 bit / nibble) tu C.LCD.
    {
    // Khai bao bien.
    // Dinh nghia ham.
    return(lcd.data);   // Doc thong tin tu bus du lieu.
    }               // Tra ve ket qua doc duoc (data = 0000 xxxx).
    // ***************************************************
    void lcd_send_byte(byte address, byte n)   // Ham gui thong tin (byte) toi C.LCD tai dia chi (address).
    {                                 // address = 0: Lenh / 1: Du lieu.
                                     // byte = Thong tin can gui (8 bit).
    // Khai bao bien.
    // Dinh nghia ham.  
    lcd_output_rs(0);      // RS = 0 - Databus = Bus lenh.
    while(bit_test(lcd_read_byte(),7));   // Cho Busy Flag = 0 (C.LCD da xu ly xong).
    lcd_output_rs(address);   // RS = address - Databus = Bus lenh/du lieu.
    delay_cycles(1);      // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    lcd_output_rw(0);      // RW = 0 - Ghi thong tin vao C.LCD.
    delay_cycles(1);      // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    lcd_output_enable(0);   // EN = 0 - Cam truy xuat C.LCD.
    lcd_send_nibble(n >> 4);   // Goi ham truyen 4 bit cao sang C.LCD.
    lcd_send_nibble(n & 0x0F);   // Goi ham truyen 4 bit thap sang C.LCD.
    }
    // ***************************************************
    void lcd_send_nibble(byte n)   // Ham gui thong tin (dang 4 bit / nibble) sang C.LCD.
    {                        // n = Thong tin can gui. 4 bit can gui phai nam vi tri 4 bit thap.
    // Khai bao bien.
    // Dinh nghia ham. 
    lcdlat.data = n;      // Xuat thong tin len bus du lieu.
        
    delay_cycles(1);      // Tao tre 1 chu ky (t=1us voi fosc=4MHz).
    lcd_output_enable(1);   // Tao xung ghi thong tin vao C.LCD.
    delay_us(2);         // Tao tre 2 chu ky (t=2us voi fosc=4MHz).
    lcd_output_enable(0);   // Tao xung ghi thong tin vao LCD - EN = 1->0 (High to Low).
    }
    // ***************************************************
    void lcd_gotoxy(byte x, byte y)   // Ham thiet lap vi tri ghi tren C.LCD (Goc tren ben trai co toa do la 1,1).
    {
    // Khai bao bien.
    byte address;
    // Dinh nghia ham.  
    if(y!=1)   // Kiem tra vi tri truy xuat thuoc hang 2.
       address=lcd_line_two;   // Nap dia chi RAM cua hang 2. 
    else      // Neu vi tri truy xuat thuoc hang 1.
       address=lcd_line_one;   // Nap dia chi RAM cua hang 1.
      
    address+=x-1;      // Ghep dia chi cot vao dia chi tong quat (address). address = address + (x-1).      
                   // Ta qui uoc: Goc tren ben trai co toa do la 1,1 -> Cot dau tien la Cot 1
                   // (x-1) vi C.LCD qui uoc cot dau tien co dia chi la 0.
    lcd_send_byte(0,0x80|address);   // Goi ham truyen thong tin (lenh) sang C.LCD.
    }                        // Lenh: Thiet lap dia chi DDRAM cua C.LCD (addresss).   
    // ***************************************************
    char lcd_getc(byte x, byte y)   // Ham tra ve ky tu tai vi tri (x,y) tren C.LCD.
    {
    // Khai bao bien.
    char value;
    // Dinh nghia ham.  
    lcd_gotoxy(x,y);         // Xac dinh toa do C.LCD can truy xuat.
    while(bit_test(lcd_read_byte(),7));   // Cho Busy Flag = 0 (C.LCD da xu ly xong).
    lcd_output_rs(1);         // RS = 1 - Databus = Bus du lieu.
    value = lcd_read_byte();   // Doc ve tu C.LCD.
    lcd_output_rs(0);         // RS = 0 - Databus = Bus lenh.
    return(value);      // Tra ve ma ky tu tai toa do yeu cau.
    }
    // ***************************************************
    void lcd_putc(char c)   // Ham se hien thi ky tu c tai vi tri ke tiep tren C.LCD.
    {
    // Khai bao bien.
    // Dinh nghia ham. 
    switch (c)
       {
       case '\f':     // Chuc nang xoa hien thi.
          lcd_send_byte(0,0x01);   // Goi ham truyen thong tin (lenh) sang C.LCD.
          delay_ms(2);         // Lenh: Xoa hien thi tren man hinh C.LCD (0x01).
          break;
       case '\n':       // Chuc nang bat dau hang thu 2.
          lcd_gotoxy(1,0x02);     // Goi ham truyen thong tin (du lieu) sang C.LCD.   
          break;
        case '\b':       // Chuc nang lui ve 1 vi tri.
          lcd_send_byte(0,0x10);    // Goi ham truyen thong tin (lenh) sang C.LCD. 
          break;               // Lenh: Doi con tro sang trai (0x10).
       default:       // Chuc nang hien thi ky tu c tai vi tri ke tiep tren C.LCD.
          lcd_send_byte(1,c);     // Goi ham truyen thong tin (du lieu) sang C.LCD.
          break;
       }
    }      
    // ***************************************************
    void convert_bcd(int8 v)
    {
    int8 tram,chuc,donvi,nghin;
    donvi=v; 
    //chia lay phan du, so hang don vi
    tram=v/100; 
    //tach hang tram va hang chuc
    chuc=v/10;
    nghin = v/1000;
    tram = tram + 0x30;
    chuc = chuc + 0x30;
    donvi = donvi + 0x30;
    nghin = nghin +0x30;
    }
    /////////
    
    nó báo lỗi chỗ này, nhưng mình không biết phải sửa làm sao cả. bạn giúp mình với!
    ///// hien thi len gia tri LCD//////
    lcd_gotoxy(2,7);
    lcd_getc(nghin);
    lcd_gotoxy(2,8);
    lcd_getc(tram);
    lcd_gotoxy(2,9);
    lcd_getc(chuc);  
    lcd_gotoxy(2,10);
    lcd_getc(donvi);
    }
    // Dinh nghia cac thong so.
  8. kimvothan New Member

    Số bài viết: 11
    Đã được thích: 0
    Điểm thành tích: 0
    cái chỗ này vô duyên thật! #define LCD_DATA_PORT getenv("SFR:pORTD") phải như vầy nè bạn ":"và "P" cái mặt thè lưỡi đó. và dùng biên dịch CCS C nha bạn.
  9. Trần Thời New Member

    Số bài viết: 1
    Đã được thích: 0
    Điểm thành tích: 0
  10. ifm electronic New Member

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 0
  11. thanhdang8x New Member

    Số bài viết: 24
    Đã được thích: 0
    Điểm thành tích: 1

Chia sẻ trang này