PDA

View Full Version : Bộ nhân PLL cho Dspic30F6014


nguyen.geo
21-07-2008, 11:37 PM
Phần cứng của em dùng thạch anh 7.357Mhz và nhân tần lên PLL16 lần để đạt tốc độ nhanh nhất của chip. đây là đoạn code của em :
#include <p30f6014.h>
_FOSC(CSW_FSCM_OFF & XT_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_EN);
_FGS(CODE_PROT_OFF);
#define xung_out _LATD15
void main()
{ TRISD = 0x0000;
while(1)
{
xung_out = 0; //
xung_out = 0;
xung_out = 0;
xung_out = 1;
}
}

Theo lý thuyết thì xung phát ra sẽ là xung vuông với độ rộng của mỗi sườn là 3 chu kỳ lệnh.
theo cách chọn thạch anh là 7.357 và PLL = 16 => mỗi chu kỳ lệnh sẽ có thời gian là gần 1/30us. từ đó ứng với 3 chu kỳ lệnh của mỗi sườn sẽ có thời gian là: 3 * 1 / 30 = 0.1us.
nhưng em dùng máy hiện sóng đo trực tiếp trên chân phát xung _LATD15 thì tần số phát ra là dạng xung vuông độ rộng sườn dương bằng sườn âm nhưng thời gian mỗi sườn không phải là 0.1us mà là 0.3us ( tức là tần số sau nhân tần là 40Mhz ) trong khi đó xung trên chân thạch anh vẫn ổn định là 7.357Mhz. em không hiểu tại sao lại thế ? mong Anh Nam và các cao thủ Pic giúp đỡ. Em cảm ơn nhiều

namqn
23-07-2008, 01:04 AM
À, bạn viết chương trình bằng MPLAB C30. Một lệnh gán xung_out = 0 chưa chắc được dịch thành một lệnh hợp ngữ (mặc dù tôi thử với C30 v3.01 thì mỗi lệnh gán đó tương ứng với 1 lệnh hợp ngữ). Để kiểm tra, bạn biên dịch code xong, dùng lệnh 'Disassembly listing' trong mênu View để xem mã dịch ngược từ mã máy đã được dịch ra.

Cũng nên kiểm tra xem từ cấu hình liên quan có mang đúng giá trị cần thiết hay không, trước khi nạp chương trình vào chip. Và không loại trừ nguyên nhân thạch anh chất lượng kém.

Tôi thường dùng ngoại vi để tạo xung ở ngõ ra khi cần đo tần số clock của PIC/dsPIC. Bạn tham khảo link sau:
http://www.picvietnam.com/forum/showthread.php?t=2317

Thân,

nguyen.geo
23-07-2008, 09:13 AM
Cảm ơn anh Nam đã trả lời.
Em đã kiểm tra bằng Disassembly listing và chạy dùng cữa sổ Watch để xem thì đều thấy nó chỉ có 3 chu kỳ lệnh ở mỗi mức 0, hay 1 trong đoạn code của em. còn về thạch anh thì em đo khi pic đang chạy thì vẫn ổn định là 7.37Mhz. không thấy có vấn đề gì nhưng ngõ ra của nó tần số chỉ bằng 1/3 so với lý thuyết tính toán. thêm nữa nguồn nuôi của em vẫn đảm bảo là 4.98V-5.02V.

namqn
24-07-2008, 12:27 AM
Cảm ơn anh Nam đã trả lời.
Em đã kiểm tra bằng Disassembly listing và chạy dùng cữa sổ Watch để xem thì đều thấy nó chỉ có 3 chu kỳ lệnh ở mỗi mức 0, hay 1 trong đoạn code của em. còn về thạch anh thì em đo khi pic đang chạy thì vẫn ổn định là 7.37Mhz. không thấy có vấn đề gì nhưng ngõ ra của nó tần số chỉ bằng 1/3 so với lý thuyết tính toán. thêm nữa nguồn nuôi của em vẫn đảm bảo là 4.98V-5.02V.
Tần số của thạch anh ổn thì vấn đề nằm ở chỗ cấu hình (nhưng phải chênh lệch 4 lần thì mới hợp lý, chứ chênh lệch 3 lần thì quả là khó hiểu), và một trường hợp rất hiếm gặp là mạch PLL chạy sai.

Đã từng có trường hợp mạch dao động của dsPIC hoàn toàn không chạy khi dùng thạch anh ngoài, chỉ chạy khi dùng FRC. Trường hợp đó đã được cho biết là do lỗi của loạt chip sample.

Ngoài những khả năng trên thì tôi không nghĩ ra trường hợp nào khác.

Thân,

nguyen.geo
25-07-2008, 04:35 PM
Cảm ơn anh Nam nhiều. Em sẽ hỏi lại thông tin từ nhà cung cấp chip cho phía em. Chắc có thể là do chip thôi vì mọi vấn đề em thấy đề tốt mà. khi có thông tin phản hồi em sẽ phản hồi lại cho anh.