toilet

Mạch đo nhiệt độ giao tiếp máy tính qua RS232 dùng PIC16F877A+DS18B20 | Page 2

Thảo luận trong 'Họ PIC -> dsPIC'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

Moderators: THUONGDTQB
  1. Đăng 24/12/12 #11

    tdm Kỹ sư

    Số bài viết: 107
    Đã được thích: 145
    ban
    bạn tham khảo thêm bài viết ở đây:
    http://www.picvietnam.com/forum/showthread.php?t=5847
    kidteam thích bài này.
    #11
  2. Đăng 24/12/12 #12

    vulinhdt1 Học sinh trung cấp

    Số bài viết: 81
    Đã được thích: 17
    e có tham khảo bài của a rồi,nhưng mà bài của e không cần thiết phải hiển thị qua lcd mà yêu cầu là hiển thị lên máy tính qua cổng com.bài làm của e e có up ở trên a có thể xem giúp e với đc không ạ
    #12
  3. Đăng 24/12/12 #13

    tdm Kỹ sư

    Số bài viết: 107
    Đã được thích: 145
    phần VB tham khảo ở đây:http://codientu.org/threads/lập-trình-giao-tiếp-vb6-với-vĐk-qua-rs232.1492/
    code pic:
    Mã:
    //----------------------------------------------------------------
    //do gia tri ds18b20 hien thi pc
     
    //----------------------------------------------------------------
     
    #include <16F877A.h>
    #device *=16 //su dung het ram trong pic                                        //Device
    #include <string.h>
    #include <stdlib.h>
    #fuses nowdt,nolvp,noprotect,xt,put
    #use delay(clock=4000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
    #include <1wire.h>
    #include <crc.c>                                                            //(only for printf function)
    int i,read_ok,tam,hien_thi,crc;
    byte buffer[8];
    int16 t,t1;
    int8 nhiet_do;
    main()                                                         
    {
    delay_ms(500);
    while(1)
    {
    if(init_1wire())
      {
      write_1wire(0xcc);                                      //skip ROM
      write_1wire(0x44);
      delay_ms(750);//doi chuyen doi
      }
    if(init_1wire())
      {
      write_1wire(0xcc);                                      //skip ROM
      write_1wire(0xbe);                                      //read scratchpad
      dowcrc = 0;
      for(i=0;i<8;i++)
        {
        buffer[i]=read_1wire();
        }
        read_ok=1;
     
      }
    if(read_ok)
    {
    t=make16(buffer[1],buffer[0]);                        //calculate temperature
    t=t/16;//lấy phần nguyên
    putc(t);gửi dữ liệu lên pc
    }       
     
    }
    }
    1wire.h
    Mã:
    //----------------------------------------------------------------
    //
    //                                    1wire.h
    //
    // 
    //
    //
    //
    //
    //----------------------------------------------------------------
     
     
    //-------------------------data pin definition--------------------
    #define DQ pin_C3
    //----------------------------------------------------------------
    int8 dowcrc;            // crc is accumulated in this variable
     
    // crc lookup table
    int8 const dscrc_table[] = {
      0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65,
      157,195,33,127,252,162,64,30,95,1,227,189,62,96,130,220,
      35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98,
      190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255,
      70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,
      219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154,
      101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,
      248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,
      140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205,
      17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80,
      175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238,
      50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115,
      202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139,
      87,9,235,181,54,104,138,212,149,203,41,119,244,170,72,22,
      233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168,
      116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53
    };
     
    //-------------------------1wire reset----------------------------
    //******************************************************************************
    // One wire crc
    int8 kiem_tra_crc(int8 x)
    {
      dowcrc = dscrc_table[dowcrc^x];
      return dowcrc;
    }
    //******************************************************************************
    init_1wire()
    {
    int a;
     
    output_low(DQ);
    delay_us(480);
    output_float(DQ);
    delay_us(65);
    a=!input(DQ);
    delay_us(240);
    if(a)
      return(1);
    else
      return(0);
    }
     
    //-------------------------read byte------------------------------
     
    byte read_1wire()
    {
    byte a,data;
     
    for(a=0;a<8;a++)
    {
    output_low(DQ);
    delay_us(14);
    output_float(DQ);
    delay_us(5);
    shift_right(&data,1,input(DQ));
    delay_us(100);
    }
    return(data);
    } 
    //--------------------------write byte----------------------------
     
    byte write_1wire(byte data)
    {
    byte a;
     
    for(a=0;a<8;a++)
    {
    output_low(DQ);
    delay_us(10);
    if(shift_right(&data,1,0))
      output_high(DQ);
    else
      output_low(DQ);
    delay_us(50);
    output_high(DQ);
    delay_us(50);
    }
    return(1);
    }
    
    vulinhdt1, Adminkidteam thích bài này.
    #13
  4. Đăng 25/12/12 #14

    vulinhdt1 Học sinh trung cấp

    Số bài viết: 81
    Đã được thích: 17
    cảm ơn a tdm nhiều lắm. Mạch đã không báo lỗi.
    hì.
    E muốn hỏi thêm là với mạch này e sử dụng Hyper terminal để truyền nhiệt độ lên máy tính và gửi xuống vdk được không ạ?
    #14
  5. Đăng 25/12/12 #15

    sgesvn Moderator

    Số bài viết: 2,273
    Đã được thích: 2,718
    Hoàn toàn được nếu bạn muốn.
    #15
  6. Đăng 25/12/12 #16

    vulinhdt1 Học sinh trung cấp

    Số bài viết: 81
    Đã được thích: 17
    A ơi tại sao e sử dụng hyper,sau khi e thực hiện kết nối với proteus e đã nhập giá trị vào màn hình hyper nhưng mạch vẫn im lìm vậy.
    e thực hiện kết nối giữa cổng com4 của proteus và com5 của hyper.
    #16
  7. Đăng 26/12/12 #17

    vulinhdt1 Học sinh trung cấp

    Số bài viết: 81
    Đã được thích: 17
    Vẫn cái vấn đề mạch đo nhiệt độ giao tiếp máy tính.
    Tới phần lập trình giao diện vb để giao tiếp thì e gặp khó khăn.
    E muốn xây dựng 1 giao diện đơn giản mong mọi ng giúp đỡ e.
    Hình và code Vb e có kèm ở phía dưới ạ.

    Các file đính kèm:

    • vb.rar
      Kích thước:
      104.2 KB
      Đọc:
      63
    #17
  8. Đăng 26/12/12 #18

    sgesvn Moderator

    Số bài viết: 2,273
    Đã được thích: 2,718
    Của bạn đây, giao diện thôi nhé. Còn code trên diễn đàn đã có bài tương tự như bài của bạn rồi, không hiểu gì bạn hỏi để mọi người giúp thêm nhé.
    Untitled.

    Các file đính kèm:

    kidteamvulinhdt1 thích bài này.
    #18
  9. Đăng 26/12/12 #19

    vulinhdt1 Học sinh trung cấp

    Số bài viết: 81
    Đã được thích: 17
    Cảm ơn a nhiều lắm ạ.
    #19
  10. Đăng 26/12/12 #20

    mta_cdt Super Moderator

    Số bài viết: 2,205
    Đã được thích: 2,923
    tặng bạn code truyền thông cả 12 con luôn. Mình viết trên vb 6

    Các file đính kèm:

    • vb.rar
      Kích thước:
      40.5 KB
      Đọc:
      114
    Admin thích bài này.
    #20
Moderators: THUONGDTQB

Chia sẻ trang này