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!

robotden 17-05-2009 01:59 AM

hihi. em cũng muốn tham gia diễn đàn này.
em vừa mới bắt đầu tìm hiểu dsPic, mong anh Namqn chỉ dạy.
em làm với dsPIC30f4011, em lập trình như ví dụ 2-1 của anh mà sao khi mô phỏng bằng MPLAB SIM thì chạy không đúng anh Namqn ạ. em đã tính toán là chu kỳ timer1 là 0.5s, thế mà nó ra đến và giây thì TMR1 mới lên 1 đơn vị.
hôm nay em tính ra HOANG HOA THAM mua con pic về mô phỏng mạch thật mà hết hàng, chán thật.
a Namqn nói giùm em cái mplab sim cái, em cấu hình mục setting là thạch anh 8 MHZ,
a cũng nói luôn cho em cách cấu hình cho dspic dùng bộ dao động nội và bộ dao động ngoài với thạch anh 8 Mhz nhé.
thanhk a!!

namqn 17-05-2009 11:12 PM

Trích:

Nguyên văn bởi robotden (Post 25791)
hihi. em cũng muốn tham gia diễn đàn này.
em vừa mới bắt đầu tìm hiểu dsPic, mong anh Namqn chỉ dạy.
em làm với dsPIC30f4011, em lập trình như ví dụ 2-1 của anh mà sao khi mô phỏng bằng MPLAB SIM thì chạy không đúng anh Namqn ạ. em đã tính toán là chu kỳ timer1 là 0.5s, thế mà nó ra đến và giây thì TMR1 mới lên 1 đơn vị.
hôm nay em tính ra HOANG HOA THAM mua con pic về mô phỏng mạch thật mà hết hàng, chán thật.
a Namqn nói giùm em cái mplab sim cái, em cấu hình mục setting là thạch anh 8 MHZ,
a cũng nói luôn cho em cách cấu hình cho dspic dùng bộ dao động nội và bộ dao động ngoài với thạch anh 8 Mhz nhé.
thanhk a!!

Trong mã nguồn của ví dụ 2-1, tôi đã chú thích là clock = 32 MHz. Để mô phỏng code ví dụ, bạn cần thiết lập tần số trong MPLAB SIM cũng là 32 MHz.

Thân,

robotden 18-05-2009 11:58 AM

dạ, em đã thiết lập rùi mà nó không có được anh nam ạ.
đây là chuơng trình của em nè:
#include "p30f4011.h"


//khai bao 4 bo thong so cho dsPic
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //tat FSCM va dung tan so noi FRC voi PLL4, CSW CLock Switch:co kha nang tu dong chuyen doi giau cac nguon xung clock
//FSCM: giam sat su lam viec cua clock ngoai, neu bi loi se tu dong chuyen vao dung clock internal, o day OFF ca 2
_FWDT(WDT_OFF); //tat Cho giu nha
_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);//cho pep reset MCLR, nobrownout
_FGS(CODE_PROT_OFF); //ko bao ve code



#define LED _LATD0

void kt_port(void);
void kt_timer1(void);
//ct chinh
void main(void)
{
kt_port();
kt_timer1();

while(1){};///cho ngat
}


//ct con khoi tao cac cong vao ra noi voi led
void kt_port()
{
LATD=0;
//_TRISD0=0;//D0 la ngo ra
TRISD=0xFFFE;
}
void kt_timer1()
{
TMR1=0;//xoa thanh ghi dem timre1 ve 0
PR1=0xF424;
_T1IF=0;//xoa co ngat
T1CON=0x8020;//1:64(10), T1ON=1
_T1IE=1;//cho phep ngat

}


//ct xu ly ngat
void _ISR_T1Interrupt(void)
{
_T1IF=0;//xoa ngat
_LATD0^=1;//xor bit


}

thanhgand 12-08-2009 04:23 PM

