Cơ bản về PIC và dsPIC, các phần mềm liên quan

Những kiến thức căn bản về vi điều khiển, vi xử lý tín hiệu số ban đầu rất quan trọng. Mình xin trích bài viết của anh nqnam về PIC và dsPIC cho các bạn. Bài viết rất hay, rất đáng để học tập. Mình copy lại đây cũng là để làm tư liệu sau này, nhỡ chẳng may web anh Nam bị die lại quay sang hỏi mình =))

Giới thiệu, anh Nam là supermode của PICVietnam và Dientuvietnam.net, anh rất nhiệt tình và có kiến thức về thực hành rất kinh. Mình không tiếp xúc với anh Nam nhiều nhưng qua các bài viết của anh cũng hiểu được anh cẩn thận đến mức nào và uyên tâm tới đâu.

Bắt đầu nào

Hầu hết các mạch vi điều khiển của tôi hiện nay dùng PIC và dsPIC. Tôi đang tham gia diễn đàn PIC Vietnam, tại đó tôi trao đổi kinh nghiệm sử dụng PIC và dsPIC với những người dùng khác. Tôi dùng phần này của trang web để hệ thống hóa các kiến thức về PIC và dsPIC, cũng như cung cấp các thông tin về phần mềm và thiết kế phần cứng mà tôi sưu tầm được trên net.

Cơ bản về PIC

PIC nói chung là họ vi điều khiển 8-bit/16-bit, dựa trên kiến trúc Harvard sửa đổi, với tập lệnh rút gọn (do vậy PIC thuộc loại RISC). PIC được sản xuất từ dòng cơ bản như PIC10 hay PIC12, qua dòng cấp thấp PIC16, cho đến dòng cấp cao PIC18. Hiện nay hãng Microchip đã có các họ vi điều khiển 16-bit, gồm PIC24H và PIC24F. Hãng Microchip cũng vừa giới thiệu vào tháng 11 năm 2007 họ vi điều khiển 32-bit, PIC32MX, dựa trên lõi MIPS32 M4K.

Cơ bản về dsPIC

Chỉ xét riêng phần vi điều khiển, dsPIC giống như PIC24, là các vi điều khiển 16-bit, dựa trên kiến trúc Harvard sửa đổi, với tập lệnh rút gọn (như vậy dsPIC và PIC24 cũng thuộc loại RISC). dsPIC hiện nay gồm có hai dòng: dsPIC30F và dsPIC33F.

