PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   Kinh nghiệm khi dùng dsPIC / Pic (http://www.picvietnam.com/forum/showthread.php?t=4199)

conglong 30-05-2009 01:12 AM

Kinh nghiệm khi dùng dsPIC / Pic
 
Mình mở ra topic này để anh em trong diễn đàn có kinh nghiệm sử dụng dsPIC / Pic thì có thể chia sẻ cho những người đi sau để người đi sau không phải "khốn khổ" như những người đi trước !
Mình thì chưa có nhiều kinh nghiệm lắm vì mới sử dụng dsPIC/Pic gần đây, nhưng mình có vài kinh nghiệm sau khi dùng dsPIC :
1 ) khi bạn muốn sử dụng các chân I/O nhưng các chân này lại được tích hợp cùng với các chân của khối AD đó là các PIN: AN0, AN1..... thì bạn phải thực hiện lệnh này trước khi dùng các chân với chức năng I/O bình thường :

ADPCFG = 0xFFFF; //Cac chan ngõ vào la digital

2) bạn nên dùng thạch anh ngoài 6Mhz là hay nhất, vì theo mình biết ở chợ không có 7Mhz mà chỉ có 8Mhz, nhưng nếu bạn dùng 8Mhz thì bạn chỉ dùng được ở chế độ nhân 8 thôi (XT_PLL8) ,nếu dùng PLL16 thì vượt quá dao động cho phép của Pic (8 * 16 = 148 > 120 !).còn khi dùng 6Mhz thì bạn hoàn toàn dùng chế độ nhân 16 (XT_PLL16), vậy khi này ở 8Mhz dao động thạch anh ngoài bạn có Fcy(max) = 8 * 8 / 4 = 16Mhz, còn lúc dùng 6Mhz bạn có Fcy(max) = 6*16 / 4 = 24 Mhz, Điều này nghe không quan trọng khi dùng pic cho dự án nhỏ , còn khi dùng pic cho dự án lớn thì tốc độ xử lý sẽ rất quan trọng.

3) 2 tụ chống nhiễu nối với bộ dao động thạch anh ngoài nên là 22p,hoặc 33p , đừng lớn quá, mọi hôm mình dùng 2 tụ này là 104 thì nó làm mình mất một ngày !

Trân trọng !.

tungnh 01-06-2009 12:38 PM

Rất cám ơn bạn về những kinh nghiệm của bạn , tuy nhiên tôi có 1 vài góp ý cho bạn thế này
Trích:

1 ) khi bạn muốn sử dụng các chân I/O nhưng các chân này lại được tích hợp cùng với các chân của khối AD đó là các PIN: AN0, AN1..... thì bạn phải thực hiện lệnh này trước khi dùng các chân với chức năng I/O bình thường :

ADPCFG = 0xFFFF; //Cac chan ngõ vào la digital
Cái này không cần thiết, nếu bạn kô định nghĩa nó là chăn Analog thì nó là chăn I/O rồi
Trích:

2) bạn nên dùng thạch anh ngoài 6Mhz là hay nhất, vì theo mình biết ở chợ không có 7Mhz mà chỉ có 8Mhz, nhưng nếu bạn dùng 8Mhz thì bạn chỉ dùng được ở chế độ nhân 8 thôi (XT_PLL8) ,nếu dùng PLL16 thì vượt quá dao động cho phép của Pic (8 * 16 = 148 > 120 !).còn khi dùng 6Mhz thì bạn hoàn toàn dùng chế độ nhân 16 (XT_PLL16), vậy khi này ở 8Mhz dao động thạch anh ngoài bạn có Fcy(max) = 8 * 8 / 4 = 16Mhz, còn lúc dùng 6Mhz bạn có Fcy(max) = 6*16 / 4 = 24 Mhz, Điều này nghe không quan trọng khi dùng pic cho dự án nhỏ , còn khi dùng pic cho dự án lớn thì tốc độ xử lý sẽ rất quan trọng.
DsPic bạn muốn nói tới là dòng dsPic30F hả? chứ dòng dsPic33f thì lại khác đó.

conglong 01-06-2009 10:09 PM

Trích:

Nguyên văn bởi tungnh (Post 26339)
Rất cám ơn bạn về những kinh nghiệm của bạn , tuy nhiên tôi có 1 vài góp ý cho bạn thế này
ADPCFG = 0xFFFF;

Cái này không cần thiết, nếu bạn kô định nghĩa nó là chăn Analog thì nó là chăn I/O rồi

Khi reset thanh ghi này có giá trị là 0x0000, tức là các Pin AN0...ANx là chân analog, mà mình muốn sử dụng các chân này với chức năng I/O tức là digital thì mình đành phải set giá trị của thanh ghi này là 0xFFFF.cái này mình làm thực tế với con dsPIC 30F4011 rồi : khi mình dùng 3 chân : số 2 (EMUD3/AN0/VREF+/CN2/RB0), số 3 (EMUC3/AN1/VREF-/CN3/RB1) và số 4 (AN2/SS1/CN4/RB2) để điều khiển role thì khi không dùng lệnh trên thì nó không thể I/O (ở đây là out) được, còn khi thêm lệnh đó vào thì nó I/O bình thường.
Chắc bạn là người làm thực tế nhiều về dòng vi điều khiển PIC/dsPIC , mong bạn chia sẻ kinh nghiemm cho anh em với. để người đi sau đỡ "khổ".
Trân trọng !.

conglong 01-06-2009 10:13 PM

Trích:

Nguyên văn bởi tungnh (Post 26339)
Rất cám ơn bạn về những kinh nghiệm của bạn , tuy nhiên tôi có 1 vài góp ý cho bạn thế này

2) bạn nên dùng thạch anh ngoài 6Mhz là hay nhất, vì theo mình biết ở chợ không có 7Mhz mà chỉ có 8Mhz, nhưng nếu bạn dùng 8Mhz thì bạn chỉ dùng được ở chế độ nhân 8 thôi (XT_PLL8) ,nếu dùng PLL16 thì vượt quá dao động cho phép của Pic (8 * 16 = 148 > 120 !).còn khi dùng 6Mhz thì bạn hoàn toàn dùng chế độ nhân 16 (XT_PLL16), vậy khi này ở 8Mhz dao động thạch anh ngoài bạn có Fcy(max) = 8 * 8 / 4 = 16Mhz, còn lúc dùng 6Mhz bạn có Fcy(max) = 6*16 / 4 = 24 Mhz, Điều này nghe không quan trọng khi dùng pic cho dự án nhỏ , còn khi dùng pic cho dự án lớn thì tốc độ xử lý sẽ rất quan trọng.

DsPic bạn muốn nói tới là dòng dsPic30F hả? chứ dòng dsPic33f thì lại khác đó.

Uh đúng rồi mình chưa xài dsPic33F lần nào hết, vậy thì với dsPic33F thì thế nào hả bạn ?
Trân trọng !.

hopeman 02-06-2009 11:10 AM

kinh nghiệm của mình là nếu làm với con nào thì nên đọc qua datasheet của nó 1 lượt, rồi trong quá trình làm, làm đến module nào đọc kỹ lại module đó :D

tungnh 02-06-2009 11:14 AM

Trích:

Nguyên văn bởi conglong (Post 26367)
Uh đúng rồi mình chưa xài dsPic33F lần nào hết, vậy thì với dsPic33F thì thế nào hả bạn ?
Trân trọng !.

Với dòng dsPic33F thì cấu hình chỉ cần cấu hình PLL chung như thế này : _FOSCSEL(FNOSC_PRIPLL);
Sau đó tần số thực thi lệnh được tính theo công thức thế này :
Fosc= Fin*M/(N1*N2), Fcy=Fosc/2;
ví dụ :
PLLFBD=30; // M=32
CLKDIVbits.PLLPOST=0; // N1=2
CLKDIVbits.PLLPRE=0; // N2=2
// Fosc= 10M*32/(2*2)=80Mhz for 10M input clock
Như vậy việc cấu hình hệ số PLL cho dong dsPic33F rất linh hoạt

cuongthinh 02-06-2009 10:37 PM

Anh tungnh làm PFC số rồi thì giúp đỡ em với. Anh qua bài viết về PFC em mới Post cho em vài ý kiến. Em đang cảm thấy rất kếm về DSP, em chưa hiểu tại sao chương trình của em chưa chạy. Nhân đây các anh cho em hỏi khi thực hiện phép tính toán giữa hai số khác kiểu (ví dụ nhân số fractional với số float) thì xảy ra hiện tượng j? kết quả phép tính có sai kô? có cần chuyển chúng về cùng định dạng kô?


Múi giờ GMT. Hiện tại là 04:08 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam