PDA

View Full Version : Cấu hình dao động cho Pic18F4550


TANDEM
22-06-2011, 04:45 PM
Chào các bác! Nhờ các bác xem giúp em chương trình sau. Khi em sử dụng delay_ms() và ngắt timer3 thì thời gian hoạt động là không chính xác: delay_ms(1000) mà phải tới gần 1 phút sau thì mới có hiệu lực, cả ngắt timer3 cũng vậy. Nhưng nếu em thay #use delay(clock=1000000) thì lệnh delay_ms(1000) hoạt động chính xác còn ngắt timer3 vẫn không chính xác. Rất mong các bác giúp đỡ!

#include <18F4550.H>
#include <DEF_18F4550.H>

#FUSES NOWDT //No Watch Dog Timer
#FUSES HSPLL, PLL5, CPUDIV1
#fuses ECPLL //Su dung PLL va RA6 lam pin ra
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOPUT //No power Up Timer
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES MCLR //Master clear reset
#FUSES CCP2C1 //Su dung rc1 lam cong OUT PWM
#use delay(clock=48000000) //Thach anh gan tren board la 20MHz

#define dctrai rc6
#define dcphai rc7

//Ham ngat TIMER3(dung cho xu ly Encoder)****************************************** *****
#int_TIMER3
void TIMER3_ProcesEncoder(void)
{
set_timer3(50536);
n++;
if(n==100) //100*0.01(s)=1(s). Sau 1(s) thi tien hanh lay mau 1 lan
{
porta=0b00000000;
n=0;

}
clear_interrupt(int_TIMER3);
}

void main(void)
{


setup_adc_ports(NO_ANALOGS); //tat ca porta la digital
set_tris_c(0b00110001);
set_tris_a(0b00010000);
enable_interrupts(int_TIMER3);
enable_interrupts(Global);
setup_timer_3(T3_INTERNAL|T3_DIV_BY_8); //thiet lap timer3 o che do xung noi va sau 8 lan tran thi duoc MCU coi la 1 su kien -> xay ra ngat timer3
set_timer3(50536); //100(Hz) = 48.000.000/[4*(65536-n)*8]
//n = 65536-[480.000/(4*8)] = 50536
//T = 1/f = 1/100 = 0.01(s) -> Sau 0.01(s) thì xay ra ngat timer3
portc=0b00000000;
porta=0b00001111;
while(true)
{
dcphai=1;
dctrai=0;
delay_ms(1000);
dctrai=1;
dcphai=0;
delay_ms(1000);
}
}

và đây là sơ đồ mạch.

shakespeare_a18
22-06-2011, 10:59 PM
cấu hình trên của bác dùng với thạch anh 20Mhz. Nếu dùng thạch anh khác thì cần điều chỉnh lại.

TANDEM
22-06-2011, 11:53 PM
Cám ơn shakespeare_a18! Trong mạch mình dùng thạch anh 20MHz, hiện tượng thì như mình đã mô tả... Có khi nào mà thạch anh bị hư trong quá trình hàn không? Hay tụ 22pF không chính xác? Nhờ các bác giải thích giúp!

TANDEM
23-06-2011, 11:02 AM
Trước hết xin cám ơn mọi người đã quan tâm! Sau khi lần mò đủ kiểu, em quyết định ngắt điện và kiểm tra lại mạch (mạch in), mấu chốt ở đây là thạch anh không tiếp xúc (vì mạch xuyên kim nên không ngờ tới tình huống này). Thiện tai...thiện tai... Bây giờ em đã giải quyết xong phần thắc mắc ở trên. Tuy nhiên, chỉ đúng khi bỏ dòng #fuses ECPLL. Tại sao lại thế? Em không hiểu được. Một lần nữa, nhờ các bác chỉ giúp. Nhờ anh Namqn ra tay giúp em với!

binhfile
08-08-2011, 01:50 AM
EC là chế độ dùng nguồn xung ngoài nhỉ, HS , XT mới là dùng thạch anh ??