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/dsPICPackageWIN PICWinPic800OshonSoftPICPgmmelabs Prog.EPIC WinUS-BurnPICkit 2
110F202DIP8------BPK
210F206DIP8------BPK
310F220DIP8------BPK
410F222DIP8------BPK
512F675DIP8SS-SSSBPK
612F683DIP8SS,J-S,JSSBPK
716F628ADIP18S,JS,JSS,JSSBPK
816F648ADIP18S,JS,J-S,JSSBPK
916F676DIP14S,JS,JS!S,JSSBPK
1016F684DIP14S,JS,J-S,JSSBPK
1116F688DIP14S,JS,J-S,JSSBPK
1216F72SDIP28------BPK
1316F767SDIP28-SSSSSBPK
1416F777DIP40-SSSSSBPK
1516HV785DIP20-------PK
1616F819DIP18S!,JS,JSJSSBPK
1716F872SDIP28-S,J-S,JS-BPK
1816F873ASDIP28-S,J-S,JS-BPK
1916F876SDIP28-S,J-S,JS-BPK
2016F876ASDIP28SS,J-S,JSSBPK
2116F877ADIP40SS,JS(slow)S,JSSBPK
2216F88DIP18S,JS,J-S,JSSBPK
2316F886DIP28---S,JS-BPK
2416F887DIP40---S,JS-BPK
2516F913SDIP28S--S,JSSBPK
2616F914DIP40S--S,JSSBPK
2716F916SDIP28S--SSSBPK
2816F917DIP40S--S,JSSBPK
2918F1220DIP18-S,J-S,JS-BPK
3018F1320DIP18-S,J-S,JS-BPK
3118F1330DIP18----S-BPK
3218F2220SDIP28S,JS,JSS,JSSBPK
3318F2221SDIP28---S,JS-BPK
3418F2320SDIP28S,JS,JSS,J,PSSBPK
3518F2321SDIP28---S,JS-BPK
3618F2331SDIP28S,JS,JSS,JSSBPK
3718F2420SDIP28S,JS,JSS,JSSBPK
3818F2423SDIP28---S,JS-BPK
3918F2431SDIP28S,JS,JSS,JSSBPK
4018F2450SDIP28S,J-SS,JS-BPK
4118F2455SDIP28S,JS,JSS,JS-BPK
4218F2458SDIP28---S,JS-BPK
4318F2480SDIP28S,JS,JSS,JSSBPK
4418F24J10SDIP28-------PK
4518F24K20SDIP28-------PK
4618F2515SDIP28-S,J-S,JS-BPK
4718F252SDIP28-S,J-S,JS-BPK
4818F2520SDIP28S,JS,JSS,JSSBPK
4918F2523SDIP28---S,JS-BPK
5018F2525SDIP28S,JS,JSS,JSSBPK
5118F2539SDIP28S,JS,JSS,JSSBPK
5218F2550SDIP28S,JS,JSS,JS-BPK
5318F2553SDIP28---S,JS-BPK
5418F258SDIP28-S,J-S,JS-BPK
5518F2580SDIP28S,JS,JSS,JSSBPK
5618F2585SDIP28S,JS,JSS,JSSBPK
5718F25J10SDIP28-------PK
5818F25K20SDIP28-------PK
5918F2610SDIP28-S,J-S,JS-BPK
6018F2620SDIP28S,JS,JSS,JSSBPK
6118F2680SDIP28S,JS,JSS,JSSBPK
6218F2682SDIP28---S,JS-BPK
6318F2685SDIP28---S,JS-BPK
6418F4220DIP40SS,JSS,JSSBPK
6518F4221DIP40---S,JS-BPK
6618F4320DIP40S,JS,JSS,JSSBPK
6718F4321DIP40---S,JS-BPK
6818F4331DIP40SS,JSS,JSSBPK
6918F442DIP40-S,J-S,JS-BPK
7018F4420DIP40S,JS,JSS,JSSBPK
7118F4423DIP40---S,JS-BPK
7218F4431DIP40S,JS,JSS,JSSBPK
7318F4450DIP40S-S-S-BPK
7418F4455DIP40S,JSSS,JS-BPK
7518F4458SDIP28---S,JS-BPK
7618F4480DIP40S,JS,JSS,JSSBPK
7718F44J10DIP40-------PK
7818F44K20DIP40-------PK
7918F4515DIP40-S,J-S,JS-BPK
8018F452DIP40S,JS,JSS,JSSBPK
8118F4520DIP40S,JS,JSS,JSSBPK
8218F4523DIP40---S,JS-BPK
8318F4525DIP40S,JS,JSS,JSSBPK
8418F4539DIP40SS,JSS,JSSBPK
8518F4550DIP40S,JS,JSS,JS-BPK
8618F4553DIP40---S,JS-BPK
8718F458DIP40S,JS,JSS,JSSBPK
8818F4580DIP40S,JS,JSS,JSSBPK
8918F4585DIP40S,JS,JSS,JSSBPK
9018F45J10DIP40-------PK
9118F45K20DIP40-------PK
9218F4610DIP40-S,J-S,JS-BPK
9318F4620DIP40S,JS,JSS,JSSBPK
9418F4680DIP40S,JS,JSS,JSSBPK
9518F4682DIP40---S,JS-BPK
9618F4685DIP40---S,JS-BPK
9724FJ32GA002SDIP28-------PK
9824FJ64GA002SDIP28-------PK
9924HJ12GP201DIP18-------PK
10024HJ12GP202SDIP28-------PK
10124HJ32GP202SDIP28-------PK
10224HJ128GP202SDIP28-------PK
10324HJ128GP502SDIP28-------PK
10430F1010SDIP28-------PK
10530F2010SDIP28SS--S-BPK
10630F2011DIP18SS--S-BPK
10730F2012SDIP28SS--S-BPK
10830F2020SDIP28-------PK
10930F3010SDIP28SS--S-BPK
11030F3011DIP40SS--S-BPK
11130F3012DIP18SS--S-BPK
11230F3013SDIP28SS--S-BPK
11330F3014DIP40SS--S-BPK
11430F4011DIP40SS--S-BPK
11530F4012SDIP28SS--S-BPK
11630F4013DIP40SS--S-BPK
11733FJ12GP201DIP18-------PK
11833FJ12GP202SDIP28-------PK
11933FJ12MC201DIP20-------PK
12033FJ12MC202SDIP28-------PK
12133FJ32GP202SDIP28-------PK
12233FJ32GP302SDIP28-------PK
12333FJ32MC202SDIP28-------PK
12433FJ32MC302SDIP28-------PK
12533FJ64MC202SDIP28-------PK
12633FJ64MC802SDIP28-------PK
12733FJ128MC202SDIP28-------PK
12833FJ128MC802SDIP28-------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 :P
    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