PDA

View Full Version : Pic 18f452 Project error


ayuh
05-01-2008, 01:10 PM
Trong quá trình compiler project mình gặp phải những lỗi mà không biết khắc phục như thế nào.

Các bạn thử down project về compiler thử.ai biết lỗi thì sửa dùm mình nhé!

Sau đây mình xin post project đính kèm.

File project trong thu muc ...\huy\Demo\PIC

Cám ơn rất nhiều!

namqn
05-01-2008, 03:43 PM
Trong quá trình compiler project mình gặp phải những lỗi mà không biết khắc phục như thế nào.

Các bạn thử down project về compiler thử.ai biết lỗi thì sửa dùm mình nhé!

Sau đây mình xin post project đính kèm.

File project trong thu muc ...\huy\Demo\PIC

Cám ơn rất nhiều!
Bạn chỉ cần copy các thông báo lỗi và post lên diễn đàn, cùng với mã nguồn. Người khác download project của bạn về có khả năng không biên dịch được, vì tổ chức thư mục của máy khác nhau, và có khả năng thư mục cài đặt các tool MPLAB cũng khác nhau.

Thân,

ayuh
11-01-2008, 01:17 PM
Đây là thông báo của MPLAB

MPLINK 4.03, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.udata_portheap.o' can not fit the section. Section '.udata_portheap.o' length=0x00000476
Errors : 1

Còn đây là mã dòg lệnh bị lỗi

typedef struct
{
unsigned portCHAR ucFull;
unsigned portCHAR ucBlock[ heapSMALL_BLOCK_SIZE ];
} xSmallBlock;

typedef struct
{
unsigned portCHAR ucFull;
unsigned portCHAR ucBlock[ heapLARGE_BLOCK_SIZE ];

} xLargeBlock;

ayuh
11-01-2008, 01:21 PM
Đây là thông báo của MPLAB

MPLINK 4.03, Linker
Copyright (c) 2006 Microchip Technology Inc.
Error - section '.udata_portheap.o' can not fit the section. Section '.udata_portheap.o' length=0x00000476
Errors : 1

Còn đây là mã dòg lệnh bị lỗi

typedef struct
{
unsigned portCHAR ucFull;
unsigned portCHAR ucBlock[ heapSMALL_BLOCK_SIZE ];
} xSmallBlock;

typedef struct
{
unsigned portCHAR ucFull;
unsigned portCHAR ucBlock[ heapLARGE_BLOCK_SIZE ];

} xLargeBlock;

Mà không hiểu tại sao mạch nạp của em lại không thể nạp cho con PIC18f452 này?
mạch của em là GTP_USB

namqn
11-01-2008, 11:31 PM
Các hằng số heapSMALL_BLOCK_SIZE và heapLARGE_BLOCK_SIZE được khai báo ra sao? Tôi có đề nghị bạn post cả mã nguồn nữa, chỉ có thông báo lỗi không thì đa số chúng tôi sẽ thành thầy bói mù xem voi.

Thân,

ayuh
13-01-2008, 09:43 PM
#define heapSMALL_BLOCK_SIZE ( 45 )
#define heapLARGE_BLOCK_SIZE portMINIMAL_STACK_SIZE

/* These are the number of blocks required by the demo applications. */
#define heapNUM_SMALL_BLOCKS ( 11 )
#define heapNUM_LARGE_BLOCKS ( 6 )


Cho em hỏi cách config con 18f452 dùng thạch anh 8MHz được không ah?
em viết chương trình cho pic 18f452 mà không nạp được!

namqn
14-01-2008, 12:11 AM
Tôi đã xem qua tập tin .rar mà bạn đã gửi lên ở post #1, và thấy rằng bạn đang định dùng FreeRTOS. Đề nghị bạn đọc kỹ những hướng dẫn của FreeRTOS và lọc ra những thư mục không cần thiết trước khi post câu hỏi (tập tin mà bạn đã post lên chứa nhiều thư mục dành cho các target chip khác, không hề liên quan đến PIC).

Thân,

ayuh
24-01-2008, 09:57 PM
Cho em hỏi về cổng 18f452.
Nếu muốn cấu hình cổng của pic là cổng I/0(cổng vừa đọc vừa ghi)thì làm thế nào?
Theo em biết thì chỉ có cổng D trong pic này mới có chức năg này phải không a!
cho em hỏi thêm về cách phân biệt giũa thanh ghi LAT và PORT.
Vì em thấy trong pic này thì hầu như đọc và ghi đều sử dụng PORT

namqn
24-01-2008, 11:02 PM
Cho em hỏi về cổng 18f452.
Nếu muốn cấu hình cổng của pic là cổng I/0(cổng vừa đọc vừa ghi)thì làm thế nào?
Theo em biết thì chỉ có cổng D trong pic này mới có chức năg này phải không a!
cho em hỏi thêm về cách phân biệt giũa thanh ghi LAT và PORT.
Vì em thấy trong pic này thì hầu như đọc và ghi đều sử dụng PORT
Tất cả các port của PIC18F452 đều có thể dùng làm I/O. Việc một chân nào đó của một port là ngõ vào hay ngõ ra tùy thuộc vào bit tương ứng của thanh ghi điều khiển tri-state của nó (các thanh ghi TRISx, x = A, B, ..., E), và người lập trình sẽ thiết lập giá trị của các bit trong các thanh ghi tri-state này theo yêu cầu của họ. Bit tri-state được bật lên '1' có nghĩa là chân tương ứng là ngõ vào (input), bit tri-state được xóa về '0' có nghĩa là chân tương ứng là ngõ ra (output). Để dễ nhớ thì có thể hình dung 1 = I(nput), 0 = O(utput).

Thanh ghi LAT dùng để xuất dữ liệu ra port, còn thanh ghi PORT dùng để đọc dữ liệu từ port. Thanh ghi LAT xuất hiện trong PIC18 để giải quyết vấn đề hiệu ứng read-modify-write xuất hiện trong các dòng PIC base-line và mid-range (PIC12, PIC16).

Thân,

wantanamo69
15-03-2008, 08:25 AM
Tất cả các port của PIC18F452 đều có thể dùng làm I/O. Việc một chân nào đó của một port là ngõ vào hay ngõ ra tùy thuộc vào bit tương ứng của thanh ghi điều khiển tri-state của nó (các thanh ghi TRISx, x = A, B, ..., E), và người lập trình sẽ thiết lập giá trị của các bit trong các thanh ghi tri-state này theo yêu cầu của họ. Bit tri-state được bật lên '1' có nghĩa là chân tương ứng là ngõ vào (input), bit tri-state được xóa về '0' có nghĩa là chân tương ứng là ngõ ra (output). Để dễ nhớ thì có thể hình dung 1 = I(nput), 0 = O(utput).

Thanh ghi LAT dùng để xuất dữ liệu ra port, còn thanh ghi PORT dùng để đọc dữ liệu từ port. Thanh ghi LAT xuất hiện trong PIC18 để giải quyết vấn đề hiệu ứng read-modify-write xuất hiện trong các dòng PIC base-line và mid-rang (PIC12, PIC16).

Thân,

;//////////////////////////////////////////////

Nhu ban namqn da noi tren thi that dung, toi bo xung them:

Ban co the sai cac port.PIN thanh Input hay Output tuy-y (fai chieu theo data sheet). Vi du ban dang sai RA.1 thanh Input ma ban muon doi no thanh output thi cu viec set cai TRISA.1 thanh LOW (tuc la = 0 cho out put). Doi khi ban muon sai nhu vay neu ban viet I2C software; ban doi DATA pin thanh IN de doc va thanh OUT de viet vao I2C. Nhung neu ban da gan pin nao do vao LED vi-du, thi READ cung khong co ich gi.

Hy-vong that help,

LB

;/////////////////// --- THI DU ---///////////////////// --- in MCC18 ---

/--------------------------------------------
I2CBITOUT routine viet mot byte sang I2C
//-------------------------------------------

void I2CBITOUT(byte n) {

I2CDataTris=0; // CHU-Y: cho pin nay thanh OUTPUT
if(n) //
m_I2CDataBit=1; // doi logic
else
m_I2CDataBit=0;
Nop();
Nop();
m_I2CClkBit=1; // set clock line high
I2CDelay();
m_I2CClkBit=0; // return clock line low
I2CDelay();

}

//------------------------------------------
I2CBITIN routine doc mot byte tu I2C
//------------------------------------------

byte I2CBITIN(void) {
byte i;

I2CDataTris=1; // bien data line thanh INPUT de doc byte
I2CDelay();
m_I2CClkBit=1; // set clock line high
I2CDelay(); // cho chut siu
i = m_I2CDataBit ? 1 : 0; // read the data bit
m_I2CClkBit=0; // set clock line low
return i;
}

;////////////////////// --- thi du in ASM --- //////////////////////

;
;-------------------------------
;///////////////////////////////

; BITOUT sub for ext EEprom
;--------
;
BITOUT

bcf LATA,0 ; -- doi lai 06/25/05 --
bcf TRISA,0 ; cho Sdata Output

btfss Temp4,do ; bitFLAG,do ; check for state of data
goto bitlow ; if low then
bsf Sdata ; output a ---- HI BIT ----
goto clkout ; go toggle the clock
bitlow
bcf Sdata ; else output a ---- LOW BIT ----
clkout
bsf Sclk ; set clk line HI
call delayEE0 ; ___/"""""\___
bcf Sclk ; set clk line low
bcf Sdata ; 04/20/20 da chay tot
nop

retlw 0
;
;-------------------------------
;///////////////////////////////

; BITIN sub: Read one bit of data from ee and store it in di
;-------- for ext EEprom ------
;
BITIN
bcf Sdata ; ok
nop ; ok
nop ; ok

bsf LATA,0 ; DOI LATA TO B HAY C TUY THEO port --
bsf TRISA,0 ; cho Sdata INPUT

bsf Sclk ; set clock line HI __/""
;--
call delayEE001 ; OK
btfsc Sdata ; jb Sdata,btin1
goto btin1
bcf Temp4,di ; bitFlag,di ; input bit was LOW
goto btin2
btin1
bsf Temp4,di ; bitFlag,di
btin2
bcf Sclk ; set clock line LOW too ""\__
nop ; ok

retlw 0 ; -- khi ve thi di da co mot byte cua data --

;-------------------------------
;

Hy vong cai nay giup,

LB

ayuh
19-03-2008, 04:33 PM
Cho em hỏi về chân PWM trong 18f452.
như ở dspic thì có các chân cụ thể để fuc vụ modul
PWM.Còn trong 18f thì sao không thấy nhỉ?

namqn
19-03-2008, 06:42 PM
Cho em hỏi về chân PWM trong 18f452.
như ở dspic thì có các chân cụ thể để fuc vụ modul
PWM.Còn trong 18f thì sao không thấy nhỉ?
PIC18F452 có các chân CCP1 và CCP2 là ngõ ra của các bộ CCP làm việc ở chế độ PWM, tương tự như trong các PIC16 có bộ CCP.

Nếu dùng để điều khiển động cơ và cần nhiều ngõ ra PWM, bạn nên dùng họ PIC18xx31.

Thân,