Các phần mềm liên quan đến họ vi điều khiển PIC và dsPIC

  • WinPic Programmer-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, do Wolfgang Buescher, DL4YHF viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp và song song), và bổ sung chip được hỗ trợ thông qua tập tin cấu hình. Phiên bản mới nhất của phần mềm có thể download tại http://people.freenet.de/dl4yhf/.
  • WinPic800-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, do Sisco Benach Font viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp, song song, và USB), tự động nhận diện chip cần nạp, và có tốc độ rất nhanh. Phiên bản mới nhất của phần mềm có thể download tại http://www.winpic800.com.
  • PICPgm Develop. Programmer-phần mềm để nạp chương trình cho PIC12F đến PIC18F, do Christian Stadler viết. Phần mềm miễn phí này cho phép tùy biến phần cứng (hỗ trợ các mạch nạp qua cổng nối tiếp, song song, và USB), và tự động nhận diện chip cần nạp. Phiên bản mới nhất của phần mềm có thể download tại http://www.members.aon.at/electronics/. Xem giới thiệu về mạch nạp PICPgm USB Programmer dưới đây.
  • OshonSoft Parallel Port Programmer-phần mềm để nạp chương trình cho PIC16F và PIC18F, do Vladimir Soso viết. Phần mềm miễn phí này gồm 2 chương trình nhỏ viết riêng cho PIC16F và PIC18F, cho phép tùy biến phần cứng (qua cổng song song). Riêng bản dành cho PIC18F cho phép bổ sung chip được hỗ trợ thông qua tập tin cấu hình. Phiên bản mới nhất của phần mềm có thể download tại http://www.oshonsoft.com.
  • melabs Programmer-phần mềm để nạp chương trình cho mọi loại PIC, kể cả dsPIC, của hãng melabs. Phần mềm này được phát triển để dùng chung với các mạch nạp của hãng melabs, thường là các mạch nạp có smart chip và cần firmware. Nhưng may mắn là phần mềm này lại hỗ trợ một mạch nạp đơn giản tương thích với mạch nạp Tait classic, giao tiếp qua cổng song song. Phần mềm này không phải miễn phí, nhưng bạn có thể download bản thử nghiệm beta miễn phí tại http://www.melabs.com.
  • EPIC Win-phần mềm để nạp chương trình cho PIC16 và PIC18, của hãng melabs. Phần mềm này tương tự như melabs Programmer, được thiết kế để dùng riêng cho các mạch nạp của melabs, nhưng cũng hỗ trợ mạch nạp tương thích Tait classic qua cổng song song. Phần mềm này không phải miễn phí, nhưng bạn có thể download bản thử nghiệm beta miễn phí tại http://www.melabs.com.
  • Các phần mềm của sprut-hỗ trợ việc nạp chương trình cho tất cả các PIC và dsPIC30F dùng bộ nhớ flash. Các phần mềm miễn phí này giao tiếp với các mạch nạp qua cổng song song. FlashOver12 dùng cho các chip có lõi 12-bit (hiện hỗ trợ 10 chip), PBrennerNG dùng cho các chip có lõi 14-bit (hiện hỗ trợ 58 chip), P18 dùng cho các chip 18F 16-bit (hiện hỗ trợ 88 chip), và dsProg dùng cho các chip dsPIC30F (hiện hỗ trợ 28 chip). Phiên bản mới nhất của các phần mềm có thể download tại http://www.sprut.de. Trang web viết bằng tiếng Đức, nhưng tôi tin là bạn có thể tìm được các phần mềm cần thiết. May mắn là các phần mềm có giao diện tiếng Anh.
  • US-Burn-phần mềm của sprut dùng với mạch nạp Brenner8/Brenner9 (được giới thiệu dưới đây), thông qua giao tiếp USB. Hiện nay danh sách chip được hỗ trợ đã có 356 loại khác nhau, từ PIC10F đến dsPIC33F. Theo kết quả thử nghiệm mới của tôi, hiện nay các dòng PIC cấp thấp, tầm trung, cấp cao, và dsPIC đều được hỗ trợ. Tốc độ của giải pháp này là khá nhanh, với phần mềm khá nhiều tính năng. Phiên bản mới nhất có thể download tại http://www.sprut.de.
  • PICkit 2 Programmer-phần mềm của Microchip dùng với mạch nạp/debug PICkit 2, thông qua giao tiếp USB. Hỗ trợ hầu như toàn bộ các chip flash của Microchip, từ PIC10F đến PIC32. Tốc độ của giải pháp này là nhanh, với phần mềm có đủ các tính năng cơ bản (riêng phần thông tin cấu hình thì chỉ hiển thị). Phiên bản mới nhất có thể download tại http://www.microchip.com.
  • MPLAB IDE-một IDE với trình hợp dịch, bộ mô phỏng. Hoàn toàn miễn phí và download tại http://www.microchip.com. Vì hãng Microchip thường xuyên cập nhật trang web, tôi sẽ không đưa ra liên kết cụ thể ở đây. Bạn hãy theo liên kết của MPLAB IDE để đến trang thông tin của nó, trong đó sẽ có liên kết để download.
  • CC5X-trình biên dịch C cho PIC tầm trung và cơ bản, của hãng BKND, tương thích với MPLAB IDE. Phiên bản miễn phí giới hạn 1 k (1024) lệnh trong mỗi module C, download tại http://www.bknd.com.
  • HI-TECH C PRO for the PIC10/PIC12/PIC16-trình biên dịch C cho PIC tầm trung và cơ bản, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại http://www.htsoft.com. Tôi chưa từng dùng trình biên dịch này.
  • MPLAB C18 SE-trình biên dịch C cho PIC cấp cao, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại http://www.microchip.com. Bạn hãy theo liên kết của Development Tools, rồi đến MPLAB C18 Compiler.
  • HI-TECH C PRO for the PIC18-trình biên dịch C cho PIC cấp cao, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại http://www.htsoft.com. Tôi chưa từng dùng trình biên dịch này.
  • MPLAB C30 SE-trình biên dịch C cho dsPIC và PIC24, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại http://www.microchip.com. Bạn hãy theo liên kết của Development Tools, rồi đến MPLAB C30 Compiler.
  • MPLAB C32 SE-trình biên dịch C cho PIC32, tương thích với MPLAB IDE. Phiên bản miễn phí đầy đủ tính năng trong 60 ngày, sau đó giới hạn khả năng tối ưu mã, download tại http://www.microchip.com.
  • HI-TECH C PRO for the PIC32-trình biên dịch C cho PIC32, của hãng HI-TECH, tương thích với MPLAB IDE và HI-TIDE. Phiên bản miễn phí (Lite mode) giới hạn khả năng tối ưu mã, download tại http://www.htsoft.com. Tôi chưa từng dùng trình biên dịch này.