chào các bác.cho em hỏi một chút về c30.các bác có thể diễn giải giúp em dòng code sau được không : " extern volatile T2CONBITS T2CONbits __attribute__((__sfr__));"
em không hiểu __attribute__((__sfr__)) là gì.
rồi một loạt các khai báo tương tự thế trong các thư viện của c30.
__attribute__((__sfr__,__deprecated__,__unsafe__))
vvv
em đã đọc qua help của c30 mà không hiểu mấy, mong các bác chỉ giúp.em mới tìm hiểu c30.

tahi 30-09-2009 01:17 PM

Trích:

Nguyên văn bởi thanhgand (Post 28594)
chào các bác.cho em hỏi một chút về c30.các bác có thể diễn giải giúp em dòng code sau được không : " extern volatile T2CONBITS T2CONbits __attribute__((__sfr__));"
em không hiểu __attribute__((__sfr__)) là gì.
rồi một loạt các khai báo tương tự thế trong các thư viện của c30.
__attribute__((__sfr__,__deprecated__,__unsafe__))
vvv
em đã đọc qua help của c30 mà không hiểu mấy, mong các bác chỉ giúp.em mới tìm hiểu c30.

Chỗ này chắc là khai báo địa chỉ của các thanh ghi T2CON (hoặc cấp phát bộ nhớ gì đó, nói chung là chưa rõ )

Mấy cái _sfr_ , _unsafe_ được khai báo địa chỉ trong support/dspic33f/gld (nếu dùng dspic33)
Mấy cái này em cũng chưa hiểu rõ lắm. Ví dụ chỗ này nhé:
Code:

__extension__ typedef struct tagCLKDIVBITS {
  union {
    struct {
      unsigned PLLPRE:5;
      unsigned :1;
      unsigned PLLPOST:2;
      unsigned FRCDIV:3;
      unsigned DOZEN:1;
      unsigned DOZE:3;
      unsigned ROI:1;
    };
    struct {
      unsigned PLLPRE0:1;
      unsigned PLLPRE1:1;
      unsigned PLLPRE2:1;
      unsigned PLLPRE3:1;
      unsigned PLLPRE4:1;
      unsigned :1;
      unsigned PLLPOST0:1;
      unsigned PLLPOST1:1;
      unsigned FRCDIV0:1;
      unsigned FRCDIV1:1;
      unsigned FRCDIV2:1;
      unsigned :1;
      unsigned DOZE0:1;
      unsigned DOZE1:1;
      unsigned DOZE2:1;
    };
  };
} CLKDIVBITS;

Chỗ này là sao unsigned :1;
unsigned PLLPRE:5; // PLLPRE chia 5 hay PLLPRE gồm 5 bít ?, lôi nó ra như thế nào
Muốn dùng từng bít của thanh ghi CLKDIV thì làm thế nào ? Hoặc muốn cấu hình PLLDIV, PLLPOST hoặc PLLPRE thì làm thế nào ?
Giả sử em muốn cấu hình dùng thạch anh ngoài sao cho FCY= 40MIPS, em tính ra các hệ số M=32, N1=N2=2, thì thiết lập các thông số này ở đâu ?
Mấy cái configuration bit nữa , nếu cấu hình trong đó thì ko phải code nữa có phải ko ạ ?
Ngoài các biến của C chuẩn, C30 còn có các loại biến nào khác không ?

Vinhrpic 13-10-2009 03:44 PM

Em muốn lập trình dsPIC bằng C30 Cho dsPIC thay vì sử dụng CCS ,nhưng mà trong MPLAP IDEv8.33 em không biết phải sử dụng như thế nào ,nên khi biên dịch một bài đơn giản nhất cũng báo lỗi .
các Anh có thể chỉ cho em các sử dụng C30 trong MPLAB được không ?và nếu có thể cho em một bài mẫu .

namqn 13-10-2009 07:54 PM

Trích:

Nguyên văn bởi Vinhrpic (Post 30207)
Em muốn lập trình dsPIC bằng C30 Cho dsPIC thay vì sử dụng CCS ,nhưng mà trong MPLAP IDEv8.33 em không biết phải sử dụng như thế nào ,nên khi biên dịch một bài đơn giản nhất cũng báo lỗi .
các Anh có thể chỉ cho em các sử dụng C30 trong MPLAB được không ?và nếu có thể cho em một bài mẫu .

Bạn đã đọc tutorial 1 cho dsPIC chưa? Tutorial này nhắm vào người học như bạn đó. Ở bước chọn trình dịch, thay vì chọn trình hợp dịch "MPLAB ASM30 Toolsuite" thì bạn chọn "MPLAB C30 Toolsuite". Cần phải cài đặt C30 một cách độc lập so với MPLAB IDE.

Thân,

Vinhrpic 14-10-2009 08:53 AM

cảm ơn anh Namqn đã gúp đỡ em
 
Em mới cài MPLABCdsPICStdEvalv3_20_B.exe thêm vào MPLAB
Anh có thể hướng đẫn giúp em làm một bài mâu đơn giản nhất cho nó chạy được không?

npbaoduy 16-10-2009 11:45 PM

Em có một vấn đề không hiểu khi thực hiện biến đổi FFT trong C30, đó là các hệ số twiddle trong lý thuyết là các số phức, vậy khi sử dụng hàm
FFTComplexIP (

int log2N,

fractcomplex* srcCV,

fractcomplex* twidFactors,

int factPage

);
thì các hệ số này khai báo làm sao để được số phức? Em xem một số ví dụ thì thấy người ta chỉ khai báo như là các số nguyên 16bit thông thường (các hệ số này thường là số thực chứ ko nguyên?)?

Em xin cám ơn.

npbaoduy 18-10-2009 09:04 AM

Cuối cùng mình cũng đã hiểu, xin trình bày luôn để giúp những ai có thắc mắc giống mình.
Thật ra đó là những số phức, word thứ nhất là phần thực, word kế tiếp là phần ảo của nó.

npbaoduy 19-10-2009 12:18 AM

Cho em hỏi thêm một câu, trong C30 có hàm đổi từ chuỗi ra số nguyên và ngược lại hay không?
Cám ơn rất nhiều.

tahi 22-10-2009 04:07 PM

Trích:

Nguyên văn bởi npbaoduy (Post 30368)
Cho em hỏi thêm một câu, trong C30 có hàm đổi từ chuỗi ra số nguyên và ngược lại hay không?
Cám ơn rất nhiều.

chuyển từ string sang số int hả

char *str1 = "Testing UARTx...";
Khi dùng thì viết
putsUART1((unsigned int *)str1);

Các bác cho em hỏi với, em dùng icd2 để nạp và debug nhé. Nhưng em ko biết cách cấu hình ID memory trong phần configure, với 1 con bất kỳ thì xem ID memory ở đâu (em tìm cả buổi trên google mà vẫn chưa thông...Hơi kém chút). Nên nó báo lỗi loạn nên.

Khi chọn debug thì thấy debug rất chậm. Không biết nạp xong có phải reset hay ko mà có mỗi nháy led mà lúc được lúc không. Khoảng thời gian từ khi nạp xong đển khi bộ PLL được lock là bao nhiêu.

Còn phần cấu hình secure segment thì chọn như thế nào
Em dùng dsPIC33FJ128MC804.

tahi 26-10-2009 08:57 AM

Tự trả lời bài viết của mình vậy. Khi dùng debug bằng IDC2 (mà bằng cái gì cũng thế thôi)thì trong phần project/build configuration phải để là mode debug (khônng phải là release).
Nếu nạp bằng phân programmer, nhớ import file .hex vào, khi nạp xong thì vào programmer chọn phần release from reset để chạy. Còn khi nạp lại chỉ vào phần hold in reset.

