PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

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

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 18-12-2008, 03:00 PM   #1
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
UART của dspic30f6014a.

Em xin hỏi module uart của dspic30f6014a có điểm gì khác nhau rất rất cơ bản so với con 30f4012 trong các bài viết của anh Nam hay không? Tại vì em viết nghĩ không có gì sai nhưng nó lại không bao giờ truyền đúng được.
Chương trình em chỉ đơn giản như thế này: Truyền 1 số 8 bit lên máy tính(ở đây là số 0x31). Trên máy tính nhận và hiển thị ra lại. Em sử dụng thạch anh ngoài 7.3728M (mà có sử dụng thạch anh nội cũng sai luôn).
Chương trình trên dspic.
Code:
#include "p30f6014a.h"
        _FOSC(CSW_FSCM_OFF & XT_PLL4);		//Clock = 29.4912 MHz
	_FBORPOR(MCLR_EN & PBOR_OFF);
	_FWDT(WDT_OFF);
	_FGS(CODE_PROT_OFF);

void Init_Uart1_module(void);

int main(void){
	Init_Uart1_module();
	U1TXREG=0x31;
	while(1){};
}

void Init_Uart1_module(void){
	U1MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit
	U1STA  = 0x0400; //bit10=UTXEN cho phep phat ky tu
	U1BRG  = (((7372800/9600)/16)-1);	//9600 bps @ Fcy = 29.4912 M
}
Chương trình trên không báo lỗi gì hết. Truyền rất ổn định lên máy tính nhưng ngặt nổi giá trị ổn định đó lại là giá trị sai.
Còn chương trình trên máy tính đã thử chạy rất tốt (khi nối 2 chân 2 3 cổng COM với nhau. Em đoán là do thạch anh làm tốc độ baud ko đồng bộ giữa dspic và máy tính. Nhưng lại thấy ko có gì không đồng bộ ở đây.
Chương trình trên máy tính
Code:
Private Sub Form_Load()
MSComm1.CommPort = 5 'khai bao cong COM
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False 'Neu cong COM mo thi dong lai
End If
MSComm1.Settings = "9600,N,8,1" 'Thiet lap cac thong so truyen thong
MSComm1.RThreshold = 1 ' cu nhan duoc 2 byte thi nhay vao ngat
MSComm1.InputLen = 0 ' moi lan doc se doc toan bo vung dem
MSComm1.InBufferCount = 0 ' xoa bo dem nhan
txtreceive1.Text = ""
MSComm1.InputMode = 1 ' doc du lieu len dang binary
MSComm1.PortOpen = True
End Sub

Private Sub MSComm1_OnComm()
Dim buffer() As Byte
If MSComm1.CommEvent = comEvReceive Then
   buffer = MSComm1.Input
   txtreceive.Text = Hex(buffer(0))
End If
End Sub
Kết quả truyền số 0x31 lên máy tính thì bị "nhận nhầm" thành 0x67.
Mong mọi người giúp đỡ.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-12-2008, 03:49 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Có vẻ như baudrate thì đúng, nhưng logic bị đảo. Bạn có dùng một vi mạch tương tự như MAX232 giữa dsPIC và máy tính chứ? Nếu có thì bạn kết nối như thế nào?

Trong phần chú thích của bạn, Fcy = 7.3728M chứ không phải là 29.4912 M.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-12-2008, 04:14 PM   #3
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Em dùng Max232. Sơ đồ mắc mạch của theo sơ đồ mà Nigel nối kết máy tính với PIC6F877A (em đã từng làm với PIC6F877A theo sơ đồ này, chạy rất tốt). Bây giờ chỉ thay 2 chân truyền nhận của 16F877A thành 2 chân truyền nhận của dsPIC ( U1TX và U1RX).


Còn việc chú thích thì em nhầm. hehehe
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 08:59 AM   #4
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Em đã thử đủ mọi cách, kiểm tra lại mạch, thay lại thạch anh, vẫn ko thấy gì sai. Nó truyền rất ổn định các giá trị sai. cứ 0x31 thì ra 0x67, 0x34 thì ra 0x19, 0x01 thì ra 0x1F. Chưa có lần truyền nào sai cả. Chắc chắn phải có một lý do gì khác ở đây.
Mong mọi người có kinh nghiệm giúp đỡ. Còn chưa tới nữa tháng nữa là bảo vệ luận văn rồi.
Cảm ơn rất nhiều.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 05:29 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi uydanh View Post
Em đã thử đủ mọi cách, kiểm tra lại mạch, thay lại thạch anh, vẫn ko thấy gì sai. Nó truyền rất ổn định các giá trị sai. cứ 0x31 thì ra 0x67, 0x34 thì ra 0x19, 0x01 thì ra 0x1F. Chưa có lần truyền nào sai cả. Chắc chắn phải có một lý do gì khác ở đây.
Mong mọi người có kinh nghiệm giúp đỡ. Còn chưa tới nữa tháng nữa là bảo vệ luận văn rồi.
Cảm ơn rất nhiều.
Để kiểm tra xem phía dsPIC chạy đúng hay sai, bạn có thể dùng HyperTerminal hay phần mềm tương tự để thử. Bạn đã thử truyền một giá trị đã biết nào đó (ký tự 'A' chẳng hạn) từ dsPIC đến một terminal chưa?

Trước đó, bạn nói rằng phần mềm của bạn chạy tốt bằng cách nối chân 2 và 3 của cổng COM với nhau. Tôi cho rằng vẫn có khả năng chương trình của bạn hiểu sai logic, nhưng tự bản thân nó truyền cho nó thì lại hiểu đúng.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 05:43 PM   #6
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Em đã thử truyền lên Hyperterminal. Kết quả truyền sai hoàn toàn giống như truyền lên VB.
uydanh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-12-2008, 06:49 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi uydanh View Post
Em đã thử truyền lên Hyperterminal. Kết quả truyền sai hoàn toàn giống như truyền lên VB.
Bạn có cách nào kiểm tra tốc độ xung clock của bạn không? Xuất một tín hiệu có tần số khoảng vài kHz và dùng dao động ký, hay xuất LED ở tần số chính xác 1 Hz, đếm khoảng vài mươi chu kỳ, và so sánh với đồng hồ.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-12-2008, 07:34 AM   #8
uydanh
Đệ tử 4 túi
 
Tham gia ngày: Jan 2007
Bài gửi: 79
:
Hôm nay đúng là một ngày cười ra nước mắt. Trên không sai ( máy tính), dưới (vi điều khiển) cũng không sai mà sai cái ở giữa ( USB2COM).
Có ai ngờ sợi dây mua mất 8$ mà nó lại bị hư, dữ liệu đi qua nó là bị đổi mức logic.
Đúng là quá hài hước.
Em cảm ơn anh Nam đã nhiệt tình giúp em.
uydanh 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à 08:06 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