PDA

View Full Version : #1: Create dsPIC30F Project


minhcuong
14-08-2005, 08:26 PM
Chào các bạn,

Thread dsPIC mới được nhằm phục vụ anh em làm việc với dsPIC có nơi tập trung bàn luận, hỏi han về nó.

Trong bài đầu tiên này tôi sẽ giới thiệu một số bước cơ bản làm việc với dsPIC30F. Tôi sẽ lấy ví dụ với chip dsPIC30F4011, đây là chip sử dụng chuyên để điều khiển motor, 40pin, có 6 chân PWN và 1 một bộ giải mã Quadrature Encoder. Nó là dạng DIP, rất thích hợp với các bạn sinh viên thí nghiệm trên bread board.

Ngôn ngữ lập trình là MPLAB C30. Các bạn có thể down bạn miễn phí 60 ngày tại www.microchip.com.

Tài liệu tham khảo chủ yếu: "dsPIC30F Family Reference Manual",...

Bước 1: tạo một project trong C30, bước này khá đơn giản, các bạn chỉ việc khởi động MPLAB IDE rồi vào menu Project > Project Wizard, chọn chip dsPIC30F mình đang làm việc, chọn thư mục cho project. Có một số lưu ý sau đây: sau khi tạo xong project, bạn phải thêm Linker Scripts, Library Files và Header Files phù hợp con chip của bạn (vào menu View-Project để xem danh sách các files trong project của bạn). Ví dụ trường hợp của tôi:

- Linker Scripts: support\gld\p30f4011.gld
- Library Files: lib\libp30F4011-coff.a
- Header Files: support\h\p30f4011.h

Bước 2: tạo file c sau đó add vào nhánh Source Files.

Ví dụ:

#define __dsPIC30F4011__ //Rất quan trọng
#include<p30f4011.h> //Chứa nhiều định nghĩa thanh nghi, các bit trong thanh nghi

int main (void)
{
Initialize Your Code Here (ADC, PWM, TIMER, UART, TIMER)....
while(1)
{
Dome Something Here...
}
return 0;
}

Bước 3:
Chọn Make All để compile, file kết xuất ra có đuôi là *.cof. File *.cof sẽ được load tự động. Nếu bạn dùng MPLAB ICD2, cấu hình đúng detect được chip thành công, bạn có thể nạp luôn ngay sau lệnh Make All bằng lệnh Programmer > Program.

Các lỗi thường gặp ở phần này
- Liên kết thiếu file Linker Scripts và file library.


Lưu ý: thư viện Peripheral của Microchip viết khá đơn giản, hầu như không đem lại ích thiết thực gì mà chỉ làm chương trình khó debug. Tôi khuyên các bạn chỉ cần đọc kỹ các thanh ghi và sử dụng file header (p30fXXXX.h) là đủ.

-------------------------------------------
Các phần tiếp theo
Phần 2: Oscillator, UART
Phần 3: PWM
Phần 4: ADC
.....

frank
07-08-2006, 01:04 AM
Mình mới tập làm quen với C30 để lập trình cho DSPIC6010, nhưng sao mình thử dủng những VD đơn giản của Microchip như là dùng interrupt_timer1 để làm led chớp tắt, hoặc những VD khác mà ko chương trình nào chạy hết, mình nghĩ là do cách thiết đặt chương trìnhh biên dịch, nhưng đã kiễm tra nhiều lần mà ko tìm ra lỗi, mong những người đi trước có nhiều kinh nghiệm hướng dẫn lại dùm

VD chương trình mẫu của Microchip:
#define __dsPIC30F6010__
#include <p30f6010.h>
#include<timer.h>
unsigned int timer_value;
void _ _attribute_ _((_ _interrupt_ _)) _T1Interrupt(void)
{
PORTDbits.RD1 = 1; /* turn off LED on RD1 */
WriteTimer1(0);
IFS0bits.T1IF = 0; /* Clear Timer interrupt flag */
}
int main(void)
{
unsigned int match_value; TRISDbits.TRISD1 = 0;
PORTDbits.RD1 = 1; /* turn off LED on RD1 */ /* Enable Timer1 Interrupt and Priority to "1" */
ConfigIntTimer1(T1_INT_PRIOR_1 & T1_INT_ON);
WriteTimer1(0);
match_value = 0xFFF;
OpenTimer1(T1_ON & T1_GATE_OFF & T1_IDLE_STOP & T1_PS_1_1 & T1_SYNC_EXT_OFF & T1_SOURCE_INT, match_value);
/* Wait till the timer matches with the period value */
while(1)
{
timer_value = ReadTimer1();
if(timer_value >= 0x7FF)
{
PORTDbits.RD1 = 0; /* turn on LED on RD1 */
}
}
CloseTimer1();
}

namqn
07-08-2006, 01:29 AM
Có lẽ bạn chưa từng đọc qua các luồng về các tutorial cho dsPIC của tôi. Tôi vừa post lên tutorial thứ 3 cho dsPIC. Tutorial 1 có lẽ không có ý nghĩa gì với những người học C30, nhưng trong tutorial 2 thì ví dụ đầu tiên chính là chớp tắt một LED bằng Timer 1.

Tôi đã thông báo rằng trong một vài ngày tới tôi sẽ post các phiên bản viết bằng C30 cho các tutorial đó. Bạn hãy chờ thêm một vài ngày nữa sẽ có các ví dụ trong C30 về LED, công tắc, LCD. Vì tôi chỉ chuyển mã nguồn từ ASM30 sang C30, với các chú thích chi tiết, nên sẽ không có tutorial cho các phiên bản viết trong C30.

Thân,

frank
07-08-2006, 05:01 PM
Mình đã đọc những bài viết của Namqn về dsPIC viết bằng hợp ngữ rồi, Namqn đúng là cao thủ trong việc tìm hiểu dsPIC .Lúc trước mình cũng đã viết thử một vài vd bằng hợp ngữ để sử dụng một số moudle chức năng của dsPIC, nên cũng hiểu đôi chút về cấu tạo các thanh ghi và cách hoạt động rồi . Bây giờ mình đang thử dủng C30 để lập trình cho dsPIC , mình đang tập viết thử những bài tập nhỏ từ Microchip.Vì mình nghĩ đối với các khối lượng lập trìnhh lớn thì dùng C30 sẽ có phần dễ chịu hơn là dùng hợp ngữ.Nhưng ko hiểu tại sao lại gặp phải vấn đề này.Vì vậy post lên cầu cứu mọi người,

kennyha85
19-12-2006, 04:36 PM
Bạn cũng có thể tham khảo những chương trình mẫu có trong trang chủ của microchip, đảm bảo có đầy đủ tính năng mà bạn cần như timer, uart, vv...

phamthaihoa
21-12-2006, 06:01 PM
Mình đã đọc những bài viết của Namqn về dsPIC viết bằng hợp ngữ rồi, Namqn đúng là cao thủ trong việc tìm hiểu dsPIC .

Bác cứ khen con voi nó to thôi :D

Để bắt đầu với dsPIc, ngày trước em bắt đầu luyện công từ chỗ ni:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2126&pageId=75

Còn để lập trình với dsPIC, thì bạn có thể xem chỗ ni, tui cũng đã xem qua mấy ví dụ của anh namqn, chắc chắn đại ca Nam cũng đã đọc ở đây :D
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2509