Wednesday 28 November 2018

Giao Tiếp Modul Cảm Biến nhiệt Độ DS18B20

Giới thiệu cảm biến nhiệt độ DS18B20
       DS18B20 là cảm biến nhiệt độ kỹ thuật số giao tiếp 1-Wire (1 dây duy nhất), bên trong IC được tích hợp sẵn cảm biến nhiệt và bộ chuyển đổi, khối xử lý, giao tiếp 1 wire, bộ nhớ ROM, EEPROM, báo thức nhiệt độ khi đạt ngưỡng...
       Thông số của cảm biến: 
                - Giải đo: -55 đến +125 độ C (sai số 0.5 độ C trong điều kiện -10 to +85 độ C)
                - Nguồn cung cấp: 3 - 5.5V
                - Độ phân giải: 9bit, 12bit
                - Môi trường làm việc: Mọi môi trường nếu có vỏ bảo vệ tốt.
      Cảm biến DS18B20 cho phép bạn kết nối nhiều cảm biến trên một đường dây DATA (DQ) và nó cho phép kết nối ít nhất là 2 dây DQ và GND không cần cấp VCC, lúc này chân VCC nối tắt sang GND, như vậy thì làm sao cấp nguồn được cho cảm biến hoạt động ??? Để cấp nguồn thì cảm biến được thiết kế có thể lấy trực tiếp áp từ dây tín hiệu DQ để duy trì hoạt động (xem mạch trong datasheet).
       Trong bài này ta chỉ xét xem làm thế nào để giao tiếp được với cảm biến, còn các bạn muốn tìm hiểu kỹ hơn thì vui lòng đọc datasheet gửi kèm trong đính kèm.
Sơ đồ chân và các kiểu đóng vỏ:
Đo nhiệt độ dùng cảm biến DS18B20 với 8051 - SangTaoClub.Net
3. Lập trình giao tiếp:
/****************Chương trình giao tiếp IC DS18B20***************************/
void delay_18B20(unsigned int ti){ //delay us
        while(ti--);
}
void Init_18B20(void){ //Khởi tạo cảm biến
        DQ = 1; 
        delay_18B20(8);
        DQ = 0; 
        delay_18B20(65);
        DQ = 1; 
        delay_18B20(20); 
}
unsigned char ReadOneChar(void){ //Đọc 1 byte từ IC
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--){
                DQ = 0;
                dat>>=1;
                DQ = 1;
                if(DQ)
                dat |= 0x80;
                delay_18B20(4);
        }
        return(dat);
}
void WriteOneChar(unsigned char dat){ //Ghi một byte vào IC
        unsigned char i=0;
        for (i=8; i>0; i--){
                DQ = 0;
                DQ = dat&0x01;
                delay_18B20(5);
                DQ = 1;
                dat>>=1;
        }
}
void ReadTemperature(void){ //Hàm đọc nhiệt độ lưu vào biến temp
        unsigned char a=0;
        unsigned char b=0;
        //EA=0; //Nếu có ngắt thì cấm ngắt để tránh ảnh hưởng quá trình giao tiếp
        Init_18B20();
        WriteOneChar(0xCC); // Bỏ qua ROM
        WriteOneChar(0x44);
        delay_18B20(10); 
        Init_18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0xBE); //Đọc nhiệt độ
        delay_18B20(10);
        a=ReadOneChar(); //Read temp low value
        b=ReadOneChar(); //Read temp high value
        temp=((b*256+a)>>4); //Giá trị nhiệt độ lưu vào biến temp
        //EA=1; //Đọc xong thì cho phép ngắt
}//End code DS18B20
4. Mô phỏng giao tiếp với cảm biến


Đo nhiệt độ dùng cảm biến DS18B20 với 8051 - SangTaoClub.Net

No comments:

Post a Comment