View Single Post
Old 01-03-2008, 10:57 PM   #1
photoman
Nhập môn đệ tử
 
Tham gia ngày: Jul 2005
Bài gửi: 9
:
Angry 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.
photoman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn