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)
-   -   Các vấn đề với C30 (http://www.picvietnam.com/forum/showthread.php?t=854)

falleaf 10-01-2007 07:37 PM

Các vấn đề với C30
 
1 Attachment(s)
Khi làm việc với dsPIC, một điều gần như chắc chắn là chúng ta sẽ sử dụng C30. Vì vậy, F mở ra luồng này để các bạn tập trung thảo luận về các vấn đề liên quan đến C30.

Hiện nay, C30 được phát triển ở dạng free, và gần như không còn có một trình dịch nào có thể so sánh được với C30, ở bình diện chung. HTdsPIC chỉ có thể được phát triển bởi một nhóm kỹ thuật viên của HiTech, nhưng C30 sẽ được sự phát triển của cả một cộng đồng và các chuyên gia. Đồng thời, HTdsPIC là một phần mềm có giá khá cao, trong khi đó C30 thì miễn phí (một phần).

Chính vì vậy, picvietnam sẽ hỗ trợ phát triển C30.

Luồng này được mở ra để các bạn thảo luận tất cả các vấn đề liên quan đến C30. Dưới đây là một file mẫu chuẩn picvietnam đang định đề nghị khi làm việc với C30. F sẽ làm việc cụ thể hơn với anh Nam về form chuẩn này và rất mong các bạn thảo luận về việc xây dựng form mẫu chuẩn cho C30 của picvietnam.

Chúc vui


Tài liệu tham khảo:
[1] C30 Compiler User's Guide
[2] Brian W. Kernighan and Dennis M. Ritchie, "The C Programming Language 2nd edition", Prentice Hall

NThang 21-01-2008 08:52 PM

Xin cảm ơn bác Falleaf. Em mới học về Pic và mong tìm hiểu một trình dịch C hoàn chỉnh cho Pic. Qua thông tin mà bác cho biết ở trên thì C30 quả thật là rất bổ ích. Tuy nhiên, em vẫn chưa hiểu là hiện có cả C18 và C30, Sự khác biệt của nó là gì. Em thường làm với chíp AVR tuy nhiên với các dự án đòi hỏi phải có chíp mạnh với yêu cầu về xử lý 16 bít hay 32 bít cũng như việc đảm bảo chất lượng thì dùng Pic vẫn đảm bảo hơn. Vì thế mong bác chỉ bảo thêm.

Em rất cảm ơn.

namqn 21-01-2008 09:04 PM

Trích:

Nguyên văn bởi NThang (Post 14019)
Xin cảm ơn bác Falleaf. Em mới học về Pic và mong tìm hiểu một trình dịch C hoàn chỉnh cho Pic. Qua thông tin mà bác cho biết ở trên thì C30 quả thật là rất bổ ích. Tuy nhiên, em vẫn chưa hiểu là hiện có cả C18 và C30, Sự khác biệt của nó là gì. Em thường làm với chíp AVR tuy nhiên với các dự án đòi hỏi phải có chíp mạnh với yêu cầu về xử lý 16 bít hay 32 bít cũng như việc đảm bảo chất lượng thì dùng Pic vẫn đảm bảo hơn. Vì thế mong bác chỉ bảo thêm.

Em rất cảm ơn.

C30 dành cho các vi điều khiển/xử lý số 16-bit của Microchip (PIC24, dsPIC30, dsPIC33), còn C18 dành cho các vi điều khiển 8-bit cấp cao của Microchip (PIC18).

Cũng thông tin thêm cho bạn là Microchip hiện đã có dòng vi điều khiển/xử lý số 32-bit là PIC32, với trình dịch C32 (cũng được họ cung cấp miễn phí phiên bản Student Edition).

Thân,

NThang 21-01-2008 10:27 PM

Chân thành cảm ơn bac Namqn. Em vừa vào trang microchip.com và có tìm hiểu được một số vấn đề về PIC với các trình dịch. Về bản Studen mới nhất của C18 là v3.15 hay V3.10 và C30 là bản 3.02. Tuy nhiên em tìm crack trên google chỉ kiếm được đến C18 V3.0 mà thôi. Trong khi em thì lại không có bản C18 3.0. Bác có bản crack hay bản full của C18 và c30 với version gần đây không? Làm ơn gửi cho em được chứ ah. Version khoảng từ 2.0 trở lại đây chẳng hạn.

Em xin cảm ơn bác!

namqn 21-01-2008 11:23 PM

Trích:

Nguyên văn bởi NThang (Post 14021)
Chân thành cảm ơn bac Namqn. Em vừa vào trang microchip.com và có tìm hiểu được một số vấn đề về PIC với các trình dịch. Về bản Studen mới nhất của C18 là v3.15 hay V3.10 và C30 là bản 3.02. Tuy nhiên em tìm crack trên google chỉ kiếm được đến C18 V3.0 mà thôi. Trong khi em thì lại không có bản C18 3.0. Bác có bản crack hay bản full của C18 và c30 với version gần đây không? Làm ơn gửi cho em được chứ ah. Version khoảng từ 2.0 trở lại đây chẳng hạn.

Em xin cảm ơn bác!

Tôi khuyến khích người dùng nghiệp dư sử dụng các bản Student Edition (tôi toàn dùng các bản Student Edition). Nếu sử dụng một cách chuyên nghiệp (kinh doanh kiếm tiền) thì có lẽ số tiền bản quyền của phần mềm chẳng đáng kể gì so với vốn đầu tư cho những thứ khác.

Trang web của Microchip trước đây có phần lưu trữ đầy đủ các phiên bản trước của các trình biên dịch, hiện nay thì nó chỉ còn lưu trữ một vài phiên bản được Microchip đánh giá là đáng được lưu trữ. Bạn xem link dưới đây:

http://www.microchip.com/stellent/id...cName=en023073

Tôi có lưu trữ khá nhiều phiên bản của các trình dịch C18 và C30, tuy nhiên không có sẵn ở trong máy. Tôi sẽ tìm thử và upload lên một host free nào đó, và thông báo cho bạn sau.

Thân,

tungtot_vl 19-02-2008 09:40 AM

em muốn lập trình thử về Dispic nhưng chưa load được c30. bác nào có link thì cho em xin với. em đang cần gấp

namqn 19-02-2008 07:46 PM

Trích:

Nguyên văn bởi tungtot_vl (Post 14356)
em muốn lập trình thử về Dispic nhưng chưa load được c30. bác nào có link thì cho em xin với. em đang cần gấp

Link dưới đây cho phép bạn download C30 phiên bản Student Edition, bạn chỉ cần đăng ký (miễn phí) với Microchip là được:

http://www.microchip.com/stellent/id...cName=en010065

Thân,

footballer 28-03-2008 10:35 PM

Em muốn sử dụng thư viện xlcd của C30 để giao tiếp với LCD. Đối với các thư viện khác, chẳng hạn thư viện như thư viện Timer, em thấy rằng chỉ cần include vào project của mình 2 file là file (timer.h) và file (libp30f4011-coff.a)( em dùng 30f4011) là có thể gọi được các hàm khởi tạo và điều khiển Timer rồi. Nhưng khi em làm tương tự với thư viện xlcd thì sau khi đã include file xlcd.h( #include <xlcd.h>) và add vào project thư viện (libp30f4011-coff.s) thì vẫn không thể sử dụng được các hàm trong thư viện xlcd( ví dụ: BusyXLCD()). Mong được mọi người giải thích cho cách sử dụng thư viện xlcd. Em cảm ơn.

namqn 28-03-2008 11:28 PM

Trích:

Nguyên văn bởi footballer (Post 15232)
Em muốn sử dụng thư viện xlcd của C30 để giao tiếp với LCD. Đối với các thư viện khác, chẳng hạn thư viện như thư viện Timer, em thấy rằng chỉ cần include vào project của mình 2 file là file (timer.h) và file (libp30f4011-coff.a)( em dùng 30f4011) là có thể gọi được các hàm khởi tạo và điều khiển Timer rồi. Nhưng khi em làm tương tự với thư viện xlcd thì sau khi đã include file xlcd.h( #include <xlcd.h>) và add vào project thư viện (libp30f4011-coff.s) thì vẫn không thể sử dụng được các hàm trong thư viện xlcd( ví dụ: BusyXLCD()). Mong được mọi người giải thích cho cách sử dụng thư viện xlcd. Em cảm ơn.

Bạn nói như vậy vẫn chưa rõ. Bạn không biên dịch được chương trình hay biên dịch tốt mà dsPIC không chạy đúng?

Bạn dùng dsPIC30F4011, còn thư viện XLCD thì mặc định sử dụng đến 11 bit của port D, vậy bạn đã chỉnh sửa lại xlcd.h cho phù hợp với phần cứng của bạn chưa?

Thân,

footballer 29-03-2008 10:55 AM

Em không biên dịch được.
Em đã cop file xlcd.h vào thư mục chứa project của mình và chỉnh sửa nội dụng file này như sau:
-Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. Vì 30f4011 không có chân RD10
-Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif
-Thiết lập lại các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của em.
Sau đó trong chương trình em đã include file xlcd.h đã chỉnh sửa:
Code:

    #include "xlcd.h"
Em đã add file thư viện libp30f4011-coff.a vào trong project.
Nhưng dù em gọi bất kỳ một hàm nào trong thư viện xlcd.h thì đều bị lỗi là undefined reference to `BusyXLCD' (Đây là em lấy ví dụ với việc gọi hàm BusyXLCD()).
Mong được mọi người giúp đỡ. Em xin cảm ơn.

footballer 29-03-2008 11:06 AM

Ngoài ra em thấy rằng phần đầu của file xlcd.h có chú thích về loại lcd được hỗ trợ là P-tec:
Code:

/********************************************************************/
/*            Header for XLCD module library functions for          */
/*            P-tec PCOG1602B LCD controller                        */
/********************************************************************/

Em lại đang dùng lcd loại SD-DM1602A. Em xin hỏi là em có thể sử dụng thư viện xlcd.h để giao tiếp với cái lcd của em không? Em xin cảm ơn.

namqn 29-03-2008 08:24 PM

Trích:

Nguyên văn bởi footballer (Post 15237)
Em không biên dịch được.
Em đã cop file xlcd.h vào thư mục chứa project của mình và chỉnh sửa nội dụng file này như sau:
-Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. Vì 30f4011 không có chân RD10
-Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif
-Thiết lập lại các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của em.
Sau đó trong chương trình em đã include file xlcd.h đã chỉnh sửa:
Code:

    #include "xlcd.h"
Em đã add file thư viện libp30f4011-coff.a vào trong project.
Nhưng dù em gọi bất kỳ một hàm nào trong thư viện xlcd.h thì đều bị lỗi là undefined reference to `BusyXLCD' (Đây là em lấy ví dụ với việc gọi hàm BusyXLCD()).
Mong được mọi người giúp đỡ. Em xin cảm ơn.

Bạn tham khảo luồng này ở forum của Microchip cho C30, chú ý post #6 và #7:
http://forum.microchip.com/tm.aspx?m...ibrary&#320424

Tôi đã thử dùng thư viện này, nhưng gặp rắc rối ở phần linking (tôi đã giải quyết được lỗi undefined reference to ...). Tuy nhiên, sau khi đọc hai post trên của Calum, tôi cho rằng không cần phải tìm hiểu thêm.

Bạn tham khảo tutorial 3 về dsPIC của tôi, tôi đã viết phần lớn các hàm để điều khiển LCD ký tự (đã có code cho C30).

Thân,

footballer 29-03-2008 11:22 PM

Em đã sử dụng được thư viện xlcd để giao tiếp với lcd SD-DM1602A. Thư viện xlcd được viết ra chỉ hỗ trợ cho một số loại chip sau đây( theo tài liệu dsPIC language tools library):
Code:

• dsPIC30F5011
• dsPIC30F5013
• dsPIC30F6010
• dsPIC30F6011
• dsPIC30F6012
• dsPIC30F6013
• dsPIC30F6014

Tuy thế em thấy có thể thay đổi một chút trong code của các hàm của thư viện xlcd để các hàm này có thể dùng được với chip 30f4011.
- Copy file xlcd.h( trong thư mục "Microchip\MPLAB C30\src\peripheral_30F_24H_33F\include") vào thư mục của project. Chỉnh sửa lại file xlcd.h như sau:
+Bỏ cặp chỉ lệnh: #if defined(_RD10) ..#endif. (Vì 30f4011 không có chân RD10)
+Bỏ cặp chỉ lệnh: #if defined(_RD8) && defined(_RD9) && defined(_RD10)... #endif
+Sửa lại phần mã định nghĩa các chân RS,RW,EN, DB0,..DB7 cho phù hợp với mạch của ta. Trong thử nghiệm của em, em chọn RS-RD0, RW-RD1, EN-RD2, DB0..DB7-RB0..RB7.
- Include file xlcd.h vào trong file nguồn:
Code:

#include "xlcd.h"
- Copy tất cả các file .c trong thư mục "MPLAB C30\src\peripheral_30F_24H_33F\src\pmc\xlcd" vào thư mục của project. Add tất cả các file này vào trong project.
- Mở các file .c đã nói ở trên và bỏ đi các chỉ lệnh biên dịch có điều kiện như sau:
Code:

#ifdef _RD10                                -> bỏ
...
...
...
#else                                                  ->bỏ
#warning "Does not build on this target"    ->bỏ
#endif                                                ->bỏ

Từ bây giờ ta có thể sử dụng các hàm của thư viện xlcd để giao tiếp với lcd. Em đã thử với đoạn code sau đây, kết quả hiển thị trên lcd SD-DM1602A đúng như mong muốn.
Code:

#include <p30f4011.h>
#include "xlcd.h"

_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_27 & PWRT_16 & MCLR_DIS);
_FGS(CODE_PROT_OFF);

int main()
{
    OpenXLCD(EIGHT_BIT & TWO_LINE & SEG1_50_SEG51_100
            & COM1_COM16);    //Khoi tao lcd
    PutsXLCD("Hello world");  //Hien thi mot xau tren dong thu nhat
       
    SetDDRamAddr(0x40);        //Dua con tro ve dau dong thu hai
    PutsXLCD("30f4011-LCD");        //Hien thi mot xau tren dong thu hai
   
    while(1);
    return 0;
}

Em cảm ơn anh Nam đã gợi ý cho cách giải quyết.

tungtuantu 13-11-2008 10:10 AM

Cho mình hỏi
Code:

/* defines for segment data transfer direction */
#define SEG1_50_SEG51_100    0x39  /* SEG1->SEG50 ,SEG51->SEG100 */
#define SEG1_50_SEG100_51    0x3d  /* SEG1->SEG50 ,SEG100->SEG51 */
#define SEG100_51_SEG50_1    0x3b  /* SEG100->SEG51,SEG50->SEG1 */
#define SEG100_51_SEG1_50    0x3f  /* SEG100->SEG51,SEG1->SEG50 */

/* defines for COM data transfer direction */

#define COM1_COM16            0x3e  /* Data transfer direction is COM1 to COM16 */

#define COM16_COM1            0x3f  /* Data transfer direction is COM16 to COM1 */

2 cái difine này có tác dụng j thế hả bạn

Mình sửa file xlcd.h để giao tiếp 4 bit với LCD như này
Code:

/********************************************************************/
/*            Header for XLCD module library functions for          */
/*            P-tec PCOG1602B LCD controller                        */
/********************************************************************/

#if defined(__dsPIC30F__)
#include <p30fxxxx.h>
#elif defined(__dsPIC33F__)
#include <p33Fxxxx.h>
#elif defined(__PIC24H__)
#include <p24Hxxxx.h>
#endif



#ifndef _XLCD_H
#define _XLCD_H

/* Comment out the following line if 4-bit interface is being used */
#define EIGHT_BIT_INTERFACE

/* #defines of the data pins and the corresponding tris pins */
/* The READ_PIN_X #defines must match the corresponding DATA_PIN_X defines */
#define DATA_PIN_7          LATDbits.LATD3
#define DATA_PIN_6            LATDbits.LATD1
#define DATA_PIN_5          LATEbits.LATE8
#define DATA_PIN_4          LATCbits.LATC14

#define READ_PIN_7                PORTDbits.RD3
#define READ_PIN_6                PORTDbits.RD1
#define READ_PIN_5                PORTEbits.RE8
#define READ_PIN_4                PORTCbits.RC14




#define TRIS_DATA_PIN_7      TRISDbits.TRISD3
#define TRIS_DATA_PIN_6      TRISDbits.TRISD1
#define TRIS_DATA_PIN_5      TRISEbits.TRISE8
#define TRIS_DATA_PIN_4      TRISCbits.TRISC14



/* #defines of the control pins and the corresponding tris pins for 30F */
#define E_PIN                LATCbits.LATC13      /* PORT for E */
#define RW_PIN                LATBbits.LATB8      /* PORT for RW */
#define RS_PIN                LATBbits.LATB7      /* PORT for RS */

#define TRIS_E                TRISCbits.TRISC13    /* TRIS for E */
#define TRIS_RW              TRISBbits.TRISB8    /* TRIS for RW */
#define TRIS_RS              TRISBbits.TRISB7  /* TRIS for RS */

        #ifdef EIGHT_BIT_INTERFACE
#define DATA_PIN_3          LATDbits.LATD3
#define DATA_PIN_2          LATDbits.LATD2
#define DATA_PIN_1          LATDbits.LATD1
#define DATA_PIN_0          LATDbits.LATD0

#define READ_PIN_3                PORTDbits.RD3
#define READ_PIN_2                PORTDbits.RD2
#define READ_PIN_1                PORTDbits.RD1
#define READ_PIN_0                PORTDbits.RD0

#endif
       
#ifdef EIGHT_BIT_INTERFACE
#define TRIS_DATA_PIN_3      TRISDbits.TRISD3
#define TRIS_DATA_PIN_2      TRISDbits.TRISD2
#define TRIS_DATA_PIN_1      TRISDbits.TRISD1
#define TRIS_DATA_PIN_0      TRISDbits.TRISD0
#endif

/* Display ON/OFF Control defines */
các phần sau thì giống file gốc

chương trình chính mình viết giống như bạn chỉ thay 8 bit thành 4 bit
Code:

#include <p30f4011.h>
#include "xlcd.h"

_FOSC(CSW_FSCM_OFF & FRC_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON & BORV_27 & PWRT_16 & MCLR_DIS);
_FGS(CODE_PROT_OFF);

void main()
{
    OpenXLCD(FOUR_BIT & TWO_LINE & SEG1_50_SEG51_100
            & COM1_COM16);    //Khoi tao lcd
    PutsXLCD("Hello world");  //Hien thi mot xau tren dong thu nhat
       
    SetDDRamAddr(0x40);        //Dua con tro ve dau dong thu hai
    PutsXLCD("30f4011-LCD");        //Hien thi mot xau tren dong thu hai
   
    while(1);
    return 0;
}

Khi dịch ra thì báo là
Code:

Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\lcd.o" is out of date.
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4011 -x c -c  "lcd.c" -o"lcd.o" -g -Wall
pic30-coff-cc1.exe: warning: Resource version (3.01) does not match compiler!
lcd.c:10: warning: return type of `main' is not `int'
lcd.c: In function `main':
lcd.c:12: warning: implicit declaration of function `PutsXLCD'
lcd.c:18: warning: `return' with a value, in function returning void
lcd.c:19:2: warning: no newline at end of file
Resource version (3.01) does not match!

Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\delay.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\OpenXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\PutsXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\ReadAddrXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\ReadDataXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\setCGRamAddr.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\setDDRamAddr.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\WriteCmdXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\WriteDataXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\BusyXLCD.o" is up to date.
Make: The target "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\LCD 4 bit.cof" is out of date.
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4011 "lcd.o" "delay.o" "OpenXLCD.o" "PutsXLCD.o" "ReadAddrXLCD.o" "ReadDataXLCD.o" "setCGRamAddr.o" "setDDRamAddr.o" "WriteCmdXLCD.o" "WriteDataXLCD.o" "BusyXLCD.o" -o"LCD 4 bit.cof" -Wl,-L"C:\Program Files\Microchip\MPLAB C30\lib",--script="C:\Program Files\Microchip\MPLAB C30\support\gld\p30f4011.gld",-Map="LCD 4 bit.map",--report-mem




Resource version (3.01) does not match!
Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-bin2hex.exe" "C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\LCD 4 bit.cof"
Resource version (3.01) does not match!
Loaded C:\Documents and Settings\NGUYEN THE TUNG\Desktop\C30\LCD\LCD 4 bit.cof.
BUILD SUCCEEDED: Thu Nov 13 11:50:45 2008

Mình vẫn ko hiển thị dc lên LCD, phần in đậm là lỗi j thế

0509592 16-11-2008 10:01 AM

Pic24
 
các bác ơi!
sao em không thấy ai bàn về chủ đề PIC24????
em muốn nghiên cứu về PIC24 nhưng không biết dòng PIC24 nào phổ biến????
tìm trên diễn đàn thì không thấy bàn về PIC24???
các bác giúp em với????
thanks!


Múi giờ GMT. Hiện tại là 06:28 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