PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) (http://www.picvietnam.com/forum/forumdisplay.php?f=12)
-   -   Nguyễn Thế Vinh - căn bản lập trình CCS (http://www.picvietnam.com/forum/showthread.php?t=841)

NTVinh 08-05-2006 03:17 PM

Làm thế nào để timeout khi dùng hàm getc() của CCS sau một thời gian nhất định, định trước? GETC() là một hàm mà CCS đã có sẵn trong thư viện của nó, nhiệm vụ của getc() là chờ nhận một ký tự mà ký tự đó được truyền tới từ một đầu cuối khác thông qua công truyền thông nối tiếp UART. Khi dùng hàm này, chúng ta hết sức cẩn trọng bởi cái việc "chờ" một ký tự được coi là hợp lệ. Vấn đề này giải quyết thế nào đây? CCS đã mách rằng, hãy sử dụng hàm khbit(). Sau đây là một ví dụ mà CCS cung cấp để giải quyết vấn đề này:

Code:

short timeout_error;

char timed_getc() {

  long timeout;

  timeout_error=FALSE;

  timeout=0;

  while(!kbhit&&(++timeout<50000))  // 1/2 second

      delay_us(10);

  if(kbhit())

    return(getc());

  else {

    timeout_error=TRUE;

    return(0);

  }

}

Nguyen The Vinh.

NTVinh 08-05-2006 03:29 PM

Cách sử dụng hàm timed_getc()

Code:

char temp;
//...
char timed_getc(){
    //...
}
void main(void){
    //...
    while(1){
        //...
        temp=timed_getc();
        //...
    }
}

Nguyen The Vinh.

NTVinh 08-05-2006 03:37 PM

Vấn đề kỳ tới, mời các bạn cùng tham gia: "Làm thế nào để truyền đi một số thực thông qua cổng truyền thông nối tiếp UART với CCS?"
Nguyen The Vinh.

NTVinh 08-05-2006 03:56 PM

Ví dụ:
Code:

//...
float temp[32];
void main (void)
{
int8 i;
for(i=0;i<32;i++)temp[i]=i;
while(1)
{
//Bây giờ ta muốn truyền temp[0], temp[1],...,temp[i],...,temp[31]
//cho PC. Phải làm thế nào đây. Xin mời các bạn!
}
}

Nguyen The Vinh.

falleaf 09-05-2006 01:34 AM

Mình di chuyển bài của bạn ra đây, vì lý do bạn post bài không đúng luồng.

Rất cám ơn những bài viết của bạn, nếu được, bạn nên viết bài kèm theo các sơ đồ nguyên lý minh họa để người đọc dễ theo dõi.

Chúc vui.

NTVinh 09-05-2006 03:36 PM

Phương án giải quyết vấn đề truyền mảng số thực
 
Code:

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

float temp[32];

void main (void)
{
int8 i;
for(i=0;i<32;i++)temp[i]=i;
while(1)
{
//Bây giờ ta truyền temp[0], temp[1],...,temp[i],...,temp[31] cho PC như sau.
for(i=0;i<128;i++) putc(*(&temp[0]+i));
}
}

Nguyen The Vinh.

NTVinh 09-05-2006 03:39 PM

Vấn đề kỳ tới, mời các bạn cùng tham gia: "Làm thế nào để nhận một mảng số thực thông qua cổng truyền thông nối tiếp UART với CCS?"
Nguyen The Vinh.

ThanhPhuc 10-05-2006 11:19 PM

Theo mình bạn nên dùng thêm 1 hoặc 2 phím để định hướng cho việc truyền dử liệu.Ví dụ phím 1 truyền mảng dử liệu trên,phím 2 dùng cho mục đích khác của chương trình.Như vậy dể kiểm soát hoạt động của chương trình,Theo đoạn code của bạn Pic sẻ liên tục gởi số liệu về PC làm PC có thể chỉ nhận được số liệu đầu tiên.Bạn nên thêm lệnh Delay_ms(x); sau lệnh putc... để PC kịp nhận dữ liệu.

NTVinh 11-05-2006 09:55 AM

Phương án giải quyết vấn đề nhận mảng số thực
 
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

NTVinh 11-05-2006 10:04 AM

Vấn đề kỳ tới, mời các bạn cùng tham gia: "Tạo một lớp liên kết dữ liệu (Datalink layer) trên cơ sở lớp vật lý (Physical layer) là chuẩn truyền thông công nghiệp RS485?"
Nguyen The Vinh.

NTVinh 11-05-2006 10:45 AM

Vài nét về mô hình OSI.
 
ISO (International Standardization Organization) có trụ sở tại Giơnevơ, Thụy sĩ. Năm 1977, ISO được giao trách nhiệm thiết kế một chuẩn truyền thông dựa trên lý thuyết về kiến trúc các hệ thống mở, qua đó thiết kế các mạng máy tính. Mô hình này có tên là OSI (Open System Interconnect).
Mô hình OSI tổ chức các giao thức truyền thông thành bảy lớp. Mỗi lớp giải quyết một phần hẹp của việc truyền thông.

7)Application layer
6)Presentation layer
5)Session layer
4)Transport layer
3)Network layer
2)Data link layer
1)Physical layer

