PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 06-10-2008, 04:17 PM   #1
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Sửa lỗi

các bác có thể cho em biết khi em biên dịch nó báo lỗi thể này, em không tài nào sửa được. các câu lệnh không lỗi . Có phải đây là lỗi do trình biên dịch hay không?
C:\DOCUME~1\Lenovo\LOCALS~1\Temp/ccy7qmcV.s:7299: Error: Cannot use psvpage on a symbol (_s) that is not located in a code, psv, or eedata section.
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-10-2008, 06:42 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tungnh View Post
các bác có thể cho em biết khi em biên dịch nó báo lỗi thể này, em không tài nào sửa được. các câu lệnh không lỗi . Có phải đây là lỗi do trình biên dịch hay không?
C:\DOCUME~1\Lenovo\LOCALS~1\Temp/ccy7qmcV.s:7299: Error: Cannot use psvpage on a symbol (_s) that is not located in a code, psv, or eedata section.
Với thông tin mà bạn đã đưa, e rằng không thể giúp bạn. Tập tin "ccy7qmcV.s" là tập tin gì mà lại nằm ở một thư mục tạm, và ở dòng 7299 của nó có những gì.

Dựa vào đâu bạn cho rằng câu lệnh không lỗi? Trình biên dịch bạn đang dùng là trình biên dịch gì?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-10-2008, 01:06 AM   #3
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Hi, a Nam thông cảm cho em, tai em mới bập bõm làm quen với dspic nên đoán mò a ạ,
khi biên dịch nó báo lỗi thế này
Link Error: Could not allocate section .data_0x400 at 0x400
Link Error: Could not allocate program memory
Em nghĩ là do câu lệnh sau có vấn đề :
const unsigned char __attribute__ ((space(psv), address (0x0400)))
chuoi0[]=" Lo Nhiet \0",
chuoi1[]= "Dat nhiet do = \0",
chuoi2[]=" Dat kp = \0",
chuoi3[]=" Dat ki = \0",
chuoi4[]=" Dat kd = \0",
chuoi5[]= " Nhiet do thuc = \0";
unsigned char __attribute__ ((space(psv), address (0x0500)))
s[15]; // khai báo biến tạm
Khi em bỏ lệnh : unsigned char __attribute__ ((space(psv), address (0x0500)))
s[15];
nó lại báo lỗi thế này :
C:\DOCUME~1\Lenovo\LOCALS~1\Temp/ccrApifs.s:6362: Error: Cannot use psvpage on a symbol (_s) that is not located in a code, psv, or eedata section.

A sửa giúp em. em dùng con dspic30f4012 , C30 complier
à nếu em muốn xuất số 0.0123 ra LCD. Trong C thường em biết có hàm ftoa để chuyển kiểu float sang kiểu char, vậy trong C30 có hỗ trợ hàm này không anh, anh có thể chỉ cho em thuật toán hiển thị số 0.0123 ra màn hình LCD ko ạ. Cám ơn anh nhiều

thay đổi nội dung bởi: tungnh, 07-10-2008 lúc 09:32 AM.
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 07-10-2008, 07:05 PM   #4
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Cách giải quyết đơn giản là bạn đặt các chuỗi hằng của bạn (chuoi0[], chuoi1[], ...) ở cuối vùng nhớ chương trình của dsPIC (với dsPIC30F4012 thì bạn cứ dùng địa chỉ từ 0x7000 trở lên đến 0x7FFF). Sau khi bạn vừa ý với chương trình đã viết thì mới điều chỉnh vị trí các chuỗi hằng này (hoặc cứ để chúng ở cuối vùng nhớ chương trình cũng chẳng sao). Như vậy sẽ tránh việc code của bạn đè lên các chuỗi hằng này khi chương trình dài ra, dẫn đến lỗi cấp phát bộ nhớ như bạn đã thấy.

