Thông báo

Collapse
No announcement yet.

Mạch nhiệt độ dùng ds18b20

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Mạch nhiệt độ dùng ds18b20

    Tình hình là em làm mạch nhiệt độ này, lúc đầu thì dùng lm35+89c52+adc0804 rồi, nhưng số nó nhảy loạn xạ quá, nên thử chuyển qua dùng ds18b20. Em có xem qua cách mô phỏng, và em ghép trên testboard theo mô phỏng+code ấy nhưng sao nó không chạy nhỉ? Mà có bác nào có mạch nguyên lý dùng ds18b20 thì cho em xin với, tại đến bây giờ em vẫn chưa hình dung ra ds18b20 ấy được lắp như thế nào nếu làm mạch thật. không lẽ chỉ giống mô phỏng là 1 con 89, ds18b20, R, 7447 là hết rồi ?

  • #2
    Nguyên văn bởi theblues93 Xem bài viết
    Tình hình là em làm mạch nhiệt độ này, lúc đầu thì dùng lm35+89c52+adc0804 rồi, nhưng số nó nhảy loạn xạ quá, nên thử chuyển qua dùng ds18b20. Em có xem qua cách mô phỏng, và em ghép trên testboard theo mô phỏng+code ấy nhưng sao nó không chạy nhỉ? Mà có bác nào có mạch nguyên lý dùng ds18b20 thì cho em xin với, tại đến bây giờ em vẫn chưa hình dung ra ds18b20 ấy được lắp như thế nào nếu làm mạch thật. không lẽ chỉ giống mô phỏng là 1 con 89, ds18b20, R, 7447 là hết rồi ?
    ds18b20 có 3 chân VCC,GND và DQ. VCC nối nguồn 5V, GND nối ground, DQ treo nguồn 5V qua trở 4.7K và lấy dữ liệu từ chân DQ này. chân DQ nối với bit nào đó của 1 pỏt nào đó, ví dụ như P3.0
    Đây là code asm, đo nhiệt độ dùng ds18b20, hiện thị trên 4 led 7 đoạn
    ; Chuc nang cua chuong trinh: Do nhiet do bang DS18B20 va hien thi qua LED 7 đoạn (cái này là mình tìm trên internet)
    ; P1.0-P1.7 đóng ngắt các segment ABCDEFGP
    ; DQ CUA DS18B20 NOI VOI P3.0
    ; mở 4LED 7 đoạn thôi, Led1 là hàng trăm, led 2 là hàng chục, led3 là hàng đơn vị, led 4 là hàng thập phân (dùng phương pháp quét led bác à)
    DQ BIT P3.0
    MODE1 BIT P2.0
    MODE2 BIT P2.1
    UP BIT P2.2
    DOWN BIT P2.3
    LUU BIT P2.4
    DEM EQU R2
    T_LSB EQU 30H
    T_MSB EQU 20H
    TEMP EQU 32H
    DIGIT EQU 31H
    T_DIGIT EQU 33H
    T_LED EQU 34H
    ORG 0000H
    JMP CHUONG_TRINH_CHINH
    WRITE_TIME_SLOT:
    CLR DQ
    NOP
    NOP
    MOV DQ,C
    MOV R5,#15
    LCALL DELAY
    SETB DQ
    NOP
    RET
    READ_TIME_SLOT:
    CLR DQ
    NOP
    NOP
    SETB DQ
    MOV R5,#4
    CALL DELAY
    MOV C, DQ
    MOV R5,#25
    LCALL DELAY
    RET
    RESET_DS1820:
    CLR DQ
    MOV R5,#244
    LCALL DELAY
    SETB DQ
    MOV R5,#36
    LCALL DELAY
    JB DQ,RESET_DS1820
    MOV R5,#212
    CALL DELAY
    RET
    WRITE_BYTE:
    MOV DEM,#8
    WRITE_LAI:
    RRC A
    LCALL WRITE_TIME_SLOT
    DJNZ DEM, WRITE_LAI
    SETB DQ
    MOV R5,#50
    LCALL DELAY
    RET
    READ_BYTE:
    MOV DEM,#8
    READ_LAI:
    LCALL READ_TIME_SLOT
    RRC A
    DJNZ DEM, READ_LAI
    MOV R5,#50
    LCALL DELAY
    RET
    DELAY:
    DJNZ R5,$
    RET
    DELAY_LONG:
    MOV R6,#0FFH
    DELAY_LAI:
    LCALL DELAY
    DJNZ R6,DELAY_LAI
    RET
    BCD:
    MOV B,#10
    DIV AB
    MOV T_LED,A
    RET
    HIEU_CHINH:
    MOV TEMP,#0
    MOV DIGIT,#0
    ANL A,#0FH
    MOV TEMP,A
    MOV A,T_LSB
    ANL A,#0F0H
    ORL TEMP,A
    MOV A,TEMP
    SWAP A
    MOV TEMP,A

    MOV A,T_LSB
    ANL A,#0FH
    MOV DPTR,#TABLE1
    MOVC A,@A+DPTR
    MOV DIGIT,A
    RET
    KIEMTRA:
    JNB 6,OUT_KT
    MOV A,#0FFH
    CLR C
    SUBB A,TEMP
    MOV TEMP,A
    MOV A,#0FH
    ANL A,T_LSB
    CJNE A,#0,OUT_KT1
    INC TEMP
    JMP OUT_KT
    OUT_KT1:
    MOV DPTR,#TABLE2
    MOVC A,@A+DPTR
    MOV DIGIT,A
    OUT_KT:
    RET
    OUTLED:
    MOV DPTR,#TABLE0
    MOV A,TEMP
    CALL BCD
    MOV A,B
    MOVC A,@A+DPTR
    ANL A,#01111111B
    MOV P1,A
    CLR P3.4
    CALL DELAYLED
    SETB P3.4
    MOV A,T_LED
    CALL BCD
    JNB 6,NEXT1
    MOV A,#10
    NEXT1: MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.2
    CALL DELAYLED
    SETB P3.2
    MOV A,B
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.3
    CALL DELAYLED
    SETB P3.3
    MOV A,DIGIT
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.5
    CALL DELAYLED
    SETB P3.5
    RET
    DELAYLED:
    MOV R7,#5
    LOOPD: MOV R6,#255
    DJNZ R6,$
    DJNZ R7,LOOPD
    RET
    CHUONG_TRINH_CHINH:
    SETB MODE1
    SETB MODE2
    SETB LUU
    SETB UP
    SETB DOWN
    SETB DQ
    AGAIN:

    LCALL RESET_DS1820
    MOV A,#0CCH
    LCALL WRITE_BYTE
    MOV A,#44H
    LCALL WRITE_BYTE
    LCALL RESET_DS1820
    MOV A,#0CCH
    LCALL WRITE_BYTE
    MOV A,#0BEH
    LCALL WRITE_BYTE
    LCALL READ_BYTE
    MOV T_LSB,A
    LCALL READ_BYTE
    MOV T_MSB,A
    LCALL RESET_DS1820
    LCALL HIENTHI
    JNB MODE1,NHIETDO_DAT1
    JNB MODE2,NHIETDO_DAT2
    CALL SOSANH1
    CALL SOSANH2
    CLR C
    JMP AGAIN
    HIENTHI:
    CALL HIEU_CHINH
    CALL KIEMTRA
    CALL OUTLED
    RET
    SOSANH1:
    CLR C
    MOV A,50H
    CJNE A,TEMP,NHAY1
    SOSANH2:
    CLR C
    MOV A,51H
    CJNE A,TEMP,NHAY2
    RET
    NHAY1:JC RELAY
    CLR P0.0
    RET
    RELAY:
    SETB P0.0
    RET
    NHAY2:JNC ALARM
    CPL P0.1
    RET
    ALARM:
    CLR P0.1
    RET
    NHIETDO_DAT1:
    JB UP,NUT_DOWN
    JNB UP,$
    INC 50H
    MOV A,50H
    CJNE A,#125,NUT_DOWN
    MOV 50H,#0
    NUT_DOWN:
    JB DOWN,HIENTHI2
    JNB DOWN,$
    DEC 50H
    MOV A,50H
    CJNE A,#0,HIENTHI2
    MOV 50H,#125
    HIENTHI2:
    MOV P1,#0C7H
    CLR P3.2
    CALL DELAYLED
    SETB P3.2
    MOV R4,50H
    ACALL HIENTHI1
    JB LUU,NHIETDO_DAT1
    JNB LUU,THOAT
    NHIETDO_DAT2:
    JB UP,NUT_DOWN1
    JNB UP,$
    INC 51H
    MOV A,51H
    CJNE A,#125,NUT_DOWN1
    MOV 51H,#0
    NUT_DOWN1:
    JB DOWN,HIENTHI3
    JNB DOWN,$
    DEC 51H
    MOV A,51H
    CJNE A,#0,HIENTHI3
    MOV 51H,#125
    HIENTHI3:
    MOV P1,#89H
    CLR P3.2
    CALL DELAYLED
    SETB P3.2
    MOV R4,51H
    ACALL HIENTHI1
    JB LUU,NHIETDO_DAT2
    THOAT:
    LJMP CHUONG_TRINH_CHINH
    HIENTHI1:
    MOV DPTR,#TABLE0
    MOV A,R4
    MOV B,#100
    DIV AB
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.3
    CALL DELAYLED
    SETB P3.3
    MOV A,B
    MOV B,#10
    DIV AB
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.4
    CALL DELAYLED
    SETB P3.4
    MOV A,B
    MOVC A,@A+DPTR
    MOV P1,A
    CLR P3.5
    CALL DELAYLED
    SETB P3.5
    RET
    DELAY1S:
    MOV R0,#250
    LAPLAI:
    MOV R1,#255
    DJNZ R1,$
    DJNZ R0,LAPLAI
    RET
    TABLE0:
    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH, 0FFH
    TABLE1:
    DB 0,0,1,0,2,3,0,4,5,0,6,0,7,8,0,9
    TABLE2:
    DB 0,0,9,8,0,7,0,6,5,0,4,3,0,2,0,1
    END

    Comment


    • #3
      cám ơn bạn đã hướng dẫn, mình sẽ test thử xem sao

      Comment


      • #4
        Nguyên văn bởi theblues93 Xem bài viết
        cám ơn bạn đã hướng dẫn, mình sẽ test thử xem sao
        có gì thì hú hí với mình nhé

        Comment


        • #5
          Nguyên văn bởi theblues93 Xem bài viết
          Tình hình là em làm mạch nhiệt độ này, lúc đầu thì dùng lm35+89c52+adc0804 rồi, nhưng số nó nhảy loạn xạ quá, nên thử chuyển qua dùng ds18b20. Em có xem qua cách mô phỏng, và em ghép trên testboard theo mô phỏng+code ấy nhưng sao nó không chạy nhỉ? Mà có bác nào có mạch nguyên lý dùng ds18b20 thì cho em xin với, tại đến bây giờ em vẫn chưa hình dung ra ds18b20 ấy được lắp như thế nào nếu làm mạch thật. không lẽ chỉ giống mô phỏng là 1 con 89, ds18b20, R, 7447 là hết rồi ?
          Bạn thử tham khảo bài viết này của mình xem sao, có thể hơi có hơi hướng của mô phỏng với lý thuyết vì mình không có điều kiện làm mạch thực tế, nhưng theo code phía trên thì mắc DQ vào P3.0 thì giờ chỉ cần cho DQ vào P3_2 (ngắt ngoài 1) là đựoc mình có phân tích khá chi tiết ở bài viết đó, nếu có điều kiện làm mạch thực thì kiểm nghiệm hộ mình nhé.

          Comment


          • #6
            lưu ý là cái code mình post đã test trên mạch thức tế rồi nhé. nên yên là nó chạy. mình không rãnh rồi ngồi post code sai đâu nhé.
            PS: mình dùng con lm35+adc0809 hiện thị trên LCD thấy tốt gớm, không hiểu sao chủ thread lại bị chập chờn
            Last edited by condonhan; 02-11-2013, 00:45.

            Comment


            • #7
              Nguyên văn bởi condonhan Xem bài viết
              lưu ý là cái code mình post đã test trên mạch thức tế rồi nhé. nên yên là nó chạy. mình không rãnh rồi ngồi post code sai đâu nhé.
              PS: mình dùng con lm35+adc0809 hiện thị trên LCD thấy tốt gớm, không hiểu sao chủ thread lại bị chập chờn
              ý của mình không phải code sai đâu mà là mình đọc theo 1 cách khác, vẫn là DQ vẫn là đọc theo kiểu đọc 1 chân, có điều theo mình biết là thời gian chuyển đổi nhiệt độ sang số của 18b20 là rất dài, trong quá trình chuyển đổi thì DQ=0 sau khi chuyển đổi xong thì DQ=1, nên mình nảy ra ý định là nếu khi đọc nhiệt độ thì chỉ setup cho 18b20 chuyển đổi nhiệt độ, sau đó bật cờ ngắt ngoài lên (vì DQ nối vào chân ngắt ngoài), sau khi chuyển đổi xong thì DQ=1-> xảy ra ngắt ở đó mình lại xóa cờ ngắt ngoài rồi tiến hành đọc nhiệt độ như vậy thì sẽ không phải đợi cho 18b20 chuyển đổi nhiệt độ, vì thời gian chuyển đổi nếu ở chế độ 12bit sẽ mất ~=750ms thời gian này là quá dài và không nhất thiết phải đợi.

              Comment


              • #8
                Code của mọi người có thể hoạt động được nhưng sẽ không tối ưu vì tại sao cứ phải bỏ ra 1 khoảng thời gian không đâu chỉ để ngồi đợi cho 18b20 chuyển đổi mà trong khi đó chính nó lại có thể biến thành 1 ngắt cho mình? giống như kiểu khi thao tác với ds1307 thì mọi người thường đọc giờ liên tục mà không để ý cái chân SQW/out nó có thể xuất xung 1s mình có thể dựa vào đó để đọc giờ cũng được hoặc dựa vào đó để chạy giờ bằng chính VSL thì có phải là tốt không?

                Comment


                • #9
                  vẫn ứng dụng trên bác có code asm cho vdk atmega8 post lên em tham khảo với ?

                  Comment


                  • #10
                    Nguyên văn bởi dongnv Xem bài viết
                    vẫn ứng dụng trên bác có code asm cho vdk atmega8 post lên em tham khảo với ?
                    mình chỉ có 8051 thôi bác à

                    Comment


                    • #11
                      Nguyên văn bởi condonhan Xem bài viết
                      lưu ý là cái code mình post đã test trên mạch thức tế rồi nhé. nên yên là nó chạy. mình không rãnh rồi ngồi post code sai đâu nhé.
                      PS: mình dùng con lm35+adc0809 hiện thị trên LCD thấy tốt gớm, không hiểu sao chủ thread lại bị chập chờn
                      mình chưa thử hiển thị trên LCD, mới làm trên led 7 đoạn à

                      Comment


                      • #12
                        bạn có code C không vậy. mình cũng đang học nhưng viết bằng C

                        Comment


                        • #13
                          bác ơi. chân 1234 của led 7 thanh nối với cổng nảo của 89 thế bác. e chưa rõ

                          Comment

                          Về tác giả

                          Collapse

                          theblues93 Tìm hiểu thêm về theblues93

                          Bài viết mới nhất

                          Collapse

                          Đang tải...
                          X