Trong phạm trù của mạng truyền thông công nghiệp nhất là với bus trường thì Physical layer, Data link layer được xây dựng và đã được chuẩn hóa ví dụ Profibus-DP, DA. Các lớp khác không được xây dựng hoặc nếu có thì là chỉ là sự bổ xung nho nhỏ, ví dụ Application layer.

Nguyen The Vinh.

NTVinh 11-05-2006 11:16 AM

Giới thiệu các lớp trong mô hình OSI
 
Lớp 1 : lớp vật lý (physical layer)
Qui định về các tính chất vật lý của hệ thống, chú ý rằng OSI không bắt buộc hay nói cách khác không qui định phải dùng một lớp vật lý cụ thể nào. Tầng vật lý liên quan đến nhiệm vụ truyền dòng bit qua đường truyền vật lý, truy nhập đường truyền vật lý nhờ các phương tiện cơ, điện...
Lớp này định nghĩa vào đặc tính chính của mạng vật lý, bao gồm:
1. Cấu trúc vật lý của mạng.
2. Các định chuẩn cơ học và điện.
3. Mã hoá và định thời gian việc truyền bit.

Lớp 2 : lớp liên kết dữ liệu (data link layer)
Cung cấp phương tiện để truyền thông tin qua liên kết vật lý bảo đảm độ tin cậy. Lớp này qui định về sự đồng bộ hóa, đặc tính của khung dữ liệu, đánh số khung, kiểm tra lỗi, kiểm tra luồng dữ liệu trong quá trình liên lạc.
Lớp nối kết dữ liệu thực hiện các công việc sau:
1. Định địa chỉ các thiết bị trong mạng.
2. Kiểm tra và có thể chỉnh sửa các lỗi truyền thông.
3. Điều khiển truy nhập bus.
...
Các lớp khác không được trình bày ở đây vì mức độ quan trọng của nó trong phạm trù này, cũng như tránh việc gây ra nhiễu người đọc.
Nguyen The Vinh.

NTVinh 11-05-2006 11:40 AM

Một ví dụ về xây dựng lớp vật lý
 
Các bạn xem hình sau. Hình vẽ một trạm thiết bị tham gia trong mạng truyền thông Profibus/RS485, cách ly. Ơ lạ nhỉ, sao không gửi được nhỉ?
Nguyen The Vinh.

ntc 11-05-2006 12:26 PM

Em chưa hiểu rõ lắm về ý định của các bài viết, cũng như các vấn đề có liên quan khác. Anh nói rõ hơn nhé. :D

Anh đang viết về việc xây dựng một hệ thống mở OSI ?? Hay chỉ xây dựng lớp liên kết dữ liệu dựa trên lớp vật lí RS485??

Nếu như vậy thì nó sẽ bao gồm các vấn đề gì nhẩy? Xây dựng cơ chế định địa chỉ, xây dựng cơ chế sửa lỗi, ..., theo các cách như Profibus-DP, DA đã làm ?

Tại sao mình không sử dụng chuẩn Profibus-DP, DA?

Nếu như vậy thì vấn đề này có mối liên quan như thế nào đến hệ thống mở OSI. Nếu anh chỉ đặt vấn đề xây dựng lớp liên kết dữ liệu, thì các giao tiếp chỉ mang tính nội bộ, chứ chưa giao tiếp được với hệ thống OSI, vì nó cần đến các lớp cao hơn. Vấn đề về OSI đặt ra ở đây có tác dụng gì nhẩy. Và tại sao phải tuân theo OSI trong trường hợp này?

Chưa hiểu rõ lắm. Anh giải thích thêm nhé.

Vấn đề này em cũng đang tìm hiểu thôi, theo em biết thì hệ thống OSI tuân theo chuẩn ISO được ứng dụng trong việc trao đổi dữ liệu cho hệ thống máy tính, ngoài ra nó là cơ sở cho các dịch vụ viễn thông (N-ISDN, B-ISDN, ...).

Hì, cái này được đó. Chắc sẽ còn hỏi nhiều. :D

ntc 11-05-2006 12:28 PM

Trích:

Các bạn xem hình sau. Hình vẽ một trạm thiết bị tham gia trong mạng truyền thông Profibus/RS485, cách ly. Ơ lạ nhỉ, sao không gửi được nhỉ?
Anh bấm cái nút "Đổi sang khung lớn", bên đó có cái phần tải file từ máy đó.

NTVinh 12-05-2006 09:48 AM

Thảo luận
 
Hôm nay, mình cũng chưa có ý định viết tiếp vấn đề đã nêu. Mà, muốn dừng lại để cùng trao đổi với ntc cái đã. OSI, bản thân nó là một mô hình qui chiếu cho việc phát triển các hệ thống. OSI nó không phải là một chuẩn truyền thông! Nó cũng chẳng qui định rằng hệ thống của bạn phải dùng lớp vật lý này kia, nó cũng chẳng bắt hệ thống của bạn phải xây dựng lớp liên kết dữ liệu như thế nào cả. Như vậy??? Không có lý do nào bảo rằng một hệ thống A, xây dựng truyền thông dựa trên mô hình OSI, lại có thể giao tiếp được với một hệ thống B cũng xây dựng truyền thông dựa theo mô hình qui chiếu. Tóm lại, OSI chỉ có nhiệm vụ làm cơ sở để đối chiếu hệ truyền thông đã có, cũng như làm cơ sở cho việc xây dựng một hệ thống mới.
Nguyen The Vinh.

ntc 12-05-2006 11:14 AM

Như vậy bản chất của OSI chỉ là một mô hình để đối chiếu thôi. Uh nhỉ. Khi phát triển một hệ thống mới, cũng như nghiên cứu các hệ thống trong thực tế, OSI được dùng làm cở sở để phân tích hệ thống, đúng không anh.

Khi xây dựng một hệ thống, ta sẽ dựa trên OSI để phân tích, rằng có những vấn đề gì cần quan tâm, có những mô hình nào cần xây dựng, có những công việc nào cần làm, dựa theo yêu cầu của từng lớp cụ thể, ví dụ như lựa chọn lớp vật lí phù hợp với hệ thống, chọn cơ chế mã hóa, cơ chế định địa chỉ, cơ chế sửa lỗi, cơ chế truy xuất đối với lớp vật lí và lớp liên kết dữ liệu, các lớp tiếp theo có thể liên quan đến các vấn đề như chọn cơ chế tạo tuyến, cơ chế đóng gói dữ liệu, vân vân và vân vân... Mỗi hệ thống trong thực tế sẽ có nhiều sự lựa chọn và cách xây dựng khác nhau, do đó không thể đảm bảo rằng hệ thống này có thể giao tiếp với hệ thống khác khi cùng xây dựng trên mô hình OSI.

Khi phân tích một hệ thống, các thao tác cũng tương tự: phân tích cấu trúc lớp vật lí, phân tích các cơ chế có liên quan dựa trên hệ tham chiếu OSI 7 lớp như vậy.

Em có thể hiểu được sơ lược các vấn đề anh Vinh muốn đề cập rồi. :D.

Mục đích các bài viết sẽ là xây dựng một mạng truyền thông ứng dụng trong công nghiệp với lớp vật lí được lựa chọn là RS485. Các công việc cần tiến hành sẽ là:

- Phân tích cấu trúc lớp vật lí RS485 để làm cơ sở cho việc xây dựng mạng truyền thông, đồng thời xác định một số cơ chế thích hợp về mã hóa và tốc độ truyền bit phù hợp cho lớp vật lí RS485 (các vấn đề liên quan đến lớp 1).

- Xây dựng một số cơ chế trong lớp 2 cho mạng, các công việc sẽ bao gồm: xây dựng cơ chế định địa chỉ các thiết bị trong mạng, xây dựng cơ chế sửa lỗi và kiểm tra lỗi truyền thông cho mạng, xây dựng cở chế điều khiển truy nhập BUS.

Còn thiếu chỗ nào nữa không anh??

Em sẽ tìm hiểu về RS485 để tham gia luồng này với anh. Mình làm tới nơi tới chốn dzụ này luôn nhá.

:D

NTVinh 17-05-2006 10:50 AM

Xây dựng lớp vật lý trên cơ sở chuẩn RS485
 
