![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Adcbuf
các pác cho e hỏi là bộ ADC trong dsPIC chỉ có 01 thanh ghi ADCBUF0 địa chỉ là từ 0300 đến 0319 vậy làm thế nào để e lấy ADC trên 4 kênh đầu vào mà đọc được dữ liệu đúng?thanks!
|
![]() |
![]() |
![]() |
#2 | |
Trưởng lão PIC bang
|
Trích:
16 thanh ghi kết quả ADC trong dsPIC30 có tên theo thứ tự là ADCBUF0 đến ADCBUFF, bạn cần truy xuất vị trí nào trong bộ đệm kết quả dài 16-word thì cứ dùng tên tương ứng. Vấn đề địa chỉ hãy để cho trình dịch xử lý. 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 thay đổi nội dung bởi: namqn, 08-11-2009 lúc 09:49 PM. Lý do: dsPIC33 khác với dsPIC30 |
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
|
|
![]() |
![]() |
![]() |
#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 |
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
chạy Ok đấy. anh e cùng tham khảo nhé. #if defined(__dsPIC33F__) #include "p33fxxxx.h" #elif defined(__PIC24H__) #include "p24hxxxx.h" #endif #include "adcDrv1.h" #include "tglPin.h" #define SAMP_BUFF_SIZE 8 // Size of the input buffer per analog input #define NUM_CHS2SCAN 4 // Number of channels enabled for channel scan /*================================================= ============================ ADC INITIALIZATION FOR CHANNEL SCAN ================================================== ===========================*/ void initAdc1(void) { AD1CON1bits.FORM = 3; // Data Output Format: Signed Fraction (Q15 format) AD1CON1bits.SSRC = 2; // Sample Clock Source: GP Timer starts conversion AD1CON1bits.ASAM = 1; // ADC Sample Control: Sampling begins immediately after conversion AD1CON1bits.AD12B = 0; // 10-bit ADC operation AD1CON2bits.CSCNA = 1; // Scan Input Selections for CH0+ during Sample A bit AD1CON2bits.CHPS = 0; // Converts CH0 AD1CON3bits.ADRC = 0; // ADC Clock is derived from Systems Clock AD1CON3bits.ADCS = 63; // ADC Conversion Clock Tad=Tcy*(ADCS+1)= (1/40M)*64 = 1.6us (625Khz) // ADC Conversion Time for 10-bit Tc=12*Tab = 19.2us AD1CON2bits.SMPI = (NUM_CHS2SCAN-1); // 4 ADC Channel is scanned //AD1CSSH/AD1CSSL: A/D Input Scan Selection Register AD1CSSH = 0x0000; AD1CSSLbits.CSS4=1; // Enable AN4 for channel scan AD1CSSLbits.CSS5=1; // Enable AN5 for channel scan AD1CSSLbits.CSS10=1; // Enable AN10 for channel scan AD1CSSLbits.CSS13=1; // Enable AN13 for channel scan //AD1PCFGH/AD1PCFGL: Port Configuration Register AD1PCFGL=0xFFFF; AD1PCFGH=0xFFFF; AD1PCFGLbits.PCFG4 = 0; // AN4 as Analog Input AD1PCFGLbits.PCFG5 = 0; // AN5 as Analog Input AD1PCFGLbits.PCFG10 = 0; // AN10 as Analog Input AD1PCFGLbits.PCFG13 = 0; // AN13 as Analog Input IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit IEC0bits.AD1IE = 1; // Enable A/D interrupt AD1CON1bits.ADON = 1; // Turn on the A/D converter tglPinInit(); } /*================================================= ============================ Timer 3 is setup to time-out every 125 microseconds (8Khz Rate). As a result, the module will stop sampling and trigger a conversion on every Timer3 time-out, i.e., Ts=125us. ================================================== ===========================*/ void initTmr3() { TMR3 = 0x0000; PR3 = 4999; IFS0bits.T3IF = 0; IEC0bits.T3IE = 0; //Start Timer 3 T3CONbits.TON = 1; } /*================================================= ============================ ADC INTERRUPT SERVICE ROUTINE ================================================== ===========================*/ int ain3Buff[SAMP_BUFF_SIZE]; int ain4Buff[SAMP_BUFF_SIZE]; int ain10Buff[SAMP_BUFF_SIZE]; int ain13Buff[SAMP_BUFF_SIZE]; int scanCounter=0; int sampleCounter=0; void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void) { switch (scanCounter) { case 0: ain3Buff[sampleCounter]=ADC1BUF0; break; case 1: ain4Buff[sampleCounter]=ADC1BUF0; break; case 2: ain10Buff[sampleCounter]=ADC1BUF0; break; case 3: ain13Buff[sampleCounter]=ADC1BUF0; break; default: break; } scanCounter++; if(scanCounter==NUM_CHS2SCAN) { scanCounter=0; sampleCounter++; } if(sampleCounter==SAMP_BUFF_SIZE) sampleCounter=0; tglPin(); // Toggle RA6 IFS0bits.AD1IF = 0; // Clear the ADC1 Interrupt Flag } |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Aug 2007
Bài gửi: 11
: |
đúng chổ mình đang thắc mắc!
em cũng đang làm phần adc của dspic33f ,rõ ràng trong adc family reference của nó ,ở các giảng đồ định thì thì thấy có tồn tại các thanh ghi buffer1 ,buffer2....,ngay cả trong datasheet vẩn liệt kê vùng nhớ buffer là từ 0300 đến 0319 .vậy mà trong file .h nó chỉ khai báo 1 buffer 0.
em muốn lấy mẩu đồng thời 4 kênh (simultaneous)bằng software ( SSRC<2:0> = 000) ,nhưng không làm được. vì nó chỉ ghi vào buffer0 mà bỏ trống mấy buffer khác .vì quá trình chuyễn đỗi ở chế độ simultaneous chỉ kết thúc (DONE =1) khi đã hoàn tất convert 4 kênh ,và mổi lần convert nó điều ghi vào buffer0 hết .vậy là chỉ nhận dc duy nhất giá trị kênh CH3 ở bufer0 ,các kênh khác là zero.!!!! (em không muốn dùng DMA trong trường hợp này). vấn đề e không hiểu tại sao MC lại thiết kế dòng dspic33f như vậy ,không biết đây có phải là 1 lỗi thiết kế??.Thầy Nam có thể chỉ cho e cách nào lấy mẫu đồng thời mà không phải dùng DMA được không ?? .Nếu nắm được phần này e sẽ viết một report về phần ADC và DAC của dspic33f cho các bạn cùng tham khảo. xin chân thành cám ơn |
![]() |
![]() |
![]() |
#7 | |
Đệ tử 4 túi
Tham gia ngày: Jul 2008
Bài gửi: 61
: |
Trích:
thằng dsPIC30 thì như anh nói nhưng thằng dsPIC33 lại khác anh ah anh có thể giúp e cách truy cập địa chỉ của nó để lấy data kô? |
|
![]() |
![]() |
![]() |
#8 | |
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 thay đổi nội dung bởi: namqn, 08-11-2009 lúc 09:59 PM. Lý do: bổ sung thông tin |
|
![]() |
![]() |
![]() |
|
|