PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 20-05-2011, 10:27 PM   #1
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Question Mạch chuyển đổi RS232<=>RS485 tự động chuyển mạch

Em đang làm đồ án tốt nghiệp có liên quan tới truyền thông qua mạng RS485..Em có làm mạch chuyển đổi RS232<=>RS485 của anh HoangLongU bên ĐTVN..nhưng hình như nó không chạy,anh nào có kinh nghiệm hay đã làm mạch này rồi,hoặc có mạch chuyển đổi khác có thể giúp em được không..em đang cần gấp lắm..

Đây là mạch của anh HoangLongU :
For PC:
-Mạch này con 75176 chân 8 nối nguồn,chân 5 nối mass..không biết tại sao anh HoangLongU không vẽ ra nữa...

For MCU:
Mạch này điện trở 120 cho trạm cuối..còn các trạm giữa thì không có.

Em đã tiến hàn và test 2 mạch này.Nhưng khi vừa cấp nguồn thì con LED RxD đã sáng....
Mong các anh giúp đở..Em chân thành cảm ơn.
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 10:22 AM   #2
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Sao không anh em nào giúp mình thế nhỉ ?????
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 12:49 PM   #3
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Ở trên PC bạn thử làm theo mạch này xem (SN75176, SN75LBC184 có thể thay thế cho nhau)
http://users.skynet.be/DCI_Site/dcibus_e.html


Ở dưới vi điều khiển, bạn chỉ cần dùng SN75176 nối trực tiếp vào chân Rx và Tx của VĐK. Tuy nhiên bạn phải dùng thêm 1 chân nữa để điều khiển hướng truyền/nhận. Chân này nối với chân DE và RE của SN75176 (2 chân DE và RE nối với nhau và nối với chân điều khiển hướng truyền/nhận này)
Mỗi khi bạn muốn gửi ra bus, chân vi điều khiển nối với DE và RE phải set lên mức 1 (tham khảo datasheet DE tích cực cao, /RE tích cực thấp); sau mỗi khi gửi dữ liệu ra bus, bạn lại ngay lập tức đặt chân này về mức 0 để nó chờ nhận tín hiệu. Tất nhiên, khi khởi tạo trong hàm main, bạn phải đặt chân điều khiển này ở mức 0 để vi điều khiển có thể nhận dữ liệu

Túm lại:
1. Pin_DE_RE = 1;
2. SendData();
3. Pin_DE_RE = 0;
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 01:06 PM   #4
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Trích:
Nguyên văn bởi nhuythuy View Post
Ở trên PC bạn thử làm theo mạch này xem (SN75176, SN75LBC184 có thể thay thế cho nhau)
http://users.skynet.be/DCI_Site/dcibus_e.html


Ở dưới vi điều khiển, bạn chỉ cần dùng SN75176 nối trực tiếp vào chân Rx và Tx của VĐK. Tuy nhiên bạn phải dùng thêm 1 chân nữa để điều khiển hướng truyền/nhận. Chân này nối với chân DE và RE của SN75176 (2 chân DE và RE nối với nhau và nối với chân điều khiển hướng truyền/nhận này)
Mỗi khi bạn muốn gửi ra bus, chân vi điều khiển nối với DE và RE phải set lên mức 1 (tham khảo datasheet DE tích cực cao, /RE tích cực thấp); sau mỗi khi gửi dữ liệu ra bus, bạn lại ngay lập tức đặt chân này về mức 0 để nó chờ nhận tín hiệu. Tất nhiên, khi khởi tạo trong hàm main, bạn phải đặt chân điều khiển này ở mức 0 để vi điều khiển có thể nhận dữ liệu