Bài viết này tiếp nối cho vấn đề mà tôi đang đề cập, xây dựng một mạng truyền thông công nghiệp, những bài viết trước tôi đã nói về một số các mào đầu: các ví dụ nhỏ cụ thể là các subroutine cũng như giải thuật về việc truyền data định dạng số thực trên cơ sở vi điều khiển PIC (tất nhiên rồi, PIC được lựa chọn vì bài viết này đang nằm trên http://www.picvietnam.com), một số điều vắn tắt về mô hình tham chiếu OSI. Hôm nay, chúng ta sẽ đề cập đến lớp vật lý trên cơ sở chuẩn RS485 một cách chi tiết hơn, tất nhiên, trong bài viết nho nhỏ này thì cũng thật khó để truyền tải được nhiều lắm những vấn đề.
- RS485 là chuẩn truyền thông do EIA đưa ra, có khả năng truyền thông đa điểm trên bus chung duy nhât.
- Cấu hình mạng thông dụng nhất là sử dụng 2 dây dẫn cho việc truyền thông data, trong trường hợp này thì, hệ thống chỉ làm việc trong chế độ truyền thông bán song công (half-duplex). Có thể nói thêm về cấu hình này là, đây là cấu hình mà cho phép ta xây dựng lớp Datalink mềm dẻo hơn (so với cấu hình sử dụng 4 dây dẫn, đề cập ngay sau đây). Một cấu hình mạng khác là sử dụng 4 dây dẫn cho việc truyền thông data, trong trường hợp này thì, hệ thống làm việc trong chế độ truyền thông song công (full-duplex).
- Số lượng thành viên tham gia trong mạng, có thể nói rằng đây chỉ là một con số mang tính thời sự, lên tới 128 thành viên.
- Các qui định về mặt điện học, hay nói cách khác là các thông số quan trọng về mặt điện học của RS485 (có lẽ tôi cũng chỉ muốn đề cập đến nó hơn là các qui định về mặt cơ học..., điều này các bạn có thể tham khảo thêm: ví dụ về giắc nối, vỏ bọc chống nhiều cho cáp truyền thông, loại cáp là cặp dây xoắn...): RS485 sử dụng tín hiệu áp chênh lệch đối xứng trên đôi dây dẫn. Các trở đầu cuối cần được cài vào tại đầu cuối của mạng, điều này sẽ tránh được (triệt tiêu được) các sóng phản hồi trên đường dây dẫn. (Các bạn có thể hiểu rõ hơn về vấn đề sóng tới, sóng phản hồi cũng như tác hại của nó trong lý thuyết đường dây dài). Có lẽ, đấy là các thông số quan trọng trực tiếp liên quan đến việc xây dựng mạng RS485 trên quan điểm của người thiết kế.
Tôi xin giới thiệu một số IC truyền thông RS485 tiêu biểu: 75176, IL485 (con này thì tuyệt cú mèo).
Nguyen The Vinh.

thancongbao 25-05-2006 10:23 PM

Chào Bạn Vinh !!! Tớ cũng khoái cái mảng này !!! Nhưng xem ra cậu vào không được hoan nghênh lắm !!! He he he
Mạng công nghiệp theo mình nghĩ thì không nên tự xây dựng.Trường hợp tự xây dựng chỉ nên dùng khi bạn muốn đào tạo một người nào đó về mạng thôi !!! Hoặc bạn làm một Project nhỏ với các bộ điều khiển của riêng bạn thôi .
Nếu bạn có thời gian thì chao đổi với mình
Thancongbao@gmail.com -> Rất vui vì bạn rất nhiệt tình chia sẻ !!!

thancongbao 25-05-2006 10:35 PM

Không thấy bác nhắc đến chuyện viết OPC hoặc Activex hay DLL thế !!!

thancongbao 25-05-2006 10:40 PM

Mình có một số góp ý
 
Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

float temp[32];

void main (void)
{
int8 i;
for(i=0;i<32;i++)temp[i]=i;
while(1)
{
//Bây giờ ta truyền temp[0], temp[1],...,temp[i],...,temp[31] cho PC như sau.
for(i=0;i<128;i++) putc(*(&temp[0]+i));
}
}

Nguyen The Vinh.


thancongbao 25-05-2006 10:46 PM

Mình có một số góp ý !
 
putc(*(temp+i)); vì trong C temp là con trỏ của mảng.

*(temp+i)=getc();

hpecom 06-06-2006 10:36 AM

Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

Xin anh giải thích:
_ Tại sao anh khai báo mảng 32 phần tử mà khi sử dụng lại dùng tới 128 phần tử?
_ Cú pháp &temp[0] có phải lấy địa chỉ của temp[0]?
_ Và *(&temp[0]+i) là giá trị trong ô nhớ có địa chỉ (&temp[0]+i).
_ Nếu khai báo biến và sử dụng biến như trên thì CCS sẽ xử lý như thế nào? vì trong trường hợp nào sẽ xảy ra lỗi?
Cảm ơn anh rất nhiều!
Mong anh.
hpecom.

hpecom 06-06-2006 10:43 AM

Trích:

Nguyên văn bởi NTVinh
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

Mong anh chỉ bảo:
_ Nếu em muốn truyền một số thực từ máy tính xuống PIC qua RS232 thì có được không?
_ Nếu được mong anh cho em một ví dụ viết trên MS Comm của Visual Basic 6.0.
Cảm ơn anh!
Rất mong anh.
hpecom.

thancongbao 08-06-2006 09:20 AM

trang này hay phết !!!
 
http://www.modbus.pl/downloads.htm
Anh em dùng PIC load về nhé !!! Tham khảo được khối thứ !!!

hoangngoc 26-09-2006 09:19 PM

Giao tiếp máy tính dùng RS485
 
1 Attachment(s)
Em chuẩn bị làm ĐATN về mạng công nghiệp, tuy nhiên em chưa rõ lắm về cách thức chuyển đổi chuẩn RS232->RS485. Em có tham khảo 1 mạch giao tiếp máy tính dùng RS485 như sau, mong các anh giải thích giúp em chức năng của các IC cũng như hoạt động của mạch. Em rất cảm ơn

NTVinh 27-09-2006 10:11 AM

Mạch chuyển đổi RS232/RS485 của bạn có những đặc điểm như sau (mình cứ đọc mạch nguyên lí chỗ nào thì mình viết chỗ ấy nhé, nên có thể sắp xếp không được hay lắm):
* Chuyển đổi về mặt vật lí giữa hai chuẩn RS232 và chuẩn RS485.
* Theo như mạch nguyên lí thì mạng RS485 của em có thể có tới 64 thành viên tham gia, 32 thành viên nối với J7 và 32 thành viên nối với J3 (nếu MAX485 cho phép 32 thành viên, 32x2=64. Chú ý rằng bây giờ có những IC cho phép tới 64 thành viên tham gia trên mạng, và nếu dùng nó thay cho MAX485 thì mạng của bạn cho phép 128 thành viên trên bus). Các thành viên trên mạng sẽ tạo thành một mạng kiểu một Master, giao tiếp song công RS485 4 dây.
* Cách li về điện bởi các opto 6N137, H11AG1.
* Các IC U3 và U4 luôn ở trạng thái truyền vì các chân /R/E, DE luôn ở mức logic 1.
* Các IC U5 và U6 luôn ở trạng thái nhận vì các chân /R/E, DE luôn ở mức logic 0.
* Chương trình viết cho thiết bị mà nối với cổng P1 cần chú ý là ngoài việc thiết lập các vấn đề như tốc độ truyền thông, khung dữ liệu cho một byte... thì cần thiết lập các chân 7 (của jắc P1) lên mức logic 1, và chân 4 (của jắc P1) xuống mức logic 0.
Bình luận về mạch của bạn: nói chung là không hay lắm vì mạch quá phức tạp và chưa có bảo vệ. Bạn có thể thay phần cách li và MAX485 bởi IL485W, con này hay lắm. Nữa là phần bảo vệ, có thể lắp thêm cầu chì (100mA) cho bus RS485, các bảo vệ chống điện áp cao, chống sét...
...
Nguyễn Thế Vinh.

hoangngoc 27-09-2006 08:09 PM

Rất cám ơn anh Vinh đã trả lời sớm như vậy. Cho em hỏi 1 vài câu hỏi sau:

-Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?

-Ở mỗi đầu ra J7 và J3 chỉ có 4 dây, 2 truyền và 2 nhận, như vậy nối với 32 thành viên như thế nào?

-Tại sao phải cách ly về điện và hoạt động cách ly của 2 IC đó như thế nào?

-Em chưa từng biết con IL485, anh có thể cho em thông tin về nó, hoặc nếu có thể, anh cho em xin mạch giao tiếp máy tính dùng IL485 được không ạ?

Cảm ơn anh

(learning electronic, quite hard for a girl !!)

NTVinh 28-09-2006 09:48 AM

Q: Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?
A: Chính xác là MAX485 cho phép 32 thành viên rồi, hôm trước chưa đọc datasheet của nó nên anh mới nói là "nếu MAX485 cho phép 32 thành viên". Như vậy với khả năng như vậy thì toàn bộ mạch của em cho phép 32x2=64 thành viên tham gia (vì mạch của em có tới những hai bộ truyền, hai bộ nhận). Về vấn đề MAX485 cho phép tối đa chỉ có 32 thành viên tham gia trên bus vì lí do dòng điện.
Q:Ở mỗi đầu ra J7 và J3 chỉ có 4 dây, 2 truyền và 2 nhận, như vậy nối với 32 thành viên như thế nào?
A: Câu này trả lời qua mạng thì hơi khó, thôi thì em tham khảo một mạng RS485 kiểu 4 dây sau nhé, lắp như họ là được. http://www.maxim-ic.com/appnotes.cfm...te_number/2116.
Q: Tại sao phải cách ly về điện và hoạt động cách ly của 2 IC đó như thế nào?
A: Vấn đề cách ly về điện để đảm bảo an toàn cho các thành viên trên mạng, hihi, nó như kiểu mình đeo kính khi đi xe máy ý, vẫn nhìn thấy đường đi mà không sợ bị bụi. Hoạt động của hai IC cách ly? Nó liên quan đến vấn đề chuyển đổi Điện~~>Quang và Quang~~>Điện, em có thể tham khảo trong các quyển sách về Điện tử số.
Q: Em chưa từng biết con IL485, anh có thể cho em thông tin về nó, hoặc nếu có thể, anh cho em xin mạch giao tiếp máy tính dùng IL485 được không ạ?
A: Em vào trang này xem nhé, www.nve.com. Con IL485W nó có một số đặc điểm rất hay, ví dụ như tốc độ truyền cao, cách li, tương thích Profibus...
Nguyễn Thế Vinh.

ntc 28-09-2006 08:39 PM

Trích:

-Câu "nếu MAX485 cho phép 32 thành viên" có nghĩa là gì, Max 485 luôn cho phép 32 thành viên hay chỉ đối với mạch này?
Chính xác hơn, là đường truyền RS485 cho phép 32 UL (Unit Load,tạm dịch là đơn vị tải) được gắn vào đường truyền tín hiệu. Các đặc tính của một UL bạn có thể search trên google để nắm thêm.

Việc qui định các đặc tính của một đơn vị tải cho phép người thiết kế linh động hơn trong việc quyết định cho phép gắn bao nhiêu thiết bị trên một đường truyền. Bởi vì các đặc tính tải của các thiết bị trong thực tế rất đa dạng.

Ví dụ, một thiết bị có các đặc tính tải đáp ứng đúng với các yêu cầu của một UL, thì có thể gắn được 32 thiết bị như vậy trên đường truyền. Các chip như MAX485, 75176 được thiết kế để phù hợp với các đặc tính của một đơn vị tải, nên có thể gắn được 32 bộ chuyển đổi như vậy.

Trong một trường hợp khác, một thiết bị có khả năng đáp ứng tốt hơn các yêu cầu của một UL (1/2 UL, 1/4 UL, 1/8 UL, ...), thì cho phép gắn nhiều thiết bị hơn trên đường truyền. Ví dụ như thiết bị có đặc tính tải bằng 1/2 UL thì có thể gắn được 64 thiết bị như vậy, ...

Cái khái niệm UL hơi khó hiểu, bạn cử tìm hiểu thêm rồi mình cùng trao đổi.

hoangngoc 28-09-2006 11:26 PM

Mỗi đường truyền RS485 có thể kết nối với 32 thiết bị. Như vậy giả sử có một mạng gồm < 32 kit điều khiển thì chỉ cần dùng 1 cặp max485 (song công), và 32 kit này sẽ được nối với 4 đường dây đó thông qua một mạch ghép nối trung gian?

Em có tham khảo một mạng chỉ có 2 kit điều khiển nhưng dùng 2 cặp max485 như trong hình. 1 kit nối với J7 và 1 kit nối với J3. Vậy là sao?

ghosts_84 28-09-2006 11:33 PM

các bác có biết lập trình mô phỏng OpenGL ko chỉ cho đệ biết với
Bác nào có tài liệu nào tiếng việt nào ko? chỉ giúp em

hoangminh1234 29-09-2006 03:37 AM

Trích:

Nguyên văn bởi NTVinh (Post 2903)
Code:

#include <16F877.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=2000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  //

int8 i;
float temp[32];

#int_rda
void serial_isr() {
*(&temp[0]+i)=getc();
i++;if(i==128)i=0;
}
void main() {
i=0;
do {
//...
} while (TRUE);
}

Nguyen The Vinh.

minh ko hieu cho nay *(&temp[0]+i)=getc(); mong bạn chỉ kỹ hơn tí nhé

NTVinh 29-09-2006 09:55 AM

Trích:

Nguyên văn bởi hoangngoc (Post 5152)
Mỗi đường truyền RS485 có thể kết nối với 32 thiết bị. Như vậy giả sử có một mạng gồm < 32 kit điều khiển thì chỉ cần dùng 1 cặp max485 (song công), và 32 kit này sẽ được nối với 4 đường dây đó thông qua một mạch ghép nối trung gian?

A: Em có thể đặt lại câu hỏi rõ ràng hơn được không. Nói chung là nếu chuyển nguyên văn câu hỏi trên thành một câu trả lời thì cũng được.
Nguyễn Thế Vinh.

NTVinh 29-09-2006 10:05 AM

Trích:

Nguyên văn bởi hoangngoc (Post 5152)
Em có tham khảo một mạng chỉ có 2 kit điều khiển nhưng dùng 2 cặp max485 như trong hình. 1 kit nối với J7 và 1 kit nối với J3. Vậy là sao?

A: Oki, nối như vậy là được rồi. Tuy nhiên, nối như vậy chỉ mang tính chất là minh hoạ thôi, chứ thực tế ai lại nối như thế đúng không, tốn tiền. Chỉ có hai kit điều khiển thôi mà lại phải làm phức tạp!!! Cái mạch nguyên lý của em "chỉ thích hợp" khi:
1. Em muốn thiết kế một mạng có hơn 32 thành viên tham gia.
2. Em không mua được IC truyền thông RS485 mà IC đó cho phép đấu nối lớn hơn 32 thành viên, ví dụ IL485W.
3. Em cần một mạng truyền thông song công.

Nguyễn Thế Vinh.

NTVinh 29-09-2006 10:22 AM

Trích:

Nguyên văn bởi hoangminh1234 (Post 5156)
minh ko hieu cho nay *(&temp[0]+i)=getc(); mong bạn chỉ kỹ hơn tí nhé.

A: Để dễ hình dung, mình xin lấy một ví dụ mã giả như sau nhé. Cái mã giả này có nội dung là, bạn muốn nhận 32 số kiểu float về vi điều khiển (PIC6F877, AT89C51, DS89C420,...) từ một thiết bị đầu cuối nào đó thông qua cổng truyền thông RS232. Theo chuẩn RS232, và theo đặc điểm của các vi điều khiển đã liệt kê ở trên, ta thực hiên mã giả như sau.
- Khai báo một mảng 32 phần tử dạng float, bắt đầu từ địa chỉ 0x0010 trong ram.
float temp[32] _at_ 0x0010;
- Như vậy, tại địa chi 0x0010 sẽ đựng nôi dung của byte chứa bit dấu của số thực temp[0]..., tại địa chỉ 0x0014 đựng nội dung của byte chứa bit dấu của số thự temp[1]...
- Như vậy thì...ôi, thôi, viết dài quá!!! Bạn tự suy luận tiếp nhé.
Nguyễn Thế Vinh.

hoangngoc 30-09-2006 09:37 AM

Em hiểu rồi, cảm ơn anh Vinh nhé. Trong quá trình làm, nếu có gì vướng mắc, em sẽ hỏi tiếp. :D

falleaf 30-09-2006 01:54 PM

Khi cám ơn một bài viết, hãy bấm vào nút cám ơn, thay vì viết một bài khác. Diễn đàn mới có tính năng này. Số lượng bài được mọi người cám ơn sẽ hiện ngay bên dưới nick.

to NTVinh: khi bạn bấm quote một bài để trả lời, bạn xóa hết các phần không quan trọng, nhưng nhớ chừa lại chữ [/quote] để nó hiển thị đúng. Nếu không nó sẽ hiển thị sai và nhìn rất rối rắm.

Rất cám ơn các bạn :).

chúc vui.

phamhuydangcdt 05-02-2007 03:20 PM

chao cac ban cac ban co the cho minh mot cai nhin tong quan nhat ve
CCSC va HTPIC duoc khong ? cam on

hungnp 09-04-2007 04:17 PM

Chào tất cả các bác,

Tôi cũng có đọc về mạng truyền thông modbus sử dụng chuẩn 485 cho lớp vật lý(lớp 1), và giao thức truyền thông master/slave cho lớp 2(datalink). Tôi có một số thắc mắc mà đến giờ vẫn chưa giải đáp được, mong các bác giúp đỡ.

Câu 1: Về lý thuyết tôi thấy trong giao thức master/slave cho phép kết nối tối đa 256(vì nó dùng một byte để định địa chỉ cho các slave) slave. Nhưng chắc chắn trong thực tế số lượng này là viễn tưởng. vậy các bác có thể đưa ra được những nguyên nhân rõ ràng nhất để mọi người có thể biết một cái RS232/RS485 converter mà họ làm ra có thế kết nối được bao nhiêu slave không?

Câu 2: khả năng tải của cặp dây(nếu dùng loại 2 dây) và đôi cặp dây( nếu dùng loại 4 dây), có nghĩa là độ dài của đường truyền tối đa của nó được ước lượng như thế nào?(trong khi lý thuyết của nó vào khoảng 1200m).

Cảm ơn các bác nhiều.


Múi giờ GMT. Hiện tại là 02:17 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam