|
Tài trợ cho PIC Vietnam |
Analog - Bộ nhớ - Bảo mật - Cảm biến nhiệt độ Thảo luận việc sử dụng và thay thế các sản phẩm Analog, Memory, KEELOG và cảm biến nhiệt độ của Microchip cho các thiết kế |
|
Ðiều Chỉnh | Xếp Bài |
01-03-2008, 10:57 PM | #1 |
Nhập môn đệ tử
Tham gia ngày: Jul 2005
Bài gửi: 9
: |
Vấn đề khó hiểu khi dùng ADC của ds30F4011
Em có một chương trình sử dụng chân AN8 của dsPic30f4011 như sau :
Code:
#define Fcy 16000000 // Hz #define Fad 8000000 // _FOSC(CSW_FSCM_OFF & FRC_PLL8); //Clock = 64 MHz _FWDT(WDT_OFF); _FBORPOR(MCLR_EN & PBOR_OFF&PWMxL_ACT_HI&PWMxH_ACT_HI); _FGS(CODE_PROT_OFF); unsigned int adc; void Init_Timer1(void) { TMR1=0; PR1=25000; // 100ms ; PR1=(_Fcy/prescale)*time; _T1IF=0; T1CON=0x8020; _T1IE=1; } void _ISR _T1Interrupt(void) { _T1IF=0; } void _ISR_ADCInterrupt(void) { adc=ADCBUF8; _ADIF=0; } void init_adc() { TRISBbits.TRISB8=1; // dat pin la input ADPCFGbits.PCFG8=0; // dat che do analog cho chan ADCON1bits.ASAM= 1; // chon che do chuyen doi tu dong. ADCON1bits.SSRC= 7; // tu dong chuyen doi theo chu ky ADCON1bits.FORM= 0; // dang du lieu chuyen doi la integer ADCON1bits.ADSIDL=0; // ngung hoat dong khi o che do IDEL ADCON2bits.VCFG=0; // chon dien ap chuan la nguon cung cap. ADCON2bits.CSCNA=0; // khong scan cac dau vao kenh 0 ADCON2bits.CHPS=0; // chon kenh 0 de chuyen doi ADCON2bits.BUFS=0; // chi co tac dung khi BUFM=1 ADCON2bits.SMPI=0; // ngat xuat hien sau moi lan chyen doi ADCON2bits.BUFM=0; // thanh ghi dem o che do 16 bit ADCON2bits.ALTS=0; // chon MUX A ADCON3bits.ADCS=3; // chon chu ky chuyen doi Tad=2*Tcy ADCON3bits.ADRC=0; // chon nguon clock A/D la tu xung he thong ADCON3bits.SAMC=11; // chon thoi gian lay mau la 10 Tad ADCHSbits.CH123NB=0; // chon dau vao am cho cac kenh 1,2,3 khi su dung MUXB ADCHSbits.CH123SB=0; // chon dau vao duong cho cac kenh 1,2,3 khi su dung MUXB ADCHSbits.CH0NB=0; // chon dau vao am cho kenh 0 khi su dung MUXB ADCHSbits.CH0SB=0; // chon dau vao duong cho kenh 0 khi dung MUXB ADCHSbits.CH123NA=0; // chon dau vao am cho cac kenh 1,2,3 khi su dung MUXA ADCHSbits.CH123SA=0; // chon dau vao duong cho cac kenh 1,2,3 khi su dung MUXA ADCHSbits.CH0SA=8; // chon dau vao duong cua kenh 0 la AN8 ADCHSbits.CH0NA=1; // chon dau vao am cua kenh 0 la AN1 ADCSSL =0; // khong cho phep quet tat ca cac dau vao _ADIF=0; // xoa co ngat ADC _ADIE=1; // cho phep ngat ADC _ADON=1; // module ADC san sang hoat dong } int main(void) { init_adc(); _ADIE=1; } Chương trình tuy nhiên không hiểu sao, giá trị adc thu được luôn cố định ở một giá trị . Hơn nữa vấn đề sảy ra tương tự với AN7. Em đã thử với AN0 thì vẫn bình thường . Mong các bác giải đáp. thanks. thay đổi nội dung bởi: namqn, 01-03-2008 lúc 11:04 PM. |
|
|