Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 12 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
12
Dung lượng
430,33 KB
File đính kèm
Do an giao tiep DS18B20 + PIC 16F877A.rar
(328 KB)
Nội dung
HOÀNG KHÁNH THÂN GIAO TIẾP VỚI DS18B20 DÙNG PIC16F887 Xin chào tất bạn, hôm chia với bạn cách thức đo nhiệt độ dùng cảm biến nhiệt độ DS18B20 hiễn thị lên LCD16x02. Cảm biến trả giá trị nhiệt độ theo dạng số, có nghĩa không cần phải chuyển đổi ADC cảm biến LM35 mà cần đọc giá trị mà DS18B20 trả xuất LCD xong. Để đọc giá trị nhiệt độ mà cảm biến trả về, dùng vi điều khiển (vđk) để giao tiếp với cảm biến theo chuẩn 1-dây (onewire). Đề tài không mẽ cả. Trước đây, bắt đầu giao tiếp với DS18B20 gặp không khó khăn, code mạng nhiều viết CCS nên thực đọc không hiểu lắm. Bí đành đọc datasheet, vốn tiếng anh hạn hẹp nên vừa đọc vừa tra từ thành vất vã. I. Đầu tiên, xin nói cảm biến DS18B20. 1.1. Vài lời DS18B20 Theo nguồn tin xác datasheet nhà sản xuất DS18B20 có mã định danh 64 bit chứa nhớ ROM chip (on chip), giá trị nhị phân khắc tia laze. Vì bạn dùng nhiều cảm biến để đo nhiệt độ nhiều nơi cần vđk để đọc nhiệt độ được. dùng cảm biến nên không cần quan tâm đến mã địa làm gì. Thêm số thông tin từ datasheet để bạn tham khảo: • Sử dụng giao diện dây nên cần có chân để truyền thông. • Có thể đo nhiệt độ khoảng -55 ÷ +125 oC.Với khoảng nhiệt độ -10°C ÷ +85°C độ xác ±0.5°C.Có chức cảnh báo nhiệt độ vược qua giá trị cho trước. • Điện áp sử dụng : ÷ 5.5 V,có thể cấu hình mã hóa nhiệu độ từ ÷ 12 bit số bit lớn độ xác cao hơn.Thời gian chuyển đổi nhiệt độ tối đa 750ms cho mã hóa 12 bit • Dòng tiêu thụ chế độ nghỉ cực nhỏ. • Nếu cấu hình cho DS18B20 theo 9,10,11,12 bit ta có độ xác tương ứng : 0.5°C , 0.25°C ,0.125°C, 0.0625°C.Theo mặc định nhà sản xuất không cấu hình chế độ chuyển đổi tự cấu hình 12 bit. Cảm biến DS18b20 thường sử dụng gồm có chân: VCC, GND, DATA hình dưới: ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN Trong đó: Vdd chân cấp nguồn từ ÷ 5.5 VDC, thông thường VDC nguồn với vđk. GND chân nối mass VDC DQ chân tín hiệu, chân nối với vđk để giao tiếp. N.C chân not connect có nghĩa không kết nối, để trống. 1.2. Cách kết nối DS18B20 với vđk ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN Để cho cảm biến làm việc cần kết nối sau, theo nhà sản xuất có cách kết nối, bạn xem hình: Cách 1: cách dùng Cách 2: cách hay dùng nhất. Cách 3: cách dùng 1.3. Các tập lệnh DS18B20 ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN - READ ROM (33h) Cho phép đọc byte mã khắc laser ROM, bao gồm: bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, bit kiểm tra CRC. Lệnh dùng bus có cảm biến DS1820, không xảy xung đột bus tất thiết bị tớ đáp ứng. - MATCH ROM (55h) Lệnh gửi với 64 bit ROM tiếp theo, cho phép điều khiển bus chọn cảm biến DS1820 cụ thể bus có nhiều cảm biến DS1820 nối vào. Chỉ có DS1820 có 64 bit ROM trung khớp với chuỗi 64 bit vừa gửi tới đáp ứng lại lệnh nhớ tiếp theo. Còn cảm biến DS1820 có 64 bit ROM không trùng khớp tiếp tục chờ xung reset. Lệnh sử dụng trường hợp có cảm biến dây, trường hợp có nhiều cảm biến dây. - SKIP ROM (CCh) Lệnh cho phép thiết bị điều khiển truy nhập thẳng đến lệnh nhớ DS1820 mà không cần gửi chuỗi mã 64 bit ROM. Như tiết kiệm thời gian chờ đợi mang hiệu bus có cảm biến. - SEARCH ROM (F0h) Lệnh cho phép điều khiển bus dò tìm số lượng thành viên tớ đấu vào bus giá trị cụ thể 64 bit ROM chúng chu trình dò tìm. - ALARM SEARCH (ECh) Tiến trình lệnh giống hệt lệnh Search ROM, cảm biến DS1820 đáp ứng lệnh xuất điều kiện cảnh báo phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo định nghĩa giá trị nhiệt độ đo lớn giá trị TH nhỏ giá trị TL hai giá trị nhiệt độ cao nhiệt độ thấp đặt ghi nhớ cảm biến. Sau thiết bị chủ (thường vi điều khiển) sử dụng lệnh ROM để định địa cho cảm biến dây đấu vào bus, thiết bị chủ đưa lệnh chức DS1820. Bằng lệnh chức thiết bị chủ đọc ghi vào nhớ nháp (scratchpath) cảm biến DS1820. khởi tạo trình chuyển đổi giá trị nhiệt độ đo xác định chế độ cung cấp điện áp nguồn. Các lệnh chức mô tả ngắn gọn sau: - WRITE SCRATCHPAD (4Eh) Lệnh cho phép ghi byte liệu vào nhớ nháp DS1820. Byte ghi vào ghi TH (byte nhớ nháp) byte thứ hai ghi vào ghi TL (byte nhớ nháp). Dữ liệu truyền theo trình tự bit có ý nghĩa bit có ý nghĩa giảm dần. Cả hai byte phải ghi trước thiết bị chủ xuất xung reset có liệu khác xuất hiện. - READ SCRATCHPAD (BEh) Lệnh cho phép thiết bị chủ đọc nội dung nhớ nháp. Quá trình đọc bit có ý nghĩa nhấy byte tiếp tục byte rhứ (byte – CRC). Thiết bị chủ xuất ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN xung reset để làm dừng trình đọc lúc có phần liệu nhớ nháp cần đọc. - COPYSCRATCHPAD (48h) Lệnh copy nội dung hai ghi TH TL (byte byte 3) vào nhớ EEPROM. Nếu cảm biến sử dụng chế dộ cấp nguồn l bắt đầu việc đo. - CONVERT T (44h) Lệnh khởi động trình đo chuyển đổi giá trị nhiệt độ thành số (nhị phân). Sau chuyển đổi giá trị kết đo nhiệt độ lưu trữ ghi nhiệt độ byte nhớ nháp Thời gian chuyển đổi không 200 ms, thời gian chuyển đổi thực lệnh đọc giá trị đọc 0. - READ POWER SUPPLY (B4h) Một lệnh đọc tiếp sau lệnh cho biết DS1820 sử dụng chế độ cấp nguồn nào, giá trị đọc cấp nguồn đường dẫn liệu cấp nguồn qua đường dẫn riêng. Đối với này, cần quan tâm đến hai lệnh là: read write. II. Bây Vi Điều Khiển Đối với vđk, bạn dùng hãng nào, được. Ở dùng PIC16f887 MICROCHIP. Phần mềm viết code MPLAB-IDE trình biên dịch Hi-Tech C. Như phần cứng xong, cần viết code được. III. Cuối phần viết code Code để giao tiếp với DS18B20 không khó lắm, bạn chịu khó theo giỏi. 3.1. Khởi tạo DS18B20 Đây sơ đồ mà nhà sản xuất cho biết cách reset khởi tạo DS18B20, có đầy đủ datasheet. ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN Theo đó, để reset khởi tạo DS18B20 cần: khởi tạo chân DQ (là chân I/O vđk, chân nối với chân DQ DS18B20. Ví dụ dùng chân RA4) ngõ ra, sau set chân mức “0” 480µs, sau khởi tạo chân DQ ngõ vào delay khoảng 480µs. ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN Các bạn xem code: void onewire_reset() { TDQ=0; // khởi tạo chân DQ ngõ DQ = 0; //set DQ mức “0” __delay_us(500); //chờ 480µs TDQ=1;DQ=1; // khởi tạo chân DQ ngõ vào __delay_us(500); //chờ 480µs } ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN 3.2. Viết lệnh xuống DS18B20 Để gửi lệnh xuống DS18B20 ta xem sơ đồ sau: Như vậy, để ghi mức “0” cần cho chân DQ vđk xuống mức “0” 60µs lớn 120µs. Còn để ghi mức “1” 1µs < TREC < ∞. TREC thời gian ghi. Vậy thời gian ghi vô nên lấy chung thời gian cho hai mức logic 60 ÷ 120µs. Đây code: void write_byte(unsigned char data) { unsigned char i=0; //khai báo biến i cho vòng lặp for for (i=8; i>0; i--) //dùng vòng lặp for để viết 8bit xuống DS18B20 { TDQ=0; //DQ ngõ DQ = 0; //set DQ mức “0” DQ = (data&0x01); //so sánh liệu để viết “0” “1” xuống DS18B20 ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN __delay_us(60); //chờ khoảng thời gian để DS18B20 ghi mức logic DQ = 1; // set DQ mức “1” data>>=1; //chuyển qua bit //lặp lần ghi 8bit } } 3.3. Đọc giá trị nhiệt độ từ DS18B20 Đọc giá trị giống ghi, bạn xem hình: Các bạn xem code int read_byte() { unsigned char i=0; unsigned char data = 0; for (i=8;i>0;i--) { ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page HOÀNG KHÁNH THÂN TDQ=0; DQ = 0; data>>=1; DQ = 1; TDQ=1;DQ=1; //DQ ngõ vào if(DQ) data|=0x80; __delay_us(120); } return(data); //trả giá trị data } Như xong hàm để giao tiếp với DS18B20. Bây tập hợp chúng lại để tạo thành hàm vừa khởi tạo, ghi, đọc tình kết luôn. Các bạn xem code: float ds18b20_read() { unsigned char busy=0, temp1, temp2; int temp3; float result; onewire_reset(); write_byte(0xCC); write_byte(0x44); //Skip ROM, address all devices //Start temperature conversion __delay_us(200); onewire_reset(); write_byte(0xCC); //Skip ROM, address all devices ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page 10 HOÀNG KHÁNH THÂN write_byte(0xBE); //Read scratchpad temp1 = read_byte(); temp2 = read_byte(); temp3 = (temp2*256+temp1); result = (float) temp3 / 16.0; __delay_ms(200); //Calculation for DS18B20 with 0.1 deg C resolution // ?????? return(result); } Những câu lệnh như: Write_byte(0xCC); bạn quay ngược lên trên, mục “1.3. Các tập lệnh DS18B20” để xem 0xCC lệnh nha. Như xong, cần viết thêm hàm main vđk làm việc. Đây hàm main: void main() { lcd_init(); // lcd_gotoxy(0,0); printf("\fHOANG KHANH THAN"); __delay_ms(1000); lcd_gotoxy(0,1); printf(" DH-SPKT"); __delay_ms(2500); // lcd_gotoxy(0,0); printf("\f"); float temperature; ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page 11 HOÀNG KHÁNH THÂN while(1) { temperature=ds18b20_read(); lcd_gotoxy(0,0); printf("NHIET DO: %3.2f",temperature); } } Về phần hiển thị lên LCD bạn tự tham khảo tải source code tại: http://www.mediafire.com/?bjjiq3886bybqr0 Như kết thúc phiên giao dịch với DS18B20 cách thành công tốt đẹp. Chúc bạn thành công. Mọi ý kiến đóng góp hay thắc mắc bạn gửi vào email: khanhthan.hoang@gmail.com thân ái! ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page 12 [...]... temperature; ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP-HCM Page 11 HOÀNG KHÁNH THÂN while(1) { temperature =ds18b20_ read(); lcd_gotoxy(0,0); printf("NHIET DO: %3.2f",temperature); } } Về phần hiển thị lên LCD các bạn tự tham khảo hoặc tải source code tại: http://www.mediafire.com/?bjjiq3886bybqr0 Như vậy là kết thúc phiên giao dịch với DS18B20 một cách thành công tốt đẹp Chúc các bạn thành công Mọi ý kiến đóng góp hay thắc... read_byte(); temp2 = read_byte(); temp3 = (temp2*256+temp1); result = (float) temp3 / 16.0; delay_ms(200); //Calculation for DS18B20 with 0.1 deg C resolution // ?????? return(result); } Những câu lệnh như: Write_byte(0xCC); các bạn quay ngược lên trên, mục “1.3 Các tập lệnh của DS18B20 để xem 0xCC là lệnh gì nha Như vậy là xong, chỉ cần viết thêm hàm main để cho vđk làm việc Đây là hàm main: void main() . THUẬT TP-HCM Page 1 GIAO TIẾP VỚI DS18B20 DÙNG PIC16F887 Xin chào tất cả các bạn, hôm nay tôi sẽ chia sẽ với các bạn cách thức đo nhiệt độ dùng cảm biến nhiệt độ DS18B20 hiễn thị lên LCD16x02 nguồn với vđk. GND là chân nối mass 0 VDC DQ là chân tín hiệu, chân này nối với vđk để giao tiếp. N.C là chân not connect có nghĩa là không kết nối, để trống. 1.2. Cách kết nối DS18B20 với. code Code để giao tiếp với DS18B20 cũng không khó lắm, các bạn chịu khó theo giỏi. 3.1. Khởi tạo DS18B20 Đây là sơ đồ mà nhà sản xuất chỉ cho chúng ta biết cách reset và khởi tạo DS18B20, nó