Túm lại:
1. Pin_DE_RE = 1;
2. SendData();
3. Pin_DE_RE = 0;
Cảm ơn bạn !
Việc điều khiển hướng IC driver 485 thì mình biết..nhưng quan trọng là trên PC việc đk bằng tín hiệu bắt tay thì mình không biết lập trình như thế nào hết (mới mò VB mà )..với lại có 1 vấn đề nữa làm sao để mình biết data đã đi hết mà đảo hướng IC driver đây.(cả trên PC lẫn VĐK luôn).nếu không thì data sẽ bị mất..hay phải quy định 1 khoảng delay,,.phải chăng là có 1 cờ kiểm tra nào đó mà mình ko biết..Nên mình muốn làm mạch tự động đổi hướng truyền nhận để dễ dàng cho việc lập trình hơn...
Mong các bạn giúp đỡ
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 12:58 PM   #5
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Mình quên là trên PC, phải bổ xung lệnh điều khiển chân điều khiển Request to Send RTS (pin 7). Cách điều khiển chân này tương tự như điều khiển chân DE, /RE phá dưới VXL (nhưng nhớ là MAX232 có tác dụng đảo tín hiệu Negative của MAX232 tương ứng với + của SN75176 và ngược lại
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 09:18 PM   #6
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Bạn có thắc mắc rất hợp lý. Mình đã code phần mềm chạy với một số thiết bị "của Tây" chưa gặp hiện tượng như bạn đã nêu. Lý do theo mình có thể là:

- Phần mềm của mình viết là Modbus Master

- Khi master còn đang phát request, tức là trên bus đang còn có tín hiệu thì slave sẽ không thể phát tín hiệu.

- Khi Master đang còn phát yêu cầu (request), tức là slave chưa nhận hết request thì slave chưa thể hiểu request là gì mà trả lời, nên trên bus sẽ không thể có tín hiệu nào khác ngoài tín hiệu của master.

- Khi chưa nhận hết bản tin request (yêu cầu) từ master thì thiết bị (slave) nhận chưa thể biết phải làm gì, nên nó không gửi tín hiệu gì trên.

- Các slave khác khi chưa có request thì cũng sẽ không có respond, nên trên bus chỉ có tín hiệu request từ master
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 09:33 PM   #7
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Mình quên về cách code chân RTS. Đây là đoạn code trên Delphi bạn có thể thực hiện tương tự trên VB hay VC

mcComm.FlushInBuffer();
mcComm.RTS := False;
mcComm.RS485Mode := False;
mcComm.PutString(sRequest);
mcComm.RS485Mode := True;
mcComm.RTS := True;


Mình vừa mò lại bằng VB, có vẻ code như thế này

mcComm.RTSEnable = True
mcComm.Output = sRequest
mcComm.RTSEnable = False
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 09:49 PM   #8
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Cảm ơn bạn rất nhiều !!!
Mình hiểu giao thức Master-Slave này rồi...vậy ở trạm tớ (slave) mình sẽ qui định 1 khoảng delay vừa đủ để cho data truyền đi hết sau đó sẽ đảo hướng MAX485.Mình tính như sau cậu xem có hợp lý không nhé :
tốc độ baud=9600;thì 1s truyền được 1200 byte..frame truyền của mình gồm 10 byte vậy mình sẽ delay 1 khoảng là 8.3 ms (mình sẽ chọn 10ms cho an toàn)..như vậy sau 10ms mình sẽ đảo hướng truyền sang nhận...
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 10:16 PM   #9
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Theo mình ko cần delay.

Lý do là bên slave mà chưa gửi xong respond cho master thì master cũng chưa hiểu slave nói gì. Nên nó sẽ vẫn còn đợi cho đến khi nhận xong toàn bộ respond từ slave (vì sau khi nhận xong hết master mới tính được CRC và hiểu Slave gửi respond đúng hay không). Vậy là chỉ khi nào slave gửi xong respond thì master mới phân tích và hiểu được respond đó rồi sau đó nó mới tiếp tục gửi request cho slave khác hoặc chính slave đó
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 10:18 PM   #10
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Mình vừa gửi bạn cách tính CRC cho Modbus RTU trong thread bạn hỏi về CRC
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 10:27 PM   #11
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Hình như bạn vẫn chưa hiểu ý mình thì phải,
ví dụ như thế này nhé :
daohuong=1;
printf("abcdef");
daohuong=0;

Nếu bạn viết như vậy thì đảm bảo sẽ không truyền hết được data..vì khi bạn gửi 1 byte đi thì byte đo sẽ được đưa vào bộ đệm rồi CPU sẽ tự động đẩy đi..còn viết như trên thì data chưa được đẩy đi hết thì ta đã đảo hưởng max485 như vậy data sẽ bị mất..nên theo mình phải viết :
daohuong=1;
printf("abcdef");
delay_ms(....); //thời gian này để đảm bảo data được đẩy đi hết....
daohuong=0;

Hay có thể mình hiểu sai lệnh printf()...
printf(.....)
lệnh a;
truyền data xong thì mới thực hiện lệnh a....
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 10:56 PM   #12
nhuythuy
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 12
:
Ý của bạn đúng đấy. Mình đã hiểu nhầm ý bạn.

Mình làm như vậy và chưa gặp lỗi bao h nên chủ quan. Có thể phải kiểm tra bộ đệm truyền sau đó mới reset bit điều khiển, như vây mới chắc được.

Ko biết các a e khác đã từng làm hoặc có chiêu gì chia sẻ với nhỉ
nhuythuy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 11:03 PM   #13
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Đúng đấy theo mình chắc phải kiểm tra cờ trong bộ đệm gửi..nếu đã rỗng thì mới đảo hướng IC driver..còn delay chỉ là giải pháp tình thế thôi

gửi "nhuythuy" :mình gửi tin nhắn vào trong hộp thư của cậu rồi đấy...hjjj
stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2011, 11:14 PM   #14
stupid11
Đệ tử 6 túi
 
stupid11's Avatar
 
Tham gia ngày: Dec 2009
Nơi Cư Ngụ: TP.Hồ Chí Minh
Bài gửi: 133
:
Send a message via Yahoo to stupid11
Bạn thử xem mình vẽ cấu trúc mạng RS485 như vậy có được không.
Mình đang phân vân chỗ điện trở chặn đầu cuối..bạn xem qua rồi cho ý kiến nhé..

stupid11 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-06-2012, 01:09 PM   #15
mrtddiep
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 8
:
help help me.cac huynh oi co ai biet con ic tc74a0-5.0 o cho nao ban khong minh kiem o cho nhat tao ma khong thay.chi cho minh voi hay ai co thi de lai cho minh voi. cam on moi nguoi truoc nhe !
mrtddiep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 10:15 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam