Mình tình cờ biết được có giao thức truyền và điều khiển qua giao tiếp 1 dây, thấy có nhiều ứng dụng rất hữu ích vì nó có thể giảm chi phí và độ phức tạp khi thiết kế mạch. Đọc mãi datasheet của mấy con 1-wire và cả mấy bản hướng dẫn search mà không hiểu được làm sao có thể qui định ID cho từng con và các con slave tránh được xung đột trên đường truyền. Ai đã từng làm hay tìm hiểu về giao thức này, có thể cho xin chút chia sẻ được không ?
Thông báo
Collapse
No announcement yet.
[UNI/O] Giao tiếp 1 dây (1-wire interface)
Collapse
X
-
Ờ hơ, cuối cùng cũng hiểu sơ sơ vài vấn đề, hóa ra ID của mỗi con đc nhà sản xuất khắc sẵn trong chip,mình chỉ cần đọc và sử dụng giá trị đó là đc.
Lúc đầu không hiểu rõ tưởng là chỉ 1 bus mà có thể định địa chỉ cho từng con trên một bus (cứ nghĩ mãi làm thế quái nào đc ?!)
Mình tải file đã search đc lên, anh em ai có hứng thì tìm hiểu. Quả thật là code thì đầy, nhưng mà ko hiểu thì cũng chịu ! Giờ thì yên tâm rùiAttached Files
-
Nguyên văn bởi thientaisodo Xem bài viếtỜ hơ, cuối cùng cũng hiểu sơ sơ vài vấn đề, hóa ra ID của mỗi con đc nhà sản xuất khắc sẵn trong chip,mình chỉ cần đọc và sử dụng giá trị đó là đc.
Lúc đầu không hiểu rõ tưởng là chỉ 1 bus mà có thể định địa chỉ cho từng con trên một bus (cứ nghĩ mãi làm thế quái nào đc ?!)
Mình tải file đã search đc lên, anh em ai có hứng thì tìm hiểu. Quả thật là code thì đầy, nhưng mà ko hiểu thì cũng chịu ! Giờ thì yên tâm rùi
Bạn có làm mạch đo nhiệt độ dùng ds1820 với 8951 chưa, Mình rất muốn làm cái này nhưng kien thức của mình cũng ít lắm, cũng chỉ biết chút xíu thôi, nếu bạn đã nghiên cứu và làm qua rồi, bất cứ mạch gì dùng chuẩn 1 wire này cũng được, xin hướng dẫn lại giứp mình,mình cảm ơn ban nhiều.
Comment
-
KHông biết các bạn đã làm được với con này chưa, mình có thư viện cho con này rồi, mình thấy con này hay phết, tuy đắt một chút nhưng mà nhạy, chính xác và khả năng mở rộng cao, gửi các bạn lib con này, khi cắm con này vào mạch, chỉ cần search rom của nó, ghi lại 8bytes địa chỉ và dùng hàm read_multi_temp(* địa chỉ rom) là nó trả về.
Trong file đính kèm có cả thư việ lcd luôn, nhưng mà làm với pic, mình lâu lắm ko dùng 89 nên ko có, nếu bạn nào có thể dịch code c ra cho các con khác thì ok.
good luck!Attached Files
Comment
-
Chào các bạn!
Mình mới vào chuyên ngành nên hơi bỡ ngỡ một chút. Mình đang tìm hiểu về giao thức onewire. Tình cờ đọc trong diễn đàn có bài biết về con DS18B20 này. Mình đọc code mà không hiểu lắm. Dưới đây là đoạn code của nó:
//chuong trinh con cho ds18b20
#include<reg8252.h>
#include<stdio.h>
sbit DQ = P2^0; // connect with DS1820 Data pin
void DelayMs(unsigned int count)
{ // mSec Delay 11.0592 Mhz
unsigned int i; // Keil v7.5a
while(count) {
i = 115;
while(i>0) i--;
count--;
}
}
void DelayUs(int us)
{
int i;
for (i=0; i<us; i++);
}
// Reset DS1820
bit ResetDS1820(void)
{
bit presence;
DQ = 0; //pull DQ line low
DelayUs(29); // leave it low for about 490us
DQ = 1; // allow line to return high
DelayUs(3); // wait for presence 55 uS
presence = DQ; // get presence signal
DelayUs(25); // wait for end of timeslot 316 uS
return(presence); // presence signal returned
} // 0=presence, 1 = no part
// Read one bit from DS1820
bit ReadBit(void)
{
unsigned char i=0;
DQ = 0; // pull DQ low to start timeslot
DQ=1;
for (i=0; i<3; i++); // delay 17 us from start of timeslot
return(DQ); // return value of DQ line
}
// Write one bit to DS1820
void WriteBit(bit Dbit)
{
unsigned char i=0;
DQ=0;
DQ = Dbit ? 1:0;
DelayUs(5); // delay about 39 uS
DQ = 1;
}
// Read 1 byte from DS1820
unsigned char ReadByte(void)
{
unsigned char i;
unsigned char Din = 0;
for (i=0;i<8;i++)
{
Din|=ReadBit()? 0x01<<iin;
DelayUs(6);
}
return(Din);
}
// Write 1 byte
void WriteByte(unsigned char Dout)
{
unsigned char i;
for (i=0; i<8; i++) // writes byte, one bit at a time
{
WriteBit((bit)(Dout & 0x1)); // write bit in temp into
Dout = Dout >> 1;
}
DelayUs(5);
}
// Read temperature
void ReadTemp(unsigned char * buff)
{
unsigned char n;
EA=0; // disable all interrupt
ResetDS1820();
WriteByte(0xcc); // skip ROM
WriteByte(0x44); // perform temperature conversion
while (ReadByte()==0xff); // wait for conversion complete
ResetDS1820();
WriteByte(0xcc); // skip ROM
WriteByte(0xbe); // read the result
for (n=0; n<9; n++) // read 9 bytes but, use only one byte
{
buff[n]=ReadByte(); // read DS1820
}
EA=1;
}
Còn đây là chuơng trình chính
#include<reg8252.h>
#include<stdio.h>
#include<ds1820.h>
unsigned char MyTemp[9];
// Main program
void main(void)
{
unsigned char tp,tpd,i;
while(1)
{
ReadTemp(&MyTemp[0]);
tp = MyTemp[0] >> 1;
tpd = ((MyTemp[0] >> 1)&1) ? 5:0;
DelayMs(200);
}
}
Thắc mắc của mình là sau khi chạy chuơng trình, giả sử nhiệt độ đo được là 38 độ thì các biến tp và tpd có giá trị bằng bao nhiêu?
Cám ơn các bạn!
Comment
-
Nguyên văn bởi techfirepro Xem bài viếtanh cho em xin số điện thoại của anh đc ko ạ?
poohnhonha@gmail.com
à, nói lun là mình dùng codevision, nên nó được hỗ trợ hàm gần như toàn bộ cho cảm biến này , nếu bạn cũng dùng chương trình này thì nên đọc kỹ phần HELP(F1) của ch trình, nó ghi rất dễ hiểu và cụ thể, nếu làm không được nữa thì mail cho mình những thắc mắc của bạn, mình sẽ giúp hết khả năng có thể
chúc bạn thành công!
Comment
-
-
Nguyên văn bởi thientaisodo Xem bài viếtHic hic, hình như chẳng có ai có hứng thú tìm hiểu chuẩn này thì phải, cuối cùng sau mấy ngày lọ mọ vừa code vừa đọc vừa tra từ điển thì cũng ok rùi , ngủ phát đã
bằng chuẩn giao tiếp modbus rtu trên rs485.
thì lúc mình đọc nhiệt độ DS18B20 ở slave thì có dùng giao tiếp ONE WIRE để truyền dữ liệu nhiệt độ về slave không anh nhỉ?
Comment
Bài viết mới nhất
Collapse
-
bởi nguyendinhvanỞ đây thì cũng chỉ có mấy cái máy tập gym là cùng, vào Nhà máy thì không đủ tuổi, mà bài thực hành thì không đủ cơm trưa.
Mà mấy cái máy gym thì cần giải pháp đồng bộ tốt hơn là biện pháp chắp vá....-
Channel: Đặt hàng
Hôm qua, 23:12 -
-
Trả lời cho Mạch tự động bật nguồnbởi nguyendinhvanMấy cái hệ thống Minh Thông đó là tôi tránh xa.
Vì một ngày mình bấm nút La- bô mấy lần, bấm vào những giờ nào nó cũng lưu vào datalog.
Dễ lộ bảo mật.
...-
Channel: Điện tử gia dụng
Hôm qua, 23:00 -
-
Trả lời cho Mạch tự động bật nguồnbởi vi van phamĐinh Vặn và Nhà Thùng ngồi uống bia thì cúp điện. Đinh Vặn vào trạng thái stanby, cầm ly bia mà không uống được. Đến khi có điện, cảm biến của Đinh Vặn phát huy chức năng, cầm chai bia tu 1 hơi.
Nhà Thùng vào trạng thái stanby,...-
Channel: Điện tử gia dụng
Hôm qua, 07:47 -
-
Trả lời cho Mạch tự động bật nguồnbởi nhathung1101Lão hôm nay uốn mấy lọ? Làm tôi đọc bài của lão toát cả mồ hôi, mãi khi nhìn sơ đồ mới hiểu....
Aiza... Lão lại đi về thời 0.4 rồi! Giờ cảm biến và trợ lý và thiết bị có đầy...
Tôi về đến Pháp Vân, gọi...-
Channel: Điện tử gia dụng
25-12-2024, 23:30 -
-
bởi nguyendinhvanĐa số các đồ điện là cứ có điện là sẽ hoạt động.
Nhưng ngày nay, nhiều thiết bị điện có điều khiển không tự hoạt động khi có điện nguồn. Máy chỉ ở chế độ stanby, tới khi người sử dụng nhấn phím power.
Ví dụ...-
Channel: Điện tử gia dụng
25-12-2024, 21:02 -
-
bởi nhathung1101Muốn đặt gì thì cũng phải có thông tin cơ bản. Việc nhỏ thế này mà phải dấu giếm thì người lớn không thèm làm đâu.
Cho bạn 3 ngày, không là sẽ xóa.-
Channel: Đặt hàng
22-12-2024, 22:02 -
-
Trả lời cho Hỏi cách điều chế xungbởi nhathung1101Schmit Trigger là chuẩn với điều kiện rise > 0,8V.
Bí thì dùng vi với tích gì đó, miễn đừng nói phân kẻo chó ở đây lại sủa nhặng.-
Channel: Kỹ thuật điện tử tương tự
22-12-2024, 21:57 -
-
bởi trungautMình cần đặt hàng thiết kế chế tạo mạch nghịch lưu 3 pha để cài đặt các thuật toán điều khiển động cơ FOC, DTC, ... Xin liên hệ trungaut@gmail.com để bàn chi tiết. Xin cảm ơn diễn dàn đăng tin!
-
Channel: Đặt hàng
22-12-2024, 14:27 -
-
Trả lời cho Thắc mắc về nguồn tổ ong 12vbởi tuyennhanCách ly dây điện vào , bộ nguồn và đèn khỏi khung xe thì có rò thật cũng không lo bị giật .
-
Channel: Điện tử dành cho người mới bắt đầu
21-12-2024, 08:56 -
Comment