Đặc điểm chính của
DS18B20 như sau:
+ Lấy nhiệt độ theo
giao thức 1 dây (1wire)
+ Cung cấp nhiệt độ với
độ phân giải config 9,10,11,12 bit, tùy theo sử dụng. Trong trường hợp không
config thì nó tự động ở chế độ 12 bit.
Thời gian chuyển đổi
nhiệt độ tối đa là 750ms cho mã hóa 12 bit
+Có thể đo nhiệt độ
trong khoảng -55 -> +125°C. Với khoảng nhiệt độ là -10°C to +85°C thìđộ chính xác ±0.5°C,±0.25°C ,±0.125°C,±0.0625°C. theo số bít config.
+ 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 vì nó
có một mã định danh duy nhất 64 bit chứa trong bộ nhớ ROM trên chip (on chip),
giá trị nhị phân được khắc bằng tia laze.
+ Cam bien nhiet do
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.
+ Điện áp sử dụng : 3
– 5.5 V
+ Dòng tiêu thụ tại
chế độ nghỉ rất nhỏ.
II: Lấy nhiệt độ với
ds18b20
a.
Tìm hiểu về các lệnh ROM liên quan đến DS18b20
- READ ROM
(33h)
Cho phép đọc ra 8
byte mã đã khắc bằng laser trên ROM, bao gồm: 8 bit mã định tên linh kiện
(10h), 48 bit số xuất xưởng, 8 bit kiểm tra CRC. Lệnh này chỉ dùng khi trên bus
có 1 cảm biến DS1820, nếu không sẽ xảy ra xung đột trên bus do tất cả các thiết
bị tớ cùng đáp ứng.
- MATCH ROM
(55h)
Lệnh này được gửi đi
cùng với 64 bit ROM tiếp theo, cho phép bộ điều khiển bus chọn ra chỉ một cảm
biến DS1820 cụ thể khi trên bus có nhiều cảm biến DS1820 cùng nối vào. Chỉ có
DS1820 nào có 64 bit trên ROM trung khớp với chuỗi 64 bit vừa được gửi tới mới
đáp ứng lại các lệnh về bộ nhớ tiếp theo. Còn các cảm biến DS1820 có 64 bit ROM
không trùng khớp sẽ tiếp tục chờ một xung reset. Lệnh này được sử dụng cả trong
trường hợp có một cảm biến một dây, cả trong trường hợp có nhiều cảm biến một
dây.
- SKIP ROM
(CCh)
Lệnh này cho phép
thiết bị điều khiển truy nhập thẳng đến các lệnh bộ nhớ của DS1820 mà không cần
gửi chuỗi mã 64 bit ROM. Như vậy sẽ tiết kiệm được thời gian chờ đợi nhưng chỉ
mang hiệu quả khi chỉ có một cảm biến.
- SEARCH ROM
(F0h)
Lệnh này cho phép bộ
điều khiển bus có thể dò tìm được số lượng thành viên tớ đang được đấu vào bus
và các giá trị cụ thể trong 64 bit ROM của chúng bằng một chu trình dò
tìm.
- ALARM SEARCH
(ECh)
Tiến trình của lệnh
này giống hệt như lệnh Search ROM, nhưng cảm biến DS1820 chỉ đáp ứng lệnh này
khi xuất hiện điều kiện cảnh báo trong phép đo nhiệt độ cuối cùng. Điều kiện
cảnh báo ở đây được định nghĩa là giá trị nhiệt độ đo được lớn hơn giá trị TH
và nhỏ hơn giá trị TL là hai giá trị nhiệt độ cao nhất và nhiệt độ thấp nhất đã
được đặt trên thanh ghi trong bộ nhớ của cảm biến.
Sau khi thiết bị chủ
(thường là một vi điều khiển) sử dụng các lệnh ROM để định địa chỉ cho các cảm
biến một dây đang được đấu vào bus, thiết bị chủ sẽ đưa ra các lệnh chức năng
DS1820. Bằng các lệnh chức năng thiết bị chủ có thể đọc ra và ghi vào bộ nhớ
nháp (scratchpath) của cảm biến DS1820. khởi tạo quá trình chuyển đổi giá trị
nhiệt độ đo được và xác định chế độ cung cấp điện áp nguồn. Các lệnh chức năng
có thể được mô tả ngắn gọn như sau:
- WRITE SCRATCHPAD
(4Eh)
Lệnh này cho phép ghi
2 byte dữ liệu vào bộ nhớ nháp của DS1820. Byte đầu tiên được ghi vào thanh ghi
TH (byte 2 của bộ nhớ nháp) còn byte thứ hai được ghi vào thanh ghi TL (byte 3
của bộ nhớ nháp). Dữ liệu truyền theo trình tự đầu tiên là bit có ý nghĩa nhất
và kế tiếp là những bit có ý nghĩa giảm dần. Cả hai byte này phải được ghi
trước khi thiết bị chủ xuất ra một xung reset hoặc khi có dữ liệu khác xuất
hiện.
- READ SCRATCHPAD
(BEh)
Lệnh này cho phép
thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình đọc bắt đầu từ bit có ý nghĩa
nhấy của byte 0 và tiếp tục cho đến byte rhứ 9 (byte 8 - CRC). Thiết bị chủ có
thể xuất ra một xung reset để làm dừng quá trình đọc bất kỳ lúc nào nếu như chỉ
có một phần của dữ liệu trên bộ nhớ nháp cần được đọc.
- COPYSCRATCHPAD
(48h)
Lệnh này copy nội
dung của hai thanh ghi TH và TL (byte 2 và byte 3) vào bộ nhớ EEPROM. Nếu cảm
biến được sử dụng trong chế dộ cấp nguồn l bắt đầu việc đo.
- CONVERT T
(44h)
Lệnh này khởi động
một quá trình đo và chuyển đổi giá trị nhiệt độ thành số (nhị phân). Sau khi
chuyển đổi giá trị kết quả đo nhiệt độ được lưu trữ trên thanh ghi nhiệt độ 2
byte trong bộ nhớ nháp Thời gian chuyển đổi không quá 200 ms, trong thời gian
đang chuyển đổi nếu thực hiện lệnh đọc thì các giá trị đọc ra đều bằng 0.
- READ POWER SUPPLY
(B4h)
Một lệnh đọc tiếp sau
lệnh này sẽ cho biết DS1820 đang sử dụng chế độ cấp nguồn như thế nào, giá trị
đọc được bằng 0 nếu cấp nguồn bằng chính đường dẫn dữ liệu và bằng 1 nếu cấp
nguồn qua một đường dẫn riêng.
b.
Cách config độ phân giải cho ds18b20
Sơ đồ bộ nhớ của DS18B20:
Các byte thứ 5 của bộ
nhớ đệm có chức năng đăng ký cấu hình (config) cho ds18b20, và các bít được tổ
chức như sau:
Các bit từ 0 đến 4
luôn được đọc giá trị là 1, bít số 7 luôn được đọc giá trị là 0. Cấu hình độ
phân giải cho ds18b20 được quyết định bởi R1 và R0 ta có bảng thiết lập như
sau.
c. Sơ đồ kết nối cảm biến nhiệt ds18b20
- Sơ đồ khi sử dụng một cảm biến.
- Sơ đồ khi mắc nhiều cảm biến. (Chúng ta cũng chỉ cần 1 dây để lấy mẫu nhiệt độ)
d. Đọc nhiệt độ
Khi bắt đầu
chuyển đổi nhiệt độ thì chân DQ sẽ được kéo xuống mức thấp và khi chuyển đổi
xong thì ở mức cao.Như vậy ta sẽ căn cứ vào hiện tượng này để xác định khi nào
chuyển đổi xong nhiệt độ. Lưu ý luôn phải dùng một điện trở tầm 4.7k trở lên
vào chân DQ treo lên nguồn như sơ đồ mắc.
Dưới đây là
một ví dụ mẫu đo nhiệt độ bằng ds18b20 hiển thị LCD các bạn tham khảo sẽ hiểu rõ hơn về sử dụng cảm biến này như thế nào. Đồng thời tham khảo thêm datasheet của
ds18b20.
+ Cách thức hoạt động của cảm biến
Cách giao tiếp với
DS1820 có thể tóm tắt và hiểu nôm na như sau:
Việc đo nhiệt độ của DS1820 theo tôi được
thực hiện theo từng phiên làm việc và mỗi phiên được ngăn cách với
phiên làm việc trước bởi 1 tín hiệu reset và 1 presence pulse. Reset
được xem như quá trình ngăn cách và khởi động lại quá trình đo nhiệt
độ mới, presence pulse giống như tín hiệu báo hiệu cho 8051 biết là
DS1820 đang có mặt và đã sẵn sàng. Ở đây mình thực hiện đo nhiệt độ
và hiển thị đơn giản nhất với 1 con DS1820 thôi. Do đó có thể bỏ qua
các phần : match ROM, search Rom, alarm search, hay read ROM… (các bạn có
thể đọc thêm phần này trong datasheet và thực hiện nhưng với mạch chỉ
đo nhiệt độ thôi thì không cần thiết…)
Reset: đặt chân data xuống mức thấp trong
khoảng 480-960us (dùng 500us là ok)
Đặt chân data lên mức cao trong khoảng
15-60us
Presence pulse: sau khi cho chân đó lên mức
cao tiếp tục chờ 60-240us để bắt tín hiệu mức thấp do DS1820 kéo
xuống trong khoảng thời gian trên. Bắt được tín hiệu này tức là
DS1820 sẵn sàng.
Skip ROM: skip ROM để khỏi mất thời gian
match ROM … vì chỉ có 1 con thôi khi nào xài nhiều con trên 1 đường dây
mới cần match, thực hiện bằng cách nhảy tới chương trình con write và
ghi mã skip ROM (CCh) vào data line.
Write: clear dataline và delay trong 15us
rồi mới đặt bit cần ghi lên và delay 15us nữa, giữa 2 bit cần ghi liên
tiếp phải đặt data line lên mức cao trong 1us và tiếp tục ghi bit tiếp
theo.
Gửi lệnh read scratchpad và đọc dữ liệu
về 2 lần, lần đầu lấy byte thấp (chứa giá trị nhiệt độ lưu lại
trong thanh ghi R3 lát nữa xử lý sau) lần sau lấy byte cao(chứa dấu
của nhiệt độ nếu chỉ đo trong khoảng 0-125 độ thì không cần đọc byte
này), sau đó đọc tiếp 7 lần nữa để địa chỉ đọc trở về ban đầu.
Read: clear data line trong 1us và đọc dữ
liệu về trong vòng 15us giữa 2 lần đọc phải cách nhau <1us (lấy 2us
là được) rồi lại đọc tiếp.
Convert T: trước khi conv phải reset trước,
chờ presence rồi skip ROM, sau đó gửi convert command (44h).
Giờ là lúc xử lý thanh ghi R3 đã lưu
giá trị nhiệt độ. Có nhiều cách xử lý các bạn hãy nghiên cứu khung
dữ liệu của nó và xử lý theo cách riêng để tách giá trị ra. Sau đó
chuyển giá trị thành mã BCD rồi xuất ra led hay LCD tùy ý.
Đó là toàn bộ các bước thực hiện giao
tiếp với DS1820. Chúc các bạn thành công.
Mọi thắc mắc vui lòng liên hệ qua:
Gmail: dienturid@gmail.com