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)

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.

hampic 25-10-2007 10:49 PM

1 Attachment(s)
Trích:

Nguyên văn bởi hpecom (Post 3250)
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.

hehe, theo mình nghĩ thì truyền cái gì cũng được nhưng chú ý là rs232 mỗi lần truyền 1 byte cho nên, một số có giá trị lớn hơn 255 thì truyền coi chừng bị sai. Khi đó, bạn nên chuyển sang chuỗi và truyền rồi khi nhận thì ghép lại.
Viết bằng MS Comm trong VB thì dể mà, bạn muốn thử gửi 1 giá trị nào thì có thể tạo một editbox rồi lấy giá trị trong nó gán cho hàm Output. Nhận thì dùng cách bẩy sự kiện OnComm() với CommEvent = comEvReceive rồi nhận giá trị từ hàm Input.
Xem file đính kèm để hiểu rỏ hơn (có ví dụ).

Thân

LeDuc 16-11-2007 01:01 AM

Cho mình hỏi vậy nếu ta truyền một dữ liệu 8bit qua cổng nối tiếp thì làm thế nào vậy?
[code/]
#include <16F877.h>
#device *=16 adc=8
#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(d)
#use rs232(baud=19200,parity=n,xmit=pin_C6,rcv=pin_c7,b its=8)

int8 led[] ={0,1,2,3,4,5,6,7,8,9},k=0;
int8 so[4];
int8 quet[]={128,64,32,16};
int32 a,b,value;

#int_rtcc
void rtcc()
{
set_timer0(99);
b=a;
so[0]=a%10; a/=10;
so[1]=a%10;a/=10;
so[2]=a%10; a/=10;
so[3]=a; a=b;
portd=led[so[k]]+ quet[k]; k++;
if(k==4); k=0;
}

void main()
{
trisa=255;
trisd=0;
setup_adc(adc_clock_internal);
setup_adc_ports(all_analog);
set_adc_channel(0);
set-timer_0(rtcc_internal|rtcc_div_128);
enable_interrupts(int_rtcc);
enable_interrupts(global);
set_timer0(99);
while(true)
{
delay_ms(10);
value=read_adc();
a=value;
}
}
[/code]

Bây giờ để truyền dữ liệu qua cồng nối tiếp , mình phải làm sao đây ?
Bình thường phải tốn hết 8 chân VDK ở port d , nếu truyền qua cổng nối tiếp thì chỉ cần tốn có 2 chân con VDK hà . Rất mong các huynh chi giáo giúp đệ...
Thanks

tiendungkct 17-11-2007 10:35 AM

Bạn Thử Dung Giao Tiếp I2c Or Usart Xem Sao
Phấn Mền Thì Có Thể Tự Viết Bắng Vc++or Vb
Mình Cũng đang Làm Về Phần Này Hỵ Vọng Sẽ đươc Các Bạn Hỗ Trợ
Thanks

thuyvu 20-06-2008 05:55 AM

Trích:

Nguyên văn bởi NTVinh (Post 5160)
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.

Bạn nào có mạch chuyển đổi RS485 sang RS232 thì gửi cho mình xin vơi:xuanvudk2@gmail.com

Hard 20-06-2008 10:26 AM

Hi,
Các bác cho tui hỏi cách nhảy đến Địa chỉ = (địa chỉ hiện tại + 2000) trong CCS bằng cách nào. Tui tìm trong Help mà không thấy cách nào để lấy địa chỉ con trỏ chương trình cả. Rất mong các bác chỉ giáo vụ này vì tui cũng chưa tiếp xúc với CCS nhiều.
Thân ái.


Múi giờ GMT. Hiện tại là 11:49 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