DS18B20 là IC cảm biến nhiệt độ, chỉ bao gồm 3 chân, đóng gói dạng TO-92 3 chân rất nhỏ gọn.
DS18B20 giao tiếp thông qua giao thức 1 dây dẫn với vi xử lý.
Đặc điểm chính của DS18B20 như sau:
+ Cung cấp nhiệt độ với độ phân giải 12bit.
+ Ngưỡng nhiệt độ rộng: -10°C đến 125°C
+ Sai số cho phép: ±0.5°C
+ Có chức năng cảnh báo nhiệt khi nhiệt độ vượt ngưỡng cho phép. Người dùng có thể lập trình chức năng này cho DS18B20. Bộ nhớ nhiệt độ cảnh báo không bị mất khi mất nguồn.
+ Cảm biến nhiệt độ DS18B20 có mã nhận diện lên đến 64-bit, vì vậy bạn có thể kiểm tra nhiệt độ với nhiều IC DS18B20 mà chỉ dùng 1 dây dẫn duy nhất để giao tiếp với các IC này.
Với DS18B20 bạn hoàn toàn có thể tạo cho mình mạch cảm biến nhiệt độ theo ý muốn.
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình.
/*
* File: DS18_20.c
* Author: Lam 3 Ngon
* My blog http://xcvn.blogspot.com
* Created on April 26, 2016, 8:57 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 4000000
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include "lcd.h"
#include "1wire.h"
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void delay(unsigned int t)
{
while(--t)
__delay_ms(1);
}
//**************************************************************************/
void main(void)
{
Convert_Temperature();
TRISD = 0X00;
float Temp = 0;
char S[20];
Lcd_Init();
Lcd_Set_Cursor(1,2);
Lcd_Write_String("SENSOR DS18B20");
Lcd_Set_Cursor(2,3);
Lcd_Write_String("BY LAM 3 NGON");
delay(2000);
Lcd_Clear();
while(1)
{
Convert_Temperature();
Temp = Read_Temperature_DS18B20();
sprintf(S,"Temperatura:%2.1f",Temp);
Lcd_Set_Cursor(1,1);
Lcd_Write_String(S);
delay(1000);
}
}
- Đây là ảnh mô phỏng protues.
- Đây là code chương trình.
/*
* File: DS18_20.c
* Author: Lam 3 Ngon
* My blog http://xcvn.blogspot.com
* Created on April 26, 2016, 8:57 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#define _XTAL_FREQ 4000000
#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7
#include "lcd.h"
#include "1wire.h"
// CONFIG
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
void delay(unsigned int t)
{
while(--t)
__delay_ms(1);
}
//**************************************************************************/
void main(void)
{
Convert_Temperature();
TRISD = 0X00;
float Temp = 0;
char S[20];
Lcd_Init();
Lcd_Set_Cursor(1,2);
Lcd_Write_String("SENSOR DS18B20");
Lcd_Set_Cursor(2,3);
Lcd_Write_String("BY LAM 3 NGON");
delay(2000);
Lcd_Clear();
while(1)
{
Convert_Temperature();
Temp = Read_Temperature_DS18B20();
sprintf(S,"Temperatura:%2.1f",Temp);
Lcd_Set_Cursor(1,1);
Lcd_Write_String(S);
delay(1000);
}
}
No comments:
Post a Comment