Các thiết kế phần cứng liên quan đến họ vi điều khiển PIC và dsPIC

  • JDM-mạch nạp rất đơn giản cho nhiều dòng PIC, giao tiếp với máy tính qua cổng nối tiếp, được rất nhiều phần mềm hỗ trợ. Mạch nguyên lý có thể xem tại http://www.jdm.homepage.dk
  • JDM Mod-mạch nạp dựa trên SI-Prog và tương thích JDM, giao tiếp với máy tính qua cổng nối tiếp, do tôi thiết kế (nhằm khắc phục vấn đề điện áp thấp của các cổng nối tiếp trong các máy laptop). Mạch nguyên lý có thể thấy ở hình 1.
  • Schaer+ Mod-mạch nạp dựa trên Schaer+, giao tiếp với máy tính qua cổng song song, do tôi sửa đổi, được đa số phần mềm hỗ trợ (vì thực chất tương thích với mạch nạp Tait classic). Mạch nguyên lý có thể thấy ở hình 2.
  • PICPgm USB-mạch nạp do Christian Stadler thiết kế, chỉ sử dụng một vi mạch FT245BL (hay FT245BM) và một mạch logic 7414. Tác giả mong muốn giải quyết triệt để bài toán "con gà và quả trứng" (để có được một mạch nạp, cần nạp chương trình cho một vi điều khiển sẽ được dùng trong ... mạch nạp đó). Kết quả thử nghiệm của tôi cho thấy tốc độ của mạch nạp vẫn còn thấp, đặc biệt là tốc độ đọc dữ liệu từ chip. Tuy nhiên, những ai quan tâm có thể tìm thấy sơ đồ mạch tại http://www.members.aon.at/electronics/.
  • Brenner8-mạch nạp do sprut thiết kế, dùng với phần mềm US-Burn đã giới thiệu ở trên. Mạch có tốc độ khá cao, hỗ trợ 207 loại PIC và dsPIC. Mạch nạp này sử dụng PIC18F2550 và một số linh kiện rời, trong đó điện cảm dùng trong mạch nâng áp có thể hơi khó tìm tại Việt Nam. Cần chú ý là mạch phải được calib trước khi gắn chip cần nạp vào, nếu không bạn có thể làm hỏng chip. Chương trình trên host PC và firmware cho PIC18F2550 là hoàn toàn miễn phí (đóng gói chung trong một tập tin nén), có thể download tại http://www.sprut.de.
  • Brenner9-mạch nạp do sprut thiết kế, dùng với phần mềm US-Burn đã giới thiệu ở trên. Mạch có tốc độ khá cao, hỗ trợ 143 loại PIC và dsPIC điện áp thấp (danh định là 3.3 V). Mạch nạp này sử dụng PIC18F2550 và một số linh kiện rời. Cần chú ý là mạch phải được calib trước khi gắn chip cần nạp vào, nếu không bạn có thể làm hỏng chip. Chương trình trên host PC và firmware cho PIC18F2550 là hoàn toàn miễn phí (đóng gói chung trong một tập tin nén), có thể download tại http://www.sprut.de.

JDM Mod
Hình 1. Mạch nạp JDM Mod

Schear+ Mod
Hình 2. Mạch nạp Schaer+ Mod

Các mạch nạp và phần mềm được giới thiệu ở đây đã được tôi thử nghiệm thực tế. Dưới đây là bảng tổng hợp (chưa đầy đủ) các kết quả thử nghiệm.

No. PIC/dsPIC Package WIN PIC WinPic800 OshonSoft PICPgm melabs Prog. EPIC Win US-Burn PICkit 2
1 10F202 DIP8 - - - - - - B PK
2 10F206 DIP8 - - - - - - B PK
3 10F220 DIP8 - - - - - - B PK
4 10F222 DIP8 - - - - - - B PK
5 12F675 DIP8 S S - S S S B PK
6 12F683 DIP8 S S,J - S,J S S B PK
7 16F628A DIP18 S,J S,J S S,J S S B PK
8 16F648A DIP18 S,J S,J - S,J S S B PK
9 16F676 DIP14 S,J S,J S! S,J S S B PK
10 16F684 DIP14 S,J S,J - S,J S S B PK
11 16F688 DIP14 S,J S,J - S,J S S B PK
12 16F72 SDIP28 - - - - - - B PK
13 16F767 SDIP28 - S S S S S B PK
14 16F777 DIP40 - S S S S S B PK
15 16HV785 DIP20 - - - - - - - PK
16 16F819 DIP18 S!,J S,J S J S S B PK
17 16F872 SDIP28 - S,J - S,J S - B PK
18 16F873A SDIP28 - S,J - S,J S - B PK
19 16F876 SDIP28 - S,J - S,J S - B PK
20 16F876A SDIP28 S S,J - S,J S S B PK
21 16F877A DIP40 S S,J S(slow) S,J S S B PK
22 16F88 DIP18 S,J S,J - S,J S S B PK
23 16F886 DIP28 - - - S,J S - B PK
24 16F887 DIP40 - - - S,J S - B PK
25 16F913 SDIP28 S - - S,J S S B PK
26 16F914 DIP40 S - - S,J S S B PK
27 16F916 SDIP28 S - - S S S B PK
28 16F917 DIP40 S - - S,J S S B PK
29 18F1220 DIP18 - S,J - S,J S - B PK
30 18F1320 DIP18 - S,J - S,J S - B PK
31 18F1330 DIP18 - - - - S - B PK
32 18F2220 SDIP28 S,J S,J S S,J S S B PK
33 18F2221 SDIP28 - - - S,J S - B PK
34 18F2320 SDIP28 S,J S,J S S,J,P S S B PK
35 18F2321 SDIP28 - - - S,J S - B PK
36 18F2331 SDIP28 S,J S,J S S,J S S B PK
37 18F2420 SDIP28 S,J S,J S S,J S S B PK
38 18F2423 SDIP28 - - - S,J S - B PK
39 18F2431 SDIP28 S,J S,J S S,J S S B PK
40 18F2450 SDIP28 S,J - S S,J S - B PK
41 18F2455 SDIP28 S,J S,J S S,J S - B PK
42 18F2458 SDIP28 - - - S,J S - B PK
43 18F2480 SDIP28 S,J S,J S S,J S S B PK
44 18F24J10 SDIP28 - - - - - - - PK
45 18F24K20 SDIP28 - - - - - - - PK
46 18F2515 SDIP28 - S,J - S,J S - B PK
47 18F252 SDIP28 - S,J - S,J S - B PK
48 18F2520 SDIP28 S,J S,J S S,J S S B PK
49 18F2523 SDIP28 - - - S,J S - B PK
50 18F2525 SDIP28 S,J S,J S S,J S S B PK
51 18F2539 SDIP28 S,J S,J S S,J S S B PK
52 18F2550 SDIP28 S,J S,J S S,J S - B PK
53 18F2553 SDIP28 - - - S,J S - B PK
54 18F258 SDIP28 - S,J - S,J S - B PK
55 18F2580 SDIP28 S,J S,J S S,J S S B PK
56 18F2585 SDIP28 S,J S,J S S,J S S B PK
57 18F25J10 SDIP28 - - - - - - - PK
58 18F25K20 SDIP28 - - - - - - - PK
59 18F2610 SDIP28 - S,J - S,J S - B PK
60 18F2620 SDIP28 S,J S,J S S,J S S B PK
61 18F2680 SDIP28 S,J S,J S S,J S S B PK
62 18F2682 SDIP28 - - - S,J S - B PK
63 18F2685 SDIP28 - - - S,J S - B PK
64 18F4220 DIP40 S S,J S S,J S S B PK
65 18F4221 DIP40 - - - S,J S - B PK
66 18F4320 DIP40 S,J S,J S S,J S S B PK
67 18F4321 DIP40 - - - S,J S - B PK
68 18F4331 DIP40 S S,J S S,J S S B PK
69 18F442 DIP40 - S,J - S,J S - B PK
70 18F4420 DIP40 S,J S,J S S,J S S B PK
71 18F4423 DIP40 - - - S,J S - B PK
72 18F4431 DIP40 S,J S,J S S,J S S B PK
73 18F4450 DIP40 S - S - S - B PK
74 18F4455 DIP40 S,J S S S,J S - B PK
75 18F4458 SDIP28 - - - S,J S - B PK
76 18F4480 DIP40 S,J S,J S S,J S S B PK
77 18F44J10 DIP40 - - - - - - - PK
78 18F44K20 DIP40 - - - - - - - PK
79 18F4515 DIP40 - S,J - S,J S - B PK
80 18F452 DIP40 S,J S,J S S,J S S B PK
81 18F4520 DIP40 S,J S,J S S,J S S B PK
82 18F4523 DIP40 - - - S,J S - B PK
83 18F4525 DIP40 S,J S,J S S,J S S B PK
84 18F4539 DIP40 S S,J S S,J S S B PK
85 18F4550 DIP40 S,J S,J S S,J S - B PK
86 18F4553 DIP40 - - - S,J S - B PK
87 18F458 DIP40 S,J S,J S S,J S S B PK
88 18F4580 DIP40 S,J S,J S S,J S S B PK
89 18F4585 DIP40 S,J S,J S S,J S S B PK
90 18F45J10 DIP40 - - - - - - - PK
91 18F45K20 DIP40 - - - - - - - PK
92 18F4610 DIP40 - S,J - S,J S - B PK
93 18F4620 DIP40 S,J S,J S S,J S S B PK
94 18F4680 DIP40 S,J S,J S S,J S S B PK
95 18F4682 DIP40 - - - S,J S - B PK
96 18F4685 DIP40 - - - S,J S - B PK
97 24FJ32GA002 SDIP28 - - - - - - - PK
98 24FJ64GA002 SDIP28 - - - - - - - PK
99 24HJ12GP201 DIP18 - - - - - - - PK
100 24HJ12GP202 SDIP28 - - - - - - - PK
101 24HJ32GP202 SDIP28 - - - - - - - PK
102 24HJ128GP202 SDIP28 - - - - - - - PK
103 24HJ128GP502 SDIP28 - - - - - - - PK
104 30F1010 SDIP28 - - - - - - - PK
105 30F2010 SDIP28 S S - - S - B PK
106 30F2011 DIP18 S S - - S - B PK
107 30F2012 SDIP28 S S - - S - B PK
108 30F2020 SDIP28 - - - - - - - PK
109 30F3010 SDIP28 S S - - S - B PK
110 30F3011 DIP40 S S - - S - B PK
111 30F3012 DIP18 S S - - S - B PK
112 30F3013 SDIP28 S S - - S - B PK
113 30F3014 DIP40 S S - - S - B PK
114 30F4011 DIP40 S S - - S - B PK
115 30F4012 SDIP28 S S - - S - B PK
116 30F4013 DIP40 S S - - S - B PK
117 33FJ12GP201 DIP18 - - - - - - - PK
118 33FJ12GP202 SDIP28 - - - - - - - PK
119 33FJ12MC201 DIP20 - - - - - - - PK
120 33FJ12MC202 SDIP28 - - - - - - - PK
121 33FJ32GP202 SDIP28 - - - - - - - PK
122 33FJ32GP302 SDIP28 - - - - - - - PK
123 33FJ32MC202 SDIP28 - - - - - - - PK
124 33FJ32MC302 SDIP28 - - - - - - - PK
125 33FJ64MC202 SDIP28 - - - - - - - PK
126 33FJ64MC802 SDIP28 - - - - - - - PK
127 33FJ128MC202 SDIP28 - - - - - - - PK
128 33FJ128MC802 SDIP28 - - - - - - - PK

