PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-03-2008, 01:44 AM   #1
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Căn bản về dsPIC33

Bài 1: Bộ dao động của dsPIC33

1. Giới thiệu:

- dsPIC33 có 4 nguồn dao động (xem hình)
- Bộ PLL
- Bộ DOZE chạy ở chế độ tiết kiệm điện
- Bộ giám sát lỗi dao động FSCM (Fail Safe Clock Monitor)


Một lưu ý rằng, chu kỳ máy của dsPIC33 không giống với PIC. Dao động vào của PIC sử dụng 4 dao động để thực hiện 1 lệnh, trong khi đó bộ dao động vào của dsPIC33 thông qua bộ chia (nhân tần số) PLL, sau đó dùng 2 chu kỳ để thực hiện 1 lệnh.

Thông thường PIC cho phép dùng thạch anh 20MHz và chạy ở 5MIPS, trong khi đó dsPIC33 cho phép dao động FOSC tới 80MHz và chạy ở tối đa 40MIPS.



2. Cấu hình:

Việc cấu hình cho dsPIC33 tuân thủ các nguyên tắc sau:

Tần số mã lệnh:



FCY tương đương trực tiếp với MIPS (Million Instructions Per Second). Nghĩa là nếu FCY = 40MHz thì tương đương dsPIC33 chạy ở 40MIPS. Đây là tần số cho phép tối đa của dsPIC33.

Tần số dao động:



Tần số này đạt giá trị lớn nhất là 80MHz, dù cấu hình PLL hay sử dụng nguồn dao động kiểu gì đi nữa, các bạn cũng không được phép vượt quá tần số này.

Việc cấu hình PLL được cụ thể cho từng dòng dsPIC khác nhau, ở đây chúng ta lấy thí dụ dòng MC - Motor Control:


Nguồn dao động vào có thể là thạch anh hoặc bộ dao động (thường các bạn gọi là thạch anh 4 chân) hoặc là lấy nguồn dao động được tạo ra từ con chip khác. Ta gọi là nguồn dao động vào, tần số nguồn dao động vào được ký hiệu là . Bộ PLL là phần ở giữa của hình. PLL được cấu hình bởi các thanh ghi PLLPRE, PLLPOSTPLLDIV như trên hình.

Tần số dao động có thể được viết lại cụ thể như sau:



VCO là Voltage Control Output, ta không cần quan tâm tới thành phân này.

Hình trên mô tả cho chúng ta thấy, giả sử chúng ta muốn tạo tần số dao động FOSC là 80MHz (tần số tối đa) với thạch anh sử dụng là 10MHz, thì công việc của chúng ta là phải tính toán và cân đối các hệ số M, N1, N2. Khi đó chỉ việc thay thế nó và đặt vào các giá trị của PLLDIV, PLLPRE và PLLPOST.

Nhưng vấn đề của chúng ta, đó là việc giới hạn bởi các thông số ngõ ra và ngõ vào tại từng vị trí. Cụ thể là bao nhiêu thì các bạn nhìn vào hình đã thấy rõ.

Nếu dùng thạch anh hoặc dao động ngoại, các bạn không được phép sử dụng tần số nằm ngoài khoảng 1.6MHz đến 16MHz. Qua bộ chia PLLPRE, tần số không được vượt quá 0.8MHz đến 8MHz. Ở trước bộ chia PLLPOST không được nằm ngoài khoảng 100MHz đến 200MHz.

Oh, tới đây thì mọi việc đơn giản rồi. Nếu các bạn muốn dao động FOSC là x MHz, các bạn chỉ cần nhẩm tính N2, vì nó chỉ có thể là 2, 4, 8 sao cho giá trị trước khi qua bộ chia PLLPOST nằm trong khoảng 100MHz đến 200Mhz. Vậy là các bạn có một hệ số N2.

Bộ chia với hệ số M rất rộng, nằm từ 2 đến 513, nó tương đối linh động cho các bạn thực hiện các bộ chia. N1 cũng vậy, nó nằm từ 2 đến 33. Vậy chúng ta sẽ chọn N1 sao cho tần số dao động từ thạch anh vào sau PLLPRE nằm trong khoảng 0.8MHz tới 8MHz thế là ổn. Cuối cùng thì chúng ta chọn M.

Các bạn hãy ghi nhớ hình này vì nó rất quan trọng cho việc lựa chọn thạch anh và cấu hình PLL.


3. Vấn đề khi cấu hình:

Một điểm mà chúng ta cần phải chú ý thật kỹ mà Microchip khuyến cáo đó là tần số thạch anh hoặc nguồn dao động bất kỳ trước khi vào bộ chia PLL phải nằm trong khoảng 4MHz đến 8MHz. Nếu như nằm ngoài khoảng này, các bạn phải thực hiện theo các bước sau:
  1. Không dùng bộ chia PLL hoặc dùng dao động nội ngay khi khởi tạo.
  2. Sau khi khởi tạo xong thì cho phép thay đổi nguồn dao động, tính toán các hệ số PLL hoặc chọn cấu hình nguồn dao động
  3. Đổi sang nguồn dao đồng mình muốn sử dụng với bộ chia PLL phù hợp

Vd cụ thể đó là nếu các bạn dùng nguồn dao động là thạch anh 3MHz chứ không phải thạch anh 4MHz, các bạn phải tuân thủ các bước khởi tạo này để cấu hình dao động cho dsPIC33.


4. Lưu ý thường dùng:

Dao động XT: thạch anh 3-10MHz
Dao động HS: thạch anh 10 - 40MHz
Dao động EC: bộ dao động (thạch anh 4 chân hoặc lấy từ nguồn chip khác) từ 0.8 - 64MHz.

Khi có thời gian F sẽ cung cấp cho các bạn các cấu hình mẫu để các bạn chọn lựa cho các ứng dụng của mình. Tạm thời với bài viết cơ bản này, có lẽ các bạn đã nắm được cách cấu hình dao động cho chip của mình, và biết cách lựa chọn thạch anh phù hợp.

Chúc vui


Tài liệu tham khảo:
[1] Section 07. Oscillator - dsPIC33F FRM
[2] Datasheet dsPIC33F Motor Control Family

thay đổi nội dung bởi: falleaf, 16-03-2008 lúc 01:02 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-03-2008, 04:46 PM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bài 2: Delay

Khi lập trình bằng C30, hoặc các trình dịch từ gcc, chúng ta chú ý rằng gcc không cung cấp hàm delay( ). Do vậy, chúng ta phải tự viết các hàm này.

Sau đây là một thí dụ, các bạn hãy thử phân tích thí dụ này để hiểu được cách viết một hàm delay như thế nào, tất nhiên các bạn hoàn toàn có thể sử dụng luôn hàm này.

Lưu ý khi sử dụng, hãy tính toán một cách kỹ lưỡng các giá trị đặt cho cấu hình của mình.


File delay.h:
Code:
// Thay đổi giá trị FCY để phù hợp với cấu hình của chip, tính bằng MIPS
#define FCY  16000000					//16 MIPS

void Delay( unsigned int delay_count );
void Delay_Us( unsigned int delayUs_count );

// Những cấu hình này thường dùng để khởi tạo LCD, nên để ở đây
#define Delay200uS_count  (FCY * 0.0002) / 1080
#define Delay_1mS_Cnt     (FCY * 0.001) / 2950
#define Delay_2mS_Cnt     (FCY * 0.002) / 2950
#define Delay_5mS_Cnt     (FCY * 0.005) / 2950
#define Delay_15mS_Cnt    (FCY * 0.015) / 2950
#define Delay_1S_Cnt      (FCY * 1) / 2950

File delay.c:
Code:
#include "delay.h"

unsigned int temp_count;

void Delay( unsigned int delay_count ) 
{
	temp_count = delay_count +1;
	asm volatile("outer: dec _temp_count");	
	asm volatile("cp0 _temp_count");
	asm volatile("bra z, done");
	asm volatile("do #3200, inner" );	
	asm volatile("nop");
	asm volatile("inner: nop");
	asm volatile("bra outer");
	asm volatile("done:");
}
	

void Delay_Us( unsigned int delayUs_count )
{
	temp_count = delayUs_count +1;
	asm volatile("outer1: dec _temp_count");	
	asm volatile("cp0 _temp_count");
	asm volatile("bra z, done1");
	asm volatile("do #1500, inner1" );	
	asm volatile("nop");
	asm volatile("inner1: nop");
	asm volatile("bra outer1");
	asm volatile("done1:");
}

thay đổi nội dung bởi: falleaf, 22-03-2008 lúc 06:22 PM.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-04-2008, 01:22 AM   #3
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Bài 3: ADC 10/12-bit

Hoạt động ADC của các chip MCHP đều được mô tả như hình sau:


Quá trình lấy mấu ADC được thực hiện thông qua 2 quá trình: Sample (Lấy mẫu) và Conversion (Biến đổi). Quá trình này được mô tả đơn giản bằng việc dsPIC sẽ đóng khóa K để điện áp bên ngoài tích đủ vào một con tụ, sau đó mở khoá K để phân cách với mạch ngoài, và bắt đầu quá trình biến đổi từ Analog thành Digital.

Quá trình biến đổi được mô tả như hình dưới đây:



Vấn đề này quá đơn giản, vậy chúng ta cần tìm hiểu gì?

Chúng ta cần tìm hiểu:
  1. Làm thế nào để cấu hình hoạt động cho Module ADC để nó hoạt động theo ý ta muốn?
  2. Khi nào thì bắt đầu quá trình Sample (lấy mẫu), khi nào thì bắt đầu quá trình Conversion (biến đổi). Có những cách nào để tác động vào quá trình này?
  3. Sau khi chuyển đổi xong, làm thế nào ta lấy được kết quả và bỏ vào một thanh ghi bất kỳ mà ta muốn?

Thực tế là chúng ta muốn thế, nhắm mắt lại và kệ xừ mọi thứ, cái quan trọng là khi kết quả nằm trong một biến nào đó là xong. Người lập trình C lúc nào cũng mong muốn điều này, bởi nếu không thì họ đã lập trình với ASM30 mất rồi. Chúng ta sẽ tìm hiểu ở đây theo kiểu tư duy của người lập trình bằng ngôn ngữ cấp cao, nhưng sẽ hiểu đủ sâu để có thể làm việc với ASM30.

F đặt ra những câu hỏi theo thứ tự tư duy như bên dưới đây:

1. Thời gian Sample (Lấy mẫu) và Conversion (Biến đổi) là bao nhiêu?

Đơn giản cực, đôi khi các bạn không để ý, nhưng nó có ngay trong datasheet. F lấy thí dụ datasheet của dòng dsPIC33FJxxxMCxxx (DS70287A-page 319)





Vậy ở đây xuất hiện thêm một số khái niệm mà sau này để đơn giản, F viết là TAD và Tcy. Mối quan hệ giữa chúng? Làm sao để đặt được? Đây là câu hỏi tiếp theo và chúng ta sẽ giải quyết ngay dưới đây.


(còn tiếp, vì F chưa có thời gian viết xong)

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 14-04-2008, 11:08 AM   #4
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
Xin các anh hướng dẫn thêm về cách thiết kế mạch cho dsPIC33: điện thế ngõ vào cho pic33fj, giao tiếp ngoại vi như thế nào cho an toàn? Nếu ta đưa diện thế 5V vào chân input thì có sao ko (vì PIC33F chỉ hoạt động ở 3V-3V6 thôi). Ngoài ra, nạp cho PIC33 như thế nào? em thấy sơ đồ chân có nhiều chân PGD và PGC. Ta cho đường ICSP đến cặp chân nào cũng được phải ko?

thay đổi nội dung bởi: meishun, 14-04-2008 lúc 12:21 PM.
meishun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-04-2008, 02:37 PM   #5
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Trích:
Nguyên văn bởi meishun View Post
Xin các anh hướng dẫn thêm về cách thiết kế mạch cho dsPIC33: điện thế ngõ vào cho pic33fj, giao tiếp ngoại vi như thế nào cho an toàn? Nếu ta đưa diện thế 5V vào chân input thì có sao ko (vì PIC33F chỉ hoạt động ở 3V-3V6 thôi). Ngoài ra, nạp cho PIC33 như thế nào? em thấy sơ đồ chân có nhiều chân PGD và PGC. Ta cho đường ICSP đến cặp chân nào cũng được phải ko?
Các bạn hãy tham khảo tài liệu Explorer 16 User Guide, ở phần cuối của tài liệu có mạch nguyên lý của mạch phát triển Explorer 16. Trong đó, các phần nguồn, phần mạch nạp, các phần ngoại vi liên quan cũng có thể xem thêm các PIC Tail dành cho Exp 16.

Tài liệu tham khảo tại đây:
http://ww1.microchip.com/downloads/e...e%2051589a.pdf (từ trang 37)

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 11-05-2008, 02:29 PM   #6
duc thang
Đệ tử 1 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 11
:
Bạn nào có link về mô tả cụ thể các lệnh của dsP33F (intruction set decription) giới thiệu mình với. Dataheeet ghi tóm tắt quá, nhiều lệnh mình đọc không hiểu kỹ.
duc thang vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-05-2008, 02:23 AM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi duc thang View Post
Bạn nào có link về mô tả cụ thể các lệnh của dsP33F (intruction set decription) giới thiệu mình với. Dataheeet ghi tóm tắt quá, nhiều lệnh mình đọc không hiểu kỹ.
Bạn đọc tài liệu sau (dsPIC30F/33F Programmer's Reference Manual):
http://ww1.microchip.com/downloads/e...Doc/70157C.pdf

Tài liệu này được tôi đề cập đến trong các tutorial về dsPIC30F (tutorial 2 chẳng hạ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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2008, 12:15 PM   #8
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
con 33FJ256GP710 khac 33FJ256GP710 the nao?

em đang làm mạch với con 33FJ256GP710 nhưng khi cắm mạch nạp vào nó lại nhận là 33FJ256MC710 ? nạp thì nó vẫn nạp nhưng không biết là có đúng ko? em muốn hỏi bang chủ là như thế có gì lỗi ko? và dòng MC và GP khác nhau thế nào ko?
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2008, 12:31 PM   #9
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Unhappy cấu hình cho con 33FJ256PG710

mình đang dùng thạch anh 10M. mình cũng đã đọc data sheet nhưng mà do là mới chuyển qua dùng MPLab C30 nên mình cũng ko biết cách thiết lập cấu hình như thế nào nữa (thấy dùng CCS sướng thôi rồi lun) . có bạn nào có thể cho mình 1 mẫu thiết lập cấu hình cho con 33FJ256GP710 này để nó chạy ở 40Mips ko nhỉ? xin chân thành cảm ơn trước . mà trên diễn đàn của mình cũng ưu ai code cho các em 30F quá nhỉ, tội nghiệp mấy em 33F
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-06-2008, 06:31 PM   #10
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi hopeman View Post
mình đang dùng thạch anh 10M. mình cũng đã đọc data sheet nhưng mà do là mới chuyển qua dùng MPLab C30 nên mình cũng ko biết cách thiết lập cấu hình như thế nào nữa (thấy dùng CCS sướng thôi rồi lun) . có bạn nào có thể cho mình 1 mẫu thiết lập cấu hình cho con 33FJ256GP710 này để nó chạy ở 40Mips ko nhỉ? xin chân thành cảm ơn trước . mà trên diễn đàn của mình cũng ưu ai code cho các em 30F quá nhỉ, tội nghiệp mấy em 33F
Các thiết lập cấu hình mẫu có trong tập tin header tương ứng của chip (vào thư mục con "support\dsPIC33F\h" của thư mục cài đặt MPLAB C30, mở tập tin "p33FJ256GP710.h", tìm đoạn chú thích "Macros for setting device configuration registers"). Code của dsPIC30F hoàn toàn tương thích với dsPIC33F, bạn tham khảo các link dưới đây, và hãy rút lại phát biểu trên:
http://techtrain.microchip.com/webse..._p1_111605.pdf
http://techtrain.microchip.com/webse..._p2_111605.pdf

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-06-2008, 08:45 PM   #11
meishun
Đệ tử 6 túi
 
meishun's Avatar
 
Tham gia ngày: Jul 2006
Bài gửi: 135
:
Trích:
Nguyên văn bởi hopeman View Post
em đang làm mạch với con 33FJ256GP710 nhưng khi cắm mạch nạp vào nó lại nhận là 33FJ256MC710 ? nạp thì nó vẫn nạp nhưng không biết là có đúng ko? em muốn hỏi bang chủ là như thế có gì lỗi ko? và dòng MC và GP khác nhau thế nào ko?
trương hợp mạch nạp nhận sai chip thì tôi chưa từng gặp nên ko biết. Nhưng ép mạch nạp nạp con chip mà phần mềm ko hỗ trợ cho mạch nó thì tôi có làm thử. Nạp chạy tốt (vdụ mạch JDM va winpic800 v3.61 với PIC18F4685)
dsPIC33FJxxMCxx là dòng dsPIC Motor Control.
dsPIC33FJxxGPxx là dòng dsPIC General Purposes.
Bạn có thể dùng phần mềm MAPS của Microchip để so sánh các chip.
meishun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-08-2008, 04:35 PM   #12
piano lover
Nhập môn đệ tử
 
Tham gia ngày: Aug 2007
Bài gửi: 5
:
Có huynh nào biết con IC nào có thể chuyển đổi điện áp từ chuẩn 3.3 v lên chuẩn TTL 5 v ko? và tần số chuyển tối thiểu 40MHz để tương thích với con 33F.
piano lover vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-08-2008, 05:10 PM   #13
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi piano lover View Post
Có huynh nào biết con IC nào có thể chuyển đổi điện áp từ chuẩn 3.3 v lên chuẩn TTL 5 v ko? và tần số chuyển tối thiểu 40MHz để tương thích với con 33F.
Tôi vẫn dùng 74LVC4245:
http://www.nxp.com/acrobat_download/...LVC4245A_6.pdf

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-08-2008, 01:08 PM   #14
piano lover
Nhập môn đệ tử
 
Tham gia ngày: Aug 2007
Bài gửi: 5
:
Anh Nam, em thấy con này khá giống con 74HC245, liệu có thể thay thế con 74LVC4245 bằng con 74HC245 ko?
piano lover vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 05-08-2008, 05:44 PM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi piano lover View Post
Anh Nam, em thấy con này khá giống con 74HC245, liệu có thể thay thế con 74LVC4245 bằng con 74HC245 ko?
Vi mạch 74LVC4245 được đặc biệt thiết kế để giao tiếp giữa các hệ thống khác mức điện áp, và chỉ là bộ đệm hai chiều về mặt chức năng. Tuy nhiên, bạn không thể dùng 74HC245 thay cho vi mạch này, vì đơn giản 74HC245 chỉ có 1 rail nguồn, trong khi 74LVC4245 có 2 rail nguồn riêng biệt.

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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
configuration, dspic30f, dspic33f

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:38 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam