|
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. |
02-03-2008, 12:13 AM | #2 |
Trưởng lão PIC bang
|
Chỉ có chương trình thì rất khó nhận xét lỗi nằm ở đâu. Bạn nên cho biết các chân liên quan đến module ADC kết nối ra sao.
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
02-03-2008, 12:21 AM | #3 |
Nhập môn đệ tử
Tham gia ngày: Jul 2005
Bài gửi: 9
: |
Chân AN1/VREF- : để hở không nối vào nguồn nào;
Chân AN8 : được nối trực tiếp vào chân giữ của biến trở. Các nguồn AVdd,Avss được nối với nguồn cung cấp (lấy theo đường usb). vấn đề là khi dùng AN0 em cũng làm như thế mà vẫn đo được ( do là cùng mạch KIT) |
02-03-2008, 01:48 AM | #4 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
02-03-2008, 10:17 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: Jul 2005
Bài gửi: 9
: |
Đây là sở đồ mạch kit của em. khi dùng AN0 không có gì khác biệt.Nhưng gí trị thu đc còn thay đổi tương ứng với vặn biến trở, đằng này dùng AN8 thì chả có gì thay đổi mà cái giá trị nó trả về là trên trời rơi xuống và không đổi.Mong bác giải thích
thay đổi nội dung bởi: namqn, 02-03-2008 lúc 10:49 PM. |
02-03-2008, 11:22 PM | #6 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
03-03-2008, 11:03 PM | #7 |
Nhập môn đệ tử
Tham gia ngày: Jul 2005
Bài gửi: 9
: |
hì. điện áp đưa vào của em chỉ là cắm con biến trở bên ngoài thôi. các chân analog đều để dạng jump thôi vì thế em không vẽ vào đây.Nhưng em kô hiểu sao ko sử dụng đc AN8, AN7.Mong bác chỉ điểm.ở đây e chưa nói đến vấn đề đúng hay không mà là không đo được cái gì cả.
|
04-03-2008, 02:55 AM | #8 | |
Trưởng lão PIC bang
|
Trích:
Nếu bạn nối biến trở như tôi đã nói ở trên thì bạn nên nối chân AN1/Vref- đến Avss và không sửa code gì cả (AN1/Vref- lúc này đóng vai trò Vref- cho bộ sample-and-hold CH0). Cách thứ hai là bạn sửa code lại để ADCHSbits.CH0NA=0; (như vậy chân - của bộ sample-and-hold CH0 sẽ nối vào AVss) và không thay đổi thêm gì ở phần cứng. Tại sao bạn không bắt đầu với tutorial của tôi và chỉnh sửa lại theo nhu cầu của bạn? Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
08-05-2009, 07:46 PM | #9 |
Đệ tử 2 túi
Tham gia ngày: Aug 2008
Bài gửi: 40
: |
Em đang bị mắc về ADC, nhờ các huynh chỉ giáo: Việc là em muốn đọc 2 giá trị ADC. Ở AN0 thì xuất ra Port_B còn ở AN1 thì xuất ra Port_D đối với PICF887A. Vậy em phải làm thế nào?
|
08-05-2009, 11:17 PM | #10 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
He, bạn cho adc=ADBUF8 thi làm gì mà chẳng thu được tín hiệu kô đổi. phải cho adc=ADCBUF0 chứ. kết quả chuyển đổi đưa vào đấy cơ mà
|
|
|