Chú thích: S-Schaer+, J-JDM, P-PICPgm USB, B-Brenner8, PK-PICkit 2. Các ô có ký hiệu '-' nghĩa là tổ hợp phần cứng và phần mềm đó không hỗ trợ chip tương ứng hay chưa được thử nghiệm.

Nguồn: http://www4.hcmut.edu.vn/~nqnam/uC.php#pic

{ 3 comments… add one }
  • trungkstn June 8, 2009, 8:12 pm

    Bọn em đi thi xong giờ thực tập. Không biết có rỗi không nhưng chắc giờ học PIC. Chắc phải lên picvietnam chăm thôi, ghé qua blog của anh một chút và comment phát 😛
    Anh Bắc à năm thứ 3 em học VC++ rồi, dùng sách thầy Phạm Công Ngô, nhưng mà em thấy em chẳng cảm nhận tốt với VC++ lắm anh ạ. Không biết có phải em code ít không 🙁
    Chúc anh mạnh khỏe.

    trungkstn’s last blog post..Bộ Môn Dao

    Reply
    • ngohaibac June 8, 2009, 8:50 pm

      Chào em.

      Năm thứ 3 học VC++ là được rồi em. Có điều anh không hề đọc hết quyển sách VC++ đâu, anh chỉ làm 1 vài bài đầu tiên để hiểu nguyên tắc nằm ở đâu mà thôi, bản chất của nó chỉ nằm ở thư viện của các điều khiển mà thôi.

      Khi em có khái niệm về lớp Class trong C++ thì việc này đơn giản lắm em ạ.

      Chúc em thành công.

      Reply
  • nhhegemonic April 5, 2011, 9:33 pm

    anh àh, em đang bắt đầu tìm hiểu về dspic30F4012; nhưng mà mới học năm 3 nên kiến thức chưa nắm được, anh cho em một ít kinh nghiệm và tài liệu cần thiết để em tham khảo nhé !!!
    nhất là những bài viết hay mà anh tổng hợp được y’. anh có thể cho em link rồi em tự xem, thanks !!!

    Reply

Leave a Comment