AT89C51 VÀ DS1621 NHIỆT ĐỘ CẢM BIẾN NHIỆT KẾ

AT89C51 VÀ DS1621 NHIỆT ĐỘ CẢM BIẾN NHIỆT KẾ


HOẠT ĐỘNG CỦA MẠCH ĐO NHIỆT

Tôi sẽ mô tả mạch nhiệt kế kỹ thuật số bằng cảm biến nhiệt độ DS1621. Công việc của triều đại đơn giản như sau; giá trị số từ cảm biến nhiệt độ, truyền thông nối tiếp vi điều khiển gửi đến sự trợ giúp của các giao thức I2C và vi điều khiển LCD tại giá trị này sẽ nếu tôi ăn nhiều basıyor.biraz vi điều khiển 16-bit nhận được từ các cảm biến truyền dữ liệu đến LCD trong việc giải thích.
Cảm biến DS1621, được sản xuất bởi Dallas, có thể đo từ +125 đến -55 độ. Có hai thanh ghi cho cảm biến để thông báo cho người dùng về các giá trị nhiệt độ cao và thấp do người dùng xác định. nhiệt độ phát hiện bởi các vi điều khiển môi trường 16 bit chuyển nhượng, theo chương trình viết bằng giải thích và gửi đến LCD.
DS1621 giao tiếp giữa các giao thức vi điều khiển I2C truyền thông nối tiếp tích hợp phù hợp với nhiệm vụ chính của vi điều khiển giao thức sağlıyor.ı2c, cảm biến nhiệt độ, được gọi là RxD vệ tinh và TxD tích hợp hàng loạt kuruyor.ds1621 thông tin liên lạc qua đường dây thông tin liên lạc SDA thiết bị đầu cuối của vi điều khiển được sử dụng để tiếp nhận dữ liệu và truyền tải với P3_0 cuối DS1621 được sử dụng để tạo xung xung nhịp cần thiết với P3_1 của bộ vi điều khiển lõi SCL.

VẬT LIỆU VÀ GIÁ SỬ DỤNG

  • AT89C51 : 3 YTL
  • Màn hình LCD 16 × 2: 8 YTL
  • 2 tích hợp DS1621: 12 YTL
  • 12 MHz tinh thể + 8.2K điện trở + 10mF tụ điện: 1 YTL
  • 7805 điều chỉnh: 50 kuruş
toàn bộ chi phí mạch khoảng 30 YTL.

THÔNG TIN VỀ CẢM BIẾN NHIỆT DALLAS 1621

Phạm vi đo của DS1621 là từ -55ºC đến + 125ºC. Bộ tích hợp này đo với độ nhạy 0,5. Các giá trị đo được gửi đến bộ vi điều khiển dưới dạng giá trị hai byte.
nhiệt độ byte dưới byte trên ds1621
Bảng 1. Tương đương thập phân của byte dưới và trên
Các giá trị đo được thể hiện trong Bảng 1. Bit thứ 7 của byte dưới là 1, số thập phân thứ 0. Nếu bit thứ 7 của byte trên là 0, nhiệt độ lớn hơn hoặc bằng 0 và bit thứ 7 có nghĩa là nhiệt độ dưới 0. Trong trường hợp này, phần bổ sung của byte trên được thêm vào và 1 được thêm vào để tính kết quả.

TÍCH HỢP DS1621 VÀ CHẾ ĐỘ XEM PIN

thông tin kết nối pin ds1621
Bộ vi điều khiển và DS1621 tích hợp giao tiếp với phương thức giao tiếp nối tiếp I2C. Như thể hiện trong sơ đồ mạch trong Hình 3, mạch tích hợp được kết nối với vi điều khiển thông qua hai cáp kéo lên, SData và SClock. Ngoài ra, trình tích hợp này có các chốt địa chỉ 3 bit. Các chân A0, A1 và A2 được sử dụng để gán địa chỉ. Nhờ có địa chỉ này, có thể kết nối nhiều bộ tích hợp nhiệt độ (lên đến 8 trong DS1621) trên cùng một dòng.
Mở Trang tổng quan
atmel at89c51 dc1621 nhiệt kế sơ đồ mạch

THÔNG TIN VỀ GIAO THỨC TRUYỀN THÔNG NỐI TIẾP GIỮA CÁC NHÀ TÍCH HỢP I2C

Trong phương pháp này, một bit thông tin được gửi hoặc nhận đến phía bên kia với mỗi đồng hồ. Các bit này được gửi trong các gói 1 byte dưới dạng địa chỉ hoặc lệnh, dữ liệu được tìm nạp. Hình ảnh trong Hình 4 thu được bằng chương trình mô phỏng.
Dữ liệu lệnh địa chỉ gián điệp i2c
Hình 4. Luồng địa chỉ, lệnh và dữ liệu I2C.
Mã chương trình của chúng tôi thường bao gồm các chương trình con. Điều này làm cho nó đơn giản và dễ hiểu hơn. Sau khi cài đặt các cổng của bộ vi điều khiển, cài đặt màn hình LCD và cài đặt DS1621, giá trị nhiệt độ được đọc và hiển thị trên màn hình LCD.
Như có thể thấy trong hình 4, thông tin địa chỉ '10010001' được truyền trước tiên. Do đó, nếu có nhiều hơn một hệ thống DS1621 được kết nối, địa chỉ được đặt là 000 sẽ được tô sáng. Vì trong chu kỳ của chúng tôi, tích hợp nhiệt độ đầu nối A0-A2 được nối với mặt đất, điều này sẽ được tích hợp với lệnh được gửi đi. Nếu có 3 tích phân nhiệt độ trong chu kỳ, nếu chúng tôi gửi lệnh tích hợp thứ 3, thông tin địa chỉ của chúng tôi sẽ là '10010101'.
Ngay sau khi địa chỉ, byte lệnh được gửi đi. Byte này xác định xem thông tin được đọc là byte thấp hơn hay byte trên. Ngay sau khi byte địa chỉ một lần nữa, lần này là cung cấp thông tin để đảm bảo một cái nhìn. Giá trị đo được sau đó được đọc trên máy ghi âm. các địa chỉ cho cách đọc to các byte thấp và trên dưới, cho thấy lệnh và dữ liệu suối.
  • Viết thư cho trình tích hợp được giải quyết là 10010001> 000
  • 10101010> lệnh viết (đọc giá trị đo cuối cùng)
  • Mũi tên tích hợp được giải quyết 10010000> 000
  • 00010010> Thông tin nhận được dưới dạng byte trên (18)
  • 10001000> Thông tin đến dưới dạng byte dưới (.5)
Chương trình nhiệt kế
/ ************************************************* ***** /
/ * Tên ứng dụng: Nhiệt kế Ứng dụng * /
/ * Tên tệp: Nhiệt kế * /
/ * Ngày: tháng 4 năm 2005 * /
/ * Bộ xử lý mục tiêu: MCS-51 * /
/ * * /
/ ************************************************* ***** /
// Tệp tiêu đề
// ------------------------------------------------ -----------------------
#include <89c51rd2 .h="">
#include 
#include 						
#define SDATA P3_0
#define SCLK P3_1
// ------------------------------------------------ -----------------------
// CHỨC NĂNG MÀN HÌNH LCD
// ------------------------------------------------ -----------------------
		void delay (long int sure) // chậm trễ thường xuyên
				{
				dài int i;
				cho (i = 1; i <= chắc chắn; i + +)
				{;}
				}
void datakomut (int command) // thường trình lệnh LCD
	{
	P2_0 = 0;
	P2_1 = 0;
	P2_2 = 1;
	P1 = lệnh;
	P2_2 = 0;
	chậm trễ (1000);
	}
		void data data (dữ liệu char [], dài int nhanh) // LCD write routine
		{
		int i;
		while (dữ liệu [i]! = 0)
			{
			P2_0 = 1;
			P2_1 = 0;
			P2_2 = 1;
			P1 = dữ liệu [i];
			P2_2 = 0;
			i ++;
			chậm trễ (vận tốc);
			}
		}