Về các biến, bạn không dùng thuộc tính psv cho chúng, vì chúng được lưu vào RAM chứ không lưu vào bộ nhớ chương trình hay EEPROM. Chẳng hạn, biến s của bạn chỉ cần khai báo như sau:
Code:
	unsigned char s[15];
Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-10-2008, 04:24 PM   #5
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Cám ơn anh Nam nhé, e đã sủa được rồi . Em đọc và sủa như sau:
const unsigned char __attribute__ ((space(auto_psv)))
chuoi0[]=" cty CEVT \0",
chuoi1[]= "Dat nhiet do = \0",
chuoi2[]=" Dat kp = \0",
chuoi3[]=" Dat ki = \0",
chuoi4[]=" Dat kd = \0",
chuoi5[]= " Nhiet do thuc = \0";
unsigned char __attribute__ ((space(auto_psv)))
s[15];
Em để tự động định địa chỉ.
Thưa anh, em muốn hỏi anh ở phần hiển thị LCD. Trong tutorial 4 của anh có sử dụng các tín hiệu data của LCD cho cổng E. Nhưng giờ em muốn nối thể này (tại em làm tiếp cái của người khác đang làm ) : Cổng F cho D4,D5 ; E4,E5 cho D6,D7. Giờ em khai báo như thế này có được không :
Code:
#define	LCD_DAT1	LATE			
#define	LCD_TRIS1	TRISE
#define   LCD_TAM	             LATF
#define   LCD_TRIS2	TRISF
void Init_PORTS(void)
    LCD_DAT1&= 0xFF;
    LCD_TAM&= 0xF0;
    LCD_TRIS1 = 0xFF;
    LCD_TRIS2 = 0XF0;
còn ở hàm LCD_cmd4() và hàm LCD_dat4() thì em viết lại như sau:
void LCD_cmd4(unsigned char cmd) {
     unsigned temp1, i;
    //LATDbits.LCD_RW = 0;
     LATBbits.LCD_RS = 0;		//Dat che do xuat lenh
    temp1 = LCD_DAT1 & 0xFF	;	//Lay trang thai hien thoi cua LCD_DAT
    LCD_DAT1 = temp1 | (cmd >> 4);	//Xuat 4 bit cao
    LATBbits.LCD_EN = 1;		//Tao xung Enable
    for (i = 0; i < 2; i++);	//keo dai toi thieu 1 us
    LATBbits.LCD_EN = 0;
    temp1 = LCD_TAM & 0xF0;	//Lay trang thai hien thoi cua LCD_DAT1
    LCD_TAM = temp1 | (cmd & 0x0F);	//Xuat 4 bit thap
    LATBbits.LCD_EN = 1;		//Tao xung Enable
    for (i = 0; i < 2; i++);	//keo dai toi thieu 1 us
    LATBbits.LCD_EN = 0;
				}

//Chuong trinh con xuat du lieu o che do 4 bit
//------------------------------------------------------------------------------
void LCD_dat4(unsigned char dat) {
    unsigned temp2, i;
    //LATDbits.LCD_RW = 0;
    LATBbits.LCD_RS = 1;		//Dat che do xuat du lieu
    temp2 = LCD_DAT1 & 0xFF;	//Lay trang thai hien thoi cua LCD_DAT
    LCD_DAT1 = temp2 | (dat >> 4);	//Xuat 4 bit cao
    LATBbits.LCD_EN = 1;		//Tao xung Enable
    for (i = 0; i < 2; i++);	//keo dai toi thieu 1 us
    LATBbits.LCD_EN = 0;
    temp2 = LCD_TAM & 0xF0;	//Lay trang thai hien thoi cua LCD_DAT
    LCD_TAM = temp2 | (dat & 0x0F);	//Xuat 4 bit thap
    LATBbits.LCD_EN = 1;		//Tao xung Enable
    for (i = 0; i < 2; i++);	//keo dai toi thieu 1 us
    LATBbits.LCD_EN = 0;
				}
Mạc dù em biên dịch không báo lỗi nhưng khi nắp mạch thật thì không hiển thị được LCD. Mong anh giúp em !

thay đổi nội dung bởi: tungnh, 08-10-2008 lúc 04:37 PM.
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-10-2008, 11:47 PM   #6
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Code của tôi dùng cho trường hợp 4 bit dữ liệu vào ra LCD nằm ở 4-bit của port E. Bạn dùng cả hai port E và F để xuất/nhập dữ liệu với LCD thì trước khi xuất xung Enable bạn phải thao tác dữ liệu trên cả hai port E và F, để ghi ra LCD. Code hiện thời của bạn chưa làm được điều đó.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam