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
#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