void LcdAc () // Tạo thường trình LCD
	{
	int bắt đầu [] = {12,52,4}, t;
	for (t = 0, t <3 font="" t="">
	datakomut (ban đầu [t]);
	}
// ------------------------------------------------ ------------------------
// Hàm I2C
// ------------------------------------------------ ------------------------
void i2c_start (void)
{
	SDATA = 1; // tạo dòng dữ liệu 1
	SCLK = 1; // tạo đường đồng hồ 1
	SDATA = 0; // Đặt dòng dữ liệu thành 0 (START SIGNAL)
	SCLK = 0; // tạo đường đồng hồ 0
}

		void i2c_stop (void)
		{
			unsigned char input_var;

			SCLK = 0; // tạo đường đồng hồ 0
			SDATA = 0; // tạo dòng dữ liệu 0
			SCLK = 1; // tạo đường đồng hồ 1
			SDATA = 1; // Đặt dòng dữ liệu thành 1 (STOP SIGNAL)
			input_var = SDATA; // Đặt pin cổng vào HiZ
		}

void i2c_write (unsigned char output_data)
{
	unsigned char index;

	for (index = 0; index <8 8="" bit="" d="" font="" g="" i2c="" i="" index="" n="" ng="" t="">
	{
		SDATA = ((output_dat A & 0x80) 1: 0);
        output_data << = 1; // byte i trượt một chút
		SCLK = 1; // datetime đến đường dẫn I2C
		SCLK = 0;					
	}

	index = SDATA; // đặt pin dữ liệu ở chế độ đọc
	SCLK = 1; // ACK từ đường dẫn I2C theo chiều kim đồng hồ
	SCLK = 0;					
}
		unsigned char i2c_read (void)
		{
			unsigned char index, input_data;
   			index = SDATA; // đặt chốt dữ liệu vào chế độ đọc

			input_data = 0x00;
			for (index = 0; index <8 8="" bit="" d="" font="" g="" i2c="" i="" index="" n="" ng="" t="">
			{
				input_data << = 1; // byte i thay đổi 1 bit
				SCLK = 1; // đến đường dẫn I2C theo giờ
      			input_data | = SDATA; // Nhận dữ liệu từ đường dẫn I2C
				SCLK = 0;	
			}
   		return input_data;
		}

float basla1 (void)
	{
	giá trị float = 0;
	int int1 = 0;
	int alinan2 = 0;
	i2c_start (); i2c_writ A (0x90); i2c_writ A (0x22); i2c_stop ();
	i2c_start (); i2c_writ A (0x90); i2c_writ (0xea); i2c_stop ();
	i2c_start (); i2c_writ A (0x90); i2c_writ A (0xAA); i2c_start (); i2c_writ A (0x91); Imported1 = i2c_read (); i2c_start (); i2c_writ A (0x91); alinan2 = i2c_read (); i2c_stop ();
	if (received1> = 0x80) received1- = 0xff + 1;
	nếu (alinan2 == 0x80) giá trị = alinan1 + 0,5;
	khác
	value = Imported1;
	chậm trễ (200);
	giá trị trả lại;
	}

float basla2 (void)
	{
	float deger2 = 0;
	int int3 = 0;
	int int4 = 0;
	i2c_start (); i2c_writ A (0x92); i2c_writ A (0x22); i2c_stop ();
	i2c_start (); i2c_writ A (0x92); i2c_writ (0xea); i2c_stop ();
	i2c_start (); i2c_writ A (0x92); i2c_writ A (0xAA); i2c_start (); i2c_writ A (0x93); alinan3 = i2c_read (); i2c_start (); i2c_writ A (0x93); alinan4 = i2c_read (); i2c_stop ();
	if (received3> = 0x80) received3- = 0xff + 1;
	nếu (alinan4 == 0x80) deger2 = alinan3 + 0,5;
	khác
	value2 = alinan3;
	chậm trễ (20);
	return value2;
	}
char d [40];
void chính (void)
{	
	float độ1;
	float độ2;
	lcdac ();
		basla1 derece1 = ();
		basla2 derece2 = ();
		datakomut (1);
		sprintf (d, "1,1% C, 1,1% C", loại1, loại 2);
		dataver sự (d, 1000);
		chậm trễ (2000);
		
}
Dự án được chuẩn bị bởi: Şenol KAHRAMAN Tập tin AT89C51 và DS1621 Nhiệt độ cảm biến Nhiệt kế
Tệp tải xuống danh sách LINK (ở định dạng TXT) link-3399.zip mật khẩu-pass: 320volt.com
Cảm ơn bạn

Post a Comment

[disqus] [facebook] [blogger]

MKRdezign

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget
Hỗ trợ trực tuyến