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 15-05-2009, 05:54 PM   #1
Hiepnv101
Đệ tử 1 túi
 
Hiepnv101's Avatar
 
Tham gia ngày: Apr 2009
Nơi Cư Ngụ: Viet Nam
Bài gửi: 12
:
Anh Nam cho em hỏi. Em khai báo _FBORPOR(PBOR_OFF & MCLR_EN); thì truyền lên PC rất nhiễu. Nhưng khi khai báo _FBORPOR(PBOR_OFF & MCLR_DIS); thì lại truyền rất chuẩn. Anh có thể nêu qua 2 khai báo này được không ạ?

Thanks,
Hiepnv101 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 10:45 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
Trích:
Nguyên văn bởi Hiepnv101 View Post
Anh Nam cho em hỏi. Em khai báo _FBORPOR(PBOR_OFF & MCLR_EN); thì truyền lên PC rất nhiễu. Nhưng khi khai báo _FBORPOR(PBOR_OFF & MCLR_DIS); thì lại truyền rất chuẩn. Anh có thể nêu qua 2 khai báo này được không ạ?

Thanks,
PBOR là viết tắt của Programmable Brown-Out Reset, tức là chức năng tự động reset khi nguồn suy giảm.

MCLR là viết tắt của Master Clear (Reset), tức là chức năng reset bộ xử lý khi chân MCLR được đặt ở trạng thái tích cực (mức logic '0').

Việc nhiễu khác nhau ở hai cấu hình của bạn thì vẫn chưa có đủ thông tin để góp ý. Bạn dùng sơ đồ nguyên lý như thế nào (chân MCLR của bạn được thiết kế ra sao, vì trong hai cấu hình thì chỉ có chức năng của chân MCLR là khác nhau)?

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 07-09-2009, 01:42 PM   #3
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Uart .

Thầy Nam và các anh chị trong diễn đàn cho em hỏi về một số liên quan tới UART của dsPIC.
Em đang làm đồ án môn học liên quan tới PID trên máy tính rồi truyền giá trị xuống cho dsPIC. Giá trị em muốn truyền là thông số cho PDC1 và PDC2 (hai thanh ghi thiết lập duty_cycle trong module PWM )cho 2 bánh của robot. hai giá trị em gửi xuống cho dsPIC có tầm từ 0 tới 1599. nên cho em hỏi là có cách nào truyền từ máy tính xuống mà 1 lúc truyền được 16 bit data không ?. em đang làm việc với VC++. em chỉ thấy 1 frame truyền được 8 bit data mà chưa thấy truyền 1 frame 16 bits data . Nếu không truyền được 16 bits data /frame thì bài toán vừa nêu em định làm như sau :
Với giá trị cho thanh ghi PDC1 : em truyền byte đầu (8 bits thấp) cho dsPIC , lưu giá trị này vào biến có tên là temp1 , sau đó truyền tiếp byte thứ 2 (8 bits cao) và lưu vào temp2 , sau đó thực hiện phép tính :
PDC1 = (temp2<<8) + temp1;
tương tự với giá trị truyền cho PDC2.
Nhưng em vẫn chưa biết cách thiết lập ngắt cho module UART khi nó nhận xong 4 byte (em muốn nhận xong 4 byte rồi ngắt). và lấy 4 byte vừa nhận ở những thanh ghi nào vì em chỉ thấy có 1 thanh ghi lưu giá trị mà dsPIC nhận thôi ah ?
Cảm ơn thầy và các anh chị nhiều .
Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-09-2009, 04:05 PM   #4
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 conglong View Post
Thầy Nam và các anh chị trong diễn đàn cho em hỏi về một số liên quan tới UART của dsPIC.
Em đang làm đồ án môn học liên quan tới PID trên máy tính rồi truyền giá trị xuống cho dsPIC. Giá trị em muốn truyền là thông số cho PDC1 và PDC2 (hai thanh ghi thiết lập duty_cycle trong module PWM )cho 2 bánh của robot. hai giá trị em gửi xuống cho dsPIC có tầm từ 0 tới 1599. nên cho em hỏi là có cách nào truyền từ máy tính xuống mà 1 lúc truyền được 16 bit data không ?. em đang làm việc với VC++. em chỉ thấy 1 frame truyền được 8 bit data mà chưa thấy truyền 1 frame 16 bits data . Nếu không truyền được 16 bits data /frame thì bài toán vừa nêu em định làm như sau :
Với giá trị cho thanh ghi PDC1 : em truyền byte đầu (8 bits thấp) cho dsPIC , lưu giá trị này vào biến có tên là temp1 , sau đó truyền tiếp byte thứ 2 (8 bits cao) và lưu vào temp2 , sau đó thực hiện phép tính :
PDC1 = (temp2<<8) + temp1;
tương tự với giá trị truyền cho PDC2.
Nhưng em vẫn chưa biết cách thiết lập ngắt cho module UART khi nó nhận xong 4 byte (em muốn nhận xong 4 byte rồi ngắt). và lấy 4 byte vừa nhận ở những thanh ghi nào vì em chỉ thấy có 1 thanh ghi lưu giá trị mà dsPIC nhận thôi ah ?
Cảm ơn thầy và các anh chị nhiều .
Trân trọng !.
Bạn sẽ không thể truyền 16 bit dữ liệu liên tiếp. Bạn tách 16 bit dữ liệu thành 2 byte là ổn. Để thiết lập module UART tạo ngắt sau khi nhận được 4 byte, bạn đặt các bit URXISEL<1:0> trong thanh ghi U1STA bằng '11' (giả sử bạn đang dùng module UART1).

Để lấy các byte dữ liệu khi có ngắt, bạn liên tiếp đọc thanh ghi U1RXREG (giả sử bạn đang dùng module UART1). Vì các module UARTx sử dụng bộ đệm FIFO (First-In First-Out), nên các byte được nhận trước sẽ được đọc ra trước. Cụ thể, ví dụ từ máy tính bạn lần lượt gửi các giá trị a, b, c, và d đến dsPIC. Sau khi nhận được giá trị d, dsPIC sẽ tạo ra ngắt, và khi xử lý ngắt, nếu bạn liên tiếp đọc thanh ghi U1RXREG thì bạn sẽ lần lượt nhận được các giá trị a, b, c, và d.

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 07-09-2009, 09:44 PM   #5
conglong
Đệ tử 4 túi
 
Tham gia ngày: Jan 2008
Bài gửi: 68
:
Trích:
Nguyên văn bởi namqn View Post
Bạn sẽ không thể truyền 16 bit dữ liệu liên tiếp. Bạn tách 16 bit dữ liệu thành 2 byte là ổn. Để thiết lập module UART tạo ngắt sau khi nhận được 4 byte, bạn đặt các bit URXISEL<1:0> trong thanh ghi U1STA bằng '11' (giả sử bạn đang dùng module UART1).

Để lấy các byte dữ liệu khi có ngắt, bạn liên tiếp đọc thanh ghi U1RXREG (giả sử bạn đang dùng module UART1). Vì các module UARTx sử dụng bộ đệm FIFO (First-In First-Out), nên các byte được nhận trước sẽ được đọc ra trước. Cụ thể, ví dụ từ máy tính bạn lần lượt gửi các giá trị a, b, c, và d đến dsPIC. Sau khi nhận được giá trị d, dsPIC sẽ tạo ra ngắt, và khi xử lý ngắt, nếu bạn liên tiếp đọc thanh ghi U1RXREG thì bạn sẽ lần lượt nhận được các giá trị a, b, c, và d.

Thân,
ah, dạ em cảm ơn thầy nhiều !
Trân trọng !.
__________________
Không có gì là Không thể, chỉ một điều Không thể khi bạn nghĩ nó Không thể !.
Bạn có thể nếu bạn tin bạn có thể !.
conglong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 10:10 AM   #6
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Em có 1 vấn đề về phần cứng. Em làm mạch đo nhiệt độ, hiển thị lên LCD và gửi lên máy tính. Phần đo nhiệt độ và hiển thì lên LCD thì ok, nhưng cứ khi em cắm COM vào mt thì mạch lại ko làm việc nữa, chip thì nóng lên. Em thử ktra các chân của Max232 và com thì thấy bình thường, thậm chí, cắm com nhưng ko cắm lên máy tính thì mạch cũng ko sao, vẫn bình thường. Em thử cắm sang nhiều máy tính khác thì nó cũng ko chạy, theo mọi người thì lỗi ở đâu nhỉ ?
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 12:03 PM   #7
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Trích:
Nguyên văn bởi silvadk2 View Post
Em có 1 vấn đề về phần cứng. Em làm mạch đo nhiệt độ, hiển thị lên LCD và gửi lên máy tính. Phần đo nhiệt độ và hiển thì lên LCD thì ok, nhưng cứ khi em cắm COM vào mt thì mạch lại ko làm việc nữa, chip thì nóng lên. Em thử ktra các chân của Max232 và com thì thấy bình thường, thậm chí, cắm com nhưng ko cắm lên máy tính thì mạch cũng ko sao, vẫn bình thường. Em thử cắm sang nhiều máy tính khác thì nó cũng ko chạy, theo mọi người thì lỗi ở đâu nhỉ ?
Bạn thử thay dây cổng COM khác xem thế nào
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 01:12 PM   #8
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
dây đó em chạy với 1 mạch khác, nó ok bác ạ! mà có mỗi 1 dây, ngại đi mua quá. với lại mạch kia chạy ok thì chắc dây ko vấn đề
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-05-2009, 02:00 PM   #9
silvadk2
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 42
:
Ô hô, em tìm ra lỗi rồi, do con vdk chết module uart, em thay con khác thì nó gửi ký tự rồi. Nhưng lạ 1 nỗi, cứ cắm com vào mt thì chip nóng ran. thế là thế nào nhỉ các bác. Néu cắm com mà ko cắm vào mt thì chip ko nóng, hic
silvadk2 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-11-2009, 01:36 PM   #10
harakiri
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Em muốn gửi một loạt các chuỗi qua UART như "TC", delay 1 khoảng rồi gửi "RC m x y z k t" ( với m x y z k t là số thập phân) ,rồi "M". Tuy nhiên thanh ghi UxTXREG ( em dùng dsPIC33FJ64GP710) chỉ có 4 bộ đệm, như vậy em phải thiết lập thế nào các thanh ghi để gửi.
harakiri vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-11-2009, 01:02 AM   #11
npbaoduy
Đệ tử 2 túi
 
Tham gia ngày: Sep 2008
Nơi Cư Ngụ: Tp. HCM
Bài gửi: 38
:
điều gì xảy ra khi gởi giá trị 0 qua module UART?

Vấn đề ROM vẫn mò chưa ra , hôm nay em lại gặp một vấn đề thế này:
Code:
U1TXREG=0x00;
	while(!U1STAbits.TRMT);
	U1TXREG=0x41;
	while(!U1STAbits.TRMT);
thì trên máy tính chỉ nhận được giá trị 0, không nhận được 0x41 (ký tự A), em sử dụng VB, thấy không in ra được ký tự nào cả, dùng hàm lấy mã ascii chỉ thấy số 0.
còn nếu thay:
Code:
U1TXREG=0x01;  //có thể là một giá trị nào đó bất kỳ khác 0
	while(!U1STAbits.TRMT);
	U1TXREG=0x41;
	while(!U1STAbits.TRMT);
thì trên máy tính nhận được cả 2 giá trị (hiển thị được cả 2 ký tự).
Em không hiểu chỗ này, không lẽ khi gởi giá trị 0, bit U1STAbits.TRMT không được bật lên sau khi đã truyền xong hay sao?
Nếu thay bằng:
Code:
U1TXREG=0x00; 
	delay_ms(100);
	U1TXREG=0x41;
	while(!U1STAbits.TRMT);
thì nhận được cả số 0 và số 0x41, nhưng điều kiện là delay_ms phải đủ lớn, nếu delay_ms(1) thì cũng ko nhận được số 0x41 (quan sát thấy y như trường hợp đầu tiên).

thay đổi nội dung bởi: npbaoduy, 08-11-2009 lúc 01:15 AM.
npbaoduy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 06:13 PM   #12
harakiri
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Giả sử em nhận được về chip một chuỗi các kí tự " T a1 a2 a3 a4 a5"(a1,a2,a3... là số thập phân có 2 hoặc 3 chữ số nhưng bây giờ nó đang được xem là một chuỗi ký tự). Bây giờ em muốn tách chuỗi ký tự này thành một chuỗi a1 ,a2 ,a3....với a1,a2,a3 được xem là số. Liệu có hàm nào làm được điều này không?
harakiri vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 10:05 PM   #13
mtuankct
Đệ tử 6 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 125
:
Theo mình chẳng có hàm nào làm được cả, cái này do bạn tự quy định thôi mà, nó phụ thuộc vào dữ liệu của bạn. Đơn giản nhất theo mình là cứ quy định mỗi số chiếm 2 byte hoăc 3byte tùy bạn
mtuankct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-11-2009, 10:27 PM   #14
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 harakiri View Post
Giả sử em nhận được về chip một chuỗi các kí tự " T a1 a2 a3 a4 a5"(a1,a2,a3... là số thập phân có 2 hoặc 3 chữ số nhưng bây giờ nó đang được xem là một chuỗi ký tự). Bây giờ em muốn tách chuỗi ký tự này thành một chuỗi a1 ,a2 ,a3....với a1,a2,a3 được xem là số. Liệu có hàm nào làm được điều này không?
Chuỗi ký tự khác chuỗi số của bạn ở chỗ nào?

Nếu tôi đoán không lầm, bạn muốn chuyển các tham số a1 a2 ... thành các giá trị số sau khi nhận được từ bên ngoài. Trong trường hợp này (giả sử bạn đang dùng C30), mỗi chuỗi ai có thể được dùng làm đối số cho hàm C chuẩn atoi() (sẽ cần #include <stdlib.h>). Đề nghị tham khảo tài liệu hướng dẫn !16-bit Language Tools Libraries" (DS51456) của Microchip.

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 12-11-2009, 12:22 AM   #15
harakiri
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 12
:
Ý của em là khi em gọi thành phần thứ 2 trong mảng, nó sẽ xuất ra cho em là a1(không kể khoảng trắng là ký tự) và a1,a2 ta không biết trước bao nhiêu ký tự.
Em dúng khoảng trắng để nhận biết nó, cuối cùng đã nhận được.
Cám ơn anh đã quan tâm trả lời giùm em.
harakiri vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
dspic30f i2c, dspic30f uart, i2c, rtc


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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 92 19-02-2017 11:15 PM
dsPIC Tutorial 2-Các kỹ thuật cơ bản namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 33 17-10-2013 11:09 PM
dsPIC Tutorial 5-Module ADC và MCPWM namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 83 12-09-2013 10:33 PM
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) namqn dsPIC - Bộ điều khiển tín hiệu số 16-bit 16 22-08-2012 12:35 AM
Alternate UART pin??? alexjp dsPIC - Bộ điều khiển tín hiệu số 16-bit 1 02-05-2006 06:26 PM


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


Đượ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