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 chinhnguyen9Sản phẩm này ghi version 2.0 01-2024 MADE IN CHINA nhưng không thấy thương hiệu hình 1
Do 8 chân G của mosfet được đấu song song thành 2 nhóm nên có cùng biên độ xung kích. Nhưng Q1 và Q2 nằm cuối dãy B3;B4 ờ mức nguồn cao nhất do chân Q có điện áp...-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 08:29 -
-
bởi chinhnguyen9
Xem hình có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ....-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 01:15 -
-
Trả lời cho CODE/ROM-dvb-vcd-dvd-mindikaraoke- Máy nạp Rombởi ThaPhong20Mình cần giúp đõ đầu California MIDI-800K
Ngày trc có nghe tin đồn đầu này có thể chạy đĩa DH-3600 nên mua Vol 26 về chạy thử và nó báo góc trái dòng code rồi tự thay nền DH-3600S luôn. Sau khi tự thay nền thì nó tiếp tục báo dòng Code...-
Channel: Thiết bị thu phát MEDIA dân dụng
23-04-2024, 19:24 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi N.T.HIRF460 có chịu được tải 1000W công suất thực không ạ....
-
Channel: Điện tử công suất
23-04-2024, 16:05 -
-
bởi chinhnguyen9Trước đây có thế hệ mạch cân bằng chủ động hoạt động theo nguyên lý so áp giữa 2 cell (hoặc 2 chuỗi) liền kề nếu điện áp này >100mV mach cận bằng sẽ được kích hoạt và sẽ dừng hoạt động cân bằng khi độ chênh điện áp giảm xuống còn 30 mV
Hiện nay có dòng sản phẩm mới gọi là...-
Channel: Hướng dẫn sử dụng diễn đàn
23-04-2024, 07:26 -
-
Trả lời cho Hỏi về mạch công suất bị dò DCbởi vandoanĐiện áp ở A và C được ghim bởi Transistor Q8. chuyện áp ra loa + hay - là do các trans khác bị chập chập bên nào thì thay bên đó.
-
Channel: Điện thanh
20-04-2024, 12:00 -
-
bởi jigokushoujoCó anh chị nào có thể cho em 1 mạch chống ngược cực, chập mạch, khi bị chạm mạch hay ngược cực thì nó sẽ tự động ngắt nguồn,khi không còn chạm thì nó sẽ đóng nguồn lại bình thường. Em có dùng nguồn 12V 75A từ ắc quy . Em cần chụi...
-
Channel: Điện tử dành cho người mới bắt đầu
18-04-2024, 18:24 -
Comment