Còn vấn đề nữa là. Dùng các thư viện ngoại vi sẵn có của C30 bằng cách include thêm file.h. Nhưng khi debug thì không thể nhảy vào hàm được. Nếu include cả file .c thì nhảy vào hàm được nhưng trong thư viện của C30, nó tách mỗi hàm thành 1 file .c như vậy mỗi khi dịch lại link 1 đống các file. Vậy có cách nào dồn đống hàm đó vào 1 file không?
+ Cách 1: Chịu khó gom thủ công thành 1 file .c (cái này em làm rồi, ok ngon)
+ Cách 2: Tạo ra 1 file .lib (không biết làm thế nào )

Vấn đề là em muốn tạo ra 1 cái file thư viện để khi debug có thể nhảy vào hàm (có thể dịch sang object-file .o rồi include vào project cũng được)

popeye_ts22 28-10-2009 12:50 PM

Edit thư viện Xlcd
 
Code:

OpenXLCD(EIGHT_BIT & TWO_LINE & SEG1_50_SEG51_100
            & COM1_COM16);    //Khoi tao lcd

Không biết LCD Type ở đây là gì,không hiểu sao C30 toàn báo lỗi.
Code:

LCD162.c: In function 'main':
LCD162.c:9: warning: implicit declaration of function 'OpenXLCD'
LCD162.c:9: error: 'EIGHT_BIT' undeclared (first use in this function)
LCD162.c:9: error: (Each undeclared identifier is reported only once
LCD162.c:9: error: for each function it appears in.)
LCD162.c:9: error: 'TWO_LINE' undeclared (first use in this function)
LCD162.c:10: error: 'SEG1_50_SEG51_100' undeclared (first use in this function)
LCD162.c:10: error: 'COM1_COM16' undeclared (first use in this function)
LCD162.c:11: warning: implicit declaration of function 'PutsXLCD'
LCD162.c:13: warning: implicit declaration of function 'SetDDRamAddr'
LCD162.c:15: warning: implicit declaration of function 'DelayMs'
LCD162.c:23:2: warning: no newline at end of file

Thư viện Xlcd có dùng cho PIC24F được không ạ, khi mà bỏ hết #ifdef_RD10

hungnk87 29-10-2009 01:58 PM

loi trong c30
 
Tại sao trong MPLAB(c30) khi khai báo #include<tenthuvien.h> thì nó báo lỗi là:"No such file or directory" mặc dù 2 file .h và .c đã copy vào trong thư mục project đó rồi. Thư viện này là tự viết, không phải của MicroChip.Nhưng hễ include thư viện của Microchip thi được

namqn 29-10-2009 11:26 PM

Trích:

Nguyên văn bởi hungnk87 (Post 30705)
Tại sao trong MPLAB(c30) khi khai báo #include<tenthuvien.h> thì nó báo lỗi là:"No such file or directory" mặc dù 2 file .h và .c đã copy vào trong thư mục project đó rồi. Thư viện này là tự viết, không phải của MicroChip.Nhưng hễ include thư viện của Microchip thi được

Bạn thử lại với #include "tenthuvien.h" xem.

Thân,

npbaoduy 06-11-2009 09:57 PM

C30 Student Edition có cần license không?
 
Sau khi em xài dược một thời gian (1-2 tháng gì đó ko nhớ rõ) thì hôm nay biên dịch chương trình trong C30 nó luôn báo lỗi sau:
Code:

Microchip MPLAB C30 License Manager Version v3_20 (Build Date Aug 24 2009).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.

và không biên dịch được.
Em đã tải và cài phiên bản Student mà? Không biết phải làm sao? Có ai biết chỉ em giúp? Không lẽ phải tải về cài lại?

namqn 06-11-2009 10:12 PM

Trích:

Nguyên văn bởi npbaoduy (Post 30927)
Sau khi em xài dược một thời gian (1-2 tháng gì đó ko nhớ rõ) thì hôm nay biên dịch chương trình trong C30 nó luôn báo lỗi sau:
Code:

Microchip MPLAB C30 License Manager Version v3_20 (Build Date Aug 24 2009).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.

và không biên dịch được.
Em đã tải và cài phiên bản Student mà? Không biết phải làm sao? Có ai biết chỉ em giúp? Không lẽ phải tải về cài lại?

Không có chuyện đó đâu bạn. Tôi dùng phiên bản 3.12 từ khi vừa phát hành đến giờ vẫn biên dịch bình thường:
Trích:

Microchip MPLAB C30 License Manager Version v3.12 (Build Date Jan 30 2009).
Copyright (c) 2008 Microchip Technology Inc. All rights reserved.
The MPLAB C30 license has expired.
pic30-coff-cc1.exe: warning: Options have been disabled due to expired license
Visit http://www.microchip.com/ to purchase a new key.
Executing: "F:\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4012 "Vidu4-5.o" -o"Vidu4C30.cof" -Wl,-L"F:\Microchip\MPLAB C30\lib",--script="p30f4012.gld",--defsym=__MPLAB_BUILD=1,--heap=0,-Map="Vidu4C30.map",--report-mem


Program Memory [Origin = 0x100, Length = 0x7f00]

section address length (PC units) length (bytes) (dec)
------- ------- ----------------- --------------------
.text 0x100 0x52a 0x7bf (1983)
.const 0x62a 0xc 0x12 (18)
.init 0x636 0x88 0xcc (204)
.dinit 0x6be 0x88 0xcc (204)
.isr 0x746 0x2 0x3 (3)

Total program memory used (bytes): 0x96c (2412) 4%


Data Memory [Origin = 0x800, Length = 0x800]

section address alignment gaps total length (dec)
------- ------- -------------- -------------------
.nbss 0x800 0 0x2 (2)
.ndata 0x802 0 0x2 (2)
.nbss 0x804 0 0x2 (2)
.data 0x806 0 0x8e (142)
.bss 0x894 0 0x2 (2)

Total data memory used (bytes): 0x96 (150) 7%


Dynamic Memory Usage

region address maximum length (dec)
------ ------- ---------------------
heap 0 0 (0)
stack 0x896 0x76a (1898)

Maximum dynamic memory (bytes): 0x76a (1898)

Executing: "F:\Microchip\MPLAB C30\bin\pic30-bin2hex.exe" "E:\PICProjects\Vidu4C30\Vidu4C30.cof"
Loaded E:\PICProjects\Vidu4C30\Vidu4C30.cof.
----------------------------------------------------------------------
Release build of project `E:\PICProjects\Vidu4C30\Vidu4C30.mcp' succeeded.
Fri Nov 06 22:07:38 2009
----------------------------------------------------------------------
BUILD SUCCEEDED
Thân,

npbaoduy 07-11-2009 09:58 AM

Cám ơn anh, em hiểu rồi, mặc dù báo vậy nhưng vẫn biên dịch được, do em bị lỗi chỗ nào đó (em cũng ko rõ) nên mới bị như vậy, em thử làm một project khác thì đã biên dịch được.

tahi 08-11-2009 11:51 PM

Thư viện MDD (microchip solution) thấy hỗ trợ dòng dsPIC33F, nhưng em tìm mãi mà chẳng thấy chỗ cấu hình giao tiếp phần cứng SPI cho dsPIC33F. Không biết có ai viết giao tiếp thẻ nhớ với dsPIC33F cho em hỏi với.?

Với phần SPI, khi đọc dữ liệu về qua SPI, thì thằng clock của SPI có tự động phát không, hay phải write dummy data vào. Có nghĩa là em muốn đợi response của thằng thẻ nhớ thì chỉ đợi hay phải write dữ liệu giả vào để có clk

npbaoduy 16-12-2009 10:39 PM

lỗi "makes pointer from integer without a cast" là lỗi gì?
 
Em viết hàm như sau:
Code:

float Euclidean_distance(fractional x[13], fractional y[13])
{
        float d;
        unsigned int l;
        d=0;
        for (l=0;l<13;l++)
        {
                d+=(x[l]-y[l])*(x[l]-y[l]);
        }
        d=sqrt(d);
        return d;
}

khi gọi hàm để sử dụng, ví dụ
d= Euclidean_distance(a[13],b[13]) chẳng hạn thì báo 2 warning là: "passing argument 1 of 'Euclidean_distance' makes pointer from integer without a cast" và "passing argument 2 of 'Euclidean_distance' makes pointer from integer without a cast". Chương trình vẫn biên dịch được, nhưng khi đến đoạn gọi hàm đó thì bị reset.
Ai có kinh nghiệm xin chỉ giúp em được ko?

bien_van_khat 17-12-2009 08:35 AM

Trích:

Nguyên văn bởi npbaoduy (Post 32304)
Em viết hàm như sau:
Code:

float Euclidean_distance(fractional x[13], fractional y[13])
{
        float d;
        unsigned int l;
        d=0;
        for (l=0;l<13;l++)
        {
                d+=(x[l]-y[l])*(x[l]-y[l]);
        }
        d=sqrt(d);
        return d;
}

khi gọi hàm để sử dụng, ví dụ
d= Euclidean_distance(a[13],b[13]) chẳng hạn thì báo 2 warning là: "passing argument 1 of 'Euclidean_distance' makes pointer from integer without a cast" và "passing argument 2 of 'Euclidean_distance' makes pointer from integer without a cast". Chương trình vẫn biên dịch được, nhưng khi đến đoạn gọi hàm đó thì bị reset.
Ai có kinh nghiệm xin chỉ giúp em được ko?

Code:

float Euclidean_distance(fractional x[13], fractional y[13])
Mẫu hàm này có nghĩa là bạn phải truyền 2 đối số cho hàm là 2 con trỏ kiểu fractional, 2 con trỏ này trỏ tới mảng kiểu fractional kích thước 13 phần tử.
Code:

d= Euclidean_distance(a[13],b[13])
Khi gọi như trên là bạn đang truyền 2 đối số kiểu fractional.
Bạn phải gọi đúng như sau:
Code:

d= Euclidean_distance(a, b)

npbaoduy 17-12-2009 09:49 AM

Cám ơn anh, nhưng khi em sửa lại là
d = Euclidean_distance(a, b) thì nó warning như sau: "passing argument 2 of 'Euclidean_distance' discards qualifiers from pointer target type".
Em xin nói rõ hơn, mảng a[13] của em là một mảng giá trị thay đổi, lưu giá trị tính toán được trong chương trình, còn mảng b[13] là một mảng hằng số em khai báo trong ROM. Anh có ý kiến gì ko?

bien_van_khat 17-12-2009 10:44 AM

Trích:

Nguyên văn bởi npbaoduy (Post 32314)
Cám ơn anh, nhưng khi em sửa lại là
d = Euclidean_distance(a, b) thì nó warning như sau: "passing argument 2 of 'Euclidean_distance' discards qualifiers from pointer target type".
Em xin nói rõ hơn, mảng a[13] của em là một mảng giá trị thay đổi, lưu giá trị tính toán được trong chương trình, còn mảng b[13] là một mảng hằng số em khai báo trong ROM. Anh có ý kiến gì ko?

Có 2 cách

1 - Với chỉ 13 phần tử bạn hoàn toàn có thể chuyển b[13] về RAM thay vì ROM.

2 - sửa lại khai báo
Code:

float Euclidean_distance(fractional x[13], const fractional y[13])

npbaoduy 23-12-2009 12:46 AM

Cho em hỏi thêm cách tính độ dài của dữ liệu là hằng số ghi trong ROM của dspic
ví dụ em khai báo như sau:
Code:

const unsigned char __attribute__ ((space(psv), address (0x0200)))
        chuoi1[]="Bao Duy 40500441\0";
const fractional __attribute__ ((space(psv), address (0x0400)))
        toi1[13]={4890, 2102, 569, 947, 618, 733, 546, 634, 455, 552, 386, 471, 302};

Lúc biên dịch nó tính độ dài là của chuoi1 là 27byte, của mảng toi1 là 39byte? Sao nó lại tính được như vậy?


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam