![]() |
|
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 |
Nhập môn đệ tử
Tham gia ngày: Jun 2009
Bài gửi: 5
: |
bản đồ chân của họ 33f
cho em hỏi câu này mọi người ơi.sao em không thấy cấu hình chân I2C.em đã tìm trong cả hai bảng selectable input sources và output selection for remappable pin.Có phải nó được cấu hình như SPI không.nếu như vậy chọn chế độ master/slave thế nào.
|
![]() |
![]() |
![]() |
#2 |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
cho em hỏi cái.khi điều chế sóng sin băng PWM trong dspic33 cách cập nhật duty cycle cho PWM vào thanh ghi PxDCy để xuất ra xung thì dùng công thức nào vậy.
|
![]() |
![]() |
![]() |
#3 | |
Trưởng lão PIC bang
|
Trích:
duty cycle = (PxDCy)/(2*PxTPER + 2) Công thức trên cũng dùng được trong trường hợp có dùng prescaler, vì giá trị prescale bị triệt tiêu khi lập tỷ số. 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 |
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
em cũng hiểu công thức đó.nhưng trong 1 ví dụ có viêt như sau:
Code:
#include <p33fj12mc202.h> #include <pwm.h> #include <pwm12.h> #define Ts 1249 #define hs 0.5 _FOSCSEL(FNOSC_PRIPLL&IESO_OFF);//dung dao dong ngoai co bo PLL _FOSC(FCKSM_CSDCMD&OSCIOFNC_OFF&POSCMD_XT);//chon che do XT _FWDT(FWDTEN_OFF);//tat watchdog _FPOR(PWMPIN_ON&HPOL_ON&LPOL_ON);//cac chan ra dieu khien boi PORT luc reset,deu co the cao unsigned char i=0; unsigned char j=0; unsigned int const sin_table[40]={0,98,195,291,386,478,567,653,734,811,883,950,1010,1065,1113,1154,1188,1214,1234,1245,1249, 1245,1234,1214,1188,1154,1113,1065,1010,950,883,811,734,653,567,478,386,291,195,98}; void Init_PWM(void); int main(void) { PLLFBD = 41; _PLLPOST = 0; _PLLPRE = 0; while (_COSC !=0b011);//dung bo PLL tao Fosc=80MHz,cho cho dao dong on dinh while (_LOCK !=1);//cho PLL bat dau khoa pha TRISB=0X0000; LATB=0X0000; Init_PWM(); while(1); } void Init_PWM(void) { P1TCONbits.PTMOD = 0b10;//continuous up/down cout mode P1TCONbits.PTCKPS = 0b01;//prescale 4Tcy P1TCONbits.PTOPS = 0b0000;//postscale 1:1 P1TPER = Ts;//Fpwn = 4kHz PWM1CON1bits.PMOD1=0;//complementary mode PWM1CON1bits.PMOD2=0; PWM1CON1bits.PEN2H=1;//enable for PWM output PWM1CON1bits.PEN1H=1; PWM1CON1bits.PEN2L=1; PWM1CON1bits.PEN1L=1; PWM1CON2bits.IUE=0; PWM2CON2bits.UDIS=0;//update from duty cycle and period buffer registers are enabled P1DTCON1bits.DTAPS=0b00;//Dead time prescale 1:1 P1DTCON1bits.DTA = 40;//deadtime = 1um //P1DTCON1bits.DTBPS=0b00; //P1DTCON1bits.DTB = 0; P1DTCON2bits.DTS2A=0;//Unit A selected for PWM active transitions P1DTCON2bits.DTS1A=0; P1DTCON2bits.DTS1I=0;//Unit B selected for PWM inactive transitions P1DTCON2bits.DTS2I=0; P1OVDCONbits.POVD2H=1;//PWM I/O pin controlled by PWM generator P1OVDCONbits.POVD1H=1; P1OVDCONbits.POVD2L=1; P1OVDCONbits.POVD1L=1; P1DC1=0; P1DC2=0; _PWM1IF=0; _PWM1IE=1; P1TCONbits.PTEN=1; } void __attribute__((interrupt,auto_psv)) _MPWM1Interrupt(void) { _PWM1IF=0; if (i==0) { P1DC1 = (unsigned int)(Ts - sin_table[j])*hs; P1DC2 = (unsigned int)(Ts + sin_table[j])*hs; j++; if (j==40) {j=0;i=1;}; } else { P1DC1 = (unsigned int)(Ts + sin_table[j])*hs; P1DC2 = (unsigned int)(Ts - sin_table[j])*hs; j++; if (j==40) {j=0;i=0;}; } } thay đổi nội dung bởi: namqn, 30-08-2009 lúc 04:55 PM. Lý do: định dạng code |
![]() |
![]() |
![]() |
#5 | |
Trưởng lão PIC bang
|
Trích:
Do đó, bạn nên hỏi tác giả của ví dụ đó về hệ số hs. 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, 30-08-2009 lúc 06:27 PM. Lý do: viết thiếu từ "cycle" |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 3 túi
Tham gia ngày: Jul 2009
Bài gửi: 46
: |
đây là chương trình điều chế sóng sin.em xin nói qua về chương trình như sau:
sin_table[40] là bảng tạo sóng sin ở nửa chu kỳ.em đã hiểu hệ số 0,5 ở đây là để xét trong nửa chu kỳ.nửa chu kỳ đầu duty cycle dc cập nhật tại PDC1,nửa chu kỳ sau tại PDC2. nếu bảng sóng sin ở trên đc viết cho cả chu kỳ, thì công thức là P1DC1 = (unsigned int)(Ts + sin_table[j]) (vơi sin_table[j] là điện áp lấy mẫu,Ts là giá trị PTPER) em thắc mắc ở đây là làm thế nào để có công thức như vậy ạ. thay đổi nội dung bởi: JohnnyNguyen, 30-08-2009 lúc 06:18 PM. |
![]() |
![]() |
![]() |
#7 |
Đệ tử 5 túi
Tham gia ngày: May 2007
Bài gửi: 102
: |
nạp chuẩn ICSP đó bạn. MCLR(pin13)/VDD/VSS/PGD1(pin27)/PGC1(pin26)
chúc vui!
__________________
Thật bó tay! |
![]() |
![]() |
![]() |
#8 |
Nhập môn đệ tử
Tham gia ngày: Jun 2009
Bài gửi: 5
: |
Có ai cấu hình đồng thời hai bộ QEI trong 33fj64mc802 chưa.các bác cho em hỏi em cấu hình sai ở chỗ nào mà 2 con encoder không thể hoạt động đông thời .cụ thể:
mạch cưng của em như sau: A1: rb5 ;b1:rb6; a2:rb8; b2:rb9 Assign QEA1 To Pin RP5 -- noi chan A cua encoder 1 voi chan rp5 //*************************** RPINR14bits.QEA1R = 5; //*************************** // Assign QEB1 To Pin RP6 -- noi chan B cua encoder 1 voi chan rp6 //*************************** RPINR14bits.QEB1R = 6; //*************************** // Assign QEA2 To Pin RP8 -- noi chan A cua encoder 2 voi chan rp8 //*************************** RPINR16bits.QEA2R = 8; //*************************** // Assign QEB2 To Pin RP9 -- noi chan B cua encoder 2 voi chan rp9 //*************************** RPINR16bits.QEB2R = 9; // cau hinh ban dau cho cac encoder: /* QEI1 */ /*---------------------------------------------------------------------------*/ /* OpenQEI(QEI_MODE_x4_MATCH & QEI_INPUTS_NOSWAP & QEI_IDLE_STOP & QEI_NORMAL_IO & QEI_INDEX_RESET_DISABLE, QEI_QE_CLK_DIVIDE_1_128 & QEI_QE_OUT_ENABLE & POS_CNT_ERR_INT_DISABLE); */ QEI1CONbits.QEIM = 7; // QEI_MODE_x4_MATCH QEI1CONbits.SWPAB = 0; // QEI_INPUTS_SWAP QEI1CONbits.QEISIDL = 1; // QEI_IDLE_STOP QEI1CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE QEI1CONbits.PCDOUT = 0; // QEI_NORMAL_IO QEI1CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE DFLT1CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128 DFLT1CONbits.QEOUT = 1; // QEI_QE_OUT_ENABLE MAX1CNT = 7999; POS1CNT = 0; /*................................................. ......................QEI */ /*---------------------------------------------------------------------------*/ /* QEI2 */ /*---------------------------------------------------------------------------*/ /* OpenQEI(QEI_MODE_x4_MATCH & QEI_INPUTS_NOSWAP & QEI_IDLE_STOP & QEI_NORMAL_IO & QEI_INDEX_RESET_DISABLE, QEI_QE_CLK_DIVIDE_1_128 & QEI_QE_OUT_ENABLE & POS_CNT_ERR_INT_DISABLE); */ QEI2CONbits.QEIM = 7; // QEI_MODE_x4_MATCH QEI2CONbits.SWPAB = 0; // QEI_INPUTS_SWAP QEI2CONbits.QEISIDL = 1; // QEI_IDLE_STOP QEI2CONbits.POSRES = 0; // QEI_INDEX_RESET_DISABLE QEI2CONbits.PCDOUT = 0; // QEI_NORMAL_IO QEI2CONbits.POSRES = 0; // POS_CNT_ERR_INT_DISABLE DFLT2CONbits.QECK = 6; // QEI_QE_CLK_DIVIDE_1_128 DFLT2CONbits.QEOUT = 1; // QEI_QE_OUT_ENABLE MAX2CNT = 7999; POS2CNT = 0; em cấu hình như trên nhưng chi có encoder 1 hoạt động.(các encoder ,và chân chíp em đã test cẩn thận).khi em đảo encoder1 và 2 cho nhau thì con 2 lại hoạt động. em nghĩ cấu hình hai chân rb8,rb9 của em có vẫn đề,nhưng em đọc data sheet chưa gỡ gì được. |
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 12
: |
Em chưa hiểu lắm về DMA RAM, mà tìm tài liêu thì mơ hồ quá. Nếu ai có khái niêm này thì có thể chia sẻ giùm em. Thanks
|
![]() |
![]() |
![]() |
#10 |
Nhập môn đệ tử
Tham gia ngày: May 2009
Bài gửi: 4
: |
Em đang dùng dsPIC33FJ256GP510 để phát âm thanh, dùng speex_8K.h và libspeex_8K.a
và phải có file âm thanh trong bộ nhớ chương trình. Em chưa biết file âm thanh đó như thế nào, dạng file và đưa nó vào bộ nhớ chương trình như thế nào. Và cách sử dụng các file speex_8K.h và libspeex_8K.a như thế nào để phát âm thanh được theo PWM (phải khai báo như thế nào và sử dụng các hàm như thế nào). Mong các cao thủ giúp đỡ. |
![]() |
![]() |
![]() |
#11 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 12
: |
Trong datasheet của dsPIC33FJxxGP trong phần chân Digital viết
-Output pins can drive from 3.0V to 3.6V -All digital input pins are 5V tolerant Em hiểu là nếu là input thì khi dùng các chân này là chân digital ta có thể cung cấp tới mức volt là 5V để có mức logic 1. Liệu có đúng không ạ? |
![]() |
![]() |
![]() |
#12 | |
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 |
|
![]() |
![]() |
![]() |
#13 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 12
: |
Như vậy,nếu như em nối một chân digital nào đó với mức Volt là 5V thì chip vẫn chịu được, tuy nhiên, mức logic trong trường hơp này sẽ không còn đúng nữa, và chip sẽ không nhận được logic là 1?
|
![]() |
![]() |
![]() |
#14 | |
Trưởng lão PIC bang
|
Trích:
Bạn đã học môn học "Kỹ thuật số" chưa? 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 |
|
![]() |
![]() |
![]() |
#15 |
Đệ tử 1 túi
Tham gia ngày: Jul 2007
Bài gửi: 17
: |
các huynh cho đệ thỉnh giáo chút về UART.
tình hình là đệ đọc datasheet của thằng dsPIC33FJ256GP510 có mấy bit đệ không hiểu. các huynh chỉ giáo giùm nhé . xin đa tạ trước Thanh ghi UxMODE IREN: IrDA® Encoder and Decoder Enable bit . IrDA là cái gì vậy,trong datasheet không nói về cái này.em không hiểu . nếu set bit này lên 1 thì hiện tượng gì xảy ra ? LPBACK: UARTx Loopback Mode Select bit . bit chọn chế độ lặp lại nghĩa là sao. trong đây thì cái gì sẽ lặp lại ? và lặp lại như thế nào ? ABAUD: Auto-Baud Enable bit tự động chọn tốc độ truyền nhận , em muốn đặt tốc độ truyền là 9600bps thì nó có tự hiểu không ? URXINV: Receive Polarity Inversion bit theo em hiểu thì "đảo giá trị nhận được" tức là nó nhận được là LSB -> MSB . thì đảo lại là MSB -> LSB không biết có đúng không ? ở thanh ghi UxSTA UTXISEL<1:0>: Transmission Interrupt Mode Selection bits chọn chế độ ngắt truyền .em tưởng cứ truyền xong 1 byte thì ngắt chứ ? UTXBRK: Transmit Break bit không hiểu !!! UTXEN: Transmit Enable bit bật kênh truyền . em tưởng khi mà bật bit UARTEN thì cả Rx và Tx đều phải được bật chứ . ADDEN: Address Character Detect bit không hiểu thêm chút nữa. đệ không biết tốc độ truyền thì được tính thế nào . giả sử giờ đệ có thạch anh 7.3728MHz , truyền với tốc độ 9600bps thì giá trị thanh ghi UxBRG là bao nhiêu ? xin cảm ơn. |
![]() |
![]() |
![]() |
Tags |
configuration, dspic30f, dspic33f |
|
|